From 904ea40fb709a5bb86d512e5144cb172933cc299 Mon Sep 17 00:00:00 2001 From: nico Date: Sun, 2 May 2010 12:06:58 +0000 Subject: [PATCH 01/28] [backfire] backport r21293 (closes: #6918) git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21295 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../003-fix_memcpy_export_on_x86_64.patch | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 target/linux/uml/patches-2.6.30/003-fix_memcpy_export_on_x86_64.patch diff --git a/target/linux/uml/patches-2.6.30/003-fix_memcpy_export_on_x86_64.patch b/target/linux/uml/patches-2.6.30/003-fix_memcpy_export_on_x86_64.patch new file mode 100644 index 000000000..7d2efe462 --- /dev/null +++ b/target/linux/uml/patches-2.6.30/003-fix_memcpy_export_on_x86_64.patch @@ -0,0 +1,11 @@ +--- a/arch/um/os-Linux/user_syms.c ++++ b/arch/um/os-Linux/user_syms.c +@@ -23,7 +23,7 @@ extern int printf(const char *, ...); + EXPORT_SYMBOL(strstr); + #endif + +-#ifndef __x86_64__ ++#if !defined(__x86_64) || (__GNUC__ == 4 && __GNUC_MINOR__ < 3) || (__GNUC__ < 4) + extern void *memcpy(void *, const void *, size_t); + EXPORT_SYMBOL(memcpy); + #endif From 8c2892ec8b0b221d9e323345224f0c662b27cf8e Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 2 May 2010 19:31:29 +0000 Subject: [PATCH 02/28] backport r21307 to backfire git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21312 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- target/linux/ar7/base-files/etc/config/network | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/linux/ar7/base-files/etc/config/network b/target/linux/ar7/base-files/etc/config/network index 88ddee028..9ba0e6d29 100644 --- a/target/linux/ar7/base-files/etc/config/network +++ b/target/linux/ar7/base-files/etc/config/network @@ -8,7 +8,7 @@ config interface loopback config interface lan option type bridge - option ifname eth0 + option ifname "eth0 eth1" option proto static option ipaddr 192.168.1.1 option netmask 255.255.255.0 From 09df0283cac917af8a40c526c0cfaed47a908fe5 Mon Sep 17 00:00:00 2001 From: florian Date: Sun, 2 May 2010 19:52:16 +0000 Subject: [PATCH 03/28] backport r21313 to backfire git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21314 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/acx/Makefile | 2 +- package/acx/patches/006-netdev_ops.patch | 47 +++++++++++++++++++----- 2 files changed, 38 insertions(+), 11 deletions(-) diff --git a/package/acx/Makefile b/package/acx/Makefile index 64725be26..caa55c577 100644 --- a/package/acx/Makefile +++ b/package/acx/Makefile @@ -25,7 +25,7 @@ include $(INCLUDE_DIR)/package.mk define KernelPackage/acx TITLE:=Driver for TI ACX1xx chipset - DEPENDS:=@LINUX_2_6 @TARGET_ar7 +wireless-tools + DEPENDS:=@LINUX_2_6 @PCI_SUPPORT||TARGET_ar7 +wireless-tools URL:=http://acx100.sourceforge.net/ SUBMENU:=Wireless Drivers FILES:= $(PKG_BUILD_DIR)/acx.$(LINUX_KMOD_SUFFIX) diff --git a/package/acx/patches/006-netdev_ops.patch b/package/acx/patches/006-netdev_ops.patch index 210e92935..b687c211c 100644 --- a/package/acx/patches/006-netdev_ops.patch +++ b/package/acx/patches/006-netdev_ops.patch @@ -1,10 +1,12 @@ ---- a/pci.c -+++ b/pci.c -@@ -4135,6 +4135,18 @@ static struct vlynq_device_id acx_vlynq_ - { 0, 0, 0 }, - }; +Index: acx-20080210/pci.c +=================================================================== +--- acx-20080210.orig/pci.c 2010-05-02 21:37:00.000000000 +0200 ++++ acx-20080210/pci.c 2010-05-02 21:48:22.000000000 +0200 +@@ -1437,6 +1437,18 @@ -+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,31) + static void dummy_netdev_init(struct net_device *ndev) {} + ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,30) +static const struct net_device_ops acx_netdev_ops = { + .ndo_open = &acxpci_e_open, + .ndo_stop = &acxpci_e_close, @@ -16,14 +18,39 @@ +}; +#endif + - static __devinit int vlynq_probe(struct vlynq_device *vdev, - struct vlynq_device_id *id) + #ifdef CONFIG_PCI + static int __devinit acxpci_e_probe(struct pci_dev *pdev, const struct pci_device_id *id) { -@@ -4191,17 +4203,24 @@ static __devinit int vlynq_probe(struct +@@ -1547,17 +1559,21 @@ + } + + ether_setup(ndev); ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30)) + ndev->open = &acxpci_e_open; + ndev->stop = &acxpci_e_close; + ndev->hard_start_xmit = &acx_i_start_xmit; + ndev->get_stats = &acx_e_get_stats; ++ ndev->set_multicast_list = &acxpci_i_set_multicast_list; ++ ndev->tx_timeout = &acxpci_i_tx_timeout; ++ ndev->change_mtu = &acx_e_change_mtu; ++#else ++ ndev->netdev_ops = &acx_netdev_ops; ++#endif + #if IW_HANDLER_VERSION <= 5 + ndev->get_wireless_stats = &acx_e_get_wireless_stats; + #endif + ndev->wireless_handlers = (struct iw_handler_def *)&acx_ioctl_handler_def; +- ndev->set_multicast_list = &acxpci_i_set_multicast_list; +- ndev->tx_timeout = &acxpci_i_tx_timeout; +- ndev->change_mtu = &acx_e_change_mtu; + ndev->watchdog_timeo = 4 * HZ; + ndev->irq = pdev->irq; + ndev->base_addr = pci_resource_start(pdev, 0); +@@ -4191,17 +4207,24 @@ goto fail_alloc_netdev; } ether_setup(ndev); -+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31) ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) ndev->open = &acxpci_e_open; ndev->stop = &acxpci_e_close; ndev->hard_start_xmit = &acx_i_start_xmit; From 80737b583d0becd2e8d6f9182bc4d03eb680d04a Mon Sep 17 00:00:00 2001 From: nico Date: Sun, 2 May 2010 23:05:23 +0000 Subject: [PATCH 04/28] [backfire] merge [21237:21239] & [21244] git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21322 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- Config.in | 490 ++++++++++++++++----------------- include/image.mk | 191 +++++++------ scripts/metadata.pl | 2 +- target/Config.in | 2 +- target/linux/ar71xx/Makefile | 2 +- target/linux/cobalt/Makefile | 2 +- target/linux/kirkwood/Makefile | 2 +- target/linux/rb532/Makefile | 2 +- target/linux/x86/Makefile | 2 +- target/linux/xburst/Makefile | 2 +- 10 files changed, 357 insertions(+), 340 deletions(-) diff --git a/Config.in b/Config.in index ffe1147f4..e4c133f40 100644 --- a/Config.in +++ b/Config.in @@ -13,66 +13,55 @@ config HAVE_DOT_CONFIG source "target/Config.in" menu "Target Images" - config TARGET_ROOTFS_INITRAMFS + + menuconfig TARGET_ROOTFS_INITRAMFS bool "ramdisk" default y if USES_INITRAMFS depends LINUX_2_6 help Embed the rootfs into the kernel (initramfs) - choice - prompt "ramdisk compression" - depends TARGET_ROOTFS_INITRAMFS - depends !LINUX_2_6_25 - default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ar71xx - default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ramips - default TARGET_INITRAMFS_COMPRESSION_NONE + choice + prompt "Compression" + default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ar71xx + default TARGET_INITRAMFS_COMPRESSION_LZMA if TARGET_ramips + default TARGET_INITRAMFS_COMPRESSION_NONE + depends TARGET_ROOTFS_INITRAMFS + depends !LINUX_2_6_25 + help + Select ramdisk compression. + + config TARGET_INITRAMFS_COMPRESSION_NONE + bool "none" + + config TARGET_INITRAMFS_COMPRESSION_GZIP + bool "gzip" + + config TARGET_INITRAMFS_COMPRESSION_BZIP2 + bool "bzip2" + + config TARGET_INITRAMFS_COMPRESSION_LZMA + bool "lzma" + + config TARGET_INITRAMFS_COMPRESSION_LZO + bool "lzo" + endchoice + + comment "Root filesystem archives" + + config TARGET_ROOTFS_CPIOGZ + bool "cpio.gz" + default y if USES_CPIOGZ help - Select ramdisk compression. + Build a compressed cpio archive of the the root filesystem - config TARGET_INITRAMFS_COMPRESSION_NONE - bool "NONE" - - config TARGET_INITRAMFS_COMPRESSION_GZIP - bool "GZIP" - - config TARGET_INITRAMFS_COMPRESSION_BZIP2 - bool "BZIP2" - - config TARGET_INITRAMFS_COMPRESSION_LZMA - bool "LZMA" - - config TARGET_INITRAMFS_COMPRESSION_LZO - bool "LZO" - endchoice - - config TARGET_ROOTFS_JFFS2 - bool "jffs2" - default y if USES_JFFS2 - depends !TARGET_ROOTFS_INITRAMFS - help - Build a jffs2 root filesystem - - config TARGET_ROOTFS_SQUASHFS - bool "squashfs" - default y if USES_SQUASHFS - depends !TARGET_ROOTFS_INITRAMFS - help - Build a squashfs-lzma root filesystem - - config TARGET_ROOTFS_TGZ - bool "tgz" - default y if USES_TGZ - depends !TARGET_ROOTFS_INITRAMFS + config TARGET_ROOTFS_TARGZ + bool "tar.gz" + default y if USES_TARGZ help Build a compressed tar archive of the the root filesystem - config TARGET_ROOTFS_CPIOGZ - bool "cpiogz" - default y if USES_CPIOGZ - depends !TARGET_ROOTFS_INITRAMFS - help - Build a compressed cpio archive of the the root filesystem + comment "Root filesystem images" config TARGET_ROOTFS_EXT2FS bool "ext2" @@ -88,6 +77,20 @@ menu "Target Images" help Create some bootable ISO image + config TARGET_ROOTFS_JFFS2 + bool "jffs2" + default y if USES_JFFS2 + depends !TARGET_ROOTFS_INITRAMFS + help + Build a jffs2 root filesystem + + config TARGET_ROOTFS_SQUASHFS + bool "squashfs" + default y if USES_SQUASHFS + depends !TARGET_ROOTFS_INITRAMFS + help + Build a squashfs-lzma root filesystem + config TARGET_ROOTFS_UBIFS bool "ubifs" default y if USES_UBIFS @@ -95,155 +98,157 @@ menu "Target Images" help Build a ubifs root filesystem -comment "Image Options" + comment "Image Options" -source "target/linux/*/image/Config.in" + source "target/linux/*/image/Config.in" - config TARGET_ROOTFS_FSPART - int "Filesystem part size (in MB)" - depends X86_GRUB_IMAGES || TARGET_ROOTFS_EXT2FS || TARGET_rb532 || TARGET_olpc - default 48 - help - Allows you to change the filesystem partition size + config TARGET_ROOTFS_FSPART + int "Root filesystem partition size (in MB)" + depends X86_GRUB_IMAGES || TARGET_ROOTFS_EXT2FS || TARGET_rb532 + default 48 + help + Allows you to change the root filesystem partition size - config TARGET_ROOTFS_MAXINODE - int "Maximum number of inodes in filesystem" - depends TARGET_ROOTFS_EXT2FS - default 6000 - help - Allows you to change the maximum number of inodes in the filesystem + config TARGET_ROOTFS_MAXINODE + int "Maximum number of inodes in root filesystem" + depends TARGET_ROOTFS_EXT2FS + default 6000 + help + Allows you to change the maximum number of inodes in the root filesystem endmenu menu "Global build settings" -config ALL - bool "Select all packages by default" - default n + config ALL + bool "Select all packages by default" + default n -comment "General build options" + comment "General build options" -config CLEAN_IPKG - bool - prompt "Disable ipkg/opkg installation on the target" - default n - help - This removes all ipkg data from the target directory before building the root fs - -config LARGEFILE - bool - prompt "Enable large file (files > 2 GB) support" - default y - help - Enable large file (files > 2 GB) support. - -config SHADOW_PASSWORDS - bool - prompt "Enable shadow password support" - default y - help - Enable shadow password support. - -choice - prompt "Binary stripping method" - default USE_STRIP if EXTERNAL_TOOLCHAIN - default USE_STRIP if USE_GLIBC || USE_EGLIBC - default USE_SSTRIP - help - Select the binary stripping method you wish to use. - - config NO_STRIP - bool "none" + config BUILD_PATENTED + default y + bool "Compile with support for patented functionality" help - This will install unstripped binaries (useful for native compiling/debugging) + When this option is disabled, software which provides patented functionality will not be built. + In case software provides optional support for patented functionality, + this optional support will get disabled for this package. - config USE_STRIP - bool "strip" + config LARGEFILE + bool + prompt "Enable large file (files > 2 GB) support" + default y help - This will install binaries stripped using strip from binutils + Enable large file (files > 2 GB) support. - - config USE_SSTRIP - bool "sstrip" - depends !DEBUG - depends !USE_GLIBC - depends !USE_EGLIBC + config SHADOW_PASSWORDS + bool + prompt "Enable shadow password support" + default y help - This will install binaries stripped using sstrip -endchoice + Enable shadow password support. -config BUILD_PATENTED - default y - bool "Compile with support for patented functionality" - help - When this option is disabled, software which provides patented functionality will not be built. - In case software provides optional support for patented functionality, - this optional support will get disabled for this package. + config CLEAN_IPKG + bool + prompt "Remove ipkg/opkg status data files in final images" + default n + help + This removes all ipkg/opkg status data files from the target directory before building the root fs -config STRIP_ARGS - string - prompt "Strip arguments" - depends USE_STRIP - default "--strip-unneeded --remove-section=.comment --remove-section=.note" if DEBUG - default "--strip-all" - help - Specifies arguments passed to the strip command when stripping binaries + comment "Kernel build options" -config USE_MKLIBS - bool "Strip unnecessary functions from libraries" - help - Reduces libraries to only those functions that are necessary for using all - selected packages (including those selected as ) - Note that this will make the system libraries incompatible with most of the packages - that are not selected during the build process + config KERNEL_DEBUG_FS + bool "Compile the kernel with Debug FileSystem enabled" + default y + depends LINUX_2_6 + help + debugfs is a virtual file system that kernel developers use to put + debugging files into. Enable this option to be able to read and + write to these files. -config STRIP_KERNEL_EXPORTS - depends LINUX_2_6 - bool "Strip unnecessary exports from the kernel image" - help - Reduces kernel size by stripping unused kernel exports from the kernel image - Note that this might make the kernel incompatible with any kernel modules that - were not selected at the time the kernel image was created + config KERNEL_PROFILING + bool "Compile the kernel with profiling enabled" + default n + help + Enable the extended profiling support mechanisms used by profilers such + as OProfile. -comment "Package build options" + config KERNEL_KALLSYMS + bool "Compile the kernel with symbol table information" + default n + help + This will give you more information in stack traces from kernel oopses -config DEBUG - bool - prompt "Compile packages with debugging info" - default n - help - Adds -g3 to the CFLAGS + comment "Package build options" -config IPV6 - bool - prompt "Enable IPv6 support in packages" - default n - help - Enable IPV6 support in packages (passes --enable-ipv6 to configure scripts). + config DEBUG + bool + prompt "Compile packages with debugging info" + default n + help + Adds -g3 to the CFLAGS -comment "Kernel build options" + config IPV6 + bool + prompt "Enable IPv6 support in packages" + default n + help + Enable IPV6 support in packages (passes --enable-ipv6 to configure scripts). -config KERNEL_KALLSYMS - bool "Compile the kernel with symbol table information" - default n - help - This will give you more information in stack traces from kernel oopses + comment "Stripping options" -config KERNEL_PROFILING - bool "Compile the kernel with profiling enabled" - default n - help - Enable the extended profiling support mechanisms used by profilers such - as OProfile. + choice + prompt "Binary stripping method" + default USE_STRIP if EXTERNAL_TOOLCHAIN + default USE_STRIP if USE_GLIBC || USE_EGLIBC + default USE_SSTRIP + help + Select the binary stripping method you wish to use. -config KERNEL_DEBUG_FS - bool "Compile the kernel with Debug Filesystem enabled" - depends LINUX_2_6 - default y - help - debugfs is a virtual file system that kernel developers use to put - debugging files into. Enable this option to be able to read and - write to these files. + config NO_STRIP + bool "none" + help + This will install unstripped binaries (useful for native compiling/debugging) + + config USE_STRIP + bool "strip" + help + This will install binaries stripped using strip from binutils + + + config USE_SSTRIP + bool "sstrip" + depends !DEBUG + depends !USE_GLIBC + depends !USE_EGLIBC + help + This will install binaries stripped using sstrip + endchoice + + config STRIP_ARGS + string + prompt "Strip arguments" + depends USE_STRIP + default "--strip-unneeded --remove-section=.comment --remove-section=.note" if DEBUG + default "--strip-all" + help + Specifies arguments passed to the strip command when stripping binaries + + config STRIP_KERNEL_EXPORTS + depends LINUX_2_6 + bool "Strip unnecessary exports from the kernel image" + help + Reduces kernel size by stripping unused kernel exports from the kernel image + Note that this might make the kernel incompatible with any kernel modules that + were not selected at the time the kernel image was created + + config USE_MKLIBS + bool "Strip unnecessary functions from libraries" + help + Reduces libraries to only those functions that are necessary for using all + selected packages (including those selected as ) + Note that this will make the system libraries incompatible with most of the packages + that are not selected during the build process endmenu @@ -251,97 +256,84 @@ menuconfig DEVEL bool "Advanced configuration options (for developers)" default n -config BROKEN - bool - prompt "Show broken platforms / packages" if DEVEL - default n + config BROKEN + bool "Show broken platforms / packages" if DEVEL + default n -config DOWNLOAD_FOLDER - string - prompt "Download folder" if DEVEL - default "" + config DOWNLOAD_FOLDER + string "Download folder" if DEVEL + default "" -config LOCALMIRROR - string - prompt "Local mirror for source packages" if DEVEL + config LOCALMIRROR + string "Local mirror for source packages" if DEVEL + default "" -config AUTOREBUILD - bool - prompt "Automatic rebuild of packages" if DEVEL - default y - help - Automatically rebuild packages when their files change + config AUTOREBUILD + bool "Automatic rebuild of packages" if DEVEL + default y + help + Automatically rebuild packages when their files change -config BUILD_SUFFIX - string - prompt "Build suffix to append to the BUILD_DIR variable" if DEVEL - default "" - help - Build suffix to append to the BUILD_DIR variable, i.e: build_dir_suffix + config BUILD_SUFFIX + string "Build suffix to append to the BUILD_DIR variable" if DEVEL + default "" + help + Build suffix to append to the BUILD_DIR variable, i.e: build_dir_suffix -config TARGET_ROOTFS_DIR - string - prompt "Override the default TARGET_ROOTFS_DIR variable" if DEVEL - default "" - help - Override the default TARGET_ROOTFS_DIR variable content $(BUILD_DIR) with custom path. - Use this option to re-define the location of the target root file system directory. + config TARGET_ROOTFS_DIR + string "Override the default TARGET_ROOTFS_DIR variable" if DEVEL + default "" + help + Override the default TARGET_ROOTFS_DIR variable content $(BUILD_DIR) with custom path. + Use this option to re-define the location of the target root file system directory. -config CCACHE - bool - prompt "Use ccache" if DEVEL - default n - help - Compiler cache; see http://ccache.samba.org/ + config CCACHE + bool "Use ccache" if DEVEL + default n + help + Compiler cache; see http://ccache.samba.org/ -config EXTERNAL_KERNEL_TREE - string - prompt "Use external kernel tree" if DEVEL - default "" + config EXTERNAL_KERNEL_TREE + string "Use external kernel tree" if DEVEL + default "" -config KERNEL_GIT_CLONE_URI - string - prompt "Enter git repository to clone" if DEVEL - default "" - help - Enter the full git repository path i.e.: - git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git - This will create a git clone of the kernel in your build - directory. - -config KERNEL_GIT_LOCAL_REPOSITORY - string - prompt "Enter path to local reference repository" if DEVEL - default "" - help - Enter a full pathname to a local reference git repository. - In this instance, the --refererence option of git clone will - be used thus creating a quick local clone of your repo. + config KERNEL_GIT_CLONE_URI + string "Enter git repository to clone" if DEVEL + default "" + help + Enter the full git repository path i.e.: + git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git + This will create a git clone of the kernel in your build + directory. + config KERNEL_GIT_LOCAL_REPOSITORY + string "Enter path to local reference repository" if DEVEL + default "" + help + Enter a full pathname to a local reference git repository. + In this instance, the --refererence option of git clone will + be used thus creating a quick local clone of your repo. menuconfig TARGET_OPTIONS bool "Target Options" if DEVEL -config TARGET_OPTIMIZATION - string - prompt "Target Optimizations" if TARGET_OPTIONS - default DEFAULT_TARGET_OPTIMIZATION - help - Optimizations to use when building for the target host. + config TARGET_OPTIMIZATION + string "Target Optimizations" if TARGET_OPTIONS + default DEFAULT_TARGET_OPTIMIZATION + help + Optimizations to use when building for the target host. -config SOFT_FLOAT - bool - prompt "Use software floating point by default" if TARGET_OPTIONS - default y - depends on (arm || armeb || powerpc || mipsel || mips) && !HAS_FPU - help - If your target CPU does not have a Floating Point Unit (FPU) or a - kernel FPU emulator, but you still wish to support floating point - functions, then everything will need to be compiled with soft floating - point support (-msoft-float). - - Most people will answer N. + config SOFT_FLOAT + bool "Use software floating point by default" if TARGET_OPTIONS + default y + depends on (arm || armeb || powerpc || mipsel || mips) && !HAS_FPU + help + If your target CPU does not have a Floating Point Unit (FPU) or a + kernel FPU emulator, but you still wish to support floating point + functions, then everything will need to be compiled with soft floating + point support (-msoft-float). + Most people will answer N. source "toolchain/Config.in" @@ -350,5 +342,3 @@ source "target/sdk/Config.in" source "target/toolchain/Config.in" source "tmp/.config-package.in" - - diff --git a/include/image.mk b/include/image.mk index 98e32b349..de5f4d84c 100644 --- a/include/image.mk +++ b/include/image.mk @@ -17,23 +17,42 @@ KDIR=$(KERNEL_BUILD_DIR) IMG_PREFIX:=openwrt-$(BOARD)$(if $(SUBTARGET),-$(SUBTARGET)) -ifneq ($(CONFIG_BIG_ENDIAN),y) -JFFS2OPTS := --pad --little-endian --squash -SQUASHFS_OPTS := -le +ifneq ($(CONFIG_BIG_ENDIAN),) + JFFS2OPTS := --pad --big-endian --squash -v + SQUASHFS_OPTS := -be else -JFFS2OPTS := --pad --big-endian --squash -SQUASHFS_OPTS := -be + JFFS2OPTS := --pad --little-endian --squash -v + SQUASHFS_OPTS := -le +endif + +ifeq ($(CONFIG_JFFS2_RTIME),y) + JFFS2OPTS += -X rtime +endif +ifeq ($(CONFIG_JFFS2_ZLIB),y) + JFFS2OPTS += -X zlib +endif +ifeq ($(CONFIG_JFFS2_LZMA),y) + JFFS2OPTS += -X lzma --compression-mode=size +endif +ifneq ($(CONFIG_JFFS2_RTIME),y) + JFFS2OPTS += -x rtime +endif +ifneq ($(CONFIG_JFFS2_ZLIB),y) + JFFS2OPTS += -x zlib +endif +ifneq ($(CONFIG_JFFS2_LZMA),y) + JFFS2OPTS += -x lzma endif ifneq ($(CONFIG_LINUX_2_4)$(CONFIG_LINUX_2_6_25),) -USE_SQUASHFS3 := y + USE_SQUASHFS3 := y endif ifneq ($(USE_SQUASHFS3),) -MKSQUASHFS_CMD := $(STAGING_DIR_HOST)/bin/mksquashfs-lzma + MKSQUASHFS_CMD := $(STAGING_DIR_HOST)/bin/mksquashfs-lzma else -MKSQUASHFS_CMD := $(STAGING_DIR_HOST)/bin/mksquashfs4 -SQUASHFS_OPTS := -comp lzma -processors 1 + MKSQUASHFS_CMD := $(STAGING_DIR_HOST)/bin/mksquashfs4 + SQUASHFS_OPTS := -comp lzma -processors 1 endif JFFS2_BLOCKSIZE ?= 64k 128k @@ -55,8 +74,17 @@ define prepare_generic_squashfs rm -f $(KDIR)/tmpfile.* endef -ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) - ifeq ($(CONFIG_TARGET_ROOTFS_JFFS2),y) + +ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),) + + define Image/BuildKernel + cp $(KDIR)/vmlinux.elf $(BIN_DIR)/$(IMG_PREFIX)-vmlinux.elf + $(call Image/Build/Initramfs) + endef + +else + + ifneq ($(CONFIG_TARGET_ROOTFS_JFFS2),) define Image/mkfs/jffs2/sub # FIXME: removing this line will cause strange behaviour in the foreach loop below $(STAGING_DIR_HOST)/bin/mkfs.jffs2 $(JFFS2OPTS) -e $(patsubst %k,%KiB,$(1)) -o $(KDIR)/root.jffs2-$(1) -d $(TARGET_DIR) @@ -68,7 +96,7 @@ ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) endef endif - ifeq ($(CONFIG_TARGET_ROOTFS_SQUASHFS),y) + ifneq ($(CONFIG_TARGET_ROOTFS_SQUASHFS),) define Image/mkfs/squashfs @mkdir -p $(TARGET_DIR)/overlay $(MKSQUASHFS_CMD) $(TARGET_DIR) $(KDIR)/root.squashfs -nopad -noappend -root-owned $(SQUASHFS_OPTS) @@ -76,18 +104,7 @@ ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) endef endif - ifeq ($(CONFIG_TARGET_ROOTFS_TGZ),y) - define Image/mkfs/tgz - $(TAR) -zcf $(BIN_DIR)/$(IMG_PREFIX)-rootfs.tgz --numeric-owner --owner=0 --group=0 -C $(TARGET_DIR)/ . - endef - endif - - ifeq ($(CONFIG_TARGET_ROOTFS_CPIOGZ),y) - define Image/mkfs/cpiogz - ( cd $(TARGET_DIR); find . | cpio -o -H newc | gzip -9 >$(BIN_DIR)/$(IMG_PREFIX)-rootfs.cpio.gz ) - endef - endif - ifeq ($(CONFIG_TARGET_ROOTFS_UBIFS),y) + ifneq ($(CONFIG_TARGET_ROOTFS_UBIFS),) define Image/mkfs/ubifs $(CP) ./ubinize.cfg $(KDIR) $(STAGING_DIR_HOST)/bin/mkfs.ubifs $(UBIFS_OPTS) -o $(KDIR)/root.ubifs -d $(TARGET_DIR) @@ -96,22 +113,22 @@ ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) $(call Image/Build,ubi) endef endif -else - define Image/BuildKernel - cp $(KDIR)/vmlinux.elf $(BIN_DIR)/$(IMG_PREFIX)-vmlinux.elf - $(call Image/Build/Initramfs) + +endif + +ifneq ($(CONFIG_TARGET_ROOTFS_CPIOGZ),) + define Image/mkfs/cpiogz + ( cd $(TARGET_DIR); find . | cpio -o -H newc | gzip -9 >$(BIN_DIR)/$(IMG_PREFIX)-rootfs.cpio.gz ) endef endif -define Image/Checksum - ( cd ${BIN_DIR} ; \ - $(FIND) -maxdepth 1 -type f \! -name 'md5sums' -printf "%P\n" | sort | xargs \ - md5sum --binary > md5sums \ - ) -endef +ifneq ($(CONFIG_TARGET_ROOTFS_TARGZ),) + define Image/mkfs/targz + $(TAR) -zcf $(BIN_DIR)/$(IMG_PREFIX)-rootfs.tar.gz --numeric-owner --owner=0 --group=0 -C $(TARGET_DIR)/ . + endef +endif - -ifeq ($(CONFIG_TARGET_ROOTFS_EXT2FS),y) +ifneq ($(CONFIG_TARGET_ROOTFS_EXT2FS),) E2SIZE=$(shell echo $$(($(CONFIG_TARGET_ROOTFS_FSPART)*1024))) define Image/mkfs/ext2 @@ -120,7 +137,7 @@ ifeq ($(CONFIG_TARGET_ROOTFS_EXT2FS),y) endef endif -ifeq ($(CONFIG_TARGET_ROOTFS_ISO),y) +ifneq ($(CONFIG_TARGET_ROOTFS_ISO),) define Image/mkfs/iso $(call Image/Build,iso) endef @@ -139,52 +156,62 @@ define Image/mkfs/prepare $(call Image/mkfs/prepare/default) endef -define BuildImage -download: -prepare: -ifneq ($(IB),1) - compile: compile-targets FORCE - $(call Build/Compile) -else - compile: -endif -ifneq ($(IB),1) - install: compile install-targets FORCE - $(call Image/Prepare) - $(call Image/mkfs/prepare) - $(call Image/BuildKernel) - $(call Image/mkfs/jffs2) - $(call Image/mkfs/squashfs) - $(call Image/mkfs/tgz) - $(call Image/mkfs/cpiogz) - $(call Image/mkfs/ext2) - $(call Image/mkfs/iso) - $(call Image/mkfs/ubifs) - $(call Image/Checksum) -else - install: compile install-targets - $(call Image/BuildKernel) - $(call Image/mkfs/jffs2) - $(call Image/mkfs/squashfs) - $(call Image/mkfs/tgz) - $(call Image/mkfs/cpiogz) - $(call Image/mkfs/ext2) - $(call Image/mkfs/iso) - $(call Image/mkfs/ubifs) - $(call Image/Checksum) -endif - -ifneq ($(IB),1) - clean: clean-targets - $(call Build/Clean) -else - clean: -endif - -compile-targets: -install-targets: -clean-targets: +define Image/Checksum + ( cd ${BIN_DIR} ; \ + $(FIND) -maxdepth 1 -type f \! -name 'md5sums' -printf "%P\n" | sort | xargs \ + md5sum --binary > md5sums \ + ) endef +define BuildImage + + download: + prepare: + + ifeq ($(IB),) + compile: compile-targets FORCE + $(call Build/Compile) + else + compile: + endif + + ifeq ($(IB),) + install: compile install-targets FORCE + $(call Image/Prepare) + $(call Image/mkfs/prepare) + $(call Image/BuildKernel) + $(call Image/mkfs/cpiogz) + $(call Image/mkfs/targz) + $(call Image/mkfs/ext2) + $(call Image/mkfs/iso) + $(call Image/mkfs/jffs2) + $(call Image/mkfs/squashfs) + $(call Image/mkfs/ubifs) + $(call Image/Checksum) + else + install: compile install-targets + $(call Image/BuildKernel) + $(call Image/mkfs/cpiogz) + $(call Image/mkfs/targz) + $(call Image/mkfs/ext2) + $(call Image/mkfs/iso) + $(call Image/mkfs/jffs2) + $(call Image/mkfs/squashfs) + $(call Image/mkfs/ubifs) + $(call Image/Checksum) + endif + + ifeq ($(IB),) + clean: clean-targets + $(call Build/Clean) + else + clean: + endif + + compile-targets: + install-targets: + clean-targets: + +endef diff --git a/scripts/metadata.pl b/scripts/metadata.pl index 70d1b4025..d76a295ee 100755 --- a/scripts/metadata.pl +++ b/scripts/metadata.pl @@ -162,7 +162,7 @@ sub target_config_features(@) { /squashfs/ and $ret .= "\tselect USES_SQUASHFS\n"; /jffs2/ and $ret .= "\tselect USES_JFFS2\n"; /ext2/ and $ret .= "\tselect USES_EXT2\n"; - /tgz/ and $ret .= "\tselect USES_TGZ\n"; + /targz/ and $ret .= "\tselect USES_TARGZ\n"; /cpiogz/ and $ret .= "\tselect USES_CPIOGZ\n"; /ubifs/ and $ret .= "\tselect USES_UBIFS\n"; /fpu/ and $ret .= "\tselect HAS_FPU\n"; diff --git a/target/Config.in b/target/Config.in index f881245c6..48fd82732 100644 --- a/target/Config.in +++ b/target/Config.in @@ -49,7 +49,7 @@ config USES_JFFS2 config USES_EXT2 bool -config USES_TGZ +config USES_TARGZ bool config USES_CPIOGZ diff --git a/target/linux/ar71xx/Makefile b/target/linux/ar71xx/Makefile index 74f409478..d1519feac 100644 --- a/target/linux/ar71xx/Makefile +++ b/target/linux/ar71xx/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk ARCH:=mips BOARD:=ar71xx BOARDNAME:=Atheros AR71xx/AR7240/AR913x -FEATURES:=squashfs jffs2 tgz +FEATURES:=squashfs jffs2 targz CFLAGS:=-Os -pipe -mips32r2 -mtune=mips32r2 -funit-at-a-time LINUX_VERSION:=2.6.32.10 diff --git a/target/linux/cobalt/Makefile b/target/linux/cobalt/Makefile index d09117764..6c0746cc2 100644 --- a/target/linux/cobalt/Makefile +++ b/target/linux/cobalt/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk ARCH:=mipsel BOARD:=cobalt BOARDNAME:=Cobalt Microservers -FEATURES:=tgz pci ext2 +FEATURES:=targz pci ext2 CFLAGS:=-O2 -pipe -mtune=r5000 -funit-at-a-time LINUX_VERSION:=2.6.32.10 diff --git a/target/linux/kirkwood/Makefile b/target/linux/kirkwood/Makefile index a1e9e5f57..13f38af45 100644 --- a/target/linux/kirkwood/Makefile +++ b/target/linux/kirkwood/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk ARCH:=arm BOARD:=kirkwood BOARDNAME:=Marvell Kirkwood -FEATURES:=tgz usb +FEATURES:=targz usb LINUX_VERSION:=2.6.30.10 diff --git a/target/linux/rb532/Makefile b/target/linux/rb532/Makefile index 3b2716d8a..23c7e7646 100644 --- a/target/linux/rb532/Makefile +++ b/target/linux/rb532/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk ARCH:=mipsel BOARD:=rb532 BOARDNAME:=Mikrotik RouterBoard 532 -FEATURES:=jffs2 pci tgz +FEATURES:=jffs2 pci targz LINUX_VERSION:=2.6.32.10 diff --git a/target/linux/x86/Makefile b/target/linux/x86/Makefile index 4cf011af7..2870e19ce 100644 --- a/target/linux/x86/Makefile +++ b/target/linux/x86/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk ARCH:=i386 BOARD:=x86 BOARDNAME:=x86 -FEATURES:=squashfs jffs2 ext2 vdi vmdk pcmcia tgz +FEATURES:=squashfs jffs2 ext2 vdi vmdk pcmcia targz SUBTARGETS=generic olpc xen_domu ep80579 LINUX_VERSION:=2.6.32.10 diff --git a/target/linux/xburst/Makefile b/target/linux/xburst/Makefile index f118b7cdb..4614eca94 100644 --- a/target/linux/xburst/Makefile +++ b/target/linux/xburst/Makefile @@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk ARCH:=mipsel BOARD:=xburst BOARDNAME:=Ingenic XBurst -FEATURES:=jffs2 tgz ubifs audio +FEATURES:=jffs2 targz ubifs audio SUBTARGETS:=qi_lb60 n516 n526 LINUX_VERSION:=2.6.32.10 From 8348627e8ad5ec2a2ac0002f35528fdeacced6f3 Mon Sep 17 00:00:00 2001 From: nico Date: Mon, 3 May 2010 00:07:17 +0000 Subject: [PATCH 05/28] [backfire] merge r21242 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21324 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- include/package-version-override.mk | 4 ++-- target/linux/avr32/image/u-boot/Makefile | 2 +- target/linux/x86/image/Makefile | 10 ++++------ 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/include/package-version-override.mk b/include/package-version-override.mk index f18ecd7bf..eaaa3520f 100644 --- a/include/package-version-override.mk +++ b/include/package-version-override.mk @@ -3,7 +3,7 @@ PKG_VERSION_ORGINAL:=$(PKG_VERSION) # in case that another version is provided, overwrite the original ifeq ($(CONFIG_$(PKG_NAME)_USE_CUSTOM_VERSION),y) -PKG_VERSION:= $(strip $(subst ",, $(CONFIG_$(PKG_NAME)_CUSTOM_VERSION))) +PKG_VERSION:=$(call qstrip,$(CONFIG_$(PKG_NAME)_CUSTOM_VERSION)) PKG_SOURCE:=$(subst $(PKG_VERSION_ORGINAL),$(PKG_VERSION),$(PKG_SOURCE)) PKG_MD5SUM:= endif @@ -26,7 +26,7 @@ endef # in case that an customer source path is provided, set the acc. default variable ifeq ($(CONFIG_$(PKG_NAME)_USE_CUSTOM_SOURCE_DIR),y) -PKG_DEFAULT_CUSTOM_SOURCE_DIR:= $(strip $(subst ",, $(CONFIG_$(PKG_NAME)_CUSTOM_SOURCE_DIR))) +PKG_DEFAULT_CUSTOM_SOURCE_DIR:= $(call qstrip,$(CONFIG_$(PKG_NAME)_CUSTOM_SOURCE_DIR)) endif # package specific configuration diff --git a/target/linux/avr32/image/u-boot/Makefile b/target/linux/avr32/image/u-boot/Makefile index 2d95b8769..79bdb9f6e 100644 --- a/target/linux/avr32/image/u-boot/Makefile +++ b/target/linux/avr32/image/u-boot/Makefile @@ -20,7 +20,7 @@ PKG_CAT:=bzcat include $(INCLUDE_DIR)/package.mk -UBOOT_CONFIG=$(strip $(subst ",, $(CONFIG_AVR32_UBOOT_TARGET))) +UBOOT_CONFIG=$(call qstrip,$(CONFIG_AVR32_UBOOT_TARGET)) define Build/Compile $(MAKE) -C $(PKG_BUILD_DIR) $(UBOOT_CONFIG)_config diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile index 2a6a2e336..a4399a2b4 100644 --- a/target/linux/x86/image/Makefile +++ b/target/linux/x86/image/Makefile @@ -10,15 +10,13 @@ include $(INCLUDE_DIR)/image.mk export PATH=$(TARGET_PATH):/sbin ifneq ($(CONFIG_TARGET_x86_olpc),y) -BOOTOPTS=$(strip $(subst ",, $(CONFIG_X86_GRUB_BOOTOPTS))) -ROOTPART=$(strip $(subst ",, $(CONFIG_X86_GRUB_ROOTPART))) -#"))")) # fix vim's broken syntax highlighting +BOOTOPTS=$(call qstrip,$(CONFIG_X86_GRUB_BOOTOPTS)) +ROOTPART=$(call qstrip,$(CONFIG_X86_GRUB_ROOTPART)) endif ifeq ($(CONFIG_TARGET_x86_olpc),y) -ROOTPART=$(strip $(subst ",, $(CONFIG_OLPC_BOOTSCRIPT_ROOTPART))) +ROOTPART=$(call qstrip,$(CONFIG_OLPC_BOOTSCRIPT_ROOTPART)) endif -#"))")) # fix vim's broken syntax highlighting GRUB_TERMINALS = GRUB_SERIAL_CONFIG = @@ -31,7 +29,7 @@ GRUB_TERMINALS += console endif ifneq ($(CONFIG_X86_GRUB_SERIAL),) -GRUB_CONSOLE_CMDLINE += console=$(strip $(subst ",, $(CONFIG_X86_GRUB_SERIAL))),$(CONFIG_X86_GRUB_BAUDRATE)n8 +GRUB_CONSOLE_CMDLINE += console=$(call qstrip,$(CONFIG_X86_GRUB_SERIAL)),$(CONFIG_X86_GRUB_BAUDRATE)n8 GRUB_SERIAL_CONFIG = serial --unit=0 --speed=$(CONFIG_X86_GRUB_BAUDRATE) --word=8 --parity=no --stop=1 GRUB_TERMINALS += serial endif From e31c663591f07e71a19a0e3b04e7e22a5d6f4c35 Mon Sep 17 00:00:00 2001 From: nico Date: Mon, 3 May 2010 00:16:36 +0000 Subject: [PATCH 06/28] [backfire] merge r21245, r21246 & r21277 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21325 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- target/linux/x86/image/Makefile | 152 +++++++++++++++++--------------- 1 file changed, 83 insertions(+), 69 deletions(-) diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile index a4399a2b4..912dae235 100644 --- a/target/linux/x86/image/Makefile +++ b/target/linux/x86/image/Makefile @@ -9,42 +9,37 @@ include $(INCLUDE_DIR)/image.mk export PATH=$(TARGET_PATH):/sbin -ifneq ($(CONFIG_TARGET_x86_olpc),y) -BOOTOPTS=$(call qstrip,$(CONFIG_X86_GRUB_BOOTOPTS)) -ROOTPART=$(call qstrip,$(CONFIG_X86_GRUB_ROOTPART)) -endif - -ifeq ($(CONFIG_TARGET_x86_olpc),y) -ROOTPART=$(call qstrip,$(CONFIG_OLPC_BOOTSCRIPT_ROOTPART)) -endif - GRUB_TERMINALS = GRUB_SERIAL_CONFIG = GRUB_TERMINAL_CONFIG = GRUB_CONSOLE_CMDLINE = -ifeq ($(CONFIG_X86_GRUB_CONSOLE),y) -GRUB_CONSOLE_CMDLINE += console=tty0 -GRUB_TERMINALS += console +ifneq ($(CONFIG_X86_GRUB_CONSOLE),) + GRUB_CONSOLE_CMDLINE += console=tty0 + GRUB_TERMINALS += console endif ifneq ($(CONFIG_X86_GRUB_SERIAL),) -GRUB_CONSOLE_CMDLINE += console=$(call qstrip,$(CONFIG_X86_GRUB_SERIAL)),$(CONFIG_X86_GRUB_BAUDRATE)n8 -GRUB_SERIAL_CONFIG = serial --unit=0 --speed=$(CONFIG_X86_GRUB_BAUDRATE) --word=8 --parity=no --stop=1 -GRUB_TERMINALS += serial + GRUB_CONSOLE_CMDLINE += console=$(call qstrip,$(CONFIG_X86_GRUB_SERIAL)),$(CONFIG_X86_GRUB_BAUDRATE)n8 + GRUB_SERIAL_CONFIG := serial --unit=0 --speed=$(CONFIG_X86_GRUB_BAUDRATE) --word=8 --parity=no --stop=1 + GRUB_TERMINALS += serial endif ifneq ($(GRUB_TERMINALS),) -GRUB_TERMINAL_CONFIG = terminal --timeout=2 $(GRUB_TERMINALS) + GRUB_TERMINAL_CONFIG := terminal --timeout=2 $(GRUB_TERMINALS) endif -ifeq ($(CONFIG_X86_GRUB_IMAGES),y) -ifneq ($(HOST_OS),Darwin) - define Image/cmdline/squashfs - block2mtd.block2mtd=$(ROOTPART),65536,rootfs root=/dev/mtdblock0 rootfstype=squashfs rootwait - endef +ifneq ($(CONFIG_X86_GRUB_IMAGES),) + ifneq ($(HOST_OS),Darwin) + BOOTOPTS:=$(call qstrip,$(CONFIG_X86_GRUB_BOOTOPTS)) + ROOTPART:=$(call qstrip,$(CONFIG_X86_GRUB_ROOTPART)) + + define Image/cmdline/ext2 + root=$(ROOTPART) rootfstype=ext2 rootwait + endef + define Image/cmdline/jffs2-64k block2mtd.block2mtd=$(ROOTPART),65536,rootfs root=/dev/mtdblock0 rootfstype=jffs2 rootwait endef @@ -53,10 +48,10 @@ ifneq ($(HOST_OS),Darwin) block2mtd.block2mtd=$(ROOTPART),131072,rootfs root=/dev/mtdblock0 rootfstype=jffs2 rootwait endef - define Image/cmdline/ext2 - root=$(ROOTPART) rootfstype=ext2 rootwait + define Image/cmdline/squashfs + block2mtd.block2mtd=$(ROOTPART),65536,rootfs root=/dev/mtdblock0 rootfstype=squashfs rootwait endef - + define Image/Build/grub # left here because the image builder doesnt need these $(INSTALL_DIR) $(KDIR)/root.grub/boot/grub @@ -69,7 +64,10 @@ ifneq ($(HOST_OS),Darwin) -e 's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \ -e 's#@CMDLINE@#$(strip $(call Image/cmdline/$(1)) $(BOOTOPTS) $(GRUB_CONSOLE_CMDLINE))#g' \ ./menu.lst > $(KDIR)/root.grub/boot/grub/menu.lst - PADDING="$(CONFIG_X86_GRUB_IMAGES_PAD)" PATH="$(TARGET_PATH)" ./gen_image_x86.sh $(BIN_DIR)/$(IMG_PREFIX)-$(1).image $(CONFIG_X86_GRUB_KERNELPART) $(KDIR)/root.grub $(CONFIG_TARGET_ROOTFS_FSPART) $(KDIR)/root.$(1) + PADDING="$(CONFIG_X86_GRUB_IMAGES_PAD)" PATH="$(TARGET_PATH)" ./gen_image_x86.sh \ + $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \ + $(CONFIG_X86_GRUB_KERNELPART) $(KDIR)/root.grub \ + $(CONFIG_TARGET_ROOTFS_FSPART) $(KDIR)/root.$(1) $(call Image/Build/grub/$(1)) endef @@ -81,39 +79,27 @@ ifneq ($(HOST_OS),Darwin) $(STAGING_DIR_HOST)/usr/lib/grub/i386-*/e2fs_stage1_5 \ $(KDIR)/ endef -else + + else + define Image/Build/grub - PADDING="$(CONFIG_X86_GRUB_IMAGES_PAD)" PATH="$(TARGET_PATH)" NOGRUB=1 ./gen_image_x86.sh $(BIN_DIR)/$(IMG_PREFIX)-$(1).image $(CONFIG_X86_GRUB_KERNELPART) "" $(CONFIG_TARGET_ROOTFS_FSPART) $(KDIR)/root.$(1) + PADDING="$(CONFIG_X86_GRUB_IMAGES_PAD)" PATH="$(TARGET_PATH)" NOGRUB=1 ./gen_image_x86.sh + $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \ + $(CONFIG_X86_GRUB_KERNELPART) "" \ + $(CONFIG_TARGET_ROOTFS_FSPART) $(KDIR)/root.$(1) endef -endif -endif -ifeq ($(CONFIG_X86_VDI_IMAGES),y) - define Image/Build/vdi - # left here because the image builder doesnt need these - ifeq ($(1),ext2) - rm $(BIN_DIR)/$(IMG_PREFIX)-ext2.vdi || true - VBoxManage convertfromraw -format VDI $(BIN_DIR)/$(IMG_PREFIX)-ext2.image $(BIN_DIR)/$(IMG_PREFIX)-ext2.vdi - endif - endef -endif - -ifeq ($(CONFIG_X86_VMDK_IMAGES),y) - define Image/Build/vmdk - # left here because the image builder doesnt need these - ifeq ($(1),ext2) - rm $(BIN_DIR)/$(IMG_PREFIX)-ext2.vmdk || true - qemu-img convert -f raw $(BIN_DIR)/$(IMG_PREFIX)-ext2.image \ - -O vmdk $(BIN_DIR)/$(IMG_PREFIX)-ext2.vmdk - endif - endef + endif endif ROOTDELAY=10 -ifeq ($(CONFIG_OLPC_BOOTSCRIPT_IMAGES),y) - define Image/cmdline/squashfs - block2mtd.block2mtd=$(ROOTPART),65536,rootfs root=/dev/mtdblock0 rootfstype=squashfs rootdelay=$(ROOTDELAY) +ifneq ($(CONFIG_OLPC_BOOTSCRIPT_IMAGES),) + + ROOTPART:=$(call qstrip,$(CONFIG_OLPC_BOOTSCRIPT_ROOTPART)) + + define Image/cmdline/ext2 + root=$(ROOTPART) rootfstype=ext2 rootwait endef define Image/cmdline/jffs2-64k @@ -124,8 +110,8 @@ ifeq ($(CONFIG_OLPC_BOOTSCRIPT_IMAGES),y) block2mtd.block2mtd=$(ROOTPART),131072,rootfs root=/dev/mtdblock0 rootfstype=jffs2 rootdelay=$(ROOTDELAY) endef - define Image/cmdline/ext2 - root=$(ROOTPART) rootfstype=ext2 rootwait + define Image/cmdline/squashfs + block2mtd.block2mtd=$(ROOTPART),65536,rootfs root=/dev/mtdblock0 rootfstype=squashfs rootdelay=$(ROOTDELAY) endef define Image/Build/bootscript @@ -134,21 +120,16 @@ ifeq ($(CONFIG_OLPC_BOOTSCRIPT_IMAGES),y) $(CP) $(KDIR)/bzImage $(KDIR)/root.bootscript/boot/vmlinuz sed -e 's#@CMDLINE@#$(strip $(call Image/cmdline/$(1))) $(BOOTOPTS)#g' \ ./olpc.fth > $(KDIR)/root.bootscript/boot/olpc.fth - PADDING="$(CONFIG_OLPC_BOOTSCRIPT_IMAGES_PAD)" PATH="$(TARGET_PATH)" ./gen_image_olpc.sh $(BIN_DIR)/$(IMG_PREFIX)-$(1).image $(CONFIG_OLPC_BOOTSCRIPT_KERNELPART) $(KDIR)/root.bootscript $(CONFIG_TARGET_ROOTFS_FSPART) $(KDIR)/root.$(1) + PADDING="$(CONFIG_OLPC_BOOTSCRIPT_IMAGES_PAD)" PATH="$(TARGET_PATH)" ./gen_image_olpc.sh \ + $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \ + $(CONFIG_OLPC_BOOTSCRIPT_KERNELPART) $(KDIR)/root.bootscript \ + $(CONFIG_TARGET_ROOTFS_FSPART) $(KDIR)/root.$(1) endef -endif -define Image/Prepare - $(CP) $(LINUX_DIR)/arch/x86/boot/bzImage $(KDIR)/bzImage -ifeq ($(CONFIG_TARGET_x86_olpc),y) - $(call Image/Prepare/bootscript) -else - $(call Image/Prepare/grub) endif -endef define Image/Build/squashfs - $(call prepare_generic_squashfs,$(KDIR)/root.squashfs) + $(call prepare_generic_squashfs,$(KDIR)/root.squashfs) endef define Image/Build/iso @@ -167,10 +148,42 @@ define Image/Build/iso -o $(KDIR)/root.iso $(KDIR)/root.grub endef +ifneq ($(CONFIG_X86_VDI_IMAGES),) + define Image/Build/vdi + # left here because the image builder doesnt need these + ifeq ($(1),ext2) + rm $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).vdi || true + VBoxManage convertfromraw -format VDI \ + $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \ + $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).vdi + # XXX: VBoxManage insists on setting perms to 0600 + chmod 0644 $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).vdi + endif + endef +endif + +ifneq ($(CONFIG_X86_VMDK_IMAGES),) + define Image/Build/vmdk + # left here because the image builder doesnt need these + ifeq ($(1),ext2) + rm $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).vmdk || true + qemu-img convert -f raw -O vmdk \ + $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \ + $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).vmdk + endif + endef +endif + define Image/BuildKernel $(CP) $(KDIR)/bzImage $(BIN_DIR)/$(IMG_PREFIX)-vmlinuz endef +define Image/Prepare + $(CP) $(LINUX_DIR)/arch/x86/boot/bzImage $(KDIR)/bzImage + $(call Image/Prepare/bootscript) + $(call Image/Prepare/grub) +endef + define Image/Build $(call Image/Build/$(1)) $(call Image/Build/bootscript,$(1)) @@ -179,23 +192,24 @@ define Image/Build $(call Image/Build/vdi,$(1)) $(call Image/Build/vmdk,$(1)) endif - $(CP) $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_PREFIX)-$(1).fs + $(CP) $(KDIR)/root.$(1) $(BIN_DIR)/$(IMG_PREFIX)-rootfs-$(1).img $(CP) $(KDIR)/bzImage $(BIN_DIR)/$(IMG_PREFIX)-vmlinuz ifeq ($(1),ext2) - gzip -f9 $(BIN_DIR)/$(IMG_PREFIX)-$(1).image + gzip -f9 $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img + gzip -f9 $(BIN_DIR)/$(IMG_PREFIX)-rootfs-$(1).img endif endef $(eval $(call BuildImage)) -ifeq ($(CONFIG_X86_VDI_IMAGES),y) +ifneq ($(CONFIG_X86_VDI_IMAGES),) $(eval $(call RequireCommand,VBoxManage, \ You need VBoxManage to generate VirtualBox images. \ )) endif -ifeq ($(CONFIG_X86_VMDK_IMAGES),y) - $(eval $(call RequireCommand,qemu-img, \ +ifneq ($(CONFIG_X86_VMDK_IMAGES),) + $(eval $(call RequireCommand,qemu-img, \ You need qemu-img to generate VMware images. \ - )) + )) endif From ee18b13933564cc4d80a2164cd2b42650b3594fc Mon Sep 17 00:00:00 2001 From: nico Date: Mon, 3 May 2010 00:17:57 +0000 Subject: [PATCH 07/28] [backfire] merge r21243 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21326 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- target/linux/x86/image/gen_image_olpc.sh | 4 ++-- target/linux/x86/image/gen_image_x86.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/target/linux/x86/image/gen_image_olpc.sh b/target/linux/x86/image/gen_image_olpc.sh index 4fd6e377e..82bc4ed95 100755 --- a/target/linux/x86/image/gen_image_olpc.sh +++ b/target/linux/x86/image/gen_image_olpc.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright (C) 2006 - 2007 OpenWrt.org +# Copyright (C) 2006-2010 OpenWrt.org set -x [ $# == 5 ] || { echo "SYNTAX: $0 " @@ -32,4 +32,4 @@ genext2fs -d "$KERNELDIR" -b "$BLOCKS" "$OUTPUT.kernel" dd if="$OUTPUT.kernel" of="$OUTPUT" bs=512 seek="$KERNELOFFSET" conv=notrunc [ -n "$PADDING" ] && dd if=/dev/zero of="$OUTPUT" bs=512 seek="$ROOTFSOFFSET" conv=notrunc count="$ROOTFSSIZE" dd if="$ROOTFSIMAGE" of="$OUTPUT" bs=512 seek="$ROOTFSOFFSET" conv=notrunc -#rm -f "$OUTPUT.kernel" +rm -f "$OUTPUT.kernel" diff --git a/target/linux/x86/image/gen_image_x86.sh b/target/linux/x86/image/gen_image_x86.sh index 5d4c0dd34..e1d1b92dd 100755 --- a/target/linux/x86/image/gen_image_x86.sh +++ b/target/linux/x86/image/gen_image_x86.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright (C) 2006 OpenWrt.org +# Copyright (C) 2006-2010 OpenWrt.org set -x [ $# == 5 ] || { echo "SYNTAX: $0 " @@ -35,7 +35,7 @@ dd if="$ROOTFSIMAGE" of="$OUTPUT" bs=512 seek="$ROOTFSOFFSET" conv=notrunc genext2fs -d "$KERNELDIR" -b "$BLOCKS" "$OUTPUT.kernel" dd if="$OUTPUT.kernel" of="$OUTPUT" bs=512 seek="$KERNELOFFSET" conv=notrunc -#rm -f "$OUTPUT.kernel" +rm -f "$OUTPUT.kernel" which chpax >/dev/null && chpax -zp $(which grub) grub --batch --no-curses --no-floppy --device-map=/dev/null < Date: Mon, 3 May 2010 00:26:25 +0000 Subject: [PATCH 08/28] [backfire] merge r20784 & r20788 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21327 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/block-extroot/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/block-extroot/Makefile b/package/block-extroot/Makefile index eaf01dad5..d24cbd134 100644 --- a/package/block-extroot/Makefile +++ b/package/block-extroot/Makefile @@ -26,7 +26,7 @@ endef define Package/block-extroot $(call Package/block-extroot/Default) MENU:=1 - DEPENDS:=+block-mount @PACKAGE_kmod-ide-core||PACKAGE_kmod-usb-storage||PACKAGE_kmod-mmc||PACKAGE_kmod-broadcom-sdhc + DEPENDS:=+block-mount @PACKAGE_kmod-ide-core||PACKAGE_kmod-ata-core||PACKAGE_kmod-usb-storage||PACKAGE_kmod-mmc||PACKAGE_kmod-broadcom-sdhc endef define Package/block-extroot/config From 76324c4dd15399c6eacc177af177cf94ac1070df Mon Sep 17 00:00:00 2001 From: nico Date: Mon, 3 May 2010 00:27:32 +0000 Subject: [PATCH 09/28] [backfire] merge r21205 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21328 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/mountd/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package/mountd/Makefile b/package/mountd/Makefile index 87ddef50f..ded7d30d1 100644 --- a/package/mountd/Makefile +++ b/package/mountd/Makefile @@ -35,8 +35,8 @@ endef define Package/mountd/install $(INSTALL_DIR) $(1)/sbin/ $(1)/etc/config/ $(1)/etc/init.d/ $(INSTALL_BIN) $(PKG_BUILD_DIR)/mountd $(1)/sbin/ - $(INSTALL_BIN) ./files/mountd.config $(1)/etc/config/mountd - $(INSTALL_DATA) ./files/mountd.init $(1)/etc/init.d/mountd + $(INSTALL_DATA) ./files/mountd.config $(1)/etc/config/mountd + $(INSTALL_BIN) ./files/mountd.init $(1)/etc/init.d/mountd endef $(eval $(call BuildPackage,mountd)) From e7839817bc696881eec156e48db499d75f9170b9 Mon Sep 17 00:00:00 2001 From: nico Date: Mon, 3 May 2010 00:30:27 +0000 Subject: [PATCH 10/28] [backfire] remove goldfish-qemu, backfire has no glodfish target git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21329 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/goldfish-qemu/Makefile | 69 ---- .../patches/100-darwin_fix.patch | 30 -- .../patches/110-single_image.patch | 233 ----------- .../goldfish-qemu/skins/HVGA/arrow_down.png | Bin 3438 -> 0 bytes .../goldfish-qemu/skins/HVGA/arrow_left.png | Bin 4122 -> 0 bytes .../goldfish-qemu/skins/HVGA/arrow_right.png | Bin 4147 -> 0 bytes package/goldfish-qemu/skins/HVGA/arrow_up.png | Bin 3493 -> 0 bytes package/goldfish-qemu/skins/HVGA/back.png | Bin 3564 -> 0 bytes package/goldfish-qemu/skins/HVGA/device.png | Bin 45511 -> 0 bytes package/goldfish-qemu/skins/HVGA/end.png | Bin 3562 -> 0 bytes package/goldfish-qemu/skins/HVGA/home.png | Bin 3578 -> 0 bytes package/goldfish-qemu/skins/HVGA/key.png | Bin 2857 -> 0 bytes package/goldfish-qemu/skins/HVGA/keyboard.png | Bin 11032 -> 0 bytes package/goldfish-qemu/skins/HVGA/layout | 380 ------------------ package/goldfish-qemu/skins/HVGA/menu.png | Bin 3079 -> 0 bytes package/goldfish-qemu/skins/HVGA/power.png | Bin 3782 -> 0 bytes package/goldfish-qemu/skins/HVGA/select.png | Bin 3374 -> 0 bytes package/goldfish-qemu/skins/HVGA/send.png | Bin 3561 -> 0 bytes package/goldfish-qemu/skins/HVGA/spacebar.png | Bin 2916 -> 0 bytes .../goldfish-qemu/skins/HVGA/volume_down.png | Bin 3586 -> 0 bytes .../goldfish-qemu/skins/HVGA/volume_up.png | Bin 3856 -> 0 bytes 21 files changed, 712 deletions(-) delete mode 100644 package/goldfish-qemu/Makefile delete mode 100644 package/goldfish-qemu/patches/100-darwin_fix.patch delete mode 100644 package/goldfish-qemu/patches/110-single_image.patch delete mode 100644 package/goldfish-qemu/skins/HVGA/arrow_down.png delete mode 100644 package/goldfish-qemu/skins/HVGA/arrow_left.png delete mode 100644 package/goldfish-qemu/skins/HVGA/arrow_right.png delete mode 100644 package/goldfish-qemu/skins/HVGA/arrow_up.png delete mode 100644 package/goldfish-qemu/skins/HVGA/back.png delete mode 100644 package/goldfish-qemu/skins/HVGA/device.png delete mode 100644 package/goldfish-qemu/skins/HVGA/end.png delete mode 100644 package/goldfish-qemu/skins/HVGA/home.png delete mode 100644 package/goldfish-qemu/skins/HVGA/key.png delete mode 100644 package/goldfish-qemu/skins/HVGA/keyboard.png delete mode 100644 package/goldfish-qemu/skins/HVGA/layout delete mode 100644 package/goldfish-qemu/skins/HVGA/menu.png delete mode 100644 package/goldfish-qemu/skins/HVGA/power.png delete mode 100644 package/goldfish-qemu/skins/HVGA/select.png delete mode 100644 package/goldfish-qemu/skins/HVGA/send.png delete mode 100644 package/goldfish-qemu/skins/HVGA/spacebar.png delete mode 100644 package/goldfish-qemu/skins/HVGA/volume_down.png delete mode 100644 package/goldfish-qemu/skins/HVGA/volume_up.png diff --git a/package/goldfish-qemu/Makefile b/package/goldfish-qemu/Makefile deleted file mode 100644 index da3c64e4f..000000000 --- a/package/goldfish-qemu/Makefile +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (C) 2006 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=goldfish-qemu -PKG_VERSION:=20090429 -PKG_RELEASE:=1 - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz -PKG_SOURCE_URL:=git://android.git.kernel.org/platform/external/qemu -PKG_SOURCE_PROTO:=git -PKG_SOURCE_VERSION:=2b8ea29e2bd12f876a4d06647e6077bf72de567e -PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) -PKG_TARGETS:=bin - -include $(INCLUDE_DIR)/package.mk - -define Package/goldfish-qemu - SECTION:=emulator - CATEGORY:=Emulators - DEPENDS:=@TARGET_goldfish - TITLE:=A modified version of the Google Android Emulator - URL:=http://www.android.com/ -endef - -LIBSDL_PATCHED:=sdl-1.2.12-android-20080919 - -define Download/libsdl-patched - FILE:=$(LIBSDL_PATCHED).tar.gz - URL:=http://android.git.kernel.org/pub - MD5SUM:=22df8cbb2ecb811938eba8410e861650 -endef -$(eval $(call Download,libsdl-patched)) - -Build/Exports= - -define Build/Prepare - $(call Build/Prepare/Default) - zcat $(DL_DIR)/$(LIBSDL_PATCHED).tar.gz | tar x -C $(PKG_BUILD_DIR) -endef - -define Build/Configure - [ -x $(PKG_BUILD_DIR)/libsdl/bin/sdl-config ] || ( \ - cd $(PKG_BUILD_DIR)/$(LIBSDL_PATCHED); \ - ./android-configure --prefix=$(PKG_BUILD_DIR)/libsdl; \ - make all install; \ - ) -endef - -define Build/Compile - (cd $(PKG_BUILD_DIR); \ - [ -f $(PKG_BUILD_DIR)/objs/config.make ] || \ - ./android-configure.sh --sdl-config=$(PKG_BUILD_DIR)/libsdl/bin/sdl-config \ - ) - $(MAKE) -C $(PKG_BUILD_DIR) -endef - -define Package/goldfish-qemu/install - $(INSTALL_DIR) $(1) - $(CP) $(PKG_BUILD_DIR)/objs/emulator $(1)/ - $(CP) ./skins $(1)/ -endef - -$(eval $(call BuildPackage,goldfish-qemu)) diff --git a/package/goldfish-qemu/patches/100-darwin_fix.patch b/package/goldfish-qemu/patches/100-darwin_fix.patch deleted file mode 100644 index a5f56b3cf..000000000 --- a/package/goldfish-qemu/patches/100-darwin_fix.patch +++ /dev/null @@ -1,30 +0,0 @@ ---- a/android-configure.sh -+++ b/android-configure.sh -@@ -656,6 +656,9 @@ case "$CPU" in - *) HOST_CPU=$CPU - ;; - esac -+case "$OS" in -+ darwin*) echo "#define _BSD 1" >> $config_h;; -+esac - echo "#define HOST_$HOST_CPU 1" >> $config_h - log "Generate : $config_h" - ---- a/android/utils/display-quartz.m -+++ b/android/utils/display-quartz.m -@@ -34,6 +34,7 @@ get_monitor_resolution( int *px_dpi, in - int - get_nearest_monitor_rect( int *x, int *y, int *width, int *height ) - { -+#if 0 - SDL_SysWMinfo info; - NSWindow* window; - -@@ -108,4 +109,7 @@ get_nearest_monitor_rect( int *x, int - } - return 0; - } -+#else -+ return -1; -+#endif - }; diff --git a/package/goldfish-qemu/patches/110-single_image.patch b/package/goldfish-qemu/patches/110-single_image.patch deleted file mode 100644 index 92a9e543d..000000000 --- a/package/goldfish-qemu/patches/110-single_image.patch +++ /dev/null @@ -1,233 +0,0 @@ ---- a/android/cmdline-option.c -+++ b/android/cmdline-option.c -@@ -50,16 +50,6 @@ android_parse_options( int *pargc, char - char arg2_tab[64], *arg2 = arg2_tab; - int nn; - -- /* process @ as a special exception meaning -- * '-avd ' -- */ -- if (aread[0][0] == '@') { -- opt->avd = aread[0]+1; -- nargs--; -- aread++; -- continue; -- } -- - /* anything that isn't an option past this points - * exits the loop - */ ---- a/android/cmdline-options.h -+++ b/android/cmdline-options.h -@@ -60,21 +60,16 @@ - */ - - CFG_PARAM( sysdir, "", "search for system disk images in " ) --CFG_PARAM( system, "", "read initial system image from " ) --CFG_PARAM( datadir, "", "write user data into " ) --CFG_PARAM( kernel, "", "use specific emulated kernel" ) --CFG_PARAM( ramdisk, "", "ramdisk image (default /ramdisk.img" ) --CFG_PARAM( image, "", "obsolete, use -system instead" ) --CFG_PARAM( init_data, "", "initial data image (default /userdata.img" ) --CFG_PARAM( initdata, "", "same as '-init-data '" ) --CFG_PARAM( data, "", "data image (default /userdata-qemu.img" ) -+CFG_PARAM( system, "", "read system image from , default: /system.img" ) -+CFG_PARAM( data, "", "data image, default: /data.img" ) -+CFG_PARAM( kernel, "", "use specific emulated kernel, default: kernel.bin" ) -+CFG_PARAM( ramdisk, "", "ramdisk image (default /ramdisk.bin" ) - CFG_PARAM( partition_size, "", "system/data partition size in MBs" ) - CFG_PARAM( cache, "", "cache partition image (default is temporary file)" ) - CFG_FLAG ( no_cache, "disable the cache partition" ) - CFG_FLAG ( nocache, "same as -no-cache" ) - OPT_PARAM( sdcard, "", "SD card image (default /sdcard.img") - OPT_FLAG ( wipe_data, "reset the use data image (copy it from initdata)" ) --CFG_PARAM( avd, "", "use a specific android virtual device" ) - CFG_PARAM( skindir, "", "search skins in (default /skins)" ) - CFG_PARAM( skin, "", "select a given skin" ) - CFG_FLAG ( no_skin, "don't use any emulator skin" ) ---- a/android/main.c -+++ b/android/main.c -@@ -1606,6 +1606,7 @@ report_console( const char* proto_port, - * containing 'fileName'. this is *not* the full - * path to 'fileName'. - */ -+ - static char* - _getSdkImagePath( const char* fileName ) - { -@@ -1617,8 +1618,6 @@ _getSdkImagePath( const char* fileName - - static const char* const searchPaths[] = { - "", /* program's directory */ -- "/lib/images", /* this is for SDK 1.0 */ -- "/../platforms/android-1.1/images", /* this is for SDK 1.1 */ - NULL - }; - -@@ -1841,25 +1840,7 @@ int main(int argc, char **argv) - } - } - -- /* legacy support: we used to use -system and -image -- * instead of -sysdir and -system , so handle this by checking -- * whether the options point to directories or files. -- */ -- if (opts->image != NULL) { -- if (opts->system != NULL) { -- if (opts->sysdir != NULL) { -- derror( "You can't use -sysdir, -system and -image at the same time.\n" -- "You should probably use '-sysdir -system '.\n" ); -- exit(2); -- } -- } -- dwarning( "Please note that -image is obsolete and that -system is now used to point\n" -- "to the system image. Next time, try using '-sysdir -system ' instead.\n" ); -- opts->sysdir = opts->system; -- opts->system = opts->image; -- opts->image = NULL; -- } -- else if (opts->system != NULL && path_is_dir(opts->system)) { -+ if (opts->system != NULL && path_is_dir(opts->system)) { - if (opts->sysdir != NULL) { - derror( "Option -system should now be followed by a file path, not a directory one.\n" - "Please use '-sysdir ' to point to the system directory.\n" ); -@@ -1885,49 +1866,11 @@ int main(int argc, char **argv) - if (opts->noskin) - opts->no_skin = opts->noskin; - -- if (opts->initdata) { -- opts->init_data = opts->initdata; -- opts->initdata = NULL; -- } -- -- /* If no AVD name was given, try to find the top of the -- * Android build tree -- */ -- if (opts->avd == NULL) { -- do { -- char* out = getenv("ANDROID_PRODUCT_OUT"); -- -- if (out == NULL || out[0] == 0) -- break; -- -- if (!path_exists(out)) { -- derror("Can't access ANDROID_PRODUCT_OUT as '%s'\n" -- "You need to build the Android system before launching the emulator", -- out); -- exit(2); -- } -- -- android_build_root = path_parent( out, 4 ); -- if (android_build_root == NULL || !path_exists(android_build_root)) { -- derror("Can't find the Android build root from '%s'\n" -- "Please check the definition of the ANDROID_PRODUCT_OUT variable.\n" -- "It should point to your product-specific build output directory.\n", -- out ); -- exit(2); -- } -- android_build_out = out; -- D( "found Android build root: %s", android_build_root ); -- D( "found Android build out: %s", android_build_out ); -- } while (0); -- } - /* if no virtual device name is given, and we're not in the - * Android build system, we'll need to perform some auto-detection - * magic :-) - */ -- if (opts->avd == NULL && !android_build_out) - { -- char dataDirIsSystem = 0; -- - if (!opts->sysdir) { - opts->sysdir = _getSdkImagePath("system.img"); - if (!opts->sysdir) { -@@ -1945,47 +1888,30 @@ int main(int argc, char **argv) - } - - if (!opts->system) { -- opts->system = _getSdkSystemImage(opts->sysdir, "-image", "system.img"); -- D("autoconfig: -image %s", opts->image); -+ opts->system = _getSdkSystemImage(opts->sysdir, "-system", "system.img"); -+ D("autoconfig: -system %s", opts->system); - } - - if (!opts->kernel) { -- opts->kernel = _getSdkSystemImage(opts->sysdir, "-kernel", "kernel-qemu"); -+ opts->kernel = _getSdkSystemImage(opts->sysdir, "-kernel", "kernel.bin"); - D("autoconfig: -kernel %s", opts->kernel); - } - - if (!opts->ramdisk) { -- opts->ramdisk = _getSdkSystemImage(opts->sysdir, "-ramdisk", "ramdisk.img"); -+ opts->ramdisk = _getSdkSystemImage(opts->sysdir, "-ramdisk", "ramdisk.bin"); - D("autoconfig: -ramdisk %s", opts->ramdisk); - } - -- /* if no data directory is specified, use the system directory */ -- if (!opts->datadir) { -- opts->datadir = qemu_strdup(opts->sysdir); -- dataDirIsSystem = 1; -- D("autoconfig: -datadir %s", opts->sysdir); -- } -- - if (!opts->data) { - /* check for userdata-qemu.img in the data directory */ -- bufprint(tmp, tmpend, "%s/userdata-qemu.img", opts->datadir); -- if (!path_exists(tmp)) { -- derror( -- "You did not provide the name of an Android Virtual Device\n" -- "with the '-avd ' option. Read -help-avd for more information.\n\n" -- -- "If you *really* want to *NOT* run an AVD, consider using '-data '\n" -- "to specify a data partition image file (I hope you know what you're doing).\n" -- ); -- exit(2); -- } -+ bufprint(tmp, tmpend, "%s/data.img", opts->sysdir); - - opts->data = qemu_strdup(tmp); - D("autoconfig: -data %s", opts->data); - } - -- if (!opts->sdcard && opts->datadir) { -- bufprint(tmp, tmpend, "%s/sdcard.img", opts->datadir); -+ if (!opts->sdcard && opts->sysdir) { -+ bufprint(tmp, tmpend, "%s/sdcard.img", opts->sysdir); - if (path_exists(tmp)) { - opts->sdcard = qemu_strdup(tmp); - D("autoconfig: -sdcard %s", opts->sdcard); -@@ -2029,19 +1955,6 @@ int main(int argc, char **argv) - android_avdParams->skinName = opts->skin; - android_avdParams->skinRootPath = opts->skindir; - -- /* setup the virtual device differently depending on whether -- * we are in the Android build system or not -- */ -- if (opts->avd != NULL) -- { -- android_avdInfo = avdInfo_new( opts->avd, android_avdParams ); -- if (android_avdInfo == NULL) { -- /* an error message has already been printed */ -- dprint("could not find virtual device named '%s'", opts->avd); -- exit(1); -- } -- } -- else - { - if (!android_build_out) { - android_build_out = android_build_root = opts->sysdir; ---- a/android/avd/info.c -+++ b/android/avd/info.c -@@ -1233,10 +1233,8 @@ _getBuildImagePaths( AvdInfo* i, AvdInf - ** take care of checking the state - **/ - imageLoader_set ( l, AVD_IMAGE_INITSYSTEM ); -- imageLoader_load( l, IMAGE_REQUIRED | IMAGE_DONT_LOCK ); -- -- /* force the system image to read-only status */ -- l->pState[0] = IMAGE_STATE_READONLY; -+ l->pState[0] = IMAGE_STATE_MUSTLOCK; -+ imageLoader_load( l, IMAGE_REQUIRED ); - - /** cache partition handling - **/ diff --git a/package/goldfish-qemu/skins/HVGA/arrow_down.png b/package/goldfish-qemu/skins/HVGA/arrow_down.png deleted file mode 100644 index 19b3764e8337ba08cc2910ce9a9b77cae0c29155..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3438 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 Q^8f$<07*qoM6N<$f_jc(fdBvi diff --git a/package/goldfish-qemu/skins/HVGA/arrow_left.png b/package/goldfish-qemu/skins/HVGA/arrow_left.png deleted file mode 100644 index 113e58427aca1ebce4bdc7bc671e8e4be09434ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4122 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 TEP9sB00000NkvXXu0mjfMx=ux diff --git a/package/goldfish-qemu/skins/HVGA/back.png b/package/goldfish-qemu/skins/HVGA/back.png deleted file mode 100644 index 41034d9105e4fc077ea8620862828cc0e76c7938..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3564 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 AmjD0& diff --git a/package/goldfish-qemu/skins/HVGA/key.png b/package/goldfish-qemu/skins/HVGA/key.png deleted file mode 100644 index 7a3f563bdeeaee0a604e964edf60cd2facc39b4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2857 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 PS^*6eUFAxI-OK+2E`~%c diff --git a/package/goldfish-qemu/skins/HVGA/layout b/package/goldfish-qemu/skins/HVGA/layout deleted file mode 100644 index 4c3d76420..000000000 --- a/package/goldfish-qemu/skins/HVGA/layout +++ /dev/null @@ -1,380 +0,0 @@ -parts { - device { - background { - image device.png - } - display { - width 320 - height 480 - x 31 - y 72 - } - - buttons { - soft-left { - image menu.png - x 147 - y 555 - } - home { - image home.png - x 48 - y 590 - } - back { - image back.png - x 286 - y 590 - } - dpad-up { - image arrow_up.png - x 140 - y 595 - } - dpad-down { - image arrow_down.png - x 140 - y 656 - } - dpad-left { - image arrow_left.png - x 111 - y 598 - } - dpad-right { - image arrow_right.png - x 222 - y 598 - } - dpad-center { - image select.png - x 142 - y 626 - } - phone-dial { - image send.png - x 48 - y 646 - } - phone-hangup { - image end.png - x 286 - y 646 - } - - power { - image power.png - x -38 - y 52 - } - - volume-up { - image volume_up.png - x 362 - y 260 - } - - volume-down { - image volume_down.png - x 362 - y 310 - } - } - } - - keyboard { - background { - image keyboard.png - } - buttons { - 1 { - image key.png - x 0 - y 0 - } - 2 { - image key.png - x 37 - y 0 - } - 3 { - image key.png - x 74 - y 0 - } - 4 { - image key.png - x 111 - y 0 - } - 5 { - image key.png - x 148 - y 0 - } - 6 { - image key.png - x 185 - y 0 - } - 7 { - image key.png - x 222 - y 0 - } - 8 { - image key.png - x 259 - y 0 - } - 9 { - image key.png - x 296 - y 0 - } - 0 { - image key.png - x 333 - y 0 - } - - q { - image key.png - x 0 - y 36 - } - w { - image key.png - x 37 - y 36 - } - e { - image key.png - x 74 - y 36 - } - r { - image key.png - x 111 - y 36 - } - t { - image key.png - x 148 - y 36 - } - y { - image key.png - x 185 - y 36 - } - u { - image key.png - x 222 - y 36 - } - i { - image key.png - x 259 - y 36 - } - o { - image key.png - x 296 - y 36 - } - p { - image key.png - x 333 - y 36 - } - - a { - image key.png - x 0 - y 72 - } - s { - image key.png - x 37 - y 72 - } - d { - image key.png - x 74 - y 72 - } - f { - image key.png - x 111 - y 72 - } - g { - image key.png - x 148 - y 72 - } - h { - image key.png - x 185 - y 72 - } - j { - image key.png - x 222 - y 72 - } - k { - image key.png - x 259 - y 72 - } - l { - image key.png - x 296 - y 72 - } - DEL { - image key.png - x 333 - y 72 - } - - CAP { - image key.png - x 0 - y 108 - } - z { - image key.png - x 37 - y 108 - } - x { - image key.png - x 74 - y 108 - } - c { - image key.png - x 111 - y 108 - } - v { - image key.png - x 148 - y 108 - } - b { - image key.png - x 185 - y 108 - } - n { - image key.png - x 222 - y 108 - } - m { - image key.png - x 259 - y 108 - } - PERIOD { - image key.png - x 296 - y 108 - } - ENTER { - image key.png - x 333 - y 108 - } - - ALT { - image key.png - x 0 - y 144 - } - SYM { - image key.png - x 37 - y 144 - } - AT { - image key.png - x 74 - y 144 - } - SPACE { - image spacebar.png - x 111 - y 144 - } - SLASH { - image key.png - x 259 - y 144 - } - COMMA { - image key.png - x 296 - y 144 - } - ALT2 { - image key.png - x 333 - y 144 - } - - } - } -} - -layouts { - portrait { - width 900 - height 730 - color 0xe0e0e0 - event EV_SW:0:1 - - part1 { - name device - x 40 - y -18 - } - part2 { - name keyboard - x 480 - y 200 - } - } - - landscape { - width 900 - height 670 - color 0xe0e0e0 - event EV_SW:0:0 - - part1 { - name device - x 50 - y 440 - rotation 3 - } - part2 { - name keyboard - x 250 - y 470 - } - } -} - -keyboard { - charmap qwerty2 -} - -network { - speed full - delay none -} diff --git a/package/goldfish-qemu/skins/HVGA/menu.png b/package/goldfish-qemu/skins/HVGA/menu.png deleted file mode 100644 index e81d8abcffd3f8eaf515449e27b8f9c8480ca323..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3079 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 diff --git a/package/goldfish-qemu/skins/HVGA/spacebar.png b/package/goldfish-qemu/skins/HVGA/spacebar.png deleted file mode 100644 index 19fe604765b984dd1df424c25b9ba0c42f678276..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2916 zcmb`J_dgZ>7suZ>vUm3AW77@Smd(BP3|IFGWnU$$loj2Ztn|T6c2^{OWaR3Gx<y9@7VbcT$ z4ANnZS9gDI7jBt=ePJ1B&%+>U4^P5!xAUpB{;fig%cM zkkC->B|EO*WTTvCJIY1kiSXx_K1+?9dM(b&9n$E{tAU!^dXPxGe5tD^&2LK?4s-~4 zaUX!~roh%OvJ5m>--m{h<|8-tCveG*HaG{I$qOrd*X>f}W4LVGK#d604fe%AM3rpk8~j*-@|o8f}H*mMHK<0)DqnSn1m_CT!FjFu}&QnV+5+fLjPuV$uX z{}d_eXeP3)d-t4Xyo<>PymmKGetZuPNhz<=&u0({g3@P=TdF>nI2-k?oNPxY>np|0~s+pifTF~O6^ErV#xEHaj^%`_8xBGam@@6s z_;O5XAX5KLw9|1Som0D2yDj34U4HG&rRGjiW>10oFgYt1 z$0AKhy5(gBng|sO6;!?b&I=!X`lYPkgO?#TjH|LGnLE)>=eU1fTD&AwtZGG4@^dKO7KDhq{Q=d)UH zppFQvi~7qB;o5G1C~{AC&s=zdCk^Wqj+y*x!v5@5r^}M$l7FXvXQ4Emw3xJ|^}6*| zj=eRh_)@X9m9|yaK>xt&f$?m$TwSFJ<<;EP+=<-zMz`x>*X4+%#P{Cjb<5X_owkV0 z0kPLLor=(o*InyPst8q5<4sjfC7dNBn>3q>ym3r>%`ajPv8+*`W@VC&T21sPM!91= z_%My1tJ}BITGFCEME!fLOV1iV#a1D5T_pP6ySv<4*R0ZoELQ;(ZHutQVH#E?V4g5Ms%oO9 zu_&~B-~A__-fz9Tua@+dbTsCa=bUc#Ymghe8~beA1M_ai&LbX4oO+!`oDPE$tP})8 zlZZ3KIiEW`hixTJYSZvpKFN^BFy(R8_d)S!814V^MMX$w3Kd!C|FLwb0=i#Jzc=zeX8GbGaBLTg|uf7HUwv za)sME(;6RCKj?QV_&D{Cp$Ta7JC?$l3ealxfIA=Ok2ZJW7YU2ZOObq8ux{6&@B&KP zZfpr}nF5!bR)&F9g3Xl||1so%mhwK6+P)AfmCO|0CenrxhYhO_Crlz-pcien&7js1 z&wt>X)xsq|s}#wtkerOrgBsIb=rqlQM)u&dTcamo!!i&EnuggwA>FY4wD4$OQiM^T`6?vBjHv8*) zsi_(-f4(~1oP3@$TSj^2w@kJG)~V@ttn=62ZSMUxrou7@ zWT{OtL<_W#b>b*+nx#b4)M6Mw}ph850@NMcSu~U*0ff z>-y*83E^j`JgYjZ!k5?f8Rz#evT98~cotc?KtKA=0}+e}>^3}SJI5r~ zA?MK9!})`4zuxfp`dq}3DfJ)rm#R8W;TAi{o?Fvvk4Mum+k?*t>4d0gg+DWH)Yrtw zRZq(NZT7&QA2>o5MvPCBR<)b8DK6XZL$>RvD;H4jQ8{n5Zu+l>tm~YljoNlKy==;< zCb{^Lwjx>@B7OGPgz_{fv%4+fzj#l_$MQ6FXIpk60{1`f@6GehM&Fe=rt~#Uh01JI zHQP4d+%?!VoI=dTkLf#~%uN2Ad32i`n!htVW4ccl8#8!<-%DXfoKMM4>5F5H+sM13 zr>VK9fA@Ips011M|DUlz e13Lhxr!)Z7ao$klwv_N$G+=IQV^j@yd;DLCO-#%H diff --git a/package/goldfish-qemu/skins/HVGA/volume_down.png b/package/goldfish-qemu/skins/HVGA/volume_down.png deleted file mode 100644 index f8a88dec810c5e3a33ba6d1c1919acb00fa97feb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3586 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 IM6N<$f_nU^82|tP diff --git a/package/goldfish-qemu/skins/HVGA/volume_up.png b/package/goldfish-qemu/skins/HVGA/volume_up.png deleted file mode 100644 index 940457f707bdc589883be0d8fd7c49930195a23e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3856 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 Date: Mon, 3 May 2010 00:32:39 +0000 Subject: [PATCH 11/28] [backfire] remove ps3-utils, backfire has no ps3 target git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21330 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/ps3-utils/Makefile | 69 -------------------------------------- 1 file changed, 69 deletions(-) delete mode 100644 package/ps3-utils/Makefile diff --git a/package/ps3-utils/Makefile b/package/ps3-utils/Makefile deleted file mode 100644 index c18aec871..000000000 --- a/package/ps3-utils/Makefile +++ /dev/null @@ -1,69 +0,0 @@ -# -# Copyright (C) 2008 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -include $(TOPDIR)/rules.mk - -PKG_NAME:=ps3-utils -PKG_VERSION:=6488134e48cf2d6f2d6471ced8346ac8cb1b855a -PKG_RELEASE:=1 - -PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 -PKG_SOURCE_URL:=http://www.kernel.org/pub/scm/linux/kernel/git/geoff/ps3-utils.git -PKG_SOURCE_PROTO:=git -PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION) -PKG_SOURCE_VERSION:=$(PKG_VERSION) - -PKG_FIXUP:=libtool -PKG_INSTALL=1 - -include $(INCLUDE_DIR)/package.mk - -define Package/ps3-utils - SECTION:=utils - CATEGORY:=Utilities - TITLE:=PS3 Linux Utilities - URL:=http://kernel.org/pub/linux/kernel/people/geoff/cell/ps3-utils/ - MAINTAINER:=Geoff Levand - DEPENDS:=@TARGET_ps3||TARGET_ps3chk||TARGET_powerpc -endef - -define Package/ps3-utils/description - The ps3-utils package is a set of system administration utilites for the - PS3 game console. -endef - -define Build/Configure - (cd $(PKG_BUILD_DIR) && $(BASH) -x ./bootstrap) - $(call Build/Configure/Default) -endef - -define Build/InstallDev - $(INSTALL_DIR) $(1)/usr/include - $(INSTALL_DATA) \ - $(PKG_INSTALL_DIR)/usr/include/ps3*.h \ - $(1)/usr/include - - $(INSTALL_DIR) $(1)/usr/lib - $(INSTALL_BIN) \ - $(PKG_INSTALL_DIR)/usr/lib/libps3-utils.{la,a,so*} \ - $(1)/usr/lib/ -endef - -define Package/ps3-utils/install - $(INSTALL_DIR) $(1)/usr/sbin - $(INSTALL_DIR) $(1)/usr/bin - $(INSTALL_DIR) $(1)/usr/lib - - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ps3-boot-game-os $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ps3-dump-bootloader $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ps3-flash-util $(1)/usr/sbin - $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ps3-video-mode $(1)/usr/bin - - $(CP) $(PKG_INSTALL_DIR)/usr/lib/libps3-utils.so.* $(1)/usr/lib -endef - -$(eval $(call BuildPackage,ps3-utils)) From b0f21b75699d02a36188207b4d1a2c06c0a1b181 Mon Sep 17 00:00:00 2001 From: nico Date: Mon, 3 May 2010 01:15:19 +0000 Subject: [PATCH 12/28] [backfire] merge r21267, r21282, r21291 & r21318 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21331 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/base-files/Makefile | 6 ++- target/linux/uml/config/x86_64 | 3 +- .../006-uml_libc_link_errors.patch | 50 +++++++++++++++++++ 3 files changed, 56 insertions(+), 3 deletions(-) create mode 100644 target/linux/uml/patches-2.6.30/006-uml_libc_link_errors.patch diff --git a/package/base-files/Makefile b/package/base-files/Makefile index c4717a78c..260255ba9 100644 --- a/package/base-files/Makefile +++ b/package/base-files/Makefile @@ -434,8 +434,10 @@ ifeq ($(CONFIG_EXTERNAL_TOOLCHAIN),) $(TOOLCHAIN_DIR)/lib/libuClibc-$(LIBC_SO_VERSION).so \ $(1)/lib/ for file in libcrypt libdl libm libnsl libresolv libutil; do \ - $(CP) $(TOOLCHAIN_DIR)/lib/$$$$file.so.* $(1)/lib/; \ - $(CP) $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_SO_VERSION).so $(1)/lib/; \ + $(CP) \ + $(TOOLCHAIN_DIR)/lib/$$$$file.so.* \ + $(TOOLCHAIN_DIR)/lib/$$$$file-$(LIBC_SO_VERSION).so \ + $(1)/lib/; \ done endef diff --git a/target/linux/uml/config/x86_64 b/target/linux/uml/config/x86_64 index 6df42ff3a..8ef700fe6 100644 --- a/target/linux/uml/config/x86_64 +++ b/target/linux/uml/config/x86_64 @@ -54,8 +54,9 @@ CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTY_COUNT=256 # CONFIG_MAC_PARTITION is not set CONFIG_MAGIC_SYSRQ=y +# CONFIG_MATOM is not set CONFIG_MCONSOLE=y -CONFIG_MCORE2=y +# CONFIG_MCORE2 is not set # CONFIG_MINI_FO is not set # CONFIG_MMAPPER is not set CONFIG_MK8=y diff --git a/target/linux/uml/patches-2.6.30/006-uml_libc_link_errors.patch b/target/linux/uml/patches-2.6.30/006-uml_libc_link_errors.patch new file mode 100644 index 000000000..d729a05c2 --- /dev/null +++ b/target/linux/uml/patches-2.6.30/006-uml_libc_link_errors.patch @@ -0,0 +1,50 @@ +--- a/arch/um/kernel/dyn.lds.S ++++ b/arch/um/kernel/dyn.lds.S +@@ -54,8 +54,21 @@ SECTIONS + .rela.got : { *(.rela.got) } + .rel.bss : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) } + .rela.bss : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) } +- .rel.plt : { *(.rel.plt) } +- .rela.plt : { *(.rela.plt) } ++ /* Deal with multilib libc */ ++ .rel.plt : ++ { ++ *(.rel.plt) ++ PROVIDE_HIDDEN (__rel_iplt_start = .); ++ *(.rel.iplt) ++ PROVIDE_HIDDEN (__rel_iplt_end = .); ++ } ++ .rela.plt : ++ { ++ *(.rela.plt) ++ PROVIDE_HIDDEN (__rela_iplt_start = .); ++ *(.rela.iplt) ++ PROVIDE_HIDDEN (__rela_iplt_end = .); ++ } + .init : { + KEEP (*(.init)) + } =0x90909090 +--- a/arch/um/kernel/uml.lds.S ++++ b/arch/um/kernel/uml.lds.S +@@ -39,6 +39,21 @@ SECTIONS + *(.gnu.warning) + *(.gnu.linkonce.t*) + } ++ /* Deal with multilib libc */ ++ .rel.plt : ++ { ++ *(.rel.plt) ++ PROVIDE_HIDDEN (__rel_iplt_start = .); ++ *(.rel.iplt) ++ PROVIDE_HIDDEN (__rel_iplt_end = .); ++ } ++ .rela.plt : ++ { ++ *(.rela.plt) ++ PROVIDE_HIDDEN (__rela_iplt_start = .); ++ *(.rela.iplt) ++ PROVIDE_HIDDEN (__rela_iplt_end = .); ++ } + + . = ALIGN(PAGE_SIZE); + .syscall_stub : { From 8438763b7c8484503be29ab6cd4867c859b0efa5 Mon Sep 17 00:00:00 2001 From: florian Date: Mon, 3 May 2010 06:18:02 +0000 Subject: [PATCH 13/28] backport r21306 to backfire (#7274) git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21332 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../260-no_ehci_over_current_check.patch | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 target/linux/brcm63xx/patches-2.6.32/260-no_ehci_over_current_check.patch diff --git a/target/linux/brcm63xx/patches-2.6.32/260-no_ehci_over_current_check.patch b/target/linux/brcm63xx/patches-2.6.32/260-no_ehci_over_current_check.patch new file mode 100644 index 000000000..28eb78ce8 --- /dev/null +++ b/target/linux/brcm63xx/patches-2.6.32/260-no_ehci_over_current_check.patch @@ -0,0 +1,18 @@ +Index: linux-2.6.32.12/drivers/usb/host/ehci-hub.c +=================================================================== +--- linux-2.6.32.12.orig/drivers/usb/host/ehci-hub.c 2010-05-02 21:06:45.000000000 +0200 ++++ linux-2.6.32.12/drivers/usb/host/ehci-hub.c 2010-05-02 21:07:08.000000000 +0200 +@@ -741,11 +741,13 @@ + * power switching; they're allowed to just limit the + * current. khubd will turn the power back on. + */ ++#ifndef CONFIG_BCM63XX + if (HCS_PPC (ehci->hcs_params)){ + ehci_writel(ehci, + temp & ~(PORT_RWC_BITS | PORT_POWER), + status_reg); + } ++#endif + } + + /* whoever resumes must GetPortStatus to complete it!! */ From d26b6f388c7bf66c82d7bb2228bbe5db135c546c Mon Sep 17 00:00:00 2001 From: nico Date: Mon, 3 May 2010 10:34:04 +0000 Subject: [PATCH 14/28] [backfire] merge r21247 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21339 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/kernel/modules/other.mk | 14 ++++++++++++++ target/linux/brcm-2.4/modules.mk | 13 ------------- 2 files changed, 14 insertions(+), 13 deletions(-) delete mode 100644 target/linux/brcm-2.4/modules.mk diff --git a/package/kernel/modules/other.mk b/package/kernel/modules/other.mk index 68d9c88e1..52fbc525e 100644 --- a/package/kernel/modules/other.mk +++ b/package/kernel/modules/other.mk @@ -105,8 +105,22 @@ define KernelPackage/lp AUTOLOAD:=$(call AutoLoad,50,parport lp) endef +define KernelPackage/lp/2.4 + FILES:= \ + $(LINUX_DIR)/drivers/parport/parport.$(LINUX_KMOD_SUFFIX) \ + $(LINUX_DIR)/drivers/parport/parport_*.$(LINUX_KMOD_SUFFIX) \ + $(LINUX_DIR)/drivers/char/lp.$(LINUX_KMOD_SUFFIX) \ + $(LINUX_DIR)/drivers/char/ppdev.$(LINUX_KMOD_SUFFIX) + AUTOLOAD:=$(call AutoLoad,50, \ + parport \ + parport_splink \ + lp \ + ) +endef + $(eval $(call KernelPackage,lp)) + define KernelPackage/pcspkr SUBMENU:=$(OTHER_MENU) TITLE:=PC speaker support diff --git a/target/linux/brcm-2.4/modules.mk b/target/linux/brcm-2.4/modules.mk deleted file mode 100644 index 44f54405a..000000000 --- a/target/linux/brcm-2.4/modules.mk +++ /dev/null @@ -1,13 +0,0 @@ -define KernelPackage/lp/brcm-2.4 - FILES:= \ - $(LINUX_DIR)/drivers/parport/parport.$(LINUX_KMOD_SUFFIX) \ - $(LINUX_DIR)/drivers/parport/parport_*.$(LINUX_KMOD_SUFFIX) \ - $(LINUX_DIR)/drivers/char/lp.$(LINUX_KMOD_SUFFIX) \ - $(LINUX_DIR)/drivers/char/ppdev.$(LINUX_KMOD_SUFFIX) - AUTOLOAD:=$(call AutoLoad,50, \ - parport \ - parport_splink \ - lp \ - ) -endef - From f3396dc68f843669876fdc66da307e78b66fdf2e Mon Sep 17 00:00:00 2001 From: nico Date: Mon, 3 May 2010 11:44:16 +0000 Subject: [PATCH 15/28] [backfire] remove JFFS2 compressor options introduced in [21322] git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21342 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- include/image.mk | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/include/image.mk b/include/image.mk index de5f4d84c..fec1990fd 100644 --- a/include/image.mk +++ b/include/image.mk @@ -25,25 +25,6 @@ else SQUASHFS_OPTS := -le endif -ifeq ($(CONFIG_JFFS2_RTIME),y) - JFFS2OPTS += -X rtime -endif -ifeq ($(CONFIG_JFFS2_ZLIB),y) - JFFS2OPTS += -X zlib -endif -ifeq ($(CONFIG_JFFS2_LZMA),y) - JFFS2OPTS += -X lzma --compression-mode=size -endif -ifneq ($(CONFIG_JFFS2_RTIME),y) - JFFS2OPTS += -x rtime -endif -ifneq ($(CONFIG_JFFS2_ZLIB),y) - JFFS2OPTS += -x zlib -endif -ifneq ($(CONFIG_JFFS2_LZMA),y) - JFFS2OPTS += -x lzma -endif - ifneq ($(CONFIG_LINUX_2_4)$(CONFIG_LINUX_2_6_25),) USE_SQUASHFS3 := y endif From 9b4d06c684a20c56605008b9e536f64f5b45caba Mon Sep 17 00:00:00 2001 From: jow Date: Mon, 3 May 2010 20:33:23 +0000 Subject: [PATCH 16/28] [backfire] merge r21344 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21345 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../patches-2.6.30/975-hifn795x-byteswap.patch | 17 +++++++++++++++++ .../patches-2.6.32/975-hifn795x-byteswap.patch | 17 +++++++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 target/linux/generic-2.6/patches-2.6.30/975-hifn795x-byteswap.patch create mode 100644 target/linux/generic-2.6/patches-2.6.32/975-hifn795x-byteswap.patch diff --git a/target/linux/generic-2.6/patches-2.6.30/975-hifn795x-byteswap.patch b/target/linux/generic-2.6/patches-2.6.30/975-hifn795x-byteswap.patch new file mode 100644 index 000000000..3a37c951e --- /dev/null +++ b/target/linux/generic-2.6/patches-2.6.30/975-hifn795x-byteswap.patch @@ -0,0 +1,17 @@ +--- a/drivers/crypto/hifn_795x.c ++++ b/drivers/crypto/hifn_795x.c +@@ -682,12 +682,12 @@ static inline u32 hifn_read_1(struct hif + + static inline void hifn_write_0(struct hifn_device *dev, u32 reg, u32 val) + { +- writel((__force u32)cpu_to_le32(val), dev->bar[0] + reg); ++ writel(val, dev->bar[0] + reg); + } + + static inline void hifn_write_1(struct hifn_device *dev, u32 reg, u32 val) + { +- writel((__force u32)cpu_to_le32(val), dev->bar[1] + reg); ++ writel(val, dev->bar[1] + reg); + } + + static void hifn_wait_puc(struct hifn_device *dev) diff --git a/target/linux/generic-2.6/patches-2.6.32/975-hifn795x-byteswap.patch b/target/linux/generic-2.6/patches-2.6.32/975-hifn795x-byteswap.patch new file mode 100644 index 000000000..3a37c951e --- /dev/null +++ b/target/linux/generic-2.6/patches-2.6.32/975-hifn795x-byteswap.patch @@ -0,0 +1,17 @@ +--- a/drivers/crypto/hifn_795x.c ++++ b/drivers/crypto/hifn_795x.c +@@ -682,12 +682,12 @@ static inline u32 hifn_read_1(struct hif + + static inline void hifn_write_0(struct hifn_device *dev, u32 reg, u32 val) + { +- writel((__force u32)cpu_to_le32(val), dev->bar[0] + reg); ++ writel(val, dev->bar[0] + reg); + } + + static inline void hifn_write_1(struct hifn_device *dev, u32 reg, u32 val) + { +- writel((__force u32)cpu_to_le32(val), dev->bar[1] + reg); ++ writel(val, dev->bar[1] + reg); + } + + static void hifn_wait_puc(struct hifn_device *dev) From bf724b01bf44f0bc00b163ef7af878ce5d975a53 Mon Sep 17 00:00:00 2001 From: florian Date: Tue, 4 May 2010 07:34:00 +0000 Subject: [PATCH 17/28] backport r21347 to backfire git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21348 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/acx/patches/006-netdev_ops.patch | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/acx/patches/006-netdev_ops.patch b/package/acx/patches/006-netdev_ops.patch index b687c211c..e7840c6eb 100644 --- a/package/acx/patches/006-netdev_ops.patch +++ b/package/acx/patches/006-netdev_ops.patch @@ -50,7 +50,7 @@ Index: acx-20080210/pci.c goto fail_alloc_netdev; } ether_setup(ndev); -+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) ++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,30) ndev->open = &acxpci_e_open; ndev->stop = &acxpci_e_close; ndev->hard_start_xmit = &acx_i_start_xmit; From 8d9751d5ba02dab0035795c7c26ccc280f973db1 Mon Sep 17 00:00:00 2001 From: florian Date: Tue, 4 May 2010 07:39:38 +0000 Subject: [PATCH 18/28] backport r21349 to backfire git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21350 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- target/linux/adm5120/router_le/config-2.6.32 | 1 - 1 file changed, 1 deletion(-) diff --git a/target/linux/adm5120/router_le/config-2.6.32 b/target/linux/adm5120/router_le/config-2.6.32 index 897592874..c576af67e 100644 --- a/target/linux/adm5120/router_le/config-2.6.32 +++ b/target/linux/adm5120/router_le/config-2.6.32 @@ -250,7 +250,6 @@ CONFIG_USB_EHCI_HCD=m CONFIG_USB_OHCI_HCD=m CONFIG_USB_SUPPORT=y # CONFIG_USB_UHCI_HCD is not set -CONFIG_VLAN_8021Q=m CONFIG_VM_EVENT_COUNTERS=y CONFIG_YAFFS_9BYTE_TAGS=y # CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set From 5eaa0e53858e7125b7cfb849f6f321747cf0c42e Mon Sep 17 00:00:00 2001 From: nbd Date: Tue, 4 May 2010 15:36:29 +0000 Subject: [PATCH 19/28] [backfire] backport mac80211 and hostapd from trunk git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21354 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/hostapd/Makefile | 4 +- package/hostapd/files/hostapd.sh | 5 + .../hostapd/patches/001-nl80211_sync.patch | 21 ++++ package/hostapd/patches/110-countrycode.patch | 2 +- package/hostapd/patches/130-scan_wait.patch | 20 ++-- package/hostapd/patches/200-multicall.patch | 28 ++--- package/hostapd/patches/310-scan_ssid.patch | 4 +- .../patches/320-rescan_immediately.patch | 14 +-- package/hostapd/patches/350-wds_fix.patch | 4 +- package/hostapd/patches/360-wds_bridge.patch | 8 +- package/hostapd/patches/370-basic_rates.patch | 2 +- package/hostapd/patches/380-ap_isolate.patch | 108 +++++++++++++++++ .../hostapd/patches/390-nl80211_fixes.patch | 109 ++++++++++++++++++ .../patches/400-nl80211_sta_auth.patch | 19 +++ package/mac80211/Makefile | 24 +++- package/mac80211/files/lib/wifi/mac80211.sh | 4 + .../mac80211/patches/001-disable_b44.patch | 2 +- .../mac80211/patches/002-disable_rfkill.patch | 2 +- .../patches/007-remove_misc_drivers.patch | 4 +- package/mac80211/patches/010-no_pcmcia.patch | 4 +- package/mac80211/patches/011-no_sdio.patch | 2 +- .../patches/013-disable_b43_nphy.patch | 2 +- .../mac80211/patches/014-add_iw_handler.patch | 33 ------ .../patches/015-remove-rt2x00-options.patch | 4 +- .../patches/120-compat_rcu_dereference.patch | 11 ++ ...0-tracepoint_include_linux_version_h.patch | 11 ++ package/mac80211/patches/300-fix-mesh.patch | 45 -------- ...h9k-fix-invalid-mac-address-handling.patch | 6 +- .../patches/404-ath_regd_optional.patch | 2 +- ...m-data-from-platform-data-on-pci-bus.patch | 2 +- ...ROM-only-if-no-platform-data-present.patch | 31 +++-- ...rride-mac-address-from-platform-data.patch | 14 +-- .../408-ath9k_tweak_rx_intr_mitigation.patch | 4 +- ...-add-wndr3700-antenna-initialization.patch | 30 ++--- .../410-ath9k-wndr3700-led-pin-fix.patch | 2 +- .../patches/500-ath9k_debugfs_chainmask.patch | 8 +- .../patches/510-ath9k_debugfs_regaccess.patch | 8 +- .../patches/520-cfg80211_get_freq.patch | 2 +- .../mac80211/patches/530-minstrel_ht.patch | 32 +++-- .../patches/540-ath9k_use_minstrel.patch | 2 +- .../mac80211/patches/550-ath9k_bb_fix.patch | 59 ---------- .../550-ath9k_no_multi_desc_frames.patch | 24 ++++ ...e-pci-code-if-CONFIG_PCI-not-defined.patch | 4 +- .../601-rt2x00-lib-use-rt2x00dev-irq.patch | 2 +- ...2-rt2x00-remove-mcu-requests-for-soc.patch | 58 +++------- ...700-mwl8k-missing-pci-id-for-WNR854T.patch | 10 ++ 46 files changed, 488 insertions(+), 308 deletions(-) create mode 100644 package/hostapd/patches/001-nl80211_sync.patch create mode 100644 package/hostapd/patches/380-ap_isolate.patch create mode 100644 package/hostapd/patches/390-nl80211_fixes.patch create mode 100644 package/hostapd/patches/400-nl80211_sta_auth.patch delete mode 100644 package/mac80211/patches/014-add_iw_handler.patch create mode 100644 package/mac80211/patches/120-compat_rcu_dereference.patch create mode 100644 package/mac80211/patches/130-tracepoint_include_linux_version_h.patch delete mode 100644 package/mac80211/patches/300-fix-mesh.patch delete mode 100644 package/mac80211/patches/550-ath9k_bb_fix.patch create mode 100644 package/mac80211/patches/550-ath9k_no_multi_desc_frames.patch create mode 100644 package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch diff --git a/package/hostapd/Makefile b/package/hostapd/Makefile index 0ccba9ad9..72a7205dd 100644 --- a/package/hostapd/Makefile +++ b/package/hostapd/Makefile @@ -8,9 +8,9 @@ include $(TOPDIR)/rules.mk PKG_NAME:=hostapd -PKG_VERSION:=20100309 +PKG_VERSION:=20100418 PKG_RELEASE:=1 -PKG_REV:=7b90c16aa9ca377b1a6d160c1ba0f2bd304f7e2f +PKG_REV:=0b86f67a2970403d1b1b6d34ce49f5485ef5dbb3 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2 PKG_SOURCE_URL:=git://w1.fi/srv/git/hostap.git diff --git a/package/hostapd/files/hostapd.sh b/package/hostapd/files/hostapd.sh index 9dc18366d..a41c7678a 100644 --- a/package/hostapd/files/hostapd.sh +++ b/package/hostapd/files/hostapd.sh @@ -5,6 +5,11 @@ hostapd_set_bss_options() { config_get enc "$vif" encryption config_get wpa_group_rekey "$vif" wpa_group_rekey + config_get_bool ap_isolate "$vif" isolate 0 + + if [ "$ap_isolate" -gt 0 ]; then + append "$var" "ap_isolate=$ap_isolate" "$N" + fi # Examples: # psk-mixed/tkip => WPA1+2 PSK, TKIP diff --git a/package/hostapd/patches/001-nl80211_sync.patch b/package/hostapd/patches/001-nl80211_sync.patch new file mode 100644 index 000000000..a9310c704 --- /dev/null +++ b/package/hostapd/patches/001-nl80211_sync.patch @@ -0,0 +1,21 @@ +--- a/src/drivers/nl80211_copy.h ++++ b/src/drivers/nl80211_copy.h +@@ -709,6 +709,9 @@ enum nl80211_commands { + * NL80211_CMD_AUTHENTICATE, NL80211_CMD_DEAUTHENTICATE, + * NL80211_CMD_DISASSOCIATE. + * ++ * @NL80211_ATTR_AP_ISOLATE: (AP mode) Do not forward traffic between stations ++ * connected to this BSS. ++ * + * @NL80211_ATTR_MAX: highest attribute number currently defined + * @__NL80211_ATTR_AFTER_LAST: internal use + */ +@@ -864,6 +867,8 @@ enum nl80211_attrs { + + NL80211_ATTR_LOCAL_STATE_CHANGE, + ++ NL80211_ATTR_AP_ISOLATE, ++ + /* add attributes here, update the policy in nl80211.c */ + + __NL80211_ATTR_AFTER_LAST, diff --git a/package/hostapd/patches/110-countrycode.patch b/package/hostapd/patches/110-countrycode.patch index 083de89c1..88dd1e92e 100644 --- a/package/hostapd/patches/110-countrycode.patch +++ b/package/hostapd/patches/110-countrycode.patch @@ -1,6 +1,6 @@ --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -650,7 +650,6 @@ static int setup_interface(struct hostap +@@ -659,7 +659,6 @@ static int setup_interface(struct hostap country[3] = '\0'; if (hostapd_set_country(hapd, country) < 0) { wpa_printf(MSG_ERROR, "Failed to set country code"); diff --git a/package/hostapd/patches/130-scan_wait.patch b/package/hostapd/patches/130-scan_wait.patch index 1e29a41ca..5e8d1e72e 100644 --- a/package/hostapd/patches/130-scan_wait.patch +++ b/package/hostapd/patches/130-scan_wait.patch @@ -1,6 +1,6 @@ --- a/src/ap/hostapd.h +++ b/src/ap/hostapd.h -@@ -238,6 +238,7 @@ struct hostapd_iface { +@@ -245,6 +245,7 @@ struct hostapd_iface { int (*for_each_interface)(struct hapd_interfaces *interfaces, int (*cb)(struct hostapd_iface *iface, void *ctx), void *ctx); @@ -10,7 +10,7 @@ /* hostapd.c */ --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -746,6 +746,9 @@ int hostapd_setup_interface_complete(str +@@ -754,6 +754,9 @@ int hostapd_setup_interface_complete(str wpa_printf(MSG_DEBUG, "%s: Setup of interface done.", iface->bss[0]->conf->iface); @@ -55,7 +55,7 @@ hapd_iface->reload_config = hostapd_reload_config; hapd_iface->config_read_cb = hostapd_config_read; hapd_iface->config_fname = os_strdup(config_file); -@@ -390,7 +402,7 @@ static int hostapd_global_init(struct ha +@@ -391,7 +403,7 @@ static int hostapd_global_init(struct ha } @@ -64,7 +64,7 @@ { #ifdef EAP_SERVER_TNC tncs_global_deinit(); -@@ -408,8 +420,7 @@ static void hostapd_global_deinit(const +@@ -409,8 +421,7 @@ static void hostapd_global_deinit(const } @@ -74,7 +74,7 @@ { #ifdef EAP_SERVER_TNC int tnc = 0; -@@ -430,11 +441,6 @@ static int hostapd_global_run(struct hap +@@ -431,11 +442,6 @@ static int hostapd_global_run(struct hap } #endif /* EAP_SERVER_TNC */ @@ -86,7 +86,7 @@ eloop_run(); return 0; -@@ -478,8 +484,7 @@ int main(int argc, char *argv[]) +@@ -479,8 +485,7 @@ int main(int argc, char *argv[]) struct hapd_interfaces interfaces; int ret = 1; size_t i; @@ -96,7 +96,7 @@ if (os_program_init()) return -1; -@@ -544,7 +549,7 @@ int main(int argc, char *argv[]) +@@ -545,7 +550,7 @@ int main(int argc, char *argv[]) goto out; } @@ -105,7 +105,7 @@ goto out; ret = 0; -@@ -555,7 +560,7 @@ int main(int argc, char *argv[]) +@@ -556,7 +561,7 @@ int main(int argc, char *argv[]) hostapd_interface_deinit_free(interfaces.iface[i]); os_free(interfaces.iface); @@ -116,7 +116,7 @@ os_program_deinit(); --- a/hostapd/config_file.c +++ b/hostapd/config_file.c -@@ -1855,6 +1855,8 @@ struct hostapd_config * hostapd_config_r +@@ -1857,6 +1857,8 @@ struct hostapd_config * hostapd_config_r } #endif /* CONFIG_IEEE80211W */ #ifdef CONFIG_IEEE80211N @@ -127,7 +127,7 @@ } else if (os_strcmp(buf, "ht_capab") == 0) { --- a/src/ap/ap_config.h +++ b/src/ap/ap_config.h -@@ -366,6 +366,7 @@ struct hostapd_config { +@@ -369,6 +369,7 @@ struct hostapd_config { int ht_op_mode_fixed; u16 ht_capab; diff --git a/package/hostapd/patches/200-multicall.patch b/package/hostapd/patches/200-multicall.patch index 4ba9301a3..006e26a94 100644 --- a/package/hostapd/patches/200-multicall.patch +++ b/package/hostapd/patches/200-multicall.patch @@ -26,7 +26,7 @@ LIBS += $(DRV_AP_LIBS) ifdef CONFIG_L2_PACKET -@@ -738,6 +743,12 @@ install: all +@@ -739,6 +744,12 @@ install: all BCHECK=../src/drivers/build.hostapd @@ -39,7 +39,7 @@ hostapd: $(BCHECK) $(OBJS) $(CC) $(LDFLAGS) -o hostapd $(OBJS) $(LIBS) -@@ -776,6 +787,12 @@ HOBJS += ../src/crypto/aes-internal.o +@@ -777,6 +788,12 @@ HOBJS += ../src/crypto/aes-internal.o HOBJS += ../src/crypto/aes-internal-enc.o endif @@ -86,7 +86,7 @@ endif ifdef NEED_RSN_AUTHENTICATOR -@@ -1261,6 +1272,12 @@ BCHECK=../src/drivers/build.wpa_supplica +@@ -1262,6 +1273,12 @@ BCHECK=../src/drivers/build.wpa_supplica wpa_priv: $(BCHECK) $(OBJS_priv) $(LDO) $(LDFLAGS) -o wpa_priv $(OBJS_priv) $(LIBS) @@ -99,7 +99,7 @@ wpa_supplicant: .config $(BCHECK) $(OBJS) $(EXTRA_progs) $(LDO) $(LDFLAGS) -o wpa_supplicant $(OBJS) $(LIBS) $(EXTRALIBS) -@@ -1320,6 +1337,12 @@ endif +@@ -1321,6 +1338,12 @@ endif $(Q)$(CC) -c -o $@ $(CFLAGS) $< @$(E) " CC " $< @@ -114,7 +114,7 @@ wpa_cli.exe: wpa_cli --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -2413,8 +2413,8 @@ union wpa_event_data { +@@ -2449,8 +2449,8 @@ union wpa_event_data { * Driver wrapper code should call this function whenever an event is received * from the driver. */ @@ -127,7 +127,7 @@ /* --- a/src/ap/drv_callbacks.c +++ b/src/ap/drv_callbacks.c -@@ -337,8 +337,8 @@ static void hostapd_event_eapol_rx(struc +@@ -375,8 +375,8 @@ static void hostapd_event_eapol_rx(struc } @@ -138,7 +138,7 @@ { struct hostapd_data *hapd = ctx; -@@ -415,5 +415,6 @@ void wpa_supplicant_event(void *ctx, enu +@@ -453,5 +453,6 @@ void wpa_supplicant_event(void *ctx, enu break; } } @@ -169,8 +169,8 @@ for (;;) { --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c -@@ -1506,8 +1506,8 @@ static void wpa_supplicant_event_ibss_rs - #endif /* CONFIG_IBSS_RSN */ +@@ -1577,8 +1577,8 @@ static void ft_rx_action(struct wpa_supp + #endif /* CONFIG_IEEE80211R */ -void wpa_supplicant_event(void *ctx, enum wpa_event_type event, @@ -179,10 +179,10 @@ + union wpa_event_data *data) { struct wpa_supplicant *wpa_s = ctx; - + u16 reason_code = 0; --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c -@@ -2215,6 +2215,9 @@ struct wpa_supplicant * wpa_supplicant_g +@@ -2223,6 +2223,9 @@ struct wpa_supplicant * wpa_supplicant_g return NULL; } @@ -192,7 +192,7 @@ /** * wpa_supplicant_init - Initialize %wpa_supplicant -@@ -2233,6 +2236,7 @@ struct wpa_global * wpa_supplicant_init( +@@ -2241,6 +2244,7 @@ struct wpa_global * wpa_supplicant_init( if (params == NULL) return NULL; @@ -202,7 +202,7 @@ wpa_debug_open_syslog(); --- a/hostapd/main.c +++ b/hostapd/main.c -@@ -478,6 +478,9 @@ static void usage(void) +@@ -479,6 +479,9 @@ static void usage(void) exit(1); } @@ -212,7 +212,7 @@ int main(int argc, char *argv[]) { -@@ -489,6 +492,7 @@ int main(int argc, char *argv[]) +@@ -490,6 +493,7 @@ int main(int argc, char *argv[]) if (os_program_init()) return -1; diff --git a/package/hostapd/patches/310-scan_ssid.patch b/package/hostapd/patches/310-scan_ssid.patch index 157209820..60babf474 100644 --- a/package/hostapd/patches/310-scan_ssid.patch +++ b/package/hostapd/patches/310-scan_ssid.patch @@ -8,7 +8,7 @@ size_t max_ssids; enum wpa_states prev_state; -@@ -310,6 +311,16 @@ static void wpa_supplicant_scan(void *el +@@ -311,6 +312,16 @@ static void wpa_supplicant_scan(void *el wpa_s->wpa_state == WPA_INACTIVE) wpa_supplicant_set_state(wpa_s, WPA_SCANNING); @@ -25,7 +25,7 @@ /* Find the starting point from which to continue scanning */ ssid = wpa_s->conf->ssid; if (wpa_s->prev_scan_ssid != WILDCARD_SSID_SCAN) { -@@ -371,6 +382,9 @@ static void wpa_supplicant_scan(void *el +@@ -374,6 +385,9 @@ static void wpa_supplicant_scan(void *el int_array_sort_unique(params.freqs); } diff --git a/package/hostapd/patches/320-rescan_immediately.patch b/package/hostapd/patches/320-rescan_immediately.patch index f486baf64..1a0eb58a7 100644 --- a/package/hostapd/patches/320-rescan_immediately.patch +++ b/package/hostapd/patches/320-rescan_immediately.patch @@ -1,11 +1,11 @@ --- a/wpa_supplicant/events.c +++ b/wpa_supplicant/events.c -@@ -924,7 +924,7 @@ static void wpa_supplicant_event_scan_re +@@ -958,7 +958,7 @@ static void wpa_supplicant_event_scan_re wpa_printf(MSG_DEBUG, "Setup a new network"); wpa_supplicant_associate(wpa_s, NULL, ssid); - } else -- wpa_supplicant_req_new_scan(wpa_s, 5); -+ wpa_supplicant_req_new_scan(wpa_s, 0); - } - } - #endif /* CONFIG_NO_SCAN_PROCESSING */ + } else { +- int timeout_sec = 5; ++ int timeout_sec = 0; + int timeout_usec = 0; + wpa_supplicant_req_new_scan(wpa_s, timeout_sec, + timeout_usec); diff --git a/package/hostapd/patches/350-wds_fix.patch b/package/hostapd/patches/350-wds_fix.patch index 57bbafb88..7bcf410a9 100644 --- a/package/hostapd/patches/350-wds_fix.patch +++ b/package/hostapd/patches/350-wds_fix.patch @@ -1,6 +1,6 @@ --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -4435,9 +4435,11 @@ static int i802_set_wds_sta(void *priv, +@@ -4576,9 +4576,11 @@ static int i802_set_wds_sta(void *priv, wpa_printf(MSG_DEBUG, "nl80211: Set WDS STA addr=" MACSTR " aid=%d val=%d name=%s", MAC2STR(addr), aid, val, name); if (val) { @@ -16,7 +16,7 @@ } else { --- a/src/ap/ieee802_11.c +++ b/src/ap/ieee802_11.c -@@ -1559,6 +1559,9 @@ static void handle_assoc_cb(struct hosta +@@ -1614,6 +1614,9 @@ static void handle_assoc_cb(struct hosta "Could not add STA to kernel driver"); } diff --git a/package/hostapd/patches/360-wds_bridge.patch b/package/hostapd/patches/360-wds_bridge.patch index d563bdbd8..48867922b 100644 --- a/package/hostapd/patches/360-wds_bridge.patch +++ b/package/hostapd/patches/360-wds_bridge.patch @@ -21,7 +21,7 @@ /* clear to get error below if setting is invalid */ --- a/src/drivers/driver_nl80211.c +++ b/src/drivers/driver_nl80211.c -@@ -4425,7 +4425,8 @@ static int i802_set_sta_vlan(void *priv, +@@ -4566,7 +4566,8 @@ static int i802_set_sta_vlan(void *priv, } @@ -31,7 +31,7 @@ { struct i802_bss *bss = priv; struct wpa_driver_nl80211_data *drv = bss->drv; -@@ -4439,6 +4440,10 @@ static int i802_set_wds_sta(void *priv, +@@ -4580,6 +4581,10 @@ static int i802_set_wds_sta(void *priv, if (nl80211_create_iface(drv, name, NL80211_IFTYPE_AP_VLAN, NULL, 1) < 0) return -1; @@ -44,7 +44,7 @@ return i802_set_sta_vlan(priv, addr, name, 0); --- a/src/ap/ap_drv_ops.c +++ b/src/ap/ap_drv_ops.c -@@ -253,9 +253,15 @@ static int hostapd_vlan_if_remove(struct +@@ -265,9 +265,15 @@ static int hostapd_vlan_if_remove(struct static int hostapd_set_wds_sta(struct hostapd_data *hapd, const u8 *addr, int aid, int val) { @@ -63,7 +63,7 @@ --- a/src/drivers/driver.h +++ b/src/drivers/driver.h -@@ -1610,7 +1610,8 @@ struct wpa_driver_ops { +@@ -1622,7 +1622,8 @@ struct wpa_driver_ops { * @val: 1 = bind to 4-address WDS; 0 = unbind * Returns: 0 on success, -1 on failure */ diff --git a/package/hostapd/patches/370-basic_rates.patch b/package/hostapd/patches/370-basic_rates.patch index ef4691bbd..98420c01f 100644 --- a/package/hostapd/patches/370-basic_rates.patch +++ b/package/hostapd/patches/370-basic_rates.patch @@ -1,6 +1,6 @@ --- a/src/ap/hostapd.c +++ b/src/ap/hostapd.c -@@ -707,6 +707,16 @@ int hostapd_setup_interface_complete(str +@@ -715,6 +715,16 @@ int hostapd_setup_interface_complete(str } } diff --git a/package/hostapd/patches/380-ap_isolate.patch b/package/hostapd/patches/380-ap_isolate.patch new file mode 100644 index 000000000..92ac6ded8 --- /dev/null +++ b/package/hostapd/patches/380-ap_isolate.patch @@ -0,0 +1,108 @@ +--- a/hostapd/config_file.c ++++ b/hostapd/config_file.c +@@ -1266,6 +1266,8 @@ struct hostapd_config * hostapd_config_r + } + } else if (os_strcmp(buf, "wds_sta") == 0) { + bss->wds_sta = atoi(pos); ++ } else if (os_strcmp(buf, "ap_isolate") == 0) { ++ bss->isolate = atoi(pos); + } else if (os_strcmp(buf, "ap_max_inactivity") == 0) { + bss->ap_max_inactivity = atoi(pos); + } else if (os_strcmp(buf, "country_code") == 0) { +--- a/src/ap/ap_config.h ++++ b/src/ap/ap_config.h +@@ -199,6 +199,7 @@ struct hostapd_bss_config { + struct mac_acl_entry *deny_mac; + int num_deny_mac; + int wds_sta; ++ int isolate; + + int auth_algs; /* bitfield of allowed IEEE 802.11 authentication + * algorithms, WPA_AUTH_ALG_{OPEN,SHARED,LEAP} */ +--- a/src/drivers/driver.h ++++ b/src/drivers/driver.h +@@ -1626,6 +1626,14 @@ struct wpa_driver_ops { + const char *bridge_ifname); + + /** ++ * set_ap_isolate - Enable/disable AP isolation ++ * @priv: private driver interface data ++ * @val: 1 = enabled; 0 = disabled ++ * Returns: 0 on success, -1 on failure ++ */ ++ int (*set_ap_isolate)(void *priv, int val); ++ ++ /** + * send_action - Transmit an Action frame + * @priv: Private driver interface data + * @freq: Frequency (in MHz) of the channel +--- a/src/drivers/driver_nl80211.c ++++ b/src/drivers/driver_nl80211.c +@@ -4263,6 +4263,29 @@ static int i802_set_rate_sets(void *priv + return -ENOBUFS; + } + ++static int i802_set_ap_isolate(void *priv, int val) ++{ ++ struct i802_bss *bss = priv; ++ struct wpa_driver_nl80211_data *drv = bss->drv; ++ struct nl_msg *msg; ++ int i; ++ ++ msg = nlmsg_alloc(); ++ if (!msg) ++ return -ENOMEM; ++ ++ genlmsg_put(msg, 0, 0, genl_family_get_id(drv->nl80211), 0, 0, ++ NL80211_CMD_SET_BSS, 0); ++ ++ NLA_PUT_U8(msg, NL80211_ATTR_AP_ISOLATE, !!val); ++ ++ NLA_PUT_U32(msg, NL80211_ATTR_IFINDEX, if_nametoindex(bss->ifname)); ++ ++ return send_and_recv_msgs(drv, msg, NULL, NULL); ++ nla_put_failure: ++ return -ENOBUFS; ++} ++ + #endif /* HOSTAPD */ + + +@@ -5372,6 +5395,7 @@ const struct wpa_driver_ops wpa_driver_n + .set_tx_queue_params = i802_set_tx_queue_params, + .set_sta_vlan = i802_set_sta_vlan, + .set_wds_sta = i802_set_wds_sta, ++ .set_ap_isolate = i802_set_ap_isolate, + #endif /* HOSTAPD */ + .set_freq = i802_set_freq, + .send_action = wpa_driver_nl80211_send_action, +--- a/src/ap/ap_drv_ops.c ++++ b/src/ap/ap_drv_ops.c +@@ -180,6 +180,14 @@ static int hostapd_set_radius_acl_expire + } + + ++static int hostapd_set_ap_isolate(struct hostapd_data *hapd, int value) ++{ ++ if (hapd->driver == NULL || hapd->driver->set_ap_isolate == NULL) ++ return 0; ++ hapd->driver->set_ap_isolate(hapd->drv_priv, value); ++} ++ ++ + static int hostapd_set_bss_params(struct hostapd_data *hapd, + int use_protection) + { +@@ -229,6 +237,12 @@ static int hostapd_set_bss_params(struct + "driver"); + ret = -1; + } ++ if (hostapd_set_ap_isolate(hapd, hapd->conf->isolate) && ++ !hapd->conf->isolate) { ++ wpa_printf(MSG_ERROR, "Could not enable AP isolation in " ++ "kernel driver"); ++ ret = -1; ++ } + + return ret; + } diff --git a/package/hostapd/patches/390-nl80211_fixes.patch b/package/hostapd/patches/390-nl80211_fixes.patch new file mode 100644 index 000000000..fdac284b6 --- /dev/null +++ b/package/hostapd/patches/390-nl80211_fixes.patch @@ -0,0 +1,109 @@ +--- a/src/drivers/driver_nl80211.c ++++ b/src/drivers/driver_nl80211.c +@@ -1119,7 +1119,6 @@ nla_put_failure: + } + + +-#ifndef HOSTAPD + struct wiphy_info_data { + int max_scan_ssids; + int ap_supported; +@@ -1231,7 +1230,6 @@ static int wpa_driver_nl80211_capa(struc + + return 0; + } +-#endif /* HOSTAPD */ + + + static int wpa_driver_nl80211_init_nl(struct wpa_driver_nl80211_data *drv, +@@ -1371,6 +1369,7 @@ static void * wpa_driver_nl80211_init(vo + drv->monitor_ifidx = -1; + drv->monitor_sock = -1; + drv->ioctl_sock = -1; ++ drv->nlmode = NL80211_IFTYPE_STATION; + + if (wpa_driver_nl80211_init_nl(drv, ctx)) { + os_free(drv); +@@ -1468,24 +1467,23 @@ wpa_driver_nl80211_finish_drv_init(struc + drv->ifindex = if_nametoindex(bss->ifname); + drv->first_bss.ifindex = drv->ifindex; + +-#ifndef HOSTAPD +- if (wpa_driver_nl80211_set_mode(bss, IEEE80211_MODE_INFRA) < 0) { +- wpa_printf(MSG_DEBUG, "nl80211: Could not configure driver to " +- "use managed mode"); +- } +- +- if (linux_set_iface_flags(drv->ioctl_sock, bss->ifname, 1)) { +- wpa_printf(MSG_ERROR, "Could not set interface '%s' UP", +- bss->ifname); +- return -1; +- } ++ if (drv->nlmode == NL80211_IFTYPE_STATION) { ++ if (wpa_driver_nl80211_set_mode(bss, IEEE80211_MODE_INFRA) < 0) ++ wpa_printf(MSG_DEBUG, "nl80211: Could not configure " ++ "driver to use managed mode"); ++ ++ if (linux_set_iface_flags(drv->ioctl_sock, bss->ifname, 1)) { ++ wpa_printf(MSG_ERROR, "Could not set interface '%s' UP", ++ bss->ifname); ++ return -1; ++ } + +- if (wpa_driver_nl80211_capa(drv)) +- return -1; ++ if (wpa_driver_nl80211_capa(drv)) ++ return -1; + +- netlink_send_oper_ifla(drv->netlink, drv->ifindex, +- 1, IF_OPER_DORMANT); +-#endif /* HOSTAPD */ ++ netlink_send_oper_ifla(drv->netlink, drv->ifindex, ++ 1, IF_OPER_DORMANT); ++ } + + if (nl80211_register_action_frames(drv) < 0) { + wpa_printf(MSG_DEBUG, "nl80211: Failed to register Action " +@@ -2143,13 +2141,9 @@ static int wpa_driver_nl80211_set_key(co + */ + if (ret || !set_tx || alg == WPA_ALG_NONE) + return ret; +-#ifdef HOSTAPD +- if (addr) +- return ret; +-#else /* HOSTAPD */ ++ + if (drv->nlmode == NL80211_IFTYPE_AP && addr) + return ret; +-#endif /* HOSTAPD */ + + msg = nlmsg_alloc(); + if (!msg) +@@ -2990,7 +2984,8 @@ static void nl80211_remove_iface(struct + + #ifdef HOSTAPD + /* stop listening for EAPOL on this interface */ +- del_ifidx(drv, ifidx); ++ if (drv->nlmode == NL80211_IFTYPE_AP) ++ del_ifidx(drv, ifidx); + #endif /* HOSTAPD */ + + msg = nlmsg_alloc(); +@@ -3063,7 +3058,8 @@ static int nl80211_create_iface_once(str + + #ifdef HOSTAPD + /* start listening for EAPOL on this interface */ +- add_ifidx(drv, ifidx); ++ if (drv->nlmode == NL80211_IFTYPE_AP) ++ add_ifidx(drv, ifidx); + #endif /* HOSTAPD */ + + if (addr && iftype != NL80211_IFTYPE_MONITOR && +@@ -4766,6 +4762,7 @@ static void *i802_init(struct hostapd_da + return NULL; + + drv = bss->drv; ++ drv->nlmode = NL80211_IFTYPE_AP; + if (linux_br_get(brname, params->ifname) == 0) { + wpa_printf(MSG_DEBUG, "nl80211: Interface %s is in bridge %s", + params->ifname, brname); diff --git a/package/hostapd/patches/400-nl80211_sta_auth.patch b/package/hostapd/patches/400-nl80211_sta_auth.patch new file mode 100644 index 000000000..8c959062d --- /dev/null +++ b/package/hostapd/patches/400-nl80211_sta_auth.patch @@ -0,0 +1,19 @@ +--- a/wpa_supplicant/wpa_supplicant.c ++++ b/wpa_supplicant/wpa_supplicant.c +@@ -543,10 +543,16 @@ void wpa_supplicant_set_state(struct wpa + wpa_s->reassociated_connection = 1; + wpa_drv_set_operstate(wpa_s, 1); + wpa_s->after_wps = 0; ++#ifndef IEEE8021X_EAPOL ++ wpa_drv_set_supp_port(wpa_s, 1); ++#endif + } else if (state == WPA_DISCONNECTED || state == WPA_ASSOCIATING || + state == WPA_ASSOCIATED) { + wpa_s->new_connection = 1; + wpa_drv_set_operstate(wpa_s, 0); ++#ifndef IEEE8021X_EAPOL ++ wpa_drv_set_supp_port(wpa_s, 0); ++#endif + } + wpa_s->wpa_state = state; + diff --git a/package/mac80211/Makefile b/package/mac80211/Makefile index ba4cda5df..78c8aa37d 100644 --- a/package/mac80211/Makefile +++ b/package/mac80211/Makefile @@ -10,12 +10,12 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=mac80211 -PKG_VERSION:=2010-03-24 -PKG_RELEASE:=5 +PKG_VERSION:=2010-04-28 +PKG_RELEASE:=1 PKG_SOURCE_URL:=http://mirror2.openwrt.org/sources # http://www.orbit-lab.org/kernel/compat-wireless-2.6/2010/11 \ # http://wireless.kernel.org/download/compat-wireless-2.6 -PKG_MD5SUM:=73357c52b5d6888ea3228b2ca8aa5eca +PKG_MD5SUM:=4b8c23ac7f33af7556034635af744c67 PKG_SOURCE:=compat-wireless-$(PKG_VERSION).tar.bz2 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/compat-wireless-$(PKG_VERSION) @@ -425,6 +425,7 @@ define KernelPackage/ath9k/config config PACKAGE_ATH9K_USE_MINSTREL bool "use the new minstrel_ht rate control for ath9k" + default y endmenu endef @@ -531,6 +532,20 @@ define KernelPackage/net-ipw2200/description - ipw2200 endef + +define KernelPackage/mwl8k + $(call KernelPackage/mac80211/Default) + TITLE:=Driver for Marvell TOPDOG 802.11 Wireless cards + URL:=http://wireless.kernel.org/en/users/Drivers/mwl8k + DEPENDS+= @PCI_SUPPORT +kmod-mac80211 + FILES:=$(PKG_BUILD_DIR)/drivers/net/wireless/mwl8k.$(LINUX_KMOD_SUFFIX) + AUTOLOAD:=$(call AutoLoad,27,mwl8k) +endef + +define KernelPackage/mwl8k/description + Kernel modules for Marvell TOPDOG 802.11 Wireless cards +endef + #Broadcom firmware ifneq ($(CONFIG_B43_EXPERIMENTAL),) PKG_B43_FWV4_NAME:=broadcom-wl @@ -852,7 +867,7 @@ MAKE_OPTS:= \ CONFIG_LIB80211_CRYPT_TKIP= \ CONFIG_IWLWIFI= \ CONFIG_IWLAGN= \ - CONFIG_MWL8K= \ + CONFIG_MWL8K=$(if $(CONFIG_PACKAGE_kmod-mwl8k),m) \ CONFIG_ATMEL= \ CONFIG_PCMCIA_ATMEL= \ CONFIG_ADM8211= \ @@ -1051,3 +1066,4 @@ $(eval $(call KernelPackage,b43legacy)) $(eval $(call KernelPackage,net-libipw)) $(eval $(call KernelPackage,net-ipw2100)) $(eval $(call KernelPackage,net-ipw2200)) +$(eval $(call KernelPackage,mwl8k)) diff --git a/package/mac80211/files/lib/wifi/mac80211.sh b/package/mac80211/files/lib/wifi/mac80211.sh index 5991b4c16..c871cbe73 100644 --- a/package/mac80211/files/lib/wifi/mac80211.sh +++ b/package/mac80211/files/lib/wifi/mac80211.sh @@ -416,6 +416,10 @@ detect_mac80211() { [ "$(($ht_cap & 1))" -eq 1 ] && append ht_capab "$list LDPC" "$N" [ "$(($ht_cap & 32))" -eq 32 ] && append ht_capab "$list SHORT-GI-20" "$N" [ "$(($ht_cap & 64))" -eq 64 ] && append ht_capab "$list SHORT-GI-40" "$N" + [ "$(($ht_cap & 128))" -eq 128 ] && append ht_capab "$list TX-STBC" "$N" + [ "$(($ht_cap & 768))" -eq 256 ] && append ht_capab "$list RX-STBC1" "$N" + [ "$(($ht_cap & 768))" -eq 512 ] && append ht_capab "$list RX-STBC12" "$N" + [ "$(($ht_cap & 768))" -eq 768 ] && append ht_capab "$list RX-STBC123" "$N" [ "$(($ht_cap & 4096))" -eq 4096 ] && append ht_capab "$list DSSS_CCK-40" "$N" } iw phy "$dev" info | grep -q '2412 MHz' || { mode_band="a"; channel="36"; } diff --git a/package/mac80211/patches/001-disable_b44.patch b/package/mac80211/patches/001-disable_b44.patch index ce10e71bb..1869a5915 100644 --- a/package/mac80211/patches/001-disable_b44.patch +++ b/package/mac80211/patches/001-disable_b44.patch @@ -1,6 +1,6 @@ --- a/config.mk +++ b/config.mk -@@ -269,8 +269,8 @@ endif +@@ -256,8 +256,8 @@ endif CONFIG_P54_PCI=m diff --git a/package/mac80211/patches/002-disable_rfkill.patch b/package/mac80211/patches/002-disable_rfkill.patch index 2599dbb84..9c6338a9a 100644 --- a/package/mac80211/patches/002-disable_rfkill.patch +++ b/package/mac80211/patches/002-disable_rfkill.patch @@ -9,7 +9,7 @@ ifeq ($(CONFIG_MAC80211),y) $(error "ERROR: you have MAC80211 compiled into the kernel, CONFIG_MAC80211=y, as such you cannot replace its mac80211 driver. You need this set to CONFIG_MAC80211=m. If you are using Fedora upgrade your kernel as later version should this set as modular. For further information on Fedora see https://bugzilla.redhat.com/show_bug.cgi?id=470143. If you are using your own kernel recompile it and make mac80211 modular") -@@ -492,8 +492,8 @@ endif +@@ -481,8 +481,8 @@ endif # We need the backported rfkill module on kernel < 2.6.31. # In more recent kernel versions use the in kernel rfkill module. ifdef CONFIG_COMPAT_KERNEL_31 diff --git a/package/mac80211/patches/007-remove_misc_drivers.patch b/package/mac80211/patches/007-remove_misc_drivers.patch index a51a4b36e..e0b007fa4 100644 --- a/package/mac80211/patches/007-remove_misc_drivers.patch +++ b/package/mac80211/patches/007-remove_misc_drivers.patch @@ -1,6 +1,6 @@ --- a/config.mk +++ b/config.mk -@@ -299,10 +299,10 @@ endif +@@ -286,10 +286,10 @@ endif CONFIG_MWL8K=m # Ethernet drivers go here @@ -15,7 +15,7 @@ CONFIG_HERMES=m CONFIG_HERMES_CACHE_FW_ON_INIT=y -@@ -355,10 +355,10 @@ CONFIG_USB_NET_COMPAT_RNDIS_HOST=n +@@ -342,10 +342,10 @@ CONFIG_USB_NET_COMPAT_RNDIS_HOST=n CONFIG_USB_NET_COMPAT_RNDIS_WLAN=n CONFIG_USB_NET_COMPAT_CDCETHER=n else diff --git a/package/mac80211/patches/010-no_pcmcia.patch b/package/mac80211/patches/010-no_pcmcia.patch index a9437ce8e..0826df4f3 100644 --- a/package/mac80211/patches/010-no_pcmcia.patch +++ b/package/mac80211/patches/010-no_pcmcia.patch @@ -9,7 +9,7 @@ CONFIG_SSB=m else include $(KLIB_BUILD)/.config -@@ -194,7 +194,7 @@ CONFIG_B43=m +@@ -181,7 +181,7 @@ CONFIG_B43=m CONFIG_B43_HWRNG=y CONFIG_B43_PCI_AUTOSELECT=y ifneq ($(CONFIG_PCMCIA),) @@ -18,7 +18,7 @@ endif CONFIG_B43_LEDS=y CONFIG_B43_PHY_LP=y -@@ -246,7 +246,7 @@ CONFIG_SSB_BLOCKIO=y +@@ -233,7 +233,7 @@ CONFIG_SSB_BLOCKIO=y CONFIG_SSB_PCIHOST=y CONFIG_SSB_B43_PCI_BRIDGE=y ifneq ($(CONFIG_PCMCIA),) diff --git a/package/mac80211/patches/011-no_sdio.patch b/package/mac80211/patches/011-no_sdio.patch index bd6bdfe78..04a8029c3 100644 --- a/package/mac80211/patches/011-no_sdio.patch +++ b/package/mac80211/patches/011-no_sdio.patch @@ -1,6 +1,6 @@ --- a/config.mk +++ b/config.mk -@@ -407,8 +407,8 @@ endif # end of SPI driver list +@@ -396,8 +396,8 @@ endif # end of SPI driver list ifneq ($(CONFIG_MMC),) diff --git a/package/mac80211/patches/013-disable_b43_nphy.patch b/package/mac80211/patches/013-disable_b43_nphy.patch index 747c52ab0..efdfb149a 100644 --- a/package/mac80211/patches/013-disable_b43_nphy.patch +++ b/package/mac80211/patches/013-disable_b43_nphy.patch @@ -1,6 +1,6 @@ --- a/config.mk +++ b/config.mk -@@ -198,7 +198,7 @@ ifneq ($(CONFIG_PCMCIA),) +@@ -185,7 +185,7 @@ ifneq ($(CONFIG_PCMCIA),) endif CONFIG_B43_LEDS=y CONFIG_B43_PHY_LP=y diff --git a/package/mac80211/patches/014-add_iw_handler.patch b/package/mac80211/patches/014-add_iw_handler.patch deleted file mode 100644 index 5119b35fb..000000000 --- a/package/mac80211/patches/014-add_iw_handler.patch +++ /dev/null @@ -1,33 +0,0 @@ -commit b7d48ccc687c44213121b1b565dccdc4488f5d9a -Author: Pavel Roskin -Date: Wed Mar 24 17:23:37 2010 -0400 - - compat: add compat-2.6.35.h and IW_HANDLER - - Signed-off-by: Pavel Roskin - ---- /dev/null -+++ b/include/linux/compat-2.6.35.h -@@ -0,0 +1,13 @@ -+#ifndef LINUX_26_35_COMPAT_H -+#define LINUX_26_35_COMPAT_H -+ -+#include -+ -+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)) -+ -+#define IW_HANDLER(id, func) \ -+ [IW_IOCTL_IDX(id)] = func -+ -+#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35)) */ -+ -+#endif /* LINUX_26_35_COMPAT_H */ ---- a/include/linux/compat-2.6.h -+++ b/include/linux/compat-2.6.h -@@ -27,5 +27,6 @@ - #include - #include - #include -+#include - - #endif /* LINUX_26_COMPAT_H */ diff --git a/package/mac80211/patches/015-remove-rt2x00-options.patch b/package/mac80211/patches/015-remove-rt2x00-options.patch index f980979cc..e62192bdf 100644 --- a/package/mac80211/patches/015-remove-rt2x00-options.patch +++ b/package/mac80211/patches/015-remove-rt2x00-options.patch @@ -1,6 +1,6 @@ --- a/config.mk +++ b/config.mk -@@ -276,12 +276,12 @@ CONFIG_RTL8180=m +@@ -248,12 +248,12 @@ CONFIG_RTL8180=m CONFIG_ADM8211=m @@ -15,7 +15,7 @@ # CONFIG_RT2800PCI_RT30XX=y # CONFIG_RT2800PCI_RT35XX=y # CONFIG_RT2800PCI_SOC=y -@@ -381,7 +381,7 @@ CONFIG_RT2800USB=m +@@ -355,7 +355,7 @@ CONFIG_RT2800USB=m # CONFIG_RT2800USB_RT35XX=y # CONFIG_RT2800USB_UNKNOWN=y endif diff --git a/package/mac80211/patches/120-compat_rcu_dereference.patch b/package/mac80211/patches/120-compat_rcu_dereference.patch new file mode 100644 index 000000000..f14a8ddbd --- /dev/null +++ b/package/mac80211/patches/120-compat_rcu_dereference.patch @@ -0,0 +1,11 @@ +--- a/include/linux/compat-2.6.34.h ++++ b/include/linux/compat-2.6.34.h +@@ -197,6 +197,8 @@ do { \ + */ + #define sysfs_bin_attr_init(bin_attr) sysfs_attr_init(&(bin_attr)->attr) + ++#define rcu_dereference_check(p, c) rcu_dereference(p) ++ + #endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,34)) */ + + #endif /* LINUX_26_34_COMPAT_H */ diff --git a/package/mac80211/patches/130-tracepoint_include_linux_version_h.patch b/package/mac80211/patches/130-tracepoint_include_linux_version_h.patch new file mode 100644 index 000000000..034f00cd9 --- /dev/null +++ b/package/mac80211/patches/130-tracepoint_include_linux_version_h.patch @@ -0,0 +1,11 @@ +--- a/include/linux/tracepoint.h ++++ b/include/linux/tracepoint.h +@@ -3,6 +3,8 @@ + + #include + ++#include ++ + #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27)) + #include_next + #endif /* (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,27)) */ diff --git a/package/mac80211/patches/300-fix-mesh.patch b/package/mac80211/patches/300-fix-mesh.patch deleted file mode 100644 index 554565615..000000000 --- a/package/mac80211/patches/300-fix-mesh.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 181ce6f71d907f42ab73376ce154015a835a6d8a Mon Sep 17 00:00:00 2001 -From: Javier Cardona -Date: Mon, 29 Mar 2010 11:00:20 -0700 -Subject: [PATCH] mac80211: Handle mesh action frames in ieee80211_rx_h_action - -This fixes the problem introduced in commit -8404080568613d93ad7cf0a16dfb68 which broke mesh peer link establishment. - -changes: -v2 Added missing break (Johannes) -v3 Broke original patch into two (Johannes) - -Signed-off-by: Javier Cardona -Signed-off-by: Hauke Mehrtens ---- - net/mac80211/mesh.c | 3 --- - net/mac80211/rx.c | 5 +++++ - 2 files changed, 5 insertions(+), 3 deletions(-) - ---- a/net/mac80211/mesh.c -+++ b/net/mac80211/mesh.c -@@ -749,9 +749,6 @@ ieee80211_mesh_rx_mgmt(struct ieee80211_ - - switch (fc & IEEE80211_FCTL_STYPE) { - case IEEE80211_STYPE_ACTION: -- if (skb->len < IEEE80211_MIN_ACTION_SIZE) -- return RX_DROP_MONITOR; -- /* fall through */ - case IEEE80211_STYPE_PROBE_RESP: - case IEEE80211_STYPE_BEACON: - skb_queue_tail(&ifmsh->skb_queue, skb); ---- a/net/mac80211/rx.c -+++ b/net/mac80211/rx.c -@@ -1964,6 +1964,11 @@ ieee80211_rx_h_action(struct ieee80211_r - goto handled; - } - break; -+ case MESH_PLINK_CATEGORY: -+ case MESH_PATH_SEL_CATEGORY: -+ if (ieee80211_vif_is_mesh(&sdata->vif)) -+ return ieee80211_mesh_rx_mgmt(sdata, rx->skb); -+ break; - } - - /* diff --git a/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch b/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch index e42be951c..946dda567 100644 --- a/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch +++ b/package/mac80211/patches/403-ath9k-fix-invalid-mac-address-handling.patch @@ -1,14 +1,14 @@ --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -15,6 +15,7 @@ - */ +@@ -16,6 +16,7 @@ #include + #include +#include #include #include "hw.h" -@@ -441,8 +442,16 @@ static int ath9k_hw_init_macaddr(struct +@@ -456,8 +457,16 @@ static int ath9k_hw_init_macaddr(struct common->macaddr[2 * i] = eeval >> 8; common->macaddr[2 * i + 1] = eeval & 0xff; } diff --git a/package/mac80211/patches/404-ath_regd_optional.patch b/package/mac80211/patches/404-ath_regd_optional.patch index 58ed4bdbe..5d4251c35 100644 --- a/package/mac80211/patches/404-ath_regd_optional.patch +++ b/package/mac80211/patches/404-ath_regd_optional.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/regd.c +++ b/drivers/net/wireless/ath/regd.c -@@ -19,6 +19,9 @@ +@@ -18,6 +18,9 @@ #include #include #include "regd.h" diff --git a/package/mac80211/patches/405-ath9k-read-eeprom-data-from-platform-data-on-pci-bus.patch b/package/mac80211/patches/405-ath9k-read-eeprom-data-from-platform-data-on-pci-bus.patch index 560f8d42d..bbf46a0d2 100644 --- a/package/mac80211/patches/405-ath9k-read-eeprom-data-from-platform-data-on-pci-bus.patch +++ b/package/mac80211/patches/405-ath9k-read-eeprom-data-from-platform-data-on-pci-bus.patch @@ -8,7 +8,7 @@ #include "ath9k.h" static DEFINE_PCI_DEVICE_TABLE(ath_pci_id_table) = { -@@ -52,21 +53,36 @@ static void ath_pci_read_cachesize(struc +@@ -53,21 +54,36 @@ static void ath_pci_read_cachesize(struc static bool ath_pci_eeprom_read(struct ath_common *common, u32 off, u16 *data) { diff --git a/package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch b/package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch index 799c1186f..58728c554 100644 --- a/package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch +++ b/package/mac80211/patches/406-ath9k-set-AH_USE_EEPROM-only-if-no-platform-data-present.patch @@ -1,17 +1,3 @@ ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -385,11 +385,8 @@ static void ath9k_hw_init_defaults(struc - ah->hw_version.magic = AR5416_MAGIC; - ah->hw_version.subvendorid = 0; - -- ah->ah_flags = 0; - if (ah->hw_version.devid == AR5416_AR9100_DEVID) - ah->hw_version.macVersion = AR_SREV_VERSION_9100; -- if (!AR_SREV_9100(ah)) -- ah->ah_flags = AH_USE_EEPROM; - - ah->atim_window = 0; - ah->sta_id1_defaults = AR_STA_ID1_CRPT_MIC_ENABLE; --- a/drivers/net/wireless/ath/ath9k/main.c +++ b/drivers/net/wireless/ath/ath9k/main.c @@ -15,6 +15,7 @@ @@ -24,7 +10,7 @@ --- a/drivers/net/wireless/ath/ath9k/init.c +++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -531,6 +531,7 @@ static int ath9k_init_softc(u16 devid, s +@@ -565,6 +565,7 @@ static int ath9k_init_softc(u16 devid, s { struct ath_hw *ah = NULL; struct ath_common *common; @@ -32,7 +18,7 @@ int ret = 0, i; int csz = 0; -@@ -542,6 +543,10 @@ static int ath9k_init_softc(u16 devid, s +@@ -576,6 +577,10 @@ static int ath9k_init_softc(u16 devid, s ah->hw_version.subsysid = subsysid; sc->sc_ah = ah; @@ -43,3 +29,16 @@ common = ath9k_hw_common(ah); common->ops = &ath9k_common_ops; common->bus_ops = bus_ops; +--- a/drivers/net/wireless/ath/ath9k/hw.c ++++ b/drivers/net/wireless/ath/ath9k/hw.c +@@ -429,10 +429,6 @@ static void ath9k_hw_init_defaults(struc + ah->hw_version.magic = AR5416_MAGIC; + ah->hw_version.subvendorid = 0; + +- ah->ah_flags = 0; +- if (!AR_SREV_9100(ah)) +- ah->ah_flags = AH_USE_EEPROM; +- + ah->atim_window = 0; + ah->sta_id1_defaults = AR_STA_ID1_CRPT_MIC_ENABLE; + ah->beacon_interval = 100; diff --git a/package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch b/package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch index 93ad941b7..20a33bbdb 100644 --- a/package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch +++ b/package/mac80211/patches/407-ath9k-override-mac-address-from-platform-data.patch @@ -1,17 +1,17 @@ --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -16,8 +16,10 @@ - +@@ -17,8 +17,10 @@ #include + #include #include +#include #include +#include "ath9k.h" #include "hw.h" + #include "hw-ops.h" #include "rc.h" - #include "initvals.h" -@@ -428,17 +430,23 @@ static int ath9k_hw_rf_claim(struct ath_ +@@ -441,18 +443,23 @@ static void ath9k_hw_init_defaults(struc static int ath9k_hw_init_macaddr(struct ath_hw *ah) { struct ath_common *common = ath9k_hw_common(ah); @@ -20,10 +20,11 @@ u32 sum; int i; u16 eeval; + u32 EEP_MAC[] = { EEP_MAC_LSW, EEP_MAC_MID, EEP_MAC_MSW }; sum = 0; - for (i = 0; i < 3; i++) { -- eeval = ah->eep_ops->get_eeprom(ah, AR_EEPROM_MAC(i)); +- eeval = ah->eep_ops->get_eeprom(ah, EEP_MAC[i]); - sum += eeval; - common->macaddr[2 * i] = eeval >> 8; - common->macaddr[2 * i + 1] = eeval & 0xff; @@ -32,12 +33,11 @@ + memcpy(common->macaddr, pdata->macaddr, ETH_ALEN); + else + for (i = 0; i < 3; i++) { -+ eeval = ah->eep_ops->get_eeprom(ah, AR_EEPROM_MAC(i)); ++ eeval = ah->eep_ops->get_eeprom(ah, EEP_MAC[i]); + sum += eeval; + common->macaddr[2 * i] = eeval >> 8; + common->macaddr[2 * i + 1] = eeval & 0xff; + } -+ if (!is_valid_ether_addr(common->macaddr)) { ath_print(common, ATH_DBG_EEPROM, "eeprom contains invalid mac address: %pM\n", diff --git a/package/mac80211/patches/408-ath9k_tweak_rx_intr_mitigation.patch b/package/mac80211/patches/408-ath9k_tweak_rx_intr_mitigation.patch index 9d8ce1a33..f7e7742e1 100644 --- a/package/mac80211/patches/408-ath9k_tweak_rx_intr_mitigation.patch +++ b/package/mac80211/patches/408-ath9k_tweak_rx_intr_mitigation.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath9k/hw.c +++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -2097,7 +2097,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st +@@ -1380,7 +1380,7 @@ int ath9k_hw_reset(struct ath_hw *ah, st if (ah->config.rx_intr_mitigation) { REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_LAST, 500); @@ -8,4 +8,4 @@ + REG_RMW_FIELD(ah, AR_RIMT, AR_RIMT_FIRST, 500); } - ath9k_hw_init_bb(ah, chan); + if (ah->config.tx_intr_mitigation) { diff --git a/package/mac80211/patches/409-ath9k-add-wndr3700-antenna-initialization.patch b/package/mac80211/patches/409-ath9k-add-wndr3700-antenna-initialization.patch index 83eabaf09..57a5678f8 100644 --- a/package/mac80211/patches/409-ath9k-add-wndr3700-antenna-initialization.patch +++ b/package/mac80211/patches/409-ath9k-add-wndr3700-antenna-initialization.patch @@ -1,14 +1,14 @@ --- a/drivers/net/wireless/ath/ath9k/init.c +++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -14,6 +14,7 @@ - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ +@@ -16,6 +16,7 @@ + + #include +#include "linux/ath9k_platform.h" #include "ath9k.h" static char *dev_info = "ath9k"; -@@ -546,6 +547,8 @@ static int ath9k_init_softc(u16 devid, s +@@ -580,6 +581,8 @@ static int ath9k_init_softc(u16 devid, s pdata = (struct ath9k_platform_data *) sc->dev->platform_data; if (!pdata) ah->ah_flags |= AH_USE_EEPROM; @@ -17,7 +17,7 @@ common = ath9k_hw_common(ah); common->ops = &ath9k_common_ops; -@@ -671,6 +674,24 @@ void ath9k_set_hw_capab(struct ath_softc +@@ -702,6 +705,24 @@ void ath9k_set_hw_capab(struct ath_softc SET_IEEE80211_PERM_ADDR(hw, common->macaddr); } @@ -42,7 +42,7 @@ int ath9k_init_device(u16 devid, struct ath_softc *sc, u16 subsysid, const struct ath_bus_ops *bus_ops) { -@@ -689,6 +710,9 @@ int ath9k_init_device(u16 devid, struct +@@ -720,6 +741,9 @@ int ath9k_init_device(u16 devid, struct common = ath9k_hw_common(ah); ath9k_set_hw_capab(sc, hw); @@ -54,15 +54,15 @@ ath9k_reg_notifier); --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -511,6 +511,8 @@ struct ath_softc { - struct ath_beacon_config cur_beacon_conf; - struct delayed_work tx_complete_work; - struct ath_btcoex btcoex; -+ -+ unsigned long quirk_wndr3700:1; - }; +@@ -517,6 +517,8 @@ struct ath_softc { - struct ath_wiphy { + int beacon_interval; + ++ bool quirk_wndr3700; ++ + #ifdef CONFIG_ATH9K_DEBUGFS + struct ath9k_debug debug; + #endif --- a/include/linux/ath9k_platform.h +++ b/include/linux/ath9k_platform.h @@ -24,6 +24,8 @@ @@ -70,7 +70,7 @@ u16 eeprom_data[ATH9K_PLAT_EEP_MAX_WORDS]; u8 *macaddr; + -+ unsigned long quirk_wndr3700:1; ++ bool quirk_wndr3700; }; #endif /* _LINUX_ATH9K_PLATFORM_H */ diff --git a/package/mac80211/patches/410-ath9k-wndr3700-led-pin-fix.patch b/package/mac80211/patches/410-ath9k-wndr3700-led-pin-fix.patch index c5cc6b7e1..c0e1e7f2e 100644 --- a/package/mac80211/patches/410-ath9k-wndr3700-led-pin-fix.patch +++ b/package/mac80211/patches/410-ath9k-wndr3700-led-pin-fix.patch @@ -13,7 +13,7 @@ sc->sc_ah->led_pin = ATH_LED_PIN_DEF; --- a/drivers/net/wireless/ath/ath9k/ath9k.h +++ b/drivers/net/wireless/ath/ath9k/ath9k.h -@@ -379,6 +379,7 @@ void ath9k_btcoex_timer_pause(struct ath +@@ -392,6 +392,7 @@ void ath9k_btcoex_timer_pause(struct ath #define ATH_LED_PIN_DEF 1 #define ATH_LED_PIN_9287 8 diff --git a/package/mac80211/patches/500-ath9k_debugfs_chainmask.patch b/package/mac80211/patches/500-ath9k_debugfs_chainmask.patch index eaed50091..b5f035af7 100644 --- a/package/mac80211/patches/500-ath9k_debugfs_chainmask.patch +++ b/package/mac80211/patches/500-ath9k_debugfs_chainmask.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath9k/debug.c +++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -77,6 +77,90 @@ static const struct file_operations fops +@@ -78,6 +78,90 @@ static const struct file_operations fops #define DMA_BUF_LEN 1024 @@ -91,7 +91,7 @@ static ssize_t read_file_dma(struct file *file, char __user *user_buf, size_t count, loff_t *ppos) { -@@ -719,6 +803,16 @@ int ath9k_init_debug(struct ath_hw *ah) +@@ -731,6 +815,16 @@ int ath9k_init_debug(struct ath_hw *ah) goto err; #endif @@ -108,7 +108,7 @@ sc->debug.debugfs_dma = debugfs_create_file("dma", S_IRUSR, sc->debug.debugfs_phy, sc, &fops_dma); if (!sc->debug.debugfs_dma) -@@ -769,6 +863,8 @@ void ath9k_exit_debug(struct ath_hw *ah) +@@ -781,6 +875,8 @@ void ath9k_exit_debug(struct ath_hw *ah) struct ath_common *common = ath9k_hw_common(ah); struct ath_softc *sc = (struct ath_softc *) common->priv; @@ -119,7 +119,7 @@ debugfs_remove(sc->debug.debugfs_wiphy); --- a/drivers/net/wireless/ath/ath9k/debug.h +++ b/drivers/net/wireless/ath/ath9k/debug.h -@@ -148,6 +148,8 @@ struct ath_stats { +@@ -152,6 +152,8 @@ struct ath_stats { }; struct ath9k_debug { diff --git a/package/mac80211/patches/510-ath9k_debugfs_regaccess.patch b/package/mac80211/patches/510-ath9k_debugfs_regaccess.patch index dda4b88e8..3827ed9c2 100644 --- a/package/mac80211/patches/510-ath9k_debugfs_regaccess.patch +++ b/package/mac80211/patches/510-ath9k_debugfs_regaccess.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath9k/debug.c +++ b/drivers/net/wireless/ath/ath9k/debug.c -@@ -783,6 +783,86 @@ static const struct file_operations fops +@@ -795,6 +795,86 @@ static const struct file_operations fops .owner = THIS_MODULE }; @@ -87,7 +87,7 @@ int ath9k_init_debug(struct ath_hw *ah) { struct ath_common *common = ath9k_hw_common(ah); -@@ -852,6 +932,17 @@ int ath9k_init_debug(struct ath_hw *ah) +@@ -864,6 +944,17 @@ int ath9k_init_debug(struct ath_hw *ah) if (!sc->debug.debugfs_recv) goto err; @@ -105,7 +105,7 @@ return 0; err: ath9k_exit_debug(ah); -@@ -865,6 +956,8 @@ void ath9k_exit_debug(struct ath_hw *ah) +@@ -877,6 +968,8 @@ void ath9k_exit_debug(struct ath_hw *ah) debugfs_remove(sc->debug.debugfs_tx_chainmask); debugfs_remove(sc->debug.debugfs_rx_chainmask); @@ -116,7 +116,7 @@ debugfs_remove(sc->debug.debugfs_wiphy); --- a/drivers/net/wireless/ath/ath9k/debug.h +++ b/drivers/net/wireless/ath/ath9k/debug.h -@@ -158,6 +158,9 @@ struct ath9k_debug { +@@ -162,6 +162,9 @@ struct ath9k_debug { struct dentry *debugfs_wiphy; struct dentry *debugfs_xmit; struct dentry *debugfs_recv; diff --git a/package/mac80211/patches/520-cfg80211_get_freq.patch b/package/mac80211/patches/520-cfg80211_get_freq.patch index f7e478f29..26190c63b 100644 --- a/package/mac80211/patches/520-cfg80211_get_freq.patch +++ b/package/mac80211/patches/520-cfg80211_get_freq.patch @@ -20,7 +20,7 @@ } --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c -@@ -886,6 +886,11 @@ static int nl80211_send_iface(struct sk_ +@@ -887,6 +887,11 @@ static int nl80211_send_iface(struct sk_ NLA_PUT_U32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx); NLA_PUT_STRING(msg, NL80211_ATTR_IFNAME, dev->name); NLA_PUT_U32(msg, NL80211_ATTR_IFTYPE, dev->ieee80211_ptr->iftype); diff --git a/package/mac80211/patches/530-minstrel_ht.patch b/package/mac80211/patches/530-minstrel_ht.patch index c51d541fb..046e91b8c 100644 --- a/package/mac80211/patches/530-minstrel_ht.patch +++ b/package/mac80211/patches/530-minstrel_ht.patch @@ -13,7 +13,7 @@ mac80211-$(CONFIG_MAC80211_RC_MINSTREL) += $(rc80211_minstrel-y) --- a/net/mac80211/main.c +++ b/net/mac80211/main.c -@@ -714,6 +714,10 @@ static int __init ieee80211_init(void) +@@ -716,6 +716,10 @@ static int __init ieee80211_init(void) if (ret) return ret; @@ -24,7 +24,7 @@ ret = rc80211_pid_init(); if (ret) goto err_pid; -@@ -726,6 +730,8 @@ static int __init ieee80211_init(void) +@@ -728,6 +732,8 @@ static int __init ieee80211_init(void) err_netdev: rc80211_pid_exit(); err_pid: @@ -33,7 +33,7 @@ rc80211_minstrel_exit(); return ret; -@@ -734,6 +740,7 @@ static int __init ieee80211_init(void) +@@ -736,6 +742,7 @@ static int __init ieee80211_init(void) static void __exit ieee80211_exit(void) { rc80211_pid_exit(); @@ -68,7 +68,7 @@ --- /dev/null +++ b/net/mac80211/rc80211_minstrel_ht.c -@@ -0,0 +1,815 @@ +@@ -0,0 +1,822 @@ +/* + * Copyright (C) 2010 Felix Fietkau + * @@ -389,9 +389,9 @@ + if (!mg->supported) + continue; + -+ if (++mg->index > MCS_GROUP_RATES) { ++ if (++mg->index >= MCS_GROUP_RATES) { + mg->index = 0; -+ if (++mg->column > ARRAY_SIZE(sample_table)) ++ if (++mg->column >= ARRAY_SIZE(sample_table)) + mg->column = 0; + } + break; @@ -474,7 +474,7 @@ + mi->ampdu_len += info->status.ampdu_len; + + if (!mi->sample_wait && !mi->sample_tries && mi->sample_count > 0) { -+ mi->sample_wait = 4 + MINSTREL_TRUNC(mi->avg_ampdu_len); ++ mi->sample_wait = 4 + 2 * MINSTREL_TRUNC(mi->avg_ampdu_len); + mi->sample_tries = 3; + mi->sample_count--; + } @@ -660,6 +660,7 @@ + if (!msp->is_ht) + return mac80211_minstrel.get_rate(priv, sta, &msp->legacy, txrc); + ++ info->flags |= mi->tx_flags; + sample_idx = minstrel_get_sample_rate(mp, mi); + if (sample_idx >= 0) { + minstrel_ht_set_rate(mp, mi, &ar[0], sample_idx, @@ -733,6 +734,12 @@ + } + mi->sample_tries = 4; + ++ if (sta_cap & IEEE80211_HT_CAP_TX_STBC) ++ mi->tx_flags |= IEEE80211_TX_CTL_STBC; ++ ++ if (sta_cap & IEEE80211_HT_CAP_LDPC_CODING) ++ mi->tx_flags |= IEEE80211_TX_CTL_LDPC; ++ + if (oper_chan_type != NL80211_CHAN_HT40MINUS && + oper_chan_type != NL80211_CHAN_HT40PLUS) + sta_cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40; @@ -886,7 +893,7 @@ +} --- /dev/null +++ b/net/mac80211/rc80211_minstrel_ht.h -@@ -0,0 +1,125 @@ +@@ -0,0 +1,128 @@ +/* + * Copyright (C) 2010 Felix Fietkau + * @@ -899,10 +906,10 @@ +#define __RC_MINSTREL_HT_H + +/* -+ * maximum number of spatial streams to make use of -+ * set this value to 3 once we have drivers that support it ++ * The number of streams can be changed to 2 to reduce code ++ * size and memory footprint. + */ -+#define MINSTREL_MAX_STREAMS 2 ++#define MINSTREL_MAX_STREAMS 3 +#define MINSTREL_STREAM_GROUPS 4 + +/* scaled fraction values */ @@ -983,6 +990,9 @@ + unsigned int total_packets; + unsigned int sample_packets; + ++ /* tx flags to add for frames for this sta */ ++ u32 tx_flags; ++ + u8 sample_wait; + u8 sample_tries; + u8 sample_count; diff --git a/package/mac80211/patches/540-ath9k_use_minstrel.patch b/package/mac80211/patches/540-ath9k_use_minstrel.patch index 0983abf33..6f1877f16 100644 --- a/package/mac80211/patches/540-ath9k_use_minstrel.patch +++ b/package/mac80211/patches/540-ath9k_use_minstrel.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath9k/init.c +++ b/drivers/net/wireless/ath/ath9k/init.c -@@ -655,7 +655,11 @@ void ath9k_set_hw_capab(struct ath_softc +@@ -686,7 +686,11 @@ void ath9k_set_hw_capab(struct ath_softc hw->sta_data_size = sizeof(struct ath_node); hw->vif_data_size = sizeof(struct ath_vif); diff --git a/package/mac80211/patches/550-ath9k_bb_fix.patch b/package/mac80211/patches/550-ath9k_bb_fix.patch deleted file mode 100644 index d09114c89..000000000 --- a/package/mac80211/patches/550-ath9k_bb_fix.patch +++ /dev/null @@ -1,59 +0,0 @@ ---- a/drivers/net/wireless/ath/ath9k/hw.c -+++ b/drivers/net/wireless/ath/ath9k/hw.c -@@ -1911,6 +1911,34 @@ static void ath9k_enable_rfkill(struct a - REG_SET_BIT(ah, AR_PHY_TEST, RFSILENT_BB); - } - -+bool ath9k_hw_check_alive(struct ath_hw *ah) -+{ -+ int count = 50; -+ u32 reg; -+ -+ if (AR_SREV_9285_10_OR_LATER(ah)) -+ return true; -+ -+ do { -+ reg = REG_READ(ah, AR_OBS_BUS_1); -+ -+ if ((reg & 0x7E7FFFEF) == 0x00702400) -+ continue; -+ -+ switch (reg & 0x7E000B00) { -+ case 0x1E000000: -+ case 0x52000B00: -+ case 0x18000B00: -+ continue; -+ default: -+ return true; -+ } -+ } while (count-- > 0); -+ -+ return false; -+} -+EXPORT_SYMBOL(ath9k_hw_check_alive); -+ - int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan, - bool bChannelChange) - { ---- a/drivers/net/wireless/ath/ath9k/hw.h -+++ b/drivers/net/wireless/ath/ath9k/hw.h -@@ -679,6 +679,7 @@ void ath9k_hw_set11nmac2040(struct ath_h - void ath9k_hw_beaconinit(struct ath_hw *ah, u32 next_beacon, u32 beacon_period); - void ath9k_hw_set_sta_beacon_timers(struct ath_hw *ah, - const struct ath9k_beacon_state *bs); -+bool ath9k_hw_check_alive(struct ath_hw *ah); - - bool ath9k_hw_setpower(struct ath_hw *ah, enum ath9k_power_mode mode); - ---- a/drivers/net/wireless/ath/ath9k/main.c -+++ b/drivers/net/wireless/ath/ath9k/main.c -@@ -405,7 +405,8 @@ void ath9k_tasklet(unsigned long data) - - ath9k_ps_wakeup(sc); - -- if (status & ATH9K_INT_FATAL) { -+ if ((status & ATH9K_INT_FATAL) || -+ !ath9k_hw_check_alive(ah)) { - ath_reset(sc, false); - ath9k_ps_restore(sc); - return; diff --git a/package/mac80211/patches/550-ath9k_no_multi_desc_frames.patch b/package/mac80211/patches/550-ath9k_no_multi_desc_frames.patch new file mode 100644 index 000000000..3bc730e32 --- /dev/null +++ b/package/mac80211/patches/550-ath9k_no_multi_desc_frames.patch @@ -0,0 +1,24 @@ +--- a/drivers/net/wireless/ath/ath9k/common.c ++++ b/drivers/net/wireless/ath/ath9k/common.c +@@ -57,13 +57,19 @@ static bool ath9k_rx_accept(struct ath_c + * rs_more indicates chained descriptors which can be used + * to link buffers together for a sort of scatter-gather + * operation. +- * ++ * reject the frame, we don't support scatter-gather yet and ++ * the frame is probably corrupt anyway ++ */ ++ if (rx_stats->rs_more) ++ return false; ++ ++ /* + * The rx_stats->rs_status will not be set until the end of the + * chained descriptors so it can be ignored if rs_more is set. The + * rs_more will be false at the last element of the chained + * descriptors. + */ +- if (!rx_stats->rs_more && rx_stats->rs_status != 0) { ++ if (rx_stats->rs_status != 0) { + if (rx_stats->rs_status & ATH9K_RXERR_CRC) + rxs->flag |= RX_FLAG_FAILED_FCS_CRC; + if (rx_stats->rs_status & ATH9K_RXERR_PHY) diff --git a/package/mac80211/patches/600-rt2x00-disable-pci-code-if-CONFIG_PCI-not-defined.patch b/package/mac80211/patches/600-rt2x00-disable-pci-code-if-CONFIG_PCI-not-defined.patch index 3971413b0..8da8cb5da 100644 --- a/package/mac80211/patches/600-rt2x00-disable-pci-code-if-CONFIG_PCI-not-defined.patch +++ b/package/mac80211/patches/600-rt2x00-disable-pci-code-if-CONFIG_PCI-not-defined.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/rt2x00/rt2x00pci.c +++ b/drivers/net/wireless/rt2x00/rt2x00pci.c -@@ -223,6 +223,7 @@ void rt2x00pci_uninitialize(struct rt2x0 +@@ -225,6 +225,7 @@ void rt2x00pci_uninitialize(struct rt2x0 } EXPORT_SYMBOL_GPL(rt2x00pci_uninitialize); @@ -8,7 +8,7 @@ /* * PCI driver handlers. */ -@@ -397,6 +398,7 @@ int rt2x00pci_resume(struct pci_dev *pci +@@ -399,6 +400,7 @@ int rt2x00pci_resume(struct pci_dev *pci } EXPORT_SYMBOL_GPL(rt2x00pci_resume); #endif /* CONFIG_PM */ diff --git a/package/mac80211/patches/601-rt2x00-lib-use-rt2x00dev-irq.patch b/package/mac80211/patches/601-rt2x00-lib-use-rt2x00dev-irq.patch index 22bfc2ebe..c04bb2d88 100644 --- a/package/mac80211/patches/601-rt2x00-lib-use-rt2x00dev-irq.patch +++ b/package/mac80211/patches/601-rt2x00-lib-use-rt2x00dev-irq.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/rt2x00/rt2x00pci.c +++ b/drivers/net/wireless/rt2x00/rt2x00pci.c -@@ -213,7 +213,7 @@ void rt2x00pci_uninitialize(struct rt2x0 +@@ -215,7 +215,7 @@ void rt2x00pci_uninitialize(struct rt2x0 /* * Free irq line. */ diff --git a/package/mac80211/patches/602-rt2x00-remove-mcu-requests-for-soc.patch b/package/mac80211/patches/602-rt2x00-remove-mcu-requests-for-soc.patch index 9cecf3a03..e743af3d3 100644 --- a/package/mac80211/patches/602-rt2x00-remove-mcu-requests-for-soc.patch +++ b/package/mac80211/patches/602-rt2x00-remove-mcu-requests-for-soc.patch @@ -1,59 +1,29 @@ +From f18d4463d092162f34a8bd226505627ceeac3e8a Mon Sep 17 00:00:00 2001 +From: Luis Correia +Date: Sat, 3 Apr 2010 12:49:53 +0100 +Subject: [PATCH] rt2x00: remove MCU requests for SoC platforms + The ralink SoC platforms do not have an MCU. Signed-off-by: Luis Correia +Acked-by: Ivo van Doorn +Signed-off-by: Gertjan van Wingerde --- + drivers/net/wireless/rt2x00/rt2800pci.c | 6 ++++++ + 1 files changed, 6 insertions(+), 0 deletions(-) ---- a/drivers/net/wireless/rt2x00/rt2800lib.c -+++ b/drivers/net/wireless/rt2x00/rt2800lib.c -@@ -221,9 +221,9 @@ void rt2800_mcu_request(struct rt2x00_de - u32 reg; - - /* -- * SOC devices don't support MCU requests. -+ * some devices don't support MCU requests. - */ -- if (rt2x00_is_soc(rt2x00dev)) -+ if (!test_bit(DRIVER_REQUIRE_MCU, &rt2x00dev->flags)) - return; - - mutex_lock(&rt2x00dev->csr_mutex); --- a/drivers/net/wireless/rt2x00/rt2800pci.c +++ b/drivers/net/wireless/rt2x00/rt2800pci.c -@@ -60,6 +60,12 @@ static void rt2800pci_mcu_status(struct - unsigned int i; - u32 reg; +@@ -66,6 +66,12 @@ static void rt2800pci_mcu_status(struct + if (rt2x00_is_soc(rt2x00dev)) + return; + /* -+ * some devices don't support MCU requests. ++ * SOC devices don't support MCU requests. + */ -+ if (!test_bit(DRIVER_REQUIRE_MCU, &rt2x00dev->flags)) ++ if (rt2x00_is_soc(rt2x00dev)) + return; + for (i = 0; i < 200; i++) { rt2800_register_read(rt2x00dev, H2M_MAILBOX_CID, ®); -@@ -1098,10 +1104,12 @@ static int rt2800pci_probe_hw(struct rt2 - __set_bit(DRIVER_SUPPORT_CONTROL_FILTER_PSPOLL, &rt2x00dev->flags); - - /* -- * This device requires firmware. -+ * This device requires firmware and MCU access. - */ -- if (!rt2x00_is_soc(rt2x00dev)) -+ if (!rt2x00_is_soc(rt2x00dev)){ - __set_bit(DRIVER_REQUIRE_FIRMWARE, &rt2x00dev->flags); -+ __set_bit(DRIVER_REQUIRE_MCU, &rt2x00dev->flags); -+ } - __set_bit(DRIVER_REQUIRE_DMA, &rt2x00dev->flags); - __set_bit(DRIVER_REQUIRE_L2PAD, &rt2x00dev->flags); - if (!modparam_nohwcrypt) ---- a/drivers/net/wireless/rt2x00/rt2x00.h -+++ b/drivers/net/wireless/rt2x00/rt2x00.h -@@ -631,6 +631,7 @@ enum rt2x00_flags { - * Driver requirements - */ - DRIVER_REQUIRE_FIRMWARE, -+ DRIVER_REQUIRE_MCU, - DRIVER_REQUIRE_BEACON_GUARD, - DRIVER_REQUIRE_ATIM_QUEUE, - DRIVER_REQUIRE_DMA, diff --git a/package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch b/package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch new file mode 100644 index 000000000..744581167 --- /dev/null +++ b/package/mac80211/patches/700-mwl8k-missing-pci-id-for-WNR854T.patch @@ -0,0 +1,10 @@ +--- a/drivers/net/wireless/mwl8k.c ++++ b/drivers/net/wireless/mwl8k.c +@@ -3850,6 +3850,7 @@ MODULE_FIRMWARE("mwl8k/helper_8366.fw"); + MODULE_FIRMWARE("mwl8k/fmimage_8366.fw"); + + static DEFINE_PCI_DEVICE_TABLE(mwl8k_pci_id_table) = { ++ { PCI_VDEVICE(MARVELL, 0x2a02), .driver_data = MWL8363, }, + { PCI_VDEVICE(MARVELL, 0x2a0a), .driver_data = MWL8363, }, + { PCI_VDEVICE(MARVELL, 0x2a0c), .driver_data = MWL8363, }, + { PCI_VDEVICE(MARVELL, 0x2a24), .driver_data = MWL8363, }, From 1795cc4f0f9799c222ece0be3bb6496f456dd992 Mon Sep 17 00:00:00 2001 From: nico Date: Tue, 4 May 2010 17:36:18 +0000 Subject: [PATCH 20/28] [backfire] merge r21304 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21355 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- include/host.mk | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/include/host.mk b/include/host.mk index b93ab8d53..02365d9ea 100644 --- a/include/host.mk +++ b/include/host.mk @@ -1,5 +1,5 @@ # -# Copyright (C) 2007 OpenWrt.org +# Copyright (C) 2007-2010 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -14,6 +14,17 @@ export TAR FIND ifneq ($(__host_inc),1) __host_inc:=1 + +try-run = $(shell set -e; \ + TMP_F="$(TMP_DIR)/try-run.$$$$.tmp"; \ + if ($(1)) >/dev/null 2>&1; then echo "$(2)"; else echo "$(3)"; fi; \ + rm -f "$$TMP_F"; \ +) + +host-cc-option = $(call try-run, \ + $(HOSTCC) $(HOST_CFLAGS) $(1) -c -xc /dev/null -o "$$TMP_F",$(1),$(2) \ +) + .PRECIOUS: $(TMP_DIR)/.host.mk $(TMP_DIR)/.host.mk: $(TOPDIR)/include/host.mk @mkdir -p $(TMP_DIR) From d142e71778afdd71ab9030c711f60fbc58bb320c Mon Sep 17 00:00:00 2001 From: nico Date: Wed, 5 May 2010 02:15:29 +0000 Subject: [PATCH 21/28] [backfire] merge r21305 & r21353 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21366 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/grub/Makefile | 87 ++++++++++++++------------------- target/linux/x86/image/Makefile | 15 +++--- 2 files changed, 47 insertions(+), 55 deletions(-) diff --git a/package/grub/Makefile b/package/grub/Makefile index 338dbcac1..f6b81b798 100644 --- a/package/grub/Makefile +++ b/package/grub/Makefile @@ -1,5 +1,5 @@ # -# Copyright (C) 2006-2009 OpenWrt.org +# Copyright (C) 2006-2010 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. @@ -10,71 +10,60 @@ include $(INCLUDE_DIR)/kernel.mk PKG_NAME:=grub PKG_VERSION:=0.97 -PKG_RELEASE:=2 +PKG_RELEASE:=3 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz PKG_SOURCE_URL:=ftp://alpha.gnu.org/gnu/grub PKG_MD5SUM:=cd3f3eb54446be6003156158d51f4884 -PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/grub-$(PKG_VERSION) -PKG_TARGETS:=bin +PKG_BUILD_DEPENDS:= grub/host +PKG_INSTALL:=1 +include $(INCLUDE_DIR)/host-build.mk include $(INCLUDE_DIR)/package.mk -export grub_cv_prog_objcopy_absolute=yes - define Package/grub - SECTION:=boot - DEPENDS:=@TARGET_x86 - CATEGORY:=Boot Loaders + SUBMENU:=Boot Loaders + CATEGORY:=Utilities + SECTION:=utils TITLE:=GRand Unified Bootloader URL:=http://www.gnu.org/software/grub/ + DEPENDS:=@TARGET_x86 endef -CONFIGURE_FLAGS:= \ - --target=$(GNU_TARGET_NAME) \ - --host=$(GNU_TARGET_NAME) \ - --build=$(GNU_HOST_NAME) +MY_CONFIGURE_ARGS += \ + --disable-auto-linux-mem-opt \ + --disable-hercules \ -ifneq ($(HOST_OS),Darwin) -define Build/Configure - (cd $(PKG_BUILD_DIR); \ - LDFLAGS="-static" \ - ./configure \ - $(CONFIGURE_FLAGS) \ - --program-prefix="" \ - --program-suffix="" \ - --prefix=/usr \ - --exec-prefix=/usr \ - --bindir=/usr/bin \ - --sbindir=/usr/sbin \ - --libexecdir=/usr/lib \ - --sysconfdir=/etc \ - --datadir=/usr/share \ - --localstatedir=/var \ - --mandir=/usr/man \ - --infodir=/usr/info \ - $(DISABLE_NLS) \ - --disable-auto-linux-mem-opt \ - ) -endef +MY_CONFIGURE_VARS += \ + grub_cv_prog_objcopy_absolute=yes \ -# -# ./configure detects whether the host compiler supports -# -fno-stack-protector but only sets STAGE2_CFLAGS accordingly -# -define Build/Compile - $(MAKE) -C $(PKG_BUILD_DIR) \ - GRUB_CFLAGS="\$$$$(STAGE2_CFLAGS)" \ - STAGE1_CFLAGS="\$$$$(STAGE2_CFLAGS)" -endef +CONFIGURE_ARGS += $(MY_CONFIGURE_ARGS) + +CONFIGURE_VARS += $(MY_CONFIGURE_VARS) + +HOST_CFLAGS += $(call host-cc-option,-fno-stack-protector) +HOST_CFLAGS += $(call host-cc-option,-U_FORTIFY_SOURCE) + +HOST_CONFIGURE_ARGS += $(MY_CONFIGURE_ARGS) \ + --sbindir="$(STAGING_DIR_HOST)/bin" \ + --disable-graphics \ + +HOST_CONFIGURE_VARS += $(MY_CONFIGURE_VARS) define Build/InstallDev - $(MAKE) -C $(PKG_BUILD_DIR) \ - DESTDIR="$(STAGING_DIR_HOST)" \ - install - mv $(STAGING_DIR_HOST)/usr/sbin/grub $(STAGING_DIR_HOST)/bin + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/grub $(1)/usr/lib/ endef -endif +define Package/grub/install + $(INSTALL_DIR) $(1)/usr/bin + $(CP) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/ + $(INSTALL_DIR) $(1)/usr/lib + $(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib/ + $(INSTALL_DIR) $(1)/usr/sbin + $(CP) $(PKG_INSTALL_DIR)/usr/sbin/* $(1)/usr/sbin/ +endef + +$(eval $(call HostBuild)) $(eval $(call BuildPackage,grub)) diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile index 912dae235..257723c8a 100644 --- a/target/linux/x86/image/Makefile +++ b/target/linux/x86/image/Makefile @@ -56,7 +56,9 @@ ifneq ($(CONFIG_X86_GRUB_IMAGES),) # left here because the image builder doesnt need these $(INSTALL_DIR) $(KDIR)/root.grub/boot/grub $(CP) \ - $(KDIR)/*stage* \ + $(KDIR)/stage1 \ + $(KDIR)/stage2 \ + $(KDIR)/e2fs_stage1_5 \ $(KDIR)/root.grub/boot/grub/ $(CP) $(KDIR)/bzImage $(KDIR)/root.grub/boot/vmlinuz sed \ @@ -74,9 +76,10 @@ ifneq ($(CONFIG_X86_GRUB_IMAGES),) define Image/Prepare/grub # for the image builder $(CP) \ - $(STAGING_DIR_HOST)/usr/lib/grub/i386-*/stage1 \ - $(STAGING_DIR_HOST)/usr/lib/grub/i386-*/stage2 \ - $(STAGING_DIR_HOST)/usr/lib/grub/i386-*/e2fs_stage1_5 \ + $(STAGING_DIR)/usr/lib/grub/i386-openwrt/stage1 \ + $(STAGING_DIR)/usr/lib/grub/i386-openwrt/stage2 \ + $(STAGING_DIR)/usr/lib/grub/i386-openwrt/stage2_eltorito \ + $(STAGING_DIR)/usr/lib/grub/i386-openwrt/e2fs_stage1_5 \ $(KDIR)/ endef @@ -135,8 +138,8 @@ endef define Image/Build/iso $(INSTALL_DIR) $(KDIR)/root.grub/boot/grub $(CP) \ - $(STAGING_DIR_HOST)/usr/lib/grub/i386-openwrt/stage2_eltorito \ - $(KDIR)/root.grub/boot/grub/stage2_eltorito + $(KDIR)/stage2_eltorito \ + $(KDIR)/root.grub/boot/grub/ sed \ -e 's#@SERIAL_CONFIG@#$(strip $(GRUB_SERIAL_CONFIG))#g' \ -e 's#@TERMINAL_CONFIG@#$(strip $(GRUB_TERMINAL_CONFIG))#g' \ From aa0bcb7212f8c2a1c0fe9f24fce59d3ed6d0b7d5 Mon Sep 17 00:00:00 2001 From: nico Date: Wed, 5 May 2010 02:37:26 +0000 Subject: [PATCH 22/28] [backfire] package/grub: disable curses support git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21367 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/grub/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package/grub/Makefile b/package/grub/Makefile index f6b81b798..221269ba4 100644 --- a/package/grub/Makefile +++ b/package/grub/Makefile @@ -31,9 +31,11 @@ define Package/grub DEPENDS:=@TARGET_x86 endef + MY_CONFIGURE_ARGS += \ --disable-auto-linux-mem-opt \ --disable-hercules \ + --without-curses \ MY_CONFIGURE_VARS += \ grub_cv_prog_objcopy_absolute=yes \ From 47f82141ce2e246a8397c981017aa4ffabdee93f Mon Sep 17 00:00:00 2001 From: nico Date: Wed, 5 May 2010 11:22:44 +0000 Subject: [PATCH 23/28] [backfire] merge r21261 & r21262 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21376 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/kernel/modules/other.mk | 10 +++++++++- target/linux/generic-2.4/config-default | 9 +++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/package/kernel/modules/other.mk b/package/kernel/modules/other.mk index 52fbc525e..88b57c565 100644 --- a/package/kernel/modules/other.mk +++ b/package/kernel/modules/other.mk @@ -666,8 +666,16 @@ $(eval $(call KernelPackage,sc520-wdt)) define KernelPackage/input-core SUBMENU:=$(OTHER_MENU) TITLE:=Input device core - DEPENDS:=@LINUX_2_6 @!TARGET_x86 + DEPENDS:=@!TARGET_x86 KCONFIG:=CONFIG_INPUT +endef + +define KernelPackage/input-core/2.4 + FILES:=$(LINUX_DIR)/drivers/input/input.$(LINUX_KMOD_SUFFIX) + AUTOLOAD:=$(call AutoLoad,19,input) +endef + +define KernelPackage/input-core/2.6 FILES:=$(LINUX_DIR)/drivers/input/input-core.$(LINUX_KMOD_SUFFIX) AUTOLOAD:=$(call AutoLoad,19,input-core) endef diff --git a/target/linux/generic-2.4/config-default b/target/linux/generic-2.4/config-default index 8490f36b3..7871a2788 100644 --- a/target/linux/generic-2.4/config-default +++ b/target/linux/generic-2.4/config-default @@ -176,12 +176,17 @@ CONFIG_HOTPLUG=y CONFIG_IMQ=m # CONFIG_INET_ECN is not set CONFIG_INET=y -# CONFIG_INPUT_EVDEV is not set -# CONFIG_INPUT_GAMEPORT is not set # CONFIG_INPUT is not set +# CONFIG_INPUT_DB9 is not set +# CONFIG_INPUT_EVDEV is not set +# CONFIG_INPUT_GAMECON is not set +# CONFIG_INPUT_GAMEPORT is not set +# CONFIG_INPUT_IFORCE_USB is not set # CONFIG_INPUT_JOYDEV is not set # CONFIG_INPUT_KEYBDEV is not set # CONFIG_INPUT_MOUSEDEV is not set +# CONFIG_INPUT_SERIO is not set +# CONFIG_INPUT_TURBOGRAFX is not set # CONFIG_INPUT_UINPUT is not set # CONFIG_INTERMEZZO_FS is not set CONFIG_IP6_NF_FILTER=m From 26fc64b75e6d5d1dbadc26b78a714ce22c6e6d23 Mon Sep 17 00:00:00 2001 From: nico Date: Wed, 5 May 2010 12:01:17 +0000 Subject: [PATCH 24/28] [backfire] adjust kmod-crc16 dependencies and dependencies on kmod-crc16 (closes: #7063) git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21377 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/kernel/modules/netsupport.mk | 2 +- package/kernel/modules/other.mk | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/package/kernel/modules/netsupport.mk b/package/kernel/modules/netsupport.mk index 0c0c91244..462be0028 100644 --- a/package/kernel/modules/netsupport.mk +++ b/package/kernel/modules/netsupport.mk @@ -601,7 +601,7 @@ $(eval $(call KernelPackage,sched)) define KernelPackage/ax25 SUBMENU:=$(NETWORK_SUPPORT_MENU) TITLE:=AX25 support - DEPENDS:= +kmod-crc16 + DEPENDS:= +!(LINUX_2_4||TARGET_xburst):kmod-crc16 KCONFIG:= \ CONFIG_AX25 \ CONFIG_MKISS diff --git a/package/kernel/modules/other.mk b/package/kernel/modules/other.mk index 88b57c565..ffcb48ffd 100644 --- a/package/kernel/modules/other.mk +++ b/package/kernel/modules/other.mk @@ -62,6 +62,7 @@ $(eval $(call KernelPackage,crc7)) define KernelPackage/crc16 SUBMENU:=$(OTHER_MENU) TITLE:=CRC16 support + DEPENDS:=@!(LINUX_2_4||TARGET_xburst) KCONFIG:=CONFIG_CRC16 FILES:=$(LINUX_DIR)/lib/crc16.$(LINUX_KMOD_SUFFIX) AUTOLOAD:=$(call AutoLoad,20,crc16,1) @@ -275,7 +276,7 @@ $(eval $(call KernelPackage,ssb)) define KernelPackage/bluetooth SUBMENU:=$(OTHER_MENU) TITLE:=Bluetooth support - DEPENDS:=@USB_SUPPORT +kmod-crc16 +kmod-usb-core +!TARGET_x86:kmod-hid \ + DEPENDS:=@USB_SUPPORT +!(LINUX_2_4||TARGET_xburst):kmod-crc16 +kmod-usb-core +!TARGET_x86:kmod-hid \ +(TARGET_x86||TARGET_s3c24xx||TARGET_brcm47xx||TARGET_ar71xx):kmod-rfkill KCONFIG:= \ CONFIG_BLUEZ \ From ea97a4e23d0f479a64ce4a939fce41598d5512a2 Mon Sep 17 00:00:00 2001 From: nbd Date: Wed, 5 May 2010 15:58:21 +0000 Subject: [PATCH 25/28] [backfire] backport network hotplug change from r21379 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21380 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/base-files/files/etc/hotplug.d/net/10-net | 2 ++ 1 file changed, 2 insertions(+) diff --git a/package/base-files/files/etc/hotplug.d/net/10-net b/package/base-files/files/etc/hotplug.d/net/10-net index f46dcd08d..ef5900464 100644 --- a/package/base-files/files/etc/hotplug.d/net/10-net +++ b/package/base-files/files/etc/hotplug.d/net/10-net @@ -12,6 +12,8 @@ addif() { # PPP devices are configured by pppd, no need to run setup_interface here case "$INTERFACE" in ppp*) return 0;; + ath*) return 0;; + wlan*) return 0;; esac scan_interfaces From 4526458c8953030fe78147d4421381baa541da3c Mon Sep 17 00:00:00 2001 From: nico Date: Sat, 8 May 2010 13:04:36 +0000 Subject: [PATCH 26/28] [backfire] backport r21401 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21402 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- target/linux/x86/image/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/target/linux/x86/image/Makefile b/target/linux/x86/image/Makefile index 257723c8a..2ba5af630 100644 --- a/target/linux/x86/image/Makefile +++ b/target/linux/x86/image/Makefile @@ -86,7 +86,7 @@ ifneq ($(CONFIG_X86_GRUB_IMAGES),) else define Image/Build/grub - PADDING="$(CONFIG_X86_GRUB_IMAGES_PAD)" PATH="$(TARGET_PATH)" NOGRUB=1 ./gen_image_x86.sh + PADDING="$(CONFIG_X86_GRUB_IMAGES_PAD)" PATH="$(TARGET_PATH)" NOGRUB=1 ./gen_image_x86.sh \ $(BIN_DIR)/$(IMG_PREFIX)-combined-$(1).img \ $(CONFIG_X86_GRUB_KERNELPART) "" \ $(CONFIG_TARGET_ROOTFS_FSPART) $(KDIR)/root.$(1) From 0760831f6aed4933a2f61f10b80b5504e3878ac4 Mon Sep 17 00:00:00 2001 From: jow Date: Mon, 10 May 2010 19:28:09 +0000 Subject: [PATCH 27/28] [backfire] merge r21417 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21421 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../lib/preinit/05_failsafe_config_switch_brcm | 10 ++++++++++ .../lib/preinit/15_set_preinit_interface_brcm | 5 +++-- .../base-files/lib/preinit/20_failsafe_net_echo | 12 ++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) create mode 100644 target/linux/brcm-2.4/base-files/lib/preinit/05_failsafe_config_switch_brcm create mode 100644 target/linux/brcm-2.4/base-files/lib/preinit/20_failsafe_net_echo diff --git a/target/linux/brcm-2.4/base-files/lib/preinit/05_failsafe_config_switch_brcm b/target/linux/brcm-2.4/base-files/lib/preinit/05_failsafe_config_switch_brcm new file mode 100644 index 000000000..0bfce5f1e --- /dev/null +++ b/target/linux/brcm-2.4/base-files/lib/preinit/05_failsafe_config_switch_brcm @@ -0,0 +1,10 @@ +#!/bin/sh + +failsafe_config_switch() { + [ -d /proc/switch/eth0 ] && [ "$ifname" = "eth0" ] && { + echo "0 1 2 3 4 ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/0/ports + } +} + +boot_hook_add failsafe failsafe_config_switch + diff --git a/target/linux/brcm-2.4/base-files/lib/preinit/15_set_preinit_interface_brcm b/target/linux/brcm-2.4/base-files/lib/preinit/15_set_preinit_interface_brcm index 1bef26bf0..fdc7c71ca 100644 --- a/target/linux/brcm-2.4/base-files/lib/preinit/15_set_preinit_interface_brcm +++ b/target/linux/brcm-2.4/base-files/lib/preinit/15_set_preinit_interface_brcm @@ -30,9 +30,10 @@ preinit_net_echo() { echo "$port ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/0/ports port_net_echo $1 }; done + + echo "0 ${cpu_port:-5u*}" > /proc/switch/eth0/vlan/0/ports + } || port_net_echo $1 - - preinit_ip_deconfig } diff --git a/target/linux/brcm-2.4/base-files/lib/preinit/20_failsafe_net_echo b/target/linux/brcm-2.4/base-files/lib/preinit/20_failsafe_net_echo new file mode 100644 index 000000000..f030cb283 --- /dev/null +++ b/target/linux/brcm-2.4/base-files/lib/preinit/20_failsafe_net_echo @@ -0,0 +1,12 @@ +#!/bin/sh + +indicate_failsafe() { + preinit_net_echo() { + port_net_echo $1 + } + echo "- failsafe -" + preinit_net_echo "Entering Failsafe!\n" + indicate_failsafe_led +} + + From 905ec7ee631b3c55310c8ffe182cb1167d5ee7c5 Mon Sep 17 00:00:00 2001 From: jow Date: Mon, 10 May 2010 19:34:38 +0000 Subject: [PATCH 28/28] [backfire] merge r21422 git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@21423 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/hotplug2/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/hotplug2/Makefile b/package/hotplug2/Makefile index 2f8fc1477..d02b435bd 100644 --- a/package/hotplug2/Makefile +++ b/package/hotplug2/Makefile @@ -10,7 +10,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=hotplug2 PKG_REV:=201 PKG_VERSION:=$(PKG_REV) -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_PROTO:=svn PKG_SOURCE_VERSION:=$(PKG_REV)