summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Config.in2
-rw-r--r--mk/build.mk4
-rw-r--r--mk/fetch.mk2
-rw-r--r--mk/image.mk17
-rw-r--r--mk/kernel-build.mk6
-rw-r--r--mk/kernel-vars.mk2
-rw-r--r--mk/kernel-ver.mk6
-rw-r--r--mk/modules.mk14
-rw-r--r--mk/os.mk11
-rw-r--r--mk/package.mk2
-rw-r--r--mk/vars.mk35
-rw-r--r--package/aufs-util/Makefile44
-rw-r--r--package/aufs-util/patches/patch-Makefile23
-rw-r--r--package/automake/Makefile39
-rw-r--r--package/busybox/Makefile3
-rw-r--r--package/busybox/config/networking/Config.in1
-rw-r--r--package/bzip2/Makefile7
-rw-r--r--package/cairo/Makefile10
-rw-r--r--package/cairo/patches/patch-Makefile_in8
-rw-r--r--package/cairo/patches/patch-configure101
-rw-r--r--package/capi4k-utils/Makefile48
-rw-r--r--package/capi4k-utils/patches/patch-Makefile42
-rw-r--r--package/capi4k-utils/patches/patch-capi20_capi20_h11
-rw-r--r--package/capi4k-utils/patches/patch-capiinfo_Makefile_in18
-rw-r--r--package/capi4k-utils/patches/patch-pppdcapiplugin_Rules_make18
-rw-r--r--package/capi4k-utils/patches/patch-rcapid_Makefile_in23
-rwxr-xr-xpackage/capi4k-utils/src/pppdcapiplugin/ppp-2.4.5/Makefile14
-rw-r--r--package/capi4k-utils/src/pppdcapiplugin/ppp-2.4.5/pppd/patchlevel.h2
-rw-r--r--package/capi4k-utils/src/pppdcapiplugin/ppp-2.4.5/pppd/pppd.h909
-rw-r--r--package/cdrkit/Makefile33
-rw-r--r--package/cdrkit/patches/patch-Makefile466
-rw-r--r--package/cdrkit/patches/patch-include_xconfig_h_in10
-rw-r--r--package/cmake/Makefile4
-rw-r--r--package/crda/Makefile53
-rw-r--r--package/cryptodev-linux/Makefile22
-rw-r--r--package/curl/Makefile4
-rw-r--r--package/dropbear/Makefile2
-rw-r--r--package/e2fsprogs/Makefile42
-rw-r--r--package/e2fsprogs/patches/patch-debugfs_dump_c12
-rw-r--r--package/e2fsprogs/patches/patch-debugfs_logdump_c4
-rw-r--r--package/e2fsprogs/patches/patch-debugfs_set_fields_c4
-rw-r--r--package/e2fsprogs/patches/patch-e2fsck_Makefile_in11
-rw-r--r--package/e2fsprogs/patches/patch-misc_Makefile_in65
-rw-r--r--package/e2fsprogs/patches/patch-misc_e2initrd_helper_c4
-rw-r--r--package/e2fsprogs/patches/patch-misc_e2undo_c4
-rw-r--r--package/e2fsprogs/patches/patch-util_subst_c6
-rw-r--r--package/ebtables/patches/patch-Makefile63
-rw-r--r--package/elfutils/Makefile37
-rw-r--r--package/gdb/Makefile2
-rw-r--r--package/hwids/Makefile61
-rw-r--r--package/i2400m-fw/Makefile30
-rw-r--r--package/inotify-tools/Makefile41
-rw-r--r--package/ipmitool/Makefile28
-rw-r--r--package/kexec-tools/Makefile6
-rw-r--r--package/kismet/patches/patch-Makefile_in60
-rw-r--r--package/ldd/Makefile26
-rw-r--r--package/libcap/Makefile18
-rw-r--r--package/libcap/patches/patch-Make_Rules60
-rw-r--r--package/libcap/patches/patch-Makefile25
-rw-r--r--package/libcap/patches/patch-libcap_Makefile39
-rw-r--r--package/libcap/patches/patch-pam_cap_Makefile10
-rw-r--r--package/libpcap/Makefile11
-rw-r--r--package/libpcap/patch-Makefile_in14
-rw-r--r--package/libqmi/Makefile30
-rw-r--r--package/libqmi/patches/patch-Makefile_am13
-rw-r--r--package/libqmi/patches/patch-autogen_sh11
-rw-r--r--package/libqmi/patches/patch-configure_ac12
-rw-r--r--package/libqmi/patches/patch-docs_reference_libqmi-glib_Makefile_am25
-rw-r--r--package/lvm/Makefile8
-rw-r--r--package/lvm/patches/patch-lib_commands_toolcontext_c16
-rw-r--r--package/lvm/patches/patch-lib_mm_memlock_c76
-rw-r--r--package/lvm/patches/patch-tools_lvmcmdline_c10
-rw-r--r--package/mISDN/Makefile35
-rw-r--r--package/mISDN/patches/patch-Makefile53
-rw-r--r--package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_contr_c65
-rw-r--r--package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_core_c75
-rw-r--r--package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_core_h19
-rw-r--r--package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_debugtool_c49
-rw-r--r--package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_hfcs_usb_c17
-rw-r--r--package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_stack_c34
-rw-r--r--package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_sysfs_inst_c30
-rw-r--r--package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_sysfs_obj_c33
-rw-r--r--package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_sysfs_st_c18
-rw-r--r--package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_udevice_c36
-rw-r--r--package/mISDNuser/Makefile35
-rw-r--r--package/mISDNuser/patches/patch-Makefile16
-rw-r--r--package/mISDNuser/patches/patch-debugtool_Makefile9
-rw-r--r--package/mISDNuser/patches/patch-i4lnet_Makefile9
-rw-r--r--package/mISDNuser/patches/patch-lib_Makefile9
-rw-r--r--package/mISDNuser/patches/patch-suppserv_Makefile9
-rw-r--r--package/nand/Makefile2
-rw-r--r--package/nand/src/nand.c45
-rw-r--r--package/newt/Makefile34
-rw-r--r--package/oprofile/Makefile28
-rw-r--r--package/oprofile/patches/patch-libop_op_cpu_type_c42
-rw-r--r--package/pam/Makefile2
-rw-r--r--package/pdnsd/Makefile10
-rw-r--r--package/pdnsd/patches/patch-src_Makefile_in11
-rw-r--r--package/pdnsd/patches/patch-src_dns_query_c12
-rw-r--r--package/perf/Makefile43
-rw-r--r--package/php/Makefile6
-rw-r--r--package/samba/Makefile4
-rw-r--r--package/slang/Makefile43
-rw-r--r--package/sox/Makefile6
-rw-r--r--package/squeezelite/patches/patch-output_alsa_c11
-rw-r--r--package/squid/Makefile13
-rw-r--r--package/squid/patches/patch-acinclude_lib-checks_m472
-rw-r--r--package/squid/patches/patch-configure_ac11
-rw-r--r--package/squid/patches/patch-lib_rfcnb_rfcnb-io_c14
-rw-r--r--package/squid/patches/patch-libltdl_aclocal_m414
-rw-r--r--package/squid/patches/patch-src_Makefile_am10
-rw-r--r--package/stats/Makefile23
-rw-r--r--package/stats/patches/patch-Makefile35
-rw-r--r--package/supl/Makefile34
-rw-r--r--package/supl/patches/patch-configure11
-rw-r--r--package/supl/patches/patch-src_Makefile16
-rw-r--r--package/supl/patches/patch-src_supl-client_c40
-rw-r--r--package/supl/patches/patch-src_supl_c46
-rw-r--r--package/supl/patches/patch-src_supl_h19
-rw-r--r--package/tcpdump/Makefile6
-rw-r--r--package/tcptrace/Makefile31
-rw-r--r--package/tcptrace/patches/patch-Makefile_in13
-rw-r--r--package/tcptrace/patches/patch-configure18
-rw-r--r--package/wget/Makefile4
-rw-r--r--package/wireless-regdb/Makefile28
-rw-r--r--package/xterm/Makefile4
-rw-r--r--package/xterm/patches/patch-xterm_h11
-rw-r--r--rules.mk2
-rwxr-xr-xscripts/install21
-rw-r--r--target/Makefile2
-rw-r--r--target/appliances/default.options5
-rw-r--r--target/appliances/mpd.options16
-rw-r--r--target/arm/Makefile5
-rw-r--r--target/arm/bcm28xx/patches/3.18.8/0000-raspberry-pi.patch (renamed from target/arm/bcm28xx/patches/3.18.6/0000-raspberry-pi.patch)0
-rw-r--r--target/arm/bcm28xx/patches/3.18.8/0001-add-support-for-rpi-proto-hardware.patch (renamed from target/arm/bcm28xx/patches/3.18.6/0001-add-support-for-rpi-proto-hardware.patch)0
-rw-r--r--target/arm/bcm28xx/patches/3.18.8/0002-allow-to-control-volume-for-each-channel.patch (renamed from target/arm/bcm28xx/patches/3.18.6/0002-allow-to-control-volume-for-each-channel.patch)0
-rw-r--r--target/arm/solidrun-imx6/patches/3.18.8/solidrun-imx6-wlan.patch3252
-rw-r--r--target/config/Config.in.adk12
-rw-r--r--target/config/Config.in.cpu53
-rw-r--r--target/config/Config.in.fpu.default6
-rw-r--r--target/config/Config.in.kernelversion.choice6
-rw-r--r--target/config/Config.in.kernelversion.default2
-rw-r--r--target/config/Config.in.libc.choice1
-rw-r--r--target/config/Config.in.qemu2
-rw-r--r--target/cris/uclibc.config4
-rw-r--r--target/linux/config/Config.in.block4
-rw-r--r--target/linux/config/Config.in.cpu13
-rw-r--r--target/linux/config/Config.in.crypto14
-rw-r--r--target/linux/config/Config.in.debug1
-rw-r--r--target/linux/config/Config.in.fs4
-rw-r--r--target/linux/config/Config.in.fsnet4
-rw-r--r--target/linux/config/Config.in.graphics3
-rw-r--r--target/linux/config/Config.in.input2
-rw-r--r--target/linux/config/Config.in.ipsec14
-rw-r--r--target/linux/config/Config.in.ipvs1
-rw-r--r--target/linux/config/Config.in.kernel10
-rw-r--r--target/linux/config/Config.in.netfilter.core1
-rw-r--r--target/linux/config/Config.in.netfilter.ebt1
-rw-r--r--target/linux/config/Config.in.netfilter.ip46
-rw-r--r--target/linux/patches/3.18.6/microblaze-axi.patch11
-rw-r--r--target/linux/patches/3.18.8/bsd-compatibility.patch (renamed from target/linux/patches/3.18.6/bsd-compatibility.patch)0
-rw-r--r--target/linux/patches/3.18.8/cleankernel.patch (renamed from target/linux/patches/3.18.6/cleankernel.patch)0
-rw-r--r--target/linux/patches/3.18.8/cris-header.patch (renamed from target/linux/patches/3.18.6/cris-header.patch)0
-rw-r--r--target/linux/patches/3.18.8/defaults.patch (renamed from target/linux/patches/3.18.6/defaults.patch)0
-rw-r--r--target/linux/patches/3.18.8/export-symbol-for-exmap.patch (renamed from target/linux/patches/3.18.6/export-symbol-for-exmap.patch)0
-rw-r--r--target/linux/patches/3.18.8/gemalto.patch (renamed from target/linux/patches/3.18.6/gemalto.patch)0
-rw-r--r--target/linux/patches/3.18.8/initramfs-nosizelimit.patch (renamed from target/linux/patches/3.18.6/initramfs-nosizelimit.patch)0
-rw-r--r--target/linux/patches/3.18.8/lemote-rfkill.patch (renamed from target/linux/patches/3.18.6/lemote-rfkill.patch)0
-rw-r--r--target/linux/patches/3.18.8/microblaze-ethernet.patch (renamed from target/linux/patches/3.18.6/microblaze-ethernet.patch)0
-rw-r--r--target/linux/patches/3.18.8/mkpiggy.patch (renamed from target/linux/patches/3.18.6/mkpiggy.patch)0
-rw-r--r--target/linux/patches/3.18.8/mtd-rootfs.patch (renamed from target/linux/patches/3.18.6/mtd-rootfs.patch)0
-rw-r--r--target/linux/patches/3.18.8/nfsv3-tcp.patch (renamed from target/linux/patches/3.18.6/nfsv3-tcp.patch)0
-rw-r--r--target/linux/patches/3.18.8/non-static.patch (renamed from target/linux/patches/3.18.6/non-static.patch)0
-rw-r--r--target/linux/patches/3.18.8/patch-fblogo (renamed from target/linux/patches/3.18.6/patch-fblogo)0
-rw-r--r--target/linux/patches/3.18.8/patch-yaffs2 (renamed from target/linux/patches/3.18.6/patch-yaffs2)0
-rw-r--r--target/linux/patches/3.18.8/ppc64-missing-zlib.patch (renamed from target/linux/patches/3.18.6/ppc64-missing-zlib.patch)0
-rw-r--r--target/linux/patches/3.18.8/regmap-bool.patch (renamed from target/linux/patches/3.18.6/regmap-bool.patch)0
-rw-r--r--target/linux/patches/3.18.8/relocs.patch (renamed from target/linux/patches/3.18.6/relocs.patch)0
-rw-r--r--target/linux/patches/3.18.8/sgidefs.patch (renamed from target/linux/patches/3.18.6/sgidefs.patch)0
-rw-r--r--target/linux/patches/3.18.8/sortext.patch (renamed from target/linux/patches/3.18.6/sortext.patch)0
-rw-r--r--target/linux/patches/3.18.8/startup.patch (renamed from target/linux/patches/3.18.6/startup.patch)0
-rw-r--r--target/linux/patches/3.18.8/wlan-cf.patch (renamed from target/linux/patches/3.18.6/wlan-cf.patch)0
-rw-r--r--target/linux/patches/3.18.8/xargs.patch (renamed from target/linux/patches/3.18.6/xargs.patch)0
-rw-r--r--target/m68k/qemu-m68k/patches/3.18.8/m68k-coldfire-fec.patch (renamed from target/m68k/qemu-m68k/patches/3.18.6/m68k-coldfire-fec.patch)0
-rw-r--r--target/m68k/qemu-m68k/patches/3.18.8/qemu-coldfire.patch (renamed from target/m68k/qemu-m68k/patches/3.18.6/qemu-coldfire.patch)0
-rw-r--r--target/mips64/lemote-yeelong/patches/3.18.8/sm7xx-fb.patch (renamed from target/mips64/lemote-yeelong/patches/3.18.6/sm7xx-fb.patch)0
-rw-r--r--target/ppc/Makefile2
-rw-r--r--toolchain/Makefile3
-rw-r--r--toolchain/elf2flt/Makefile.inc4
-rw-r--r--toolchain/gcc/Makefile7
-rw-r--r--toolchain/glibc/Makefile3
-rw-r--r--toolchain/glibc/Makefile.inc1
-rw-r--r--toolchain/kernel-headers/Makefile11
-rw-r--r--toolchain/prelink-cross/Config.in1
-rw-r--r--toolchain/prelink-cross/Makefile34
-rw-r--r--toolchain/prelink-cross/Makefile.inc8
196 files changed, 7075 insertions, 700 deletions
diff --git a/Config.in b/Config.in
index d3bbbfd3d..210c68dab 100644
--- a/Config.in
+++ b/Config.in
@@ -102,7 +102,7 @@ source "target/config/Config.in.runtime"
endmenu
menu "Kernel configuration"
- visible if !ADK_CHOOSE_APPLIANCE
+ visible if !ADK_CHOOSE_APPLIANCE && ADK_TARGET_KERNEL_CUSTOMISING
source "target/linux/Config.in"
endmenu
diff --git a/mk/build.mk b/mk/build.mk
index 214c52e88..d8d1a047c 100644
--- a/mk/build.mk
+++ b/mk/build.mk
@@ -223,7 +223,7 @@ kernelconfig:
${KERNEL_MAKE_ENV} ${MAKE} \
ARCH=$(ADK_TARGET_ARCH) \
${KERNEL_MAKE_OPTS} \
- -C $(BUILD_DIR)/linux menuconfig
+ menuconfig
# create a new package from package/.template
newpackage:
@@ -514,7 +514,7 @@ endif
@if [ ! -z "$(ADK_TARGET_SYSTEM)" ];then \
system=$$(echo "$(ADK_TARGET_SYSTEM)" |sed -e "s/-/_/g"); \
grep -h "^config" target/*/Config.in.systems \
- |grep -i "$$system" \
+ |grep -i "$$system$$" \
|sed -e "s#^config \(.*\)#\1=y#" \
>> $(ADK_TOPDIR)/all.config; \
fi
diff --git a/mk/fetch.mk b/mk/fetch.mk
index 5fb13a29e..6365b4c13 100644
--- a/mk/fetch.mk
+++ b/mk/fetch.mk
@@ -28,7 +28,7 @@ ifeq ($(strip ${PKG_NOCHECKSUM}),)
${_CHECKSUM_COOKIE}: ${FULLDISTFILES}
-rm -rf ${WRKDIR}
ifneq ($(ADK_DISABLE_CHECKSUM),y)
- @if [ ! -e "${FULLDISTFILES}.nohash" ]; then \
+ @if [ ! -e $(firstword ${FULLDISTFILES}).nohash ]; then \
OK=n; \
allsums="$(strip ${PKG_HASH})"; \
(shasum -a 256 ${FULLDISTFILES}; echo exit) | while read sum name; do \
diff --git a/mk/image.mk b/mk/image.mk
index bd7d66f96..7d982d773 100644
--- a/mk/image.mk
+++ b/mk/image.mk
@@ -37,7 +37,7 @@ else
$(error No login shell configured!)
endif
-imageprepare: image-prepare-post extra-install
+imageprepare: image-prepare-post extra-install prelink
# if an extra directory exist in ADK_TOPDIR, copy all content over the
# root directory, do the same if make extra=/dir/to/extra is used
@@ -79,6 +79,19 @@ ifneq ($(ADK_TARGET_ARCH_AARCH64)$(ADK_TARGET_ARCH_X86_64)$(ADK_TARGET_ARCH_PPC6
(cd ${TARGET_DIR}/usr ; ln -sf ${ADK_TARGET_LIBC_PATH} lib)
endif
+ifeq (${ADK_PRELINK},)
+prelink:
+else
+${TARGET_DIR}/etc/prelink.conf:
+ echo '/' > $@
+
+prelink: ${TARGET_DIR}/etc/prelink.conf
+ $(TRACE) target/prelink
+ ${TARGET_CROSS}prelink ${ADK_PRELINK_OPTS} \
+ --ld-library-path=${STAGING_TARGET_DIR}/usr/lib:${STAGING_TARGET_DIR}/lib \
+ --root=${TARGET_DIR} -a $(MAKE_TRACE)
+endif
+
KERNEL_PKGDIR:=$(LINUX_BUILD_DIR)/kernel-pkg
KERNEL_PKG:=$(PACKAGE_DIR)/kernel_$(KERNEL_VERSION)_$(ADK_TARGET_CPU_ARCH).$(PKG_SUFFIX)
TARGET_KERNEL= ${ADK_TARGET_SYSTEM}-${ADK_TARGET_FS}-kernel
@@ -203,7 +216,7 @@ ifeq ($(ADK_KERNEL_COMP_BZIP2),y)
echo "CONFIG_INITRAMFS_COMPRESSION_BZIP2=y" >> ${LINUX_DIR}/.config
endif
@-rm $(LINUX_DIR)/usr/initramfs_data.cpio* 2>/dev/null
- env $(KERNEL_MAKE_ENV) $(MAKE) -C $(LINUX_DIR) $(KERNEL_MAKE_OPTS) \
+ env $(KERNEL_MAKE_ENV) $(MAKE) $(KERNEL_MAKE_OPTS) \
-j${ADK_MAKE_JOBS} $(ADK_TARGET_KERNEL) $(MAKE_TRACE)
@cp $(KERNEL) $(FW_DIR)/$(TARGET_KERNEL)
diff --git a/mk/kernel-build.mk b/mk/kernel-build.mk
index b66f71132..37570909e 100644
--- a/mk/kernel-build.mk
+++ b/mk/kernel-build.mk
@@ -35,18 +35,18 @@ $(LINUX_DIR)/.config: $(LINUX_DIR)/.prepared $(BUILD_DIR)/.kernelconfig $(ADK_TO
$(TRACE) target/$(ADK_TARGET_ARCH)-kernel-configure
-for f in $(TARGETS);do if [ -f $$f ];then rm $$f;fi;done
$(CP) $(BUILD_DIR)/.kernelconfig $(LINUX_DIR)/mini.config
- ${KERNEL_MAKE_ENV} $(MAKE) -C "${LINUX_DIR}" ${KERNEL_MAKE_OPTS} KCONFIG_ALLCONFIG=mini.config allnoconfig $(MAKE_TRACE)
+ ${KERNEL_MAKE_ENV} $(MAKE) ${KERNEL_MAKE_OPTS} KCONFIG_ALLCONFIG=mini.config allnoconfig $(MAKE_TRACE)
touch -c $(LINUX_DIR)/.config
$(LINUX_DIR)/$(KERNEL_FILE): $(LINUX_DIR)/.config
$(TRACE) target/$(ADK_TARGET_ARCH)-kernel-compile
- ${KERNEL_MAKE_ENV} $(MAKE) -C "${LINUX_DIR}" ${KERNEL_MAKE_OPTS} -j${ADK_MAKE_JOBS} LOCALVERSION="" $(KERNEL_TARGET) modules $(MAKE_TRACE)
+ ${KERNEL_MAKE_ENV} $(MAKE) ${KERNEL_MAKE_OPTS} -j${ADK_MAKE_JOBS} LOCALVERSION="" $(KERNEL_TARGET) modules $(MAKE_TRACE)
touch -c $(LINUX_DIR)/$(KERNEL_FILE)
$(LINUX_BUILD_DIR)/modules: $(LINUX_DIR)/$(KERNEL_FILE)
$(TRACE) target/$(ADK_TARGET_ARCH)-kernel-modules-install
rm -rf $(LINUX_BUILD_DIR)/modules
- ${KERNEL_MAKE_ENV} $(MAKE) -C "${LINUX_DIR}" ${KERNEL_MAKE_OPTS} DEPMOD=true \
+ ${KERNEL_MAKE_ENV} $(MAKE) ${KERNEL_MAKE_OPTS} DEPMOD=true \
INSTALL_MOD_PATH=$(LINUX_BUILD_DIR)/modules \
LOCALVERSION="" \
modules_install $(MAKE_TRACE)
diff --git a/mk/kernel-vars.mk b/mk/kernel-vars.mk
index 17a8d23a2..89ba10dd9 100644
--- a/mk/kernel-vars.mk
+++ b/mk/kernel-vars.mk
@@ -1,7 +1,7 @@
# This file is part of the OpenADK project. OpenADK is copyrighted
# material, please see the LICENCE file in the top-level directory.
-KERNEL_MAKE_OPTS:= V=1 \
+KERNEL_MAKE_OPTS:= V=1 -C "${LINUX_DIR}" \
ARCH="$(ADK_TARGET_KARCH)" \
CROSS_COMPILE="$(TARGET_CROSS)" \
CC="$(TARGET_CC)" \
diff --git a/mk/kernel-ver.mk b/mk/kernel-ver.mk
index fa0ac4e39..6404b6ef5 100644
--- a/mk/kernel-ver.mk
+++ b/mk/kernel-ver.mk
@@ -4,11 +4,11 @@ KERNEL_MOD_VERSION:= $(KERNEL_VERSION).0
KERNEL_RELEASE:= 1
KERNEL_HASH:= be42511fe5321012bb4a2009167ce56a9e5fe362b4af43e8c371b3666859806c
endif
-ifeq ($(ADK_KERNEL_VERSION_3_18_6),y)
-KERNEL_VERSION:= 3.18.6
+ifeq ($(ADK_KERNEL_VERSION_3_18_8),y)
+KERNEL_VERSION:= 3.18.8
KERNEL_MOD_VERSION:= $(KERNEL_VERSION)
KERNEL_RELEASE:= 1
-KERNEL_HASH:= c4c1a4841173aa572d79b7530db92ce493dbefe8049e6f461a46dd897df253f5
+KERNEL_HASH:= 9cfbd9d403f2b27951893f5ed73f694f65409c63f20a2fd394598a3d7004aadb
endif
ifeq ($(ADK_KERNEL_VERSION_3_14_28),y)
KERNEL_VERSION:= 3.14.28
diff --git a/mk/modules.mk b/mk/modules.mk
index ccb48ba3e..3bf580ec1 100644
--- a/mk/modules.mk
+++ b/mk/modules.mk
@@ -473,13 +473,13 @@ $(eval $(call KMOD_template,NF_CONNTRACK,nf-conntrack,\
$(MODULES_DIR)/kernel/net/netfilter/xt_conntrack \
,41))
-$(eval $(call KMOD_template,NETFILTER_XT_NAT,netfilter-xt-nat,\
- $(MODULES_DIR)/kernel/net/netfilter/xt_nat \
-,40))
-
$(eval $(call KMOD_template,NF_NAT,nf-nat,\
$(MODULES_DIR)/kernel/net/netfilter/nf_nat \
-,45))
+,42))
+
+$(eval $(call KMOD_template,NETFILTER_XT_NAT,netfilter-xt-nat,\
+ $(MODULES_DIR)/kernel/net/netfilter/xt_nat \
+,43))
$(eval $(call KMOD_template,NF_CONNTRACK_IPV4,nf-conntrack-ipv4,\
$(MODULES_DIR)/kernel/net/ipv4/netfilter/nf_defrag_ipv4 \
@@ -488,6 +488,7 @@ $(eval $(call KMOD_template,NF_CONNTRACK_IPV4,nf-conntrack-ipv4,\
$(eval $(call KMOD_template,NF_NAT_IPV4,nf-nat-ipv4,\
$(MODULES_DIR)/kernel/net/ipv4/netfilter/nf_nat_ipv4 \
+ $(MODULES_DIR)/kernel/net/ipv4/netfilter/nf_nat_masquerade_ipv4 \
,50))
$(eval $(call KMOD_template,IP_NF_NAT,ip-nf-nat,\
@@ -588,6 +589,7 @@ $(eval $(call KMOD_template,IP_NF_FILTER,ip-nf-filter,\
,55))
$(eval $(call KMOD_template,IP_NF_TARGET_REJECT,ip-nf-target-reject,\
+ $(MODULES_DIR)/kernel/net/ipv4/netfilter/nf_reject_ipv4 \
$(MODULES_DIR)/kernel/net/ipv4/netfilter/ipt_REJECT \
,60))
@@ -677,6 +679,7 @@ $(eval $(call KMOD_template,IP6_NF_FILTER,ip6-nf-filter,\
,55))
$(eval $(call KMOD_template,IP6_NF_TARGET_REJECT,ip6-nf-target-reject,\
+ $(MODULES_DIR)/kernel/net/ipv6/netfilter/nf_reject_ipv6 \
$(MODULES_DIR)/kernel/net/ipv6/netfilter/ip6t_REJECT \
,60))
@@ -1099,6 +1102,7 @@ $(eval $(call KMOD_template,RPCSEC_GSS_KRB5,rpcsec-gss-krb5,\
,26))
$(eval $(call KMOD_template,LOCKD,lockd,\
+ $(MODULES_DIR)/kernel/fs/nfs_common/grace \
$(MODULES_DIR)/kernel/fs/lockd/lockd \
,27))
diff --git a/mk/os.mk b/mk/os.mk
new file mode 100644
index 000000000..38a2e53f3
--- /dev/null
+++ b/mk/os.mk
@@ -0,0 +1,11 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+# operating system quirks
+ifeq (${OStype},Darwin)
+HOST_CC:=clang -fbracket-depth=1024
+HOST_CXX:=clang++ -fbracket-depth=1024
+else
+HOST_CC:=${CC}
+HOST_CXX:=${CXX}
+endif
diff --git a/mk/package.mk b/mk/package.mk
index 65d9c8f9f..3b27d1278 100644
--- a/mk/package.mk
+++ b/mk/package.mk
@@ -308,7 +308,7 @@ clean-targets:
clean:
@$(CMD_TRACE) "cleaning... "
@$(MAKE) clean-targets $(MAKE_TRACE)
- rm -rf ${WRKDIR} ${ALL_IPKGS} ${STAGING_PKG_DIR}/stamps/${PKG_NAME}${PKG_VERSION}
+ rm -rf ${WRKDIR} ${ALL_IPKGS} ${_IPKGS_COOKIE}
distclean: clean
rm -f ${FULLDISTFILES}
diff --git a/mk/vars.mk b/mk/vars.mk
index 73929643c..605248a37 100644
--- a/mk/vars.mk
+++ b/mk/vars.mk
@@ -107,6 +107,7 @@ TARGET_LDFLAGS:= -L$(STAGING_TARGET_DIR)/lib -L$(STAGING_TARGET_DIR)/usr/lib \
-Wl,-O1 -Wl,-rpath -Wl,/usr/lib \
-Wl,-rpath-link -Wl,${STAGING_TARGET_DIR}/usr/lib
+# for archiectures where gcc --with-cpu matches -mcpu=
ifneq ($(ADK_TARGET_GCC_CPU),)
ifeq ($(ADK_CPU_ARC700),y)
TARGET_CFLAGS+= -mcpu=ARC700
@@ -117,16 +118,44 @@ TARGET_CXXFLAGS+= -mcpu=$(ADK_TARGET_GCC_CPU)
endif
endif
+# for archiectures where gcc --with-arch matches -march=
ifneq ($(ADK_TARGET_GCC_ARCH),)
TARGET_CFLAGS+= -march=$(ADK_TARGET_GCC_ARCH)
TARGET_CXXFLAGS+= -march=$(ADK_TARGET_GCC_ARCH)
endif
+ifneq ($(ADK_TARGET_CPU_FLAGS),)
+TARGET_CFLAGS+= $(ADK_TARGET_CPU_FLAGS)
+TARGET_CXXFLAGS+= $(ADK_TARGET_CPU_FLAGS)
+endif
+
+ifneq ($(ADK_TARGET_FPU),)
+TARGET_CFLAGS+= -mfpu=$(ADK_TARGET_FPU)
+TARGET_CXXFLAGS+= -mfpu=$(ADK_TARGET_FPU)
+endif
+
+ifneq ($(ADK_TARGET_FLOAT),)
+ifeq ($(ADK_TARGET_ARCH_ARM),y)
+TARGET_CFLAGS+= -mfloat-abi=$(ADK_TARGET_FLOAT)
+TARGET_CXXFLAGS+= -mfloat-abi=$(ADK_TARGET_FLOAT)
+endif
+ifeq ($(ADK_TARGET_ARCH_MIPS),y)
+TARGET_CFLAGS+= -m$(ADK_TARGET_FLOAT)-float
+TARGET_CXXFLAGS+= -m$(ADK_TARGET_FLOAT)-float
+endif
+endif
+
+ifeq ($(ADK_TARGET_ARCH_ARM),y)
ifeq ($(ADK_TARGET_BINFMT_FLAT),y)
-TARGET_LDFLAGS+= -elf2flt
+TARGET_CFLAGS+= -Wl,-elf2flt
+TARGET_CXXFLAGS+= -Wl,-elf2flt
+endif
endif
ifeq ($(ADK_TARGET_ARCH_M68K),y)
+ifeq ($(ADK_TARGET_BINFMT_FLAT),y)
+TARGET_LDFLAGS+= -elf2flt
+endif
ifeq ($(ADK_TARGET_BINFMT_FLAT_SEP_DATA),y)
TARGET_CFLAGS+= -msep-data
TARGET_CXXFLAGS+= -msep-data
@@ -215,6 +244,10 @@ TARGET_CXXFLAGS+= -fno-unwind-tables -fno-asynchronous-unwind-tables
endif
ifeq ($(ADK_TARGET_ARCH_ARM),y)
+ifeq ($(ADK_TARGET_CPU_WITH_NEON),y)
+TARGET_CFLAGS+= -funsafe-math-optimizations
+TARGET_CXXFLAGS+= -funsafe-math-optimizations
+endif
ifeq ($(ADK_TARGET_ARCH_ARM_WITH_THUMB),y)
TARGET_CFLAGS+= -mthumb -Wa,-mimplicit-it=thumb
TARGET_CXXFLAGS+= -mthumb -Wa,-mimplicit-it=thumb
diff --git a/package/aufs-util/Makefile b/package/aufs-util/Makefile
new file mode 100644
index 000000000..fc57c7bb6
--- /dev/null
+++ b/package/aufs-util/Makefile
@@ -0,0 +1,44 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= aufs-util
+# branch aufs3.x-rcN (of around June 6th, 2014)
+PKG_VERSION:= a0eb20c75c07299bfc50c3d80023e1d22c86b4cc
+PKG_RELEASE:= 1
+PKG_DESCR:= aufs utilities (version 3 and above)
+PKG_SECTION:= sys/fs
+PKG_URL:= http://aufs.sf.net/
+PKG_SITES:= git://aufs.git.sourceforge.net/gitroot/aufs/aufs-util
+
+PKG_SUBPKGS:= AUFS_UTIL LIBAU
+PKGSD_LIBAU:= aufs userspace library
+PKGSC_LIBAU:= libs/misc
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,AUFS_UTIL,$(PKG_NAME),$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+$(eval $(call PKG_template,LIBAU,libau,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKGSD_LIBAU),$(PKGSC_LIBAU)))
+
+CONFIG_STYLE:= manual
+XAKE_FLAGS+= Install=install \
+ HOSTCC="$(HOST_CC)" \
+ CPPFLAGS_FOR_BUILD="-I$(STAGING_TARGET_DIR)/usr/include -I./libau"
+
+aufs-util-install:
+ $(INSTALL_DIR) $(IDIR_AUFS_UTIL)/sbin
+ $(INSTALL_BIN) $(WRKINST)/sbin/{{u,}mount.aufs,auplink} \
+ $(IDIR_AUFS_UTIL)/sbin
+ $(INSTALL_DIR) $(IDIR_AUFS_UTIL)/usr/bin
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/au{brsync,chk} \
+ $(IDIR_AUFS_UTIL)/usr/bin
+ $(INSTALL_DIR) $(IDIR_AUFS_UTIL)/etc/default
+ $(INSTALL_DATA) $(WRKINST)/etc/default/aufs \
+ $(IDIR_AUFS_UTIL)/etc/default
+
+libau-install:
+ $(INSTALL_DIR) $(IDIR_LIBAU)/usr/lib
+ $(CP) $(WRKINST)/usr/lib/libau* $(IDIR_LIBAU)/usr/lib
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/aufs-util/patches/patch-Makefile b/package/aufs-util/patches/patch-Makefile
new file mode 100644
index 000000000..0253076f1
--- /dev/null
+++ b/package/aufs-util/patches/patch-Makefile
@@ -0,0 +1,23 @@
+ - Ensure correct (HOST-)FLAGS when compiling the intermediates
+ - Drop version test, this cant work anyway since there is no aufs3.12 branch anywhere
+--- w-aufs-util-3.x-rcN-050614-1.orig/Makefile 2014-05-06 15:36:53.000000000 +0200
++++ w-aufs-util-3.x-rcN-050614-1/Makefile 2014-06-05 14:32:53.496611173 +0200
+@@ -49,7 +49,7 @@ LibUtilObj = perror.o proc_mnt.o br.o pl
+ LibUtilHdr = au_util.h
+ export
+
+-all: ver_test ${Man} ${Bin} ${Etc}
++all: ${Man} ${Bin} ${Etc}
+ ${MAKE} -C libau $@
+ ln -sf ./libau/libau*.so .
+
+@@ -85,6 +85,9 @@ aufs.5: aufs.in.5 c2tmac
+ chmod a-w $@
+
+ c2sh c2tmac ver: CC = ${HOSTCC}
++c2sh c2tmac ver: CFLAGS = ${CFLAGS_FOR_BUILD}
++c2sh c2tmac ver: LDFLAGS = ${LDFLAGS_FOR_BUILD}
++c2sh c2tmac ver: CPPFLAGS = ${CPPFLAGS_FOR_BUILD}
+ .INTERMEDIATE: c2sh c2tmac ver
+
+ Install = install -o root -g root -p
diff --git a/package/automake/Makefile b/package/automake/Makefile
index b94044169..985db66da 100644
--- a/package/automake/Makefile
+++ b/package/automake/Makefile
@@ -1,39 +1,38 @@
# This file is part of the OpenADK project. OpenADK is copyrighted
# material, please see the LICENCE file in the top-level directory.
-include ${ADK_TOPDIR}/rules.mk
+include $(ADK_TOPDIR)/rules.mk
PKG_NAME:= automake
-PKG_VERSION:= 1.14.1
+PKG_VERSION:= 1.15
PKG_RELEASE:= 1
-PKG_EXTRAVER:= 1.14
-PKG_HASH:= a9b4f04b8b69cac2e832a38a718943aa976dbdad0097211f8b3448afdacf0669
+PKG_HASH:= 9908c75aabd49d13661d6dcb1bc382252d22cc77bf733a2d55e87f2aa2db8636
PKG_DESCR:= tool for automatically generating makefiles
PKG_SECTION:= dev/tools
PKG_BUILDDEP:= m4-host autoconf-host autoconf
HOST_BUILDDEP:= autoconf-host
PKG_URL:= http://www.gnu.org/software/automake/
-PKG_SITES:= ${MASTER_SITE_GNU:=automake/}
+PKG_SITES:= $(MASTER_SITE_GNU:=automake/)
PKG_OPTS:= noscripts
-include ${ADK_TOPDIR}/mk/host.mk
-include ${ADK_TOPDIR}/mk/package.mk
+include $(ADK_TOPDIR)/mk/host.mk
+include $(ADK_TOPDIR)/mk/package.mk
-$(eval $(call HOST_template,AUTOMAKE,automake,${PKG_VERSION}-${PKG_RELEASE}))
-$(eval $(call PKG_template,AUTOMAKE,automake,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION},${PKG_OPTS}))
+$(eval $(call HOST_template,AUTOMAKE,automake,$(PKG_VERSION)-$(PKG_RELEASE)))
+$(eval $(call PKG_template,AUTOMAKE,automake,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION),$(PKG_OPTS)))
XAKE_FLAGS+= PERL="/usr/bin/perl"
automake-install:
- ${INSTALL_DIR} ${IDIR_AUTOMAKE}/usr/bin
- ${INSTALL_BIN} ${WRKINST}/usr/bin/automake ${IDIR_AUTOMAKE}/usr/bin
- ${INSTALL_BIN} ${WRKINST}/usr/bin/aclocal ${IDIR_AUTOMAKE}/usr/bin
- ${INSTALL_DIR} ${IDIR_AUTOMAKE}/usr/share/aclocal-${PKG_EXTRAVER}
- ${CP} ${WRKINST}/usr/share/aclocal-${PKG_EXTRAVER} \
- ${IDIR_AUTOMAKE}/usr/share
- ${INSTALL_DIR} ${IDIR_AUTOMAKE}/usr/share/automake-${PKG_EXTRAVER}
- ${CP} ${WRKINST}/usr/share/automake-${PKG_EXTRAVER} \
- ${IDIR_AUTOMAKE}/usr/share
+ $(INSTALL_DIR) $(IDIR_AUTOMAKE)/usr/bin
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/automake $(IDIR_AUTOMAKE)/usr/bin
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/aclocal $(IDIR_AUTOMAKE)/usr/bin
+ $(INSTALL_DIR) $(IDIR_AUTOMAKE)/usr/share/aclocal-$(PKG_VERSION)
+ $(CP) $(WRKINST)/usr/share/aclocal-$(PKG_VERSION) \
+ $(IDIR_AUTOMAKE)/usr/share
+ $(INSTALL_DIR) $(IDIR_AUTOMAKE)/usr/share/automake-$(PKG_VERSION)
+ $(CP) $(WRKINST)/usr/share/automake-$(PKG_VERSION) \
+ $(IDIR_AUTOMAKE)/usr/share
-include ${ADK_TOPDIR}/mk/host-bottom.mk
-include ${ADK_TOPDIR}/mk/pkg-bottom.mk
+include $(ADK_TOPDIR)/mk/host-bottom.mk
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/busybox/Makefile b/package/busybox/Makefile
index 0ea1073f1..088a29397 100644
--- a/package/busybox/Makefile
+++ b/package/busybox/Makefile
@@ -28,7 +28,8 @@ BB_MAKE_FLAGS:= V=1 \
IPKG_ARCH="${ADK_TARGET_CPU_ARCH}" \
HOSTCC="${CC_FOR_BUILD}" \
HOSTCFLAGS="$(CFLAGS_FOR_BUILD)" \
- CROSS_COMPILE="$(TARGET_CROSS)"
+ CROSS_COMPILE="$(TARGET_CROSS)" \
+ SKIP_STRIP=y
do-configure:
# get all symbols from top level config
diff --git a/package/busybox/config/networking/Config.in b/package/busybox/config/networking/Config.in
index 6e68fc786..d5bbad0ef 100644
--- a/package/busybox/config/networking/Config.in
+++ b/package/busybox/config/networking/Config.in
@@ -488,6 +488,7 @@ config BUSYBOX_FEATURE_IFUPDOWN_IP_BUILTIN
bool "Use busybox ip applet"
default y
depends on BUSYBOX_FEATURE_IFUPDOWN_IP
+ depends on !ADK_PACKAGE_IP
select BUSYBOX_PLATFORM_LINUX
select BUSYBOX_IP
select BUSYBOX_FEATURE_IP_ADDRESS
diff --git a/package/bzip2/Makefile b/package/bzip2/Makefile
index abd670592..bbbbfecc9 100644
--- a/package/bzip2/Makefile
+++ b/package/bzip2/Makefile
@@ -39,6 +39,7 @@ BIN_FILE:= bzip2-shared
else
BIN_FILE:= bzip2
endif
+
CONFIG_STYLE:= manual
TARGET_CFLAGS+= -fPIC
XAKE_FLAGS+= PREFIX=${WRKINST}/usr CROSS_COMPILE=1
@@ -52,6 +53,11 @@ bzip2-hostinstall:
${INSTALL_DIR} ${STAGING_HOST_DIR}/usr/bin
$(INSTALL_BIN) ${WRKBUILD}/bzip2 ${STAGING_HOST_DIR}/usr/bin/bzip2
+do-install:
+ ${INSTALL_DIR} $(STAGING_TARGET_DIR)/usr/include
+ $(CP) $(WRKBUILD)/bzlib.h $(STAGING_TARGET_DIR)/usr/include
+ $(CP) ${WRKBUILD}/libbz2.a ${STAGING_TARGET_DIR}/usr/lib
+
libbz2-install:
${INSTALL_DIR} ${IDIR_LIBBZ2}/usr/lib
$(CP) ${WRKBUILD}/libbz2.so* \
@@ -59,7 +65,6 @@ libbz2-install:
$(CP) ${WRKBUILD}/libbz2.so* \
${STAGING_TARGET_DIR}/usr/lib
(cd ${STAGING_TARGET_DIR}/usr/lib; ln -sf libbz2.so.1.0.6 libbz2.so)
- $(CP) $(WRKBUILD)/bzlib.h $(STAGING_TARGET_DIR)/usr/include
${INSTALL_DIR} $(IDIR_LIBBZ2_DEV)/usr/include
$(CP) $(WRKBUILD)/bzlib.h $(IDIR_LIBBZ2_DEV)/usr/include
diff --git a/package/cairo/Makefile b/package/cairo/Makefile
index a3cba33f8..146876d44 100644
--- a/package/cairo/Makefile
+++ b/package/cairo/Makefile
@@ -4,9 +4,9 @@
include ${ADK_TOPDIR}/rules.mk
PKG_NAME:= cairo
-PKG_VERSION:= 1.12.16
-PKG_RELEASE:= 4
-PKG_HASH:= 2505959eb3f1de3e1841023b61585bfd35684b9733c7b6a3643f4f4cbde6d846
+PKG_VERSION:= 1.14.0
+PKG_RELEASE:= 1
+PKG_HASH:= 2cf5f81432e77ea4359af9dcd0f4faf37d015934501391c311bfd2d19a0134b7
PKG_DESCR:= cairo graphics library
PKG_SECTION:= libs/image
PKG_DEPENDS:= fontconfig libfreetype libx11 pixman
@@ -35,8 +35,6 @@ include ${ADK_TOPDIR}/mk/package.mk
$(eval $(call HOST_template,CAIRO,cairo,${PKG_VERSION}-${PKG_RELEASE}))
$(eval $(call PKG_template,CAIRO,cairo,${PKG_VERSION}-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION},${PKG_OPTS}))
-
-
HOST_CONFIGURE_ARGS+= --enable-ft=yes \
--enable-png=yes \
--enable-fc=yes \
@@ -88,8 +86,6 @@ else
CONFIGURE_ARGS+= --enable-tee=no
endif
-
-
CONFIGURE_ARGS+= --enable-ft=yes \
--enable-fc=yes \
--enable-xlib=yes \
diff --git a/package/cairo/patches/patch-Makefile_in b/package/cairo/patches/patch-Makefile_in
index 266149788..8716b0820 100644
--- a/package/cairo/patches/patch-Makefile_in
+++ b/package/cairo/patches/patch-Makefile_in
@@ -1,6 +1,6 @@
---- cairo-1.12.16.orig/Makefile.in 2013-08-26 19:00:44.000000000 +0200
-+++ cairo-1.12.16/Makefile.in 2014-02-10 14:44:58.000000000 +0100
-@@ -80,7 +80,7 @@ EXTRA_PROGRAMS =
+--- cairo-1.14.0.orig/Makefile.in 2014-10-14 03:47:28.000000000 +0200
++++ cairo-1.14.0/Makefile.in 2015-02-26 11:39:05.000000000 +0100
+@@ -63,7 +63,7 @@ EXTRA_PROGRAMS =
TESTS =
check_PROGRAMS =
# libpng is required for our test programs
@@ -9,7 +9,7 @@
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/build/aclocal.cairo.m4 \
-@@ -439,7 +439,7 @@ MAINTAINERCLEANFILES = Makefile.in $(src
+@@ -417,7 +417,7 @@ MAINTAINERCLEANFILES = Makefile.in $(src
# $(srcdir)/build/Makefile.win32.features-h \
# $(NULL)
ACLOCAL_AMFLAGS = -I build ${ACLOCAL_FLAGS}
diff --git a/package/cairo/patches/patch-configure b/package/cairo/patches/patch-configure
new file mode 100644
index 000000000..9e0f39f0d
--- /dev/null
+++ b/package/cairo/patches/patch-configure
@@ -0,0 +1,101 @@
+--- cairo-1.14.0.orig/configure 2014-10-14 03:47:29.000000000 +0200
++++ cairo-1.14.0/configure 2015-02-26 13:27:59.000000000 +0100
+@@ -18371,7 +18371,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false ; then
+ cairo_cc_flag=no
+ fi
+
+@@ -18418,7 +18418,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false ; then
+ cairo_cc_flag=no
+ fi
+
+@@ -18469,7 +18469,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false ; then
+ cairo_cc_flag=no
+ fi
+
+@@ -18516,7 +18516,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false ; then
+ cairo_cc_flag=no
+ fi
+
+@@ -18585,7 +18585,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false ; then
+ cairo_cc_flag=no
+ fi
+
+@@ -18641,7 +18641,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false ; then
+ cairo_cc_flag=no
+ fi
+
+@@ -20089,7 +20089,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false ; then
+ cairo_cc_flag=no
+ fi
+
+@@ -20136,7 +20136,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false ; then
+ cairo_cc_flag=no
+ fi
+
+@@ -33208,7 +33208,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false ; then
+ cairo_cc_flag=no
+ fi
+
+@@ -33327,7 +33327,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false ; then
+ cairo_cc_flag=no
+ fi
+
+@@ -33408,7 +33408,7 @@ fi
+ rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext conftest.$ac_ext
+
+- if test "x$cairo_cc_stderr" != "x"; then
++ if false; then
+ cairo_cc_flag=no
+ fi
+
diff --git a/package/capi4k-utils/Makefile b/package/capi4k-utils/Makefile
new file mode 100644
index 000000000..0ac58e978
--- /dev/null
+++ b/package/capi4k-utils/Makefile
@@ -0,0 +1,48 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= capi4k-utils
+PKG_VERSION:= 2005-07-18
+PKG_RELEASE:= 1
+PKG_HASH:= b162d726a31310fc29e7c0a25a4f82a590457f6a95c1b1168bcd72b6497b5746
+PKG_DESCR:= capi4linux utils
+PKG_SECTION:= net/voip
+PKG_SITES:= ftp://ftp.in-berlin.de/pub/capi4linux/
+
+PKG_CFLINE_CAPI4K_UTILS:=depends on ADK_BROKEN
+
+DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.gz
+WRKDIST= $(WRKDIR)/$(PKG_NAME)
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,CAPI4K_UTILS,capi4k-utils,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+CONFIG_STYLE:= manual
+XAKE_FLAGS+= PPPVERSIONS=2.4.5
+
+do-configure:
+ echo "CONFIG_KERNELDIR='$(LINUX_DIR)'" >$(WRKDIST)/.config
+ echo "CONFIG_BINDIR='/usr/bin'" >>$(WRKDIST)/.config
+ echo "CONFIG_SBINDIR='/usr/sbin'" >>$(WRKDIST)/.config
+ echo "CONFIG_MANDIR='/usr/man'" >>$(WRKDIST)/.config
+ echo "CONFIG_RCAPID=y" >>$(WRKDIST)/.config
+ echo "CONFIG_PPPDCAPIPLUGIN=y" >>$(WRKDIST)/.config
+ (cd $(WRKDIST); \
+ cp Makefile Makefile.tmp; \
+ $(MAKE_ENV) $(MAKE) $(MAKE_FLAGS) -f Makefile.tmp subconfig; \
+ rm -f Makefile.tmp; \
+ )
+
+capi4k-utils-install:
+ $(INSTALL_DIR) $(IDIR_CAPI4K_UTILS)/usr/{bin,lib/pppd/2.4.5}
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/capiinfo \
+ $(IDIR_CAPI4K_UTILS)/usr/bin
+ $(CP) $(WRKINST)/usr/lib/libcapi20.so* \
+ $(IDIR_CAPI4K_UTILS)/usr/lib
+ $(INSTALL_DATA) $(WRKINST)/usr/lib/pppd/2.4.5/*.so \
+ $(IDIR_CAPI4K_UTILS)/usr/lib/pppd/2.4.5
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/capi4k-utils/patches/patch-Makefile b/package/capi4k-utils/patches/patch-Makefile
new file mode 100644
index 000000000..08e26f592
--- /dev/null
+++ b/package/capi4k-utils/patches/patch-Makefile
@@ -0,0 +1,42 @@
+ - pass CC, CFLAGS and LDFLAGS when running subdir configure and make
+ - install without root-permissions, do not create device nodes
+ - need to pass PPPVERSIONS to subtargets
+--- capi4k-utils.orig/Makefile 2002-11-20 14:45:14.000000000 +0100
++++ capi4k-utils/Makefile 2011-07-15 14:15:21.446001582 +0200
+@@ -53,7 +53,7 @@ ifneq ($(SUBDIRS),)
+ endif
+
+ subtargets: $(CONFIGURATION)
+- set -e; for i in `echo $(SUBDIRS)`; do $(MAKE) -C $$i all; done
++ set -e; for i in `echo $(SUBDIRS)`; do CC="${CC}" CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" PPPVERSIONS="${PPPVERSIONS}" $(MAKE) -C $$i all; done
+
+ rootperm:
+ @echo 'main(int argc,char**argv){unlink(argv[0]);return(getuid()==0);}'>g
+@@ -62,16 +62,10 @@ rootperm:
+ exit 1; \
+ fi
+
+-install: rootperm
++install:
+ set -e; for i in `echo $(SUBDIRS)`; do $(MAKE) -C $$i install; done
+- @if [ -c $(DESTDIR)/dev/isdnctrl0 ] && ls -l $(DESTDIR)/dev/isdnctrl0 | egrep "[[:space:]]45,[[:space:]]+64[[:space:]]" > /dev/null; \
+- then \
+- echo -e '(some) ISDN devices already exist, not creating them.\nUse scripts/makedev.sh manually if necessary.'; \
+- else \
+- sh scripts/makedev.sh $(DESTDIR) ; \
+- fi
+
+-uninstall: rootperm
++uninstall:
+ set -e; for i in `echo $(SUBDIRS)`; do $(MAKE) -C $$i uninstall; done
+
+ #
+@@ -134,7 +128,7 @@ subconfig: scripts/autoconf.h
+ @set -e; for i in `echo $(SUBDIRS)`; do \
+ if [ -x $$i/configure ] ; then \
+ echo -e "\nRunning configure in $$i ...\n"; sleep 1; \
+- (cd $$i; ./configure --sbindir=$(CONFIG_SBINDIR) --bindir=$(CONFIG_BINDIR) --mandir=$(CONFIG_MANDIR) || $(MAKE) -C ../ ERRDIR=$$i cfgerror); \
++ (cd $$i; CC="${CC}" CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" ./configure --sbindir=$(CONFIG_SBINDIR) --bindir=$(CONFIG_BINDIR) --mandir=$(CONFIG_MANDIR) || $(MAKE) -C ../ ERRDIR=$$i cfgerror); \
+ elif [ -f $$i/Makefile.in ] ; then \
+ echo -e "\nRunning make -f Makefile.in config in $$i ...\n"; sleep 1; \
+ $(MAKE) -C $$i -f Makefile.in config; \
diff --git a/package/capi4k-utils/patches/patch-capi20_capi20_h b/package/capi4k-utils/patches/patch-capi20_capi20_h
new file mode 100644
index 000000000..856eaba79
--- /dev/null
+++ b/package/capi4k-utils/patches/patch-capi20_capi20_h
@@ -0,0 +1,11 @@
+ - somehow this header misses sys/types.h (for size_t definition)
+--- capi4k-utils.orig/capi20/capi20.h 2000-11-19 11:15:01.000000000 +0100
++++ capi4k-utils/capi20/capi20.h 2011-07-14 17:26:51.680001337 +0200
+@@ -21,6 +21,7 @@
+ #define __CAPI20_H__
+
+ #include <sys/time.h>
++#include <sys/types.h>
+
+ #ifdef __cplusplus
+ extern "C" {
diff --git a/package/capi4k-utils/patches/patch-capiinfo_Makefile_in b/package/capi4k-utils/patches/patch-capiinfo_Makefile_in
new file mode 100644
index 000000000..5a5ae1c4b
--- /dev/null
+++ b/package/capi4k-utils/patches/patch-capiinfo_Makefile_in
@@ -0,0 +1,18 @@
+ allow CFLAGS override
+--- capi4k-utils.orig/capiinfo/Makefile.in 2002-11-27 09:08:04.000000000 +0100
++++ capi4k-utils/capiinfo/Makefile.in 2011-07-14 18:55:40.657001559 +0200
+@@ -72,10 +72,10 @@ CLEANFILES = *~ comperr
+ MAINTAINERCLEANFILES = configure aclocal.m4 Makefile.in config.h.in stamp-h.in comperr
+
+
+-INCLUDES = -I../capi20 $(all_includes)
+-CFLAGS = -Wall -O2
+-LDFLAGS = -L../capi20/.libs -L../capi20 $(all_libraries)
+-LDADD = -lcapi20
++INCLUDES += -I../capi20 $(all_includes)
++CFLAGS += -Wall -O2
++LDFLAGS += -L../capi20/.libs -L../capi20 $(all_libraries)
++LDADD += -lcapi20
+
+ bin_PROGRAMS = capiinfo
+
diff --git a/package/capi4k-utils/patches/patch-pppdcapiplugin_Rules_make b/package/capi4k-utils/patches/patch-pppdcapiplugin_Rules_make
new file mode 100644
index 000000000..cd54324e6
--- /dev/null
+++ b/package/capi4k-utils/patches/patch-pppdcapiplugin_Rules_make
@@ -0,0 +1,18 @@
+ allow CC, CFLAGS and LDFLAGS override
+--- capi4k-utils.orig/pppdcapiplugin/Rules.make 2001-05-01 14:43:49.000000000 +0200
++++ capi4k-utils/pppdcapiplugin/Rules.make 2011-07-14 17:13:53.567001779 +0200
+@@ -10,11 +10,11 @@
+
+ vpath %.c $(TOPDIR)
+
+-CC = gcc
++CC ?= gcc
+ INC = -I$(TOPDIR) -I$(CAPIINC) -Ipppd
+ DEFS = -DPPPVER=$(shell $(TOPDIR)/pversion $(PPPVERSION))
+-CFLAGS = -O2 -Wall -fPIC $(DEFS) $(INC) -L$(CAPILIB)
+-LDFLAGS = -shared -L$(CAPILIB)
++CFLAGS += -O2 -Wall -fPIC $(DEFS) $(INC) -L$(CAPILIB)
++LDFLAGS += -shared -L$(CAPILIB)
+
+ ALL = capiplugin.so userpass.so
+
diff --git a/package/capi4k-utils/patches/patch-rcapid_Makefile_in b/package/capi4k-utils/patches/patch-rcapid_Makefile_in
new file mode 100644
index 000000000..135d5fe25
--- /dev/null
+++ b/package/capi4k-utils/patches/patch-rcapid_Makefile_in
@@ -0,0 +1,23 @@
+ allow overriding things
+--- capi4k-utils.orig/rcapid/Makefile.in 2003-06-16 13:44:29.000000000 +0200
++++ capi4k-utils/rcapid/Makefile.in 2011-07-14 19:01:46.376001436 +0200
+@@ -57,7 +57,7 @@ POST_INSTALL = :
+ NORMAL_UNINSTALL = :
+ PRE_UNINSTALL = :
+ POST_UNINSTALL = :
+-CC = @CC@
++CC ?= @CC@
+ CONFIG_MANDIR = @CONFIG_MANDIR@
+ CONFIG_SBINDIR = @CONFIG_SBINDIR@
+ CPP = @CPP@
+@@ -72,8 +72,8 @@ MAINTAINERCLEANFILES = configure aclocal
+
+
+ INCLUDES = -I../capi20 $(all_includes)
+-CFLAGS = -Wall -O2
+-LDFLAGS = -L../capi20/.libs -L../capi20 $(all_libraries)
++CFLAGS += -Wall -O2
++LDFLAGS += -L../capi20/.libs -L../capi20 $(all_libraries)
+ LDADD = -lcapi20
+
+ sbin_PROGRAMS = rcapid
diff --git a/package/capi4k-utils/src/pppdcapiplugin/ppp-2.4.5/Makefile b/package/capi4k-utils/src/pppdcapiplugin/ppp-2.4.5/Makefile
new file mode 100755
index 000000000..d12b2373a
--- /dev/null
+++ b/package/capi4k-utils/src/pppdcapiplugin/ppp-2.4.5/Makefile
@@ -0,0 +1,14 @@
+# Makefile for the capiplugin for pppd(8).
+#
+# Copyright 2000 Carsten Paeth (calle@calle.in-berlin.de)
+# Copyright 2000 AVM GmbH Berlin (info@avm.de)
+#
+# 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.
+
+PLUGINDIR=${DESTDIR}/usr/lib/pppd/$(PPPVERSION)
+
+include $(TOPDIR)/Rules.make
+
diff --git a/package/capi4k-utils/src/pppdcapiplugin/ppp-2.4.5/pppd/patchlevel.h b/package/capi4k-utils/src/pppdcapiplugin/ppp-2.4.5/pppd/patchlevel.h
new file mode 100644
index 000000000..b7d6ce335
--- /dev/null
+++ b/package/capi4k-utils/src/pppdcapiplugin/ppp-2.4.5/pppd/patchlevel.h
@@ -0,0 +1,2 @@
+#define VERSION "2.4.5"
+#define DATE "17 November 2009"
diff --git a/package/capi4k-utils/src/pppdcapiplugin/ppp-2.4.5/pppd/pppd.h b/package/capi4k-utils/src/pppdcapiplugin/ppp-2.4.5/pppd/pppd.h
new file mode 100644
index 000000000..cf9840a41
--- /dev/null
+++ b/package/capi4k-utils/src/pppdcapiplugin/ppp-2.4.5/pppd/pppd.h
@@ -0,0 +1,909 @@
+/*
+ * pppd.h - PPP daemon global declarations.
+ *
+ * Copyright (c) 1984-2000 Carnegie Mellon University. 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 "Carnegie Mellon University" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For permission or any legal
+ * details, please contact
+ * Office of Technology Transfer
+ * Carnegie Mellon University
+ * 5000 Forbes Avenue
+ * Pittsburgh, PA 15213-3890
+ * (412) 268-4387, fax: (412) 268-7395
+ * tech-transfer@andrew.cmu.edu
+ *
+ * 4. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by Computing Services
+ * at Carnegie Mellon University (http://www.cmu.edu/computing/)."
+ *
+ * CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO
+ * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS, IN NO EVENT SHALL CARNEGIE MELLON UNIVERSITY 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.
+ *
+ * $Id: pppd.h,v 1.96 2008/06/23 11:47:18 paulus Exp $
+ */
+
+/*
+ * TODO:
+ */
+
+#ifndef __PPPD_H__
+#define __PPPD_H__
+
+#include <stdio.h> /* for FILE */
+#include <limits.h> /* for NGROUPS_MAX */
+#include <sys/param.h> /* for MAXPATHLEN and BSD4_4, if defined */
+#include <sys/types.h> /* for u_int32_t, if defined */
+#include <sys/time.h> /* for struct timeval */
+#include <net/ppp_defs.h>
+#include "patchlevel.h"
+
+#if defined(__STDC__)
+#include <stdarg.h>
+#define __V(x) x
+#else
+#include <varargs.h>
+#define __V(x) (va_alist) va_dcl
+#define const
+#define volatile
+#endif
+
+#ifdef INET6
+#include "eui64.h"
+#endif
+
+/*
+ * Limits.
+ */
+
+#define NUM_PPP 1 /* One PPP interface supported (per process) */
+#define MAXWORDLEN 1024 /* max length of word in file (incl null) */
+#define MAXARGS 1 /* max # args to a command */
+#define MAXNAMELEN 256 /* max length of hostname or name for auth */
+#define MAXSECRETLEN 256 /* max length of password or secret */
+
+/*
+ * Option descriptor structure.
+ */
+
+typedef unsigned char bool;
+
+enum opt_type {
+ o_special_noarg = 0,
+ o_special = 1,
+ o_bool,
+ o_int,
+ o_uint32,
+ o_string,
+ o_wild
+};
+
+typedef struct {
+ char *name; /* name of the option */
+ enum opt_type type;
+ void *addr;
+ char *description;
+ unsigned int flags;
+ void *addr2;
+ int upper_limit;
+ int lower_limit;
+ const char *source;
+ short int priority;
+ short int winner;
+} option_t;
+
+/* Values for flags */
+#define OPT_VALUE 0xff /* mask for presupplied value */
+#define OPT_HEX 0x100 /* int option is in hex */
+#define OPT_NOARG 0x200 /* option doesn't take argument */
+#define OPT_OR 0x400 /* for u32, OR in argument to value */
+#define OPT_INC 0x400 /* for o_int, increment value */
+#define OPT_A2OR 0x800 /* for o_bool, OR arg to *(u_char *)addr2 */
+#define OPT_PRIV 0x1000 /* privileged option */
+#define OPT_STATIC 0x2000 /* string option goes into static array */
+#define OPT_NOINCR 0x2000 /* for o_int, value mustn't be increased */
+#define OPT_LLIMIT 0x4000 /* check value against lower limit */
+#define OPT_ULIMIT 0x8000 /* check value against upper limit */
+#define OPT_LIMITS (OPT_LLIMIT|OPT_ULIMIT)
+#define OPT_ZEROOK 0x10000 /* 0 value is OK even if not within limits */
+#define OPT_HIDE 0x10000 /* for o_string, print value as ?????? */
+#define OPT_A2LIST 0x20000 /* for o_special, keep list of values */
+#define OPT_A2CLRB 0x20000 /* o_bool, clr val bits in *(u_char *)addr2 */
+#define OPT_ZEROINF 0x40000 /* with OPT_NOINCR, 0 == infinity */
+#define OPT_PRIO 0x80000 /* process option priorities for this option */
+#define OPT_PRIOSUB 0x100000 /* subsidiary member of priority group */
+#define OPT_ALIAS 0x200000 /* option is alias for previous option */
+#define OPT_A2COPY 0x400000 /* addr2 -> second location to rcv value */
+#define OPT_ENABLE 0x800000 /* use *addr2 as enable for option */
+#define OPT_A2CLR 0x1000000 /* clear *(bool *)addr2 */
+#define OPT_PRIVFIX 0x2000000 /* user can't override if set by root */
+#define OPT_INITONLY 0x4000000 /* option can only be set in init phase */
+#define OPT_DEVEQUIV 0x8000000 /* equiv to device name */
+#define OPT_DEVNAM (OPT_INITONLY | OPT_DEVEQUIV)
+#define OPT_A2PRINTER 0x10000000 /* *addr2 is a fn for printing option */
+#define OPT_A2STRVAL 0x20000000 /* *addr2 points to current string value */
+#define OPT_NOPRINT 0x40000000 /* don't print this option at all */
+
+#define OPT_VAL(x) ((x) & OPT_VALUE)
+
+/* Values for priority */
+#define OPRIO_DEFAULT 0 /* a default value */
+#define OPRIO_CFGFILE 1 /* value from a configuration file */
+#define OPRIO_CMDLINE 2 /* value from the command line */
+#define OPRIO_SECFILE 3 /* value from options in a secrets file */
+#define OPRIO_ROOT 100 /* added to priority if OPT_PRIVFIX && root */
+
+#ifndef GIDSET_TYPE
+#define GIDSET_TYPE gid_t
+#endif
+
+/* Structure representing a list of permitted IP addresses. */
+struct permitted_ip {
+ int permit; /* 1 = permit, 0 = forbid */
+ u_int32_t base; /* match if (addr & mask) == base */
+ u_int32_t mask; /* base and mask are in network byte order */
+};
+
+/*
+ * Unfortunately, the linux kernel driver uses a different structure
+ * for statistics from the rest of the ports.
+ * This structure serves as a common representation for the bits
+ * pppd needs.
+ */
+struct pppd_stats {
+ unsigned int bytes_in;
+ unsigned int bytes_out;
+ unsigned int pkts_in;
+ unsigned int pkts_out;
+};
+
+/* Used for storing a sequence of words. Usually malloced. */
+struct wordlist {
+ struct wordlist *next;
+ char *word;
+};
+
+/* An endpoint discriminator, used with multilink. */
+#define MAX_ENDP_LEN 20 /* maximum length of discriminator value */
+struct epdisc {
+ unsigned char class;
+ unsigned char length;
+ unsigned char value[MAX_ENDP_LEN];
+};
+
+/* values for epdisc.class */
+#define EPD_NULL 0 /* null discriminator, no data */
+#define EPD_LOCAL 1
+#define EPD_IP 2
+#define EPD_MAC 3
+#define EPD_MAGIC 4
+#define EPD_PHONENUM 5
+
+typedef void (*notify_func) __P((void *, int));
+
+struct notifier {
+ struct notifier *next;
+ notify_func func;
+ void *arg;
+};
+
+/*
+ * Global variables.
+ */
+
+extern int hungup; /* Physical layer has disconnected */
+extern int ifunit; /* Interface unit number */
+extern char ifname[]; /* Interface name */
+extern char hostname[]; /* Our hostname */
+extern u_char outpacket_buf[]; /* Buffer for outgoing packets */
+extern int devfd; /* fd of underlying device */
+extern int fd_ppp; /* fd for talking PPP */
+extern int phase; /* Current state of link - see values below */
+extern int baud_rate; /* Current link speed in bits/sec */
+extern char *progname; /* Name of this program */
+extern int redirect_stderr;/* Connector's stderr should go to file */
+extern char peer_authname[];/* Authenticated name of peer */
+extern int auth_done[NUM_PPP]; /* Methods actually used for auth */
+extern int privileged; /* We were run by real-uid root */
+extern int need_holdoff; /* Need holdoff period after link terminates */
+extern char **script_env; /* Environment variables for scripts */
+extern int detached; /* Have detached from controlling tty */
+extern GIDSET_TYPE groups[NGROUPS_MAX]; /* groups the user is in */
+extern int ngroups; /* How many groups valid in groups */
+extern struct pppd_stats link_stats; /* byte/packet counts etc. for link */
+extern int link_stats_valid; /* set if link_stats is valid */
+extern unsigned link_connect_time; /* time the link was up for */
+extern int using_pty; /* using pty as device (notty or pty opt.) */
+extern int log_to_fd; /* logging to this fd as well as syslog */
+extern bool log_default; /* log_to_fd is default (stdout) */
+extern char *no_ppp_msg; /* message to print if ppp not in kernel */
+extern volatile int status; /* exit status for pppd */
+extern bool devnam_fixed; /* can no longer change devnam */
+extern int unsuccess; /* # unsuccessful connection attempts */
+extern int do_callback; /* set if we want to do callback next */
+extern int doing_callback; /* set if this is a callback */
+extern int error_count; /* # of times error() has been called */
+extern char ppp_devnam[MAXPATHLEN];
+extern char remote_number[MAXNAMELEN]; /* Remote telephone number, if avail. */
+extern int ppp_session_number; /* Session number (eg PPPoE session) */
+extern int fd_devnull; /* fd open to /dev/null */
+
+extern int listen_time; /* time to listen first (ms) */
+extern bool doing_multilink;
+extern bool multilink_master;
+extern bool bundle_eof;
+extern bool bundle_terminating;
+
+extern struct notifier *pidchange; /* for notifications of pid changing */
+extern struct notifier *phasechange; /* for notifications of phase changes */
+extern struct notifier *exitnotify; /* for notification that we're exiting */
+extern struct notifier *sigreceived; /* notification of received signal */
+extern struct notifier *ip_up_notifier; /* IPCP has come up */
+extern struct notifier *ip_down_notifier; /* IPCP has gone down */
+extern struct notifier *auth_up_notifier; /* peer has authenticated */
+extern struct notifier *link_down_notifier; /* link has gone down */
+extern struct notifier *fork_notifier; /* we are a new child process */
+
+/* Values for do_callback and doing_callback */
+#define CALLBACK_DIALIN 1 /* we are expecting the call back */
+#define CALLBACK_DIALOUT 2 /* we are dialling out to call back */
+
+/*
+ * Variables set by command-line options.
+ */
+
+extern int debug; /* Debug flag */
+extern int kdebugflag; /* Tell kernel to print debug messages */
+extern int default_device; /* Using /dev/tty or equivalent */
+extern char devnam[MAXPATHLEN]; /* Device name */
+extern int crtscts; /* Use hardware flow control */
+extern bool modem; /* Use modem control lines */
+extern int inspeed; /* Input/Output speed requested */
+extern u_int32_t netmask; /* IP netmask to set on interface */
+extern bool lockflag; /* Create lock file to lock the serial dev */
+extern bool nodetach; /* Don't detach from controlling tty */
+extern bool updetach; /* Detach from controlling tty when link up */
+extern char *initializer; /* Script to initialize physical link */
+extern char *connect_script; /* Script to establish physical link */
+extern char *disconnect_script; /* Script to disestablish physical link */
+extern char *welcomer; /* Script to welcome client after connection */
+extern char *ptycommand; /* Command to run on other side of pty */
+extern int maxconnect; /* Maximum connect time (seconds) */
+extern char user[MAXNAMELEN];/* Our name for authenticating ourselves */
+extern char passwd[MAXSECRETLEN]; /* Password for PAP or CHAP */
+extern bool auth_required; /* Peer is required to authenticate */
+extern bool persist; /* Reopen link after it goes down */
+extern bool uselogin; /* Use /etc/passwd for checking PAP */
+extern bool session_mgmt; /* Do session management (login records) */
+extern char our_name[MAXNAMELEN];/* Our name for authentication purposes */
+extern char remote_name[MAXNAMELEN]; /* Peer's name for authentication */
+extern bool explicit_remote;/* remote_name specified with remotename opt */
+extern bool demand; /* Do dial-on-demand */
+extern char *ipparam; /* Extra parameter for ip up/down scripts */
+extern bool cryptpap; /* Others' PAP passwords are encrypted */
+extern int idle_time_limit;/* Shut down link if idle for this long */
+extern int holdoff; /* Dead time before restarting */
+extern bool holdoff_specified; /* true if user gave a holdoff value */
+extern bool notty; /* Stdin/out is not a tty */
+extern char *pty_socket; /* Socket to connect to pty */
+extern char *record_file; /* File to record chars sent/received */
+extern bool sync_serial; /* Device is synchronous serial device */
+extern int maxfail; /* Max # of unsuccessful connection attempts */
+extern char linkname[MAXPATHLEN]; /* logical name for link */
+extern bool tune_kernel; /* May alter kernel settings as necessary */
+extern int connect_delay; /* Time to delay after connect script */
+extern int max_data_rate; /* max bytes/sec through charshunt */
+extern int req_unit; /* interface unit number to use */
+extern bool multilink; /* enable multilink operation */
+extern bool noendpoint; /* don't send or accept endpt. discrim. */
+extern char *bundle_name; /* bundle name for multilink */
+extern bool dump_options; /* print out option values */
+extern bool dryrun; /* check everything, print options, exit */
+extern int child_wait; /* # seconds to wait for children at end */
+
+#ifdef MAXOCTETS
+extern unsigned int maxoctets; /* Maximum octetes per session (in bytes) */
+extern int maxoctets_dir; /* Direction :
+ 0 - in+out (default)
+ 1 - in
+ 2 - out
+ 3 - max(in,out) */
+extern int maxoctets_timeout; /* Timeout for check of octets limit */
+#define PPP_OCTETS_DIRECTION_SUM 0
+#define PPP_OCTETS_DIRECTION_IN 1
+#define PPP_OCTETS_DIRECTION_OUT 2
+#define PPP_OCTETS_DIRECTION_MAXOVERAL 3
+/* same as previos, but little different on RADIUS side */
+#define PPP_OCTETS_DIRECTION_MAXSESSION 4
+#endif
+
+#ifdef PPP_FILTER
+extern struct bpf_program pass_filter; /* Filter for pkts to pass */
+extern struct bpf_program active_filter; /* Filter for link-active pkts */
+#endif
+
+#ifdef MSLANMAN
+extern bool ms_lanman; /* Use LanMan password instead of NT */
+ /* Has meaning only with MS-CHAP challenges */
+#endif
+
+/* Values for auth_pending, auth_done */
+#define PAP_WITHPEER 0x1
+#define PAP_PEER 0x2
+#define CHAP_WITHPEER 0x4
+#define CHAP_PEER 0x8
+#define EAP_WITHPEER 0x10
+#define EAP_PEER 0x20
+
+/* Values for auth_done only */
+#define CHAP_MD5_WITHPEER 0x40
+#define CHAP_MD5_PEER 0x80
+#define CHAP_MS_SHIFT 8 /* LSB position for MS auths */
+#define CHAP_MS_WITHPEER 0x100
+#define CHAP_MS_PEER 0x200
+#define CHAP_MS2_WITHPEER 0x400
+#define CHAP_MS2_PEER 0x800
+
+extern char *current_option; /* the name of the option being parsed */
+extern int privileged_option; /* set iff the current option came from root */
+extern char *option_source; /* string saying where the option came from */
+extern int option_priority; /* priority of current options */
+
+/*
+ * Values for phase.
+ */
+#define PHASE_DEAD 0
+#define PHASE_INITIALIZE 1
+#define PHASE_SERIALCONN 2
+#define PHASE_DORMANT 3
+#define PHASE_ESTABLISH 4
+#define PHASE_AUTHENTICATE 5
+#define PHASE_CALLBACK 6
+#define PHASE_NETWORK 7
+#define PHASE_RUNNING 8
+#define PHASE_TERMINATE 9
+#define PHASE_DISCONNECT 10
+#define PHASE_HOLDOFF 11
+#define PHASE_MASTER 12
+
+/*
+ * The following struct gives the addresses of procedures to call
+ * for a particular protocol.
+ */
+struct protent {
+ u_short protocol; /* PPP protocol number */
+ /* Initialization procedure */
+ void (*init) __P((int unit));
+ /* Process a received packet */
+ void (*input) __P((int unit, u_char *pkt, int len));
+ /* Process a received protocol-reject */
+ void (*protrej) __P((int unit));
+ /* Lower layer has come up */
+ void (*lowerup) __P((int unit));
+ /* Lower layer has gone down */
+ void (*lowerdown) __P((int unit));
+ /* Open the protocol */
+ void (*open) __P((int unit));
+ /* Close the protocol */
+ void (*close) __P((int unit, char *reason));
+ /* Print a packet in readable form */
+ int (*printpkt) __P((u_char *pkt, int len,
+ void (*printer) __P((void *, char *, ...)),
+ void *arg));
+ /* Process a received data packet */
+ void (*datainput) __P((int unit, u_char *pkt, int len));
+ bool enabled_flag; /* 0 iff protocol is disabled */
+ char *name; /* Text name of protocol */
+ char *data_name; /* Text name of corresponding data protocol */
+ option_t *options; /* List of command-line options */
+ /* Check requested options, assign defaults */
+ void (*check_options) __P((void));
+ /* Configure interface for demand-dial */
+ int (*demand_conf) __P((int unit));
+ /* Say whether to bring up link for this pkt */
+ int (*active_pkt) __P((u_char *pkt, int len));
+};
+
+/* Table of pointers to supported protocols */
+extern struct protent *protocols[];
+
+/*
+ * This struct contains pointers to a set of procedures for
+ * doing operations on a "channel". A channel provides a way
+ * to send and receive PPP packets - the canonical example is
+ * a serial port device in PPP line discipline (or equivalently
+ * with PPP STREAMS modules pushed onto it).
+ */
+struct channel {
+ /* set of options for this channel */
+ option_t *options;
+ /* find and process a per-channel options file */
+ void (*process_extra_options) __P((void));
+ /* check all the options that have been given */
+ void (*check_options) __P((void));
+ /* get the channel ready to do PPP, return a file descriptor */
+ int (*connect) __P((void));
+ /* we're finished with the channel */
+ void (*disconnect) __P((void));
+ /* put the channel into PPP `mode' */
+ int (*establish_ppp) __P((int));
+ /* take the channel out of PPP `mode', restore loopback if demand */
+ void (*disestablish_ppp) __P((int));
+ /* set the transmit-side PPP parameters of the channel */
+ void (*send_config) __P((int, u_int32_t, int, int));
+ /* set the receive-side PPP parameters of the channel */
+ void (*recv_config) __P((int, u_int32_t, int, int));
+ /* cleanup on error or normal exit */
+ void (*cleanup) __P((void));
+ /* close the device, called in children after fork */
+ void (*close) __P((void));
+};
+
+extern struct channel *the_channel;
+
+/*
+ * Prototypes.
+ */
+
+/* Procedures exported from main.c. */
+void set_ifunit __P((int)); /* set stuff that depends on ifunit */
+void detach __P((void)); /* Detach from controlling tty */
+void die __P((int)); /* Cleanup and exit */
+void quit __P((void)); /* like die(1) */
+void novm __P((char *)); /* Say we ran out of memory, and die */
+void timeout __P((void (*func)(void *), void *arg, int s, int us));
+ /* Call func(arg) after s.us seconds */
+void untimeout __P((void (*func)(void *), void *arg));
+ /* Cancel call to func(arg) */
+void record_child __P((int, char *, void (*) (void *), void *, int));
+pid_t safe_fork __P((int, int, int)); /* Fork & close stuff in child */
+int device_script __P((char *cmd, int in, int out, int dont_wait));
+ /* Run `cmd' with given stdin and stdout */
+pid_t run_program __P((char *prog, char **args, int must_exist,
+ void (*done)(void *), void *arg, int wait));
+ /* Run program prog with args in child */
+void reopen_log __P((void)); /* (re)open the connection to syslog */
+void print_link_stats __P((void)); /* Print stats, if available */
+void reset_link_stats __P((int)); /* Reset (init) stats when link goes up */
+void update_link_stats __P((int)); /* Get stats at link termination */
+void script_setenv __P((char *, char *, int)); /* set script env var */
+void script_unsetenv __P((char *)); /* unset script env var */
+void new_phase __P((int)); /* signal start of new phase */
+void add_notifier __P((struct notifier **, notify_func, void *));
+void remove_notifier __P((struct notifier **, notify_func, void *));
+void notify __P((struct notifier *, int));
+int ppp_send_config __P((int, int, u_int32_t, int, int));
+int ppp_recv_config __P((int, int, u_int32_t, int, int));
+const char *protocol_name __P((int));
+void remove_pidfiles __P((void));
+void lock_db __P((void));
+void unlock_db __P((void));
+
+/* Procedures exported from tty.c. */
+void tty_init __P((void));
+
+/* Procedures exported from utils.c. */
+void log_packet __P((u_char *, int, char *, int));
+ /* Format a packet and log it with syslog */
+void print_string __P((char *, int, void (*) (void *, char *, ...),
+ void *)); /* Format a string for output */
+int slprintf __P((char *, int, char *, ...)); /* sprintf++ */
+int vslprintf __P((char *, int, char *, va_list)); /* vsprintf++ */
+size_t strlcpy __P((char *, const char *, size_t)); /* safe strcpy */
+size_t strlcat __P((char *, const char *, size_t)); /* safe strncpy */
+void dbglog __P((char *, ...)); /* log a debug message */
+void info __P((char *, ...)); /* log an informational message */
+void notice __P((char *, ...)); /* log a notice-level message */
+void warn __P((char *, ...)); /* log a warning message */
+void error __P((char *, ...)); /* log an error message */
+void fatal __P((char *, ...)); /* log an error message and die(1) */
+void init_pr_log __P((const char *, int)); /* initialize for using pr_log */
+void pr_log __P((void *, char *, ...)); /* printer fn, output to syslog */
+void end_pr_log __P((void)); /* finish up after using pr_log */
+void dump_packet __P((const char *, u_char *, int));
+ /* dump packet to debug log if interesting */
+ssize_t complete_read __P((int, void *, size_t));
+ /* read a complete buffer */
+
+/* Procedures exported from auth.c */
+void link_required __P((int)); /* we are starting to use the link */
+void start_link __P((int)); /* bring the link up now */
+void link_terminated __P((int)); /* we are finished with the link */
+void link_down __P((int)); /* the LCP layer has left the Opened state */
+void upper_layers_down __P((int));/* take all NCPs down */
+void link_established __P((int)); /* the link is up; authenticate now */
+void start_networks __P((int)); /* start all the network control protos */
+void continue_networks __P((int)); /* start network [ip, etc] control protos */
+void np_up __P((int, int)); /* a network protocol has come up */
+void np_down __P((int, int)); /* a network protocol has gone down */
+void np_finished __P((int, int)); /* a network protocol no longer needs link */
+void auth_peer_fail __P((int, int));
+ /* peer failed to authenticate itself */
+void auth_peer_success __P((int, int, int, char *, int));
+ /* peer successfully authenticated itself */
+void auth_withpeer_fail __P((int, int));
+ /* we failed to authenticate ourselves */
+void auth_withpeer_success __P((int, int, int));
+ /* we successfully authenticated ourselves */
+void auth_check_options __P((void));
+ /* check authentication options supplied */
+void auth_reset __P((int)); /* check what secrets we have */
+int check_passwd __P((int, char *, int, char *, int, char **));
+ /* Check peer-supplied username/password */
+int get_secret __P((int, char *, char *, char *, int *, int));
+ /* get "secret" for chap */
+int get_srp_secret __P((int unit, char *client, char *server, char *secret,
+ int am_server));
+int auth_ip_addr __P((int, u_int32_t));
+ /* check if IP address is authorized */
+int auth_number __P((void)); /* check if remote number is authorized */
+int bad_ip_adrs __P((u_int32_t));
+ /* check if IP address is unreasonable */
+
+/* Procedures exported from demand.c */
+void demand_conf __P((void)); /* config interface(s) for demand-dial */
+void demand_block __P((void)); /* set all NPs to queue up packets */
+void demand_unblock __P((void)); /* set all NPs to pass packets */
+void demand_discard __P((void)); /* set all NPs to discard packets */
+void demand_rexmit __P((int)); /* retransmit saved frames for an NP */
+int loop_chars __P((unsigned char *, int)); /* process chars from loopback */
+int loop_frame __P((unsigned char *, int)); /* should we bring link up? */
+
+/* Procedures exported from multilink.c */
+#ifdef HAVE_MULTILINK
+void mp_check_options __P((void)); /* Check multilink-related options */
+int mp_join_bundle __P((void)); /* join our link to an appropriate bundle */
+void mp_exit_bundle __P((void)); /* have disconnected our link from bundle */
+void mp_bundle_terminated __P((void));
+char *epdisc_to_str __P((struct epdisc *)); /* string from endpoint discrim. */
+int str_to_epdisc __P((struct epdisc *, char *)); /* endpt disc. from str */
+#else
+#define mp_bundle_terminated() /* nothing */
+#define mp_exit_bundle() /* nothing */
+#define doing_multilink 0
+#define multilink_master 0
+#endif
+
+/* Procedures exported from sys-*.c */
+void sys_init __P((void)); /* Do system-dependent initialization */
+void sys_cleanup __P((void)); /* Restore system state before exiting */
+int sys_check_options __P((void)); /* Check options specified */
+void sys_close __P((void)); /* Clean up in a child before execing */
+int ppp_available __P((void)); /* Test whether ppp kernel support exists */
+int get_pty __P((int *, int *, char *, int)); /* Get pty master/slave */
+int open_ppp_loopback __P((void)); /* Open loopback for demand-dialling */
+int tty_establish_ppp __P((int)); /* Turn serial port into a ppp interface */
+void tty_disestablish_ppp __P((int)); /* Restore port to normal operation */
+void generic_disestablish_ppp __P((int dev_fd)); /* Restore device setting */
+int generic_establish_ppp __P((int dev_fd)); /* Make a ppp interface */
+void make_new_bundle __P((int, int, int, int)); /* Create new bundle */
+int bundle_attach __P((int)); /* Attach link to existing bundle */
+void cfg_bundle __P((int, int, int, int)); /* Configure existing bundle */
+void destroy_bundle __P((void)); /* Tell driver to destroy bundle */
+void clean_check __P((void)); /* Check if line was 8-bit clean */
+void set_up_tty __P((int, int)); /* Set up port's speed, parameters, etc. */
+void restore_tty __P((int)); /* Restore port's original parameters */
+void setdtr __P((int, int)); /* Raise or lower port's DTR line */
+void output __P((int, u_char *, int)); /* Output a PPP packet */
+void wait_input __P((struct timeval *));
+ /* Wait for input, with timeout */
+void add_fd __P((int)); /* Add fd to set to wait for */
+void remove_fd __P((int)); /* Remove fd from set to wait for */
+int read_packet __P((u_char *)); /* Read PPP packet */
+int get_loop_output __P((void)); /* Read pkts from loopback */
+void tty_send_config __P((int, u_int32_t, int, int));
+ /* Configure i/f transmit parameters */
+void tty_set_xaccm __P((ext_accm));
+ /* Set extended transmit ACCM */
+void tty_recv_config __P((int, u_int32_t, int, int));
+ /* Configure i/f receive parameters */
+int ccp_test __P((int, u_char *, int, int));
+ /* Test support for compression scheme */
+void ccp_flags_set __P((int, int, int));
+ /* Set kernel CCP state */
+int ccp_fatal_error __P((int)); /* Test for fatal decomp error in kernel */
+int get_idle_time __P((int, struct ppp_idle *));
+ /* Find out how long link has been idle */
+int get_ppp_stats __P((int, struct pppd_stats *));
+ /* Return link statistics */
+void netif_set_mtu __P((int, int)); /* Set PPP interface MTU */
+int netif_get_mtu __P((int)); /* Get PPP interface MTU */
+int sifvjcomp __P((int, int, int, int));
+ /* Configure VJ TCP header compression */
+int sifup __P((int)); /* Configure i/f up for one protocol */
+int sifnpmode __P((int u, int proto, enum NPmode mode));
+ /* Set mode for handling packets for proto */
+int sifdown __P((int)); /* Configure i/f down for one protocol */
+int sifaddr __P((int, u_int32_t, u_int32_t, u_int32_t));
+ /* Configure IPv4 addresses for i/f */
+int cifaddr __P((int, u_int32_t, u_int32_t));
+ /* Reset i/f IP addresses */
+#ifdef INET6
+int sif6addr __P((int, eui64_t, eui64_t));
+ /* Configure IPv6 addresses for i/f */
+int cif6addr __P((int, eui64_t, eui64_t));
+ /* Remove an IPv6 address from i/f */
+#endif
+int sifdefaultroute __P((int, u_int32_t, u_int32_t));
+ /* Create default route through i/f */
+int cifdefaultroute __P((int, u_int32_t, u_int32_t));
+ /* Delete default route through i/f */
+int sifproxyarp __P((int, u_int32_t));
+ /* Add proxy ARP entry for peer */
+int cifproxyarp __P((int, u_int32_t));
+ /* Delete proxy ARP entry for peer */
+u_int32_t GetMask __P((u_int32_t)); /* Get appropriate netmask for address */
+int lock __P((char *)); /* Create lock file for device */
+int relock __P((int)); /* Rewrite lock file with new pid */
+void unlock __P((void)); /* Delete previously-created lock file */
+void logwtmp __P((const char *, const char *, const char *));
+ /* Write entry to wtmp file */
+int get_host_seed __P((void)); /* Get host-dependent random number seed */
+int have_route_to __P((u_int32_t)); /* Check if route to addr exists */
+#ifdef PPP_FILTER
+int set_filters __P((struct bpf_program *pass, struct bpf_program *active));
+ /* Set filter programs in kernel */
+#endif
+#ifdef IPX_CHANGE
+int sipxfaddr __P((int, unsigned long, unsigned char *));
+int cipxfaddr __P((int));
+#endif
+int get_if_hwaddr __P((u_char *addr, char *name));
+char *get_first_ethernet __P((void));
+
+/* Procedures exported from options.c */
+int setipaddr __P((char *, char **, int)); /* Set local/remote ip addresses */
+int parse_args __P((int argc, char **argv));
+ /* Parse options from arguments given */
+int options_from_file __P((char *filename, int must_exist, int check_prot,
+ int privileged));
+ /* Parse options from an options file */
+int options_from_user __P((void)); /* Parse options from user's .ppprc */
+int options_for_tty __P((void)); /* Parse options from /etc/ppp/options.tty */
+int options_from_list __P((struct wordlist *, int privileged));
+ /* Parse options from a wordlist */
+int getword __P((FILE *f, char *word, int *newlinep, char *filename));
+ /* Read a word from a file */
+void option_error __P((char *fmt, ...));
+ /* Print an error message about an option */
+int int_option __P((char *, int *));
+ /* Simplified number_option for decimal ints */
+void add_options __P((option_t *)); /* Add extra options */
+void check_options __P((void)); /* check values after all options parsed */
+int override_value __P((const char *, int, const char *));
+ /* override value if permitted by priority */
+void print_options __P((void (*) __P((void *, char *, ...)), void *));
+ /* print out values of all options */
+
+int parse_dotted_ip __P((char *, u_int32_t *));
+
+/*
+ * Hooks to enable plugins to change various things.
+ */
+extern int (*new_phase_hook) __P((int));
+extern int (*idle_time_hook) __P((struct ppp_idle *));
+extern int (*holdoff_hook) __P((void));
+extern int (*pap_check_hook) __P((void));
+extern int (*pap_auth_hook) __P((char *user, char *passwd, char **msgp,
+ struct wordlist **paddrs,
+ struct wordlist **popts));
+extern void (*pap_logout_hook) __P((void));
+extern int (*pap_passwd_hook) __P((char *user, char *passwd));
+extern int (*allowed_address_hook) __P((u_int32_t addr));
+extern void (*ip_up_hook) __P((void));
+extern void (*ip_down_hook) __P((void));
+extern void (*ip_choose_hook) __P((u_int32_t *));
+
+extern int (*chap_check_hook) __P((void));
+extern int (*chap_passwd_hook) __P((char *user, char *passwd));
+extern void (*multilink_join_hook) __P((void));
+
+/* Let a plugin snoop sent and received packets. Useful for L2TP */
+extern void (*snoop_recv_hook) __P((unsigned char *p, int len));
+extern void (*snoop_send_hook) __P((unsigned char *p, int len));
+
+/*
+ * Inline versions of get/put char/short/long.
+ * Pointer is advanced; we assume that both arguments
+ * are lvalues and will already be in registers.
+ * cp MUST be u_char *.
+ */
+#define GETCHAR(c, cp) { \
+ (c) = *(cp)++; \
+}
+#define PUTCHAR(c, cp) { \
+ *(cp)++ = (u_char) (c); \
+}
+
+
+#define GETSHORT(s, cp) { \
+ (s) = *(cp)++ << 8; \
+ (s) |= *(cp)++; \
+}
+#define PUTSHORT(s, cp) { \
+ *(cp)++ = (u_char) ((s) >> 8); \
+ *(cp)++ = (u_char) (s); \
+}
+
+#define GETLONG(l, cp) { \
+ (l) = *(cp)++ << 8; \
+ (l) |= *(cp)++; (l) <<= 8; \
+ (l) |= *(cp)++; (l) <<= 8; \
+ (l) |= *(cp)++; \
+}
+#define PUTLONG(l, cp) { \
+ *(cp)++ = (u_char) ((l) >> 24); \
+ *(cp)++ = (u_char) ((l) >> 16); \
+ *(cp)++ = (u_char) ((l) >> 8); \
+ *(cp)++ = (u_char) (l); \
+}
+
+#define INCPTR(n, cp) ((cp) += (n))
+#define DECPTR(n, cp) ((cp) -= (n))
+
+/*
+ * System dependent definitions for user-level 4.3BSD UNIX implementation.
+ */
+
+#define TIMEOUT(r, f, t) timeout((r), (f), (t), 0)
+#define UNTIMEOUT(r, f) untimeout((r), (f))
+
+#define BCOPY(s, d, l) memcpy(d, s, l)
+#define BZERO(s, n) memset(s, 0, n)
+#define BCMP(s1, s2, l) memcmp(s1, s2, l)
+
+#define PRINTMSG(m, l) { info("Remote message: %0.*v", l, m); }
+
+/*
+ * MAKEHEADER - Add Header fields to a packet.
+ */
+#define MAKEHEADER(p, t) { \
+ PUTCHAR(PPP_ALLSTATIONS, p); \
+ PUTCHAR(PPP_UI, p); \
+ PUTSHORT(t, p); }
+
+/*
+ * Exit status values.
+ */
+#define EXIT_OK 0
+#define EXIT_FATAL_ERROR 1
+#define EXIT_OPTION_ERROR 2
+#define EXIT_NOT_ROOT 3
+#define EXIT_NO_KERNEL_SUPPORT 4
+#define EXIT_USER_REQUEST 5
+#define EXIT_LOCK_FAILED 6
+#define EXIT_OPEN_FAILED 7
+#define EXIT_CONNECT_FAILED 8
+#define EXIT_PTYCMD_FAILED 9
+#define EXIT_NEGOTIATION_FAILED 10
+#define EXIT_PEER_AUTH_FAILED 11
+#define EXIT_IDLE_TIMEOUT 12
+#define EXIT_CONNECT_TIME 13
+#define EXIT_CALLBACK 14
+#define EXIT_PEER_DEAD 15
+#define EXIT_HANGUP 16
+#define EXIT_LOOPBACK 17
+#define EXIT_INIT_FAILED 18
+#define EXIT_AUTH_TOPEER_FAILED 19
+#ifdef MAXOCTETS
+#define EXIT_TRAFFIC_LIMIT 20
+#endif
+#define EXIT_CNID_AUTH_FAILED 21
+
+/*
+ * Debug macros. Slightly useful for finding bugs in pppd, not particularly
+ * useful for finding out why your connection isn't being established.
+ */
+#ifdef DEBUGALL
+#define DEBUGMAIN 1
+#define DEBUGFSM 1
+#define DEBUGLCP 1
+#define DEBUGIPCP 1
+#define DEBUGIPV6CP 1
+#define DEBUGUPAP 1
+#define DEBUGCHAP 1
+#endif
+
+#ifndef LOG_PPP /* we use LOG_LOCAL2 for syslog by default */
+#if defined(DEBUGMAIN) || defined(DEBUGFSM) || defined(DEBUGSYS) \
+ || defined(DEBUGLCP) || defined(DEBUGIPCP) || defined(DEBUGUPAP) \
+ || defined(DEBUGCHAP) || defined(DEBUG) || defined(DEBUGIPV6CP)
+#define LOG_PPP LOG_LOCAL2
+#else
+#define LOG_PPP LOG_DAEMON
+#endif
+#endif /* LOG_PPP */
+
+#ifdef DEBUGMAIN
+#define MAINDEBUG(x) if (debug) dbglog x
+#else
+#define MAINDEBUG(x)
+#endif
+
+#ifdef DEBUGSYS
+#define SYSDEBUG(x) if (debug) dbglog x
+#else
+#define SYSDEBUG(x)
+#endif
+
+#ifdef DEBUGFSM
+#define FSMDEBUG(x) if (debug) dbglog x
+#else
+#define FSMDEBUG(x)
+#endif
+
+#ifdef DEBUGLCP
+#define LCPDEBUG(x) if (debug) dbglog x
+#else
+#define LCPDEBUG(x)
+#endif
+
+#ifdef DEBUGIPCP
+#define IPCPDEBUG(x) if (debug) dbglog x
+#else
+#define IPCPDEBUG(x)
+#endif
+
+#ifdef DEBUGIPV6CP
+#define IPV6CPDEBUG(x) if (debug) dbglog x
+#else
+#define IPV6CPDEBUG(x)
+#endif
+
+#ifdef DEBUGUPAP
+#define UPAPDEBUG(x) if (debug) dbglog x
+#else
+#define UPAPDEBUG(x)
+#endif
+
+#ifdef DEBUGCHAP
+#define CHAPDEBUG(x) if (debug) dbglog x
+#else
+#define CHAPDEBUG(x)
+#endif
+
+#ifdef DEBUGIPXCP
+#define IPXCPDEBUG(x) if (debug) dbglog x
+#else
+#define IPXCPDEBUG(x)
+#endif
+
+#ifndef SIGTYPE
+#if defined(sun) || defined(SYSV) || defined(POSIX_SOURCE)
+#define SIGTYPE void
+#else
+#define SIGTYPE int
+#endif /* defined(sun) || defined(SYSV) || defined(POSIX_SOURCE) */
+#endif /* SIGTYPE */
+
+#ifndef MIN
+#define MIN(a, b) ((a) < (b)? (a): (b))
+#endif
+#ifndef MAX
+#define MAX(a, b) ((a) > (b)? (a): (b))
+#endif
+
+#ifndef offsetof
+#define offsetof(type, member) ((size_t) &((type *)0)->member)
+#endif
+
+#endif /* __PPP_H__ */
diff --git a/package/cdrkit/Makefile b/package/cdrkit/Makefile
new file mode 100644
index 000000000..45adc5712
--- /dev/null
+++ b/package/cdrkit/Makefile
@@ -0,0 +1,33 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= cdrkit
+PKG_VERSION:= 1.1.11
+PKG_RELEASE:= 1
+PKG_HASH:= d1c030756ecc182defee9fe885638c1785d35a2c2a297b4604c0e0dcc78e47da
+PKG_DESCR:= cd burning kit
+PKG_SECTION:= sys/hw
+PKG_DEPENDS:= libmagic zlib libbz2 libcap
+PKG_BUILDDEP:= cmake-host file zlib bzip2 libcap
+PKG_SITES:= http://snapshot.debian.org/archive/debian/20141023T043132Z/pool/main/c/cdrkit/
+
+PKG_BUILDDEP_UCLIBC:= libiconv-tiny
+PKG_BUILDDEP_UCLIBC_NG:=libiconv-tiny
+
+DISTFILES:= $(PKG_NAME)_$(PKG_VERSION).orig.tar.gz
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,CDRKIT,cdrkit,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+CONFIG_STYLE:= cmake
+CMAKE_FLAGS+= -DUSE_LIBC_NLS=1 -DUSE_LIBXNET=0 -DUSE_LIBNLS=0
+
+cdrkit-install:
+ $(INSTALL_DIR) $(IDIR_CDRKIT)/usr/bin
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/* \
+ $(IDIR_CDRKIT)/usr/bin
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/cdrkit/patches/patch-Makefile b/package/cdrkit/patches/patch-Makefile
new file mode 100644
index 000000000..adf3bd7e2
--- /dev/null
+++ b/package/cdrkit/patches/patch-Makefile
@@ -0,0 +1,466 @@
+--- cdrkit-1.1.11.orig/Makefile 2007-05-06 12:23:54.000000000 +0200
++++ cdrkit-1.1.11/Makefile 2015-02-25 10:54:08.000000000 +0100
+@@ -1,72 +1,409 @@
+-ifneq ($(CFLAGS),)
+-CMAKETWEAKS += ( cd build ; cmake .. -DCMAKE_C_FLAGS="$(CFLAGS)" ) || exit 1;
+-endif
++# CMAKE generated file: DO NOT EDIT!
++# Generated by "Unix Makefiles" Generator, CMake Version 3.1
+
+-ifneq ($(LDFLAGS),)
+-CMAKETWEAKS += (cd build ; cmake .. -DCMAKE_EXE_LINKER_FLAGS:STRING="$(LDFLAGS)" -DCMAKE_MODULE_LINKER_FLAGS:STRING="$(LDFLAGS)" -DCMAKE_SHARED_LINKER_FLAGS:STRING="$(LDFLAGS)" ) || exit 1;
+-endif
++# Default target executed when no arguments are given to make.
++default_target: all
++.PHONY : default_target
+
+-ifneq ($(PREFIX),)
+-CMAKETWEAKS += ( cd build ; cmake .. -DCMAKE_INSTALL_PREFIX="$(PREFIX)") || exit 1;
+-endif
++# Allow only one "make -f Makefile2" at a time, but pass parallelism.
++.NOTPARALLEL:
++.PHONY : .NOTPARALLEL
+
+-ifneq ($(MANSUBDIR),)
+-CMAKETWEAKS += ( cd build ; cmake .. -DMANSUBDIR="$(MANSUBDIR)" ) || exit 1;
+-endif
++#=============================================================================
++# Special targets provided by cmake.
+
+-default_target: all
++# Disable implicit rules so canonical targets will work.
++.SUFFIXES:
+
+-DISTNAME=cdrkit-$(shell cat VERSION)
+-DEBSRCNAME=cdrkit_$(shell cat VERSION | sed -e "s,pre,~pre,").orig.tar.gz
++# Remove some rules from gmake that .SUFFIXES does not remove.
++SUFFIXES =
+
+-build/Makefile:
+- @-mkdir build 2>/dev/null
+- cd build && cmake ..
++.SUFFIXES: .hpux_make_needs_suffix_list
+
+-cmakepurge:
+- rm -rf install_manifest.txt progress.make CMakeFiles CMakeCache.txt cmake_install.cmake
+- rm -rf */install_manifest.txt */progress.make */CMakeFiles */CMakeCache.txt */cmake_install.cmake
+- rm -rf */*/install_manifest.txt */*/progress.make */*/CMakeFiles */*/CMakeCache.txt */*/cmake_install.cmake
+- rm */Makefile */*/Makefile
++# Suppress display of executed commands.
++$(VERBOSE).SILENT:
++
++# A target that is always out of date.
++cmake_force:
++.PHONY : cmake_force
++
++#=============================================================================
++# Set environment variables for the build.
++
++# The shell in which to execute make rules.
++SHELL = /bin/sh
++
++# The CMake executable.
++CMAKE_COMMAND = /home/wbx/adk/host_x86_64-linux-gnu/usr/bin/cmake
++
++# The command to remove a file.
++RM = /home/wbx/adk/host_x86_64-linux-gnu/usr/bin/cmake -E remove -f
+
++# Escaping for special characters.
++EQUALS = =
++
++# The top-level source directory on which CMake was run.
++CMAKE_SOURCE_DIR = /home/wbx/adk/build_qemu-arm_uclibc-ng_arm_eabihf/w-cdrkit-1.1.11-1/cdrkit-1.1.11
++
++# The top-level build directory on which CMake was run.
++CMAKE_BINARY_DIR = /home/wbx/adk/build_qemu-arm_uclibc-ng_arm_eabihf/w-cdrkit-1.1.11-1/cdrkit-1.1.11
++
++#=============================================================================
++# Targets provided globally by CMake.
++
++# Special rule for the target install/strip
++install/strip: preinstall
++ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing the project stripped..."
++ /home/wbx/adk/host_x86_64-linux-gnu/usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake
++.PHONY : install/strip
++
++# Special rule for the target install/strip
++install/strip/fast: install/strip
++.PHONY : install/strip/fast
++
++# Special rule for the target edit_cache
++edit_cache:
++ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake cache editor..."
++ /home/wbx/adk/host_x86_64-linux-gnu/usr/bin/ccmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
++.PHONY : edit_cache
++
++# Special rule for the target edit_cache
++edit_cache/fast: edit_cache
++.PHONY : edit_cache/fast
++
++# Special rule for the target rebuild_cache
++rebuild_cache:
++ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Running CMake to regenerate build system..."
++ /home/wbx/adk/host_x86_64-linux-gnu/usr/bin/cmake -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR)
++.PHONY : rebuild_cache
++
++# Special rule for the target rebuild_cache
++rebuild_cache/fast: rebuild_cache
++.PHONY : rebuild_cache/fast
++
++# Special rule for the target install
++install: preinstall
++ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
++ /home/wbx/adk/host_x86_64-linux-gnu/usr/bin/cmake -P cmake_install.cmake
++.PHONY : install
++
++# Special rule for the target install
++install/fast: preinstall/fast
++ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Install the project..."
++ /home/wbx/adk/host_x86_64-linux-gnu/usr/bin/cmake -P cmake_install.cmake
++.PHONY : install/fast
++
++# Special rule for the target list_install_components
++list_install_components:
++ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Available install components are: \"Unspecified\""
++.PHONY : list_install_components
++
++# Special rule for the target list_install_components
++list_install_components/fast: list_install_components
++.PHONY : list_install_components/fast
++
++# Special rule for the target install/local
++install/local: preinstall
++ @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --cyan "Installing only the local directory..."
++ /home/wbx/adk/host_x86_64-linux-gnu/usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake
++.PHONY : install/local
++
++# Special rule for the target install/local
++install/local/fast: install/local
++.PHONY : install/local/fast
++
++# The main all target
++all: cmake_check_build_system
++ $(CMAKE_COMMAND) -E cmake_progress_start /home/wbx/adk/build_qemu-arm_uclibc-ng_arm_eabihf/w-cdrkit-1.1.11-1/cdrkit-1.1.11/CMakeFiles /home/wbx/adk/build_qemu-arm_uclibc-ng_arm_eabihf/w-cdrkit-1.1.11-1/cdrkit-1.1.11/CMakeFiles/progress.marks
++ $(MAKE) -f CMakeFiles/Makefile2 all
++ $(CMAKE_COMMAND) -E cmake_progress_start /home/wbx/adk/build_qemu-arm_uclibc-ng_arm_eabihf/w-cdrkit-1.1.11-1/cdrkit-1.1.11/CMakeFiles 0
++.PHONY : all
++
++# The main clean target
+ clean:
+- rm -rf build
++ $(MAKE) -f CMakeFiles/Makefile2 clean
++.PHONY : clean
+
+-tarball:
+-# if test "$(shell svn status | grep -v -i make)" ; then echo Uncommited files found. Run \"svn status\" to display them. ; exit 1 ; fi
+- @if test -f ../$(DISTNAME).tar.gz ; then echo ../$(DISTNAME).tar.gz exists, not overwritting ; exit 1; fi
+- -svn up
+- rm -rf tmp
+- mkdir tmp
+- svn export . tmp/$(DISTNAME)
+- rm -rf tmp/$(DISTNAME)/debian
+- tar -f - -c -C tmp $(DISTNAME) | gzip -9 > ../$(DISTNAME).tar.gz
+- rm -rf tmp
+- test -e /etc/debian_version && ln -f ../$(DISTNAME).tar.gz ../$(DEBSRCNAME) || true
+- test -e ../tarballs && ln -f ../$(DISTNAME).tar.gz ../tarballs/$(DEBSRCNAME) || true
++# The main clean target
++clean/fast: clean
++.PHONY : clean/fast
+
+-tarball-remove:
+- rm -f ../$(DISTNAME).tar.gz ../tarballs/$(DEBSRCNAME) ../$(DEBSRCNAME)
++# Prepare targets for installation.
++preinstall: all
++ $(MAKE) -f CMakeFiles/Makefile2 preinstall
++.PHONY : preinstall
+
+-SVNBASE=$(shell svn info | grep URL: | cut -f2 -d' ' | xargs dirname)
+-release: tarball
+- svn ci
+- svn cp $(SVNBASE)/trunk $(SVNBASE)/tags/release_$(shell cat VERSION)
++# Prepare targets for installation.
++preinstall/fast:
++ $(MAKE) -f CMakeFiles/Makefile2 preinstall
++.PHONY : preinstall/fast
+
+-#%::
+-# $(MAKE) $(MAKE_FLAGS) build/Makefile
+-# $(CMAKETWEAKS)
+-# $(MAKE) -C build $(MAKE_FLAGS) $@
++# clear depends
++depend:
++ $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1
++.PHONY : depend
+
+-# needs to be explicite, for PHONY and install (AKA INSTALL) file on cygwin
+-install: build/Makefile
+- $(CMAKETWEAKS)
+- $(MAKE) -C build $(MAKE_FLAGS) $@
++#=============================================================================
++# Target rules for targets named devdump
+
+-all: build/Makefile
+- $(CMAKETWEAKS)
+- $(MAKE) -C build $(MAKE_FLAGS) $@
++# Build rule for target.
++devdump: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 devdump
++.PHONY : devdump
+
+-.PHONY: install all
++# fast build rule for target.
++devdump/fast:
++ $(MAKE) -f genisoimage/CMakeFiles/devdump.dir/build.make genisoimage/CMakeFiles/devdump.dir/build
++.PHONY : devdump/fast
+
++#=============================================================================
++# Target rules for targets named genisoimage
++
++# Build rule for target.
++genisoimage: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 genisoimage
++.PHONY : genisoimage
++
++# fast build rule for target.
++genisoimage/fast:
++ $(MAKE) -f genisoimage/CMakeFiles/genisoimage.dir/build.make genisoimage/CMakeFiles/genisoimage.dir/build
++.PHONY : genisoimage/fast
++
++#=============================================================================
++# Target rules for targets named isodebug
++
++# Build rule for target.
++isodebug: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 isodebug
++.PHONY : isodebug
++
++# fast build rule for target.
++isodebug/fast:
++ $(MAKE) -f genisoimage/CMakeFiles/isodebug.dir/build.make genisoimage/CMakeFiles/isodebug.dir/build
++.PHONY : isodebug/fast
++
++#=============================================================================
++# Target rules for targets named isodump
++
++# Build rule for target.
++isodump: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 isodump
++.PHONY : isodump
++
++# fast build rule for target.
++isodump/fast:
++ $(MAKE) -f genisoimage/CMakeFiles/isodump.dir/build.make genisoimage/CMakeFiles/isodump.dir/build
++.PHONY : isodump/fast
++
++#=============================================================================
++# Target rules for targets named isoinfo
++
++# Build rule for target.
++isoinfo: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 isoinfo
++.PHONY : isoinfo
++
++# fast build rule for target.
++isoinfo/fast:
++ $(MAKE) -f genisoimage/CMakeFiles/isoinfo.dir/build.make genisoimage/CMakeFiles/isoinfo.dir/build
++.PHONY : isoinfo/fast
++
++#=============================================================================
++# Target rules for targets named isovfy
++
++# Build rule for target.
++isovfy: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 isovfy
++.PHONY : isovfy
++
++# fast build rule for target.
++isovfy/fast:
++ $(MAKE) -f genisoimage/CMakeFiles/isovfy.dir/build.make genisoimage/CMakeFiles/isovfy.dir/build
++.PHONY : isovfy/fast
++
++#=============================================================================
++# Target rules for targets named wodim
++
++# Build rule for target.
++wodim: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 wodim
++.PHONY : wodim
++
++# fast build rule for target.
++wodim/fast:
++ $(MAKE) -f wodim/CMakeFiles/wodim.dir/build.make wodim/CMakeFiles/wodim.dir/build
++.PHONY : wodim/fast
++
++#=============================================================================
++# Target rules for targets named wodimstuff
++
++# Build rule for target.
++wodimstuff: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 wodimstuff
++.PHONY : wodimstuff
++
++# fast build rule for target.
++wodimstuff/fast:
++ $(MAKE) -f wodim/CMakeFiles/wodimstuff.dir/build.make wodim/CMakeFiles/wodimstuff.dir/build
++.PHONY : wodimstuff/fast
++
++#=============================================================================
++# Target rules for targets named edc
++
++# Build rule for target.
++edc: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 edc
++.PHONY : edc
++
++# fast build rule for target.
++edc/fast:
++ $(MAKE) -f libedc/CMakeFiles/edc.dir/build.make libedc/CMakeFiles/edc.dir/build
++.PHONY : edc/fast
++
++#=============================================================================
++# Target rules for targets named hfs_iso
++
++# Build rule for target.
++hfs_iso: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 hfs_iso
++.PHONY : hfs_iso
++
++# fast build rule for target.
++hfs_iso/fast:
++ $(MAKE) -f libhfs_iso/CMakeFiles/hfs_iso.dir/build.make libhfs_iso/CMakeFiles/hfs_iso.dir/build
++.PHONY : hfs_iso/fast
++
++#=============================================================================
++# Target rules for targets named paranoia
++
++# Build rule for target.
++paranoia: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 paranoia
++.PHONY : paranoia
++
++# fast build rule for target.
++paranoia/fast:
++ $(MAKE) -f libparanoia/CMakeFiles/paranoia.dir/build.make libparanoia/CMakeFiles/paranoia.dir/build
++.PHONY : paranoia/fast
++
++#=============================================================================
++# Target rules for targets named icedax
++
++# Build rule for target.
++icedax: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 icedax
++.PHONY : icedax
++
++# fast build rule for target.
++icedax/fast:
++ $(MAKE) -f icedax/CMakeFiles/icedax.dir/build.make icedax/CMakeFiles/icedax.dir/build
++.PHONY : icedax/fast
++
++#=============================================================================
++# Target rules for targets named usal
++
++# Build rule for target.
++usal: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 usal
++.PHONY : usal
++
++# fast build rule for target.
++usal/fast:
++ $(MAKE) -f libusal/CMakeFiles/usal.dir/build.make libusal/CMakeFiles/usal.dir/build
++.PHONY : usal/fast
++
++#=============================================================================
++# Target rules for targets named rols
++
++# Build rule for target.
++rols: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 rols
++.PHONY : rols
++
++# fast build rule for target.
++rols/fast:
++ $(MAKE) -f librols/CMakeFiles/rols.dir/build.make librols/CMakeFiles/rols.dir/build
++.PHONY : rols/fast
++
++#=============================================================================
++# Target rules for targets named unls
++
++# Build rule for target.
++unls: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 unls
++.PHONY : unls
++
++# fast build rule for target.
++unls/fast:
++ $(MAKE) -f libunls/CMakeFiles/unls.dir/build.make libunls/CMakeFiles/unls.dir/build
++.PHONY : unls/fast
++
++#=============================================================================
++# Target rules for targets named readom
++
++# Build rule for target.
++readom: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 readom
++.PHONY : readom
++
++# fast build rule for target.
++readom/fast:
++ $(MAKE) -f readom/CMakeFiles/readom.dir/build.make readom/CMakeFiles/readom.dir/build
++.PHONY : readom/fast
++
++#=============================================================================
++# Target rules for targets named netscsid
++
++# Build rule for target.
++netscsid: cmake_check_build_system
++ $(MAKE) -f CMakeFiles/Makefile2 netscsid
++.PHONY : netscsid
++
++# fast build rule for target.
++netscsid/fast:
++ $(MAKE) -f netscsid/CMakeFiles/netscsid.dir/build.make netscsid/CMakeFiles/netscsid.dir/build
++.PHONY : netscsid/fast
++
++# Help Target
++help:
++ @echo "The following are some of the valid targets for this Makefile:"
++ @echo "... all (the default if no target is provided)"
++ @echo "... clean"
++ @echo "... depend"
++ @echo "... install/strip"
++ @echo "... edit_cache"
++ @echo "... rebuild_cache"
++ @echo "... install"
++ @echo "... list_install_components"
++ @echo "... install/local"
++ @echo "... isodebug"
++ @echo "... genisoimage"
++ @echo "... isodump"
++ @echo "... isoinfo"
++ @echo "... devdump"
++ @echo "... isovfy"
++ @echo "... wodimstuff"
++ @echo "... wodim"
++ @echo "... edc"
++ @echo "... hfs_iso"
++ @echo "... paranoia"
++ @echo "... icedax"
++ @echo "... usal"
++ @echo "... rols"
++ @echo "... unls"
++ @echo "... readom"
++ @echo "... netscsid"
++.PHONY : help
++
++
++
++#=============================================================================
++# Special targets to cleanup operation of make.
++
++# Special rule to run CMake to check the build system integrity.
++# No rule that depends on this can have commands that come from listfiles
++# because they might be regenerated.
++cmake_check_build_system:
++ $(CMAKE_COMMAND) -H$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0
++.PHONY : cmake_check_build_system
+
diff --git a/package/cdrkit/patches/patch-include_xconfig_h_in b/package/cdrkit/patches/patch-include_xconfig_h_in
new file mode 100644
index 000000000..789849362
--- /dev/null
+++ b/package/cdrkit/patches/patch-include_xconfig_h_in
@@ -0,0 +1,10 @@
+--- cdrkit-1.1.11.orig/include/xconfig.h.in 2006-12-02 12:10:05.000000000 +0100
++++ cdrkit-1.1.11/include/xconfig.h.in 2015-02-21 21:20:01.000000000 +0100
+@@ -187,7 +187,6 @@
+ * they are placed before the large file tests.
+ */
+
+-#define HAVE_RCMD 1 /* rcmd() is present in libc/libsocket */
+ #define HAVE_SOCKET 1 /* socket() is present in libc/libsocket */
+ #define HAVE_SOCKETPAIR 1 /* socketpair() is present in libc/libsocket */
+ #define HAVE_GETSERVBYNAME 1 /* getservbyname() is present in libc/libsocket */
diff --git a/package/cmake/Makefile b/package/cmake/Makefile
index a96a33493..2008780b7 100644
--- a/package/cmake/Makefile
+++ b/package/cmake/Makefile
@@ -4,9 +4,9 @@
include $(ADK_TOPDIR)/rules.mk
PKG_NAME:= cmake
-PKG_VERSION:= 3.1.2
+PKG_VERSION:= 3.1.3
PKG_RELEASE:= 1
-PKG_HASH:= 2b210f7d867a1e716c1895357ebe63c7b9ae61fdb5f2d300ab2f01795f085b35
+PKG_HASH:= 45f4d3fa8a2f61cc092ae461aac4cac1bab4ac6706f98274ea7f314dd315c6d0
PKG_DESCR:= build utility
PKG_SECTION:= dev/tools
PKG_URL:= http://www.cmake.org/
diff --git a/package/crda/Makefile b/package/crda/Makefile
new file mode 100644
index 000000000..2b1d3a09f
--- /dev/null
+++ b/package/crda/Makefile
@@ -0,0 +1,53 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= crda
+PKG_VERSION:= 1.1.3
+PKG_RELEASE:= 1
+PKG_HASH:= aa8a7fe92f0765986c421a5b6768a185375ac210393df0605ee132f6754825f0
+PKG_DESCR:= central regulatory domain agent for wireless networks
+PKG_SECTION:= net/wifi
+PKG_DEPENDS:= libnl
+PKG_BUILDDEP:= libnl
+PKG_URL:= http://wireless.kernel.org/en/developers/Regulatory
+PKG_SITES:= http://linuxwireless.org/download/crda/
+
+DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.bz2
+
+PKG_FLAVOURS_CRDA:= WITH_UDEV
+PKGFD_WITH_UDEV:= install shipped udev rules
+PKGFS_WITH_UDEV:= udev
+PKGFB_WITH_UDEV:= eudev
+
+PKG_CHOICES_CRDA:= WITH_OPENSSL WITH_GCRYPT
+PKGCD_WITH_OPENSSL:= ssl support via openssl library
+PKGCD_WITH_GCRYPT:= ssl support via gcrypt library
+PKGCB_WITH_OPENSSL:= openssl
+PKGCB_WITH_GCRYPT:= libgcrypt
+PKGCS_WITH_OPENSSL:= libopenssl
+PKGCS_WITH_GCRYPT:= libgcrypt
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,CRDA,crda,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+CONFIG_STYLE:= manual
+ALL_TARGET:= all_noverify
+
+ifneq ($(ADK_PACKAGE_CRDA_WITH_OPENSSL),)
+XAKE_FLAGS+= USE_OPENSSL=1
+endif
+
+crda-install:
+ $(INSTALL_DIR) $(IDIR_CRDA)/usr/sbin
+ $(INSTALL_BIN) $(WRKINST)/sbin/{crda,regdbdump} \
+ $(IDIR_CRDA)/usr/sbin
+ifneq ($(ADK_PACKAGE_CRDA_WITH_UDEV),)
+ $(INSTALL_DIR) $(IDIR_CRDA)/lib/udev/rules.d
+ $(INSTALL_DATA) $(WRKINST)/lib/udev/rules.d/85-regulatory.rules \
+ $(IDIR_CRDA)/lib/udev/rules.d
+endif
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/cryptodev-linux/Makefile b/package/cryptodev-linux/Makefile
index b02bcaf4c..82e019acd 100644
--- a/package/cryptodev-linux/Makefile
+++ b/package/cryptodev-linux/Makefile
@@ -22,25 +22,23 @@ include ${ADK_TOPDIR}/mk/kernel-vars.mk
$(eval $(call PKG_template,CRYPTODEV_LINUX,cryptodev-linux,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
CONFIG_STYLE:= manual
-BUILD_STYLE:= manual
+XAKE_FLAGS+= CRYPTODEV_CFLAGS='-DENABLE_ASYNC -fhonour-copts' \
+ ARCH='${ADK_TARGET_KARCH}' \
+ KERNEL_DIR='${LINUX_DIR}' \
+ CROSS_COMPILE='${TARGET_CROSS}'
+ALL_TARGET:= build
INSTALL_STYLE:= manual
-do-build:
- ${MAKE} -C "${WRKBUILD}"/tests check
- ${MAKE} -C "${WRKBUILD}" version.h
- GCC_HONOUR_COPTS=0 LDFLAGS="" ${MAKE} -C ${LINUX_DIR} ${KERNEL_MAKE_OPTS} \
- M="${WRKBUILD}" modules
- ${INSTALL_DIR} ${WRKINST}/usr/include/crypto
- ${INSTALL_DATA} ${WRKBUILD}/crypto/cryptodev.h \
- ${WRKINST}/usr/include/crypto/
+post-build:
+ -${MAKE} -C "${WRKBUILD}"/tests check
do-install:
${INSTALL_DIR} ${IDIR_CRYPTODEV_LINUX}/usr/bin
for i in cipher cipher-aead hmac speed async_cipher async_hmac \
- async_speed sha_speed hashcrypt_speed fullspeed cipher-gcm \
- cipher-aead-srtp cipher_comp hash_comp hmac_comp; do \
+ async_speed sha_speed hashcrypt_speed fullspeed cipher-gcm \
+ cipher-aead-srtp cipher_comp hash_comp hmac_comp; do \
$(INSTALL_BIN) ${WRKBUILD}/tests/$$i ${IDIR_CRYPTODEV_LINUX}/usr/bin; \
- done
+ done
${INSTALL_DIR} ${IDIR_CRYPTODEV_LINUX}/usr/include/crypto
${INSTALL_DATA} ${WRKBUILD}/crypto/cryptodev.h \
${IDIR_CRYPTODEV_LINUX}/usr/include/crypto/
diff --git a/package/curl/Makefile b/package/curl/Makefile
index 7f0cda615..055e8ff11 100644
--- a/package/curl/Makefile
+++ b/package/curl/Makefile
@@ -4,9 +4,9 @@
include ${ADK_TOPDIR}/rules.mk
PKG_NAME:= curl
-PKG_VERSION:= 7.40.0
+PKG_VERSION:= 7.41.0
PKG_RELEASE:= 1
-PKG_HASH:= c2e0705a13e53f8f924d1eaeb2ab94f59a9e162007c489b9ab0c96238bddf84b
+PKG_HASH:= 58c9f7cb1be9c26e6a2fd9326c14e054780dc4bb74b590a1d47fb3788a31535d
PKG_DESCR:= client-side url transfer tool
PKG_SECTION:= net/http
PKG_DEPENDS:= libcurl
diff --git a/package/dropbear/Makefile b/package/dropbear/Makefile
index c951df96f..35b4263f2 100644
--- a/package/dropbear/Makefile
+++ b/package/dropbear/Makefile
@@ -15,7 +15,7 @@ PKG_SITES:= http://matt.ucc.asn.au/dropbear/releases/
DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.bz2
PKG_SUBPKGS:= DROPBEAR DBCONVERT
-PKGSD_DBCONVERT:= Utility for converting SSH private keys
+PKGSD_DBCONVERT:= utility for converting ssh private keys
PKG_FLAVOURS_DROPBEAR:= WITH_UTMP
PKGFD_WITH_UTMP:= support writing /var/run/utmp
diff --git a/package/e2fsprogs/Makefile b/package/e2fsprogs/Makefile
index 2dd02edc4..83e3c66e0 100644
--- a/package/e2fsprogs/Makefile
+++ b/package/e2fsprogs/Makefile
@@ -4,28 +4,31 @@
include $(ADK_TOPDIR)/rules.mk
PKG_NAME:= e2fsprogs
-PKG_VERSION:= 1.42.10
-PKG_RELEASE:= 3
-PKG_HASH:= 7b6e85c666d8fdd6062c75ba953de0e5481673bebef5f40f749a52a46476e29f
+PKG_VERSION:= 1.42.12
+PKG_RELEASE:= 1
+PKG_HASH:= 6dadcd3b759195150d20154ab9d6516e3b3cbb35d66d461f55ae94a2854e7de8
PKG_DESCR:= ext2/3/4 filesystem utilities
PKG_SECTION:= sys/fs
PKG_DEPENDS:= libpthread
PKG_BUILDDEP:= util-linux
PKG_URL:= http://e2fsprogs.sourceforge.net/
-PKG_SITES:= $(MASTER_SITE_SOURCEFORGE:=e2fsprogs/)
+PKG_SITES:= https://www.kernel.org/pub/linux/kernel/people/tytso/e2fsprogs/v$(PKG_VERSION)/
PKG_OPTS:= dev
PKG_NOPARALLEL:= 1
-DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.gz
-
PKG_SUBPKGS:= LIBE2FS LIBCOM_ERR LIBSS
PKG_SUBPKGS+= RESIZE2FS TUNE2FS E2FSCK MKE2FS
+PKG_SUBPKGS+= E2FSCK_STATIC TUNE2FS_STATIC
PKGSD_LIBE2FS:= e2fsprogs library
PKGSC_LIBE2FS:= libs/misc
PKGSD_LIBCOM_ERR:= common error library
PKGSC_LIBCOM_ERR:= libs/misc
PKGSD_LIBSS:= subsystem command parsing library
PKGSC_LIBSS:= libs/misc
+PKGSD_E2FSCK_STATIC:= Static build of e2fsck
+PKGSC_E2FSCK_STATIC:= sys/fs
+PKGSD_TUNE2FS_STATIC:= Static build of tune2fs
+PKGSC_TUNE2FS_STATIC:= sys/fs
PKGSD_RESIZE2FS:= ext2/3/4 resize utility
PKGSC_RESIZE2FS:= sys/fs
PKGSS_RESIZE2FS:= libe2fs libcom-err libblkid
@@ -48,21 +51,26 @@ $(eval $(call PKG_template,TUNE2FS,tune2fs,$(PKG_VERSION)-$(PKG_RELEASE),$(PKGSS
$(eval $(call PKG_template,RESIZE2FS,resize2fs,$(PKG_VERSION)-$(PKG_RELEASE),$(PKGSS_RESIZE2FS),$(PKGSD_RESIZE2FS),$(PKGSC_RESIZE2FS)))
$(eval $(call PKG_template,MKE2FS,mke2fs,$(PKG_VERSION)-$(PKG_RELEASE),$(PKGSS_MKE2FS),$(PKGSD_MKE2FS),$(PKGSC_MKE2FS)))
$(eval $(call PKG_template,E2FSCK,e2fsck,$(PKG_VERSION)-$(PKG_RELEASE),$(PKGSS_E2FSCK),$(PKGSD_E2FSCK),$(PKGSC_E2FSCK)))
+$(eval $(call PKG_template,E2FSCK_STATIC,e2fsck-static,${PKG_VERSION}-${PKG_RELEASE},,${PKGSD_E2FSCK_STATIC},${PKGSC_E2FSCK_STATIC}))
+$(eval $(call PKG_template,TUNE2FS_STATIC,tune2fs-static,${PKG_VERSION}-${PKG_RELEASE},,${PKGSD_E2FSCK_STATIC},${PKGSC_E2FSCK_STATIC}))
+
ifeq ($(ADK_TARGET_USE_STATIC_LIBS),y)
-CONFIGURE_ARGS+= --disable-elf-shlibs \
- --enable-libblkid
+CONFIGURE_ARGS+= --disable-elf-shlibs
else
-CONFIGURE_ARGS+= --enable-elf-shlibs \
- --disable-libblkid
+CONFIGURE_ARGS+= --enable-elf-shlibs
endif
CONFIGURE_ARGS+= --disable-rpath \
- --disable-libuuid \
+ --enable-libuuid \
+ --disable-uuidd \
+ --enable-libblkid \
--disable-testio-debug \
--disable-debugfs \
+ --enable-verbose-makecmds \
--disable-defrag
TARGET_CFLAGS+= $(TARGET_CPPFLAGS) -I$(STAGING_TARGET_DIR)/usr/include
+#TARGET_LDFLAGS+= -L${WRKSRC}/lib -L${WRKSRC}/lib/ext2fs
MAKE_FLAGS+= BUILD_CC="$(HOST_CC)" \
BUILD_CFLAGS="$(HOST_CFLAGS) $(HOST_CPPFLAGS) -I$(WRKSRC)/lib -I." \
BUILD_LDFLAGS="$(HOST_LDFLAGS)"
@@ -106,4 +114,16 @@ libss-install:
$(CP) $(WRKINST)/usr/lib/libss.so* \
$(IDIR_LIBSS)/usr/lib
+e2fsck-static-install:
+ ${MAKE} -C ${WRKBUILD}/e2fsck e2fsck.static
+ ${INSTALL_DIR} ${IDIR_E2FSCK_STATIC}/usr/sbin
+ ${INSTALL_BIN} ${WRKBUILD}/e2fsck/e2fsck.static \
+ ${IDIR_E2FSCK_STATIC}/usr/sbin/e2fsck
+
+tune2fs-static-install:
+ ${MAKE} -C ${WRKBUILD}/misc tune2fs.static
+ ${INSTALL_DIR} ${IDIR_TUNE2FS_STATIC}/usr/sbin
+ ${INSTALL_BIN} ${WRKBUILD}/misc/tune2fs.static \
+ ${IDIR_TUNE2FS_STATIC}/usr/sbin/tune2fs
+
include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/e2fsprogs/patches/patch-debugfs_dump_c b/package/e2fsprogs/patches/patch-debugfs_dump_c
index 7e2868281..c244d28b8 100644
--- a/package/e2fsprogs/patches/patch-debugfs_dump_c
+++ b/package/e2fsprogs/patches/patch-debugfs_dump_c
@@ -1,5 +1,5 @@
---- e2fsprogs-1.42.4.orig/debugfs/dump.c 2012-05-29 03:29:43.000000000 +0200
-+++ e2fsprogs-1.42.4/debugfs/dump.c 2012-07-26 18:48:09.000000000 +0200
+--- e2fsprogs-1.42.12.orig/debugfs/dump.c 2014-08-05 00:58:23.000000000 +0200
++++ e2fsprogs-1.42.12/debugfs/dump.c 2015-02-24 13:49:24.673532944 +0100
@@ -22,7 +22,6 @@
#include <sys/types.h>
#include <sys/stat.h>
@@ -16,10 +16,10 @@
int i;
if (fd != -1)
-@@ -93,11 +91,6 @@ static void fix_perms(const char *cmd, c
-
- if (fd != -1)
- close(fd);
+@@ -90,11 +88,6 @@ static void fix_perms(const char *cmd, c
+ #endif
+ if (i == -1)
+ com_err(cmd, errno, "while changing ownership of %s", name);
-
- ut.actime = inode->i_atime;
- ut.modtime = inode->i_mtime;
diff --git a/package/e2fsprogs/patches/patch-debugfs_logdump_c b/package/e2fsprogs/patches/patch-debugfs_logdump_c
index bc00efb0d..1e18e799a 100644
--- a/package/e2fsprogs/patches/patch-debugfs_logdump_c
+++ b/package/e2fsprogs/patches/patch-debugfs_logdump_c
@@ -1,5 +1,5 @@
---- e2fsprogs-1.42.4.orig/debugfs/logdump.c 2012-06-04 18:42:23.000000000 +0200
-+++ e2fsprogs-1.42.4/debugfs/logdump.c 2012-07-26 18:48:09.000000000 +0200
+--- e2fsprogs-1.42.12.orig/debugfs/logdump.c 2014-07-06 06:13:18.000000000 +0200
++++ e2fsprogs-1.42.12/debugfs/logdump.c 2015-02-24 13:49:37.416495054 +0100
@@ -22,7 +22,6 @@
#include <sys/types.h>
#include <sys/stat.h>
diff --git a/package/e2fsprogs/patches/patch-debugfs_set_fields_c b/package/e2fsprogs/patches/patch-debugfs_set_fields_c
index 6168cd0c5..ce738b2e2 100644
--- a/package/e2fsprogs/patches/patch-debugfs_set_fields_c
+++ b/package/e2fsprogs/patches/patch-debugfs_set_fields_c
@@ -1,5 +1,5 @@
---- e2fsprogs-1.42.4.orig/debugfs/set_fields.c 2012-06-04 18:42:23.000000000 +0200
-+++ e2fsprogs-1.42.4/debugfs/set_fields.c 2012-07-26 18:48:09.000000000 +0200
+--- e2fsprogs-1.42.12.orig/debugfs/set_fields.c 2014-08-19 14:24:52.000000000 +0200
++++ e2fsprogs-1.42.12/debugfs/set_fields.c 2015-02-24 13:49:44.483474041 +0100
@@ -34,7 +34,6 @@
#include <strings.h>
#endif
diff --git a/package/e2fsprogs/patches/patch-e2fsck_Makefile_in b/package/e2fsprogs/patches/patch-e2fsck_Makefile_in
new file mode 100644
index 000000000..9bafdabee
--- /dev/null
+++ b/package/e2fsprogs/patches/patch-e2fsck_Makefile_in
@@ -0,0 +1,11 @@
+--- e2fsprogs-1.42.12.orig/e2fsck/Makefile.in 2014-08-02 22:26:22.000000000 +0200
++++ e2fsprogs-1.42.12/e2fsck/Makefile.in 2015-02-24 13:53:08.463908514 +0100
+@@ -120,7 +120,7 @@ e2fsck: $(OBJS) $(DEPLIBS)
+
+ e2fsck.static: $(OBJS) $(STATIC_DEPLIBS)
+ $(E) " LD $@"
+- $(Q) $(LD) $(LDFLAGS_STATIC) -o e2fsck.static $(OBJS) $(STATIC_LIBS)
++ $(LD) $(LDFLAGS_STATIC) -o e2fsck.static $(OBJS) $(STATIC_LIBS)
+
+ e2fsck.profiled: $(OBJS) $(PROFILED_DEPLIBS)
+ $(E) " LD $@"
diff --git a/package/e2fsprogs/patches/patch-misc_Makefile_in b/package/e2fsprogs/patches/patch-misc_Makefile_in
index 614725007..78d736745 100644
--- a/package/e2fsprogs/patches/patch-misc_Makefile_in
+++ b/package/e2fsprogs/patches/patch-misc_Makefile_in
@@ -1,50 +1,15 @@
---- e2fsprogs-1.42.10.orig/misc/Makefile.in 2014-05-15 19:04:08.000000000 +0200
-+++ e2fsprogs-1.42.10/misc/Makefile.in 2014-07-08 21:15:18.000000000 +0200
-@@ -17,9 +17,6 @@ INSTALL = @INSTALL@
- @IMAGER_CMT@E2IMAGE_PROG= e2image
- @IMAGER_CMT@E2IMAGE_MAN= e2image.8
-
--@UUIDD_CMT@UUIDD_PROG= uuidd
--@UUIDD_CMT@UUIDD_MAN= uuidd.8
--
- @BLKID_CMT@BLKID_PROG= blkid
- @BLKID_CMT@BLKID_MAN= blkid.8
-
-@@ -35,8 +32,8 @@ SMANPAGES= tune2fs.8 mklost+found.8 mke2
- $(UUIDD_MAN) $(E4DEFRAG_MAN) @FSCK_MAN@
- FMANPAGES= mke2fs.conf.5 ext4.5
-
--UPROGS= chattr lsattr @UUID_CMT@ uuidgen
--UMANPAGES= chattr.1 lsattr.1 @UUID_CMT@ uuidgen.1
-+UPROGS= chattr lsattr
-+UMANPAGES= chattr.1 lsattr.1
-
- LPROGS= @E2INITRD_PROG@
-
-@@ -46,8 +43,6 @@ MKE2FS_OBJS= mke2fs.o util.o profile.o p
- mk_hugefiles.o
- CHATTR_OBJS= chattr.o
- LSATTR_OBJS= lsattr.o
--UUIDGEN_OBJS= uuidgen.o
--UUIDD_OBJS= uuidd.o
- DUMPE2FS_OBJS= dumpe2fs.o
- BADBLOCKS_OBJS= badblocks.o
- E2IMAGE_OBJS= e2image.o
-@@ -64,8 +59,6 @@ PROFILED_MKE2FS_OBJS= profiled/mke2fs.o
- profiled/prof_err.o profiled/default_profile.o
- PROFILED_CHATTR_OBJS= profiled/chattr.o
- PROFILED_LSATTR_OBJS= profiled/lsattr.o
--PROFILED_UUIDGEN_OBJS= profiled/uuidgen.o
--PROFILED_UUIDD_OBJS= profiled/uuidd.o
- PROFILED_DUMPE2FS_OBJS= profiled/dumpe2fs.o
- PROFILED_BADBLOCKS_OBJS= profiled/badblocks.o
- PROFILED_E2IMAGE_OBJS= profiled/e2image.o
-@@ -80,7 +73,7 @@ PROFILED_E4DEFRAG_OBJS= profiled/e4defra
- SRCS= $(srcdir)/tune2fs.c $(srcdir)/mklost+found.c $(srcdir)/mke2fs.c $(srcdir)/mk_hugefiles.c \
- $(srcdir)/chattr.c $(srcdir)/lsattr.c $(srcdir)/dumpe2fs.c \
- $(srcdir)/badblocks.c $(srcdir)/fsck.c $(srcdir)/util.c \
-- $(srcdir)/uuidgen.c $(srcdir)/blkid.c $(srcdir)/logsave.c \
-+ $(srcdir)/blkid.c $(srcdir)/logsave.c \
- $(srcdir)/filefrag.c $(srcdir)/base_device.c \
- $(srcdir)/ismounted.c $(srcdir)/../e2fsck/profile.c \
- $(srcdir)/e2undo.c $(srcdir)/e2freefrag.c
+ when linking tune2fs.static, pass libs in the correct order
+ (libuuid.a depends on libext2fs.a and therefore needs to come before that)
+--- e2fsprogs-1.42.12.orig/misc/Makefile.in 2014-08-03 01:41:18.000000000 +0200
++++ e2fsprogs-1.42.12/misc/Makefile.in 2015-02-10 18:19:51.022952937 +0100
+@@ -165,8 +165,8 @@ tune2fs: $(TUNE2FS_OBJS) $(DEPLIBS) $(DE
+ tune2fs.static: $(TUNE2FS_OBJS) $(STATIC_DEPLIBS) $(STATIC_LIBE2P) $(DEPSTATIC_LIBBLKID)
+ $(E) " LD $@"
+ $(Q) $(CC) $(LDFLAGS_STATIC) -o tune2fs.static $(TUNE2FS_OBJS) \
+- $(STATIC_LIBS) $(STATIC_LIBBLKID) $(STATIC_LIBUUID) \
+- $(STATIC_LIBQUOTA) $(STATIC_LIBE2P) $(LIBINTL) $(SYSLIBS)
++ $(STATIC_LIBBLKID) $(STATIC_LIBUUID) \
++ $(STATIC_LIBQUOTA) $(STATIC_LIBE2P) $(STATIC_LIBS) $(LIBINTL) $(SYSLIBS)
+
+ tune2fs.profiled: $(TUNE2FS_OBJS) $(PROFILED_DEPLIBS) \
+ $(PROFILED_E2P) $(DEPPROFILED_LIBBLKID) $(DEPPROFILED_LIBUUID) \
diff --git a/package/e2fsprogs/patches/patch-misc_e2initrd_helper_c b/package/e2fsprogs/patches/patch-misc_e2initrd_helper_c
index 736c1c948..aca847680 100644
--- a/package/e2fsprogs/patches/patch-misc_e2initrd_helper_c
+++ b/package/e2fsprogs/patches/patch-misc_e2initrd_helper_c
@@ -1,5 +1,5 @@
---- e2fsprogs-1.42.4.orig/misc/e2initrd_helper.c 2012-03-18 19:18:33.000000000 +0100
-+++ e2fsprogs-1.42.4/misc/e2initrd_helper.c 2012-07-26 18:48:09.000000000 +0200
+--- e2fsprogs-1.42.12.orig/misc/e2initrd_helper.c 2014-07-03 16:33:48.000000000 +0200
++++ e2fsprogs-1.42.12/misc/e2initrd_helper.c 2015-02-24 13:53:24.429861041 +0100
@@ -24,7 +24,6 @@
#include <sys/types.h>
#include <sys/stat.h>
diff --git a/package/e2fsprogs/patches/patch-misc_e2undo_c b/package/e2fsprogs/patches/patch-misc_e2undo_c
index bc9fdb619..5281364a7 100644
--- a/package/e2fsprogs/patches/patch-misc_e2undo_c
+++ b/package/e2fsprogs/patches/patch-misc_e2undo_c
@@ -1,6 +1,6 @@
optind seems to need unistd.h, not only getopt.h
---- e2fsprogs-1.42.4.orig/misc/e2undo.c 2012-03-18 19:18:33.000000000 +0100
-+++ e2fsprogs-1.42.4/misc/e2undo.c 2012-07-26 18:48:09.000000000 +0200
+--- e2fsprogs-1.42.12.orig/misc/e2undo.c 2014-07-03 16:33:48.000000000 +0200
++++ e2fsprogs-1.42.12/misc/e2undo.c 2015-02-24 13:53:30.092844203 +0100
@@ -20,6 +20,7 @@
#if HAVE_ERRNO_H
#include <errno.h>
diff --git a/package/e2fsprogs/patches/patch-util_subst_c b/package/e2fsprogs/patches/patch-util_subst_c
index 601f7fa92..2874794d6 100644
--- a/package/e2fsprogs/patches/patch-util_subst_c
+++ b/package/e2fsprogs/patches/patch-util_subst_c
@@ -1,6 +1,6 @@
---- e2fsprogs-1.42.10.orig/util/subst.c 2014-05-15 19:04:08.000000000 +0200
-+++ e2fsprogs-1.42.10/util/subst.c 2014-07-08 21:18:41.000000000 +0200
-@@ -358,7 +358,7 @@ int main(int argc, char **argv)
+--- e2fsprogs-1.42.12.orig/util/subst.c 2014-08-02 22:26:22.000000000 +0200
++++ e2fsprogs-1.42.12/util/subst.c 2015-02-24 13:53:42.034808695 +0100
+@@ -363,7 +363,7 @@ int main(int argc, char **argv)
if (fd > 0) {
/* save the original atime, if possible */
if (fstat(fd, &stbuf) == 0) {
diff --git a/package/ebtables/patches/patch-Makefile b/package/ebtables/patches/patch-Makefile
index f4e293eaf..3cbce1353 100644
--- a/package/ebtables/patches/patch-Makefile
+++ b/package/ebtables/patches/patch-Makefile
@@ -22,66 +22,3 @@
ifeq ($(shell uname -m),sparc64)
CFLAGS+=-DEBT_MIN_ALIGN=8 -DKERNEL_64_USERSPACE_32
-@@ -157,31 +157,31 @@ tmp3:=$(shell printf $(PIPE) | sed 's/\/
- scripts: ebtables-save ebtables.sysv ebtables-config
- cat ebtables-save | sed 's/__EXEC_PATH__/$(tmp1)/g' > ebtables-save_
- mkdir -p $(DESTDIR)$(BINDIR)
-- install -m 0755 -o root -g root ebtables-save_ $(DESTDIR)$(BINDIR)/ebtables-save
-+ install -m 0755 ebtables-save_ $(DESTDIR)$(BINDIR)/ebtables-save
- cat ebtables.sysv | sed 's/__EXEC_PATH__/$(tmp1)/g' | sed 's/__SYSCONFIG__/$(tmp2)/g' > ebtables.sysv_
- if [ "$(DESTDIR)" != "" ]; then mkdir -p $(DESTDIR)$(INITDIR); fi
-- if test -d $(DESTDIR)$(INITDIR); then install -m 0755 -o root -g root ebtables.sysv_ $(DESTDIR)$(INITDIR)/ebtables; fi
-+ if test -d $(DESTDIR)$(INITDIR); then install -m 0755 ebtables.sysv_ $(DESTDIR)$(INITDIR)/ebtables; fi
- cat ebtables-config | sed 's/__SYSCONFIG__/$(tmp2)/g' > ebtables-config_
- if [ "$(DESTDIR)" != "" ]; then mkdir -p $(DESTDIR)$(SYSCONFIGDIR); fi
-- if test -d $(DESTDIR)$(SYSCONFIGDIR); then install -m 0600 -o root -g root ebtables-config_ $(DESTDIR)$(SYSCONFIGDIR)/ebtables-config; fi
-+ if test -d $(DESTDIR)$(SYSCONFIGDIR); then install -m 0600 ebtables-config_ $(DESTDIR)$(SYSCONFIGDIR)/ebtables-config; fi
- rm -f ebtables-save_ ebtables.sysv_ ebtables-config_
-
- tmp4:=$(shell printf $(LOCKFILE) | sed 's/\//\\\//g')
- $(MANDIR)/man8/ebtables.8: ebtables.8
- mkdir -p $(DESTDIR)$(@D)
- sed -e 's/$$(VERSION)/$(PROGVERSION)/' -e 's/$$(DATE)/$(PROGDATE)/' -e 's/$$(LOCKFILE)/$(tmp4)/' ebtables.8 > ebtables.8_
-- install -m 0644 -o root -g root ebtables.8_ $(DESTDIR)$@
-+ install -m 0644 ebtables.8_ $(DESTDIR)$@
- rm -f ebtables.8_
-
- $(DESTDIR)$(ETHERTYPESFILE): ethertypes
- mkdir -p $(@D)
-- install -m 0644 -o root -g root $< $@
-+ install -m 0644 $< $@
-
- .PHONY: exec
- exec: ebtables ebtables-restore
- mkdir -p $(DESTDIR)$(BINDIR)
-- install -m 0755 -o root -g root $(PROGNAME) $(DESTDIR)$(BINDIR)/$(PROGNAME)
-- install -m 0755 -o root -g root ebtables-restore $(DESTDIR)$(BINDIR)/ebtables-restore
-+ install -m 0755 $(PROGNAME) $(DESTDIR)$(BINDIR)/$(PROGNAME)
-+ install -m 0755 ebtables-restore $(DESTDIR)$(BINDIR)/ebtables-restore
-
- .PHONY: install
- install: $(MANDIR)/man8/ebtables.8 $(DESTDIR)$(ETHERTYPESFILE) exec scripts
-@@ -205,18 +205,18 @@ release:
- rm -f extensions/ebt_inat.c
- rm -rf $(CVSDIRS)
- mkdir -p include/linux/netfilter_bridge
-- install -m 0644 -o root -g root \
-+ install -m 0644 \
- $(KERNEL_INCLUDES)/linux/netfilter_bridge.h include/linux/
- # To keep possible compile error complaints about undefined ETH_P_8021Q
- # off my back
-- install -m 0644 -o root -g root \
-+ install -m 0644 \
- $(KERNEL_INCLUDES)/linux/if_ether.h include/linux/
-- install -m 0644 -o root -g root \
-+ install -m 0644 \
- $(KERNEL_INCLUDES)/linux/types.h include/linux/
-- install -m 0644 -o root -g root \
-+ install -m 0644 \
- $(KERNEL_INCLUDES)/linux/netfilter_bridge/*.h \
- include/linux/netfilter_bridge/
-- install -m 0644 -o root -g root \
-+ install -m 0644 \
- include/ebtables.h include/linux/netfilter_bridge/
- make clean
- touch *
diff --git a/package/elfutils/Makefile b/package/elfutils/Makefile
new file mode 100644
index 000000000..825ab10eb
--- /dev/null
+++ b/package/elfutils/Makefile
@@ -0,0 +1,37 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= elfutils
+PKG_VERSION:= 0.161
+PKG_RELEASE:= 1
+PKG_HASH:= 570c91a1783fa5386aaa2dfdd08dda1de777c2b63bf3b9c1437d635ffdd7a070
+PKG_DESCR:= libraries/utilities to handle elf objects (drop in replacement for libelf)
+PKG_SECTION:= base/libs
+PKG_URL:= https://fedorahosted.org/elfutils/
+PKG_SITES:= https://fedorahosted.org/releases/e/l/elfutils/$(PKG_VERSION)/
+
+# require argp()
+PKG_LIBC_DEPENDS:= glibc
+
+DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.bz2
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,ELFUTILS,elfutils,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+# not only because we pass -DNDEBUG, this package won't build with -Werror
+TARGET_CFLAGS+= -Wno-error
+
+elfutils-install:
+ $(INSTALL_DIR) $(IDIR_ELFUTILS)/usr/lib/elfutils
+ $(CP) $(WRKINST)/usr/lib/lib{asm,dw,elf}*.so* \
+ $(IDIR_ELFUTILS)/usr/lib
+ $(CP) $(WRKINST)/usr/lib/elfutils/libebl*.so \
+ $(IDIR_ELFUTILS)/usr/lib/elfutils
+ $(INSTALL_DIR) $(IDIR_ELFUTILS)/usr/bin
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/* \
+ $(IDIR_ELFUTILS)/usr/bin
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/gdb/Makefile b/package/gdb/Makefile
index 8cb1b5b8f..3dbe4d2f9 100644
--- a/package/gdb/Makefile
+++ b/package/gdb/Makefile
@@ -43,5 +43,7 @@ XAKE_FLAGS+= GCC_HONOUR_COPTS:=s
gdb-install:
${INSTALL_DIR} ${IDIR_GDB}/usr/bin
${INSTALL_BIN} ${WRKINST}/usr/bin/gdb ${IDIR_GDB}/usr/bin/
+ # shipped libbfd conflicts with system wide one
+ rm -f ${WRKINST}/usr/lib/libbfd*
include ${ADK_TOPDIR}/mk/pkg-bottom.mk
diff --git a/package/hwids/Makefile b/package/hwids/Makefile
new file mode 100644
index 000000000..ceeca3a72
--- /dev/null
+++ b/package/hwids/Makefile
@@ -0,0 +1,61 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= hwids
+PKG_VERSION:= 20150129
+PKG_RELEASE:= 1
+PKG_HASH:= 33a7f4dbf14704076b0fe1d0052e86bb618e386a1ff18107097311df44f979d7
+PKG_DESCR:= combined repository of pci.ids and usb.ids
+PKG_SECTION:= sys/hw
+PKG_URL:= https://github.com/gentoo/hwids
+PKG_SITES:= https://github.com/gentoo/hwids/archive/
+
+DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.gz
+# typical problem of having tags like '<name>-<version>' in github
+WRKDIST= $(WRKDIR)/$(PKG_NAME)-$(PKG_NAME)-$(PKG_VERSION)
+
+PKG_SUBPKGS:= HWIDS_NET HWIDS_PCI HWIDS_USB
+PKGSD_HWIDS_NET:= HWIDS files oui.txt and iab.txt
+PKGSD_HWIDS_PCI:= HWIDS file pci.ids
+PKGSD_HWIDS_USB:= HWIDS file usb.ids
+
+PKG_FLAVOURS_HWIDS:= WITH_GZIP
+PKGFD_WITH_GZIP:= gzip pci.ids and usb.ids before installation
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,HWIDS_NET,hwids-net,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKGSD_HWIDS_NET),$(PKG_SECTION)))
+$(eval $(call PKG_template,HWIDS_PCI,hwids-pci,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKGSD_HWIDS_PCI),$(PKG_SECTION)))
+$(eval $(call PKG_template,HWIDS_USB,hwids-usb,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKGSD_HWIDS_USB),$(PKG_SECTION)))
+
+CONFIG_STYLE:= manual
+XAKE_FLAGS+= NET=yes \
+ PCI=yes \
+ UDEV=no \
+ USB=yes
+# note: Can't pass GZIP=yes to make, as this will turn it
+# into an env var automatically which makes gzip trip.
+# Therefore assume here that GZIP=yes is the default.
+ifneq ($(ADK_PACKAGE_HWIDS_WITH_GZIP),y)
+XAKE_FLAGS+= GZIP=no
+endif
+
+define HWIDS_INSTALL_template
+$(2)-install:
+ $$(INSTALL_DIR) $$(IDIR_$(1))/usr/share/misc
+ $$(INSTALL_DATA) $$(patsubst %,$$(WRKINST)/usr/share/misc/%,$(3)) \
+ $$(IDIR_$(1))/usr/share/misc/
+endef
+
+$(eval $(call HWIDS_INSTALL_template,HWIDS_NET,hwids-net,oui.txt iab.txt))
+ifeq ($(ADK_PACKAGE_HWIDS_WITH_GZIP),y)
+$(eval $(call HWIDS_INSTALL_template,HWIDS_PCI,hwids-pci,pci.ids.gz))
+$(eval $(call HWIDS_INSTALL_template,HWIDS_USB,hwids-usb,usb.ids.gz))
+else
+$(eval $(call HWIDS_INSTALL_template,HWIDS_PCI,hwids-pci,pci.ids))
+$(eval $(call HWIDS_INSTALL_template,HWIDS_USB,hwids-usb,usb.ids))
+endif
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/i2400m-fw/Makefile b/package/i2400m-fw/Makefile
new file mode 100644
index 000000000..85aef1ecd
--- /dev/null
+++ b/package/i2400m-fw/Makefile
@@ -0,0 +1,30 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= i2400m-fw
+PKG_VERSION:= 1.5.0
+PKG_RELEASE:= 1
+PKG_HASH:= edcb7c5322c0185173a2dc79b3df4bc74964edfa741ebf9a09cd70a32d758c3d
+PKG_DESCR:= intel (R) wimax 5150/5350/6250 firmware
+PKG_SECTION:= sys/firmware
+PKG_URL:= http://www.linuxwimax.org
+PKG_SITES:= "http://www.linuxwimax.org/Download?action=AttachFile&do=get&target="
+
+DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.bz2
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,I2400M_FW,i2400m-fw,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+CONFIG_STYLE:= manual
+BUILD_STYLE:= manual
+INSTALL_STYLE:= manual
+
+do-install:
+ $(INSTALL_DIR) $(IDIR_I2400M_FW)/lib/firmware
+ $(INSTALL_DATA) $(WRKDIST)/*-fw-usb-*.sbcf \
+ $(IDIR_I2400M_FW)/lib/firmware/
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/inotify-tools/Makefile b/package/inotify-tools/Makefile
new file mode 100644
index 000000000..82ea714d4
--- /dev/null
+++ b/package/inotify-tools/Makefile
@@ -0,0 +1,41 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= inotify-tools
+PKG_VERSION:= 3.14
+PKG_RELEASE:= 1
+PKG_HASH:= 222bcca8893d7bf8a1ce207fb39ceead5233b5015623d099392e95197676c92f
+PKG_DESCR:= command line programs providing a simple interface to inotify
+PKG_SECTION:= sys/fs
+PKG_URL:= https://github.com/rvoicilas/inotify-tools/wiki
+PKG_SITES:= http://github.com/downloads/rvoicilas/inotify-tools/
+
+DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.gz
+
+PKG_SUBPKGS:= INOTIFYWAIT INOTIFYWATCH LIBINOTIFYTOOLS
+PKGSC_LIBINOTIFYTOOLS:= libs/misc
+PKGSD_INOTIFYWAIT:= wait for changes to files using inotify
+PKGSD_INOTIFYWATCH:= gather filesystem access statistics using inotify
+PKGSD_LIBINOTIFYTOOLS:= inotify tools library
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,INOTIFYWAIT,inotifywait,$(PKG_VERSION)-$(PKG_RELEASE),libinotifytools,$(PKGSD_INOTIFYWAIT),$(PKG_SECTION)))
+$(eval $(call PKG_template,INOTIFYWATCH,inotifywatch,$(PKG_VERSION)-$(PKG_RELEASE),libinotifytools,$(PKGSD_INOTIFYWATCH),$(PKG_SECTION)))
+$(eval $(call PKG_template,LIBINOTIFYTOOLS,libinotifytools,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKGSD_LIBINOTIFYTOOLS),$(PKGSC_LIBINOTIFYTOOLS)))
+
+inotifywait-install:
+ $(INSTALL_DIR) $(IDIR_INOTIFYWAIT)/usr/bin
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/inotifywait $(IDIR_INOTIFYWAIT)/usr/bin
+
+inotifywatch-install:
+ $(INSTALL_DIR) $(IDIR_INOTIFYWATCH)/usr/bin
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/inotifywatch $(IDIR_INOTIFYWATCH)/usr/bin
+
+libinotifytools-install:
+ $(INSTALL_DIR) $(IDIR_LIBINOTIFYTOOLS)/usr/lib
+ $(CP) $(WRKINST)/usr/lib/libinotifytools.so* $(IDIR_LIBINOTIFYTOOLS)/usr/lib
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/ipmitool/Makefile b/package/ipmitool/Makefile
new file mode 100644
index 000000000..2fec3dd77
--- /dev/null
+++ b/package/ipmitool/Makefile
@@ -0,0 +1,28 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= ipmitool
+PKG_VERSION:= 1.8.15
+PKG_RELEASE:= 1
+PKG_HASH:= f0964e644a8e693932a3e8da6929d5598ed24645bacd51fbb1a4a09b5e47cf78
+PKG_DESCR:= utility for controlling ipmi enabled devices
+PKG_SECTION:= net/misc
+PKG_URL:= http://ipmitool.sf.net/
+PKG_SITES:= $(MASTER_SITE_SOURCEFORGE:=ipmitool/)
+
+DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.gz
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,IPMITOOL,ipmitool,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+CONFIGURE_ENV+= ac_cv_func_malloc_0_nonnull=yes
+
+ipmitool-install:
+ $(INSTALL_DIR) $(IDIR_IPMITOOL)/usr/bin
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/ipmitool \
+ $(IDIR_IPMITOOL)/usr/bin
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/kexec-tools/Makefile b/package/kexec-tools/Makefile
index 8745ed687..3d633aeb5 100644
--- a/package/kexec-tools/Makefile
+++ b/package/kexec-tools/Makefile
@@ -4,9 +4,9 @@
include $(ADK_TOPDIR)/rules.mk
PKG_NAME:= kexec-tools
-PKG_VERSION:= 2.0.8
-PKG_RELEASE:= 2
-PKG_HASH:= f3abe96fa0793e63936725a4471429f070039a1e81e605deb378747194a50c47
+PKG_VERSION:= 2.0.9
+PKG_RELEASE:= 1
+PKG_HASH:= 8ae34a9ceb76350954e1e1e3ca9ab51da15862bd5f2fd14392208e60fb454f71
PKG_DESCR:= kernel exec tools
PKG_SECTION:= sys/misc
PKG_DEPENDS:= zlib
diff --git a/package/kismet/patches/patch-Makefile_in b/package/kismet/patches/patch-Makefile_in
deleted file mode 100644
index 97a3cad75..000000000
--- a/package/kismet/patches/patch-Makefile_in
+++ /dev/null
@@ -1,60 +0,0 @@
---- kismet-2011-01-R1.orig/Makefile.in 2010-12-19 15:20:16.000000000 +0100
-+++ kismet-2011-01-R1/Makefile.in 2011-02-04 23:14:39.000000000 +0100
-@@ -112,26 +112,26 @@ commoninstall:
-
- if test -e $(NC); then \
- echo "Installing client"; \
-- $(INSTALL) -o $(INSTUSR) -g $(INSTGRP) -m 555 scripts/kismet $(BIN)/kismet; \
-- $(INSTALL) -o $(INSTUSR) -g $(INSTGRP) -m 555 $(NC) $(BIN)/$(NC); \
-+ $(INSTALL) -m 555 scripts/kismet $(BIN)/kismet; \
-+ $(INSTALL) -m 555 $(NC) $(BIN)/$(NC); \
- fi;
-- $(INSTALL) -o $(INSTUSR) -g $(INSTGRP) -m 555 $(PS) $(BIN)/$(PS);
-- $(INSTALL) -o $(INSTUSR) -g $(INSTGRP) -m 555 $(DRONE) $(BIN)/$(DRONE);
-+ $(INSTALL) -m 555 $(PS) $(BIN)/$(PS);
-+ $(INSTALL) -m 555 $(DRONE) $(BIN)/$(DRONE);
-
- mkdir -p $(MAN)/man1
-- $(INSTALL) -o $(INSTUSR) -g $(MANGRP) -m 644 man/kismet.1 $(MAN)/man1/kismet.1
-- $(INSTALL) -o $(INSTUSR) -g $(MANGRP) -m 644 man/kismet_drone.1 $(MAN)/man1/kismet_drone.1
-+ $(INSTALL) -m 644 man/kismet.1 $(MAN)/man1/kismet.1
-+ $(INSTALL) -m 644 man/kismet_drone.1 $(MAN)/man1/kismet_drone.1
-
- mkdir -p $(MAN)/man5
-- $(INSTALL) -o $(INSTUSR) -g $(MANGRP) -m 644 man/kismet.conf.5 $(MAN)/man5/kismet.conf.5
-- $(INSTALL) -o $(INSTUSR) -g $(MANGRP) -m 644 man/kismet_drone.conf.5 $(MAN)/man5/kismet_drone.conf.5
-+ $(INSTALL) -m 644 man/kismet.conf.5 $(MAN)/man5/kismet.conf.5
-+ $(INSTALL) -m 644 man/kismet_drone.conf.5 $(MAN)/man5/kismet_drone.conf.5
-
- mkdir -p $(WAV)
-- $(INSTALL) -o $(INSTUSR) -g $(INSTGRP) -m 644 wav/new.wav $(WAV)/new.wav
-- $(INSTALL) -o $(INSTUSR) -g $(INSTGRP) -m 644 wav/packet.wav $(WAV)/packet.wav
-- $(INSTALL) -o $(INSTUSR) -g $(INSTGRP) -m 644 wav/alert.wav $(WAV)/alert.wav
-- $(INSTALL) -o $(INSTUSR) -g $(INSTGRP) -m 644 wav/gpslost.wav $(WAV)/gpslost.wav
-- $(INSTALL) -o $(INSTUSR) -g $(INSTGRP) -m 644 wav/gpslock.wav $(WAV)/gpslock.wav
-+ $(INSTALL) -m 644 wav/new.wav $(WAV)/new.wav
-+ $(INSTALL) -m 644 wav/packet.wav $(WAV)/packet.wav
-+ $(INSTALL) -m 644 wav/alert.wav $(WAV)/alert.wav
-+ $(INSTALL) -m 644 wav/gpslost.wav $(WAV)/gpslost.wav
-+ $(INSTALL) -m 644 wav/gpslock.wav $(WAV)/gpslock.wav
-
- suidinstall: $(CS)
- -groupadd -f $(SUIDGROUP)
-@@ -174,7 +174,7 @@ install: $(INSTBINS)
- echo "if there have been any changes to the base config you will need"; \
- echo "to add them to your config file."; \
- else \
-- $(INSTALL) -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
-+ $(INSTALL) -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
- echo install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet.conf $(ETC)/kismet.conf; \
- echo "Installed config into $(ETC)/kismet.conf."; \
- fi
-@@ -183,7 +183,7 @@ install: $(INSTBINS)
- echo "if there have been any changes to the base config you will need"; \
- echo "to add them to your config file."; \
- else \
-- $(INSTALL) -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
-+ $(INSTALL) -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
- echo install -o $(INSTUSR) -g $(INSTGRP) -m 644 conf/kismet_drone.conf $(ETC)/kismet_drone.conf; \
- echo "Installed drone config into $(ETC)/kismet_drone.conf."; \
- fi
diff --git a/package/ldd/Makefile b/package/ldd/Makefile
new file mode 100644
index 000000000..587f27acb
--- /dev/null
+++ b/package/ldd/Makefile
@@ -0,0 +1,26 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+include $(ADK_TOPDIR)/toolchain/glibc/Makefile.inc
+
+PKG_NAME:= ldd
+PKG_DESCR:= Shared library dependency display tool
+PKG_SECTION:= dev/tools
+PKG_DEPENDS:= glibc bash
+PKG_BUILDDEP:= glibc
+NO_DISTFILES:= 1
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,LDD,$(PKG_NAME),$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION}))
+
+CONFIG_STYLE:= manual
+BUILD_STYLE:= manual
+INSTALL_STYLE:= manual
+
+do-install:
+ $(INSTALL_DIR) $(IDIR_LDD)/usr/bin
+ ${INSTALL_BIN} ${STAGING_TARGET_DIR}/usr/bin/ldd ${IDIR_LDD}/usr/bin
+
+include ${ADK_TOPDIR}/mk/pkg-bottom.mk
diff --git a/package/libcap/Makefile b/package/libcap/Makefile
index c7227abf3..a0d982b14 100644
--- a/package/libcap/Makefile
+++ b/package/libcap/Makefile
@@ -4,25 +4,31 @@
include $(ADK_TOPDIR)/rules.mk
PKG_NAME:= libcap
-PKG_VERSION:= 2.22
-PKG_RELEASE:= 3
+PKG_VERSION:= 2.24
+PKG_RELEASE:= 1
PKG_HASH:= 73ebbd4877b5f69dd28b72098e510c5b318bc480f8201c4061ac98b78c04050f
PKG_DESCR:= capabilities library
PKG_SECTION:= libs/misc
-PKG_BUILDDEP:= pam
PKG_URL:= http://www.friedhoff.org/posixfilecaps.html
-PKG_SITES:= http://openadk.org/distfiles/
+PKG_SITES:= https://www.kernel.org/pub/linux/libs/security/linux-privs/libcap2/
PKG_OPTS:= dev
-DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.bz2
-
include $(ADK_TOPDIR)/mk/package.mk
$(eval $(call PKG_template,LIBCAP,libcap,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION},${PKG_OPTS}))
+# for Darwin hosts
CPPFLAGS_FOR_BUILD+= -I$(STAGING_TARGET_DIR)/usr/include
CONFIG_STYLE:= manual
+ifeq ($(ADK_TARGET_USE_STATIC_LIBS),y)
+ALL_TARGET:= static progs
+INSTALL_TARGET:= install-static
+else
+ALL_TARGET:= shared progs
+INSTALL_TARGET:= install-shared
+endif
+
libcap-install:
$(INSTALL_DIR) $(IDIR_LIBCAP)/usr/lib
$(CP) $(WRKINST)/usr/lib/libcap*.so* \
diff --git a/package/libcap/patches/patch-Make_Rules b/package/libcap/patches/patch-Make_Rules
index 09f31b3b4..a6a637d3b 100644
--- a/package/libcap/patches/patch-Make_Rules
+++ b/package/libcap/patches/patch-Make_Rules
@@ -1,59 +1,61 @@
---- libcap-2.22.orig/Make.Rules 2011-07-25 04:18:23.000000000 +0200
-+++ libcap-2.22/Make.Rules 2013-11-08 16:22:41.000000000 +0100
-@@ -12,10 +12,6 @@ FAKEROOT=$(DESTDIR)
+--- libcap-2.24.orig/Make.Rules 2014-01-06 02:16:21.000000000 +0100
++++ libcap-2.24/Make.Rules 2015-02-26 14:01:28.000000000 +0100
+@@ -12,22 +12,12 @@ FAKEROOT=$(DESTDIR)
# These choices are motivated by the fact that getcap and setcap are
# administrative operations that could be needed to recover a system.
-ifndef lib
--lib=$(shell ldd /usr/bin/ld|fgrep ld-linux|cut -d/ -f2)
+-lib=$(shell ldd /usr/bin/ld|egrep "ld-linux|ld.so"|cut -d/ -f2)
-endif
-
- ifdef prefix
- exec_prefix=$(prefix)
- lib_prefix=$(exec_prefix)
-@@ -23,7 +19,7 @@ inc_prefix=$(lib_prefix)
- man_prefix=$(prefix)/share
- else
+-ifdef prefix
+-exec_prefix=$(prefix)
+-lib_prefix=$(exec_prefix)
+-inc_prefix=$(lib_prefix)
+-man_prefix=$(prefix)/share
+-else
++lib=lib
prefix=/usr
-exec_prefix=
-+exec_prefix=/usr
++exec_prefix=$(prefix)
lib_prefix=$(exec_prefix)
inc_prefix=$(prefix)
man_prefix=$(prefix)/share
-@@ -34,7 +30,7 @@ endif
- MANDIR=$(FAKEROOT)$(man_prefix)/man
- SBINDIR=$(FAKEROOT)$(exec_prefix)/sbin
- INCDIR=$(FAKEROOT)$(inc_prefix)/include
--LIBDIR=$(FAKEROOT)$(lib_prefix)/$(lib)
-+LIBDIR=$(FAKEROOT)$(lib_prefix)/lib
+-endif
- # common defines for libcap
- LIBTITLE=libcap
-@@ -47,12 +43,13 @@ MINOR=22
- KERNEL_HEADERS := $(topdir)/libcap/include
- IPATH += -fPIC -I$(topdir)/libcap/include -I$(KERNEL_HEADERS)
+ # Target directories
+
+@@ -48,28 +38,28 @@ MINOR=24
+ KERNEL_HEADERS := $(topdir)/libcap/include/uapi
+ IPATH += -fPIC -I$(KERNEL_HEADERS) -I$(topdir)/libcap/include
-CC := gcc
-CFLAGS := -O2 -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
+CC ?= gcc
-+CFLAGS ?= -O2
-+CFLAGS += -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
++CFLAGS ?= -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
BUILD_CC := $(CC)
BUILD_CFLAGS := $(CFLAGS) $(IPATH)
-AR := ar
-RANLIB := ranlib
+-DEBUG = -g #-DDEBUG
+AR ?= ar
+RANLIB ?= ranlib
- DEBUG = -g #-DDEBUG
++DEBUG =
WARNINGS=-Wall -Wwrite-strings \
-Wpointer-arith -Wcast-qual -Wcast-align \
-@@ -64,11 +61,11 @@ LDFLAGS := #-g
+ -Wstrict-prototypes -Wmissing-prototypes \
+ -Wnested-externs -Winline -Wshadow
+-LD=$(CC) -Wl,-x -shared
+-LDFLAGS := #-g
++LD=$(CC) -shared
++LDFLAGS ?= #-g
+
SYSTEM_HEADERS = /usr/include
INCS=$(topdir)/libcap/include/sys/capability.h
LDFLAGS += -L$(topdir)/libcap
--CFLAGS += -Dlinux $(WARNINGS) $(DEBUG)
-+CFLAGS += -Dlinux $(WARNINGS)
- PAM_CAP := $(shell if [ -f /usr/include/security/pam_modules.h ]; then echo yes ; else echo no ; fi)
+ CFLAGS += -Dlinux $(WARNINGS) $(DEBUG)
+-PAM_CAP := $(shell if [ -f /usr/include/security/pam_modules.h ]; then echo yes ; else echo no ; fi)
++PAM_CAP := no
INDENT := $(shell if [ -n "$(which indent 2>/dev/null)" ]; then echo "| indent -kr" ; fi)
DYNAMIC := $(shell if [ ! -d "$(topdir)/.git" ]; then echo yes; fi)
-LIBATTR := yes
diff --git a/package/libcap/patches/patch-Makefile b/package/libcap/patches/patch-Makefile
new file mode 100644
index 000000000..8e2f8415b
--- /dev/null
+++ b/package/libcap/patches/patch-Makefile
@@ -0,0 +1,25 @@
+--- libcap-2.24.orig/Makefile 2013-12-27 19:17:17.000000000 +0100
++++ libcap-2.24/Makefile 2015-02-26 20:36:58.000000000 +0100
+@@ -16,6 +16,22 @@ endif
+ $(MAKE) -C progs $@
+ $(MAKE) -C doc $@
+
++progs:
++ $(MAKE) -C progs all
++
++shared:
++ $(MAKE) -C libcap shared
++
++static:
++ $(MAKE) -C libcap static
++
++install-shared:
++ $(MAKE) -C libcap install-shared
++
++install-static:
++ $(MAKE) -C libcap install-static
++
++
+ all-here:
+
+ install-here:
diff --git a/package/libcap/patches/patch-libcap_Makefile b/package/libcap/patches/patch-libcap_Makefile
index f45b642c9..cf7703a43 100644
--- a/package/libcap/patches/patch-libcap_Makefile
+++ b/package/libcap/patches/patch-libcap_Makefile
@@ -1,7 +1,17 @@
---- libcap-2.22.orig/libcap/Makefile 2010-08-09 00:26:04.000000000 +0200
-+++ libcap-2.22/libcap/Makefile 2013-10-28 10:46:10.000000000 +0100
-@@ -33,7 +33,7 @@ INCLUDE_GPERF_OUTPUT = -include $(GPERF_
- endif
+--- libcap-2.24.orig/libcap/Makefile 2014-01-06 01:55:03.000000000 +0100
++++ libcap-2.24/libcap/Makefile 2015-02-26 20:34:47.000000000 +0100
+@@ -28,6 +28,9 @@ GPERF_OUTPUT = _caps_output.gperf
+
+ all: $(MINLIBNAME) $(STALIBNAME) libcap.pc
+
++static: $(STALIBNAME)
++shared: $(MINLIBNAME)
++
+ ifeq ($(shell gperf --version > /dev/null 2>&1 && echo yes),yes)
+ USE_GPERF_OUTPUT = $(GPERF_OUTPUT)
+ INCLUDE_GPERF_OUTPUT = -include $(GPERF_OUTPUT)
+@@ -43,7 +46,7 @@ libcap.pc: libcap.pc.in
+ $< >$@
_makenames: _makenames.c cap_names.list.h
- $(BUILD_CC) $(BUILD_CFLAGS) $< -o $@
@@ -9,3 +19,24 @@
cap_names.h: _makenames
./_makenames > cap_names.h
+@@ -70,6 +73,20 @@ $(MINLIBNAME): $(OBJS)
+ cap_text.o: cap_text.c $(USE_GPERF_OUTPUT) $(INCLS)
+ $(CC) $(CFLAGS) $(IPATH) $(INCLUDE_GPERF_OUTPUT) -c $< -o $@
+
++install-shared: install-headers
++ mkdir -p -m 0755 $(LIBDIR)
++ install -m 0644 $(MINLIBNAME) $(LIBDIR)/$(MINLIBNAME)
++ ln -sf $(MINLIBNAME) $(LIBDIR)/$(MAJLIBNAME)
++ ln -sf $(MAJLIBNAME) $(LIBDIR)/$(LIBNAME)
++
++install-static: install-headers
++ mkdir -p -m 0755 $(LIBDIR)
++ install -m 0644 $(STALIBNAME) $(LIBDIR)/$(STALIBNAME)
++
++install-headers:
++ mkdir -p -m 0755 $(INCDIR)/sys
++ install -m 0644 include/sys/capability.h $(INCDIR)/sys
++
+ install: all
+ mkdir -p -m 0755 $(INCDIR)/sys
+ install -m 0644 include/sys/capability.h $(INCDIR)/sys
diff --git a/package/libcap/patches/patch-pam_cap_Makefile b/package/libcap/patches/patch-pam_cap_Makefile
deleted file mode 100644
index 5608fece5..000000000
--- a/package/libcap/patches/patch-pam_cap_Makefile
+++ /dev/null
@@ -1,10 +0,0 @@
---- libcap-2.22.orig/pam_cap/Makefile 2010-08-09 02:08:01.000000000 +0200
-+++ libcap-2.22/pam_cap/Makefile 2013-11-08 16:29:05.000000000 +0100
-@@ -10,7 +10,6 @@ include ../Make.Rules
- LDLIBS += -L../libcap -lcap
-
- all: pam_cap.so
-- $(MAKE) testcompile
-
- install: all
- mkdir -p -m 0755 $(LIBDIR)/security
diff --git a/package/libpcap/Makefile b/package/libpcap/Makefile
index d0b333e5e..618b04d21 100644
--- a/package/libpcap/Makefile
+++ b/package/libpcap/Makefile
@@ -4,12 +4,11 @@
include $(ADK_TOPDIR)/rules.mk
PKG_NAME:= libpcap
-PKG_VERSION:= 1.6.1
+PKG_VERSION:= 1.6.2
PKG_RELEASE:= 1
-PKG_HASH:= 116cbb3ac9e96d5dd7b39638a2f894a67fa3dcf06d794e6dae2b9a942ad13476
+PKG_HASH:= 5db3e2998f1eeba2c76da55da5d474248fe19c44f49e15cac8a796a2c7e19690
PKG_DESCR:= low-level packet capture library
PKG_SECTION:= libs/net
-PKG_BUILDDEP:= m4-host flex-host bison-host libnl
PKG_URL:= http://www.tcpdump.org/
PKG_SITES:= http://www.tcpdump.org/release/
PKG_OPTS:= dev
@@ -23,23 +22,19 @@ include $(ADK_TOPDIR)/mk/package.mk
$(eval $(call PKG_template,LIBPCAP,libpcap,$(PKG_VERSION)-${PKG_RELEASE},${PKG_DEPENDS},${PKG_DESCR},${PKG_SECTION},${PKG_OPTS}))
+XAKE_FLAGS+= GCC_HONOUR_COPTS=s
CONFIGURE_ENV+= ac_cv_linux_vers=26
CONFIGURE_ARGS+= --disable-yydebug \
- --with-build-cc=$(CC_FOR_BUILD) \
--disable-dbus \
--without-libnl \
--with-pcap=linux
-TARGET_CFLAGS+= ${TARGET_CPPFLAGS}
INSTALL_TARGET= install install-shared
-MAKE_FLAGS+= STAGING_TARGET_DIR=$(STAGING_TARGET_DIR)
-XAKE_FLAGS+= GCC_HONOUR_COPTS=s
ifneq (${ADK_PACKAGE_LIBPCAP_WITH_IPV6},)
CONFIGURE_ARGS+= --enable-ipv6
else
CONFIGURE_ARGS+= --disable-ipv6
endif
-#XAKE_FLAGS+= M4=m4
libpcap-install:
${INSTALL_DIR} ${IDIR_LIBPCAP}/usr/lib
diff --git a/package/libpcap/patch-Makefile_in b/package/libpcap/patch-Makefile_in
new file mode 100644
index 000000000..cd7bdc961
--- /dev/null
+++ b/package/libpcap/patch-Makefile_in
@@ -0,0 +1,14 @@
+ Use $(sort) here, which implicitly removes duplicates.
+ Otherwise our CFLAGS are passed in via CCOPT and CFLAGS leading
+ to duplicate -fhonour-copts passing.
+--- libpcap-1.6.2.orig/Makefile.in 2014-07-03 00:12:49.000000000 +0200
++++ libpcap-1.6.2/Makefile.in 2014-09-12 15:12:48.567519024 +0200
+@@ -61,7 +61,7 @@ DEPENDENCY_CFLAG = @DEPENDENCY_CFLAG@
+ PROG=libpcap
+
+ # Standard CFLAGS
+-FULL_CFLAGS = $(CCOPT) $(INCLS) $(DEFS) $(CFLAGS)
++FULL_CFLAGS = $(sort $(CCOPT) $(INCLS) $(DEFS) $(CFLAGS))
+
+ INSTALL = @INSTALL@
+ INSTALL_PROGRAM = @INSTALL_PROGRAM@
diff --git a/package/libqmi/Makefile b/package/libqmi/Makefile
new file mode 100644
index 000000000..8f041d2ae
--- /dev/null
+++ b/package/libqmi/Makefile
@@ -0,0 +1,30 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= libqmi
+PKG_VERSION:= 1.12.4
+PKG_RELEASE:= 1
+PKG_HASH:= 5527342bc869400d2a9c3038d66ec8ef87980aefb6c7aae593a13ebfee686a15
+PKG_DESCR:= qmi modem protocol helper library
+PKG_SECTION:= libs/net
+PKG_DEPENDS:= glib
+PKG_BUILDDEP:= glib
+PKG_URL:= http://cgit.freedesktop.org/libqmi/
+PKG_SITES:= http://cgit.freedesktop.org/libqmi/snapshot/
+PKG_OPTS:= dev
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,LIBQMI,libqmi,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION),$(PKG_OPTS)))
+
+AUTOTOOL_STYLE:= autogen
+
+libqmi-install:
+ $(INSTALL_DIR) $(IDIR_LIBQMI)/usr/{bin,lib}
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/qmi{-network,cli} \
+ $(IDIR_LIBQMI)/usr/bin
+ $(CP) $(WRKINST)/usr/lib/libqmi-glib.so* $(IDIR_LIBQMI)/usr/lib/
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/libqmi/patches/patch-Makefile_am b/package/libqmi/patches/patch-Makefile_am
new file mode 100644
index 000000000..e064743aa
--- /dev/null
+++ b/package/libqmi/patches/patch-Makefile_am
@@ -0,0 +1,13 @@
+ do not enable gtk-doc
+--- libqmi-1.12.4.orig/Makefile.am 2015-02-10 17:31:06.000000000 +0100
++++ libqmi-1.12.4/Makefile.am 2015-02-20 18:20:29.213191733 +0100
+@@ -4,8 +4,7 @@ SUBDIRS = . data build-aux src utils doc
+ ACLOCAL_AMFLAGS = -I m4
+
+ DISTCHECK_CONFIGURE_FLAGS = \
+- --with-udev-base-dir="$$dc_install_base" \
+- --enable-gtk-doc
++ --with-udev-base-dir="$$dc_install_base"
+
+ EXTRA_DIST = \
+ gtester.make \
diff --git a/package/libqmi/patches/patch-autogen_sh b/package/libqmi/patches/patch-autogen_sh
new file mode 100644
index 000000000..cba4e8ea6
--- /dev/null
+++ b/package/libqmi/patches/patch-autogen_sh
@@ -0,0 +1,11 @@
+ - drop doc stuff which we don't have
+--- libqmi-1.12.4.orig/autogen.sh 2015-02-10 17:31:06.000000000 +0100
++++ libqmi-1.12.4/autogen.sh 2015-02-20 18:05:46.425974772 +0100
+@@ -14,7 +14,6 @@ PKG_NAME=libqmi
+ }
+
+ (cd $srcdir;
+- gtkdocize || exit 1
+ mkdir -p m4
+ touch README NEWS ChangeLog
+ autoreconf --force --install --verbose
diff --git a/package/libqmi/patches/patch-configure_ac b/package/libqmi/patches/patch-configure_ac
new file mode 100644
index 000000000..37f519c4e
--- /dev/null
+++ b/package/libqmi/patches/patch-configure_ac
@@ -0,0 +1,12 @@
+--- libqmi-1.12.4.orig/configure.ac 2015-02-10 17:31:06.000000000 +0100
++++ libqmi-1.12.4/configure.ac 2015-02-27 22:15:42.000000000 +0100
+@@ -76,9 +76,6 @@ AC_SUBST(GLIB_LIBS)
+ GLIB_MKENUMS=`$PKG_CONFIG --variable=glib_mkenums glib-2.0`
+ AC_SUBST(GLIB_MKENUMS)
+
+-dnl Documentation
+-GTK_DOC_CHECK(1.0)
+-
+ # QMI username
+ QMI_USERNAME="root"
+ AC_ARG_ENABLE(qmi-username,
diff --git a/package/libqmi/patches/patch-docs_reference_libqmi-glib_Makefile_am b/package/libqmi/patches/patch-docs_reference_libqmi-glib_Makefile_am
new file mode 100644
index 000000000..39fa9c415
--- /dev/null
+++ b/package/libqmi/patches/patch-docs_reference_libqmi-glib_Makefile_am
@@ -0,0 +1,25 @@
+ - try to avoid having to have gtk-doc stuff
+ - and try to prevent the mess involved with it
+--- libqmi-1.12.4.orig/docs/reference/libqmi-glib/Makefile.am 2015-02-10 17:31:06.000000000 +0100
++++ libqmi-1.12.4/docs/reference/libqmi-glib/Makefile.am 2015-02-20 18:24:30.739430307 +0100
+@@ -73,9 +73,9 @@ expand_content_files =
+
+ extra_files =
+
+-include $(top_srcdir)/gtk-doc.make
++#include $(top_srcdir)/gtk-doc.make
+
+-EXTRA_DIST += \
++EXTRA_DIST = \
+ libqmi-glib-common.sections \
+ $(DOC_MODULE)-sections.txt \
+ $(DOC_MODULE)-sections.mstamp \
+@@ -83,7 +83,7 @@ EXTRA_DIST += \
+ $(DIAGRAMS) \
+ $(NULL)
+
+-CLEANFILES += \
++CLEANFILES = \
+ $(DOC_MODULE)-decl-list.txt \
+ $(DOC_MODULE)-decl.txt \
+ $(DOC_MODULE)-overrides.txt \
diff --git a/package/lvm/Makefile b/package/lvm/Makefile
index 11a917e45..ec3bc8439 100644
--- a/package/lvm/Makefile
+++ b/package/lvm/Makefile
@@ -4,9 +4,9 @@
include ${ADK_TOPDIR}/rules.mk
PKG_NAME:= lvm
-PKG_VERSION:= 2.02.114
+PKG_VERSION:= 2.02.116
PKG_RELEASE:= 1
-PKG_HASH:= de9cb0acfb9c5a6afa6184160c9e066f19043677f91a72c741d153efcd2874a5
+PKG_HASH:= 2479d6ea61c405efcfcd8a78390d00c1d2e9c92c0262f3ed599f2c0fb6f0b767
PKG_DESCR:= logical volume management
PKG_SECTION:= sys/fs
PKG_DEPENDS:= libdevmapper libncurses
@@ -39,7 +39,9 @@ CONFIGURE_ARGS+= --with-user="" --with-group="" \
--with-optimisation="" \
--disable-testing \
--with-lvm1=none
-CONFIGURE_ENV+= ac_cv_flag_HAVE_PIE=no
+CONFIGURE_ENV+= ac_cv_flag_HAVE_PIE=no \
+ ac_cv_func_malloc_0_nonnull=yes \
+ ac_cv_func_realloc_0_nonnull=yes
lvm-install:
${INSTALL_DIR} ${IDIR_LVM}/usr/sbin
diff --git a/package/lvm/patches/patch-lib_commands_toolcontext_c b/package/lvm/patches/patch-lib_commands_toolcontext_c
index 397576c9b..7a4bbd7cd 100644
--- a/package/lvm/patches/patch-lib_commands_toolcontext_c
+++ b/package/lvm/patches/patch-lib_commands_toolcontext_c
@@ -1,6 +1,6 @@
---- LVM2.2.02.106.orig/lib/commands/toolcontext.c 2014-04-10 17:38:44.000000000 +0200
-+++ LVM2.2.02.106/lib/commands/toolcontext.c 2014-05-29 17:55:05.101305501 +0200
-@@ -1334,6 +1334,8 @@ struct cmd_context *create_toolcontext(u
+--- LVM2.2.02.114.orig/lib/commands/toolcontext.c 2014-11-29 00:07:42.000000000 +0100
++++ LVM2.2.02.114/lib/commands/toolcontext.c 2015-02-28 09:27:09.000000000 +0100
+@@ -1433,6 +1433,8 @@ struct cmd_context *create_toolcontext(u
{
struct cmd_context *cmd;
FILE *new_stream;
@@ -9,7 +9,7 @@
int flags;
#ifdef M_MMAP_MAX
-@@ -1383,10 +1385,10 @@ struct cmd_context *create_toolcontext(u
+@@ -1482,10 +1484,10 @@ struct cmd_context *create_toolcontext(u
if (is_valid_fd(STDIN_FILENO) &&
((flags = fcntl(STDIN_FILENO, F_GETFL)) > 0) &&
(flags & O_ACCMODE) != O_WRONLY) {
@@ -23,7 +23,7 @@
log_sys_error("setvbuf", "");
goto out;
}
-@@ -1395,10 +1397,10 @@ struct cmd_context *create_toolcontext(u
+@@ -1494,10 +1496,10 @@ struct cmd_context *create_toolcontext(u
if (is_valid_fd(STDOUT_FILENO) &&
((flags = fcntl(STDOUT_FILENO, F_GETFL)) > 0) &&
(flags & O_ACCMODE) != O_RDONLY) {
@@ -37,7 +37,7 @@
_IOLBF, linebuffer_size)) {
log_sys_error("setvbuf", "");
goto out;
-@@ -1681,6 +1683,8 @@ void destroy_toolcontext(struct cmd_cont
+@@ -1805,6 +1807,8 @@ void destroy_toolcontext(struct cmd_cont
{
struct dm_config_tree *cft_cmdline;
FILE *new_stream;
@@ -46,7 +46,7 @@
int flags;
if (cmd->dump_filter && cmd->filter && cmd->filter->dump &&
-@@ -1717,9 +1721,9 @@ void destroy_toolcontext(struct cmd_cont
+@@ -1840,9 +1844,9 @@ void destroy_toolcontext(struct cmd_cont
if (is_valid_fd(STDIN_FILENO) &&
((flags = fcntl(STDIN_FILENO, F_GETFL)) > 0) &&
(flags & O_ACCMODE) != O_WRONLY) {
@@ -59,7 +59,7 @@
} else
cmd->linebuffer = NULL; /* Leave buffer in place (deliberate leak) */
}
-@@ -1727,9 +1731,9 @@ void destroy_toolcontext(struct cmd_cont
+@@ -1850,9 +1854,9 @@ void destroy_toolcontext(struct cmd_cont
if (is_valid_fd(STDOUT_FILENO) &&
((flags = fcntl(STDOUT_FILENO, F_GETFL)) > 0) &&
(flags & O_ACCMODE) != O_RDONLY) {
diff --git a/package/lvm/patches/patch-lib_mm_memlock_c b/package/lvm/patches/patch-lib_mm_memlock_c
new file mode 100644
index 000000000..8cc6d8514
--- /dev/null
+++ b/package/lvm/patches/patch-lib_mm_memlock_c
@@ -0,0 +1,76 @@
+--- LVM2.2.02.114.orig/lib/mm/memlock.c 2014-11-29 00:07:42.000000000 +0100
++++ LVM2.2.02.114/lib/mm/memlock.c 2015-02-28 09:44:51.000000000 +0100
+@@ -25,7 +25,6 @@
+ #include <sys/mman.h>
+ #include <sys/time.h>
+ #include <sys/resource.h>
+-#include <malloc.h>
+
+ #ifndef DEVMAPPER_SUPPORT
+
+@@ -134,10 +133,8 @@ static void _touch_memory(void *mem, siz
+ static void _allocate_memory(void)
+ {
+ #ifndef VALGRIND_POOL
+- void *stack_mem;
++ void *stack_mem, *temp_malloc_mem;
+ struct rlimit limit;
+- int i, area = 0, missing = _size_malloc_tmp, max_areas = 32, hblks;
+- char *areas[max_areas];
+
+ /* Check if we could preallocate requested stack */
+ if ((getrlimit (RLIMIT_STACK, &limit) == 0) &&
+@@ -146,50 +143,13 @@ static void _allocate_memory(void)
+ _touch_memory(stack_mem, _size_stack);
+ /* FIXME else warn user setting got ignored */
+
+- /*
+- * When a brk() fails due to fragmented address space (which sometimes
+- * happens when we try to grab 8M or so), glibc will make a new
+- * arena. In this arena, the rules for using “direct” mmap are relaxed,
+- * circumventing the MAX_MMAPs and MMAP_THRESHOLD settings. We can,
+- * however, detect when this happens with mallinfo() and try to co-opt
+- * malloc into using MMAP as a MORECORE substitute instead of returning
+- * MMAP'd memory directly. Since MMAP-as-MORECORE does not munmap the
+- * memory on free(), this is good enough for our purposes.
+- */
+- while (missing > 0) {
+- struct mallinfo inf = mallinfo();
+- hblks = inf.hblks;
+-
+- if ((areas[area] = malloc(_size_malloc_tmp)))
+- _touch_memory(areas[area], _size_malloc_tmp);
+-
+- inf = mallinfo();
+-
+- if (hblks < inf.hblks) {
+- /* malloc cheated and used mmap, even though we told it
+- not to; we try with twice as many areas, each half
+- the size, to circumvent the faulty logic in glibc */
+- free(areas[area]);
+- _size_malloc_tmp /= 2;
+- } else {
+- ++ area;
+- missing -= _size_malloc_tmp;
+- }
+-
+- if (area == max_areas && missing > 0) {
+- /* Too bad. Warn the user and proceed, as things are
+- * most likely going to work out anyway. */
+- log_warn("WARNING: Failed to reserve memory, %d bytes missing.", missing);
+- break;
+- }
+- }
++ if ((temp_malloc_mem = malloc(_size_malloc_tmp)))
++ _touch_memory(temp_malloc_mem, _size_malloc_tmp);
+
+ if ((_malloc_mem = malloc(_size_malloc)))
+ _touch_memory(_malloc_mem, _size_malloc);
+
+- /* free up the reserves so subsequent malloc's can use that memory */
+- for (i = 0; i < area; ++i)
+- free(areas[i]);
++ free(temp_malloc_mem);
+ #endif
+ }
+
diff --git a/package/lvm/patches/patch-tools_lvmcmdline_c b/package/lvm/patches/patch-tools_lvmcmdline_c
index 13124f32d..df9a068cd 100644
--- a/package/lvm/patches/patch-tools_lvmcmdline_c
+++ b/package/lvm/patches/patch-tools_lvmcmdline_c
@@ -1,6 +1,6 @@
---- LVM2.2.02.106.orig/tools/lvmcmdline.c 2014-04-10 17:38:46.000000000 +0200
-+++ LVM2.2.02.106/tools/lvmcmdline.c 2014-05-29 16:57:14.221581766 +0200
-@@ -1252,9 +1252,12 @@ int lvm_split(char *str, int *argc, char
+--- LVM2.2.02.114.orig/tools/lvmcmdline.c 2014-11-29 00:07:43.000000000 +0100
++++ LVM2.2.02.114/tools/lvmcmdline.c 2015-02-28 09:27:09.000000000 +0100
+@@ -1536,9 +1536,12 @@ int lvm_split(char *str, int *argc, char
static int _check_standard_fds(void)
{
int err = is_valid_fd(STDERR_FILENO);
@@ -14,7 +14,7 @@
if (err)
perror("stdin stream open");
else
-@@ -1264,7 +1267,7 @@ static int _check_standard_fds(void)
+@@ -1548,7 +1551,7 @@ static int _check_standard_fds(void)
}
if (!is_valid_fd(STDOUT_FILENO) &&
@@ -23,7 +23,7 @@
if (err)
perror("stdout stream open");
/* else no stdout */
-@@ -1272,7 +1275,7 @@ static int _check_standard_fds(void)
+@@ -1556,7 +1559,7 @@ static int _check_standard_fds(void)
}
if (!is_valid_fd(STDERR_FILENO) &&
diff --git a/package/mISDN/Makefile b/package/mISDN/Makefile
new file mode 100644
index 000000000..348f1da0d
--- /dev/null
+++ b/package/mISDN/Makefile
@@ -0,0 +1,35 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= mISDN
+PKG_VERSION:= 1_1_9_2
+PKG_RELEASE:= 1
+PKG_HASH:= 9ff96d8361891b9a15cf6dbdb57214c36ca13702d5bf7c18ebe259ec5d876c09
+PKG_DESCR:= new isdn stack of the linux kernel
+PKG_SECTION:= net/voip
+PKG_URL:= http://www.misdn.org
+PKG_SITES:= http://www.misdn.org/downloads/releases/
+
+PKG_CFLINE_MISDN:= depends on ADK_BROKEN
+
+DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.gz
+
+include $(ADK_TOPDIR)/mk/kernel-ver.mk
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,MISDN,misdn,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+CONFIG_STYLE:= manual
+XAKE_FLAGS+= LINUX=$(LINUX_DIR) KVERS=$(KERNEL_VERSION)
+FAKE_FLAGS+= INSTALL_PREFIX=$(WRKINST)
+
+misdn-install:
+ $(INSTALL_DIR) $(IDIR_MISDN)/usr/sbin
+ $(INSTALL_BIN) $(WRKINST)/usr/sbin/{mISDN,misdn-init} \
+ $(IDIR_MISDN)/usr/sbin
+ $(INSTALL_DIR) $(IDIR_MISDN)/lib/modules
+ $(CP) $(WRKINST)/lib/modules/* $(IDIR_MISDN)/lib/modules/
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/mISDN/patches/patch-Makefile b/package/mISDN/patches/patch-Makefile
new file mode 100644
index 000000000..e3a582632
--- /dev/null
+++ b/package/mISDN/patches/patch-Makefile
@@ -0,0 +1,53 @@
+ - do not use /lib for kernel source dir detection
+ - drop some non-compiling card drivers
+ - do not run depmod and stuff
+--- mISDN-1_1_9_2.orig/Makefile 2009-06-09 10:41:07.000000000 +0200
++++ mISDN-1_1_9_2/Makefile 2011-07-11 15:04:00.996001762 +0200
+@@ -14,9 +14,14 @@ ifndef KVERS
+ KVERS:=$(shell uname -r)
+ endif
+
++ifndef LINUX
+ MODS=/lib/modules/$(KVERS)
+ LINUX=$(MODS)/build
+ LINUX_SOURCE=$(MODS)/source
++else
++LINUX_SOURCE=${LINUX}
++endif
++
+ UPDATE_MODULES=$(shell which update-modules)
+ MODULES_UPDATE=$(shell which modules-update)
+ DEPMOD=$(shell which depmod)
+@@ -30,15 +35,15 @@ MISDN_SRC=$(MISDNDIR)/drivers/isdn/hardw
+
+ CONFIGS+=CONFIG_MISDN_DRV=m
+ CONFIGS+=CONFIG_MISDN_DSP=m
+-CONFIGS+=CONFIG_MISDN_HFCMULTI=m
+-CONFIGS+=CONFIG_MISDN_HFCPCI=m
++#CONFIGS+=CONFIG_MISDN_HFCMULTI=m
++#CONFIGS+=CONFIG_MISDN_HFCPCI=m
+ CONFIGS+=CONFIG_MISDN_HFCUSB=m
+ CONFIGS+=CONFIG_MISDN_XHFC=m
+-CONFIGS+=CONFIG_MISDN_HFCMINI=m
+-CONFIGS+=CONFIG_MISDN_W6692=m
+-CONFIGS+=CONFIG_MISDN_SPEEDFAX=m
+-CONFIGS+=CONFIG_MISDN_AVM_FRITZ=m
+-CONFIGS+=CONFIG_MISDN_NETJET=m
++#CONFIGS+=CONFIG_MISDN_HFCMINI=m
++#CONFIGS+=CONFIG_MISDN_W6692=m
++#CONFIGS+=CONFIG_MISDN_SPEEDFAX=m
++#CONFIGS+=CONFIG_MISDN_AVM_FRITZ=m
++#CONFIGS+=CONFIG_MISDN_NETJET=m
+ CONFIGS+=CONFIG_MISDN_DEBUGTOOL=m
+
+ #CONFIGS+=CONFIG_MISDN_NETDEV=y
+@@ -52,9 +57,6 @@ all: VERSION test_old_misdn test_new_mis
+ export MINCLUDES=$(MISDNDIR)/include ; export MISDNVERSION=$(MISDNVERSION); make -C $(LINUX) SUBDIRS=$(MISDN_SRC) modules $(CONFIGS)
+
+ install: all modules-install misdn-init
+- $(DEPMOD)
+- $(UPDATE_MODULES)
+- $(MODULES_UPDATE)
+ make -C config install
+
+ modules-install:
diff --git a/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_contr_c b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_contr_c
new file mode 100644
index 000000000..e33bde4c5
--- /dev/null
+++ b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_contr_c
@@ -0,0 +1,65 @@
+ - capi_ctr_reseted has been renamed in linux kernel commit
+ 4e329972052c3649367b91de783f6293b8653cb2
+ - kernel now wants a struc file_operations for proc files
+--- mISDN-1_1_9_2.orig/drivers/isdn/hardware/mISDN/contr.c 2009-01-22 14:36:34.000000000 +0100
++++ mISDN-1_1_9_2/drivers/isdn/hardware/mISDN/contr.c 2011-07-15 18:33:55.765001537 +0200
+@@ -367,17 +367,12 @@ procinfo(struct capi_ctr *ctrl)
+ }
+
+ static int
+-read_proc(char *page, char **start, off_t off, int count, int *eof, struct capi_ctr *ctrl)
++proc_show(struct seq_file *file, void *data)
+ {
+- int len = 0;
++ struct capi_ctr *ctrl = file->private;
+
+- len += sprintf(page+len, "mISDN_read_proc\n");
+- if (off+count >= len)
+- *eof = 1;
+- if (len < off)
+- return 0;
+- *start = page + off;
+- return ((count < len-off) ? count : len-off);
++ seq_printf(file, "mISDN_proc_show\n");
++ return 0;
+ };
+
+
+@@ -399,7 +394,7 @@ ResetController(struct capi_ctr *ctrl)
+ #ifdef OLDCAPI_DRIVER_INTERFACE
+ contr->ctrl->reseted(contr->ctrl);
+ #else
+- capi_ctr_reseted(contr->ctrl);
++ capi_ctr_down(contr->ctrl);
+ #endif
+ }
+
+@@ -601,6 +596,19 @@ ControllerPutStatus(Controller_t *contr,
+ contrDebug(contr, CAPI_DBG_CONTR, "%s: %s", __FUNCTION__, msg);
+ }
+
++static int misdn_proc_open(struct inode *inode, struct file *file)
++{
++ return single_open(file, proc_show, PDE(inode)->data);
++}
++
++static const struct file_operations misdn_proc_fops = {
++ .owner = THIS_MODULE,
++ .open = misdn_proc_open,
++ .read = seq_read,
++ .llseek = seq_lseek,
++ .release = single_release,
++};
++
+ int
+ ControllerConstr(Controller_t **contr_p, mISDNstack_t *st, mISDN_pid_t *pid, mISDNobject_t *ocapi)
+ {
+@@ -719,7 +727,7 @@ ControllerConstr(Controller_t **contr_p,
+ contr->ctrl->load_firmware = LoadFirmware;
+ contr->ctrl->reset_ctr = ResetController;
+ contr->ctrl->procinfo = procinfo;
+- contr->ctrl->ctr_read_proc = read_proc;
++ contr->ctrl->proc_fops = &misdn_proc_fops;
+ retval = attach_capi_ctr(contr->ctrl);
+ #endif
+ if (!retval) {
diff --git a/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_core_c b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_core_c
new file mode 100644
index 000000000..ab96e3189
--- /dev/null
+++ b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_core_c
@@ -0,0 +1,75 @@
+ - old lock initialisers got renamed
+ - init_MUTEX_LOCKED got dropped, use the real sema_init instead
+ - force sysfs-object creation
+--- mISDN-1_1_9_2.orig/drivers/isdn/hardware/mISDN/core.c 2009-06-09 10:08:45.000000000 +0200
++++ mISDN-1_1_9_2/drivers/isdn/hardware/mISDN/core.c 2011-07-20 16:42:18.342001559 +0200
+@@ -23,10 +23,10 @@ static char *mISDN_core_version = MISDN
+ static void (*dt_new_frame) (mISDNstack_t *stack, enum mISDN_dt_type type, struct sk_buff *skb, int duplicate_skb) = NULL;
+
+ LIST_HEAD(mISDN_objectlist);
+-static rwlock_t mISDN_objects_lock = RW_LOCK_UNLOCKED;
++static rwlock_t mISDN_objects_lock = __RW_LOCK_UNLOCKED(old_style_rw_init);
+
+ LIST_HEAD(mISDN_modulelist);
+-static rwlock_t mISDN_modules_lock = RW_LOCK_UNLOCKED;
++static rwlock_t mISDN_modules_lock = __RW_LOCK_UNLOCKED(old_style_rw_init);
+ struct modulelist {
+ struct list_head list;
+ struct module *module;
+@@ -35,7 +35,7 @@ struct modulelist {
+ int core_debug;
+
+ static u_char entityarray[MISDN_MAX_ENTITY/8];
+-static spinlock_t entity_lock = SPIN_LOCK_UNLOCKED;
++static spinlock_t entity_lock = __SPIN_LOCK_UNLOCKED(old_style_spin_init);
+
+ static uint debug;
+ static int obj_id;
+@@ -724,7 +724,7 @@ int mISDN_register(mISDNobject_t *obj) {
+ obj->id);
+ if (core_debug & DEBUG_CORE_FUNC)
+ printk(KERN_DEBUG "mISDN_register: obj(%p)\n", obj);
+-#ifndef SYSFS_SUPPORT_2_6_24
++//#ifndef SYSFS_SUPPORT_2_6_24
+ retval = mISDN_register_sysfs_obj(obj);
+ if (retval) {
+ printk(KERN_ERR "mISDN_register class_device_register return(%d)\n", retval);
+@@ -732,7 +732,7 @@ int mISDN_register(mISDNobject_t *obj) {
+ list_del(&obj->list);
+ write_unlock_irqrestore(&mISDN_objects_lock, flags);
+ }
+-#endif
++//#endif
+ return(retval);
+ }
+
+@@ -758,9 +758,10 @@ int mISDN_unregister(mISDNobject_t *obj)
+ if (core_debug & DEBUG_CORE_FUNC)
+ printk(KERN_DEBUG "mISDN_unregister: mISDN_objectlist(%p<-%p->%p)\n",
+ mISDN_objectlist.prev, &mISDN_objectlist, mISDN_objectlist.next);
++ mISDN_unregister_sysfs_obj(obj);
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
+ #ifdef SYSFS_SUPPORT
+- device_unregister(&obj->class_dev);
++ //device_unregister(&obj->class_dev);
+ #endif
+ #else
+ class_device_unregister(&obj->class_dev);
+@@ -774,7 +775,7 @@ mISDNInit(void)
+ struct semaphore sem;
+ int err;
+
+- init_MUTEX_LOCKED(&sem);
++ sema_init(&sem, 0);
+
+ printk(KERN_INFO "Modular ISDN Stack core version (%s) revision (%s)\n", mISDN_core_version, mISDN_core_revision);
+ core_debug = debug;
+@@ -817,7 +818,7 @@ sysfs_fail:
+ void mISDN_cleanup(void) {
+ struct semaphore sem;
+
+- init_MUTEX_LOCKED(&sem);
++ sema_init(&sem, 0);
+
+ free_mISDNdev();
+ if (!list_empty(&mISDN_objectlist)) {
diff --git a/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_core_h b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_core_h
new file mode 100644
index 000000000..bea80f3de
--- /dev/null
+++ b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_core_h
@@ -0,0 +1,19 @@
+ - daemonize is defined in linux/sched.h
+--- mISDN-1_1_9_2.orig/drivers/isdn/hardware/mISDN/core.h 2009-01-22 14:36:34.000000000 +0100
++++ mISDN-1_1_9_2/drivers/isdn/hardware/mISDN/core.h 2011-07-20 16:42:17.471001559 +0200
+@@ -4,6 +4,7 @@
+ *
+ */
+
++#include <linux/sched.h>
+ #include <linux/slab.h>
+ #include <linux/string.h>
+ #include <linux/mISDNif.h>
+@@ -61,6 +62,7 @@ extern mISDNinstance_t *get_instance(mIS
+
+ /* from sysfs_obj.c */
+ extern int mISDN_register_sysfs_obj(mISDNobject_t *);
++extern void mISDN_unregister_sysfs_obj(mISDNobject_t *);
+ extern int mISDN_sysfs_init(void);
+ extern void mISDN_sysfs_cleanup(void);
+
diff --git a/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_debugtool_c b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_debugtool_c
new file mode 100644
index 000000000..78ffe69f4
--- /dev/null
+++ b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_debugtool_c
@@ -0,0 +1,49 @@
+ - big kernel lock unavailable
+ - CLASS_ATTR callbacks changed signature
+--- mISDN-1_1_9_2.orig/drivers/isdn/hardware/mISDN/debugtool.c 2009-01-22 14:36:34.000000000 +0100
++++ mISDN-1_1_9_2/drivers/isdn/hardware/mISDN/debugtool.c 2011-07-11 14:46:28.845001528 +0200
+@@ -121,11 +121,11 @@ static void dt_run (void)
+ struct socket *sock;
+ struct sockaddr_in addr;
+
+- lock_kernel();
++ //lock_kernel();
+ current->flags |= PF_NOFREEZE;
+ daemonize(MODULE_NAME);
+ allow_signal(SIGKILL);
+- unlock_kernel();
++ //unlock_kernel();
+
+ /* init socket */
+ ret = sock_create(AF_INET, SOCK_DGRAM, IPPROTO_UDP, &sock);
+@@ -181,12 +181,12 @@ static struct class dt_class = {
+ #endif
+ };
+
+-static ssize_t attr_show_enabled (struct class *class, char *buf)
++static ssize_t attr_show_enabled (struct class *class, struct class_attribute *attr, char *buf)
+ {
+ return sprintf(buf, "%d\n", dt_enabled);
+ }
+
+-static ssize_t attr_store_enabled (struct class *class, const char *buf, size_t count)
++static ssize_t attr_store_enabled (struct class *class, struct class_attribute *attr, const char *buf, size_t count)
+ {
+ if (count > 0 && *buf == '1') {
+ mISDN_dt_enable();
+@@ -241,13 +241,13 @@ void __exit dt_exit(void)
+ mISDN_module_unregister(THIS_MODULE);
+
+ if (thread) {
+- lock_kernel();
++ //lock_kernel();
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
+ ret = kill_pid(find_pid_ns(thread->pid, &init_pid_ns), SIGKILL, 1);
+ #else
+ ret = kill_proc(thread->pid, SIGKILL, 1);
+ #endif
+- unlock_kernel();
++ //unlock_kernel();
+ if (ret < 0)
+ printk(KERN_INFO MODULE_NAME ": Unknown error (%d) while trying to terminate kernel thread!\n", -ret);
+ wake_up_interruptible(&skb_q_wait);
diff --git a/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_hfcs_usb_c b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_hfcs_usb_c
new file mode 100644
index 000000000..f8501ef02
--- /dev/null
+++ b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_hfcs_usb_c
@@ -0,0 +1,17 @@
+ - add the viprinet ISDN USB device ID
+ - some debug output
+--- mISDN-1_1_9_2.orig/drivers/isdn/hardware/mISDN/hfcs_usb.c 2009-01-22 14:36:34.000000000 +0100
++++ mISDN-1_1_9_2/drivers/isdn/hardware/mISDN/hfcs_usb.c 2011-07-20 15:00:25.362001559 +0200
+@@ -208,6 +208,12 @@ static struct usb_device_id hfcsusb_idta
+ {LED_SCHEME1, {0x88, -64, -32, -16},
+ "ZyXEL OMNI.NET USB II"}),
+ },
++ {
++ USB_DEVICE(0x18d8, 0x1020),
++ .driver_info = (unsigned long) &((hfcsusb_vdata)
++ {LED_SCHEME1, {0, 1, 0, 0},
++ "Viprinet ISDN"}),
++ },
+ { }
+ };
+
diff --git a/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_stack_c b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_stack_c
new file mode 100644
index 000000000..972660318
--- /dev/null
+++ b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_stack_c
@@ -0,0 +1,34 @@
+ - same as with core.c
+ - try forcing sysfs-object creation
+--- mISDN-1_1_9_2.orig/drivers/isdn/hardware/mISDN/stack.c 2009-01-22 14:36:34.000000000 +0100
++++ mISDN-1_1_9_2/drivers/isdn/hardware/mISDN/stack.c 2011-07-20 16:43:13.224001559 +0200
+@@ -9,9 +9,9 @@
+ #include "core.h"
+
+ static LIST_HEAD(mISDN_stacklist);
+-static rwlock_t stacklist_lock = RW_LOCK_UNLOCKED;
++static rwlock_t stacklist_lock = __RW_LOCK_UNLOCKED(old_style_rw_init);
+ static LIST_HEAD(mISDN_instlist);
+-static rwlock_t instlist_lock = RW_LOCK_UNLOCKED;
++static rwlock_t instlist_lock = __RW_LOCK_UNLOCKED(old_style_rw_init);
+
+ int
+ get_stack_cnt(void)
+@@ -793,7 +793,7 @@ delete_stack(mISDNstack_t *st)
+ struct semaphore sem;
+ u_long flags;
+
+- init_MUTEX_LOCKED(&sem);
++ sema_init(&sem, 0);
+
+ if (core_debug & DEBUG_CORE_FUNC)
+ printk(KERN_DEBUG "%s: st(%p:%08x)\n", __FUNCTION__, st, st->id);
+@@ -1216,7 +1216,7 @@ clear_stack(mISDNstack_t *st, int wait)
+
+ if (wait) {
+ struct semaphore sem;
+- init_MUTEX_LOCKED(&sem);
++ sema_init(&sem, 0);
+
+ hhe->data[0] = &sem;
+ _queue_message(st, skb);
diff --git a/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_sysfs_inst_c b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_sysfs_inst_c
new file mode 100644
index 000000000..bdc1d1397
--- /dev/null
+++ b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_sysfs_inst_c
@@ -0,0 +1,30 @@
+ - see core.c
+--- mISDN-1_1_9_2.orig/drivers/isdn/hardware/mISDN/sysfs_inst.c 2009-06-09 10:09:20.000000000 +0200
++++ mISDN-1_1_9_2/drivers/isdn/hardware/mISDN/sysfs_inst.c 2011-07-11 14:08:22.920000979 +0200
+@@ -82,7 +82,7 @@ static void release_mISDN_inst(struct de
+ #endif
+ if (core_debug & DEBUG_SYSFS)
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
+- printk(KERN_INFO "release instance class dev %s\n", dev->bus_id);
++ printk(KERN_INFO "release instance class dev %s\n", kobject_name(&dev->kobj));
+ #else
+ printk(KERN_INFO "release instance class dev %s\n", dev->class_id);
+ #endif
+@@ -99,7 +99,7 @@ static void release_mISDN_inst(struct cl
+ #endif
+ if (core_debug & DEBUG_SYSFS)
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
+- printk(KERN_INFO "release instance class dev %s\n", dev->bus_id);
++ printk(KERN_INFO "release instance class dev %s\n", kobject_name(&dev->kobj));
+ #else
+ printk(KERN_INFO "release instance class dev %s\n", dev->class_id);
+ #endif
+@@ -127,7 +127,7 @@ mISDN_register_sysfs_inst(mISDNinstance_
+
+ inst->class_dev.class = &inst_dev_class;
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
+- snprintf(inst->class_dev.bus_id, BUS_ID_SIZE, "inst-%08x", inst->id);
++ dev_set_name(&inst->class_dev, "inst-%08x", inst->id);
+ err = device_register(&inst->class_dev);
+ #else
+ snprintf(inst->class_dev.class_id, BUS_ID_SIZE, "inst-%08x", inst->id);
diff --git a/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_sysfs_obj_c b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_sysfs_obj_c
new file mode 100644
index 000000000..80434a1ba
--- /dev/null
+++ b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_sysfs_obj_c
@@ -0,0 +1,33 @@
+ - bus_id field is gone from struct device now
+--- mISDN-1_1_9_2.orig/drivers/isdn/hardware/mISDN/sysfs_obj.c 2009-06-09 08:20:29.000000000 +0200
++++ mISDN-1_1_9_2/drivers/isdn/hardware/mISDN/sysfs_obj.c 2011-07-20 16:49:35.771001557 +0200
+@@ -136,7 +136,7 @@ mISDN_register_sysfs_obj(mISDNobject_t *
+
+ obj->class_dev.class = &obj_dev_class;
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
+- snprintf(obj->class_dev.bus_id, BUS_ID_SIZE, "obj-%d", obj->id);
++ dev_set_name(&obj->class_dev, "obj-%d", obj->id);
+ err = device_register(&obj->class_dev);
+ #else
+ snprintf(obj->class_dev.class_id, BUS_ID_SIZE, "obj-%d", obj->id);
+@@ -181,6 +181,20 @@ out:
+ return(err);
+ }
+
++void
++mISDN_unregister_sysfs_obj(mISDNobject_t *obj) {
++#ifdef SYSFS_SUPPORT
++ if (obj->owner)
++ sysfs_remove_link(&obj->class_dev.kobj, "module");
++ sysfs_remove_group(&obj->class_dev.kobj, &DPROTO_group);
++ sysfs_remove_group(&obj->class_dev.kobj, &BPROTO_group);
++#endif
++ device_remove_file(&obj->class_dev, &dev_attr_refcnt);
++ device_remove_file(&obj->class_dev, &dev_attr_name);
++ device_remove_file(&obj->class_dev, &dev_attr_id);
++ device_unregister(&obj->class_dev);
++}
++
+ int
+ mISDN_sysfs_init(void) {
+ int err;
diff --git a/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_sysfs_st_c b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_sysfs_st_c
new file mode 100644
index 000000000..61d88e3fc
--- /dev/null
+++ b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_sysfs_st_c
@@ -0,0 +1,18 @@
+ yeah, same as always
+--- mISDN-1_1_9_2.orig/drivers/isdn/hardware/mISDN/sysfs_st.c 2009-06-09 10:10:16.000000000 +0200
++++ mISDN-1_1_9_2/drivers/isdn/hardware/mISDN/sysfs_st.c 2011-07-11 14:10:50.061001669 +0200
+@@ -260,11 +260,11 @@ mISDN_register_sysfs_stack(mISDNstack_t
+ st->class_dev.class = &stack_dev_class;
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,26)
+ if (st->id & FLG_CHILD_STACK)
+- snprintf(st->class_dev.bus_id, BUS_ID_SIZE, "chst-%08x", st->id);
++ dev_set_name(&st->class_dev, "chst-%08x", st->id);
+ else if (st->id & FLG_CLONE_STACK)
+- snprintf(st->class_dev.bus_id, BUS_ID_SIZE, "clst-%08x", st->id);
++ dev_set_name(&st->class_dev, "clst-%08x", st->id);
+ else
+- snprintf(st->class_dev.bus_id, BUS_ID_SIZE, "st-%08x", st->id);
++ dev_set_name(&st->class_dev, "st-%08x", st->id);
+ if (st->mgr)
+ st->class_dev.parent = st->mgr->class_dev.parent;
+ err = device_register(&st->class_dev);
diff --git a/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_udevice_c b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_udevice_c
new file mode 100644
index 000000000..468bd0dcb
--- /dev/null
+++ b/package/mISDN/patches/patch-drivers_isdn_hardware_mISDN_udevice_c
@@ -0,0 +1,36 @@
+ - same as with core.c
+--- mISDN-1_1_9_2.orig/drivers/isdn/hardware/mISDN/udevice.c 2009-01-22 14:36:34.000000000 +0100
++++ mISDN-1_1_9_2/drivers/isdn/hardware/mISDN/udevice.c 2011-07-11 13:54:44.650001546 +0200
+@@ -57,7 +57,7 @@ typedef struct entity_item {
+ } entity_item_t;
+
+ static LIST_HEAD(mISDN_devicelist);
+-static rwlock_t mISDN_device_lock = RW_LOCK_UNLOCKED;
++static rwlock_t mISDN_device_lock = __RW_LOCK_UNLOCKED(old_style_rw_init);
+
+ static mISDNobject_t udev_obj;
+ static char MName[] = "UserDevice";
+@@ -1458,7 +1458,7 @@ init_device(u_int minor) {
+ init_waitqueue_head(&dev->wport.procq);
+ skb_queue_head_init(&dev->rport.queue);
+ skb_queue_head_init(&dev->wport.queue);
+- init_MUTEX(&dev->io_sema);
++ sema_init(&dev->io_sema, 1);
+ INIT_LIST_HEAD(&dev->layerlist);
+ INIT_LIST_HEAD(&dev->stacklist);
+ INIT_LIST_HEAD(&dev->timerlist);
+@@ -1557,12 +1557,12 @@ mISDN_open(struct inode *ino, struct fil
+ return(-ENOMEM);
+ dev->open_mode |= filep->f_mode & (FMODE_READ | FMODE_WRITE);
+ if (dev->open_mode & FMODE_READ){
+- dev->rport.lock = SPIN_LOCK_UNLOCKED;
++ dev->rport.lock = __SPIN_LOCK_UNLOCKED(old_style_spin_init);
+ dev->rport.maxqlen = DEFAULT_PORT_QUEUELEN;
+ test_and_set_bit(FLG_mISDNPORT_OPEN, &dev->rport.Flag);
+ }
+ if (dev->open_mode & FMODE_WRITE) {
+- dev->wport.lock = SPIN_LOCK_UNLOCKED;
++ dev->wport.lock = __SPIN_LOCK_UNLOCKED(old_style_spin_init);
+ dev->wport.maxqlen = DEFAULT_PORT_QUEUELEN;
+ test_and_set_bit(FLG_mISDNPORT_OPEN, &dev->wport.Flag);
+ }
diff --git a/package/mISDNuser/Makefile b/package/mISDNuser/Makefile
new file mode 100644
index 000000000..d840e2f24
--- /dev/null
+++ b/package/mISDNuser/Makefile
@@ -0,0 +1,35 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= mISDNuser
+PKG_VERSION:= 1_1_9
+PKG_RELEASE:= 1
+PKG_MD5SUM:= e174a60e7040c88d1184364714e55c1b
+PKG_DESCR:= misdn kernel link library and includes, this is the out-of-tree version
+PKG_SECTION:= net/voip
+PKG_DEPENDS:= misdn
+PKG_BUILDDEP:= mISDN
+PKG_URL:= http://www.misdn.org
+PKG_SITES:= http://www.misdn.org/downloads/releases/
+PKG_NOPARALLEL:= 1
+
+PKG_CFLINE_MISDNUSER:= depends on ADK_BROKEN
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,MISDNUSER,misdnuser,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+CONFIG_STYLE:= manual
+XAKE_FLAGS+= MISDNDIR=$(STAGING_TARGET_DIR)/usr INSTALL_PREFIX=$(WRKINST)
+
+misdnuser-install:
+ $(INSTALL_DIR) $(IDIR_MISDNUSER)/usr/{bin,lib}
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/{loadfirm,mISDNdebugtool,misdnportinfo} \
+ $(IDIR_MISDNUSER)/usr/bin/
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/{sendhwctrl,testcon*,testlayer*} \
+ $(IDIR_MISDNUSER)/usr/bin/
+ $(CP) $(WRKINST)/usr/lib/*.so* $(IDIR_MISDNUSER)/usr/lib/
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/mISDNuser/patches/patch-Makefile b/package/mISDNuser/patches/patch-Makefile
new file mode 100644
index 000000000..77846228f
--- /dev/null
+++ b/package/mISDNuser/patches/patch-Makefile
@@ -0,0 +1,16 @@
+ allow CC override
+ allow CFLAGS enhancement
+--- mISDNuser-1_1_9.orig/Makefile 2009-01-21 18:06:34.000000000 +0100
++++ mISDNuser-1_1_9/Makefile 2011-07-11 17:14:13.425001831 +0200
+@@ -28,7 +28,10 @@ export INCLUDEDIR
+ LIBDIR=/usr/lib
+ export LIBDIR
+
+-CFLAGS:= -g -Wall -I $(INCLUDEDIR) -I $(MISDNINCLUDEDIR)
++CC ?= gcc
++export CC
++
++CFLAGS+= -g -Wall -I $(INCLUDEDIR) -I $(MISDNINCLUDEDIR)
+ CFLAGS+= -D CLOSE_REPORT=1
+
+ #disable this if your system does not support PIC (position independent code)
diff --git a/package/mISDNuser/patches/patch-debugtool_Makefile b/package/mISDNuser/patches/patch-debugtool_Makefile
new file mode 100644
index 000000000..c531dd074
--- /dev/null
+++ b/package/mISDNuser/patches/patch-debugtool_Makefile
@@ -0,0 +1,9 @@
+ allow CC override
+--- mISDNuser-1_1_9.orig/debugtool/Makefile 2008-11-18 12:35:09.000000000 +0100
++++ mISDNuser-1_1_9/debugtool/Makefile 2011-07-11 17:12:13.520001533 +0200
+@@ -1,4 +1,4 @@
+-CC = gcc
++CC ?= gcc
+
+ CFLAGS += -Wall
+
diff --git a/package/mISDNuser/patches/patch-i4lnet_Makefile b/package/mISDNuser/patches/patch-i4lnet_Makefile
new file mode 100644
index 000000000..3d4150b9a
--- /dev/null
+++ b/package/mISDNuser/patches/patch-i4lnet_Makefile
@@ -0,0 +1,9 @@
+ allow CC override
+--- mISDNuser-1_1_9.orig/i4lnet/Makefile 2008-11-18 12:35:09.000000000 +0100
++++ mISDNuser-1_1_9/i4lnet/Makefile 2011-07-11 17:12:22.313001562 +0200
+@@ -1,4 +1,4 @@
+-CC = gcc
++CC ?= gcc
+ AR = ar
+ RANLIB = ranlib
+
diff --git a/package/mISDNuser/patches/patch-lib_Makefile b/package/mISDNuser/patches/patch-lib_Makefile
new file mode 100644
index 000000000..db658881a
--- /dev/null
+++ b/package/mISDNuser/patches/patch-lib_Makefile
@@ -0,0 +1,9 @@
+ allow CC override
+--- mISDNuser-1_1_9.orig/lib/Makefile 2008-11-18 12:35:09.000000000 +0100
++++ mISDNuser-1_1_9/lib/Makefile 2011-07-11 17:12:25.341001554 +0200
+@@ -1,4 +1,4 @@
+-CC = gcc
++CC ?= gcc
+ AR = ar
+ RANLIB = ranlib
+
diff --git a/package/mISDNuser/patches/patch-suppserv_Makefile b/package/mISDNuser/patches/patch-suppserv_Makefile
new file mode 100644
index 000000000..c2600f499
--- /dev/null
+++ b/package/mISDNuser/patches/patch-suppserv_Makefile
@@ -0,0 +1,9 @@
+ allow CC override
+--- mISDNuser-1_1_9.orig/suppserv/Makefile 2008-11-18 12:35:09.000000000 +0100
++++ mISDNuser-1_1_9/suppserv/Makefile 2011-07-11 17:12:30.613001557 +0200
+@@ -1,4 +1,4 @@
+-CC = gcc
++CC ?= gcc
+ AR = ar
+ RANLIB = ranlib
+
diff --git a/package/nand/Makefile b/package/nand/Makefile
index 07be2c23e..668cb4e5c 100644
--- a/package/nand/Makefile
+++ b/package/nand/Makefile
@@ -5,7 +5,7 @@ include ${ADK_TOPDIR}/rules.mk
PKG_NAME:= nand
PKG_VERSION:= 1.0
-PKG_RELEASE:= 3
+PKG_RELEASE:= 4
PKG_DESCR:= nand flash utility
PKG_SECTION:= sys/fs
diff --git a/package/nand/src/nand.c b/package/nand/src/nand.c
index 29b06e162..85df62677 100644
--- a/package/nand/src/nand.c
+++ b/package/nand/src/nand.c
@@ -94,7 +94,6 @@ int nand_info(const char *nand) {
int fd, ret;
mtd_info_t nandinfo;
- //struct nand_oobinfo oobinfo;
loff_t offset;
if ((fd = nand_open(nand, O_RDONLY)) < 0) {
@@ -131,17 +130,6 @@ int nand_info(const char *nand) {
}
}
}
-
- /*
- if (ioctl(fd, MEMGETOOBSEL, &oobinfo) != 0) {
- fprintf(stderr, "Unable to get NAND oobinfo\n");
- return 1;
- }
-
- if (oobinfo.useecc == MTD_NANDECC_AUTOPLACE) {
- fprintf(stdout, "NAND device/driver supports autoplacement of OOB\n");
- }
- */
return 0;
}
@@ -214,7 +202,6 @@ int nand_write(const char *img, const char *nand, int quiet) {
static bool pad = true;
static const char *standard_input = "-";
- static bool autoplace = true;
static bool markbad = true;
static int mtdoffset = 0;
int cnt = 0;
@@ -227,8 +214,6 @@ int nand_write(const char *img, const char *nand, int quiet) {
struct mtd_oob_buf oob;
loff_t offs;
int ret, readlen;
- int oobinfochanged = 0;
- struct nand_oobinfo old_oobinfo;
erase_buffer(oobbuf, sizeof(oobbuf));
@@ -255,28 +240,6 @@ int nand_write(const char *img, const char *nand, int quiet) {
exit (EXIT_FAILURE);
}
- if (autoplace) {
- /* Read the current oob info */
- if (ioctl (fd, MEMGETOOBSEL, &old_oobinfo) != 0) {
- perror ("MEMGETOOBSEL");
- close (fd);
- exit (EXIT_FAILURE);
- }
-
- // autoplace ECC ?
- /*
- if (autoplace && (old_oobinfo.useecc != MTD_NANDECC_AUTOPLACE)) {
-
- if (ioctl (fd, MEMSETOOBSEL, &autoplace_oobinfo) != 0) {
- perror ("MEMSETOOBSEL");
- close (fd);
- exit (EXIT_FAILURE);
- }
- oobinfochanged = 1;
- }
- */
- }
-
oob.length = meminfo.oobsize;
oob.ptr = oobbuf;
@@ -465,14 +428,6 @@ closeall:
close(ifd);
restoreoob:
- /*
- if (oobinfochanged == 1) {
- if (ioctl (fd, MEMSETOOBSEL, &old_oobinfo) != 0) {
- perror ("MEMSETOOBSEL");
- close (fd);
- exit (EXIT_FAILURE);
- }
- }
close(fd);
/*
diff --git a/package/newt/Makefile b/package/newt/Makefile
new file mode 100644
index 000000000..57521d1a2
--- /dev/null
+++ b/package/newt/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 $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= newt
+PKG_VERSION:= 0.52.18
+PKG_RELEASE:= 1
+PKG_HASH:= 771b0e634ede56ae6a6acd910728bb5832ac13ddb0d1d27919d2498dab70c91e
+PKG_DESCR:= windowing toolkit
+PKG_SECTION:= libs/misc
+PKG_DEPENDS:= slang libpopt
+PKG_BUILDDEP:= slang popt
+PKG_URL:= https://fedorahosted.org/newt/
+PKG_SITES:= https://fedorahosted.org/releases/n/e/$(PKG_NAME)/
+
+DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.gz
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,NEWT,newt,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+CONFIGURE_ARGS+= --without-python \
+ --without-tcl \
+ --without-gpm-support
+
+newt-install:
+ $(INSTALL_DIR) $(IDIR_NEWT)/usr/{bin,lib}
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/whiptail \
+ $(IDIR_NEWT)/usr/bin
+ $(CP) $(WRKINST)/usr/lib/libnewt.so* \
+ $(IDIR_NEWT)/usr/lib
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/oprofile/Makefile b/package/oprofile/Makefile
index e217a2606..ee6286ea1 100644
--- a/package/oprofile/Makefile
+++ b/package/oprofile/Makefile
@@ -4,9 +4,9 @@
include $(ADK_TOPDIR)/rules.mk
PKG_NAME:= oprofile
-PKG_VERSION:= 0.9.9
-PKG_RELEASE:= 4
-PKG_HASH:= 1e523400daaba7b8d0d15269e977a08b40edfea53970774b69ae130e25117597
+PKG_VERSION:= 1.0.0
+PKG_RELEASE:= 1
+PKG_HASH:= 847110b4ecdcf8c8353cd38f94c1b704aad4bfcd9453e38b88d112cfb7e3c45a
PKG_DESCR:= system-wide profiles
PKG_SECTION:= app/debug
PKG_DEPENDS:= libpopt libbfd libstdcxx
@@ -16,9 +16,6 @@ PKG_SITES:= ${MASTER_SITE_SOURCEFORGE:=oprofile/}
DISTFILES:= ${PKG_NAME}-${PKG_VERSION}.tar.gz
-PKG_ARCH_DEPENDS:= !m68k
-PKG_LIBC_DEPENDS:= uclibc glibc
-
PKG_CFLINE_OPROFILE:= select BUSYBOX_EXPR
include $(ADK_TOPDIR)/mk/package.mk
@@ -30,11 +27,20 @@ CONFIGURE_ARGS+= --with-binutils-libname=binutils \
--with-binutils=${STAGING_TARGET_DIR}/usr/lib
oprofile-install:
- $(INSTALL_DIR) $(IDIR_OPROFILE)/usr/{bin,share}
- $(INSTALL_BIN) $(WRKINST)/usr/bin/opcontrol $(IDIR_OPROFILE)/usr/bin/
- $(INSTALL_BIN) $(WRKINST)/usr/bin/ophelp $(IDIR_OPROFILE)/usr/bin/
- $(INSTALL_BIN) $(WRKINST)/usr/bin/opreport $(IDIR_OPROFILE)/usr/bin/
- $(INSTALL_BIN) $(WRKINST)/usr/bin/oprofiled $(IDIR_OPROFILE)/usr/bin/
+ $(INSTALL_DIR) $(IDIR_OPROFILE)/usr/{bin,lib/oprofile,share}
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/ocount \
+ $(WRKINST)/usr/bin/opannotate \
+ $(WRKINST)/usr/bin/oparchive \
+ $(WRKINST)/usr/bin/op-check-perfevents \
+ $(WRKINST)/usr/bin/operf \
+ $(WRKINST)/usr/bin/opgprof \
+ $(WRKINST)/usr/bin/ophelp \
+ $(WRKINST)/usr/bin/opimport \
+ $(WRKINST)/usr/bin/opjitconv \
+ $(WRKINST)/usr/bin/opreport \
+ $(IDIR_OPROFILE)/usr/bin/
${CP} ${WRKINST}/usr/share/oprofile ${IDIR_OPROFILE}/usr/share/
+ ${CP} ${WRKINST}/usr/lib/oprofile/libopagent.so* \
+ ${IDIR_OPROFILE}/usr/lib/oprofile
include ${ADK_TOPDIR}/mk/pkg-bottom.mk
diff --git a/package/oprofile/patches/patch-libop_op_cpu_type_c b/package/oprofile/patches/patch-libop_op_cpu_type_c
deleted file mode 100644
index 6064fc5e7..000000000
--- a/package/oprofile/patches/patch-libop_op_cpu_type_c
+++ /dev/null
@@ -1,42 +0,0 @@
---- oprofile-0.9.9.orig/libop/op_cpu_type.c 2013-07-29 17:55:07.000000000 +0200
-+++ oprofile-0.9.9/libop/op_cpu_type.c 2013-11-05 20:55:54.000000000 +0100
-@@ -23,9 +23,17 @@
- #include <elf.h>
- #include <link.h>
-
-+#include "config.h"
- #include "op_cpu_type.h"
- #include "op_hw_specific.h"
-
-+
-+/* A macro to be used for ppc64 architecture-specific code. The '__powerpc__' macro
-+ * is defined for both ppc64 and ppc32 architectures, so we must further qualify by
-+ * including the 'HAVE_LIBPFM' macro, since that macro will be defined only for ppc64.
-+ */
-+#define PPC64_ARCH (HAVE_LIBPFM) && ((defined(__powerpc__) || defined(__powerpc64__)))
-+
- struct cpu_descr {
- char const * pretty;
- char const * name;
-@@ -176,6 +184,7 @@ static char * _get_cpuinfo_cpu_type(char
- return _get_cpuinfo_cpu_type_line(buf, len, prefix, 1);
- }
-
-+#if PPC64_ARCH
- // The aux vector stuff below is currently only used by ppc64 arch
- static ElfW(auxv_t) * auxv_buf = NULL;
-
-@@ -313,6 +322,13 @@ static op_cpu _get_ppc64_cpu_type(void)
- return cpu_type;
- }
-
-+#else
-+static op_cpu _get_ppc64_cpu_type(void)
-+{
-+ return CPU_NO_GOOD;
-+}
-+#endif
-+
- static op_cpu _get_arm_cpu_type(void)
- {
- unsigned long cpuid, vendorid;
diff --git a/package/pam/Makefile b/package/pam/Makefile
index 061c24d03..be3543b96 100644
--- a/package/pam/Makefile
+++ b/package/pam/Makefile
@@ -15,6 +15,8 @@ PKG_SITES:= http://www.linux-pam.org/library/
PKG_OPTS:= dev
PKG_BB:= 1
+PKG_CFLINE_PAM:= depends on !ADK_TARGET_USE_STATIC_LIBS
+
DISTFILES:= Linux-PAM-$(PKG_VERSION).tar.gz
WRKDIST= ${WRKDIR}/Linux-PAM-${PKG_VERSION}
diff --git a/package/pdnsd/Makefile b/package/pdnsd/Makefile
index bd3ebebe8..e71dd4307 100644
--- a/package/pdnsd/Makefile
+++ b/package/pdnsd/Makefile
@@ -4,14 +4,14 @@
include $(ADK_TOPDIR)/rules.mk
PKG_NAME:= pdnsd
-PKG_VERSION:= 1.2.7
-PKG_RELEASE:= 3
-PKG_HASH:= 2777d7317509df7c75c90bcfd7f9ceaec9ea2db164bf00eb797fa54e0b476a00
+PKG_VERSION:= 1.2.9a
+PKG_RELEASE:= 1
+PKG_HASH:= bb5835d0caa8c4b31679d6fd6a1a090b71bdf70950db3b1d0cea9cf9cb7e2a7b
PKG_DESCR:= proxy dns server
PKG_SECTION:= net/dns
PKG_DEPENDS:= libpthread
-PKG_URL:= http://www.phys.uu.nl/~rombouts/pdnsd.html
-PKG_SITES:= http://www.phys.uu.nl/~rombouts/pdnsd/releases/
+PKG_URL:= http://members.home.nl/p.a.rombouts/pdnsd/index.html
+PKG_SITES:= http://members.home.nl/p.a.rombouts/pdnsd/releases/
PKG_FLAVOURS_PDNSD:= WITH_IPV6
PKGFD_WITH_IPV6:= enable IPv6 support
diff --git a/package/pdnsd/patches/patch-src_Makefile_in b/package/pdnsd/patches/patch-src_Makefile_in
deleted file mode 100644
index 6ab8de4e1..000000000
--- a/package/pdnsd/patches/patch-src_Makefile_in
+++ /dev/null
@@ -1,11 +0,0 @@
---- pdnsd-1.2.7.orig/src/Makefile.in 2008-09-04 18:20:37.000000000 +0200
-+++ pdnsd-1.2.7/src/Makefile.in 2010-05-29 17:45:45.937500000 +0200
-@@ -171,7 +171,7 @@ pdnsd_SOURCES = conf-parser.c conff.c co
- rr_types.h servers.h status.h thread.h cache.h hash.h pdnsd_assert.h \
- freebsd_netinet_ip_icmp.h
-
--SUBDIRS = pdnsd-ctl rc test
-+SUBDIRS = pdnsd-ctl rc
- all: all-recursive
-
- .SUFFIXES:
diff --git a/package/pdnsd/patches/patch-src_dns_query_c b/package/pdnsd/patches/patch-src_dns_query_c
deleted file mode 100644
index f16c3d497..000000000
--- a/package/pdnsd/patches/patch-src_dns_query_c
+++ /dev/null
@@ -1,12 +0,0 @@
-use the temporary port, not always the global one over and over again
---- pdnsd-1.2.7.orig/src/dns_query.c 2008-09-01 15:56:51.000000000 +0200
-+++ pdnsd-1.2.7/src/dns_query.c 2010-03-19 21:44:38.837858828 +0100
-@@ -650,7 +650,7 @@ static int bind_socket(int s)
- ELSE_IPV6 {
- memset(&sin.sin6,0,sizeof(struct sockaddr_in6));
- sin.sin6.sin6_family=AF_INET6;
-- sin.sin6.sin6_port=htons(global.port);
-+ sin.sin6.sin6_port=htons(prt);
- sin.sin6.sin6_flowinfo=IPV6_FLOWINFO;
- SET_SOCKA_LEN6(sin.sin6);
- sinl=sizeof(struct sockaddr_in6);
diff --git a/package/perf/Makefile b/package/perf/Makefile
new file mode 100644
index 000000000..75bd8efe4
--- /dev/null
+++ b/package/perf/Makefile
@@ -0,0 +1,43 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+include $(ADK_TOPDIR)/mk/kernel-ver.mk
+
+PKG_NAME:= perf
+PKG_VERSION:= $(KERNEL_VERSION)
+PKG_RELEASE:= 1
+PKG_DESCR:= userland tools for linux performance counters
+PKG_SECTION:= app/debug
+PKG_DEPENDS:= elfutils newt
+PKG_BUILDDEP:= elfutils newt
+PKG_URL:= https://perf.wiki.kernel.org/index.php/Main_Page
+
+# elfutils require argp()
+PKG_LIBC_DEPENDS:= glibc
+
+NO_DISTFILES:= 1
+
+include $(ADK_TOPDIR)/mk/package.mk
+include $(ADK_TOPDIR)/mk/kernel-vars.mk
+
+$(eval $(call PKG_template,PERF,perf,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+CONFIG_STYLE:= manual
+BUILD_STYLE:= manual
+INSTALL_STYLE:= manual
+
+do-build:
+ $(KERNEL_MAKE_ENV) GCC_HONOUR_COPTS=0 $(MAKE) \
+ $(KERNEL_MAKE_OPTS) WERROR=0 -C "$(LINUX_DIR)/tools/perf" all
+
+do-install:
+ $(KERNEL_MAKE_ENV) GCC_HONOUR_COPTS=0 $(MAKE) \
+ $(KERNEL_MAKE_OPTS) WERROR=0 -C "$(LINUX_DIR)/tools/perf" \
+ prefix="$(WRKINST)" install
+
+perf-install:
+ $(INSTALL_DIR) $(IDIR_PERF)/usr/bin
+ $(INSTALL_BIN) $(WRKINST)/bin/perf $(IDIR_PERF)/usr/bin
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/php/Makefile b/package/php/Makefile
index 81d75467b..deff3ef4d 100644
--- a/package/php/Makefile
+++ b/package/php/Makefile
@@ -4,9 +4,9 @@
include $(ADK_TOPDIR)/rules.mk
PKG_NAME:= php
-PKG_VERSION:= 5.6.3
-PKG_RELEASE:= 2
-PKG_HASH:= fad244506cc7f10fe56aba8129b3c39a4f9316d9544a4fba932c3f81fc2244b5
+PKG_VERSION:= 5.6.5
+PKG_RELEASE:= 1
+PKG_HASH:= c5ef4abaef8c1ea66dcfd5a075a2f357b666aff5c5b686fca7c78c1cfd64e996
PKG_DESCR:= php language interpreter
PKG_SECTION:= dev/lang
PKG_DEPENDS:= libpthread librt
diff --git a/package/samba/Makefile b/package/samba/Makefile
index a96cfba26..c1f575b57 100644
--- a/package/samba/Makefile
+++ b/package/samba/Makefile
@@ -4,9 +4,9 @@
include ${ADK_TOPDIR}/rules.mk
PKG_NAME:= samba
-PKG_VERSION:= 3.6.24
+PKG_VERSION:= 3.6.25
PKG_RELEASE:= 1
-PKG_HASH:= 11d0bd04b734731970259efc6692b8e749ff671a9b56d8cc5fa98c192ab234a7
+PKG_HASH:= 8f2c8a7f2bd89b0dfd228ed917815852f7c625b2bc0936304ac3ed63aaf83751
PKG_DESCR:= smb file and print server
PKG_SECTION:= net/fs
PKG_BUILDDEP:= gettext-tiny util-linux popt
diff --git a/package/slang/Makefile b/package/slang/Makefile
new file mode 100644
index 000000000..1f0e4ee4f
--- /dev/null
+++ b/package/slang/Makefile
@@ -0,0 +1,43 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= slang
+PKG_VERSION:= 2.3.0
+PKG_RELEASE:= 1
+PKG_HASH:= f95224060f45e0d8212a5039b339afa5f1a94a1bb0298e796104e5b12e926129
+PKG_DESCR:= multi-platform programmer\'s library designed to allow a developer to create robust software
+PKG_SECTION:= libs/misc
+PKG_URL:= http://www.jedsoft.org/slang/
+PKG_SITES:= http://www.jedsoft.org/releases/slang/
+PKG_NOPARALLEL:= 1
+
+DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.bz2
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,SLANG,slang,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+CONFIGURE_ARGS+= --without-pcre \
+ --without-onig \
+ --without-png \
+ --without-z
+
+slang-install:
+ $(INSTALL_DIR) $(IDIR_SLANG)/usr/{bin,lib/slang/v2/modules}
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/slsh \
+ $(IDIR_SLANG)/usr/bin
+ $(CP) $(WRKINST)/usr/lib/libslang.so* \
+ $(IDIR_SLANG)/usr/lib
+ $(INSTALL_DATA) $(WRKINST)/usr/lib/slang/v2/modules/*.so \
+ $(IDIR_SLANG)/usr/lib/slang/v2/modules
+ $(INSTALL_DIR) $(IDIR_SLANG)/usr/share/slsh/{cmaps,rline}
+ $(INSTALL_DATA) $(WRKINST)/usr/share/slsh/*.sl \
+ $(IDIR_SLANG)/usr/share/slsh
+ $(INSTALL_DATA) $(WRKINST)/usr/share/slsh/cmaps/*.map \
+ $(IDIR_SLANG)/usr/share/slsh/cmaps
+ $(INSTALL_DATA) $(WRKINST)/usr/share/slsh/rline/*.sl \
+ $(IDIR_SLANG)/usr/share/slsh/rline
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/sox/Makefile b/package/sox/Makefile
index fd2a12b69..c0c15d79d 100644
--- a/package/sox/Makefile
+++ b/package/sox/Makefile
@@ -4,9 +4,9 @@
include $(ADK_TOPDIR)/rules.mk
PKG_NAME:= sox
-PKG_VERSION:= 14.4.1
-PKG_RELEASE:= 2
-PKG_HASH:= 9a8c2c6fe51e608da346a157e111508a957af9e3ecf3de26781d36e9a67fa89b
+PKG_VERSION:= 14.4.2
+PKG_RELEASE:= 1
+PKG_HASH:= b45f598643ffbd8e363ff24d61166ccec4836fea6d3888881b8df53e3bb55f6c
PKG_DESCR:= swiss army knife of sound processing programs
PKG_SECTION:= mm/audio
PKG_BUILDDEP:= zlib ncurses
diff --git a/package/squeezelite/patches/patch-output_alsa_c b/package/squeezelite/patches/patch-output_alsa_c
new file mode 100644
index 000000000..a7d4374bf
--- /dev/null
+++ b/package/squeezelite/patches/patch-output_alsa_c
@@ -0,0 +1,11 @@
+--- squeezelite-8b8dfe6918ebe45ade5f3d9b68d453d7b8128d99.orig/output_alsa.c 2015-02-28 10:18:21.000000000 +0100
++++ squeezelite-8b8dfe6918ebe45ade5f3d9b68d453d7b8128d99/output_alsa.c 2015-02-28 10:31:59.000000000 +0100
+@@ -853,7 +853,7 @@ void output_init_alsa(log_level level, c
+ set_mixer(output.device, volume_mixer_name, volume_mixer_index ? atoi(volume_mixer_index) : 0, true, 0, 0);
+ }
+
+-#if LINUX
++#if 0
+ // RT linux - aim to avoid pagefaults by locking memory:
+ // https://rt.wiki.kernel.org/index.php/Threaded_RT-application_with_memory_locking_and_stack_handling_example
+ if (mlockall(MCL_CURRENT | MCL_FUTURE) == -1) {
diff --git a/package/squid/Makefile b/package/squid/Makefile
index 5edc3057b..9d6f70d49 100644
--- a/package/squid/Makefile
+++ b/package/squid/Makefile
@@ -4,15 +4,15 @@
include ${ADK_TOPDIR}/rules.mk
PKG_NAME:= squid
-PKG_VERSION:= 3.4.6
+PKG_VERSION:= 3.5.2
PKG_RELEASE:= 1
-PKG_HASH:= 9ef26cd638c65afa750637b3669057c052890f10c686eb0218eb0d39b4199bc0
+PKG_HASH:= 5af2e16f279466f9fb89c2fef6c09b6824a7e3e7996c9f1c2bc16e7daddd751f
PKG_DESCR:= web and cache proxy
PKG_SECTION:= net/proxy
-PKG_DEPENDS:= libopenssl libpthread libstdcxx libltdl
-PKG_BUILDDEP:= openssl libtool
+PKG_DEPENDS:= libpthread libstdcxx libltdl
+PKG_BUILDDEP:= libtool
PKG_URL:= http://www.squid-cache.org/
-PKG_SITES:= http://www.squid-cache.org/Versions/v3/3.4/
+PKG_SITES:= http://www.squid-cache.org/Versions/v3/3.5/
PKG_SUBPKGS:= SQUID SQUID_MOD_BASIC_AUTH_GETPWNAM SQUID_MOD_BASIC_AUTH_NCSA
PKG_SUBPKGS+= SQUID_MOD_BASIC_AUTH_SMB SQUID_MOD_DIGEST_AUTH_FILE
@@ -147,7 +147,6 @@ CONFIGURE_ARGS+= --datadir=/usr/share/squid \
--disable-debug-cbdata \
--enable-kill-parent-hack \
--enable-arp-acl \
- --enable-ssl \
--enable-err-languages=English \
--enable-default-err-language=English \
--enable-linux-netfilter \
@@ -159,11 +158,11 @@ CONFIGURE_ARGS+= --datadir=/usr/share/squid \
--without-libcap \
--disable-snmp \
--disable-esi \
+ --disable-ssl \
--disable-htcp \
--disable-wccp \
--disable-wccpv2 \
--enable-useragent-log \
- --with-openssl=${STAGING_TARGET_DIR}/usr \
--without-krb5-config \
--enable-negotiate-auth-helpers=no \
--enable-auth \
diff --git a/package/squid/patches/patch-acinclude_lib-checks_m4 b/package/squid/patches/patch-acinclude_lib-checks_m4
deleted file mode 100644
index b44b4eb27..000000000
--- a/package/squid/patches/patch-acinclude_lib-checks_m4
+++ /dev/null
@@ -1,72 +0,0 @@
---- squid-3.4.4.orig/acinclude/lib-checks.m4 2014-03-09 10:40:56.000000000 +0100
-+++ squid-3.4.4/acinclude/lib-checks.m4 2014-03-11 19:44:28.088928982 +0100
-@@ -95,69 +95,6 @@ AC_DEFUN([SQUID_CHECK_LIBIPHLPAPI],[
- SQUID_STATE_ROLLBACK(iphlpapi)
- ])
-
--dnl Checks whether the OpenSSL SSL_get_certificate crashes squid and if a
--dnl workaround can be used instead of using the SSL_get_certificate
--AC_DEFUN([SQUID_CHECK_OPENSSL_GETCERTIFICATE_WORKS],[
-- AH_TEMPLATE(SQUID_SSLGETCERTIFICATE_BUGGY, "Define to 1 if the SSL_get_certificate crashes squid")
-- AH_TEMPLATE(SQUID_USE_SSLGETCERTIFICATE_HACK, "Define to 1 to use squid workaround for SSL_get_certificate")
-- SQUID_STATE_SAVE(check_SSL_get_certificate)
-- LIBS="$SSLLIB $LIBS"
-- if test "x$SSLLIBDIR" != "x"; then
-- LIBS="$LIBS -Wl,-rpath -Wl,$SSLLIBDIR"
-- fi
--
-- AC_MSG_CHECKING(whether the SSL_get_certificate is buggy)
-- AC_RUN_IFELSE([
-- AC_LANG_PROGRAM(
-- [
-- #include <openssl/ssl.h>
-- #include <openssl/err.h>
-- ],
-- [
-- SSLeay_add_ssl_algorithms();
-- SSL_CTX *sslContext = SSL_CTX_new(SSLv3_method());
-- SSL *ssl = SSL_new(sslContext);
-- X509* cert = SSL_get_certificate(ssl);
-- return 0;
-- ])
-- ],
-- [
-- AC_MSG_RESULT([no])
-- ],
-- [
-- AC_DEFINE(SQUID_SSLGETCERTIFICATE_BUGGY, 1)
-- AC_MSG_RESULT([yes])
-- ],
-- [])
--
-- AC_MSG_CHECKING(whether the workaround for SSL_get_certificate works)
-- AC_RUN_IFELSE([
-- AC_LANG_PROGRAM(
-- [
-- #include <openssl/ssl.h>
-- #include <openssl/err.h>
-- ],
-- [
-- SSLeay_add_ssl_algorithms();
-- SSL_CTX *sslContext = SSL_CTX_new(SSLv3_method());
-- X509 ***pCert = (X509 ***)sslContext->cert;
-- X509 *sslCtxCert = pCert && *pCert ? **pCert : (X509 *)0x1;
-- if (sslCtxCert != NULL)
-- return 1;
-- return 0;
-- ])
-- ],
-- [
-- AC_MSG_RESULT([yes])
-- AC_DEFINE(SQUID_USE_SSLGETCERTIFICATE_HACK, 1)
-- ],
-- [
-- AC_MSG_RESULT([no])
-- ],
--[])
--
--SQUID_STATE_ROLLBACK(check_SSL_get_certificate)
--])
-
- dnl Checks whether the SSL_CTX_new and similar functions require
- dnl a const 'SSL_METHOD *' argument
diff --git a/package/squid/patches/patch-configure_ac b/package/squid/patches/patch-configure_ac
new file mode 100644
index 000000000..0aae95639
--- /dev/null
+++ b/package/squid/patches/patch-configure_ac
@@ -0,0 +1,11 @@
+--- squid-3.5.2.orig/configure.ac 2015-02-18 06:18:57.000000000 -0600
++++ squid-3.5.2/configure.ac 2015-02-20 13:01:31.755039271 -0600
+@@ -1343,7 +1343,7 @@ if test "x$with_openssl" = "xyes"; then
+ AC_DEFINE(USE_OPENSSL,1,[OpenSSL support is available])
+
+ # check for other specific broken implementations
+- SQUID_CHECK_OPENSSL_GETCERTIFICATE_WORKS
++ #SQUID_CHECK_OPENSSL_GETCERTIFICATE_WORKS
+ SQUID_CHECK_OPENSSL_CONST_SSL_METHOD
+ SQUID_CHECK_OPENSSL_TXTDB
+ SQUID_CHECK_OPENSSL_HELLO_OVERWRITE_HACK
diff --git a/package/squid/patches/patch-lib_rfcnb_rfcnb-io_c b/package/squid/patches/patch-lib_rfcnb_rfcnb-io_c
index 32faad55f..17fd993a7 100644
--- a/package/squid/patches/patch-lib_rfcnb_rfcnb-io_c
+++ b/package/squid/patches/patch-lib_rfcnb_rfcnb-io_c
@@ -1,11 +1,11 @@
---- squid-3.4.4.orig/lib/rfcnb/rfcnb-io.c 2014-03-09 10:40:56.000000000 +0100
-+++ squid-3.4.4/lib/rfcnb/rfcnb-io.c 2014-03-27 09:28:30.000000000 +0100
-@@ -30,7 +30,7 @@
- #include "rfcnb/rfcnb-util.h"
- #include "rfcnb/std-includes.h"
+--- squid-3.5.2.orig/lib/rfcnb/rfcnb-io.c 2015-02-18 06:17:02.000000000 -0600
++++ squid-3.5.2/lib/rfcnb/rfcnb-io.c 2015-02-20 00:33:21.015450265 -0600
+@@ -40,7 +40,7 @@
+ #include <string.h>
+ #endif
#include <sys/uio.h>
-#include <sys/signal.h>
+#include <signal.h>
- #if HAVE_STRING_H
- #include <string.h>
+ int RFCNB_Timeout = 0; /* Timeout in seconds ... */
+
diff --git a/package/squid/patches/patch-libltdl_aclocal_m4 b/package/squid/patches/patch-libltdl_aclocal_m4
new file mode 100644
index 000000000..45b9c7e64
--- /dev/null
+++ b/package/squid/patches/patch-libltdl_aclocal_m4
@@ -0,0 +1,14 @@
+--- squid-3.5.2.orig/libltdl/aclocal.m4 2015-02-18 06:17:49.000000000 -0600
++++ squid-3.5.2/libltdl/aclocal.m4 2015-02-23 15:31:16.264583929 -0600
+@@ -486,9 +486,9 @@ _AM_IF_OPTION([no-define],,
+ # Some tools Automake needs.
+ AC_REQUIRE([AM_SANITY_CHECK])dnl
+ AC_REQUIRE([AC_ARG_PROGRAM])dnl
+-AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
++AM_MISSING_PROG([ACLOCAL], [aclocal])
+ AM_MISSING_PROG([AUTOCONF], [autoconf])
+-AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
++AM_MISSING_PROG([AUTOMAKE], [automake])
+ AM_MISSING_PROG([AUTOHEADER], [autoheader])
+ AM_MISSING_PROG([MAKEINFO], [makeinfo])
+ AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
diff --git a/package/squid/patches/patch-src_Makefile_am b/package/squid/patches/patch-src_Makefile_am
index 9aec4eca3..049ff3a1d 100644
--- a/package/squid/patches/patch-src_Makefile_am
+++ b/package/squid/patches/patch-src_Makefile_am
@@ -1,11 +1,11 @@
---- squid-3.4.4.orig/src/Makefile.am 2014-03-09 10:40:56.000000000 +0100
-+++ squid-3.4.4/src/Makefile.am 2014-03-12 09:46:23.001434141 +0100
-@@ -981,7 +981,7 @@ cache_cf.o: cf_parser.cci
+--- squid-3.5.2.orig/src/Makefile.am 2015-02-18 06:17:02.000000000 -0600
++++ squid-3.5.2/src/Makefile.am 2015-02-23 15:32:32.084583233 -0600
+@@ -970,7 +970,7 @@ cache_cf.o: cf_parser.cci
# cf_gen builds the configuration files.
cf_gen$(EXEEXT): $(cf_gen_SOURCES) $(cf_gen_DEPENDENCIES) cf_gen_defines.cci
-- $(HOSTCXX) -o $@ $(srcdir)/cf_gen.cc -I$(srcdir) -I$(top_builddir)/include/ -I$(top_builddir)/src
-+ $(CXX_FOR_BUILD) -o $@ $(srcdir)/cf_gen.cc -I$(srcdir) -I$(top_builddir)/include/ -I$(top_builddir)/src
+- $(BUILDCXX) $(BUILDCXXFLAGS) -o $@ $(srcdir)/cf_gen.cc -I$(srcdir) -I$(top_builddir)/include/ -I$(top_builddir)/src
++ $(CXX_FOR_BUILD) $(CXXFLAGS_FOR_BUILD) -o $@ $(srcdir)/cf_gen.cc -I$(srcdir) -I$(top_builddir)/include/ -I$(top_builddir)/src
# squid.conf.default is built by cf_gen when making cf_parser.cci
squid.conf.default squid.conf.documented: cf_parser.cci
diff --git a/package/stats/Makefile b/package/stats/Makefile
new file mode 100644
index 000000000..7d52788e6
--- /dev/null
+++ b/package/stats/Makefile
@@ -0,0 +1,23 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= stats
+PKG_VERSION:= 82bd4977b607b8714f361467e37a9d801ff911b6
+PKG_RELEASE:= 1
+PKG_DESCR:= stats utility
+PKG_SECTION:= sys/utils
+PKG_URL:= https://github.com/rustyrussell/stats
+PKG_SITES:= git://github.com/rustyrussell/stats.git
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,STATS,$(PKG_NAME),$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+stats-install:
+ $(INSTALL_DIR) $(IDIR_STATS)/usr/bin
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/stats \
+ $(IDIR_STATS)/usr/bin
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/stats/patches/patch-Makefile b/package/stats/patches/patch-Makefile
new file mode 100644
index 000000000..0650a3adf
--- /dev/null
+++ b/package/stats/patches/patch-Makefile
@@ -0,0 +1,35 @@
+ - allow for passing custom compiler FLAGS
+ - use host CC and CFLAGS for tools/configurator build
+--- stats-82bd4977b607b8714f361467e37a9d801ff911b6.orig/Makefile 2015-02-27 18:30:06.000000000 +0100
++++ stats-82bd4977b607b8714f361467e37a9d801ff911b6/Makefile 2015-02-27 18:37:14.000000000 +0100
+@@ -1,14 +1,15 @@
+ # Destination directory for installation (intended for packagers)
+ DESTDIR =
+-PREFIX = /usr/local
++PREFIX = /usr
+
++CC ?=
+ OPTFLAGS=-O3 -flto
+ #OPTFLAGS=-g
+ WARNFLAGS=-Wall -Wstrict-prototypes -Wundef
+-CPPFLAGS=-I.
+-CFLAGS=$(OPTFLAGS) $(WARNFLAGS)
+-LDFLAGS=$(OPTFLAGS)
+-LDLIBS=-lm
++CPPFLAGS+=-I.
++CFLAGS+=$(WARNFLAGS)
++LDFLAGS+=
++LDLIBS+=-lm
+
+ # Comment this out (or use "VALGRIND=" on cmdline) if you don't have valgrind.
+ VALGRIND=valgrind --quiet --leak-check=full --error-exitcode=5
+@@ -41,6 +42,9 @@ $(OFILES): config.h
+ config.h: tools/configurator
+ if $< > $@.tmp; then mv $@.tmp $@; else rm -f $@.tmp; fi
+
++tools/configurator: CC=${CC_FOR_BUILD}
++tools/configurator: CFLAGS=${CFLAGS_FOR_BUILD}
++tools/configurator: LDFLAGS=${LDFLAGS_FOR_BUILD}
+ stats: $(OFILES)
+
+ distclean: clean
diff --git a/package/supl/Makefile b/package/supl/Makefile
new file mode 100644
index 000000000..13e58560f
--- /dev/null
+++ b/package/supl/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 $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= supl
+PKG_VERSION:= 1.0.6
+PKG_RELEASE:= 1
+PKG_HASH:= 068dc47ce818ce5634f09a88159df85a6ce3456e2467b11b8c5f8543a99bb347
+PKG_DESCR:= tools for accessing sup/rrlp server
+PKG_SECTION:= net/misc
+PKG_BUILDDEP:= openssl
+PKG_DEPENDS:= libopenssl
+PKG_URL:= http://www.tajuma.com/supl/
+PKG_SITES:= $(MASTER_SITE_SOURCEFORGE:=supl/)
+
+DISTFILES:= $(PKG_NAME)_$(PKG_VERSION).tar.gz
+WRKDIST= $(WRKDIR)/trunk
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,SUPL,supl,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+CONFIG_STYLE:= minimal
+CONFIGURE_ARGS+= --precompiled-asn1=yes --prefix="$(WRKINST)/usr"
+
+supl-install:
+ $(INSTALL_DIR) $(IDIR_SUPL)/usr/{bin,lib}
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/supl-{cert,client,proxy} \
+ $(IDIR_SUPL)/usr/bin
+ $(CP) $(WRKINST)/usr/lib/lib{asnrrlp,asnsupl,supl}.so* \
+ $(IDIR_SUPL)/usr/lib
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/supl/patches/patch-configure b/package/supl/patches/patch-configure
new file mode 100644
index 000000000..1c8f24d49
--- /dev/null
+++ b/package/supl/patches/patch-configure
@@ -0,0 +1,11 @@
+--- trunk.orig/configure 2011-10-25 21:41:03.000000000 +0200
++++ trunk/configure 2015-02-27 19:33:11.000000000 +0100
+@@ -91,7 +91,7 @@ cat <<EOF > config.mk
+ # Modifications to this file are lost if ./configure is ran again.
+
+ CONF_VERSION = 1.0.5
+-CONF_CFLAGS = -Wall -O2 $var_debug
++CONF_CFLAGS = -Wall $var_debug
+ CONF_ASN_CFLAGS = $var_asn1_debug
+ CONF_PREFIX = $var_prefix
+ CONF_PRECOMPILED_ASN = $var_precompiled_asn
diff --git a/package/supl/patches/patch-src_Makefile b/package/supl/patches/patch-src_Makefile
new file mode 100644
index 000000000..cec5a4771
--- /dev/null
+++ b/package/supl/patches/patch-src_Makefile
@@ -0,0 +1,16 @@
+ - use pkg-config everywhere, otherwise libs are not found
+--- trunk.orig/src/Makefile 2011-10-17 20:09:22.000000000 +0200
++++ trunk/src/Makefile 2015-02-09 16:48:37.244935714 +0100
+@@ -21,10 +21,10 @@ DIST = Makefile $(PROGRAM_SOURCE) $(SUPL
+ all: supl-client supl-proxy supl-cert
+
+ supl-client: libsupl.so supl-client.o
+- $(CC) -o $@ supl-client.o -L. -lsupl -lssl -lm
++ $(CC) -o $@ supl-client.o -L. -lsupl $(shell pkg-config --libs openssl) -lm
+
+ supl-proxy: libsupl.so supl-proxy.o
+- $(CC) -o $@ supl-proxy.o -L. -lsupl -lssl -lm
++ $(CC) -o $@ supl-proxy.o -L. -lsupl $(shell pkg-config --libs openssl) -lm
+
+ supl-cert: supl-cert.o
+ $(CC) -o $@ supl-cert.o $(shell pkg-config --libs openssl) -lm
diff --git a/package/supl/patches/patch-src_supl-client_c b/package/supl/patches/patch-src_supl-client_c
new file mode 100644
index 000000000..15e2fa727
--- /dev/null
+++ b/package/supl/patches/patch-src_supl-client_c
@@ -0,0 +1,40 @@
+ - implement bind to device functionality
+--- trunk.orig/src/supl-client.c 2011-10-21 20:51:38.000000000 +0200
++++ trunk/src/supl-client.c 2013-04-24 18:55:01.937252375 +0200
+@@ -252,6 +252,7 @@ static char *usage_str =
+ " --cell gsm:mcc,mns:lac,ci|wcdma:mcc,msn,uc set current gsm/wcdma cell id\n"
+ " --cell gsm:mcc,mns:lac,ci:lat,lon,uncert set known gsm cell id with position\n"
+ " --format|-f human machine parseable output\n"
++" --interface|-i iface bind to this interface\n"
+ " --debug|-d <n> 1 == RRLP, 2 == SUPL, 4 == DEBUG\n"
+ " --debug-file file write debug to file\n"
+ " --help|-h show this help\n"
+@@ -267,6 +268,7 @@ static struct option long_opts[] = {
+ { "cell", 1, 0, 0 },
+ { "debug", 1, 0, 'd' },
+ { "format", 1, 0, 'f' },
++ { "interface", 1, 0, 0},
+ { "test", 1, 0, 't' },
+ { "set-pos", 1, 0, 0 },
+ { "pos-helper", 1, 0, 0 },
+@@ -310,7 +312,7 @@ int main(int argc, char *argv[]) {
+ int opt_index;
+ int c;
+
+- c = getopt_long(argc, argv, "ad:f:t:", long_opts, &opt_index);
++ c = getopt_long(argc, argv, "ad:f:i:t:", long_opts, &opt_index);
+ if (c == -1) break;
+ switch (c) {
+ case 0:
+@@ -374,6 +376,11 @@ int main(int argc, char *argv[]) {
+ }
+ break;
+
++ case 'i':
++ strncpy(ctx.iface, optarg, IFNAMSIZ);
++ ctx.iface[IFNAMSIZ] = 0;
++ break;
++
+ case 'd':
+ {
+ int debug = atoi(optarg);
diff --git a/package/supl/patches/patch-src_supl_c b/package/supl/patches/patch-src_supl_c
new file mode 100644
index 000000000..26ab45b18
--- /dev/null
+++ b/package/supl/patches/patch-src_supl_c
@@ -0,0 +1,46 @@
+ - implement bind to device functionality
+--- trunk.orig/src/supl.c 2011-10-27 20:41:19.000000000 +0200
++++ trunk/src/supl.c 2013-04-24 18:56:17.742529773 +0200
+@@ -41,7 +41,7 @@ static struct supl_debug_s {
+ } debug;
+ #endif
+
+-static int server_connect(char *server);
++static int server_connect(char *server, char *iface);
+ static int pdu_make_ulp_start(supl_ctx_t *ctx, supl_ulp_t *pdu);
+ static int pdu_make_ulp_pos_init(supl_ctx_t *ctx, supl_ulp_t *pdu);
+ static int pdu_make_ulp_rrlp_ack(supl_ctx_t *ctx, supl_ulp_t *pdu, PDU_t *rrlp);
+@@ -236,7 +236,7 @@ int EXPORT supl_server_connect(supl_ctx_
+ if (!ctx->ssl) return E_SUPL_CONNECT;
+
+ if (server) {
+- ctx->fd = server_connect(server);
++ ctx->fd = server_connect(server, ctx->iface);
+ if (ctx->fd == -1) return E_SUPL_CONNECT;
+ }
+
+@@ -266,7 +266,7 @@ void EXPORT supl_close(supl_ctx_t *ctx)
+ }
+
+
+-static int server_connect(char *server) {
++static int server_connect(char *server, char *iface) {
+ int fd = -1;
+ struct addrinfo *ailist, *aip;
+ struct addrinfo hint;
+@@ -283,6 +283,15 @@ static int server_connect(char *server)
+ if ((fd = socket(aip->ai_family, SOCK_STREAM, 0)) < 0) {
+ err = errno;
+ }
++
++ if (strlen(iface)) {
++ struct ifreq ifr;
++ strncpy(ifr.ifr_name, iface, IFNAMSIZ);
++ ifr.ifr_name[IFNAMSIZ - 1] = 0;
++ if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, &ifr, sizeof(ifr)))
++ fprintf(stderr, "Error: binding to device %s failed\n", iface);
++ }
++
+ if (connect(fd, aip->ai_addr, aip->ai_addrlen) != 0) {
+ return -1;
+ }
diff --git a/package/supl/patches/patch-src_supl_h b/package/supl/patches/patch-src_supl_h
new file mode 100644
index 000000000..c2e9e8da4
--- /dev/null
+++ b/package/supl/patches/patch-src_supl_h
@@ -0,0 +1,19 @@
+ - implement bind to device functionality
+--- trunk.orig/src/supl.h 2011-10-21 20:08:29.000000000 +0200
++++ trunk/src/supl.h 2013-04-24 18:52:14.916232733 +0200
+@@ -19,6 +19,7 @@
+ #include <openssl/ssl.h>
+ #include <PDU.h>
+ #include <ULP-PDU.h>
++#include <net/if.h>
+
+ #define SUPL_PORT "7275"
+
+@@ -204,6 +205,7 @@ typedef struct supl_ctx_s {
+ size_t size;
+ } slp_session_id;
+
++ char iface[IFNAMSIZ + 1];
+ } supl_ctx_t;
+
+ int supl_ctx_new(supl_ctx_t *ctx);
diff --git a/package/tcpdump/Makefile b/package/tcpdump/Makefile
index 83909d6eb..4ee28cf8d 100644
--- a/package/tcpdump/Makefile
+++ b/package/tcpdump/Makefile
@@ -4,9 +4,9 @@
include ${ADK_TOPDIR}/rules.mk
PKG_NAME:= tcpdump
-PKG_VERSION:= 4.6.1
-PKG_RELEASE:= 2
-PKG_HASH:= 4c88c2a9aeb4047074f344fc9b2b6577b219972d359e192f6d12ccf983a13fd7
+PKG_VERSION:= 4.6.2
+PKG_RELEASE:= 1
+PKG_HASH:= 524ee4d8e83a6c663f6879004216a9a5bcb1c68b11920d653eb87b79d008e0b8
PKG_DESCR:= tool for network monitoring and data acquisition
PKG_SECTION:= net/debug
PKG_DEPENDS:= libpcap
diff --git a/package/tcptrace/Makefile b/package/tcptrace/Makefile
new file mode 100644
index 000000000..b780a8f84
--- /dev/null
+++ b/package/tcptrace/Makefile
@@ -0,0 +1,31 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= tcptrace
+PKG_VERSION:= 6.6.7
+PKG_RELEASE:= 1
+PKG_HASH:= 63380a4051933ca08979476a9dfc6f959308bc9f60d45255202e388eb56910bd
+PKG_DESCR:= tool for analyzing network packet dumps
+PKG_SECTION:= net/debug
+PKG_DEPENDS:= libpcap
+PKG_BUILDDEP:= libpcap
+PKG_URL:= http://www.tcptrace.org
+PKG_SITES:= http://www.tcptrace.org/download/
+
+DISTFILES:= $(PKG_NAME)-$(PKG_VERSION).tar.gz
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,TCPTRACE,tcptrace,$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+FAKE_FLAGS:= BINDIR="$(WRKINST)/usr/bin" MANDIR="$(WRKINST)/usr/man" INSTALL="install -D"
+TARGET_CPPFLAGS+= -D_BSD_SOURCE
+
+tcptrace-install:
+ $(INSTALL_DIR) $(IDIR_TCPTRACE)/usr/bin
+ $(INSTALL_BIN) $(WRKINST)/usr/bin/tcptrace \
+ $(IDIR_TCPTRACE)/usr/bin
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/tcptrace/patches/patch-Makefile_in b/package/tcptrace/patches/patch-Makefile_in
new file mode 100644
index 000000000..abd55f44d
--- /dev/null
+++ b/package/tcptrace/patches/patch-Makefile_in
@@ -0,0 +1,13 @@
+--- tcptrace-6.6.7.orig/Makefile.in 2004-03-04 21:33:56.000000000 +0100
++++ tcptrace-6.6.7/Makefile.in 2015-02-27 19:17:39.000000000 +0100
+@@ -34,8 +34,8 @@ DEFINES += -DBUNZIP2="\"bunzip2\""
+ #
+ ##################################################################
+ PCAP_LDLIBS = @V_PCAP_LDLIBS@
+-PCAP_INCS = -I/usr/local/include -I. -I../pcap -I/usr/include/pcap
+-PCAP_LDFLAGS = -L/usr/local/lib -Llib -Lpcap -L../pcap -L./cygwin-libs
++PCAP_INCS = -I. -I../pcap
++PCAP_LDFLAGS = -Llib -Lpcap -L../pcap -L./cygwin-libs
+
+
+
diff --git a/package/tcptrace/patches/patch-configure b/package/tcptrace/patches/patch-configure
new file mode 100644
index 000000000..53ee6ce74
--- /dev/null
+++ b/package/tcptrace/patches/patch-configure
@@ -0,0 +1,18 @@
+ do not bail on cross-compiling, simply assume useful values instead
+--- tcptrace-6.6.7.orig/configure 2002-06-21 11:56:26.000000000 +0200
++++ tcptrace-6.6.7/configure 2012-10-18 18:52:35.154444758 +0200
+@@ -5086,9 +5086,11 @@ echo "$as_me:5085: checking how to print
+ echo $ECHO_N "checking how to print unsigned long long... $ECHO_C" >&6
+
+ if test "$cross_compiling" = yes; then
+- { { echo "$as_me:5089: error: can not run test program while cross compiling" >&5
+-echo "$as_me: error: can not run test program while cross compiling" >&2;}
+- { (exit 1); exit 1; }; }
++ { echo "$as_me: cross_compiling, simply assuming '%llu'"
++ cat >>confdefs.h <<\EOF
++#define USE_LLU 1
++EOF
++}
+ else
+ cat >conftest.$ac_ext <<_ACEOF
+ #line 5094 "configure"
diff --git a/package/wget/Makefile b/package/wget/Makefile
index e6ebb6ccb..ad2ab61c1 100644
--- a/package/wget/Makefile
+++ b/package/wget/Makefile
@@ -32,7 +32,9 @@ ifeq (${ADK_PACKAGE_WGET_WITHOUT_SSL},y)
CONFIGURE_ARGS+= --with-ssl=no
endif
ifeq (${ADK_PACKAGE_WGET_WITH_OPENSSL},y)
-CONFIGURE_ARGS+= --with-ssl=openssl
+CONFIGURE_ARGS+= --with-ssl=openssl \
+ --with-openssl=yes \
+ --with-libssl-prefix=${STAGING_TARGET_DIR}
endif
ifeq (${ADK_PACKAGE_WGET_WITH_GNUTLS},y)
CONFIGURE_ARGS+= --with-ssl=gnutls \
diff --git a/package/wireless-regdb/Makefile b/package/wireless-regdb/Makefile
new file mode 100644
index 000000000..4bded919f
--- /dev/null
+++ b/package/wireless-regdb/Makefile
@@ -0,0 +1,28 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+include $(ADK_TOPDIR)/rules.mk
+
+PKG_NAME:= wireless-regdb
+PKG_VERSION:= 2015.01.30
+PKG_RELEASE:= 1
+PKG_HASH:= 438d7f3d62686bc997098d17fe1aff95c6f6ec061aaab90ab7c2c17e8451ce85
+PKG_DESCR:= binary regulatory database for crda
+PKG_SECTION:= libs/net
+PKG_URL:= http://wireless.kernel.org/en/developers/Regulatory
+PKG_SITES:= https://www.kernel.org/pub/software/network/wireless-regdb/
+
+include $(ADK_TOPDIR)/mk/package.mk
+
+$(eval $(call PKG_template,WIRELESS_REGDB,$(PKG_NAME),$(PKG_VERSION)-$(PKG_RELEASE),$(PKG_DEPENDS),$(PKG_DESCR),$(PKG_SECTION)))
+
+CONFIG_STYLE:= manual
+BUILD_STYLE:= manual
+INSTALL_STYLE:= manual
+
+do-install:
+ $(INSTALL_DIR) $(IDIR_WIRELESS_REGDB)/usr/lib/crda
+ $(INSTALL_DATA) $(WRKDIST)/regulatory.bin \
+ $(IDIR_WIRELESS_REGDB)/usr/lib/crda
+
+include $(ADK_TOPDIR)/mk/pkg-bottom.mk
diff --git a/package/xterm/Makefile b/package/xterm/Makefile
index 37043fc3e..db4e53003 100644
--- a/package/xterm/Makefile
+++ b/package/xterm/Makefile
@@ -4,9 +4,9 @@
include $(ADK_TOPDIR)/rules.mk
PKG_NAME:= xterm
-PKG_VERSION:= 306
+PKG_VERSION:= 314
PKG_RELEASE:= 1
-PKG_HASH:= 6a09f60d126603604d0c801e3f5000e4af87b309e8e1d3c0735be50b6d13bdaa
+PKG_HASH:= 1dbf1e93796c1b71b22b84e82eb58bcf20a14a7f365158819f3b4dbb29fe93f0
PKG_DESCR:= terminal emulator
PKG_SECTION:= x11/apps
PKG_DEPENDS:= libxaw libxt libncurses libxft fontconfig
diff --git a/package/xterm/patches/patch-xterm_h b/package/xterm/patches/patch-xterm_h
deleted file mode 100644
index 7a3418a11..000000000
--- a/package/xterm/patches/patch-xterm_h
+++ /dev/null
@@ -1,11 +0,0 @@
---- xterm-297.orig/xterm.h 2013-09-10 12:55:04.000000000 +0200
-+++ xterm-297/xterm.h 2013-10-30 17:19:53.000000000 +0100
-@@ -99,7 +99,7 @@
- #define HAVE_PUTENV 1
- #endif
-
--#if defined(CSRG_BASED) || defined(__GNU__)
-+#if defined(CSRG_BASED) || defined(__linux__)
- #define USE_POSIX_TERMIOS 1
- #endif
-
diff --git a/rules.mk b/rules.mk
index 14935b928..e3f9dd251 100644
--- a/rules.mk
+++ b/rules.mk
@@ -25,6 +25,7 @@ SET_DASHX:= :
endif
# Strip off the annoying quoting
+ADK_APPLIANCE_VERSION:= $(strip $(subst ",, $(ADK_APPLIANCE_VERSION)))
ADK_TARGET_ARCH:= $(strip $(subst ",, $(ADK_TARGET_ARCH)))
ADK_TARGET_SYSTEM:= $(strip $(subst ",, $(ADK_TARGET_SYSTEM)))
ADK_TARGET_BOARD:= $(strip $(subst ",, $(ADK_TARGET_BOARD)))
@@ -39,6 +40,7 @@ ADK_TARGET_FLOAT:= $(strip $(subst ",, $(ADK_TARGET_FLOAT)))
ADK_TARGET_FPU:= $(strip $(subst ",, $(ADK_TARGET_FPU)))
ADK_TARGET_ARM_MODE:= $(strip $(subst ",, $(ADK_TARGET_ARM_MODE)))
ADK_TARGET_CFLAGS:= $(strip $(subst ",, $(ADK_TARGET_CFLAGS)))
+ADK_TARGET_CPU_FLAGS:= $(strip $(subst ",, $(ADK_TARGET_CPU_FLAGS)))
ADK_TARGET_CFLAGS_OPT:= $(strip $(subst ",, $(ADK_TARGET_CFLAGS_OPT)))
ADK_TARGET_ABI_CFLAGS:= $(strip $(subst ",, $(ADK_TARGET_ABI_CFLAGS)))
ADK_TARGET_ABI:= $(strip $(subst ",, $(ADK_TARGET_ABI)))
diff --git a/scripts/install b/scripts/install
index 0fe925d0f..174d27d5a 100755
--- a/scripts/install
+++ b/scripts/install
@@ -2,9 +2,26 @@
# This file is part of the OpenADK project. OpenADK is copyrighted
# material, please see the LICENCE file in the top-level directory.
+# eliminate unwanted install flags:
+# -o and -g require root as caller which we don't want
+# -s is unwanted as we strip ourselfs if debugging is turned off
+declare -a opts
+while [[ "$1" ]]; do
+ case "$1" in
+ -o|--owner) shift ;;
+ -g|--group) shift ;;
+ -s|--strip) ;;
+ *) opts+=("$1") ;;
+ esac
+ shift
+done
+
+# prefer ginstall if available
if [ -z "$(which ginstall 2>/dev/null)" ];then
- /usr/bin/install "$@"
+ install=/usr/bin/install
else
- ginstall "$@"
+ install=ginstall
fi
+# do the actual call
+exec $install "${opts[@]}"
diff --git a/target/Makefile b/target/Makefile
index 3291862ba..ddb395b55 100644
--- a/target/Makefile
+++ b/target/Makefile
@@ -106,6 +106,8 @@ config-prepare: $(ADK_TOPDIR)/.config
echo "no miniconfig found for target system"; \
exit 1; \
fi
+ @cd $(BUILD_DIR) && cmp -s .kernelconfig.board .kernelconfig || \
+ cp .kernelconfig.board .kernelconfig
endif
prepare: $(ADK_TARGET_ARCH)-prepare
diff --git a/target/appliances/default.options b/target/appliances/default.options
new file mode 100644
index 000000000..bf6ca0e25
--- /dev/null
+++ b/target/appliances/default.options
@@ -0,0 +1,5 @@
+config ADK_APPLIANCE_VERSION
+ prompt "version string"
+ string
+ help
+ Configure version for appliance
diff --git a/target/appliances/mpd.options b/target/appliances/mpd.options
new file mode 100644
index 000000000..dac0ba37c
--- /dev/null
+++ b/target/appliances/mpd.options
@@ -0,0 +1,16 @@
+choice
+prompt "Choose a GUI"
+depends on ADK_APPLIANCE_MPD
+
+config ADK_APPLIANCE_MPD_MPDBOX
+ bool "use mpdbox html/javascript frontend"
+ select ADK_PACKAGE_MPDBOX
+
+config ADK_APPLIANCE_MPD_YMPD
+ bool "use ympd frontend"
+ select ADK_PACKAGE_YMPD
+
+config ADK_APPLIANCE_MPD_NOGUI
+ bool "use no gui frontend"
+
+endchoice
diff --git a/target/arm/Makefile b/target/arm/Makefile
index 9efddfac9..634bee924 100644
--- a/target/arm/Makefile
+++ b/target/arm/Makefile
@@ -108,11 +108,10 @@ kernel-install: kernel-strip
dtb-install:
ifeq ($(ADK_TARGET_SYSTEM_RASPBERRY_PI),y)
- env $(KERNEL_MAKE_ENV) $(MAKE) -C $(LINUX_DIR) $(KERNEL_MAKE_OPTS) \
- dtbs $(MAKE_TRACE)
+ env $(KERNEL_MAKE_ENV) $(MAKE) $(KERNEL_MAKE_OPTS) dtbs $(MAKE_TRACE)
endif
ifeq ($(ADK_TARGET_SYSTEM_SOLIDRUN_IMX6),y)
- env $(KERNEL_MAKE_ENV) $(MAKE) -C $(LINUX_DIR) $(KERNEL_MAKE_OPTS) \
+ env $(KERNEL_MAKE_ENV) $(MAKE) $(KERNEL_MAKE_OPTS) \
imx6q-cubox-i.dtb imx6dl-cubox-i.dtb imx6dl-hummingboard.dtb imx6q-hummingboard.dtb $(MAKE_TRACE)
endif
for x in $(LINUX_DIR)/arch/arm/boot/dts/*.dtb; do \
diff --git a/target/arm/bcm28xx/patches/3.18.6/0000-raspberry-pi.patch b/target/arm/bcm28xx/patches/3.18.8/0000-raspberry-pi.patch
index b66bb6533..b66bb6533 100644
--- a/target/arm/bcm28xx/patches/3.18.6/0000-raspberry-pi.patch
+++ b/target/arm/bcm28xx/patches/3.18.8/0000-raspberry-pi.patch
diff --git a/target/arm/bcm28xx/patches/3.18.6/0001-add-support-for-rpi-proto-hardware.patch b/target/arm/bcm28xx/patches/3.18.8/0001-add-support-for-rpi-proto-hardware.patch
index d2c72cdd5..d2c72cdd5 100644
--- a/target/arm/bcm28xx/patches/3.18.6/0001-add-support-for-rpi-proto-hardware.patch
+++ b/target/arm/bcm28xx/patches/3.18.8/0001-add-support-for-rpi-proto-hardware.patch
diff --git a/target/arm/bcm28xx/patches/3.18.6/0002-allow-to-control-volume-for-each-channel.patch b/target/arm/bcm28xx/patches/3.18.8/0002-allow-to-control-volume-for-each-channel.patch
index 76634e2e8..76634e2e8 100644
--- a/target/arm/bcm28xx/patches/3.18.6/0002-allow-to-control-volume-for-each-channel.patch
+++ b/target/arm/bcm28xx/patches/3.18.8/0002-allow-to-control-volume-for-each-channel.patch
diff --git a/target/arm/solidrun-imx6/patches/3.18.8/solidrun-imx6-wlan.patch b/target/arm/solidrun-imx6/patches/3.18.8/solidrun-imx6-wlan.patch
new file mode 100644
index 000000000..3ab3081db
--- /dev/null
+++ b/target/arm/solidrun-imx6/patches/3.18.8/solidrun-imx6-wlan.patch
@@ -0,0 +1,3252 @@
+diff -Nur linux-3.18.8.orig/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi linux-3.18.8/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi
+--- linux-3.18.8.orig/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi 2015-02-27 02:49:36.000000000 +0100
++++ linux-3.18.8/arch/arm/boot/dts/imx6qdl-cubox-i.dtsi 2015-03-02 03:23:14.000000000 +0100
+@@ -170,6 +170,28 @@
+ MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x13059
+ >;
+ };
++
++ pinctrl_cubox_i_usdhc2_100mhz: cubox-i-usdhc2-100mhz {
++ fsl,pins = <
++ MX6QDL_PAD_SD2_CMD__SD2_CMD 0x170b9
++ MX6QDL_PAD_SD2_CLK__SD2_CLK 0x100b9
++ MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x170b9
++ MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x170b9
++ MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x170b9
++ MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x130b9
++ >;
++ };
++
++ pinctrl_cubox_i_usdhc2_200mhz: cubox-i-usdhc2-200mhz {
++ fsl,pins = <
++ MX6QDL_PAD_SD2_CMD__SD2_CMD 0x170f9
++ MX6QDL_PAD_SD2_CLK__SD2_CLK 0x100f9
++ MX6QDL_PAD_SD2_DAT0__SD2_DATA0 0x170f9
++ MX6QDL_PAD_SD2_DAT1__SD2_DATA1 0x170f9
++ MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x170f9
++ MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x130f9
++ >;
++ };
+ };
+ };
+
+@@ -194,8 +216,10 @@
+ };
+
+ &usdhc2 {
+- pinctrl-names = "default";
++ pinctrl-names = "default", "state_100mhz", "state_200mhz";
+ pinctrl-0 = <&pinctrl_cubox_i_usdhc2_aux &pinctrl_cubox_i_usdhc2>;
++ pinctrl-1 = <&pinctrl_cubox_i_usdhc2_aux &pinctrl_cubox_i_usdhc2_100mhz>;
++ pinctrl-2 = <&pinctrl_cubox_i_usdhc2_aux &pinctrl_cubox_i_usdhc2_200mhz>;
+ vmmc-supply = <&reg_3p3v>;
+ cd-gpios = <&gpio1 4 0>;
+ status = "okay";
+diff -Nur linux-3.18.8.orig/arch/arm/boot/dts/imx6qdl-microsom.dtsi linux-3.18.8/arch/arm/boot/dts/imx6qdl-microsom.dtsi
+--- linux-3.18.8.orig/arch/arm/boot/dts/imx6qdl-microsom.dtsi 2015-02-27 02:49:36.000000000 +0100
++++ linux-3.18.8/arch/arm/boot/dts/imx6qdl-microsom.dtsi 2015-03-02 02:58:12.000000000 +0100
+@@ -1,15 +1,95 @@
+ /*
+ * Copyright (C) 2013,2014 Russell King
+ */
++#include <dt-bindings/gpio/gpio.h>
++/ {
++ regulators {
++ compatible = "simple-bus";
++
++ reg_brcm_osc: brcm-osc-reg {
++ compatible = "regulator-fixed";
++ enable-active-high;
++ gpio = <&gpio5 5 0>;
++ pinctrl-names = "default";
++ pinctrl-0 = <&pinctrl_microsom_brcm_osc_reg>;
++ regulator-name = "brcm_osc_reg";
++ regulator-min-microvolt = <3300000>;
++ regulator-max-microvolt = <3300000>;
++ regulator-always-on;
++ regulator-boot-on;
++ };
++
++ reg_brcm: brcm-reg {
++ compatible = "regulator-fixed";
++ enable-active-high;
++ gpio = <&gpio3 19 0>;
++ pinctrl-names = "default";
++ pinctrl-0 = <&pinctrl_microsom_brcm_reg>;
++ regulator-name = "brcm_reg";
++ regulator-min-microvolt = <3300000>;
++ regulator-max-microvolt = <3300000>;
++ startup-delay-us = <200000>;
++ };
++ };
++};
+
+ &iomuxc {
+ microsom {
++ pinctrl_microsom_brcm_bt: microsom-brcm-bt {
++ fsl,pins = <
++ MX6QDL_PAD_CSI0_DAT14__GPIO6_IO00 0x40013070
++ MX6QDL_PAD_CSI0_DAT15__GPIO6_IO01 0x40013070
++ MX6QDL_PAD_CSI0_DAT18__GPIO6_IO04 0x40013070
++ >;
++ };
++
++ pinctrl_microsom_brcm_osc_reg: microsom-brcm-osc-reg {
++ fsl,pins = <
++ MX6QDL_PAD_DISP0_DAT11__GPIO5_IO05 0x40013070
++ >;
++ };
++
++ pinctrl_microsom_brcm_reg: microsom-brcm-reg {
++ fsl,pins = <
++ MX6QDL_PAD_EIM_D19__GPIO3_IO19 0x40013070
++ >;
++ };
++
++ pinctrl_microsom_brcm_wifi: microsom-brcm-wifi {
++ fsl,pins = <
++ MX6QDL_PAD_GPIO_8__XTALOSC_REF_CLK_32K 0x1b0b0
++ MX6QDL_PAD_CSI0_DATA_EN__GPIO5_IO20 0x40013070
++ MX6QDL_PAD_CSI0_DAT8__GPIO5_IO26 0x40013070
++ MX6QDL_PAD_CSI0_DAT9__GPIO5_IO27 0x40013070
++ >;
++ };
++
+ pinctrl_microsom_uart1: microsom-uart1 {
+ fsl,pins = <
+ MX6QDL_PAD_CSI0_DAT10__UART1_TX_DATA 0x1b0b1
+ MX6QDL_PAD_CSI0_DAT11__UART1_RX_DATA 0x1b0b1
+ >;
+ };
++
++ pinctrl_microsom_uart4_1: microsom-uart4 {
++ fsl,pins = <
++ MX6QDL_PAD_CSI0_DAT12__UART4_TX_DATA 0x1b0b1
++ MX6QDL_PAD_CSI0_DAT13__UART4_RX_DATA 0x1b0b1
++ MX6QDL_PAD_CSI0_DAT16__UART4_RTS_B 0x1b0b1
++ MX6QDL_PAD_CSI0_DAT17__UART4_CTS_B 0x1b0b1
++ >;
++ };
++
++ pinctrl_microsom_usdhc1: microsom-usdhc1 {
++ fsl,pins = <
++ MX6QDL_PAD_SD1_CMD__SD1_CMD 0x17059
++ MX6QDL_PAD_SD1_CLK__SD1_CLK 0x10059
++ MX6QDL_PAD_SD1_DAT0__SD1_DATA0 0x17059
++ MX6QDL_PAD_SD1_DAT1__SD1_DATA1 0x17059
++ MX6QDL_PAD_SD1_DAT2__SD1_DATA2 0x17059
++ MX6QDL_PAD_SD1_DAT3__SD1_DATA3 0x17059
++ >;
++ };
+ };
+ };
+
+@@ -18,3 +98,23 @@
+ pinctrl-0 = <&pinctrl_microsom_uart1>;
+ status = "okay";
+ };
++
++/* UART4 - Connected to optional BRCM Wifi/BT/FM */
++&uart4 {
++ pinctrl-names = "default";
++ pinctrl-0 = <&pinctrl_microsom_brcm_bt &pinctrl_microsom_uart4_1>;
++ fsl,uart-has-rtscts;
++ status = "okay";
++};
++
++/* USDHC1 - Connected to optional BRCM Wifi/BT/FM */
++&usdhc1 {
++ card-external-vcc-supply = <&reg_brcm>;
++ card-reset-gpios = <&gpio5 26 GPIO_ACTIVE_LOW>, <&gpio6 0 GPIO_ACTIVE_LOW>;
++ keep-power-in-suspend;
++ non-removable;
++ pinctrl-names = "default";
++ pinctrl-0 = <&pinctrl_microsom_brcm_wifi &pinctrl_microsom_usdhc1>;
++ vmmc-supply = <&reg_brcm>;
++ status = "okay";
++};
+diff -Nur linux-3.18.8.orig/Documentation/devicetree/bindings/mmc/mmc.txt linux-3.18.8/Documentation/devicetree/bindings/mmc/mmc.txt
+--- linux-3.18.8.orig/Documentation/devicetree/bindings/mmc/mmc.txt 2015-02-27 02:49:36.000000000 +0100
++++ linux-3.18.8/Documentation/devicetree/bindings/mmc/mmc.txt 2015-03-02 03:25:33.000000000 +0100
+@@ -5,6 +5,8 @@
+ Interpreted by the OF core:
+ - reg: Registers location and length.
+ - interrupts: Interrupts used by the MMC controller.
++- clocks: Clocks needed for the host controller, if any.
++- clock-names: Goes with clocks above.
+
+ Card detection:
+ If no property below is supplied, host native card detect is used.
+@@ -43,6 +45,15 @@
+ - dsr: Value the card's (optional) Driver Stage Register (DSR) should be
+ programmed with. Valid range: [0 .. 0xffff].
+
++Card power and reset control:
++The following properties can be specified for cases where the MMC
++peripheral needs additional reset, regulator and clock lines. It is for
++example common for WiFi/BT adapters to have these separate from the main
++MMC bus:
++ - card-reset-gpios: Specify GPIOs for card reset (reset active low)
++ - card-external-vcc-supply: Regulator to drive (independent) card VCC
++ - clock with name "card_ext_clock": External clock provided to the card
++
+ *NOTE* on CD and WP polarity. To use common for all SD/MMC host controllers line
+ polarity properties, we have to fix the meaning of the "normal" and "inverted"
+ line levels. We choose to follow the SDHCI standard, which specifies both those
+diff -Nur linux-3.18.8.orig/drivers/mmc/core/core.c linux-3.18.8/drivers/mmc/core/core.c
+--- linux-3.18.8.orig/drivers/mmc/core/core.c 2015-02-27 02:49:36.000000000 +0100
++++ linux-3.18.8/drivers/mmc/core/core.c 2015-03-02 03:25:33.000000000 +0100
+@@ -13,11 +13,13 @@
+ #include <linux/module.h>
+ #include <linux/init.h>
+ #include <linux/interrupt.h>
++#include <linux/clk.h>
+ #include <linux/completion.h>
+ #include <linux/device.h>
+ #include <linux/delay.h>
+ #include <linux/pagemap.h>
+ #include <linux/err.h>
++#include <linux/gpio/consumer.h>
+ #include <linux/leds.h>
+ #include <linux/scatterlist.h>
+ #include <linux/log2.h>
+@@ -1507,6 +1509,43 @@
+ mmc_host_clk_release(host);
+ }
+
++static void mmc_card_power_up(struct mmc_host *host)
++{
++ int i;
++ struct gpio_desc **gds = host->card_reset_gpios;
++
++ for (i = 0; i < ARRAY_SIZE(host->card_reset_gpios); i++) {
++ if (gds[i]) {
++ dev_dbg(host->parent, "Asserting reset line %d", i);
++ gpiod_set_value(gds[i], 1);
++ }
++ }
++
++ if (host->card_regulator) {
++ dev_dbg(host->parent, "Enabling external regulator");
++ if (regulator_enable(host->card_regulator))
++ dev_err(host->parent, "Failed to enable external regulator");
++ }
++
++ if (host->card_clk) {
++ dev_dbg(host->parent, "Enabling external clock");
++ clk_prepare_enable(host->card_clk);
++ }
++
++ /* 2ms delay to let clocks and power settle */
++ mmc_delay(20);
++
++ for (i = 0; i < ARRAY_SIZE(host->card_reset_gpios); i++) {
++ if (gds[i]) {
++ dev_dbg(host->parent, "Deasserting reset line %d", i);
++ gpiod_set_value(gds[i], 0);
++ }
++ }
++
++ /* 2ms delay to after reset release */
++ mmc_delay(20);
++}
++
+ /*
+ * Apply power to the MMC stack. This is a two-stage process.
+ * First, we enable power to the card without the clock running.
+@@ -1523,6 +1562,9 @@
+ if (host->ios.power_mode == MMC_POWER_ON)
+ return;
+
++ /* Power up the card/module first, if needed */
++ mmc_card_power_up(host);
++
+ mmc_host_clk_hold(host);
+
+ host->ios.vdd = fls(ocr) - 1;
+diff -Nur linux-3.18.8.orig/drivers/mmc/core/host.c linux-3.18.8/drivers/mmc/core/host.c
+--- linux-3.18.8.orig/drivers/mmc/core/host.c 2015-02-27 02:49:36.000000000 +0100
++++ linux-3.18.8/drivers/mmc/core/host.c 2015-03-02 03:26:23.000000000 +0100
+@@ -12,14 +12,18 @@
+ * MMC host class device management
+ */
+
++#include <linux/kernel.h>
++#include <linux/clk.h>
+ #include <linux/device.h>
+ #include <linux/err.h>
++#include <linux/gpio/consumer.h>
+ #include <linux/idr.h>
+ #include <linux/of.h>
+ #include <linux/of_gpio.h>
+ #include <linux/pagemap.h>
+ #include <linux/export.h>
+ #include <linux/leds.h>
++#include <linux/regulator/consumer.h>
+ #include <linux/slab.h>
+ #include <linux/suspend.h>
+
+@@ -466,6 +470,66 @@
+
+ EXPORT_SYMBOL(mmc_of_parse);
+
++static int mmc_of_parse_child(struct mmc_host *host)
++{
++ struct device_node *np;
++ struct clk *clk;
++ int i;
++
++ if (!host->parent || !host->parent->of_node)
++ return 0;
++
++ np = host->parent->of_node;
++
++ host->card_regulator = regulator_get(host->parent, "card-external-vcc");
++ if (IS_ERR(host->card_regulator)) {
++ if (PTR_ERR(host->card_regulator) == -EPROBE_DEFER)
++ return PTR_ERR(host->card_regulator);
++ host->card_regulator = NULL;
++ }
++
++ /* Parse card power/reset/clock control */
++ if (of_find_property(np, "card-reset-gpios", NULL)) {
++ struct gpio_desc *gpd;
++ int level = 0;
++
++ /*
++ * If the regulator is enabled, then we can hold the
++ * card in reset with an active high resets. Otherwise,
++ * hold the resets low.
++ */
++ if (host->card_regulator && regulator_is_enabled(host->card_regulator))
++ level = 1;
++
++ for (i = 0; i < ARRAY_SIZE(host->card_reset_gpios); i++) {
++ gpd = devm_gpiod_get_index(host->parent, "card-reset", i);
++ if (IS_ERR(gpd)) {
++ if (PTR_ERR(gpd) == -EPROBE_DEFER)
++ return PTR_ERR(gpd);
++ break;
++ }
++ gpiod_direction_output(gpd, gpiod_is_active_low(gpd) | level);
++ host->card_reset_gpios[i] = gpd;
++ }
++
++ gpd = devm_gpiod_get_index(host->parent, "card-reset", ARRAY_SIZE(host->card_reset_gpios));
++ if (!IS_ERR(gpd)) {
++ dev_warn(host->parent, "More reset gpios than we can handle");
++ gpiod_put(gpd);
++ }
++ }
++
++ clk = of_clk_get_by_name(np, "card_ext_clock");
++ if (IS_ERR(clk)) {
++ if (PTR_ERR(clk) == -EPROBE_DEFER)
++ return PTR_ERR(clk);
++ clk = NULL;
++ }
++ host->card_clk = clk;
++
++ return 0;
++}
++
+ /**
+ * mmc_alloc_host - initialise the per-host structure.
+ * @extra: sizeof private data structure
+@@ -545,6 +609,10 @@
+ {
+ int err;
+
++ err = mmc_of_parse_child(host);
++ if (err)
++ return err;
++
+ WARN_ON((host->caps & MMC_CAP_SDIO_IRQ) &&
+ !host->ops->enable_sdio_irq);
+
+diff -Nur linux-3.18.8.orig/drivers/mmc/host/dw_mmc.c linux-3.18.8/drivers/mmc/host/dw_mmc.c
+--- linux-3.18.8.orig/drivers/mmc/host/dw_mmc.c 2015-02-27 02:49:36.000000000 +0100
++++ linux-3.18.8/drivers/mmc/host/dw_mmc.c 2015-03-02 03:25:56.000000000 +0100
+@@ -2211,6 +2211,8 @@
+ if (!mmc)
+ return -ENOMEM;
+
++ mmc_of_parse(mmc);
++
+ slot = mmc_priv(mmc);
+ slot->id = id;
+ slot->mmc = mmc;
+diff -Nur linux-3.18.8.orig/drivers/mmc/host/dw_mmc.c.orig linux-3.18.8/drivers/mmc/host/dw_mmc.c.orig
+--- linux-3.18.8.orig/drivers/mmc/host/dw_mmc.c.orig 1970-01-01 01:00:00.000000000 +0100
++++ linux-3.18.8/drivers/mmc/host/dw_mmc.c.orig 2015-02-27 02:49:36.000000000 +0100
+@@ -0,0 +1,2855 @@
++/*
++ * Synopsys DesignWare Multimedia Card Interface driver
++ * (Based on NXP driver for lpc 31xx)
++ *
++ * Copyright (C) 2009 NXP Semiconductors
++ * Copyright (C) 2009, 2010 Imagination Technologies Ltd.
++ *
++ * 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 <linux/blkdev.h>
++#include <linux/clk.h>
++#include <linux/debugfs.h>
++#include <linux/device.h>
++#include <linux/dma-mapping.h>
++#include <linux/err.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/ioport.h>
++#include <linux/module.h>
++#include <linux/platform_device.h>
++#include <linux/seq_file.h>
++#include <linux/slab.h>
++#include <linux/stat.h>
++#include <linux/delay.h>
++#include <linux/irq.h>
++#include <linux/mmc/host.h>
++#include <linux/mmc/mmc.h>
++#include <linux/mmc/sd.h>
++#include <linux/mmc/sdio.h>
++#include <linux/mmc/dw_mmc.h>
++#include <linux/bitops.h>
++#include <linux/regulator/consumer.h>
++#include <linux/workqueue.h>
++#include <linux/of.h>
++#include <linux/of_gpio.h>
++#include <linux/mmc/slot-gpio.h>
++
++#include "dw_mmc.h"
++
++/* Common flag combinations */
++#define DW_MCI_DATA_ERROR_FLAGS (SDMMC_INT_DRTO | SDMMC_INT_DCRC | \
++ SDMMC_INT_HTO | SDMMC_INT_SBE | \
++ SDMMC_INT_EBE)
++#define DW_MCI_CMD_ERROR_FLAGS (SDMMC_INT_RTO | SDMMC_INT_RCRC | \
++ SDMMC_INT_RESP_ERR)
++#define DW_MCI_ERROR_FLAGS (DW_MCI_DATA_ERROR_FLAGS | \
++ DW_MCI_CMD_ERROR_FLAGS | SDMMC_INT_HLE)
++#define DW_MCI_SEND_STATUS 1
++#define DW_MCI_RECV_STATUS 2
++#define DW_MCI_DMA_THRESHOLD 16
++
++#define DW_MCI_FREQ_MAX 200000000 /* unit: HZ */
++#define DW_MCI_FREQ_MIN 400000 /* unit: HZ */
++
++#ifdef CONFIG_MMC_DW_IDMAC
++#define IDMAC_INT_CLR (SDMMC_IDMAC_INT_AI | SDMMC_IDMAC_INT_NI | \
++ SDMMC_IDMAC_INT_CES | SDMMC_IDMAC_INT_DU | \
++ SDMMC_IDMAC_INT_FBE | SDMMC_IDMAC_INT_RI | \
++ SDMMC_IDMAC_INT_TI)
++
++struct idmac_desc {
++ u32 des0; /* Control Descriptor */
++#define IDMAC_DES0_DIC BIT(1)
++#define IDMAC_DES0_LD BIT(2)
++#define IDMAC_DES0_FD BIT(3)
++#define IDMAC_DES0_CH BIT(4)
++#define IDMAC_DES0_ER BIT(5)
++#define IDMAC_DES0_CES BIT(30)
++#define IDMAC_DES0_OWN BIT(31)
++
++ u32 des1; /* Buffer sizes */
++#define IDMAC_SET_BUFFER1_SIZE(d, s) \
++ ((d)->des1 = ((d)->des1 & 0x03ffe000) | ((s) & 0x1fff))
++
++ u32 des2; /* buffer 1 physical address */
++
++ u32 des3; /* buffer 2 physical address */
++};
++#endif /* CONFIG_MMC_DW_IDMAC */
++
++static bool dw_mci_reset(struct dw_mci *host);
++
++#if defined(CONFIG_DEBUG_FS)
++static int dw_mci_req_show(struct seq_file *s, void *v)
++{
++ struct dw_mci_slot *slot = s->private;
++ struct mmc_request *mrq;
++ struct mmc_command *cmd;
++ struct mmc_command *stop;
++ struct mmc_data *data;
++
++ /* Make sure we get a consistent snapshot */
++ spin_lock_bh(&slot->host->lock);
++ mrq = slot->mrq;
++
++ if (mrq) {
++ cmd = mrq->cmd;
++ data = mrq->data;
++ stop = mrq->stop;
++
++ if (cmd)
++ seq_printf(s,
++ "CMD%u(0x%x) flg %x rsp %x %x %x %x err %d\n",
++ cmd->opcode, cmd->arg, cmd->flags,
++ cmd->resp[0], cmd->resp[1], cmd->resp[2],
++ cmd->resp[2], cmd->error);
++ if (data)
++ seq_printf(s, "DATA %u / %u * %u flg %x err %d\n",
++ data->bytes_xfered, data->blocks,
++ data->blksz, data->flags, data->error);
++ if (stop)
++ seq_printf(s,
++ "CMD%u(0x%x) flg %x rsp %x %x %x %x err %d\n",
++ stop->opcode, stop->arg, stop->flags,
++ stop->resp[0], stop->resp[1], stop->resp[2],
++ stop->resp[2], stop->error);
++ }
++
++ spin_unlock_bh(&slot->host->lock);
++
++ return 0;
++}
++
++static int dw_mci_req_open(struct inode *inode, struct file *file)
++{
++ return single_open(file, dw_mci_req_show, inode->i_private);
++}
++
++static const struct file_operations dw_mci_req_fops = {
++ .owner = THIS_MODULE,
++ .open = dw_mci_req_open,
++ .read = seq_read,
++ .llseek = seq_lseek,
++ .release = single_release,
++};
++
++static int dw_mci_regs_show(struct seq_file *s, void *v)
++{
++ seq_printf(s, "STATUS:\t0x%08x\n", SDMMC_STATUS);
++ seq_printf(s, "RINTSTS:\t0x%08x\n", SDMMC_RINTSTS);
++ seq_printf(s, "CMD:\t0x%08x\n", SDMMC_CMD);
++ seq_printf(s, "CTRL:\t0x%08x\n", SDMMC_CTRL);
++ seq_printf(s, "INTMASK:\t0x%08x\n", SDMMC_INTMASK);
++ seq_printf(s, "CLKENA:\t0x%08x\n", SDMMC_CLKENA);
++
++ return 0;
++}
++
++static int dw_mci_regs_open(struct inode *inode, struct file *file)
++{
++ return single_open(file, dw_mci_regs_show, inode->i_private);
++}
++
++static const struct file_operations dw_mci_regs_fops = {
++ .owner = THIS_MODULE,
++ .open = dw_mci_regs_open,
++ .read = seq_read,
++ .llseek = seq_lseek,
++ .release = single_release,
++};
++
++static void dw_mci_init_debugfs(struct dw_mci_slot *slot)
++{
++ struct mmc_host *mmc = slot->mmc;
++ struct dw_mci *host = slot->host;
++ struct dentry *root;
++ struct dentry *node;
++
++ root = mmc->debugfs_root;
++ if (!root)
++ return;
++
++ node = debugfs_create_file("regs", S_IRUSR, root, host,
++ &dw_mci_regs_fops);
++ if (!node)
++ goto err;
++
++ node = debugfs_create_file("req", S_IRUSR, root, slot,
++ &dw_mci_req_fops);
++ if (!node)
++ goto err;
++
++ node = debugfs_create_u32("state", S_IRUSR, root, (u32 *)&host->state);
++ if (!node)
++ goto err;
++
++ node = debugfs_create_x32("pending_events", S_IRUSR, root,
++ (u32 *)&host->pending_events);
++ if (!node)
++ goto err;
++
++ node = debugfs_create_x32("completed_events", S_IRUSR, root,
++ (u32 *)&host->completed_events);
++ if (!node)
++ goto err;
++
++ return;
++
++err:
++ dev_err(&mmc->class_dev, "failed to initialize debugfs for slot\n");
++}
++#endif /* defined(CONFIG_DEBUG_FS) */
++
++static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg);
++
++static u32 dw_mci_prepare_command(struct mmc_host *mmc, struct mmc_command *cmd)
++{
++ struct mmc_data *data;
++ struct dw_mci_slot *slot = mmc_priv(mmc);
++ struct dw_mci *host = slot->host;
++ const struct dw_mci_drv_data *drv_data = slot->host->drv_data;
++ u32 cmdr;
++ cmd->error = -EINPROGRESS;
++
++ cmdr = cmd->opcode;
++
++ if (cmd->opcode == MMC_STOP_TRANSMISSION ||
++ cmd->opcode == MMC_GO_IDLE_STATE ||
++ cmd->opcode == MMC_GO_INACTIVE_STATE ||
++ (cmd->opcode == SD_IO_RW_DIRECT &&
++ ((cmd->arg >> 9) & 0x1FFFF) == SDIO_CCCR_ABORT))
++ cmdr |= SDMMC_CMD_STOP;
++ else if (cmd->opcode != MMC_SEND_STATUS && cmd->data)
++ cmdr |= SDMMC_CMD_PRV_DAT_WAIT;
++
++ if (cmd->opcode == SD_SWITCH_VOLTAGE) {
++ u32 clk_en_a;
++
++ /* Special bit makes CMD11 not die */
++ cmdr |= SDMMC_CMD_VOLT_SWITCH;
++
++ /* Change state to continue to handle CMD11 weirdness */
++ WARN_ON(slot->host->state != STATE_SENDING_CMD);
++ slot->host->state = STATE_SENDING_CMD11;
++
++ /*
++ * We need to disable low power mode (automatic clock stop)
++ * while doing voltage switch so we don't confuse the card,
++ * since stopping the clock is a specific part of the UHS
++ * voltage change dance.
++ *
++ * Note that low power mode (SDMMC_CLKEN_LOW_PWR) will be
++ * unconditionally turned back on in dw_mci_setup_bus() if it's
++ * ever called with a non-zero clock. That shouldn't happen
++ * until the voltage change is all done.
++ */
++ clk_en_a = mci_readl(host, CLKENA);
++ clk_en_a &= ~(SDMMC_CLKEN_LOW_PWR << slot->id);
++ mci_writel(host, CLKENA, clk_en_a);
++ mci_send_cmd(slot, SDMMC_CMD_UPD_CLK |
++ SDMMC_CMD_PRV_DAT_WAIT, 0);
++ }
++
++ if (cmd->flags & MMC_RSP_PRESENT) {
++ /* We expect a response, so set this bit */
++ cmdr |= SDMMC_CMD_RESP_EXP;
++ if (cmd->flags & MMC_RSP_136)
++ cmdr |= SDMMC_CMD_RESP_LONG;
++ }
++
++ if (cmd->flags & MMC_RSP_CRC)
++ cmdr |= SDMMC_CMD_RESP_CRC;
++
++ data = cmd->data;
++ if (data) {
++ cmdr |= SDMMC_CMD_DAT_EXP;
++ if (data->flags & MMC_DATA_STREAM)
++ cmdr |= SDMMC_CMD_STRM_MODE;
++ if (data->flags & MMC_DATA_WRITE)
++ cmdr |= SDMMC_CMD_DAT_WR;
++ }
++
++ if (drv_data && drv_data->prepare_command)
++ drv_data->prepare_command(slot->host, &cmdr);
++
++ return cmdr;
++}
++
++static u32 dw_mci_prep_stop_abort(struct dw_mci *host, struct mmc_command *cmd)
++{
++ struct mmc_command *stop;
++ u32 cmdr;
++
++ if (!cmd->data)
++ return 0;
++
++ stop = &host->stop_abort;
++ cmdr = cmd->opcode;
++ memset(stop, 0, sizeof(struct mmc_command));
++
++ if (cmdr == MMC_READ_SINGLE_BLOCK ||
++ cmdr == MMC_READ_MULTIPLE_BLOCK ||
++ cmdr == MMC_WRITE_BLOCK ||
++ cmdr == MMC_WRITE_MULTIPLE_BLOCK) {
++ stop->opcode = MMC_STOP_TRANSMISSION;
++ stop->arg = 0;
++ stop->flags = MMC_RSP_R1B | MMC_CMD_AC;
++ } else if (cmdr == SD_IO_RW_EXTENDED) {
++ stop->opcode = SD_IO_RW_DIRECT;
++ stop->arg |= (1 << 31) | (0 << 28) | (SDIO_CCCR_ABORT << 9) |
++ ((cmd->arg >> 28) & 0x7);
++ stop->flags = MMC_RSP_SPI_R5 | MMC_RSP_R5 | MMC_CMD_AC;
++ } else {
++ return 0;
++ }
++
++ cmdr = stop->opcode | SDMMC_CMD_STOP |
++ SDMMC_CMD_RESP_CRC | SDMMC_CMD_RESP_EXP;
++
++ return cmdr;
++}
++
++static void dw_mci_start_command(struct dw_mci *host,
++ struct mmc_command *cmd, u32 cmd_flags)
++{
++ host->cmd = cmd;
++ dev_vdbg(host->dev,
++ "start command: ARGR=0x%08x CMDR=0x%08x\n",
++ cmd->arg, cmd_flags);
++
++ mci_writel(host, CMDARG, cmd->arg);
++ wmb();
++
++ mci_writel(host, CMD, cmd_flags | SDMMC_CMD_START);
++}
++
++static inline void send_stop_abort(struct dw_mci *host, struct mmc_data *data)
++{
++ struct mmc_command *stop = data->stop ? data->stop : &host->stop_abort;
++ dw_mci_start_command(host, stop, host->stop_cmdr);
++}
++
++/* DMA interface functions */
++static void dw_mci_stop_dma(struct dw_mci *host)
++{
++ if (host->using_dma) {
++ host->dma_ops->stop(host);
++ host->dma_ops->cleanup(host);
++ }
++
++ /* Data transfer was stopped by the interrupt handler */
++ set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
++}
++
++static int dw_mci_get_dma_dir(struct mmc_data *data)
++{
++ if (data->flags & MMC_DATA_WRITE)
++ return DMA_TO_DEVICE;
++ else
++ return DMA_FROM_DEVICE;
++}
++
++#ifdef CONFIG_MMC_DW_IDMAC
++static void dw_mci_dma_cleanup(struct dw_mci *host)
++{
++ struct mmc_data *data = host->data;
++
++ if (data)
++ if (!data->host_cookie)
++ dma_unmap_sg(host->dev,
++ data->sg,
++ data->sg_len,
++ dw_mci_get_dma_dir(data));
++}
++
++static void dw_mci_idmac_reset(struct dw_mci *host)
++{
++ u32 bmod = mci_readl(host, BMOD);
++ /* Software reset of DMA */
++ bmod |= SDMMC_IDMAC_SWRESET;
++ mci_writel(host, BMOD, bmod);
++}
++
++static void dw_mci_idmac_stop_dma(struct dw_mci *host)
++{
++ u32 temp;
++
++ /* Disable and reset the IDMAC interface */
++ temp = mci_readl(host, CTRL);
++ temp &= ~SDMMC_CTRL_USE_IDMAC;
++ temp |= SDMMC_CTRL_DMA_RESET;
++ mci_writel(host, CTRL, temp);
++
++ /* Stop the IDMAC running */
++ temp = mci_readl(host, BMOD);
++ temp &= ~(SDMMC_IDMAC_ENABLE | SDMMC_IDMAC_FB);
++ temp |= SDMMC_IDMAC_SWRESET;
++ mci_writel(host, BMOD, temp);
++}
++
++static void dw_mci_idmac_complete_dma(struct dw_mci *host)
++{
++ struct mmc_data *data = host->data;
++
++ dev_vdbg(host->dev, "DMA complete\n");
++
++ host->dma_ops->cleanup(host);
++
++ /*
++ * If the card was removed, data will be NULL. No point in trying to
++ * send the stop command or waiting for NBUSY in this case.
++ */
++ if (data) {
++ set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
++ tasklet_schedule(&host->tasklet);
++ }
++}
++
++static void dw_mci_translate_sglist(struct dw_mci *host, struct mmc_data *data,
++ unsigned int sg_len)
++{
++ int i;
++ struct idmac_desc *desc = host->sg_cpu;
++
++ for (i = 0; i < sg_len; i++, desc++) {
++ unsigned int length = sg_dma_len(&data->sg[i]);
++ u32 mem_addr = sg_dma_address(&data->sg[i]);
++
++ /* Set the OWN bit and disable interrupts for this descriptor */
++ desc->des0 = IDMAC_DES0_OWN | IDMAC_DES0_DIC | IDMAC_DES0_CH;
++
++ /* Buffer length */
++ IDMAC_SET_BUFFER1_SIZE(desc, length);
++
++ /* Physical address to DMA to/from */
++ desc->des2 = mem_addr;
++ }
++
++ /* Set first descriptor */
++ desc = host->sg_cpu;
++ desc->des0 |= IDMAC_DES0_FD;
++
++ /* Set last descriptor */
++ desc = host->sg_cpu + (i - 1) * sizeof(struct idmac_desc);
++ desc->des0 &= ~(IDMAC_DES0_CH | IDMAC_DES0_DIC);
++ desc->des0 |= IDMAC_DES0_LD;
++
++ wmb();
++}
++
++static void dw_mci_idmac_start_dma(struct dw_mci *host, unsigned int sg_len)
++{
++ u32 temp;
++
++ dw_mci_translate_sglist(host, host->data, sg_len);
++
++ /* Select IDMAC interface */
++ temp = mci_readl(host, CTRL);
++ temp |= SDMMC_CTRL_USE_IDMAC;
++ mci_writel(host, CTRL, temp);
++
++ wmb();
++
++ /* Enable the IDMAC */
++ temp = mci_readl(host, BMOD);
++ temp |= SDMMC_IDMAC_ENABLE | SDMMC_IDMAC_FB;
++ mci_writel(host, BMOD, temp);
++
++ /* Start it running */
++ mci_writel(host, PLDMND, 1);
++}
++
++static int dw_mci_idmac_init(struct dw_mci *host)
++{
++ struct idmac_desc *p;
++ int i;
++
++ /* Number of descriptors in the ring buffer */
++ host->ring_size = PAGE_SIZE / sizeof(struct idmac_desc);
++
++ /* Forward link the descriptor list */
++ for (i = 0, p = host->sg_cpu; i < host->ring_size - 1; i++, p++)
++ p->des3 = host->sg_dma + (sizeof(struct idmac_desc) * (i + 1));
++
++ /* Set the last descriptor as the end-of-ring descriptor */
++ p->des3 = host->sg_dma;
++ p->des0 = IDMAC_DES0_ER;
++
++ dw_mci_idmac_reset(host);
++
++ /* Mask out interrupts - get Tx & Rx complete only */
++ mci_writel(host, IDSTS, IDMAC_INT_CLR);
++ mci_writel(host, IDINTEN, SDMMC_IDMAC_INT_NI | SDMMC_IDMAC_INT_RI |
++ SDMMC_IDMAC_INT_TI);
++
++ /* Set the descriptor base address */
++ mci_writel(host, DBADDR, host->sg_dma);
++ return 0;
++}
++
++static const struct dw_mci_dma_ops dw_mci_idmac_ops = {
++ .init = dw_mci_idmac_init,
++ .start = dw_mci_idmac_start_dma,
++ .stop = dw_mci_idmac_stop_dma,
++ .complete = dw_mci_idmac_complete_dma,
++ .cleanup = dw_mci_dma_cleanup,
++};
++#endif /* CONFIG_MMC_DW_IDMAC */
++
++static int dw_mci_pre_dma_transfer(struct dw_mci *host,
++ struct mmc_data *data,
++ bool next)
++{
++ struct scatterlist *sg;
++ unsigned int i, sg_len;
++
++ if (!next && data->host_cookie)
++ return data->host_cookie;
++
++ /*
++ * We don't do DMA on "complex" transfers, i.e. with
++ * non-word-aligned buffers or lengths. Also, we don't bother
++ * with all the DMA setup overhead for short transfers.
++ */
++ if (data->blocks * data->blksz < DW_MCI_DMA_THRESHOLD)
++ return -EINVAL;
++
++ if (data->blksz & 3)
++ return -EINVAL;
++
++ for_each_sg(data->sg, sg, data->sg_len, i) {
++ if (sg->offset & 3 || sg->length & 3)
++ return -EINVAL;
++ }
++
++ sg_len = dma_map_sg(host->dev,
++ data->sg,
++ data->sg_len,
++ dw_mci_get_dma_dir(data));
++ if (sg_len == 0)
++ return -EINVAL;
++
++ if (next)
++ data->host_cookie = sg_len;
++
++ return sg_len;
++}
++
++static void dw_mci_pre_req(struct mmc_host *mmc,
++ struct mmc_request *mrq,
++ bool is_first_req)
++{
++ struct dw_mci_slot *slot = mmc_priv(mmc);
++ struct mmc_data *data = mrq->data;
++
++ if (!slot->host->use_dma || !data)
++ return;
++
++ if (data->host_cookie) {
++ data->host_cookie = 0;
++ return;
++ }
++
++ if (dw_mci_pre_dma_transfer(slot->host, mrq->data, 1) < 0)
++ data->host_cookie = 0;
++}
++
++static void dw_mci_post_req(struct mmc_host *mmc,
++ struct mmc_request *mrq,
++ int err)
++{
++ struct dw_mci_slot *slot = mmc_priv(mmc);
++ struct mmc_data *data = mrq->data;
++
++ if (!slot->host->use_dma || !data)
++ return;
++
++ if (data->host_cookie)
++ dma_unmap_sg(slot->host->dev,
++ data->sg,
++ data->sg_len,
++ dw_mci_get_dma_dir(data));
++ data->host_cookie = 0;
++}
++
++static void dw_mci_adjust_fifoth(struct dw_mci *host, struct mmc_data *data)
++{
++#ifdef CONFIG_MMC_DW_IDMAC
++ unsigned int blksz = data->blksz;
++ const u32 mszs[] = {1, 4, 8, 16, 32, 64, 128, 256};
++ u32 fifo_width = 1 << host->data_shift;
++ u32 blksz_depth = blksz / fifo_width, fifoth_val;
++ u32 msize = 0, rx_wmark = 1, tx_wmark, tx_wmark_invers;
++ int idx = (sizeof(mszs) / sizeof(mszs[0])) - 1;
++
++ tx_wmark = (host->fifo_depth) / 2;
++ tx_wmark_invers = host->fifo_depth - tx_wmark;
++
++ /*
++ * MSIZE is '1',
++ * if blksz is not a multiple of the FIFO width
++ */
++ if (blksz % fifo_width) {
++ msize = 0;
++ rx_wmark = 1;
++ goto done;
++ }
++
++ do {
++ if (!((blksz_depth % mszs[idx]) ||
++ (tx_wmark_invers % mszs[idx]))) {
++ msize = idx;
++ rx_wmark = mszs[idx] - 1;
++ break;
++ }
++ } while (--idx > 0);
++ /*
++ * If idx is '0', it won't be tried
++ * Thus, initial values are uesed
++ */
++done:
++ fifoth_val = SDMMC_SET_FIFOTH(msize, rx_wmark, tx_wmark);
++ mci_writel(host, FIFOTH, fifoth_val);
++#endif
++}
++
++static void dw_mci_ctrl_rd_thld(struct dw_mci *host, struct mmc_data *data)
++{
++ unsigned int blksz = data->blksz;
++ u32 blksz_depth, fifo_depth;
++ u16 thld_size;
++
++ WARN_ON(!(data->flags & MMC_DATA_READ));
++
++ /*
++ * CDTHRCTL doesn't exist prior to 240A (in fact that register offset is
++ * in the FIFO region, so we really shouldn't access it).
++ */
++ if (host->verid < DW_MMC_240A)
++ return;
++
++ if (host->timing != MMC_TIMING_MMC_HS200 &&
++ host->timing != MMC_TIMING_UHS_SDR104)
++ goto disable;
++
++ blksz_depth = blksz / (1 << host->data_shift);
++ fifo_depth = host->fifo_depth;
++
++ if (blksz_depth > fifo_depth)
++ goto disable;
++
++ /*
++ * If (blksz_depth) >= (fifo_depth >> 1), should be 'thld_size <= blksz'
++ * If (blksz_depth) < (fifo_depth >> 1), should be thld_size = blksz
++ * Currently just choose blksz.
++ */
++ thld_size = blksz;
++ mci_writel(host, CDTHRCTL, SDMMC_SET_RD_THLD(thld_size, 1));
++ return;
++
++disable:
++ mci_writel(host, CDTHRCTL, SDMMC_SET_RD_THLD(0, 0));
++}
++
++static int dw_mci_submit_data_dma(struct dw_mci *host, struct mmc_data *data)
++{
++ int sg_len;
++ u32 temp;
++
++ host->using_dma = 0;
++
++ /* If we don't have a channel, we can't do DMA */
++ if (!host->use_dma)
++ return -ENODEV;
++
++ sg_len = dw_mci_pre_dma_transfer(host, data, 0);
++ if (sg_len < 0) {
++ host->dma_ops->stop(host);
++ return sg_len;
++ }
++
++ host->using_dma = 1;
++
++ dev_vdbg(host->dev,
++ "sd sg_cpu: %#lx sg_dma: %#lx sg_len: %d\n",
++ (unsigned long)host->sg_cpu, (unsigned long)host->sg_dma,
++ sg_len);
++
++ /*
++ * Decide the MSIZE and RX/TX Watermark.
++ * If current block size is same with previous size,
++ * no need to update fifoth.
++ */
++ if (host->prev_blksz != data->blksz)
++ dw_mci_adjust_fifoth(host, data);
++
++ /* Enable the DMA interface */
++ temp = mci_readl(host, CTRL);
++ temp |= SDMMC_CTRL_DMA_ENABLE;
++ mci_writel(host, CTRL, temp);
++
++ /* Disable RX/TX IRQs, let DMA handle it */
++ temp = mci_readl(host, INTMASK);
++ temp &= ~(SDMMC_INT_RXDR | SDMMC_INT_TXDR);
++ mci_writel(host, INTMASK, temp);
++
++ host->dma_ops->start(host, sg_len);
++
++ return 0;
++}
++
++static void dw_mci_submit_data(struct dw_mci *host, struct mmc_data *data)
++{
++ u32 temp;
++
++ data->error = -EINPROGRESS;
++
++ WARN_ON(host->data);
++ host->sg = NULL;
++ host->data = data;
++
++ if (data->flags & MMC_DATA_READ) {
++ host->dir_status = DW_MCI_RECV_STATUS;
++ dw_mci_ctrl_rd_thld(host, data);
++ } else {
++ host->dir_status = DW_MCI_SEND_STATUS;
++ }
++
++ if (dw_mci_submit_data_dma(host, data)) {
++ int flags = SG_MITER_ATOMIC;
++ if (host->data->flags & MMC_DATA_READ)
++ flags |= SG_MITER_TO_SG;
++ else
++ flags |= SG_MITER_FROM_SG;
++
++ sg_miter_start(&host->sg_miter, data->sg, data->sg_len, flags);
++ host->sg = data->sg;
++ host->part_buf_start = 0;
++ host->part_buf_count = 0;
++
++ mci_writel(host, RINTSTS, SDMMC_INT_TXDR | SDMMC_INT_RXDR);
++ temp = mci_readl(host, INTMASK);
++ temp |= SDMMC_INT_TXDR | SDMMC_INT_RXDR;
++ mci_writel(host, INTMASK, temp);
++
++ temp = mci_readl(host, CTRL);
++ temp &= ~SDMMC_CTRL_DMA_ENABLE;
++ mci_writel(host, CTRL, temp);
++
++ /*
++ * Use the initial fifoth_val for PIO mode.
++ * If next issued data may be transfered by DMA mode,
++ * prev_blksz should be invalidated.
++ */
++ mci_writel(host, FIFOTH, host->fifoth_val);
++ host->prev_blksz = 0;
++ } else {
++ /*
++ * Keep the current block size.
++ * It will be used to decide whether to update
++ * fifoth register next time.
++ */
++ host->prev_blksz = data->blksz;
++ }
++}
++
++static void mci_send_cmd(struct dw_mci_slot *slot, u32 cmd, u32 arg)
++{
++ struct dw_mci *host = slot->host;
++ unsigned long timeout = jiffies + msecs_to_jiffies(500);
++ unsigned int cmd_status = 0;
++
++ mci_writel(host, CMDARG, arg);
++ wmb();
++ mci_writel(host, CMD, SDMMC_CMD_START | cmd);
++
++ while (time_before(jiffies, timeout)) {
++ cmd_status = mci_readl(host, CMD);
++ if (!(cmd_status & SDMMC_CMD_START))
++ return;
++ }
++ dev_err(&slot->mmc->class_dev,
++ "Timeout sending command (cmd %#x arg %#x status %#x)\n",
++ cmd, arg, cmd_status);
++}
++
++static void dw_mci_setup_bus(struct dw_mci_slot *slot, bool force_clkinit)
++{
++ struct dw_mci *host = slot->host;
++ unsigned int clock = slot->clock;
++ u32 div;
++ u32 clk_en_a;
++ u32 sdmmc_cmd_bits = SDMMC_CMD_UPD_CLK | SDMMC_CMD_PRV_DAT_WAIT;
++
++ /* We must continue to set bit 28 in CMD until the change is complete */
++ if (host->state == STATE_WAITING_CMD11_DONE)
++ sdmmc_cmd_bits |= SDMMC_CMD_VOLT_SWITCH;
++
++ if (!clock) {
++ mci_writel(host, CLKENA, 0);
++ mci_send_cmd(slot, sdmmc_cmd_bits, 0);
++ } else if (clock != host->current_speed || force_clkinit) {
++ div = host->bus_hz / clock;
++ if (host->bus_hz % clock && host->bus_hz > clock)
++ /*
++ * move the + 1 after the divide to prevent
++ * over-clocking the card.
++ */
++ div += 1;
++
++ div = (host->bus_hz != clock) ? DIV_ROUND_UP(div, 2) : 0;
++
++ if ((clock << div) != slot->__clk_old || force_clkinit)
++ dev_info(&slot->mmc->class_dev,
++ "Bus speed (slot %d) = %dHz (slot req %dHz, actual %dHZ div = %d)\n",
++ slot->id, host->bus_hz, clock,
++ div ? ((host->bus_hz / div) >> 1) :
++ host->bus_hz, div);
++
++ /* disable clock */
++ mci_writel(host, CLKENA, 0);
++ mci_writel(host, CLKSRC, 0);
++
++ /* inform CIU */
++ mci_send_cmd(slot, sdmmc_cmd_bits, 0);
++
++ /* set clock to desired speed */
++ mci_writel(host, CLKDIV, div);
++
++ /* inform CIU */
++ mci_send_cmd(slot, sdmmc_cmd_bits, 0);
++
++ /* enable clock; only low power if no SDIO */
++ clk_en_a = SDMMC_CLKEN_ENABLE << slot->id;
++ if (!(mci_readl(host, INTMASK) & SDMMC_INT_SDIO(slot->id)))
++ clk_en_a |= SDMMC_CLKEN_LOW_PWR << slot->id;
++ mci_writel(host, CLKENA, clk_en_a);
++
++ /* inform CIU */
++ mci_send_cmd(slot, sdmmc_cmd_bits, 0);
++
++ /* keep the clock with reflecting clock dividor */
++ slot->__clk_old = clock << div;
++ }
++
++ host->current_speed = clock;
++
++ /* Set the current slot bus width */
++ mci_writel(host, CTYPE, (slot->ctype << slot->id));
++}
++
++static void __dw_mci_start_request(struct dw_mci *host,
++ struct dw_mci_slot *slot,
++ struct mmc_command *cmd)
++{
++ struct mmc_request *mrq;
++ struct mmc_data *data;
++ u32 cmdflags;
++
++ mrq = slot->mrq;
++
++ host->cur_slot = slot;
++ host->mrq = mrq;
++
++ host->pending_events = 0;
++ host->completed_events = 0;
++ host->cmd_status = 0;
++ host->data_status = 0;
++ host->dir_status = 0;
++
++ data = cmd->data;
++ if (data) {
++ mci_writel(host, TMOUT, 0xFFFFFFFF);
++ mci_writel(host, BYTCNT, data->blksz*data->blocks);
++ mci_writel(host, BLKSIZ, data->blksz);
++ }
++
++ cmdflags = dw_mci_prepare_command(slot->mmc, cmd);
++
++ /* this is the first command, send the initialization clock */
++ if (test_and_clear_bit(DW_MMC_CARD_NEED_INIT, &slot->flags))
++ cmdflags |= SDMMC_CMD_INIT;
++
++ if (data) {
++ dw_mci_submit_data(host, data);
++ wmb();
++ }
++
++ dw_mci_start_command(host, cmd, cmdflags);
++
++ if (mrq->stop)
++ host->stop_cmdr = dw_mci_prepare_command(slot->mmc, mrq->stop);
++ else
++ host->stop_cmdr = dw_mci_prep_stop_abort(host, cmd);
++}
++
++static void dw_mci_start_request(struct dw_mci *host,
++ struct dw_mci_slot *slot)
++{
++ struct mmc_request *mrq = slot->mrq;
++ struct mmc_command *cmd;
++
++ cmd = mrq->sbc ? mrq->sbc : mrq->cmd;
++ __dw_mci_start_request(host, slot, cmd);
++}
++
++/* must be called with host->lock held */
++static void dw_mci_queue_request(struct dw_mci *host, struct dw_mci_slot *slot,
++ struct mmc_request *mrq)
++{
++ dev_vdbg(&slot->mmc->class_dev, "queue request: state=%d\n",
++ host->state);
++
++ slot->mrq = mrq;
++
++ if (host->state == STATE_WAITING_CMD11_DONE) {
++ dev_warn(&slot->mmc->class_dev,
++ "Voltage change didn't complete\n");
++ /*
++ * this case isn't expected to happen, so we can
++ * either crash here or just try to continue on
++ * in the closest possible state
++ */
++ host->state = STATE_IDLE;
++ }
++
++ if (host->state == STATE_IDLE) {
++ host->state = STATE_SENDING_CMD;
++ dw_mci_start_request(host, slot);
++ } else {
++ list_add_tail(&slot->queue_node, &host->queue);
++ }
++}
++
++static void dw_mci_request(struct mmc_host *mmc, struct mmc_request *mrq)
++{
++ struct dw_mci_slot *slot = mmc_priv(mmc);
++ struct dw_mci *host = slot->host;
++
++ WARN_ON(slot->mrq);
++
++ /*
++ * The check for card presence and queueing of the request must be
++ * atomic, otherwise the card could be removed in between and the
++ * request wouldn't fail until another card was inserted.
++ */
++ spin_lock_bh(&host->lock);
++
++ if (!test_bit(DW_MMC_CARD_PRESENT, &slot->flags)) {
++ spin_unlock_bh(&host->lock);
++ mrq->cmd->error = -ENOMEDIUM;
++ mmc_request_done(mmc, mrq);
++ return;
++ }
++
++ dw_mci_queue_request(host, slot, mrq);
++
++ spin_unlock_bh(&host->lock);
++}
++
++static void dw_mci_set_ios(struct mmc_host *mmc, struct mmc_ios *ios)
++{
++ struct dw_mci_slot *slot = mmc_priv(mmc);
++ const struct dw_mci_drv_data *drv_data = slot->host->drv_data;
++ u32 regs;
++ int ret;
++
++ switch (ios->bus_width) {
++ case MMC_BUS_WIDTH_4:
++ slot->ctype = SDMMC_CTYPE_4BIT;
++ break;
++ case MMC_BUS_WIDTH_8:
++ slot->ctype = SDMMC_CTYPE_8BIT;
++ break;
++ default:
++ /* set default 1 bit mode */
++ slot->ctype = SDMMC_CTYPE_1BIT;
++ }
++
++ regs = mci_readl(slot->host, UHS_REG);
++
++ /* DDR mode set */
++ if (ios->timing == MMC_TIMING_MMC_DDR52)
++ regs |= ((0x1 << slot->id) << 16);
++ else
++ regs &= ~((0x1 << slot->id) << 16);
++
++ mci_writel(slot->host, UHS_REG, regs);
++ slot->host->timing = ios->timing;
++
++ /*
++ * Use mirror of ios->clock to prevent race with mmc
++ * core ios update when finding the minimum.
++ */
++ slot->clock = ios->clock;
++
++ if (drv_data && drv_data->set_ios)
++ drv_data->set_ios(slot->host, ios);
++
++ /* Slot specific timing and width adjustment */
++ dw_mci_setup_bus(slot, false);
++
++ if (slot->host->state == STATE_WAITING_CMD11_DONE && ios->clock != 0)
++ slot->host->state = STATE_IDLE;
++
++ switch (ios->power_mode) {
++ case MMC_POWER_UP:
++ if (!IS_ERR(mmc->supply.vmmc)) {
++ ret = mmc_regulator_set_ocr(mmc, mmc->supply.vmmc,
++ ios->vdd);
++ if (ret) {
++ dev_err(slot->host->dev,
++ "failed to enable vmmc regulator\n");
++ /*return, if failed turn on vmmc*/
++ return;
++ }
++ }
++ if (!IS_ERR(mmc->supply.vqmmc) && !slot->host->vqmmc_enabled) {
++ ret = regulator_enable(mmc->supply.vqmmc);
++ if (ret < 0)
++ dev_err(slot->host->dev,
++ "failed to enable vqmmc regulator\n");
++ else
++ slot->host->vqmmc_enabled = true;
++ }
++ set_bit(DW_MMC_CARD_NEED_INIT, &slot->flags);
++ regs = mci_readl(slot->host, PWREN);
++ regs |= (1 << slot->id);
++ mci_writel(slot->host, PWREN, regs);
++ break;
++ case MMC_POWER_OFF:
++ if (!IS_ERR(mmc->supply.vmmc))
++ mmc_regulator_set_ocr(mmc, mmc->supply.vmmc, 0);
++
++ if (!IS_ERR(mmc->supply.vqmmc) && slot->host->vqmmc_enabled) {
++ regulator_disable(mmc->supply.vqmmc);
++ slot->host->vqmmc_enabled = false;
++ }
++
++ regs = mci_readl(slot->host, PWREN);
++ regs &= ~(1 << slot->id);
++ mci_writel(slot->host, PWREN, regs);
++ break;
++ default:
++ break;
++ }
++}
++
++static int dw_mci_card_busy(struct mmc_host *mmc)
++{
++ struct dw_mci_slot *slot = mmc_priv(mmc);
++ u32 status;
++
++ /*
++ * Check the busy bit which is low when DAT[3:0]
++ * (the data lines) are 0000
++ */
++ status = mci_readl(slot->host, STATUS);
++
++ return !!(status & SDMMC_STATUS_BUSY);
++}
++
++static int dw_mci_switch_voltage(struct mmc_host *mmc, struct mmc_ios *ios)
++{
++ struct dw_mci_slot *slot = mmc_priv(mmc);
++ struct dw_mci *host = slot->host;
++ u32 uhs;
++ u32 v18 = SDMMC_UHS_18V << slot->id;
++ int min_uv, max_uv;
++ int ret;
++
++ /*
++ * Program the voltage. Note that some instances of dw_mmc may use
++ * the UHS_REG for this. For other instances (like exynos) the UHS_REG
++ * does no harm but you need to set the regulator directly. Try both.
++ */
++ uhs = mci_readl(host, UHS_REG);
++ if (ios->signal_voltage == MMC_SIGNAL_VOLTAGE_330) {
++ min_uv = 2700000;
++ max_uv = 3600000;
++ uhs &= ~v18;
++ } else {
++ min_uv = 1700000;
++ max_uv = 1950000;
++ uhs |= v18;
++ }
++ if (!IS_ERR(mmc->supply.vqmmc)) {
++ ret = regulator_set_voltage(mmc->supply.vqmmc, min_uv, max_uv);
++
++ if (ret) {
++ dev_err(&mmc->class_dev,
++ "Regulator set error %d: %d - %d\n",
++ ret, min_uv, max_uv);
++ return ret;
++ }
++ }
++ mci_writel(host, UHS_REG, uhs);
++
++ return 0;
++}
++
++static int dw_mci_get_ro(struct mmc_host *mmc)
++{
++ int read_only;
++ struct dw_mci_slot *slot = mmc_priv(mmc);
++ int gpio_ro = mmc_gpio_get_ro(mmc);
++
++ /* Use platform get_ro function, else try on board write protect */
++ if ((slot->quirks & DW_MCI_SLOT_QUIRK_NO_WRITE_PROTECT) ||
++ (slot->host->quirks & DW_MCI_QUIRK_NO_WRITE_PROTECT))
++ read_only = 0;
++ else if (!IS_ERR_VALUE(gpio_ro))
++ read_only = gpio_ro;
++ else
++ read_only =
++ mci_readl(slot->host, WRTPRT) & (1 << slot->id) ? 1 : 0;
++
++ dev_dbg(&mmc->class_dev, "card is %s\n",
++ read_only ? "read-only" : "read-write");
++
++ return read_only;
++}
++
++static int dw_mci_get_cd(struct mmc_host *mmc)
++{
++ int present;
++ struct dw_mci_slot *slot = mmc_priv(mmc);
++ struct dw_mci_board *brd = slot->host->pdata;
++ struct dw_mci *host = slot->host;
++ int gpio_cd = mmc_gpio_get_cd(mmc);
++
++ /* Use platform get_cd function, else try onboard card detect */
++ if (brd->quirks & DW_MCI_QUIRK_BROKEN_CARD_DETECTION)
++ present = 1;
++ else if (!IS_ERR_VALUE(gpio_cd))
++ present = gpio_cd;
++ else
++ present = (mci_readl(slot->host, CDETECT) & (1 << slot->id))
++ == 0 ? 1 : 0;
++
++ spin_lock_bh(&host->lock);
++ if (present) {
++ set_bit(DW_MMC_CARD_PRESENT, &slot->flags);
++ dev_dbg(&mmc->class_dev, "card is present\n");
++ } else {
++ clear_bit(DW_MMC_CARD_PRESENT, &slot->flags);
++ dev_dbg(&mmc->class_dev, "card is not present\n");
++ }
++ spin_unlock_bh(&host->lock);
++
++ return present;
++}
++
++/*
++ * Disable lower power mode.
++ *
++ * Low power mode will stop the card clock when idle. According to the
++ * description of the CLKENA register we should disable low power mode
++ * for SDIO cards if we need SDIO interrupts to work.
++ *
++ * This function is fast if low power mode is already disabled.
++ */
++static void dw_mci_disable_low_power(struct dw_mci_slot *slot)
++{
++ struct dw_mci *host = slot->host;
++ u32 clk_en_a;
++ const u32 clken_low_pwr = SDMMC_CLKEN_LOW_PWR << slot->id;
++
++ clk_en_a = mci_readl(host, CLKENA);
++
++ if (clk_en_a & clken_low_pwr) {
++ mci_writel(host, CLKENA, clk_en_a & ~clken_low_pwr);
++ mci_send_cmd(slot, SDMMC_CMD_UPD_CLK |
++ SDMMC_CMD_PRV_DAT_WAIT, 0);
++ }
++}
++
++static void dw_mci_enable_sdio_irq(struct mmc_host *mmc, int enb)
++{
++ struct dw_mci_slot *slot = mmc_priv(mmc);
++ struct dw_mci *host = slot->host;
++ u32 int_mask;
++
++ /* Enable/disable Slot Specific SDIO interrupt */
++ int_mask = mci_readl(host, INTMASK);
++ if (enb) {
++ /*
++ * Turn off low power mode if it was enabled. This is a bit of
++ * a heavy operation and we disable / enable IRQs a lot, so
++ * we'll leave low power mode disabled and it will get
++ * re-enabled again in dw_mci_setup_bus().
++ */
++ dw_mci_disable_low_power(slot);
++
++ mci_writel(host, INTMASK,
++ (int_mask | SDMMC_INT_SDIO(slot->id)));
++ } else {
++ mci_writel(host, INTMASK,
++ (int_mask & ~SDMMC_INT_SDIO(slot->id)));
++ }
++}
++
++static int dw_mci_execute_tuning(struct mmc_host *mmc, u32 opcode)
++{
++ struct dw_mci_slot *slot = mmc_priv(mmc);
++ struct dw_mci *host = slot->host;
++ const struct dw_mci_drv_data *drv_data = host->drv_data;
++ struct dw_mci_tuning_data tuning_data;
++ int err = -ENOSYS;
++
++ if (opcode == MMC_SEND_TUNING_BLOCK_HS200) {
++ if (mmc->ios.bus_width == MMC_BUS_WIDTH_8) {
++ tuning_data.blk_pattern = tuning_blk_pattern_8bit;
++ tuning_data.blksz = sizeof(tuning_blk_pattern_8bit);
++ } else if (mmc->ios.bus_width == MMC_BUS_WIDTH_4) {
++ tuning_data.blk_pattern = tuning_blk_pattern_4bit;
++ tuning_data.blksz = sizeof(tuning_blk_pattern_4bit);
++ } else {
++ return -EINVAL;
++ }
++ } else if (opcode == MMC_SEND_TUNING_BLOCK) {
++ tuning_data.blk_pattern = tuning_blk_pattern_4bit;
++ tuning_data.blksz = sizeof(tuning_blk_pattern_4bit);
++ } else {
++ dev_err(host->dev,
++ "Undefined command(%d) for tuning\n", opcode);
++ return -EINVAL;
++ }
++
++ if (drv_data && drv_data->execute_tuning)
++ err = drv_data->execute_tuning(slot, opcode, &tuning_data);
++ return err;
++}
++
++static const struct mmc_host_ops dw_mci_ops = {
++ .request = dw_mci_request,
++ .pre_req = dw_mci_pre_req,
++ .post_req = dw_mci_post_req,
++ .set_ios = dw_mci_set_ios,
++ .get_ro = dw_mci_get_ro,
++ .get_cd = dw_mci_get_cd,
++ .enable_sdio_irq = dw_mci_enable_sdio_irq,
++ .execute_tuning = dw_mci_execute_tuning,
++ .card_busy = dw_mci_card_busy,
++ .start_signal_voltage_switch = dw_mci_switch_voltage,
++
++};
++
++static void dw_mci_request_end(struct dw_mci *host, struct mmc_request *mrq)
++ __releases(&host->lock)
++ __acquires(&host->lock)
++{
++ struct dw_mci_slot *slot;
++ struct mmc_host *prev_mmc = host->cur_slot->mmc;
++
++ WARN_ON(host->cmd || host->data);
++
++ host->cur_slot->mrq = NULL;
++ host->mrq = NULL;
++ if (!list_empty(&host->queue)) {
++ slot = list_entry(host->queue.next,
++ struct dw_mci_slot, queue_node);
++ list_del(&slot->queue_node);
++ dev_vdbg(host->dev, "list not empty: %s is next\n",
++ mmc_hostname(slot->mmc));
++ host->state = STATE_SENDING_CMD;
++ dw_mci_start_request(host, slot);
++ } else {
++ dev_vdbg(host->dev, "list empty\n");
++
++ if (host->state == STATE_SENDING_CMD11)
++ host->state = STATE_WAITING_CMD11_DONE;
++ else
++ host->state = STATE_IDLE;
++ }
++
++ spin_unlock(&host->lock);
++ mmc_request_done(prev_mmc, mrq);
++ spin_lock(&host->lock);
++}
++
++static int dw_mci_command_complete(struct dw_mci *host, struct mmc_command *cmd)
++{
++ u32 status = host->cmd_status;
++
++ host->cmd_status = 0;
++
++ /* Read the response from the card (up to 16 bytes) */
++ if (cmd->flags & MMC_RSP_PRESENT) {
++ if (cmd->flags & MMC_RSP_136) {
++ cmd->resp[3] = mci_readl(host, RESP0);
++ cmd->resp[2] = mci_readl(host, RESP1);
++ cmd->resp[1] = mci_readl(host, RESP2);
++ cmd->resp[0] = mci_readl(host, RESP3);
++ } else {
++ cmd->resp[0] = mci_readl(host, RESP0);
++ cmd->resp[1] = 0;
++ cmd->resp[2] = 0;
++ cmd->resp[3] = 0;
++ }
++ }
++
++ if (status & SDMMC_INT_RTO)
++ cmd->error = -ETIMEDOUT;
++ else if ((cmd->flags & MMC_RSP_CRC) && (status & SDMMC_INT_RCRC))
++ cmd->error = -EILSEQ;
++ else if (status & SDMMC_INT_RESP_ERR)
++ cmd->error = -EIO;
++ else
++ cmd->error = 0;
++
++ if (cmd->error) {
++ /* newer ip versions need a delay between retries */
++ if (host->quirks & DW_MCI_QUIRK_RETRY_DELAY)
++ mdelay(20);
++ }
++
++ return cmd->error;
++}
++
++static int dw_mci_data_complete(struct dw_mci *host, struct mmc_data *data)
++{
++ u32 status = host->data_status;
++
++ if (status & DW_MCI_DATA_ERROR_FLAGS) {
++ if (status & SDMMC_INT_DRTO) {
++ data->error = -ETIMEDOUT;
++ } else if (status & SDMMC_INT_DCRC) {
++ data->error = -EILSEQ;
++ } else if (status & SDMMC_INT_EBE) {
++ if (host->dir_status ==
++ DW_MCI_SEND_STATUS) {
++ /*
++ * No data CRC status was returned.
++ * The number of bytes transferred
++ * will be exaggerated in PIO mode.
++ */
++ data->bytes_xfered = 0;
++ data->error = -ETIMEDOUT;
++ } else if (host->dir_status ==
++ DW_MCI_RECV_STATUS) {
++ data->error = -EIO;
++ }
++ } else {
++ /* SDMMC_INT_SBE is included */
++ data->error = -EIO;
++ }
++
++ dev_dbg(host->dev, "data error, status 0x%08x\n", status);
++
++ /*
++ * After an error, there may be data lingering
++ * in the FIFO
++ */
++ dw_mci_reset(host);
++ } else {
++ data->bytes_xfered = data->blocks * data->blksz;
++ data->error = 0;
++ }
++
++ return data->error;
++}
++
++static void dw_mci_tasklet_func(unsigned long priv)
++{
++ struct dw_mci *host = (struct dw_mci *)priv;
++ struct mmc_data *data;
++ struct mmc_command *cmd;
++ struct mmc_request *mrq;
++ enum dw_mci_state state;
++ enum dw_mci_state prev_state;
++ unsigned int err;
++
++ spin_lock(&host->lock);
++
++ state = host->state;
++ data = host->data;
++ mrq = host->mrq;
++
++ do {
++ prev_state = state;
++
++ switch (state) {
++ case STATE_IDLE:
++ case STATE_WAITING_CMD11_DONE:
++ break;
++
++ case STATE_SENDING_CMD11:
++ case STATE_SENDING_CMD:
++ if (!test_and_clear_bit(EVENT_CMD_COMPLETE,
++ &host->pending_events))
++ break;
++
++ cmd = host->cmd;
++ host->cmd = NULL;
++ set_bit(EVENT_CMD_COMPLETE, &host->completed_events);
++ err = dw_mci_command_complete(host, cmd);
++ if (cmd == mrq->sbc && !err) {
++ prev_state = state = STATE_SENDING_CMD;
++ __dw_mci_start_request(host, host->cur_slot,
++ mrq->cmd);
++ goto unlock;
++ }
++
++ if (cmd->data && err) {
++ dw_mci_stop_dma(host);
++ send_stop_abort(host, data);
++ state = STATE_SENDING_STOP;
++ break;
++ }
++
++ if (!cmd->data || err) {
++ dw_mci_request_end(host, mrq);
++ goto unlock;
++ }
++
++ prev_state = state = STATE_SENDING_DATA;
++ /* fall through */
++
++ case STATE_SENDING_DATA:
++ /*
++ * We could get a data error and never a transfer
++ * complete so we'd better check for it here.
++ *
++ * Note that we don't really care if we also got a
++ * transfer complete; stopping the DMA and sending an
++ * abort won't hurt.
++ */
++ if (test_and_clear_bit(EVENT_DATA_ERROR,
++ &host->pending_events)) {
++ dw_mci_stop_dma(host);
++ send_stop_abort(host, data);
++ state = STATE_DATA_ERROR;
++ break;
++ }
++
++ if (!test_and_clear_bit(EVENT_XFER_COMPLETE,
++ &host->pending_events))
++ break;
++
++ set_bit(EVENT_XFER_COMPLETE, &host->completed_events);
++
++ /*
++ * Handle an EVENT_DATA_ERROR that might have shown up
++ * before the transfer completed. This might not have
++ * been caught by the check above because the interrupt
++ * could have gone off between the previous check and
++ * the check for transfer complete.
++ *
++ * Technically this ought not be needed assuming we
++ * get a DATA_COMPLETE eventually (we'll notice the
++ * error and end the request), but it shouldn't hurt.
++ *
++ * This has the advantage of sending the stop command.
++ */
++ if (test_and_clear_bit(EVENT_DATA_ERROR,
++ &host->pending_events)) {
++ dw_mci_stop_dma(host);
++ send_stop_abort(host, data);
++ state = STATE_DATA_ERROR;
++ break;
++ }
++ prev_state = state = STATE_DATA_BUSY;
++
++ /* fall through */
++
++ case STATE_DATA_BUSY:
++ if (!test_and_clear_bit(EVENT_DATA_COMPLETE,
++ &host->pending_events))
++ break;
++
++ host->data = NULL;
++ set_bit(EVENT_DATA_COMPLETE, &host->completed_events);
++ err = dw_mci_data_complete(host, data);
++
++ if (!err) {
++ if (!data->stop || mrq->sbc) {
++ if (mrq->sbc && data->stop)
++ data->stop->error = 0;
++ dw_mci_request_end(host, mrq);
++ goto unlock;
++ }
++
++ /* stop command for open-ended transfer*/
++ if (data->stop)
++ send_stop_abort(host, data);
++ } else {
++ /*
++ * If we don't have a command complete now we'll
++ * never get one since we just reset everything;
++ * better end the request.
++ *
++ * If we do have a command complete we'll fall
++ * through to the SENDING_STOP command and
++ * everything will be peachy keen.
++ */
++ if (!test_bit(EVENT_CMD_COMPLETE,
++ &host->pending_events)) {
++ host->cmd = NULL;
++ dw_mci_request_end(host, mrq);
++ goto unlock;
++ }
++ }
++
++ /*
++ * If err has non-zero,
++ * stop-abort command has been already issued.
++ */
++ prev_state = state = STATE_SENDING_STOP;
++
++ /* fall through */
++
++ case STATE_SENDING_STOP:
++ if (!test_and_clear_bit(EVENT_CMD_COMPLETE,
++ &host->pending_events))
++ break;
++
++ /* CMD error in data command */
++ if (mrq->cmd->error && mrq->data)
++ dw_mci_reset(host);
++
++ host->cmd = NULL;
++ host->data = NULL;
++
++ if (mrq->stop)
++ dw_mci_command_complete(host, mrq->stop);
++ else
++ host->cmd_status = 0;
++
++ dw_mci_request_end(host, mrq);
++ goto unlock;
++
++ case STATE_DATA_ERROR:
++ if (!test_and_clear_bit(EVENT_XFER_COMPLETE,
++ &host->pending_events))
++ break;
++
++ state = STATE_DATA_BUSY;
++ break;
++ }
++ } while (state != prev_state);
++
++ host->state = state;
++unlock:
++ spin_unlock(&host->lock);
++
++}
++
++/* push final bytes to part_buf, only use during push */
++static void dw_mci_set_part_bytes(struct dw_mci *host, void *buf, int cnt)
++{
++ memcpy((void *)&host->part_buf, buf, cnt);
++ host->part_buf_count = cnt;
++}
++
++/* append bytes to part_buf, only use during push */
++static int dw_mci_push_part_bytes(struct dw_mci *host, void *buf, int cnt)
++{
++ cnt = min(cnt, (1 << host->data_shift) - host->part_buf_count);
++ memcpy((void *)&host->part_buf + host->part_buf_count, buf, cnt);
++ host->part_buf_count += cnt;
++ return cnt;
++}
++
++/* pull first bytes from part_buf, only use during pull */
++static int dw_mci_pull_part_bytes(struct dw_mci *host, void *buf, int cnt)
++{
++ cnt = min(cnt, (int)host->part_buf_count);
++ if (cnt) {
++ memcpy(buf, (void *)&host->part_buf + host->part_buf_start,
++ cnt);
++ host->part_buf_count -= cnt;
++ host->part_buf_start += cnt;
++ }
++ return cnt;
++}
++
++/* pull final bytes from the part_buf, assuming it's just been filled */
++static void dw_mci_pull_final_bytes(struct dw_mci *host, void *buf, int cnt)
++{
++ memcpy(buf, &host->part_buf, cnt);
++ host->part_buf_start = cnt;
++ host->part_buf_count = (1 << host->data_shift) - cnt;
++}
++
++static void dw_mci_push_data16(struct dw_mci *host, void *buf, int cnt)
++{
++ struct mmc_data *data = host->data;
++ int init_cnt = cnt;
++
++ /* try and push anything in the part_buf */
++ if (unlikely(host->part_buf_count)) {
++ int len = dw_mci_push_part_bytes(host, buf, cnt);
++ buf += len;
++ cnt -= len;
++ if (host->part_buf_count == 2) {
++ mci_writew(host, DATA(host->data_offset),
++ host->part_buf16);
++ host->part_buf_count = 0;
++ }
++ }
++#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
++ if (unlikely((unsigned long)buf & 0x1)) {
++ while (cnt >= 2) {
++ u16 aligned_buf[64];
++ int len = min(cnt & -2, (int)sizeof(aligned_buf));
++ int items = len >> 1;
++ int i;
++ /* memcpy from input buffer into aligned buffer */
++ memcpy(aligned_buf, buf, len);
++ buf += len;
++ cnt -= len;
++ /* push data from aligned buffer into fifo */
++ for (i = 0; i < items; ++i)
++ mci_writew(host, DATA(host->data_offset),
++ aligned_buf[i]);
++ }
++ } else
++#endif
++ {
++ u16 *pdata = buf;
++ for (; cnt >= 2; cnt -= 2)
++ mci_writew(host, DATA(host->data_offset), *pdata++);
++ buf = pdata;
++ }
++ /* put anything remaining in the part_buf */
++ if (cnt) {
++ dw_mci_set_part_bytes(host, buf, cnt);
++ /* Push data if we have reached the expected data length */
++ if ((data->bytes_xfered + init_cnt) ==
++ (data->blksz * data->blocks))
++ mci_writew(host, DATA(host->data_offset),
++ host->part_buf16);
++ }
++}
++
++static void dw_mci_pull_data16(struct dw_mci *host, void *buf, int cnt)
++{
++#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
++ if (unlikely((unsigned long)buf & 0x1)) {
++ while (cnt >= 2) {
++ /* pull data from fifo into aligned buffer */
++ u16 aligned_buf[64];
++ int len = min(cnt & -2, (int)sizeof(aligned_buf));
++ int items = len >> 1;
++ int i;
++ for (i = 0; i < items; ++i)
++ aligned_buf[i] = mci_readw(host,
++ DATA(host->data_offset));
++ /* memcpy from aligned buffer into output buffer */
++ memcpy(buf, aligned_buf, len);
++ buf += len;
++ cnt -= len;
++ }
++ } else
++#endif
++ {
++ u16 *pdata = buf;
++ for (; cnt >= 2; cnt -= 2)
++ *pdata++ = mci_readw(host, DATA(host->data_offset));
++ buf = pdata;
++ }
++ if (cnt) {
++ host->part_buf16 = mci_readw(host, DATA(host->data_offset));
++ dw_mci_pull_final_bytes(host, buf, cnt);
++ }
++}
++
++static void dw_mci_push_data32(struct dw_mci *host, void *buf, int cnt)
++{
++ struct mmc_data *data = host->data;
++ int init_cnt = cnt;
++
++ /* try and push anything in the part_buf */
++ if (unlikely(host->part_buf_count)) {
++ int len = dw_mci_push_part_bytes(host, buf, cnt);
++ buf += len;
++ cnt -= len;
++ if (host->part_buf_count == 4) {
++ mci_writel(host, DATA(host->data_offset),
++ host->part_buf32);
++ host->part_buf_count = 0;
++ }
++ }
++#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
++ if (unlikely((unsigned long)buf & 0x3)) {
++ while (cnt >= 4) {
++ u32 aligned_buf[32];
++ int len = min(cnt & -4, (int)sizeof(aligned_buf));
++ int items = len >> 2;
++ int i;
++ /* memcpy from input buffer into aligned buffer */
++ memcpy(aligned_buf, buf, len);
++ buf += len;
++ cnt -= len;
++ /* push data from aligned buffer into fifo */
++ for (i = 0; i < items; ++i)
++ mci_writel(host, DATA(host->data_offset),
++ aligned_buf[i]);
++ }
++ } else
++#endif
++ {
++ u32 *pdata = buf;
++ for (; cnt >= 4; cnt -= 4)
++ mci_writel(host, DATA(host->data_offset), *pdata++);
++ buf = pdata;
++ }
++ /* put anything remaining in the part_buf */
++ if (cnt) {
++ dw_mci_set_part_bytes(host, buf, cnt);
++ /* Push data if we have reached the expected data length */
++ if ((data->bytes_xfered + init_cnt) ==
++ (data->blksz * data->blocks))
++ mci_writel(host, DATA(host->data_offset),
++ host->part_buf32);
++ }
++}
++
++static void dw_mci_pull_data32(struct dw_mci *host, void *buf, int cnt)
++{
++#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
++ if (unlikely((unsigned long)buf & 0x3)) {
++ while (cnt >= 4) {
++ /* pull data from fifo into aligned buffer */
++ u32 aligned_buf[32];
++ int len = min(cnt & -4, (int)sizeof(aligned_buf));
++ int items = len >> 2;
++ int i;
++ for (i = 0; i < items; ++i)
++ aligned_buf[i] = mci_readl(host,
++ DATA(host->data_offset));
++ /* memcpy from aligned buffer into output buffer */
++ memcpy(buf, aligned_buf, len);
++ buf += len;
++ cnt -= len;
++ }
++ } else
++#endif
++ {
++ u32 *pdata = buf;
++ for (; cnt >= 4; cnt -= 4)
++ *pdata++ = mci_readl(host, DATA(host->data_offset));
++ buf = pdata;
++ }
++ if (cnt) {
++ host->part_buf32 = mci_readl(host, DATA(host->data_offset));
++ dw_mci_pull_final_bytes(host, buf, cnt);
++ }
++}
++
++static void dw_mci_push_data64(struct dw_mci *host, void *buf, int cnt)
++{
++ struct mmc_data *data = host->data;
++ int init_cnt = cnt;
++
++ /* try and push anything in the part_buf */
++ if (unlikely(host->part_buf_count)) {
++ int len = dw_mci_push_part_bytes(host, buf, cnt);
++ buf += len;
++ cnt -= len;
++
++ if (host->part_buf_count == 8) {
++ mci_writeq(host, DATA(host->data_offset),
++ host->part_buf);
++ host->part_buf_count = 0;
++ }
++ }
++#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
++ if (unlikely((unsigned long)buf & 0x7)) {
++ while (cnt >= 8) {
++ u64 aligned_buf[16];
++ int len = min(cnt & -8, (int)sizeof(aligned_buf));
++ int items = len >> 3;
++ int i;
++ /* memcpy from input buffer into aligned buffer */
++ memcpy(aligned_buf, buf, len);
++ buf += len;
++ cnt -= len;
++ /* push data from aligned buffer into fifo */
++ for (i = 0; i < items; ++i)
++ mci_writeq(host, DATA(host->data_offset),
++ aligned_buf[i]);
++ }
++ } else
++#endif
++ {
++ u64 *pdata = buf;
++ for (; cnt >= 8; cnt -= 8)
++ mci_writeq(host, DATA(host->data_offset), *pdata++);
++ buf = pdata;
++ }
++ /* put anything remaining in the part_buf */
++ if (cnt) {
++ dw_mci_set_part_bytes(host, buf, cnt);
++ /* Push data if we have reached the expected data length */
++ if ((data->bytes_xfered + init_cnt) ==
++ (data->blksz * data->blocks))
++ mci_writeq(host, DATA(host->data_offset),
++ host->part_buf);
++ }
++}
++
++static void dw_mci_pull_data64(struct dw_mci *host, void *buf, int cnt)
++{
++#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
++ if (unlikely((unsigned long)buf & 0x7)) {
++ while (cnt >= 8) {
++ /* pull data from fifo into aligned buffer */
++ u64 aligned_buf[16];
++ int len = min(cnt & -8, (int)sizeof(aligned_buf));
++ int items = len >> 3;
++ int i;
++ for (i = 0; i < items; ++i)
++ aligned_buf[i] = mci_readq(host,
++ DATA(host->data_offset));
++ /* memcpy from aligned buffer into output buffer */
++ memcpy(buf, aligned_buf, len);
++ buf += len;
++ cnt -= len;
++ }
++ } else
++#endif
++ {
++ u64 *pdata = buf;
++ for (; cnt >= 8; cnt -= 8)
++ *pdata++ = mci_readq(host, DATA(host->data_offset));
++ buf = pdata;
++ }
++ if (cnt) {
++ host->part_buf = mci_readq(host, DATA(host->data_offset));
++ dw_mci_pull_final_bytes(host, buf, cnt);
++ }
++}
++
++static void dw_mci_pull_data(struct dw_mci *host, void *buf, int cnt)
++{
++ int len;
++
++ /* get remaining partial bytes */
++ len = dw_mci_pull_part_bytes(host, buf, cnt);
++ if (unlikely(len == cnt))
++ return;
++ buf += len;
++ cnt -= len;
++
++ /* get the rest of the data */
++ host->pull_data(host, buf, cnt);
++}
++
++static void dw_mci_read_data_pio(struct dw_mci *host, bool dto)
++{
++ struct sg_mapping_iter *sg_miter = &host->sg_miter;
++ void *buf;
++ unsigned int offset;
++ struct mmc_data *data = host->data;
++ int shift = host->data_shift;
++ u32 status;
++ unsigned int len;
++ unsigned int remain, fcnt;
++
++ do {
++ if (!sg_miter_next(sg_miter))
++ goto done;
++
++ host->sg = sg_miter->piter.sg;
++ buf = sg_miter->addr;
++ remain = sg_miter->length;
++ offset = 0;
++
++ do {
++ fcnt = (SDMMC_GET_FCNT(mci_readl(host, STATUS))
++ << shift) + host->part_buf_count;
++ len = min(remain, fcnt);
++ if (!len)
++ break;
++ dw_mci_pull_data(host, (void *)(buf + offset), len);
++ data->bytes_xfered += len;
++ offset += len;
++ remain -= len;
++ } while (remain);
++
++ sg_miter->consumed = offset;
++ status = mci_readl(host, MINTSTS);
++ mci_writel(host, RINTSTS, SDMMC_INT_RXDR);
++ /* if the RXDR is ready read again */
++ } while ((status & SDMMC_INT_RXDR) ||
++ (dto && SDMMC_GET_FCNT(mci_readl(host, STATUS))));
++
++ if (!remain) {
++ if (!sg_miter_next(sg_miter))
++ goto done;
++ sg_miter->consumed = 0;
++ }
++ sg_miter_stop(sg_miter);
++ return;
++
++done:
++ sg_miter_stop(sg_miter);
++ host->sg = NULL;
++ smp_wmb();
++ set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
++}
++
++static void dw_mci_write_data_pio(struct dw_mci *host)
++{
++ struct sg_mapping_iter *sg_miter = &host->sg_miter;
++ void *buf;
++ unsigned int offset;
++ struct mmc_data *data = host->data;
++ int shift = host->data_shift;
++ u32 status;
++ unsigned int len;
++ unsigned int fifo_depth = host->fifo_depth;
++ unsigned int remain, fcnt;
++
++ do {
++ if (!sg_miter_next(sg_miter))
++ goto done;
++
++ host->sg = sg_miter->piter.sg;
++ buf = sg_miter->addr;
++ remain = sg_miter->length;
++ offset = 0;
++
++ do {
++ fcnt = ((fifo_depth -
++ SDMMC_GET_FCNT(mci_readl(host, STATUS)))
++ << shift) - host->part_buf_count;
++ len = min(remain, fcnt);
++ if (!len)
++ break;
++ host->push_data(host, (void *)(buf + offset), len);
++ data->bytes_xfered += len;
++ offset += len;
++ remain -= len;
++ } while (remain);
++
++ sg_miter->consumed = offset;
++ status = mci_readl(host, MINTSTS);
++ mci_writel(host, RINTSTS, SDMMC_INT_TXDR);
++ } while (status & SDMMC_INT_TXDR); /* if TXDR write again */
++
++ if (!remain) {
++ if (!sg_miter_next(sg_miter))
++ goto done;
++ sg_miter->consumed = 0;
++ }
++ sg_miter_stop(sg_miter);
++ return;
++
++done:
++ sg_miter_stop(sg_miter);
++ host->sg = NULL;
++ smp_wmb();
++ set_bit(EVENT_XFER_COMPLETE, &host->pending_events);
++}
++
++static void dw_mci_cmd_interrupt(struct dw_mci *host, u32 status)
++{
++ if (!host->cmd_status)
++ host->cmd_status = status;
++
++ smp_wmb();
++
++ set_bit(EVENT_CMD_COMPLETE, &host->pending_events);
++ tasklet_schedule(&host->tasklet);
++}
++
++static irqreturn_t dw_mci_interrupt(int irq, void *dev_id)
++{
++ struct dw_mci *host = dev_id;
++ u32 pending;
++ int i;
++
++ pending = mci_readl(host, MINTSTS); /* read-only mask reg */
++
++ /*
++ * DTO fix - version 2.10a and below, and only if internal DMA
++ * is configured.
++ */
++ if (host->quirks & DW_MCI_QUIRK_IDMAC_DTO) {
++ if (!pending &&
++ ((mci_readl(host, STATUS) >> 17) & 0x1fff))
++ pending |= SDMMC_INT_DATA_OVER;
++ }
++
++ if (pending) {
++ /* Check volt switch first, since it can look like an error */
++ if ((host->state == STATE_SENDING_CMD11) &&
++ (pending & SDMMC_INT_VOLT_SWITCH)) {
++ mci_writel(host, RINTSTS, SDMMC_INT_VOLT_SWITCH);
++ pending &= ~SDMMC_INT_VOLT_SWITCH;
++ dw_mci_cmd_interrupt(host, pending);
++ }
++
++ if (pending & DW_MCI_CMD_ERROR_FLAGS) {
++ mci_writel(host, RINTSTS, DW_MCI_CMD_ERROR_FLAGS);
++ host->cmd_status = pending;
++ smp_wmb();
++ set_bit(EVENT_CMD_COMPLETE, &host->pending_events);
++ }
++
++ if (pending & DW_MCI_DATA_ERROR_FLAGS) {
++ /* if there is an error report DATA_ERROR */
++ mci_writel(host, RINTSTS, DW_MCI_DATA_ERROR_FLAGS);
++ host->data_status = pending;
++ smp_wmb();
++ set_bit(EVENT_DATA_ERROR, &host->pending_events);
++ tasklet_schedule(&host->tasklet);
++ }
++
++ if (pending & SDMMC_INT_DATA_OVER) {
++ mci_writel(host, RINTSTS, SDMMC_INT_DATA_OVER);
++ if (!host->data_status)
++ host->data_status = pending;
++ smp_wmb();
++ if (host->dir_status == DW_MCI_RECV_STATUS) {
++ if (host->sg != NULL)
++ dw_mci_read_data_pio(host, true);
++ }
++ set_bit(EVENT_DATA_COMPLETE, &host->pending_events);
++ tasklet_schedule(&host->tasklet);
++ }
++
++ if (pending & SDMMC_INT_RXDR) {
++ mci_writel(host, RINTSTS, SDMMC_INT_RXDR);
++ if (host->dir_status == DW_MCI_RECV_STATUS && host->sg)
++ dw_mci_read_data_pio(host, false);
++ }
++
++ if (pending & SDMMC_INT_TXDR) {
++ mci_writel(host, RINTSTS, SDMMC_INT_TXDR);
++ if (host->dir_status == DW_MCI_SEND_STATUS && host->sg)
++ dw_mci_write_data_pio(host);
++ }
++
++ if (pending & SDMMC_INT_CMD_DONE) {
++ mci_writel(host, RINTSTS, SDMMC_INT_CMD_DONE);
++ dw_mci_cmd_interrupt(host, pending);
++ }
++
++ if (pending & SDMMC_INT_CD) {
++ mci_writel(host, RINTSTS, SDMMC_INT_CD);
++ queue_work(host->card_workqueue, &host->card_work);
++ }
++
++ /* Handle SDIO Interrupts */
++ for (i = 0; i < host->num_slots; i++) {
++ struct dw_mci_slot *slot = host->slot[i];
++ if (pending & SDMMC_INT_SDIO(i)) {
++ mci_writel(host, RINTSTS, SDMMC_INT_SDIO(i));
++ mmc_signal_sdio_irq(slot->mmc);
++ }
++ }
++
++ }
++
++#ifdef CONFIG_MMC_DW_IDMAC
++ /* Handle DMA interrupts */
++ pending = mci_readl(host, IDSTS);
++ if (pending & (SDMMC_IDMAC_INT_TI | SDMMC_IDMAC_INT_RI)) {
++ mci_writel(host, IDSTS, SDMMC_IDMAC_INT_TI | SDMMC_IDMAC_INT_RI);
++ mci_writel(host, IDSTS, SDMMC_IDMAC_INT_NI);
++ host->dma_ops->complete(host);
++ }
++#endif
++
++ return IRQ_HANDLED;
++}
++
++static void dw_mci_work_routine_card(struct work_struct *work)
++{
++ struct dw_mci *host = container_of(work, struct dw_mci, card_work);
++ int i;
++
++ for (i = 0; i < host->num_slots; i++) {
++ struct dw_mci_slot *slot = host->slot[i];
++ struct mmc_host *mmc = slot->mmc;
++ struct mmc_request *mrq;
++ int present;
++
++ present = dw_mci_get_cd(mmc);
++ while (present != slot->last_detect_state) {
++ dev_dbg(&slot->mmc->class_dev, "card %s\n",
++ present ? "inserted" : "removed");
++
++ spin_lock_bh(&host->lock);
++
++ /* Card change detected */
++ slot->last_detect_state = present;
++
++ /* Clean up queue if present */
++ mrq = slot->mrq;
++ if (mrq) {
++ if (mrq == host->mrq) {
++ host->data = NULL;
++ host->cmd = NULL;
++
++ switch (host->state) {
++ case STATE_IDLE:
++ case STATE_WAITING_CMD11_DONE:
++ break;
++ case STATE_SENDING_CMD11:
++ case STATE_SENDING_CMD:
++ mrq->cmd->error = -ENOMEDIUM;
++ if (!mrq->data)
++ break;
++ /* fall through */
++ case STATE_SENDING_DATA:
++ mrq->data->error = -ENOMEDIUM;
++ dw_mci_stop_dma(host);
++ break;
++ case STATE_DATA_BUSY:
++ case STATE_DATA_ERROR:
++ if (mrq->data->error == -EINPROGRESS)
++ mrq->data->error = -ENOMEDIUM;
++ /* fall through */
++ case STATE_SENDING_STOP:
++ if (mrq->stop)
++ mrq->stop->error = -ENOMEDIUM;
++ break;
++ }
++
++ dw_mci_request_end(host, mrq);
++ } else {
++ list_del(&slot->queue_node);
++ mrq->cmd->error = -ENOMEDIUM;
++ if (mrq->data)
++ mrq->data->error = -ENOMEDIUM;
++ if (mrq->stop)
++ mrq->stop->error = -ENOMEDIUM;
++
++ spin_unlock(&host->lock);
++ mmc_request_done(slot->mmc, mrq);
++ spin_lock(&host->lock);
++ }
++ }
++
++ /* Power down slot */
++ if (present == 0)
++ dw_mci_reset(host);
++
++ spin_unlock_bh(&host->lock);
++
++ present = dw_mci_get_cd(mmc);
++ }
++
++ mmc_detect_change(slot->mmc,
++ msecs_to_jiffies(host->pdata->detect_delay_ms));
++ }
++}
++
++#ifdef CONFIG_OF
++/* given a slot id, find out the device node representing that slot */
++static struct device_node *dw_mci_of_find_slot_node(struct device *dev, u8 slot)
++{
++ struct device_node *np;
++ const __be32 *addr;
++ int len;
++
++ if (!dev || !dev->of_node)
++ return NULL;
++
++ for_each_child_of_node(dev->of_node, np) {
++ addr = of_get_property(np, "reg", &len);
++ if (!addr || (len < sizeof(int)))
++ continue;
++ if (be32_to_cpup(addr) == slot)
++ return np;
++ }
++ return NULL;
++}
++
++static struct dw_mci_of_slot_quirks {
++ char *quirk;
++ int id;
++} of_slot_quirks[] = {
++ {
++ .quirk = "disable-wp",
++ .id = DW_MCI_SLOT_QUIRK_NO_WRITE_PROTECT,
++ },
++};
++
++static int dw_mci_of_get_slot_quirks(struct device *dev, u8 slot)
++{
++ struct device_node *np = dw_mci_of_find_slot_node(dev, slot);
++ int quirks = 0;
++ int idx;
++
++ /* get quirks */
++ for (idx = 0; idx < ARRAY_SIZE(of_slot_quirks); idx++)
++ if (of_get_property(np, of_slot_quirks[idx].quirk, NULL)) {
++ dev_warn(dev, "Slot quirk %s is deprecated\n",
++ of_slot_quirks[idx].quirk);
++ quirks |= of_slot_quirks[idx].id;
++ }
++
++ return quirks;
++}
++#else /* CONFIG_OF */
++static int dw_mci_of_get_slot_quirks(struct device *dev, u8 slot)
++{
++ return 0;
++}
++#endif /* CONFIG_OF */
++
++static int dw_mci_init_slot(struct dw_mci *host, unsigned int id)
++{
++ struct mmc_host *mmc;
++ struct dw_mci_slot *slot;
++ const struct dw_mci_drv_data *drv_data = host->drv_data;
++ int ctrl_id, ret;
++ u32 freq[2];
++
++ mmc = mmc_alloc_host(sizeof(struct dw_mci_slot), host->dev);
++ if (!mmc)
++ return -ENOMEM;
++
++ slot = mmc_priv(mmc);
++ slot->id = id;
++ slot->mmc = mmc;
++ slot->host = host;
++ host->slot[id] = slot;
++
++ slot->quirks = dw_mci_of_get_slot_quirks(host->dev, slot->id);
++
++ mmc->ops = &dw_mci_ops;
++ if (of_property_read_u32_array(host->dev->of_node,
++ "clock-freq-min-max", freq, 2)) {
++ mmc->f_min = DW_MCI_FREQ_MIN;
++ mmc->f_max = DW_MCI_FREQ_MAX;
++ } else {
++ mmc->f_min = freq[0];
++ mmc->f_max = freq[1];
++ }
++
++ /*if there are external regulators, get them*/
++ ret = mmc_regulator_get_supply(mmc);
++ if (ret == -EPROBE_DEFER)
++ goto err_host_allocated;
++
++ if (!mmc->ocr_avail)
++ mmc->ocr_avail = MMC_VDD_32_33 | MMC_VDD_33_34;
++
++ if (host->pdata->caps)
++ mmc->caps = host->pdata->caps;
++
++ if (host->pdata->pm_caps)
++ mmc->pm_caps = host->pdata->pm_caps;
++
++ if (host->dev->of_node) {
++ ctrl_id = of_alias_get_id(host->dev->of_node, "mshc");
++ if (ctrl_id < 0)
++ ctrl_id = 0;
++ } else {
++ ctrl_id = to_platform_device(host->dev)->id;
++ }
++ if (drv_data && drv_data->caps)
++ mmc->caps |= drv_data->caps[ctrl_id];
++
++ if (host->pdata->caps2)
++ mmc->caps2 = host->pdata->caps2;
++
++ ret = mmc_of_parse(mmc);
++ if (ret)
++ goto err_host_allocated;
++
++ if (host->pdata->blk_settings) {
++ mmc->max_segs = host->pdata->blk_settings->max_segs;
++ mmc->max_blk_size = host->pdata->blk_settings->max_blk_size;
++ mmc->max_blk_count = host->pdata->blk_settings->max_blk_count;
++ mmc->max_req_size = host->pdata->blk_settings->max_req_size;
++ mmc->max_seg_size = host->pdata->blk_settings->max_seg_size;
++ } else {
++ /* Useful defaults if platform data is unset. */
++#ifdef CONFIG_MMC_DW_IDMAC
++ mmc->max_segs = host->ring_size;
++ mmc->max_blk_size = 65536;
++ mmc->max_blk_count = host->ring_size;
++ mmc->max_seg_size = 0x1000;
++ mmc->max_req_size = mmc->max_seg_size * mmc->max_blk_count;
++#else
++ mmc->max_segs = 64;
++ mmc->max_blk_size = 65536; /* BLKSIZ is 16 bits */
++ mmc->max_blk_count = 512;
++ mmc->max_req_size = mmc->max_blk_size * mmc->max_blk_count;
++ mmc->max_seg_size = mmc->max_req_size;
++#endif /* CONFIG_MMC_DW_IDMAC */
++ }
++
++ if (dw_mci_get_cd(mmc))
++ set_bit(DW_MMC_CARD_PRESENT, &slot->flags);
++ else
++ clear_bit(DW_MMC_CARD_PRESENT, &slot->flags);
++
++ ret = mmc_add_host(mmc);
++ if (ret)
++ goto err_host_allocated;
++
++#if defined(CONFIG_DEBUG_FS)
++ dw_mci_init_debugfs(slot);
++#endif
++
++ /* Card initially undetected */
++ slot->last_detect_state = 0;
++
++ return 0;
++
++err_host_allocated:
++ mmc_free_host(mmc);
++ return ret;
++}
++
++static void dw_mci_cleanup_slot(struct dw_mci_slot *slot, unsigned int id)
++{
++ /* Debugfs stuff is cleaned up by mmc core */
++ mmc_remove_host(slot->mmc);
++ slot->host->slot[id] = NULL;
++ mmc_free_host(slot->mmc);
++}
++
++static void dw_mci_init_dma(struct dw_mci *host)
++{
++ /* Alloc memory for sg translation */
++ host->sg_cpu = dmam_alloc_coherent(host->dev, PAGE_SIZE,
++ &host->sg_dma, GFP_KERNEL);
++ if (!host->sg_cpu) {
++ dev_err(host->dev, "%s: could not alloc DMA memory\n",
++ __func__);
++ goto no_dma;
++ }
++
++ /* Determine which DMA interface to use */
++#ifdef CONFIG_MMC_DW_IDMAC
++ host->dma_ops = &dw_mci_idmac_ops;
++ dev_info(host->dev, "Using internal DMA controller.\n");
++#endif
++
++ if (!host->dma_ops)
++ goto no_dma;
++
++ if (host->dma_ops->init && host->dma_ops->start &&
++ host->dma_ops->stop && host->dma_ops->cleanup) {
++ if (host->dma_ops->init(host)) {
++ dev_err(host->dev, "%s: Unable to initialize "
++ "DMA Controller.\n", __func__);
++ goto no_dma;
++ }
++ } else {
++ dev_err(host->dev, "DMA initialization not found.\n");
++ goto no_dma;
++ }
++
++ host->use_dma = 1;
++ return;
++
++no_dma:
++ dev_info(host->dev, "Using PIO mode.\n");
++ host->use_dma = 0;
++ return;
++}
++
++static bool dw_mci_ctrl_reset(struct dw_mci *host, u32 reset)
++{
++ unsigned long timeout = jiffies + msecs_to_jiffies(500);
++ u32 ctrl;
++
++ ctrl = mci_readl(host, CTRL);
++ ctrl |= reset;
++ mci_writel(host, CTRL, ctrl);
++
++ /* wait till resets clear */
++ do {
++ ctrl = mci_readl(host, CTRL);
++ if (!(ctrl & reset))
++ return true;
++ } while (time_before(jiffies, timeout));
++
++ dev_err(host->dev,
++ "Timeout resetting block (ctrl reset %#x)\n",
++ ctrl & reset);
++
++ return false;
++}
++
++static bool dw_mci_reset(struct dw_mci *host)
++{
++ u32 flags = SDMMC_CTRL_RESET | SDMMC_CTRL_FIFO_RESET;
++ bool ret = false;
++
++ /*
++ * Reseting generates a block interrupt, hence setting
++ * the scatter-gather pointer to NULL.
++ */
++ if (host->sg) {
++ sg_miter_stop(&host->sg_miter);
++ host->sg = NULL;
++ }
++
++ if (host->use_dma)
++ flags |= SDMMC_CTRL_DMA_RESET;
++
++ if (dw_mci_ctrl_reset(host, flags)) {
++ /*
++ * In all cases we clear the RAWINTS register to clear any
++ * interrupts.
++ */
++ mci_writel(host, RINTSTS, 0xFFFFFFFF);
++
++ /* if using dma we wait for dma_req to clear */
++ if (host->use_dma) {
++ unsigned long timeout = jiffies + msecs_to_jiffies(500);
++ u32 status;
++ do {
++ status = mci_readl(host, STATUS);
++ if (!(status & SDMMC_STATUS_DMA_REQ))
++ break;
++ cpu_relax();
++ } while (time_before(jiffies, timeout));
++
++ if (status & SDMMC_STATUS_DMA_REQ) {
++ dev_err(host->dev,
++ "%s: Timeout waiting for dma_req to "
++ "clear during reset\n", __func__);
++ goto ciu_out;
++ }
++
++ /* when using DMA next we reset the fifo again */
++ if (!dw_mci_ctrl_reset(host, SDMMC_CTRL_FIFO_RESET))
++ goto ciu_out;
++ }
++ } else {
++ /* if the controller reset bit did clear, then set clock regs */
++ if (!(mci_readl(host, CTRL) & SDMMC_CTRL_RESET)) {
++ dev_err(host->dev, "%s: fifo/dma reset bits didn't "
++ "clear but ciu was reset, doing clock update\n",
++ __func__);
++ goto ciu_out;
++ }
++ }
++
++#if IS_ENABLED(CONFIG_MMC_DW_IDMAC)
++ /* It is also recommended that we reset and reprogram idmac */
++ dw_mci_idmac_reset(host);
++#endif
++
++ ret = true;
++
++ciu_out:
++ /* After a CTRL reset we need to have CIU set clock registers */
++ mci_send_cmd(host->cur_slot, SDMMC_CMD_UPD_CLK, 0);
++
++ return ret;
++}
++
++#ifdef CONFIG_OF
++static struct dw_mci_of_quirks {
++ char *quirk;
++ int id;
++} of_quirks[] = {
++ {
++ .quirk = "broken-cd",
++ .id = DW_MCI_QUIRK_BROKEN_CARD_DETECTION,
++ }, {
++ .quirk = "disable-wp",
++ .id = DW_MCI_QUIRK_NO_WRITE_PROTECT,
++ },
++};
++
++static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host)
++{
++ struct dw_mci_board *pdata;
++ struct device *dev = host->dev;
++ struct device_node *np = dev->of_node;
++ const struct dw_mci_drv_data *drv_data = host->drv_data;
++ int idx, ret;
++ u32 clock_frequency;
++
++ pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
++ if (!pdata) {
++ dev_err(dev, "could not allocate memory for pdata\n");
++ return ERR_PTR(-ENOMEM);
++ }
++
++ /* find out number of slots supported */
++ if (of_property_read_u32(dev->of_node, "num-slots",
++ &pdata->num_slots)) {
++ dev_info(dev, "num-slots property not found, "
++ "assuming 1 slot is available\n");
++ pdata->num_slots = 1;
++ }
++
++ /* get quirks */
++ for (idx = 0; idx < ARRAY_SIZE(of_quirks); idx++)
++ if (of_get_property(np, of_quirks[idx].quirk, NULL))
++ pdata->quirks |= of_quirks[idx].id;
++
++ if (of_property_read_u32(np, "fifo-depth", &pdata->fifo_depth))
++ dev_info(dev, "fifo-depth property not found, using "
++ "value of FIFOTH register as default\n");
++
++ of_property_read_u32(np, "card-detect-delay", &pdata->detect_delay_ms);
++
++ if (!of_property_read_u32(np, "clock-frequency", &clock_frequency))
++ pdata->bus_hz = clock_frequency;
++
++ if (drv_data && drv_data->parse_dt) {
++ ret = drv_data->parse_dt(host);
++ if (ret)
++ return ERR_PTR(ret);
++ }
++
++ if (of_find_property(np, "supports-highspeed", NULL))
++ pdata->caps |= MMC_CAP_SD_HIGHSPEED | MMC_CAP_MMC_HIGHSPEED;
++
++ return pdata;
++}
++
++#else /* CONFIG_OF */
++static struct dw_mci_board *dw_mci_parse_dt(struct dw_mci *host)
++{
++ return ERR_PTR(-EINVAL);
++}
++#endif /* CONFIG_OF */
++
++int dw_mci_probe(struct dw_mci *host)
++{
++ const struct dw_mci_drv_data *drv_data = host->drv_data;
++ int width, i, ret = 0;
++ u32 fifo_size;
++ int init_slots = 0;
++
++ if (!host->pdata) {
++ host->pdata = dw_mci_parse_dt(host);
++ if (IS_ERR(host->pdata)) {
++ dev_err(host->dev, "platform data not available\n");
++ return -EINVAL;
++ }
++ }
++
++ if (host->pdata->num_slots > 1) {
++ dev_err(host->dev,
++ "Platform data must supply num_slots.\n");
++ return -ENODEV;
++ }
++
++ host->biu_clk = devm_clk_get(host->dev, "biu");
++ if (IS_ERR(host->biu_clk)) {
++ dev_dbg(host->dev, "biu clock not available\n");
++ } else {
++ ret = clk_prepare_enable(host->biu_clk);
++ if (ret) {
++ dev_err(host->dev, "failed to enable biu clock\n");
++ return ret;
++ }
++ }
++
++ host->ciu_clk = devm_clk_get(host->dev, "ciu");
++ if (IS_ERR(host->ciu_clk)) {
++ dev_dbg(host->dev, "ciu clock not available\n");
++ host->bus_hz = host->pdata->bus_hz;
++ } else {
++ ret = clk_prepare_enable(host->ciu_clk);
++ if (ret) {
++ dev_err(host->dev, "failed to enable ciu clock\n");
++ goto err_clk_biu;
++ }
++
++ if (host->pdata->bus_hz) {
++ ret = clk_set_rate(host->ciu_clk, host->pdata->bus_hz);
++ if (ret)
++ dev_warn(host->dev,
++ "Unable to set bus rate to %uHz\n",
++ host->pdata->bus_hz);
++ }
++ host->bus_hz = clk_get_rate(host->ciu_clk);
++ }
++
++ if (!host->bus_hz) {
++ dev_err(host->dev,
++ "Platform data must supply bus speed\n");
++ ret = -ENODEV;
++ goto err_clk_ciu;
++ }
++
++ if (drv_data && drv_data->init) {
++ ret = drv_data->init(host);
++ if (ret) {
++ dev_err(host->dev,
++ "implementation specific init failed\n");
++ goto err_clk_ciu;
++ }
++ }
++
++ if (drv_data && drv_data->setup_clock) {
++ ret = drv_data->setup_clock(host);
++ if (ret) {
++ dev_err(host->dev,
++ "implementation specific clock setup failed\n");
++ goto err_clk_ciu;
++ }
++ }
++
++ host->quirks = host->pdata->quirks;
++
++ spin_lock_init(&host->lock);
++ INIT_LIST_HEAD(&host->queue);
++
++ /*
++ * Get the host data width - this assumes that HCON has been set with
++ * the correct values.
++ */
++ i = (mci_readl(host, HCON) >> 7) & 0x7;
++ if (!i) {
++ host->push_data = dw_mci_push_data16;
++ host->pull_data = dw_mci_pull_data16;
++ width = 16;
++ host->data_shift = 1;
++ } else if (i == 2) {
++ host->push_data = dw_mci_push_data64;
++ host->pull_data = dw_mci_pull_data64;
++ width = 64;
++ host->data_shift = 3;
++ } else {
++ /* Check for a reserved value, and warn if it is */
++ WARN((i != 1),
++ "HCON reports a reserved host data width!\n"
++ "Defaulting to 32-bit access.\n");
++ host->push_data = dw_mci_push_data32;
++ host->pull_data = dw_mci_pull_data32;
++ width = 32;
++ host->data_shift = 2;
++ }
++
++ /* Reset all blocks */
++ if (!dw_mci_ctrl_reset(host, SDMMC_CTRL_ALL_RESET_FLAGS))
++ return -ENODEV;
++
++ host->dma_ops = host->pdata->dma_ops;
++ dw_mci_init_dma(host);
++
++ /* Clear the interrupts for the host controller */
++ mci_writel(host, RINTSTS, 0xFFFFFFFF);
++ mci_writel(host, INTMASK, 0); /* disable all mmc interrupt first */
++
++ /* Put in max timeout */
++ mci_writel(host, TMOUT, 0xFFFFFFFF);
++
++ /*
++ * FIFO threshold settings RxMark = fifo_size / 2 - 1,
++ * Tx Mark = fifo_size / 2 DMA Size = 8
++ */
++ if (!host->pdata->fifo_depth) {
++ /*
++ * Power-on value of RX_WMark is FIFO_DEPTH-1, but this may
++ * have been overwritten by the bootloader, just like we're
++ * about to do, so if you know the value for your hardware, you
++ * should put it in the platform data.
++ */
++ fifo_size = mci_readl(host, FIFOTH);
++ fifo_size = 1 + ((fifo_size >> 16) & 0xfff);
++ } else {
++ fifo_size = host->pdata->fifo_depth;
++ }
++ host->fifo_depth = fifo_size;
++ host->fifoth_val =
++ SDMMC_SET_FIFOTH(0x2, fifo_size / 2 - 1, fifo_size / 2);
++ mci_writel(host, FIFOTH, host->fifoth_val);
++
++ /* disable clock to CIU */
++ mci_writel(host, CLKENA, 0);
++ mci_writel(host, CLKSRC, 0);
++
++ /*
++ * In 2.40a spec, Data offset is changed.
++ * Need to check the version-id and set data-offset for DATA register.
++ */
++ host->verid = SDMMC_GET_VERID(mci_readl(host, VERID));
++ dev_info(host->dev, "Version ID is %04x\n", host->verid);
++
++ if (host->verid < DW_MMC_240A)
++ host->data_offset = DATA_OFFSET;
++ else
++ host->data_offset = DATA_240A_OFFSET;
++
++ tasklet_init(&host->tasklet, dw_mci_tasklet_func, (unsigned long)host);
++ host->card_workqueue = alloc_workqueue("dw-mci-card",
++ WQ_MEM_RECLAIM, 1);
++ if (!host->card_workqueue) {
++ ret = -ENOMEM;
++ goto err_dmaunmap;
++ }
++ INIT_WORK(&host->card_work, dw_mci_work_routine_card);
++ ret = devm_request_irq(host->dev, host->irq, dw_mci_interrupt,
++ host->irq_flags, "dw-mci", host);
++ if (ret)
++ goto err_workqueue;
++
++ if (host->pdata->num_slots)
++ host->num_slots = host->pdata->num_slots;
++ else
++ host->num_slots = ((mci_readl(host, HCON) >> 1) & 0x1F) + 1;
++
++ /*
++ * Enable interrupts for command done, data over, data empty, card det,
++ * receive ready and error such as transmit, receive timeout, crc error
++ */
++ mci_writel(host, RINTSTS, 0xFFFFFFFF);
++ mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER |
++ SDMMC_INT_TXDR | SDMMC_INT_RXDR |
++ DW_MCI_ERROR_FLAGS | SDMMC_INT_CD);
++ mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE); /* Enable mci interrupt */
++
++ dev_info(host->dev, "DW MMC controller at irq %d, "
++ "%d bit host data width, "
++ "%u deep fifo\n",
++ host->irq, width, fifo_size);
++
++ /* We need at least one slot to succeed */
++ for (i = 0; i < host->num_slots; i++) {
++ ret = dw_mci_init_slot(host, i);
++ if (ret)
++ dev_dbg(host->dev, "slot %d init failed\n", i);
++ else
++ init_slots++;
++ }
++
++ if (init_slots) {
++ dev_info(host->dev, "%d slots initialized\n", init_slots);
++ } else {
++ dev_dbg(host->dev, "attempted to initialize %d slots, "
++ "but failed on all\n", host->num_slots);
++ goto err_workqueue;
++ }
++
++ if (host->quirks & DW_MCI_QUIRK_IDMAC_DTO)
++ dev_info(host->dev, "Internal DMAC interrupt fix enabled.\n");
++
++ return 0;
++
++err_workqueue:
++ destroy_workqueue(host->card_workqueue);
++
++err_dmaunmap:
++ if (host->use_dma && host->dma_ops->exit)
++ host->dma_ops->exit(host);
++
++err_clk_ciu:
++ if (!IS_ERR(host->ciu_clk))
++ clk_disable_unprepare(host->ciu_clk);
++
++err_clk_biu:
++ if (!IS_ERR(host->biu_clk))
++ clk_disable_unprepare(host->biu_clk);
++
++ return ret;
++}
++EXPORT_SYMBOL(dw_mci_probe);
++
++void dw_mci_remove(struct dw_mci *host)
++{
++ int i;
++
++ mci_writel(host, RINTSTS, 0xFFFFFFFF);
++ mci_writel(host, INTMASK, 0); /* disable all mmc interrupt first */
++
++ for (i = 0; i < host->num_slots; i++) {
++ dev_dbg(host->dev, "remove slot %d\n", i);
++ if (host->slot[i])
++ dw_mci_cleanup_slot(host->slot[i], i);
++ }
++
++ /* disable clock to CIU */
++ mci_writel(host, CLKENA, 0);
++ mci_writel(host, CLKSRC, 0);
++
++ destroy_workqueue(host->card_workqueue);
++
++ if (host->use_dma && host->dma_ops->exit)
++ host->dma_ops->exit(host);
++
++ if (!IS_ERR(host->ciu_clk))
++ clk_disable_unprepare(host->ciu_clk);
++
++ if (!IS_ERR(host->biu_clk))
++ clk_disable_unprepare(host->biu_clk);
++}
++EXPORT_SYMBOL(dw_mci_remove);
++
++
++
++#ifdef CONFIG_PM_SLEEP
++/*
++ * TODO: we should probably disable the clock to the card in the suspend path.
++ */
++int dw_mci_suspend(struct dw_mci *host)
++{
++ return 0;
++}
++EXPORT_SYMBOL(dw_mci_suspend);
++
++int dw_mci_resume(struct dw_mci *host)
++{
++ int i, ret;
++
++ if (!dw_mci_ctrl_reset(host, SDMMC_CTRL_ALL_RESET_FLAGS)) {
++ ret = -ENODEV;
++ return ret;
++ }
++
++ if (host->use_dma && host->dma_ops->init)
++ host->dma_ops->init(host);
++
++ /*
++ * Restore the initial value at FIFOTH register
++ * And Invalidate the prev_blksz with zero
++ */
++ mci_writel(host, FIFOTH, host->fifoth_val);
++ host->prev_blksz = 0;
++
++ /* Put in max timeout */
++ mci_writel(host, TMOUT, 0xFFFFFFFF);
++
++ mci_writel(host, RINTSTS, 0xFFFFFFFF);
++ mci_writel(host, INTMASK, SDMMC_INT_CMD_DONE | SDMMC_INT_DATA_OVER |
++ SDMMC_INT_TXDR | SDMMC_INT_RXDR |
++ DW_MCI_ERROR_FLAGS | SDMMC_INT_CD);
++ mci_writel(host, CTRL, SDMMC_CTRL_INT_ENABLE);
++
++ for (i = 0; i < host->num_slots; i++) {
++ struct dw_mci_slot *slot = host->slot[i];
++ if (!slot)
++ continue;
++ if (slot->mmc->pm_flags & MMC_PM_KEEP_POWER) {
++ dw_mci_set_ios(slot->mmc, &slot->mmc->ios);
++ dw_mci_setup_bus(slot, true);
++ }
++ }
++ return 0;
++}
++EXPORT_SYMBOL(dw_mci_resume);
++#endif /* CONFIG_PM_SLEEP */
++
++static int __init dw_mci_init(void)
++{
++ pr_info("Synopsys Designware Multimedia Card Interface Driver\n");
++ return 0;
++}
++
++static void __exit dw_mci_exit(void)
++{
++}
++
++module_init(dw_mci_init);
++module_exit(dw_mci_exit);
++
++MODULE_DESCRIPTION("DW Multimedia Card Interface driver");
++MODULE_AUTHOR("NXP Semiconductor VietNam");
++MODULE_AUTHOR("Imagination Technologies Ltd");
++MODULE_LICENSE("GPL v2");
+diff -Nur linux-3.18.8.orig/include/linux/mmc/host.h linux-3.18.8/include/linux/mmc/host.h
+--- linux-3.18.8.orig/include/linux/mmc/host.h 2015-02-27 02:49:36.000000000 +0100
++++ linux-3.18.8/include/linux/mmc/host.h 2015-03-02 03:25:33.000000000 +0100
+@@ -305,6 +305,11 @@
+ unsigned long clkgate_delay;
+ #endif
+
++ /* card specific properties to deal with power and reset */
++ struct regulator *card_regulator; /* External VCC needed by the card */
++ struct gpio_desc *card_reset_gpios[2]; /* External resets, active low */
++ struct clk *card_clk; /* External clock needed by the card */
++
+ /* host specific block data */
+ unsigned int max_seg_size; /* see blk_queue_max_segment_size */
+ unsigned short max_segs; /* see blk_queue_max_segments */
diff --git a/target/config/Config.in.adk b/target/config/Config.in.adk
index 86f38c2dd..90759cea2 100644
--- a/target/config/Config.in.adk
+++ b/target/config/Config.in.adk
@@ -110,4 +110,16 @@ config ADK_HOST_CYGWIN
bool "Cygwin"
endchoice
+
+config ADK_PRELINK
+ prompt "Prelink binaries and libraries in Image"
+ boolean
+ help
+ Do prelinking for faster loading of binaries.
+
+config ADK_PRELINK_OPTS
+ string "additional options to pass to prelink"
+ default "-mR"
+ depends on ADK_PRELINK
+
endmenu
diff --git a/target/config/Config.in.cpu b/target/config/Config.in.cpu
index f41204db4..a1fd577b9 100644
--- a/target/config/Config.in.cpu
+++ b/target/config/Config.in.cpu
@@ -81,13 +81,13 @@ config ADK_CPU_CORTEX_A7
bool
select ADK_TARGET_WITH_NPTL
select ADK_TARGET_WITH_MMU
- select ADK_TARGET_CPU_WITH_FPU_VFP4
+ select ADK_TARGET_CPU_WITH_FPU_VFPV4
config ADK_CPU_CORTEX_A9
bool
select ADK_TARGET_WITH_NPTL
select ADK_TARGET_WITH_MMU
- select ADK_TARGET_CPU_WITH_FPU_VFP3
+ select ADK_TARGET_CPU_WITH_FPU_VFPV3
config ADK_CPU_CORTEX_A53
bool
@@ -112,6 +112,21 @@ config ADK_CPU_GEODE
select ADK_TARGET_WITH_NPTL
select ADK_TARGET_WITH_MMU
+config ADK_CPU_I486
+ bool
+ select ADK_TARGET_WITH_NPTL
+ select ADK_TARGET_WITH_MMU
+
+config ADK_CPU_I586
+ bool
+ select ADK_TARGET_WITH_NPTL
+ select ADK_TARGET_WITH_MMU
+
+config ADK_CPU_I686
+ bool
+ select ADK_TARGET_WITH_NPTL
+ select ADK_TARGET_WITH_MMU
+
config ADK_CPU_LOONGSON2F
bool
select ADK_TARGET_WITH_NPTL
@@ -228,17 +243,14 @@ config ADK_TARGET_CPU_WITH_FPU
config ADK_TARGET_CPU_WITH_FPU_VFP
bool
select ADK_TARGET_CPU_WITH_FPU
- select ADK_fpu_vfp
-config ADK_TARGET_CPU_WITH_FPU_VFP3
+config ADK_TARGET_CPU_WITH_FPU_VFPV3
bool
select ADK_TARGET_CPU_WITH_FPU
- select ADK_fpu_vfp3
-config ADK_TARGET_CPU_WITH_FPU_VFP4
+config ADK_TARGET_CPU_WITH_FPU_VFPV4
bool
select ADK_TARGET_CPU_WITH_FPU
- select ADK_fpu_vfp4
config ADK_TARGET_CPU_WITH_VT
bool
@@ -283,42 +295,45 @@ config ADK_TARGET_GCC_CPU
string
default "440" if ADK_CPU_PPC_440
default "5208" if ADK_CPU_CF_5208
- default "amdfam10" if ADK_CPU_AMDFAM10
default "arc700" if ADK_CPU_ARC700
default "arcv2em" if ADK_CPU_ARCv2EM
default "arm1176jzf-s" if ADK_CPU_ARM1176JZF_S
default "arm926ej-s" if ADK_CPU_ARM926EJ_S
default "armv8-a" if ADK_CPU_ARMV8
- default "athlon" if ADK_CPU_ATHLON
- default "atom" if ADK_CPU_ATOM
default "cortex-a7" if ADK_CPU_CORTEX_A7
default "cortex-a9" if ADK_CPU_CORTEX_A9
default "cortex-a53" if ADK_CPU_CORTEX_A53
default "cortex-a57" if ADK_CPU_CORTEX_A57
default "cortex-m3" if ADK_CPU_CORTEX_M3
default "cortex-m4" if ADK_CPU_CORTEX_M4
- default "geode" if ADK_CPU_GEODE
- default "i486" if ADK_CPU_I486
- default "i586" if ADK_CPU_I586
- default "i686" if ADK_CPU_I686
- default "pentium-m" if ADK_CPU_PENTIUM_M
default "powerpc" if ADK_CPU_PPC
default "powerpc64" if ADK_CPU_PPC64
default "ultrasparc" if ADK_CPU_SPARC_V9
- default "v10" if ADK_CPU_CRIS_V10
- default "v32" if ADK_CPU_CRIS_V32
- default "v7.10.d" if ADK_CPU_MICROBLAZE
default "v8" if ADK_CPU_SPARC_V8
- default "x86-64" if ADK_CPU_X86_64
default "xscale" if ADK_CPU_XSCALE
config ADK_TARGET_GCC_ARCH
string
+ default "amdfam10" if ADK_CPU_AMDFAM10
+ default "athlon" if ADK_CPU_ATHLON
+ default "atom" if ADK_CPU_ATOM
+ default "geode" if ADK_CPU_GEODE
+ default "i486" if ADK_CPU_I486
+ default "i586" if ADK_CPU_I586
+ default "i686" if ADK_CPU_I686
default "loongson2f" if ADK_CPU_LOONGSON2F
default "mips32" if ADK_CPU_MIPS32
default "mips32r2" if ADK_CPU_MIPS32R2
default "mips64" if ADK_CPU_MIPS64
default "mips64r2" if ADK_CPU_MIPS64R2
+ default "pentium-m" if ADK_CPU_PENTIUM_M
+ default "x86-64" if ADK_CPU_X86_64
+
+config ADK_TARGET_CPU_FLAGS
+ string
+ default "-mcpu=v10" if ADK_CPU_CRIS_V10
+ default "-mcpu=v32" if ADK_CPU_CRIS_V32
+ default "-mcpu=v7.10.d" if ADK_CPU_MICROBLAZE
config ADK_TARGET_CPU_ARCH
string
diff --git a/target/config/Config.in.fpu.default b/target/config/Config.in.fpu.default
index 0fd8f616c..c55b0a602 100644
--- a/target/config/Config.in.fpu.default
+++ b/target/config/Config.in.fpu.default
@@ -4,7 +4,7 @@
config ADK_TARGET_FPU
string
depends on ADK_TARGET_ARCH_ARM
- default "vfp" if ADK_TARGET_CPU_WITH_FPU_VFP
- default "vfp3" if ADK_TARGET_CPU_WITH_FPU_VFP3
- default "vfp4" if ADK_TARGET_CPU_WITH_FPU_VFP4
default "neon" if ADK_TARGET_CPU_WITH_NEON
+ default "vfp" if ADK_TARGET_CPU_WITH_FPU_VFP
+ default "vfpv3" if ADK_TARGET_CPU_WITH_FPU_VFPV3
+ default "vfpv4" if ADK_TARGET_CPU_WITH_FPU_VFPV4
diff --git a/target/config/Config.in.kernelversion.choice b/target/config/Config.in.kernelversion.choice
index d2cbeb18e..3fc342096 100644
--- a/target/config/Config.in.kernelversion.choice
+++ b/target/config/Config.in.kernelversion.choice
@@ -4,14 +4,14 @@
choice
prompt "Kernel Version"
depends on ADK_TARGET_KERNEL_CUSTOMISING
-default ADK_KERNEL_VERSION_3_18_6
+default ADK_KERNEL_VERSION_3_18_8
config ADK_KERNEL_VERSION_3_19_0
bool "3.19"
select ADK_KERNEL_VERSION_3_19
-config ADK_KERNEL_VERSION_3_18_6
- bool "3.18.6"
+config ADK_KERNEL_VERSION_3_18_8
+ bool "3.18.8"
depends on !ADK_TARGET_SYSTEM_MIKROTIK_RB4XX
depends on !ADK_TARGET_ARCH_NIOS2
select ADK_KERNEL_VERSION_3_18
diff --git a/target/config/Config.in.kernelversion.default b/target/config/Config.in.kernelversion.default
index ca7eda996..f231d180a 100644
--- a/target/config/Config.in.kernelversion.default
+++ b/target/config/Config.in.kernelversion.default
@@ -28,7 +28,7 @@ config ADK_KERNEL_VERSION_2_6_32
config ADK_KERNEL_VERSION
string
default "3.19" if ADK_KERNEL_VERSION_3_19_0
- default "3.18.6" if ADK_KERNEL_VERSION_3_18_6
+ default "3.18.8" if ADK_KERNEL_VERSION_3_18_8
default "3.14.28" if ADK_KERNEL_VERSION_3_14_28
default "3.12.37" if ADK_KERNEL_VERSION_3_12_37
default "3.10.53" if ADK_KERNEL_VERSION_3_10_53
diff --git a/target/config/Config.in.libc.choice b/target/config/Config.in.libc.choice
index 572beae75..9a3587131 100644
--- a/target/config/Config.in.libc.choice
+++ b/target/config/Config.in.libc.choice
@@ -10,6 +10,7 @@ config ADK_TARGET_LIB_UCLIBC_NG
depends on \
!ADK_TARGET_ARCH_AARCH64 && \
!ADK_TARGET_ARCH_ALPHA && \
+ !ADK_TARGET_ARCH_MICROBLAZE && \
!ADK_TARGET_ARCH_NIOS2 && \
!ADK_TARGET_ARCH_SPARC64 && \
!ADK_TARGET_ARCH_PPC64 && \
diff --git a/target/config/Config.in.qemu b/target/config/Config.in.qemu
index e7b15818c..2e16341ba 100644
--- a/target/config/Config.in.qemu
+++ b/target/config/Config.in.qemu
@@ -35,8 +35,6 @@ depends on ADK_TARGET_SYSTEM_QEMU_ARM
config ADK_TARGET_QEMU_ARM_MODEL_VEXPRESS_A9
bool "ARM Ltd. Versatile Express with Cortex-A9"
select ADK_CPU_CORTEX_A9
- select ADK_TARGET_CPU_WITH_FPU
- select ADK_TARGET_CPU_WITH_FPU_NEON
config ADK_TARGET_QEMU_ARM_MODEL_STELLARIS_M3
bool "Stellaris LM3S6965EVB with Cortex-M3"
diff --git a/target/cris/uclibc.config b/target/cris/uclibc.config
index 5d952788d..6911ce9cc 100644
--- a/target/cris/uclibc.config
+++ b/target/cris/uclibc.config
@@ -89,9 +89,9 @@ UCLIBC_HAS_THREADS=y
PTHREADS_DEBUG_SUPPORT=y
UCLIBC_HAS_SYSLOG=y
UCLIBC_HAS_LFS=y
-MALLOC=y
+# MALLOC=y
# MALLOC_SIMPLE is not set
-# MALLOC_STANDARD is not set
+MALLOC_STANDARD=y
MALLOC_GLIBC_COMPAT=y
UCLIBC_HAS_OBSTACK=y
UCLIBC_DYNAMIC_ATEXIT=y
diff --git a/target/linux/config/Config.in.block b/target/linux/config/Config.in.block
index a72a95012..d9d13a616 100644
--- a/target/linux/config/Config.in.block
+++ b/target/linux/config/Config.in.block
@@ -411,7 +411,6 @@ config ADK_KERNEL_DM_CRYPT
select ADK_KERNEL_CRYPTO_CBC
select ADK_KERNEL_CRYPTO_BLKCIPHER
depends on ADK_KERNEL_BLK_DEV_DM
- default m if ADK_PACKAGE_CRYPTSETUP
default n
help
This device-mapper target allows you to create a device that
@@ -439,7 +438,6 @@ config ADK_KERNEL_BLK_DEV_DRBD
tristate "DRBD support (Network RAID 1)"
select ADK_KERNEL_BLK_DEV
select ADK_KERNEL_CONNECTOR
- default m if ADK_PACKAGE_DRBD
default n
help
DRBD - http://www.drbd.org
@@ -447,8 +445,6 @@ config ADK_KERNEL_BLK_DEV_DRBD
config ADK_KERNEL_BLK_DEV_LOOP
tristate "Loop mount support"
select ADK_KERNEL_BLK_DEV
- default m if ADK_PACKAGE_LOSETUP
- default m if ADK_PACKAGE_LTP
default n
help
Saying Y here will allow you to use a regular file as a block
diff --git a/target/linux/config/Config.in.cpu b/target/linux/config/Config.in.cpu
index fa4ead68d..797e1a60e 100644
--- a/target/linux/config/Config.in.cpu
+++ b/target/linux/config/Config.in.cpu
@@ -40,6 +40,18 @@ config ADK_KERNEL_CPU_FREQ_GOV_ONDEMAND
config ADK_KERNEL_CPU_FREQ_GOV_CONSERVATIVE
bool
+config ADK_KERNEL_ARM_IMX6Q_CPUFREQ
+ bool "CPU frequency support for IMX6 boards"
+ select ADK_KERNEL_CPU_FREQ
+ select ADK_KERNEL_REGULATOR
+ select ADK_KERNEL_REGULATOR_FIXED_VOLTAGE
+ select ADK_KERNEL_REGULATOR_ANATOP
+ select ADK_KERNEL_REGULATOR_PFUZE100
+ depends on ADK_TARGET_SYSTEM_SOLIDRUN_IMX6
+ depends on !ADK_KERNEL_VERSION_3_12
+ default y if ADK_TARGET_SYSTEM_SOLIDRUN_IMX6
+ default n
+
config ADK_KERNEL_ARM_IMX6_CPUFREQ
bool "CPU frequency support for IMX6 boards"
select ADK_KERNEL_CPU_FREQ
@@ -48,6 +60,7 @@ config ADK_KERNEL_ARM_IMX6_CPUFREQ
select ADK_KERNEL_REGULATOR_ANATOP
select ADK_KERNEL_REGULATOR_PFUZE100
depends on ADK_TARGET_SYSTEM_SOLIDRUN_IMX6
+ depends on ADK_KERNEL_VERSION_3_12
default y if ADK_TARGET_SYSTEM_SOLIDRUN_IMX6
default n
diff --git a/target/linux/config/Config.in.crypto b/target/linux/config/Config.in.crypto
index 3454077b0..8b1ceb056 100644
--- a/target/linux/config/Config.in.crypto
+++ b/target/linux/config/Config.in.crypto
@@ -154,9 +154,6 @@ config ADK_KERNEL_CRYPTO_CBC
tristate
select ADK_KERNEL_CRYPTO_BLKCIPHER
select ADK_KERNEL_CRYPTO_MANAGER
- default m if ADK_PACKAGE_CRYPTSETUP
- default m if ADK_PACKAGE_STRONGSWAN
- default m if ADK_PACKAGE_OPENSWAN
default n
help
CBC: Cipher Block Chaining mode
@@ -210,8 +207,6 @@ config ADK_KERNEL_CRYPTO_HMAC
tristate
select ADK_KERNEL_CRYPTO_HASH
select ADK_KERNEL_CRYPTO_MANAGER
- default m if ADK_PACKAGE_STRONGSWAN
- default m if ADK_PACKAGE_OPENSWAN
default n
help
HMAC: Keyed-Hashing for Message Authentication (RFC2104).
@@ -242,8 +237,6 @@ config ADK_KERNEL_CRYPTO_MD5
prompt "MD5 digest algorithm"
tristate
select ADK_KERNEL_CRYPTO_HASH
- default m if ADK_PACKAGE_STRONGSWAN
- default m if ADK_PACKAGE_OPENSWAN
default n
help
MD5 message digest algorithm (RFC1321).
@@ -252,8 +245,6 @@ config ADK_KERNEL_CRYPTO_SHA1
prompt "SHA1 digest algorithm"
tristate
select ADK_KERNEL_CRYPTO_HASH
- default m if ADK_PACKAGE_STRONGSWAN
- default m if ADK_PACKAGE_OPENSWAN
default n
help
SHA-1 secure hash standard (FIPS 180-1/DFIPS 180-2).
@@ -262,7 +253,6 @@ config ADK_KERNEL_CRYPTO_SHA256
prompt "SHA256 digest algorithm"
tristate
select ADK_KERNEL_CRYPTO_HASH
- default m if ADK_PACKAGE_CRYPTSETUP
default n
help
SHA256 secure hash standard (DFIPS 180-2).
@@ -444,8 +434,6 @@ config ADK_KERNEL_CRYPTO_DES
prompt "DES and Triple DES EDE cipher algorithms"
tristate
select ADK_KERNEL_CRYPTO_ALGAPI
- default m if ADK_PACKAGE_STRONGSWAN
- default m if ADK_PACKAGE_OPENSWAN
default n
help
DES cipher algorithm (FIPS 46-2), and Triple DES EDE (FIPS 46-3).
@@ -546,8 +534,6 @@ config ADK_KERNEL_CRYPTO_NULL
select ADK_KERNEL_CRYPTO_ALGAPI
select ADK_KERNEL_CRYPTO_BLKCIPHER
select ADK_KERNEL_CRYPTO_HASH
- default m if ADK_PACKAGE_STRONGSWAN
- default m if ADK_PACKAGE_OPENSWAN
default n
help
These are 'Null' algorithms, used by IPsec, which do nothing.
diff --git a/target/linux/config/Config.in.debug b/target/linux/config/Config.in.debug
index a2287f5f5..f2a00666e 100644
--- a/target/linux/config/Config.in.debug
+++ b/target/linux/config/Config.in.debug
@@ -123,7 +123,6 @@ config ADK_KERNEL_OPROFILE
tristate
select ADK_KERNEL_PROFILING
depends on !ADK_TARGET_ARCH_M68K
- default m if ADK_PACKAGE_OPROFILE
default n
help
use oprofile package to make use of the kernel support.
diff --git a/target/linux/config/Config.in.fs b/target/linux/config/Config.in.fs
index 5bf161bf6..6ff67959d 100644
--- a/target/linux/config/Config.in.fs
+++ b/target/linux/config/Config.in.fs
@@ -195,10 +195,6 @@ config ADK_KERNEL_BTRFS_FS
config ADK_KERNEL_FUSE_FS
prompt "Filesystem in Userspace support"
tristate
- default m if ADK_PACKAGE_DAVFS2
- default m if ADK_PACKAGE_FUSE
- default m if ADK_PACKAGE_NTFS_3G
- default m if ADK_PACKAGE_WDFS
default n
help
With FUSE it is possible to implement a fully functional
diff --git a/target/linux/config/Config.in.fsnet b/target/linux/config/Config.in.fsnet
index ad91da1e3..26f78090a 100644
--- a/target/linux/config/Config.in.fsnet
+++ b/target/linux/config/Config.in.fsnet
@@ -16,7 +16,6 @@ config ADK_KERNEL_CIFS
select ADK_KERNEL_CRYPTO_DES
select ADK_KERNEL_CRYPTO_SHA256
select ADK_KERNEL_NLS_UTF8
- default m if ADK_PACKAGE_CIFS_UTILS
default n
help
This is the client VFS module for the Common Internet File System
@@ -68,7 +67,6 @@ config ADK_KERNEL_NFS_FS
select ADK_KERNEL_SUNRPC
select ADK_KERNEL_LOCKD
select ADK_KERNEL_NETWORK_FILESYSTEMS
- default m if ADK_PACKAGE_NFS_UTILS_CLIENT
default n
help
If you are connected to some other (usually local) Unix computer
@@ -124,7 +122,6 @@ config ADK_KERNEL_NFSD
select ADK_KERNEL_SUNRPC
select ADK_KERNEL_LOCKD
select ADK_KERNEL_NETWORK_FILESYSTEMS
- default m if ADK_PACKAGE_NFS_UTILS_SERVER
default n
help
If you want your Linux box to act as an NFS *server*, so that other
@@ -175,7 +172,6 @@ config ADK_KERNEL_RPCSEC_GSS_KRB5
select ADK_KERNEL_CRYPTO_SHA1
select ADK_KERNEL_CRYPTO_AES
select ADK_KERNEL_CRYPTO_ARC4
- default m if ADK_PACKAGE_NFS_UTILS_V4
default n
help
diff --git a/target/linux/config/Config.in.graphics b/target/linux/config/Config.in.graphics
index dbd6185d0..3c8c683ef 100644
--- a/target/linux/config/Config.in.graphics
+++ b/target/linux/config/Config.in.graphics
@@ -71,7 +71,6 @@ config ADK_KERNEL_MXC_GPU_VIV
config ADK_KERNEL_MXC_ASRC
tristate
- default m if ADK_TARGET_SYSTEM_SOLIDRUN_IMX6
config ADK_KERNEL_MXC_HDMI_CEC
boolean
@@ -183,7 +182,6 @@ config ADK_KERNEL_DRM_DW_HDMI_AUDIO
tristate
depends on ADK_TARGET_SYSTEM_SOLIDRUN_IMX6
depends on ADK_KERNEL_VERSION_3_16
- #default m if ADK_TARGET_SYSTEM_SOLIDRUN_IMX6
default n
help
@@ -191,7 +189,6 @@ config ADK_KERNEL_DRM_DW_HDMI_CEC
tristate
depends on ADK_TARGET_SYSTEM_SOLIDRUN_IMX6
depends on ADK_KERNEL_VERSION_3_16
- #default m if ADK_TARGET_SYSTEM_SOLIDRUN_IMX6
default n
help
diff --git a/target/linux/config/Config.in.input b/target/linux/config/Config.in.input
index c636de8fa..0eeb235c4 100644
--- a/target/linux/config/Config.in.input
+++ b/target/linux/config/Config.in.input
@@ -145,8 +145,6 @@ config ADK_KERNEL_MOUSE_PS2
config ADK_KERNEL_INPUT_EVDEV
tristate "Event device support"
select ADK_KERNEL_INPUT
- default m if ADK_PACKAGE_XF86_INPUT_EVDEV
- default m if ADK_PACKAGE_XF86_INPUT_EVTOUCH
default n
endmenu
diff --git a/target/linux/config/Config.in.ipsec b/target/linux/config/Config.in.ipsec
index 8f0323291..da638c40c 100644
--- a/target/linux/config/Config.in.ipsec
+++ b/target/linux/config/Config.in.ipsec
@@ -3,8 +3,6 @@ menu "IPSec support"
config ADK_KERNEL_NET_KEY
prompt "PF_KEYv2 socket family"
tristate
- default m if ADK_PACKAGE_STRONGSWAN
- default m if ADK_PACKAGE_OPENSWAN
default n
help
PF_KEYv2 socket family, compatible to KAME ones.
@@ -12,8 +10,6 @@ config ADK_KERNEL_NET_KEY
config ADK_KERNEL_XFRM_USER
prompt "IPsec usertools support"
tristate
- default m if ADK_PACKAGE_STRONGSWAN
- default m if ADK_PACKAGE_OPENSWAN
default n
help
@@ -21,8 +17,6 @@ config ADK_KERNEL_INET_AH
prompt "IPsec AH support"
tristate
select ADK_KERNEL_CRYPTO_HASH
- default m if ADK_PACKAGE_STRONGSWAN
- default m if ADK_PACKAGE_OPENSWAN
default n
help
Support for IPsec AH.
@@ -31,8 +25,6 @@ config ADK_KERNEL_INET_ESP
prompt "IPsec ESP support"
tristate
select ADK_KERNEL_CRYPTO_AEAD
- default m if ADK_PACKAGE_STRONGSWAN
- default m if ADK_PACKAGE_OPENSWAN
default n
help
Support for IPsec ESP.
@@ -42,8 +34,6 @@ config ADK_KERNEL_INET_IPCOMP
tristate
select ADK_KERNEL_CRYPTO_DEFLATE
select ADK_KERNEL_INET_TUNNEL
- default m if ADK_PACKAGE_STRONGSWAN
- default m if ADK_PACKAGE_OPENSWAN
default n
help
Support for IP Payload Compression Protocol (IPComp) (RFC3173),
@@ -52,8 +42,6 @@ config ADK_KERNEL_INET_IPCOMP
config ADK_KERNEL_INET_XFRM_MODE_TRANSPORT
prompt "IPsec transport mode"
tristate
- default m if ADK_PACKAGE_STRONGSWAN
- default m if ADK_PACKAGE_OPENSWAN
default n
help
Support for IPsec transport mode.
@@ -61,8 +49,6 @@ config ADK_KERNEL_INET_XFRM_MODE_TRANSPORT
config ADK_KERNEL_INET_XFRM_MODE_TUNNEL
prompt "IPsec tunnel mode"
tristate
- default m if ADK_PACKAGE_STRONGSWAN
- default m if ADK_PACKAGE_OPENSWAN
default n
help
Support for IPsec tunnel mode.
diff --git a/target/linux/config/Config.in.ipvs b/target/linux/config/Config.in.ipvs
index 16106e7a3..b5526fe93 100644
--- a/target/linux/config/Config.in.ipvs
+++ b/target/linux/config/Config.in.ipvs
@@ -5,7 +5,6 @@ config ADK_KERNEL_IP_VS
tristate
select ADK_KERNEL_NETFILTER
select ADK_KERNEL_NF_CONNTRACK
- default m if ADK_PACKAGE_IPVSADM
default n
config ADK_KERNEL_IP_VS_DEBUG
diff --git a/target/linux/config/Config.in.kernel b/target/linux/config/Config.in.kernel
index 68dfae242..81f7cedeb 100644
--- a/target/linux/config/Config.in.kernel
+++ b/target/linux/config/Config.in.kernel
@@ -175,6 +175,10 @@ endchoice
menu "Kernel options"
+config ADK_KERNEL_BINFMT_FLAT
+ bool
+ default y if ADK_TARGET_BINFMT_FLAT
+
config ADK_KERNEL_MMU
bool
@@ -184,11 +188,13 @@ config ADK_KERNEL_VFP
config ADK_KERNEL_VFPv3
bool
- default y if ADK_TARGET_CPU_WITH_FPU_VFP3
+ select ADK_KERNEL_VFP
+ default y if ADK_TARGET_CPU_WITH_FPU_VFPV3
config ADK_KERNEL_VFPv4
bool
- default y if ADK_TARGET_CPU_WITH_FPU_VFP4
+ select ADK_KERNEL_VFP
+ default y if ADK_TARGET_CPU_WITH_FPU_VFPV4
config ADK_KERNEL_NEON
bool
diff --git a/target/linux/config/Config.in.netfilter.core b/target/linux/config/Config.in.netfilter.core
index 5a42efd04..4b3cb48eb 100644
--- a/target/linux/config/Config.in.netfilter.core
+++ b/target/linux/config/Config.in.netfilter.core
@@ -1,7 +1,6 @@
config ADK_KERNEL_NF_CONNTRACK
tristate 'Netfilter connection tracking support'
select ADK_KERNEL_NETFILTER_XTABLES
- default m if ADK_PACKAGE_IPTABLES
default n
help
Connection tracking keeps a record of what packets have passed
diff --git a/target/linux/config/Config.in.netfilter.ebt b/target/linux/config/Config.in.netfilter.ebt
index 76eeb5e7b..16d2cab5a 100644
--- a/target/linux/config/Config.in.netfilter.ebt
+++ b/target/linux/config/Config.in.netfilter.ebt
@@ -2,7 +2,6 @@ config ADK_KERNEL_BRIDGE_NF_EBTABLES
prompt 'Ethernet Bridge tables support'
tristate
select ADK_KERNEL_BRIDGE_NETFILTER
- default m if ADK_PACKAGE_EBTABLES
default n
help
ebtables is a general, extensible frame/packet identification
diff --git a/target/linux/config/Config.in.netfilter.ip4 b/target/linux/config/Config.in.netfilter.ip4
index 77617ea12..648a412a7 100644
--- a/target/linux/config/Config.in.netfilter.ip4
+++ b/target/linux/config/Config.in.netfilter.ip4
@@ -7,7 +7,6 @@ config ADK_KERNEL_NF_NAT_IPV4
config ADK_KERNEL_IP_NF_IPTABLES
tristate 'IP tables support'
select ADK_KERNEL_NETFILTER_XTABLES
- default m if ADK_PACKAGE_IPTABLES
default n
help
iptables is a general, extensible packet identification framework.
@@ -18,7 +17,6 @@ config ADK_KERNEL_IP_NF_IPTABLES
config ADK_KERNEL_IP_NF_FILTER
tristate 'IP Packet Filtering table support'
depends on ADK_KERNEL_IP_NF_IPTABLES
- default m if ADK_PACKAGE_IPTABLES
default n
help
Packet filtering defines a table `filter', which has a series of
@@ -31,7 +29,6 @@ config ADK_KERNEL_IP_NF_NAT
select ADK_KERNEL_NF_NAT
select ADK_KERNEL_NF_NAT_IPV4
depends on ADK_KERNEL_IP_NF_IPTABLES
- default m if ADK_PACKAGE_IPTABLES
default n
help
@@ -48,7 +45,6 @@ config ADK_KERNEL_NF_CONNTRACK_IPV4
tristate 'IP connection tracking support (required for NAT)'
select ADK_KERNEL_NF_CONNTRACK
select ADK_KERNEL_NETFILTER_XT_MATCH_CONNTRACK
- default m if ADK_PACKAGE_IPTABLES
default n
help
Connection tracking keeps a record of what packets have passed
@@ -70,7 +66,6 @@ menu "IP target support"
config ADK_KERNEL_IP_NF_TARGET_MASQUERADE
tristate 'MASQUERADE target support'
depends on ADK_KERNEL_NF_NAT
- default m if ADK_PACKAGE_IPTABLES
default n
help
Masquerading is a special case of NAT: all outgoing connections are
@@ -82,7 +77,6 @@ config ADK_KERNEL_IP_NF_TARGET_MASQUERADE
config ADK_KERNEL_IP_NF_TARGET_REJECT
tristate 'REJECT target support'
depends on ADK_KERNEL_IP_NF_FILTER
- default m if ADK_PACKAGE_IPTABLES
default n
help
The REJECT target allows a filtering rule to specify that an ICMP
diff --git a/target/linux/patches/3.18.6/microblaze-axi.patch b/target/linux/patches/3.18.6/microblaze-axi.patch
deleted file mode 100644
index 1a4b17d8c..000000000
--- a/target/linux/patches/3.18.6/microblaze-axi.patch
+++ /dev/null
@@ -1,11 +0,0 @@
-diff -Nur linux-3.13.3.orig/drivers/net/ethernet/xilinx/xilinx_axienet_main.c linux-3.13.3/drivers/net/ethernet/xilinx/xilinx_axienet_main.c
---- linux-3.13.3.orig/drivers/net/ethernet/xilinx/xilinx_axienet_main.c 2014-02-13 23:00:14.000000000 +0100
-+++ linux-3.13.3/drivers/net/ethernet/xilinx/xilinx_axienet_main.c 2014-02-24 08:03:57.000000000 +0100
-@@ -25,6 +25,7 @@
- #include <linux/init.h>
- #include <linux/module.h>
- #include <linux/netdevice.h>
-+#include <linux/of_irq.h>
- #include <linux/of_mdio.h>
- #include <linux/of_platform.h>
- #include <linux/of_address.h>
diff --git a/target/linux/patches/3.18.6/bsd-compatibility.patch b/target/linux/patches/3.18.8/bsd-compatibility.patch
index b954b658f..b954b658f 100644
--- a/target/linux/patches/3.18.6/bsd-compatibility.patch
+++ b/target/linux/patches/3.18.8/bsd-compatibility.patch
diff --git a/target/linux/patches/3.18.6/cleankernel.patch b/target/linux/patches/3.18.8/cleankernel.patch
index d8c055dc3..d8c055dc3 100644
--- a/target/linux/patches/3.18.6/cleankernel.patch
+++ b/target/linux/patches/3.18.8/cleankernel.patch
diff --git a/target/linux/patches/3.18.6/cris-header.patch b/target/linux/patches/3.18.8/cris-header.patch
index 3db07e530..3db07e530 100644
--- a/target/linux/patches/3.18.6/cris-header.patch
+++ b/target/linux/patches/3.18.8/cris-header.patch
diff --git a/target/linux/patches/3.18.6/defaults.patch b/target/linux/patches/3.18.8/defaults.patch
index 6cdca084e..6cdca084e 100644
--- a/target/linux/patches/3.18.6/defaults.patch
+++ b/target/linux/patches/3.18.8/defaults.patch
diff --git a/target/linux/patches/3.18.6/export-symbol-for-exmap.patch b/target/linux/patches/3.18.8/export-symbol-for-exmap.patch
index 4f0fc8449..4f0fc8449 100644
--- a/target/linux/patches/3.18.6/export-symbol-for-exmap.patch
+++ b/target/linux/patches/3.18.8/export-symbol-for-exmap.patch
diff --git a/target/linux/patches/3.18.6/gemalto.patch b/target/linux/patches/3.18.8/gemalto.patch
index 65f7af1d7..65f7af1d7 100644
--- a/target/linux/patches/3.18.6/gemalto.patch
+++ b/target/linux/patches/3.18.8/gemalto.patch
diff --git a/target/linux/patches/3.18.6/initramfs-nosizelimit.patch b/target/linux/patches/3.18.8/initramfs-nosizelimit.patch
index 40d2f6bd8..40d2f6bd8 100644
--- a/target/linux/patches/3.18.6/initramfs-nosizelimit.patch
+++ b/target/linux/patches/3.18.8/initramfs-nosizelimit.patch
diff --git a/target/linux/patches/3.18.6/lemote-rfkill.patch b/target/linux/patches/3.18.8/lemote-rfkill.patch
index a61488434..a61488434 100644
--- a/target/linux/patches/3.18.6/lemote-rfkill.patch
+++ b/target/linux/patches/3.18.8/lemote-rfkill.patch
diff --git a/target/linux/patches/3.18.6/microblaze-ethernet.patch b/target/linux/patches/3.18.8/microblaze-ethernet.patch
index 742ab477e..742ab477e 100644
--- a/target/linux/patches/3.18.6/microblaze-ethernet.patch
+++ b/target/linux/patches/3.18.8/microblaze-ethernet.patch
diff --git a/target/linux/patches/3.18.6/mkpiggy.patch b/target/linux/patches/3.18.8/mkpiggy.patch
index 751678b74..751678b74 100644
--- a/target/linux/patches/3.18.6/mkpiggy.patch
+++ b/target/linux/patches/3.18.8/mkpiggy.patch
diff --git a/target/linux/patches/3.18.6/mtd-rootfs.patch b/target/linux/patches/3.18.8/mtd-rootfs.patch
index 775d5fc80..775d5fc80 100644
--- a/target/linux/patches/3.18.6/mtd-rootfs.patch
+++ b/target/linux/patches/3.18.8/mtd-rootfs.patch
diff --git a/target/linux/patches/3.18.6/nfsv3-tcp.patch b/target/linux/patches/3.18.8/nfsv3-tcp.patch
index d5e07e1c2..d5e07e1c2 100644
--- a/target/linux/patches/3.18.6/nfsv3-tcp.patch
+++ b/target/linux/patches/3.18.8/nfsv3-tcp.patch
diff --git a/target/linux/patches/3.18.6/non-static.patch b/target/linux/patches/3.18.8/non-static.patch
index a967703d0..a967703d0 100644
--- a/target/linux/patches/3.18.6/non-static.patch
+++ b/target/linux/patches/3.18.8/non-static.patch
diff --git a/target/linux/patches/3.18.6/patch-fblogo b/target/linux/patches/3.18.8/patch-fblogo
index f1fad64c1..f1fad64c1 100644
--- a/target/linux/patches/3.18.6/patch-fblogo
+++ b/target/linux/patches/3.18.8/patch-fblogo
diff --git a/target/linux/patches/3.18.6/patch-yaffs2 b/target/linux/patches/3.18.8/patch-yaffs2
index bb244c7ca..bb244c7ca 100644
--- a/target/linux/patches/3.18.6/patch-yaffs2
+++ b/target/linux/patches/3.18.8/patch-yaffs2
diff --git a/target/linux/patches/3.18.6/ppc64-missing-zlib.patch b/target/linux/patches/3.18.8/ppc64-missing-zlib.patch
index c6e0616be..c6e0616be 100644
--- a/target/linux/patches/3.18.6/ppc64-missing-zlib.patch
+++ b/target/linux/patches/3.18.8/ppc64-missing-zlib.patch
diff --git a/target/linux/patches/3.18.6/regmap-bool.patch b/target/linux/patches/3.18.8/regmap-bool.patch
index 5c0ff5e2c..5c0ff5e2c 100644
--- a/target/linux/patches/3.18.6/regmap-bool.patch
+++ b/target/linux/patches/3.18.8/regmap-bool.patch
diff --git a/target/linux/patches/3.18.6/relocs.patch b/target/linux/patches/3.18.8/relocs.patch
index 69a7c88a9..69a7c88a9 100644
--- a/target/linux/patches/3.18.6/relocs.patch
+++ b/target/linux/patches/3.18.8/relocs.patch
diff --git a/target/linux/patches/3.18.6/sgidefs.patch b/target/linux/patches/3.18.8/sgidefs.patch
index f00a284d9..f00a284d9 100644
--- a/target/linux/patches/3.18.6/sgidefs.patch
+++ b/target/linux/patches/3.18.8/sgidefs.patch
diff --git a/target/linux/patches/3.18.6/sortext.patch b/target/linux/patches/3.18.8/sortext.patch
index 8fd4e1d6b..8fd4e1d6b 100644
--- a/target/linux/patches/3.18.6/sortext.patch
+++ b/target/linux/patches/3.18.8/sortext.patch
diff --git a/target/linux/patches/3.18.6/startup.patch b/target/linux/patches/3.18.8/startup.patch
index d396b75e4..d396b75e4 100644
--- a/target/linux/patches/3.18.6/startup.patch
+++ b/target/linux/patches/3.18.8/startup.patch
diff --git a/target/linux/patches/3.18.6/wlan-cf.patch b/target/linux/patches/3.18.8/wlan-cf.patch
index fc20759e2..fc20759e2 100644
--- a/target/linux/patches/3.18.6/wlan-cf.patch
+++ b/target/linux/patches/3.18.8/wlan-cf.patch
diff --git a/target/linux/patches/3.18.6/xargs.patch b/target/linux/patches/3.18.8/xargs.patch
index 2c7b3df59..2c7b3df59 100644
--- a/target/linux/patches/3.18.6/xargs.patch
+++ b/target/linux/patches/3.18.8/xargs.patch
diff --git a/target/m68k/qemu-m68k/patches/3.18.6/m68k-coldfire-fec.patch b/target/m68k/qemu-m68k/patches/3.18.8/m68k-coldfire-fec.patch
index ceaa21ce6..ceaa21ce6 100644
--- a/target/m68k/qemu-m68k/patches/3.18.6/m68k-coldfire-fec.patch
+++ b/target/m68k/qemu-m68k/patches/3.18.8/m68k-coldfire-fec.patch
diff --git a/target/m68k/qemu-m68k/patches/3.18.6/qemu-coldfire.patch b/target/m68k/qemu-m68k/patches/3.18.8/qemu-coldfire.patch
index 14d2f610b..14d2f610b 100644
--- a/target/m68k/qemu-m68k/patches/3.18.6/qemu-coldfire.patch
+++ b/target/m68k/qemu-m68k/patches/3.18.8/qemu-coldfire.patch
diff --git a/target/mips64/lemote-yeelong/patches/3.18.6/sm7xx-fb.patch b/target/mips64/lemote-yeelong/patches/3.18.8/sm7xx-fb.patch
index bcdec83cf..bcdec83cf 100644
--- a/target/mips64/lemote-yeelong/patches/3.18.6/sm7xx-fb.patch
+++ b/target/mips64/lemote-yeelong/patches/3.18.8/sm7xx-fb.patch
diff --git a/target/ppc/Makefile b/target/ppc/Makefile
index e1df1ef29..9a5529642 100644
--- a/target/ppc/Makefile
+++ b/target/ppc/Makefile
@@ -71,7 +71,7 @@ kernel-install: kernel-strip
@cp $(BUILD_DIR)/$(TARGET_KERNEL) $(FW_DIR)/${TARGET_KERNEL}
dtb-install:
- env $(KERNEL_MAKE_ENV) $(MAKE) -C $(LINUX_DIR) $(KERNEL_MAKE_OPTS) \
+ env $(KERNEL_MAKE_ENV) $(MAKE) $(KERNEL_MAKE_OPTS) \
-j${ADK_MAKE_JOBS} virtex440-ml507.dtb $(MAKE_TRACE)
$(CP) $(LINUX_DIR)/arch/powerpc/boot/virtex440-ml507.dtb \
$(FW_DIR)/ppc.dtb
diff --git a/toolchain/Makefile b/toolchain/Makefile
index 23f206ee7..e06e58de9 100644
--- a/toolchain/Makefile
+++ b/toolchain/Makefile
@@ -44,6 +44,9 @@ ifeq ($(ADK_TARGET_ARCH_ARC),)
TARGETS+=gdb
GDB:=gdb-install
endif
+ifeq (${ADK_PRELINK},y)
+TARGETS+=prelink-cross
+endif
DOWNLOAD:=kernel-headers-download $(patsubst %,%-download,$(TARGETS))
TARGETS_INSTALL:=$(patsubst %,%-install,$(TARGETS))
diff --git a/toolchain/elf2flt/Makefile.inc b/toolchain/elf2flt/Makefile.inc
index a3f39ab52..029237679 100644
--- a/toolchain/elf2flt/Makefile.inc
+++ b/toolchain/elf2flt/Makefile.inc
@@ -2,7 +2,7 @@
# material, please see the LICENCE file in the top-level directory.
PKG_NAME:= elf2flt
-PKG_VERSION:= 20150129
+PKG_VERSION:= 20150227
PKG_RELEASE:= 1
-PKG_HASH:= b0b9792723f380794c44db4124815f961f2cb87be156d4e2f560759f9f9f913b
+PKG_HASH:= 9369274cf244fc090ebee08ee6eee552fba1286f63be4a558dfa149dfa91fc4c
PKG_SITES:= http://www.openadk.org/distfiles/
diff --git a/toolchain/gcc/Makefile b/toolchain/gcc/Makefile
index f38ba051a..65899a334 100644
--- a/toolchain/gcc/Makefile
+++ b/toolchain/gcc/Makefile
@@ -4,6 +4,7 @@
include $(ADK_TOPDIR)/rules.mk
include ../rules.mk
include Makefile.inc
+include $(ADK_TOPDIR)/mk/os.mk
# disable SSP for libstdc++
ifeq ($(ADK_TARGET_LIB_MUSL),y)
@@ -182,6 +183,8 @@ endif
$(SED) '/k prot/agcc_cv_libc_provides_ssp=yes' $(WRKBUILD)/gcc/configure
cd $(GCC_BUILD_DIR_MINIMAL); \
PATH='$(TARGET_PATH)' \
+ CC='$(HOST_CC)' \
+ CXX='$(HOST_CXX)' \
CFLAGS="-O0 -g0 -fomit-frame-pointer" \
CXXFLAGS="-O0 -g0 -fomit-frame-pointer" \
$(WRKBUILD)/configure \
@@ -204,6 +207,8 @@ $(GCC_BUILD_DIR_INITIAL)/.configured:
mkdir -p $(GCC_BUILD_DIR_INITIAL)
cd $(GCC_BUILD_DIR_INITIAL); \
PATH='$(TARGET_PATH)' \
+ CC='$(HOST_CC)' \
+ CXX='$(HOST_CXX)' \
CFLAGS="-O0 -g0 -fomit-frame-pointer" \
CXXFLAGS="-O0 -g0 -fomit-frame-pointer" \
$(WRKBUILD)/configure \
@@ -227,6 +232,8 @@ $(GCC_BUILD_DIR_FINAL)/.configured:
mkdir -p $(GCC_BUILD_DIR_FINAL)
cd $(GCC_BUILD_DIR_FINAL); \
PATH='$(TARGET_PATH)' \
+ CC='$(HOST_CC)' \
+ CXX='$(HOST_CXX)' \
CFLAGS_FOR_TARGET='$(TARGET_CFLAGS)' \
CXXFLAGS_FOR_TARGET='$(TARGET_CXXFLAGS)' \
$(WRKBUILD)/configure \
diff --git a/toolchain/glibc/Makefile b/toolchain/glibc/Makefile
index 1faf1e639..75d2e70e9 100644
--- a/toolchain/glibc/Makefile
+++ b/toolchain/glibc/Makefile
@@ -18,6 +18,7 @@ ifeq (${ADK_MAKE_PARALLEL},y)
GLIBC_MAKEOPTS+= PARALLELMFLAGS="-j$(ADK_MAKE_JOBS)"
endif
+
GLIBC_BUILD_DIR_INITIAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-headers
GLIBC_BUILD_DIR_FINAL:= ${WRKDIR}/$(PKG_NAME)-$(PKG_VERSION)-final
@@ -54,7 +55,7 @@ $(WRKBUILD)/.configured:
touch $@
$(WRKBUILD)/.compiled:
- ${GLIBC_ENV} $(MAKE) ${GLIBC_MAKEOPTS} -C $(GLIBC_BUILD_DIR_FINAL) all
+ ${GLIBC_ENV} $(MAKE) ${GLIBC_MAKEOPTS} asm-CPPFLAGS='$${CFLAGS}' -C $(GLIBC_BUILD_DIR_FINAL) all
touch $@
$(WRKBUILD)/.installed:
diff --git a/toolchain/glibc/Makefile.inc b/toolchain/glibc/Makefile.inc
index f7e4c42b9..9ac7c711b 100644
--- a/toolchain/glibc/Makefile.inc
+++ b/toolchain/glibc/Makefile.inc
@@ -23,6 +23,7 @@ GLIBC_CONFOPTS:= --build=$(GNU_HOST_NAME) \
--host=$(GNU_TARGET_NAME) \
--with-headers=$(STAGING_TARGET_DIR)/usr/include \
--disable-sanity-checks \
+ --disable-werror \
--disable-nls \
--without-cvs \
--disable-profile \
diff --git a/toolchain/kernel-headers/Makefile b/toolchain/kernel-headers/Makefile
index 1b28c151a..1d24d3853 100644
--- a/toolchain/kernel-headers/Makefile
+++ b/toolchain/kernel-headers/Makefile
@@ -5,9 +5,14 @@ include $(ADK_TOPDIR)/rules.mk
include ../rules.mk
include $(ADK_TOPDIR)/mk/kernel-ver.mk
include $(ADK_TOPDIR)/mk/linux.mk
-include $(ADK_TOPDIR)/mk/kernel-vars.mk
include $(ADK_TOPDIR)/mk/buildhlp.mk
+# override linux dir here, as build_bla_bla/linux does not exist yet
+LINUX_DIR=${WRKBUILD}
+
+include $(ADK_TOPDIR)/mk/kernel-vars.mk
+
+
$(TOOLCHAIN_BUILD_DIR)/w-$(PKG_NAME)-$(PKG_VERSION)-$(PKG_RELEASE)/linux-$(KERNEL_VERSION)/.patched:
ifeq ($(ADK_TARGET_SYSTEM_PCENGINES_APU),y)
ifeq ($(ADK_KERNEL_ROOT_NFS),y)
@@ -60,8 +65,8 @@ endif
touch $@
$(WRKBUILD)/.headers: $(TOOLCHAIN_BUILD_DIR)/w-$(PKG_NAME)-$(PKG_VERSION)-$(PKG_RELEASE)/linux-$(KERNEL_VERSION)/.patched
- $(KERNEL_MAKE_ENV) $(MAKE) -C $(WRKBUILD) $(KERNEL_MAKE_OPTS) headers_check
- $(KERNEL_MAKE_ENV) $(MAKE) -C $(WRKBUILD) $(KERNEL_MAKE_OPTS) \
+ $(KERNEL_MAKE_ENV) $(MAKE) $(KERNEL_MAKE_OPTS) headers_check
+ $(KERNEL_MAKE_ENV) $(MAKE) $(KERNEL_MAKE_OPTS) \
INSTALL_HDR_PATH=$(STAGING_TARGET_DIR)/usr \
headers_install
ifeq ($(ADK_TARGET_ARCH_CRIS),y)
diff --git a/toolchain/prelink-cross/Config.in b/toolchain/prelink-cross/Config.in
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/toolchain/prelink-cross/Config.in
@@ -0,0 +1 @@
+
diff --git a/toolchain/prelink-cross/Makefile b/toolchain/prelink-cross/Makefile
new file mode 100644
index 000000000..d1cc58c07
--- /dev/null
+++ b/toolchain/prelink-cross/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 $(ADK_TOPDIR)/rules.mk
+include ../rules.mk
+include Makefile.inc
+include ${ADK_TOPDIR}/mk/buildhlp.mk
+
+$(WRKBUILD)/.headers:
+$(WRKBUILD)/.configured:
+ (cd $(WRKBUILD)/trunk; \
+ ./configure \
+ --prefix=$(STAGING_HOST_DIR) \
+ --build=$(GNU_HOST_NAME) \
+ --host=$(GNU_HOST_NAME) \
+ --target=$(REAL_GNU_TARGET_NAME) \
+ --disable-dependency-tracking \
+ --disable-libtool-lock \
+ --with-gnu-ld \
+ );
+ touch $@
+
+$(WRKBUILD)/.compiled:
+ $(MAKE) -C $(WRKBUILD)/trunk CFLAGS="-fPIC ${CFLAGS_FOR_BUILD}"
+ touch $@
+
+$(WRKBUILD)/.installed:
+ install -c ${WRKBUILD}/trunk/src/prelink \
+ ${TARGET_CROSS}prelink
+ install -c ${WRKBUILD}/trunk/src/prelink-rtld \
+ ${TARGET_CROSS}prelink-rtld
+ touch $@
+
+include ${ADK_TOPDIR}/mk/toolchain.mk
diff --git a/toolchain/prelink-cross/Makefile.inc b/toolchain/prelink-cross/Makefile.inc
new file mode 100644
index 000000000..634a18b84
--- /dev/null
+++ b/toolchain/prelink-cross/Makefile.inc
@@ -0,0 +1,8 @@
+# This file is part of the OpenADK project. OpenADK is copyrighted
+# material, please see the LICENCE file in the top-level directory.
+
+# this is branch cross_prelink_r185 in git
+PKG_NAME:= prelink-cross
+PKG_VERSION:= 909470ee441237563d6236c505cb2d02ddc48704
+PKG_RELEASE:= 1
+PKG_SITES:= git://git.yoctoproject.org/prelink-cross