summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO2
-rw-r--r--mk/toolchain.mk2
-rw-r--r--mk/vars.mk12
-rw-r--r--package/Config.in1
-rw-r--r--package/Makefile3
-rw-r--r--package/eglibc/Config.in9
-rw-r--r--package/eglibc/Makefile34
-rw-r--r--target/Config.in16
-rw-r--r--target/lemote/device.mk6
-rw-r--r--target/linux/patches/2.6.30.5/cygwin-compat.patch66
-rw-r--r--target/linux/patches/2.6.30.5/freebsd-compat.patch11
-rw-r--r--target/linux/patches/2.6.30.5/mips-delay-fix.patch27
-rw-r--r--target/linux/patches/2.6.30.5/mtd-root.patch62
-rw-r--r--target/linux/patches/2.6.30.5/ocf.patch23653
-rw-r--r--target/linux/patches/2.6.30.5/swconfig.patch1075
-rw-r--r--target/linux/patches/2.6.30.5/yaffs2.patch15066
-rw-r--r--target/qemu-mips/device.mk6
-rw-r--r--target/qemu-mips/files/etc/inittab4
-rw-r--r--target/qemu-mips64/files/etc/inittab4
-rw-r--r--target/qemu-mips64el/files/etc/inittab4
-rw-r--r--target/qemu-mipsel/files/etc/inittab4
-rw-r--r--target/qemu-x86/Makefile3
-rw-r--r--target/qemu-x86/device.mk4
-rw-r--r--toolchain/Makefile23
-rw-r--r--toolchain/binutils/Makefile4
-rw-r--r--toolchain/eglibc/Makefile101
-rw-r--r--toolchain/eglibc/Makefile.inc8
-rw-r--r--toolchain/eglibc/eglibc.config26
-rw-r--r--toolchain/eglibc/patches/gcc_eh.patch18
-rw-r--r--toolchain/gcc/Makefile80
-rw-r--r--toolchain/gcc/Makefile.inc2
-rw-r--r--toolchain/gdb/Makefile2
-rw-r--r--toolchain/glibc/Makefile98
-rw-r--r--toolchain/glibc/Makefile.inc4
-rw-r--r--toolchain/gmp/Makefile4
-rw-r--r--toolchain/mpfr/Makefile4
-rw-r--r--toolchain/uClibc/Makefile2
37 files changed, 40340 insertions, 110 deletions
diff --git a/TODO b/TODO
index 895f3c6a7..23d97e3e6 100644
--- a/TODO
+++ b/TODO
@@ -3,10 +3,8 @@
- fix init scripts pidof? vs. killall
- rpath libtool problem fix
- bind isc 9.6.1
-- eglibc support
- check mips -mno-abicalls
- check ac_cv_func_setpgrp_void=no
-- kernel 2.6.30
- freebsd build
- win cygwin build
- netbsd build
diff --git a/mk/toolchain.mk b/mk/toolchain.mk
index 2701736ca..6a181a444 100644
--- a/mk/toolchain.mk
+++ b/mk/toolchain.mk
@@ -1,5 +1,5 @@
prepare: ${WRKDIST}/.prepared $(WRKBUILD)/.headers
-configure: ${WRKBUILD}/.configure_done
+configure: ${WRKBUILD}/.configured
compile: $(WRKBUILD)/.compiled
install: $(WRKBUILD)/.installed
clean:
diff --git a/mk/vars.mk b/mk/vars.mk
index 1b7a7ac8c..23e82967e 100644
--- a/mk/vars.mk
+++ b/mk/vars.mk
@@ -37,16 +37,16 @@ PACKAGE_DIR:= $(BIN_DIR)/packages
TARGET_DIR:= $(BASE_DIR)/root_${DEVICE}
TARGET_DIR_PFX:= $(BASE_DIR)/root_*
TARGET_PATH= ${SCRIPT_DIR}:${STAGING_TOOLS}/bin:${STAGING_DIR}/scripts:${_PATH}
-ifeq ($(ADK_TARGET_LIB_GLIBC),y)
-REAL_GNU_TARGET_NAME= $(CPU_ARCH)-linux-gnu
-GNU_TARGET_NAME= $(CPU_ARCH)-linux
-KERNEL_CROSS:= $(STAGING_TOOLS)/bin/$(CPU_ARCH)-linux-gnu-
-TARGET_CROSS:= $(STAGING_TOOLS)/bin/$(CPU_ARCH)-linux-gnu-
-else
+ifeq ($(ADK_TARGET_LIB_UCLIBC),y)
REAL_GNU_TARGET_NAME= $(CPU_ARCH)-linux-uclibc
GNU_TARGET_NAME= $(CPU_ARCH)-linux
KERNEL_CROSS:= $(STAGING_TOOLS)/bin/$(CPU_ARCH)-linux-uclibc-
TARGET_CROSS:= $(STAGING_TOOLS)/bin/$(CPU_ARCH)-linux-uclibc-
+else
+REAL_GNU_TARGET_NAME= $(CPU_ARCH)-linux-gnu
+GNU_TARGET_NAME= $(CPU_ARCH)-linux
+KERNEL_CROSS:= $(STAGING_TOOLS)/bin/$(CPU_ARCH)-linux-gnu-
+TARGET_CROSS:= $(STAGING_TOOLS)/bin/$(CPU_ARCH)-linux-gnu-
endif
TOOLCHAIN_SYSROOT:= $(TOOLCHAIN_BUILD_DIR)/libc_dev
TARGET_COMPILER_PREFIX?=${TARGET_CROSS}
diff --git a/package/Config.in b/package/Config.in
index 96aeec3aa..889f58686 100644
--- a/package/Config.in
+++ b/package/Config.in
@@ -11,6 +11,7 @@ source "package/busybox/Config.in"
source "package/cfgfs/Config.in"
source "package/uclibc/Config.in"
source "package/glibc/Config.in"
+source "package/eglibc/Config.in"
source "package/libc/Config.in"
source "package/rpm/Config.in"
endmenu
diff --git a/package/Makefile b/package/Makefile
index 68d6cc5f5..3b00cfb0b 100644
--- a/package/Makefile
+++ b/package/Makefile
@@ -107,6 +107,9 @@ package-$(ADK_PACKAGE_GLIB) += glib
ifeq (${ADK_TARGET_LIB_GLIBC},y)
package-$(ADK_PACKAGE_GLIBC) += glibc
endif
+ifeq (${ADK_TARGET_LIB_EGLIBC},y)
+package-$(ADK_PACKAGE_EGLIBC) += eglibc
+endif
ifeq (${ADK_NATIVE},y)
package-$(ADK_PACKAGE_LIBC) += libc
endif
diff --git a/package/eglibc/Config.in b/package/eglibc/Config.in
new file mode 100644
index 000000000..80b6ad6d7
--- /dev/null
+++ b/package/eglibc/Config.in
@@ -0,0 +1,9 @@
+config ADK_PACKAGE_EGLIBC
+ prompt "eglibc............................... embedded GNU C library"
+ bool
+ default y if ADK_TARGET_LIB_EGLIBC
+ default n
+ depends on ADK_TARGET_LIB_EGLIBC
+ help
+ embedded GNU C library.
+
diff --git a/package/eglibc/Makefile b/package/eglibc/Makefile
new file mode 100644
index 000000000..d8bec6f9c
--- /dev/null
+++ b/package/eglibc/Makefile
@@ -0,0 +1,34 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(TOPDIR)/rules.mk
+include $(TOPDIR)/toolchain/eglibc/Makefile.inc
+
+PKG_DESCR:= embedded GNU C library
+PKG_SECTION:= base
+NO_DISTFILES:= 1
+
+include $(TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,EGLIBC,$(PKG_NAME),$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+do-extract:
+
+# do nothing, eglibc is already build in toolchain directory
+do-install:
+ ${INSTALL_DIR} $(IDIR_EGLIBC)/lib $(IDIR_EGLIBC)/etc
+ # install /etc/localtime from host system (FIXME)
+ ${CP} /etc/localtime $(IDIR_EGLIBC)/etc
+ifeq ($(ADK_SSP),y)
+ $(CP) $(STAGING_DIR)/lib/libssp.so* $(IDIR_EGLIBC)/lib/
+endif
+ $(CP) $(STAGING_DIR)/lib/libgcc_s.so.* $(IDIR_EGLIBC)/lib/
+ $(CP) $(STAGING_DIR)/lib/ld-*.so* $(IDIR_EGLIBC)/lib/
+ -for file in libc libcrypt libdl libm libresolv librt libutil libnss_compat libnss_dns libnss_files; do \
+ $(CP) $(STAGING_DIR)/lib/$$file.so.* $(IDIR_EGLIBC)/lib/; \
+ $(CP) $(STAGING_DIR)/lib/$$file-$(PKG_VERSION).so $(IDIR_EGLIBC)/lib/; \
+ done
+ # create ld.so link for ldd
+ cd $(IDIR_EGLIBC)/lib && ln -sf ld-$(PKG_VERSION).so ld.so
+
+include ${TOPDIR}/mk/pkg-bottom.mk
diff --git a/target/Config.in b/target/Config.in
index b2c29d0d0..b29bab13e 100644
--- a/target/Config.in
+++ b/target/Config.in
@@ -316,6 +316,21 @@ config ADK_TARGET_LIB_UCLIBC
help
http://uclibc.org
+config ADK_TARGET_LIB_EGLIBC
+ bool "Embedded GNU C library"
+ depends on ADK_LINUX_X86_QEMU || \
+ ADK_LINUX_MIPS_QEMU || \
+ ADK_LINUX_MIPS64_QEMU || \
+ ADK_LINUX_MIPSEL_QEMU || \
+ ADK_LINUX_MIPS64EL_QEMU || \
+ ADK_LINUX_X86_ALIX1C || \
+ ADK_LINUX_MIPS_RB411 || \
+ ADK_LINUX_MIPS_RB532 || \
+ ADK_LINUX_RESCUE || \
+ ADK_LINUX_MIPS64_LEMOTE
+ help
+ http://www.eglibc.org
+
config ADK_TARGET_LIB_GLIBC
bool "GNU C library"
depends on ADK_LINUX_X86_QEMU || \
@@ -330,6 +345,7 @@ config ADK_TARGET_LIB_GLIBC
ADK_LINUX_MIPS64_LEMOTE
help
http://www.gnu.org/libc
+
endchoice
choice
diff --git a/target/lemote/device.mk b/target/lemote/device.mk
index da4314e84..52cc097fc 100644
--- a/target/lemote/device.mk
+++ b/target/lemote/device.mk
@@ -1,7 +1,7 @@
ARCH:= mips
CPU_ARCH:= mips64el
-KERNEL_VERSION:= 2.6.30
+KERNEL_VERSION:= 2.6.30.5
KERNEL_RELEASE:= 1
-KERNEL_MD5SUM:= 7a80058a6382e5108cdb5554d1609615
-TARGET_OPTIMIZATION:= -O2 -pipe
+KERNEL_MD5SUM:= be9c3a697a54ac099c910d068ff0dc03
+TARGET_OPTIMIZATION:= -Os -pipe
TARGET_CFLAGS_ARCH:= -march=loongson2f -mabi=64
diff --git a/target/linux/patches/2.6.30.5/cygwin-compat.patch b/target/linux/patches/2.6.30.5/cygwin-compat.patch
new file mode 100644
index 000000000..8d087dddf
--- /dev/null
+++ b/target/linux/patches/2.6.30.5/cygwin-compat.patch
@@ -0,0 +1,66 @@
+diff -Nur linux-2.6.30.orig/scripts/mod/file2alias.c linux-2.6.30/scripts/mod/file2alias.c
+--- linux-2.6.30.orig/scripts/mod/file2alias.c 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/scripts/mod/file2alias.c 2009-06-11 09:17:10.000000000 +0200
+@@ -29,7 +29,11 @@
+
+ #include <ctype.h>
+
++#ifdef __CYGWIN__
++typedef __uint32_t __u32;
++#else
+ typedef uint32_t __u32;
++#endif
+ typedef uint16_t __u16;
+ typedef unsigned char __u8;
+
+diff -Nur linux-2.6.30.orig/scripts/mod/modpost.h linux-2.6.30/scripts/mod/modpost.h
+--- linux-2.6.30.orig/scripts/mod/modpost.h 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/scripts/mod/modpost.h 2009-06-11 09:17:10.000000000 +0200
+@@ -9,6 +9,11 @@
+ #include <unistd.h>
+ #include <elf.h>
+
++#ifdef __CYGWIN__
++typedef uint16_t Elf32_Section;
++typedef uint16_t Elf64_Section;
++#endif
++
+ #include "elfconfig.h"
+
+ #if KERNEL_ELFCLASS == ELFCLASS32
+@@ -19,13 +24,17 @@
+ #define Elf_Addr Elf32_Addr
+ #define Elf_Sword Elf64_Sword
+ #define Elf_Section Elf32_Half
++#ifndef __CYGWIN__
+ #define ELF_ST_BIND ELF32_ST_BIND
+ #define ELF_ST_TYPE ELF32_ST_TYPE
++#endif
+
+ #define Elf_Rel Elf32_Rel
+ #define Elf_Rela Elf32_Rela
++#ifndef __CYGWIN__
+ #define ELF_R_SYM ELF32_R_SYM
+ #define ELF_R_TYPE ELF32_R_TYPE
++#endif
+ #else
+
+ #define Elf_Ehdr Elf64_Ehdr
+@@ -43,6 +52,17 @@
+ #define ELF_R_TYPE ELF64_R_TYPE
+ #endif
+
++#define R_386_32 1 /* Direct 32 bit */
++#define R_386_PC32 2 /* PC relative 32 bit */
++
++#define R_ARM_PC24 1 /* PC relative 26 bit branch */
++#define R_ARM_ABS32 2 /* Direct 32 bit */
++
++#define R_MIPS_32 2 /* Direct 32 bit */
++#define R_MIPS_26 4 /* Direct 26 bit shifted */
++#define R_MIPS_HI16 5 /* High 16 bit */
++#define R_MIPS_LO16 6 /* Low 16 bit */
++
+ /* The 64-bit MIPS ELF ABI uses an unusual reloc format. */
+ typedef struct
+ {
diff --git a/target/linux/patches/2.6.30.5/freebsd-compat.patch b/target/linux/patches/2.6.30.5/freebsd-compat.patch
new file mode 100644
index 000000000..051fdc63e
--- /dev/null
+++ b/target/linux/patches/2.6.30.5/freebsd-compat.patch
@@ -0,0 +1,11 @@
+diff -Nur linux-2.6.30.orig/arch/x86/boot/tools/build.c linux-2.6.30/arch/x86/boot/tools/build.c
+--- linux-2.6.30.orig/arch/x86/boot/tools/build.c 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/arch/x86/boot/tools/build.c 2009-06-11 09:18:50.000000000 +0200
+@@ -29,7 +29,6 @@
+ #include <stdarg.h>
+ #include <sys/types.h>
+ #include <sys/stat.h>
+-#include <sys/sysmacros.h>
+ #include <unistd.h>
+ #include <fcntl.h>
+ #include <sys/mman.h>
diff --git a/target/linux/patches/2.6.30.5/mips-delay-fix.patch b/target/linux/patches/2.6.30.5/mips-delay-fix.patch
new file mode 100644
index 000000000..128ed54ec
--- /dev/null
+++ b/target/linux/patches/2.6.30.5/mips-delay-fix.patch
@@ -0,0 +1,27 @@
+From: Atsushi Nemoto <nemoto@toshiba-tops.co.jp>
+Subject: [PATCH] fix __ndelay build error and add 'ull' suffix for 32-bit kernel
+
+Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
+---
+ arch/mips/lib/delay.c | 4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+--- a/arch/mips/lib/delay.c
++++ b/arch/mips/lib/delay.c
+@@ -43,7 +43,7 @@ void __udelay(unsigned long us)
+ {
+ unsigned int lpj = current_cpu_data.udelay_val;
+
+- __delay((us * 0x000010c7 * HZ * lpj) >> 32);
++ __delay((us * 0x000010c7ull * HZ * lpj) >> 32);
+ }
+ EXPORT_SYMBOL(__udelay);
+
+@@ -51,6 +51,6 @@ void __ndelay(unsigned long ns)
+ {
+ unsigned int lpj = current_cpu_data.udelay_val;
+
+- __delay((us * 0x00000005 * HZ * lpj) >> 32);
++ __delay((ns * 0x00000005ull * HZ * lpj) >> 32);
+ }
+ EXPORT_SYMBOL(__ndelay);
diff --git a/target/linux/patches/2.6.30.5/mtd-root.patch b/target/linux/patches/2.6.30.5/mtd-root.patch
new file mode 100644
index 000000000..3576848be
--- /dev/null
+++ b/target/linux/patches/2.6.30.5/mtd-root.patch
@@ -0,0 +1,62 @@
+diff -Nur linux-2.6.29.1.orig/drivers/mtd/Kconfig linux-2.6.29.1/drivers/mtd/Kconfig
+--- linux-2.6.29.1.orig/drivers/mtd/Kconfig 2009-04-02 22:55:27.000000000 +0200
++++ linux-2.6.29.1/drivers/mtd/Kconfig 2009-05-02 19:24:14.444062164 +0200
+@@ -53,6 +53,11 @@
+ should normally be compiled as kernel modules. The modules perform
+ various checks and verifications when loaded.
+
++config MTD_ROOTFS_ROOT_DEV
++ bool "Automatically set 'rootfs' partition to be root filesystem"
++ depends on MTD_PARTITIONS
++ default y
++
+ config MTD_REDBOOT_PARTS
+ tristate "RedBoot partition table parsing"
+ depends on MTD_PARTITIONS
+diff -Nur linux-2.6.29.1.orig/drivers/mtd/mtdpart.c linux-2.6.29.1/drivers/mtd/mtdpart.c
+--- linux-2.6.29.1.orig/drivers/mtd/mtdpart.c 2009-04-02 22:55:27.000000000 +0200
++++ linux-2.6.29.1/drivers/mtd/mtdpart.c 2009-05-02 19:26:39.038093851 +0200
+@@ -18,6 +18,7 @@
+ #include <linux/mtd/mtd.h>
+ #include <linux/mtd/partitions.h>
+ #include <linux/mtd/compatmac.h>
++#include <linux/root_dev.h>
+
+ /* Our partition linked list */
+ static LIST_HEAD(mtd_partitions);
+@@ -37,7 +38,7 @@
+ * the pointer to that structure with this macro.
+ */
+ #define PART(x) ((struct mtd_part *)(x))
+-
++#define IS_PART(mtd) (mtd->read == part_read)
+
+ /*
+ * MTD methods which simply translate the effective address and pass through
+@@ -502,14 +503,23 @@
+ {
+ struct mtd_part *slave;
+ uint64_t cur_offset = 0;
+- int i;
++ int i, j, ret;
+
+ printk(KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", nbparts, master->name);
+
+- for (i = 0; i < nbparts; i++) {
+- slave = add_one_partition(master, parts + i, i, cur_offset);
++ for (i = 0, j = 0; i < nbparts; i++) {
++ slave = add_one_partition(master, parts + i, j++, cur_offset);
+ if (!slave)
+ return -ENOMEM;
++ if (!strcmp(parts[i].name, "rootfs") && slave->registered) {
++#ifdef CONFIG_MTD_ROOTFS_ROOT_DEV
++ if (ROOT_DEV == 0) {
++ printk(KERN_NOTICE "mtd: partition \"rootfs\" "
++ "set to be root filesystem\n");
++ ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, slave->mtd.index);
++ }
++#endif
++ }
+ cur_offset = slave->offset + slave->mtd.size;
+ }
+
diff --git a/target/linux/patches/2.6.30.5/ocf.patch b/target/linux/patches/2.6.30.5/ocf.patch
new file mode 100644
index 000000000..64c5eeb0f
--- /dev/null
+++ b/target/linux/patches/2.6.30.5/ocf.patch
@@ -0,0 +1,23653 @@
+diff -Nur linux-2.6.30.orig/crypto/Kconfig linux-2.6.30/crypto/Kconfig
+--- linux-2.6.30.orig/crypto/Kconfig 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/crypto/Kconfig 2009-06-11 10:55:27.000000000 +0200
+@@ -781,3 +781,5 @@
+ source "drivers/crypto/Kconfig"
+
+ endif # if CRYPTO
++
++source "crypto/ocf/Kconfig"
+diff -Nur linux-2.6.30.orig/crypto/Makefile linux-2.6.30/crypto/Makefile
+--- linux-2.6.30.orig/crypto/Makefile 2009-06-10 05:05:27.000000000 +0200
++++ linux-2.6.30/crypto/Makefile 2009-06-11 10:55:27.000000000 +0200
+@@ -84,6 +84,8 @@
+ obj-$(CONFIG_CRYPTO_ANSI_CPRNG) += ansi_cprng.o
+ obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o
+
++obj-$(CONFIG_OCF_OCF) += ocf/
++
+ #
+ # generic algorithms and the async_tx api
+ #
+diff -Nur linux-2.6.30.orig/crypto/ocf/Config.in linux-2.6.30/crypto/ocf/Config.in
+--- linux-2.6.30.orig/crypto/ocf/Config.in 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.30/crypto/ocf/Config.in 2009-06-11 10:55:27.000000000 +0200
+@@ -0,0 +1,34 @@
++#############################################################################
++
++mainmenu_option next_comment
++comment 'OCF Configuration'
++tristate 'OCF (Open Cryptograhic Framework)' CONFIG_OCF_OCF
++dep_mbool ' enable fips RNG checks (fips check on RNG data before use)' \
++ CONFIG_OCF_FIPS $CONFIG_OCF_OCF
++dep_mbool ' enable harvesting entropy for /dev/random' \
++ CONFIG_OCF_RANDOMHARVEST $CONFIG_OCF_OCF
++dep_tristate ' cryptodev (user space support)' \
++ CONFIG_OCF_CRYPTODEV $CONFIG_OCF_OCF
++dep_tristate ' cryptosoft (software crypto engine)' \
++ CONFIG_OCF_CRYPTOSOFT $CONFIG_OCF_OCF
++dep_tristate ' safenet (HW crypto engine)' \
++ CONFIG_OCF_SAFE $CONFIG_OCF_OCF
++dep_tristate ' IXP4xx (HW crypto engine)' \
++ CONFIG_OCF_IXP4XX $CONFIG_OCF_OCF
++dep_mbool ' Enable IXP4xx HW to perform SHA1 and MD5 hashing (very slow)' \
++ CONFIG_OCF_IXP4XX_SHA1_MD5 $CONFIG_OCF_IXP4XX
++dep_tristate ' hifn (HW crypto engine)' \
++ CONFIG_OCF_HIFN $CONFIG_OCF_OCF
++dep_tristate ' talitos (HW crypto engine)' \
++ CONFIG_OCF_TALITOS $CONFIG_OCF_OCF
++dep_tristate ' pasemi (HW crypto engine)' \
++ CONFIG_OCF_PASEMI $CONFIG_OCF_OCF
++dep_tristate ' ep80579 (HW crypto engine)' \
++ CONFIG_OCF_EP80579 $CONFIG_OCF_OCF
++dep_tristate ' ocfnull (does no crypto)' \
++ CONFIG_OCF_OCFNULL $CONFIG_OCF_OCF
++dep_tristate ' ocf-bench (HW crypto in-kernel benchmark)' \
++ CONFIG_OCF_BENCH $CONFIG_OCF_OCF
++endmenu
++
++#############################################################################
+diff -Nur linux-2.6.30.orig/crypto/ocf/criov.c linux-2.6.30/crypto/ocf/criov.c
+--- linux-2.6.30.orig/crypto/ocf/criov.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.30/crypto/ocf/criov.c 2009-06-11 10:55:27.000000000 +0200
+@@ -0,0 +1,215 @@
++/* $OpenBSD: criov.c,v 1.9 2002/01/29 15:48:29 jason Exp $ */
++
++/*
++ * Linux port done by David McCullough <david_mccullough@securecomputing.com>
++ * Copyright (C) 2006-2007 David McCullough
++ * Copyright (C) 2004-2005 Intel Corporation.
++ * The license and original author are listed below.
++ *
++ * Copyright (c) 1999 Theo de Raadt
++ *
++ * 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.
++ *
++__FBSDID("$FreeBSD: src/sys/opencrypto/criov.c,v 1.5 2006/06/04 22:15:13 pjd Exp $");
++ */
++
++#ifndef AUTOCONF_INCLUDED
++#include <linux/config.h>
++#endif
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/slab.h>
++#include <linux/uio.h>
++#include <linux/skbuff.h>
++#include <linux/kernel.h>
++#include <linux/mm.h>
++#include <asm/io.h>
++
++#include <uio.h>
++#include <cryptodev.h>
++
++/*
++ * This macro is only for avoiding code duplication, as we need to skip
++ * given number of bytes in the same way in three functions below.
++ */
++#define CUIO_SKIP() do { \
++ KASSERT(off >= 0, ("%s: off %d < 0", __func__, off)); \
++ KASSERT(len >= 0, ("%s: len %d < 0", __func__, len)); \
++ while (off > 0) { \
++ KASSERT(iol >= 0, ("%s: empty in skip", __func__)); \
++ if (off < iov->iov_len) \
++ break; \
++ off -= iov->iov_len; \
++ iol--; \
++ iov++; \
++ } \
++} while (0)
++
++void
++cuio_copydata(struct uio* uio, int off, int len, caddr_t cp)
++{
++ struct iovec *iov = uio->uio_iov;
++ int iol = uio->uio_iovcnt;
++ unsigned count;
++
++ CUIO_SKIP();
++ while (len > 0) {
++ KASSERT(iol >= 0, ("%s: empty", __func__));
++ count = min((int)(iov->iov_len - off), len);
++ memcpy(cp, ((caddr_t)iov->iov_base) + off, count);
++ len -= count;
++ cp += count;
++ off = 0;
++ iol--;
++ iov++;
++ }
++}
++
++void
++cuio_copyback(struct uio* uio, int off, int len, caddr_t cp)
++{
++ struct iovec *iov = uio->uio_iov;
++ int iol = uio->uio_iovcnt;
++ unsigned count;
++
++ CUIO_SKIP();
++ while (len > 0) {
++ KASSERT(iol >= 0, ("%s: empty", __func__));
++ count = min((int)(iov->iov_len - off), len);
++ memcpy(((caddr_t)iov->iov_base) + off, cp, count);
++ len -= count;
++ cp += count;
++ off = 0;
++ iol--;
++ iov++;
++ }
++}
++
++/*
++ * Return a pointer to iov/offset of location in iovec list.
++ */
++struct iovec *
++cuio_getptr(struct uio *uio, int loc, int *off)
++{
++ struct iovec *iov = uio->uio_iov;
++ int iol = uio->uio_iovcnt;
++
++ while (loc >= 0) {
++ /* Normal end of search */
++ if (loc < iov->iov_len) {
++ *off = loc;
++ return (iov);
++ }
++
++ loc -= iov->iov_len;
++ if (iol == 0) {
++ if (loc == 0) {
++ /* Point at the end of valid data */
++ *off = iov->iov_len;
++ return (iov);
++ } else
++ return (NULL);
++ } else {
++ iov++, iol--;
++ }
++ }
++
++ return (NULL);
++}
++
++EXPORT_SYMBOL(cuio_copyback);
++EXPORT_SYMBOL(cuio_copydata);
++EXPORT_SYMBOL(cuio_getptr);
++
++
++static void
++skb_copy_bits_back(struct sk_buff *skb, int offset, caddr_t cp, int len)
++{
++ int i;
++ if (offset < skb_headlen(skb)) {
++ memcpy(skb->data + offset, cp, min_t(int, skb_headlen(skb), len));
++ len -= skb_headlen(skb);
++ cp += skb_headlen(skb);
++ }
++ offset -= skb_headlen(skb);
++ for (i = 0; len > 0 && i < skb_shinfo(skb)->nr_frags; i++) {
++ if (offset < skb_shinfo(skb)->frags[i].size) {
++ memcpy(page_address(skb_shinfo(skb)->frags[i].page) +
++ skb_shinfo(skb)->frags[i].page_offset,
++ cp, min_t(int, skb_shinfo(skb)->frags[i].size, len));
++ len -= skb_shinfo(skb)->frags[i].size;
++ cp += skb_shinfo(skb)->frags[i].size;
++ }
++ offset -= skb_shinfo(skb)->frags[i].size;
++ }
++}
++
++void
++crypto_copyback(int flags, caddr_t buf, int off, int size, caddr_t in)
++{
++
++ if ((flags & CRYPTO_F_SKBUF) != 0)
++ skb_copy_bits_back((struct sk_buff *)buf, off, in, size);
++ else if ((flags & CRYPTO_F_IOV) != 0)
++ cuio_copyback((struct uio *)buf, off, size, in);
++ else
++ bcopy(in, buf + off, size);
++}
++
++void
++crypto_copydata(int flags, caddr_t buf, int off, int size, caddr_t out)
++{
++
++ if ((flags & CRYPTO_F_SKBUF) != 0)
++ skb_copy_bits((struct sk_buff *)buf, off, out, size);
++ else if ((flags & CRYPTO_F_IOV) != 0)
++ cuio_copydata((struct uio *)buf, off, size, out);
++ else
++ bcopy(buf + off, out, size);
++}
++
++int
++crypto_apply(int flags, caddr_t buf, int off, int len,
++ int (*f)(void *, void *, u_int), void *arg)
++{
++#if 0
++ int error;
++
++ if ((flags & CRYPTO_F_SKBUF) != 0)
++ error = XXXXXX((struct mbuf *)buf, off, len, f, arg);
++ else if ((flags & CRYPTO_F_IOV) != 0)
++ error = cuio_apply((struct uio *)buf, off, len, f, arg);
++ else
++ error = (*f)(arg, buf + off, len);
++ return (error);
++#else
++ KASSERT(0, ("crypto_apply not implemented!\n"));
++#endif
++ return 0;
++}
++
++EXPORT_SYMBOL(crypto_copyback);
++EXPORT_SYMBOL(crypto_copydata);
++EXPORT_SYMBOL(crypto_apply);
++
+diff -Nur linux-2.6.30.orig/crypto/ocf/crypto.c linux-2.6.30/crypto/ocf/crypto.c
+--- linux-2.6.30.orig/crypto/ocf/crypto.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.30/crypto/ocf/crypto.c 2009-06-11 10:55:27.000000000 +0200
+@@ -0,0 +1,1741 @@
++/*-
++ * Linux port done by David McCullough <david_mccullough@securecomputing.com>
++ * Copyright (C) 2006-2007 David McCullough
++ * Copyright (C) 2004-2005 Intel Corporation.
++ * The license and original author are listed below.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * Copyright (c) 2002-2006 Sam Leffler. All rights reserved.
++ *
++ * 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 ``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.
++ */
++
++#if 0
++#include <sys/cdefs.h>
++__FBSDID("$FreeBSD: src/sys/opencrypto/crypto.c,v 1.27 2007/03/21 03:42:51 sam Exp $");
++#endif
++
++/*
++ * Cryptographic Subsystem.
++ *
++ * This code is derived from the Openbsd Cryptographic Framework (OCF)
++ * that has the copyright shown below. Very little of the original
++ * code remains.
++ */
++/*-
++ * The author of this code is Angelos D. Keromytis (angelos@cis.upenn.edu)
++ *
++ * This code was written by Angelos D. Keromytis in Athens, Greece, in
++ * February 2000. Network Security Technologies Inc. (NSTI) kindly
++ * supported the development of this code.
++ *
++ * Copyright (c) 2000, 2001 Angelos D. Keromytis
++ *
++ * Permission to use, copy, and modify this software with or without fee
++ * is hereby granted, provided that this entire notice is included in
++ * all source code copies of any software which is or includes a copy or
++ * modification of this software.
++ *
++ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTY. IN PARTICULAR, NONE OF THE AUTHORS MAKES ANY
++ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
++ * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
++ * PURPOSE.
++ *
++__FBSDID("$FreeBSD: src/sys/opencrypto/crypto.c,v 1.16 2005/01/07 02:29:16 imp Exp $");
++ */
++
++
++#ifndef AUTOCONF_INCLUDED
++#include <linux/config.h>
++#endif
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/list.h>
++#include <linux/slab.h>
++#include <linux/wait.h>
++#include <linux/sched.h>
++#include <linux/spinlock.h>
++#include <linux/version.h>
++#include <cryptodev.h>
++
++/*
++ * keep track of whether or not we have been initialised, a big
++ * issue if we are linked into the kernel and a driver gets started before
++ * us
++ */
++static int crypto_initted = 0;
++
++/*
++ * Crypto drivers register themselves by allocating a slot in the
++ * crypto_drivers table with crypto_get_driverid() and then registering
++ * each algorithm they support with crypto_register() and crypto_kregister().
++ */
++
++/*
++ * lock on driver table
++ * we track its state as spin_is_locked does not do anything on non-SMP boxes
++ */
++static spinlock_t crypto_drivers_lock;
++static int crypto_drivers_locked; /* for non-SMP boxes */
++
++#define CRYPTO_DRIVER_LOCK() \
++ ({ \
++ spin_lock_irqsave(&crypto_drivers_lock, d_flags); \
++ crypto_drivers_locked = 1; \
++ dprintk("%s,%d: DRIVER_LOCK()\n", __FILE__, __LINE__); \
++ })
++#define CRYPTO_DRIVER_UNLOCK() \
++ ({ \
++ dprintk("%s,%d: DRIVER_UNLOCK()\n", __FILE__, __LINE__); \
++ crypto_drivers_locked = 0; \
++ spin_unlock_irqrestore(&crypto_drivers_lock, d_flags); \
++ })
++#define CRYPTO_DRIVER_ASSERT() \
++ ({ \
++ if (!crypto_drivers_locked) { \
++ dprintk("%s,%d: DRIVER_ASSERT!\n", __FILE__, __LINE__); \
++ } \
++ })
++
++/*
++ * Crypto device/driver capabilities structure.
++ *
++ * Synchronization:
++ * (d) - protected by CRYPTO_DRIVER_LOCK()
++ * (q) - protected by CRYPTO_Q_LOCK()