From 8c3a967fae06af740e28b7f97a3db3d5b091b29d Mon Sep 17 00:00:00 2001 From: Imre Kaloz Date: Mon, 5 Jan 2009 14:46:18 +0000 Subject: [PATCH] general fixes for openwrt with kernel 2.6.28 Signed-off-by: Hauke Mehrtens SVN-Revision: 13876 --- package/kernel/modules/wireless.mk | 5 +- .../300-fix_byteorder_header.patch | 348 ++++++++++++++++++ ...-fix_kernel_types_with_recent_kernel.patch | 21 ++ 3 files changed, 372 insertions(+), 2 deletions(-) create mode 100644 target/linux/generic-2.6/patches-2.6.28/300-fix_byteorder_header.patch create mode 100644 toolchain/uClibc/patches/180-fix_kernel_types_with_recent_kernel.patch diff --git a/package/kernel/modules/wireless.mk b/package/kernel/modules/wireless.mk index 4db22aee22..6351ca8f52 100644 --- a/package/kernel/modules/wireless.mk +++ b/package/kernel/modules/wireless.mk @@ -140,8 +140,9 @@ define KernelPackage/net-hermes KCONFIG:=CONFIG_HERMES FILES:= \ $(LINUX_DIR)/drivers/net/wireless/hermes.$(LINUX_KMOD_SUFFIX) \ - $(LINUX_DIR)/drivers/net/wireless/orinoco.$(LINUX_KMOD_SUFFIX) - AUTOLOAD:=$(call AutoLoad,50,hermes orinoco) + $(LINUX_DIR)/drivers/net/wireless/orinoco.$(LINUX_KMOD_SUFFIX) \ + $(if $(CONFIG_LINUX_2_6_28),$(LINUX_DIR)/drivers/net/wireless/hermes_dld.$(LINUX_KMOD_SUFFIX)) + AUTOLOAD:=$(if $(CONFIG_LINUX_2_6_28),$(call AutoLoad,50,hermes hermes_dld orinoco),$(call AutoLoad,50,hermes orinoco)) endef define KernelPackage/net-hermes/description diff --git a/target/linux/generic-2.6/patches-2.6.28/300-fix_byteorder_header.patch b/target/linux/generic-2.6/patches-2.6.28/300-fix_byteorder_header.patch new file mode 100644 index 0000000000..8a4e088536 --- /dev/null +++ b/target/linux/generic-2.6/patches-2.6.28/300-fix_byteorder_header.patch @@ -0,0 +1,348 @@ +glibc headers define both __LITTLE_ENDIAN and __BIG_ENDIAN +which was tripping the check in linux/byteorder.h. Let's +just stay out of userspace's way and use __KERN_{endian} + +The old implementation got away with it as it kept the two +implementations in different headers and conditionally included +the right one. The combined header does checks within each +function body and depends on only one being defined. + +Converted the arches in mainline that have already moved to the +new header, as the other arches merge the will need simlar +fixups. + +Signed-off-by: Harvey Harrison +--- + arch/avr32/include/asm/byteorder.h | 2 +- + arch/mips/include/asm/byteorder.h | 4 +- + arch/sh/include/asm/byteorder.h | 4 +- + arch/sparc/include/asm/byteorder.h | 2 +- + include/linux/byteorder.h | 84 ++++++++++++++++++------------------ + 5 files changed, 48 insertions(+), 48 deletions(-) + +diff --git a/arch/avr32/include/asm/byteorder.h b/arch/avr32/include/asm/byteorder.h +index 8e3af02..b7d6dd1 100644 +--- a/arch/avr32/include/asm/byteorder.h ++++ b/arch/avr32/include/asm/byteorder.h +@@ -7,7 +7,7 @@ + #include + #include + +-#define __BIG_ENDIAN ++#define __KERN_BIG_ENDIAN + #define __SWAB_64_THRU_32__ + + #ifdef __CHECKER__ +diff --git a/arch/mips/include/asm/byteorder.h b/arch/mips/include/asm/byteorder.h +index 2988d29..8ad8a5b 100644 +--- a/arch/mips/include/asm/byteorder.h ++++ b/arch/mips/include/asm/byteorder.h +@@ -12,9 +12,9 @@ + #include + + #if defined(__MIPSEB__) +-# define __BIG_ENDIAN ++# define __KERN_BIG_ENDIAN + #elif defined(__MIPSEL__) +-# define __LITTLE_ENDIAN ++# define __KERN_LITTLE_ENDIAN + #else + # error "MIPS, but neither __MIPSEB__, nor __MIPSEL__???" + #endif +diff --git a/arch/sh/include/asm/byteorder.h b/arch/sh/include/asm/byteorder.h +index f5fa065..4aa5f1d 100644 +--- a/arch/sh/include/asm/byteorder.h ++++ b/arch/sh/include/asm/byteorder.h +@@ -9,9 +9,9 @@ + #include + + #ifdef __LITTLE_ENDIAN__ +-# define __LITTLE_ENDIAN ++# define __KERN_LITTLE_ENDIAN + #else +-# define __BIG_ENDIAN ++# define __KERN_BIG_ENDIAN + #endif + + #define __SWAB_64_THRU_32__ +diff --git a/arch/sparc/include/asm/byteorder.h b/arch/sparc/include/asm/byteorder.h +index 5a70f13..5b8347e 100644 +--- a/arch/sparc/include/asm/byteorder.h ++++ b/arch/sparc/include/asm/byteorder.h +@@ -4,7 +4,7 @@ + #include + #include + +-#define __BIG_ENDIAN ++#define __KERN_BIG_ENDIAN + + #ifdef CONFIG_SPARC32 + #define __SWAB_64_THRU_32__ +diff --git a/include/linux/byteorder.h b/include/linux/byteorder.h +index 29f002d..3599fbc 100644 +--- a/include/linux/byteorder.h ++++ b/include/linux/byteorder.h +@@ -4,33 +4,33 @@ + #include + #include + +-#if defined(__LITTLE_ENDIAN) && defined(__BIG_ENDIAN) ++#if defined(__KERN_LITTLE_ENDIAN) && defined(__KERN_BIG_ENDIAN) + # error Fix asm/byteorder.h to define one endianness + #endif + +-#if !defined(__LITTLE_ENDIAN) && !defined(__BIG_ENDIAN) ++#if !defined(__KERN_LITTLE_ENDIAN) && !defined(__KERN_BIG_ENDIAN) + # error Fix asm/byteorder.h to define arch endianness + #endif + +-#ifdef __LITTLE_ENDIAN +-# undef __LITTLE_ENDIAN +-# define __LITTLE_ENDIAN 1234 ++#ifdef __KERN_LITTLE_ENDIAN ++# ifndef __LITTLE_ENDIAN ++# define __LITTLE_ENDIAN 1234 ++# endif ++# ifndef __LITTLE_ENDIAN_BITFIELD ++# define __LITTLE_ENDIAN_BITFIELD ++# endif + #endif + +-#ifdef __BIG_ENDIAN +-# undef __BIG_ENDIAN +-# define __BIG_ENDIAN 4321 ++#ifdef __KERN_BIG_ENDIAN ++# ifndef __BIG_ENDIAN ++# define __BIG_ENDIAN 4321 ++# endif ++# ifndef __BIG_ENDIAN_BITFIELD ++# define __BIG_ENDIAN_BITFIELD ++# endif + #endif + +-#if defined(__LITTLE_ENDIAN) && !defined(__LITTLE_ENDIAN_BITFIELD) +-# define __LITTLE_ENDIAN_BITFIELD +-#endif +- +-#if defined(__BIG_ENDIAN) && !defined(__BIG_ENDIAN_BITFIELD) +-# define __BIG_ENDIAN_BITFIELD +-#endif +- +-#ifdef __LITTLE_ENDIAN ++#ifdef __KERN_LITTLE_ENDIAN + # define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) + # define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) + # define __le64_to_cpu(x) ((__force __u64)(__le64)(x)) +@@ -46,7 +46,7 @@ + # define __cpu_to_be64(x) ((__force __be64)__swab64(x)) + #endif + +-#ifdef __BIG_ENDIAN ++#ifdef __KERN_BIG_ENDIAN + # define __be16_to_cpu(x) ((__force __u16)(__be16)(x)) + # define __be32_to_cpu(x) ((__force __u32)(__be32)(x)) + # define __be64_to_cpu(x) ((__force __u64)(__be64)(x)) +@@ -87,91 +87,91 @@ + + static inline void __le16_to_cpus(__u16 *p) + { +-#ifdef __BIG_ENDIAN ++#ifdef __KERN_BIG_ENDIAN + __swab16s(p); + #endif + } + + static inline void __cpu_to_le16s(__u16 *p) + { +-#ifdef __BIG_ENDIAN ++#ifdef __KERN_BIG_ENDIAN + __swab16s(p); + #endif + } + + static inline void __le32_to_cpus(__u32 *p) + { +-#ifdef __BIG_ENDIAN ++#ifdef __KERN_BIG_ENDIAN + __swab32s(p); + #endif + } + + static inline void __cpu_to_le32s(__u32 *p) + { +-#ifdef __BIG_ENDIAN ++#ifdef __KERN_BIG_ENDIAN + __swab32s(p); + #endif + } + + static inline void __le64_to_cpus(__u64 *p) + { +-#ifdef __BIG_ENDIAN ++#ifdef __KERN_BIG_ENDIAN + __swab64s(p); + #endif + } + + static inline void __cpu_to_le64s(__u64 *p) + { +-#ifdef __BIG_ENDIAN ++#ifdef __KERN_BIG_ENDIAN + __swab64s(p); + #endif + } + + static inline void __be16_to_cpus(__u16 *p) + { +-#ifdef __LITTLE_ENDIAN ++#ifdef __KERN_LITTLE_ENDIAN + __swab16s(p); + #endif + } + + static inline void __cpu_to_be16s(__u16 *p) + { +-#ifdef __LITTLE_ENDIAN ++#ifdef __KERN_LITTLE_ENDIAN + __swab16s(p); + #endif + } + + static inline void __be32_to_cpus(__u32 *p) + { +-#ifdef __LITTLE_ENDIAN ++#ifdef __KERN_LITTLE_ENDIAN + __swab32s(p); + #endif + } + + static inline void __cpu_to_be32s(__u32 *p) + { +-#ifdef __LITTLE_ENDIAN ++#ifdef __KERN_LITTLE_ENDIAN + __swab32s(p); + #endif + } + + static inline void __be64_to_cpus(__u64 *p) + { +-#ifdef __LITTLE_ENDIAN ++#ifdef __KERN_LITTLE_ENDIAN + __swab64s(p); + #endif + } + + static inline void __cpu_to_be64s(__u64 *p) + { +-#ifdef __LITTLE_ENDIAN ++#ifdef __KERN_LITTLE_ENDIAN + __swab64s(p); + #endif + } + + static inline __u16 __le16_to_cpup(const __le16 *p) + { +-#ifdef __LITTLE_ENDIAN ++#ifdef __KERN_LITTLE_ENDIAN + return (__force __u16)*p; + #else + return __swab16p((__force __u16 *)p); +@@ -180,7 +180,7 @@ static inline __u16 __le16_to_cpup(const __le16 *p) + + static inline __u32 __le32_to_cpup(const __le32 *p) + { +-#ifdef __LITTLE_ENDIAN ++#ifdef __KERN_LITTLE_ENDIAN + return (__force __u32)*p; + #else + return __swab32p((__force __u32 *)p); +@@ -189,7 +189,7 @@ static inline __u32 __le32_to_cpup(const __le32 *p) + + static inline __u64 __le64_to_cpup(const __le64 *p) + { +-#ifdef __LITTLE_ENDIAN ++#ifdef __KERN_LITTLE_ENDIAN + return (__force __u64)*p; + #else + return __swab64p((__force __u64 *)p); +@@ -198,7 +198,7 @@ static inline __u64 __le64_to_cpup(const __le64 *p) + + static inline __le16 __cpu_to_le16p(const __u16 *p) + { +-#ifdef __LITTLE_ENDIAN ++#ifdef __KERN_LITTLE_ENDIAN + return (__force __le16)*p; + #else + return (__force __le16)__swab16p(p); +@@ -207,7 +207,7 @@ static inline __le16 __cpu_to_le16p(const __u16 *p) + + static inline __le32 __cpu_to_le32p(const __u32 *p) + { +-#ifdef __LITTLE_ENDIAN ++#ifdef __KERN_LITTLE_ENDIAN + return (__force __le32)*p; + #else + return (__force __le32)__swab32p(p); +@@ -216,7 +216,7 @@ static inline __le32 __cpu_to_le32p(const __u32 *p) + + static inline __le64 __cpu_to_le64p(const __u64 *p) + { +-#ifdef __LITTLE_ENDIAN ++#ifdef __KERN_LITTLE_ENDIAN + return (__force __le64)*p; + #else + return (__force __le64)__swab64p(p); +@@ -225,7 +225,7 @@ static inline __le64 __cpu_to_le64p(const __u64 *p) + + static inline __u16 __be16_to_cpup(const __be16 *p) + { +-#ifdef __BIG_ENDIAN ++#ifdef __KERN_BIG_ENDIAN + return (__force __u16)*p; + #else + return __swab16p((__force __u16 *)p); +@@ -234,7 +234,7 @@ static inline __u16 __be16_to_cpup(const __be16 *p) + + static inline __u32 __be32_to_cpup(const __be32 *p) + { +-#ifdef __BIG_ENDIAN ++#ifdef __KERN_BIG_ENDIAN + return (__force __u32)*p; + #else + return __swab32p((__force __u32 *)p); +@@ -243,7 +243,7 @@ static inline __u32 __be32_to_cpup(const __be32 *p) + + static inline __u64 __be64_to_cpup(const __be64 *p) + { +-#ifdef __BIG_ENDIAN ++#ifdef __KERN_BIG_ENDIAN + return (__force __u64)*p; + #else + return __swab64p((__force __u64 *)p); +@@ -252,7 +252,7 @@ static inline __u64 __be64_to_cpup(const __be64 *p) + + static inline __be16 __cpu_to_be16p(const __u16 *p) + { +-#ifdef __BIG_ENDIAN ++#ifdef __KERN_BIG_ENDIAN + return (__force __be16)*p; + #else + return (__force __be16)__swab16p(p); +@@ -261,7 +261,7 @@ static inline __be16 __cpu_to_be16p(const __u16 *p) + + static inline __be32 __cpu_to_be32p(const __u32 *p) + { +-#ifdef __BIG_ENDIAN ++#ifdef __KERN_BIG_ENDIAN + return (__force __be32)*p; + #else + return (__force __be32)__swab32p(p); +@@ -270,7 +270,7 @@ static inline __be32 __cpu_to_be32p(const __u32 *p) + + static inline __be64 __cpu_to_be64p(const __u64 *p) + { +-#ifdef __BIG_ENDIAN ++#ifdef __KERN_BIG_ENDIAN + return (__force __be64)*p; + #else + return (__force __be64)__swab64p(p); diff --git a/toolchain/uClibc/patches/180-fix_kernel_types_with_recent_kernel.patch b/toolchain/uClibc/patches/180-fix_kernel_types_with_recent_kernel.patch new file mode 100644 index 0000000000..307279c725 --- /dev/null +++ b/toolchain/uClibc/patches/180-fix_kernel_types_with_recent_kernel.patch @@ -0,0 +1,21 @@ +This patch is out of uClibc trunk. + +--- uClibc/libc/sysdeps/linux/i386/bits/kernel_types.h 2008/07/23 11:23:36 22935 ++++ uClibc/libc/sysdeps/linux/i386/bits/kernel_types.h 2008/12/23 09:04:50 24515 +@@ -7,10 +7,14 @@ + + /* a hack for compiling a 32 bit user space with 64 bit + * kernel on x86_64 */ +-#if !defined(__ARCH_I386_POSIX_TYPES_H) && !defined(_ASM_X86_64_POSIX_TYPES_H) ++#if !defined(__ARCH_I386_POSIX_TYPES_H) && \ ++ !defined(_ASM_X86_64_POSIX_TYPES_H) && \ ++ !defined(_ASM_X86_POSIX_TYPES_32_H) && \ ++ !defined(_ASM_X86_POSIX_TYPES_64_H) + #define _ASM_X86_64_POSIX_TYPES_H + #define __ARCH_I386_POSIX_TYPES_H +- ++#define _ASM_X86_POSIX_TYPES_32_H ++#define _ASM_X86_POSIX_TYPES_64_H + typedef unsigned short __kernel_dev_t; + typedef unsigned long __kernel_ino_t; + typedef unsigned short __kernel_mode_t;