diff options
Diffstat (limited to 'target/linux/realtek/patches-2.6.30/0004-rsdk-include-nonewfiles.patch')
-rw-r--r-- | target/linux/realtek/patches-2.6.30/0004-rsdk-include-nonewfiles.patch | 1918 |
1 files changed, 1918 insertions, 0 deletions
diff --git a/target/linux/realtek/patches-2.6.30/0004-rsdk-include-nonewfiles.patch b/target/linux/realtek/patches-2.6.30/0004-rsdk-include-nonewfiles.patch new file mode 100644 index 000000000..f485a84f5 --- /dev/null +++ b/target/linux/realtek/patches-2.6.30/0004-rsdk-include-nonewfiles.patch @@ -0,0 +1,1918 @@ +--- linux-2.6.30.9/include/asm-generic/bitops/sched.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/asm-generic/bitops/sched.h 2013-05-02 01:47:58.430226677 +0300 +@@ -11,11 +11,6 @@ + */ + static inline int sched_find_first_bit(const unsigned long *b) + { +-#if BITS_PER_LONG == 64 +- if (b[0]) +- return __ffs(b[0]); +- return __ffs(b[1]) + 64; +-#elif BITS_PER_LONG == 32 + if (b[0]) + return __ffs(b[0]); + if (b[1]) +@@ -23,9 +18,6 @@ static inline int sched_find_first_bit(c + if (b[2]) + return __ffs(b[2]) + 64; + return __ffs(b[3]) + 96; +-#else +-#error BITS_PER_LONG not defined +-#endif + } + + #endif /* _ASM_GENERIC_BITOPS_SCHED_H_ */ +--- linux-2.6.30.9/include/asm-generic/int-ll64.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/asm-generic/int-ll64.h 2013-05-02 01:47:58.433226677 +0300 +@@ -8,6 +8,8 @@ + #ifndef _ASM_GENERIC_INT_LL64_H + #define _ASM_GENERIC_INT_LL64_H + ++#include <asm-generic/bitsperlong.h> ++ + #ifndef __ASSEMBLY__ + /* + * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the +--- linux-2.6.30.9/include/linux/crypto.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/crypto.h 2013-05-02 01:47:58.489226673 +0300 +@@ -367,7 +367,22 @@ int crypto_unregister_alg(struct crypto_ + /* + * Algorithm query interface. + */ ++#if defined(CONFIG_PPP_MPPE_MPPC) ++#ifdef CONFIG_CRYPTO ++int crypto_alg_available(const char *name, u32 flags) ++ __deprecated_for_modules; + int crypto_has_alg(const char *name, u32 type, u32 mask); ++#else ++static int crypto_alg_available(const char *name, u32 flags) ++ __deprecated_for_modules; ++static inline int crypto_has_alg(const char *name, u32 type, u32 mask) ++{ ++ return 0; ++} ++#endif ++#else ++int crypto_has_alg(const char *name, u32 type, u32 mask); ++#endif + + /* + * Transforms: user-instantiated objects which encapsulate algorithms +@@ -1173,6 +1188,18 @@ static inline void crypto_cipher_decrypt + dst, src); + } + ++#if defined(CONFIG_PPP_MPPE_MPPC) ++void crypto_digest_init(struct crypto_tfm *tfm) __deprecated_for_modules; ++void crypto_digest_update(struct crypto_tfm *tfm, ++ struct scatterlist *sg, unsigned int nsg) ++ __deprecated_for_modules; ++void crypto_digest_final(struct crypto_tfm *tfm, u8 *out) ++ __deprecated_for_modules; ++void crypto_digest_digest(struct crypto_tfm *tfm, ++ struct scatterlist *sg, unsigned int nsg, u8 *out) ++ __deprecated_for_modules; ++#endif ++ + static inline struct crypto_hash *__crypto_hash_cast(struct crypto_tfm *tfm) + { + return (struct crypto_hash *)tfm; +@@ -1185,6 +1212,16 @@ static inline struct crypto_hash *crypto + return __crypto_hash_cast(tfm); + } + ++#if defined(CONFIG_PPP_MPPE_MPPC) ++static int crypto_digest_setkey(struct crypto_tfm *tfm, const u8 *key, ++ unsigned int keylen) __deprecated; ++static inline int crypto_digest_setkey(struct crypto_tfm *tfm, ++ const u8 *key, unsigned int keylen) ++{ ++ return tfm->crt_hash.setkey(crypto_hash_cast(tfm), key, keylen); ++} ++#endif ++ + static inline struct crypto_hash *crypto_alloc_hash(const char *alg_name, + u32 type, u32 mask) + { +--- linux-2.6.30.9/include/linux/decompress/mm.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/decompress/mm.h 2013-05-02 01:47:58.493226672 +0300 +@@ -53,8 +53,6 @@ static void free(void *where) + + #define set_error_fn(x) + +-#define INIT +- + #else /* STATIC */ + + /* Code active when compiled standalone for use when loading ramdisk: */ +@@ -77,7 +75,6 @@ static void free(void *where) + static void(*error)(char *m); + #define set_error_fn(x) error = x; + +-#define INIT __init + #define STATIC + + #include <linux/init.h> +--- linux-2.6.30.9/include/linux/gfp.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/gfp.h 2013-05-02 01:47:58.528226669 +0300 +@@ -5,6 +5,7 @@ + #include <linux/stddef.h> + #include <linux/linkage.h> + #include <linux/topology.h> ++#include <linux/mmdebug.h> + + struct vm_area_struct; + +--- linux-2.6.30.9/include/linux/hardirq.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/hardirq.h 2013-05-02 01:47:58.529226669 +0300 +@@ -2,7 +2,9 @@ + #define LINUX_HARDIRQ_H + + #include <linux/preempt.h> ++#ifdef CONFIG_PREEMPT + #include <linux/smp_lock.h> ++#endif + #include <linux/lockdep.h> + #include <linux/ftrace_irq.h> + #include <asm/hardirq.h> +--- linux-2.6.30.9/include/linux/if_bridge.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/if_bridge.h 2013-05-02 01:47:58.549226668 +0300 +@@ -49,6 +49,16 @@ + #define BR_STATE_FORWARDING 3 + #define BR_STATE_BLOCKING 4 + ++#if defined CONFIG_RTK_MESH ++//brian ++#define BRCTL_SET_MESH_PATHSELPID 111 ++#define BRCTL_GET_PORTSTAT 112 ++#endif ++ ++#if defined (CONFIG_RTL_IGMP_SNOOPING) ++#define BRCTL_SET_IGMPPROXY_PID 200 ++#endif ++ + struct __bridge_info + { + __u64 designated_root; +--- linux-2.6.30.9/include/linux/in6.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/in6.h 2013-05-02 01:47:58.563226667 +0300 +@@ -259,7 +259,9 @@ struct in6_flowlabel_req + + /* RFC5014: Source address selection */ + #define IPV6_ADDR_PREFERENCES 72 +- ++#ifdef CONFIG_RTL_IPV6READYLOGO ++#define IPV6_SRC_ADDR 73 ++#endif + #define IPV6_PREFER_SRC_TMP 0x0001 + #define IPV6_PREFER_SRC_PUBLIC 0x0002 + #define IPV6_PREFER_SRC_PUBTMP_DEFAULT 0x0100 +--- linux-2.6.30.9/include/linux/in.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/in.h 2013-05-02 01:47:58.562226667 +0300 +@@ -44,6 +44,7 @@ enum { + IPPROTO_PIM = 103, /* Protocol Independent Multicast */ + + IPPROTO_COMP = 108, /* Compression Header protocol */ ++ IPPROTO_L2TP = 115, /*L2tp over ip*/ + IPPROTO_SCTP = 132, /* Stream Control Transport Protocol */ + IPPROTO_UDPLITE = 136, /* UDP-Lite (RFC 3828) */ + +@@ -251,6 +252,17 @@ struct sockaddr_in { + #include <asm/byteorder.h> + + #ifdef __KERNEL__ ++/* Some random defines to make it easier in the kernel.. */ ++#define LOOPBACK(x) (((x) & htonl(0xff000000)) == htonl(0x7f000000)) ++#define MULTICAST(x) (((x) & htonl(0xf0000000)) == htonl(0xe0000000)) ++#define BADCLASS(x) (((x) & htonl(0xf0000000)) == htonl(0xf0000000)) ++#define ZERONET(x) (((x) & htonl(0xff000000)) == htonl(0x00000000)) ++#define LOCAL_MCAST(x) (((x) & htonl(0xFFFFFF00)) == htonl(0xE0000000)) ++ ++#endif ++ ++ ++#ifdef __KERNEL__ + + static inline bool ipv4_is_loopback(__be32 addr) + { +--- linux-2.6.30.9/include/linux/ipv6.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/ipv6.h 2013-05-02 01:47:58.580226665 +0300 +@@ -326,6 +326,9 @@ struct ipv6_pinfo { + dstopts:1, + odstopts:1, + rxflow:1, ++#ifdef CONFIG_RTL_IPV6READYLOGO ++ srcaddr:1, ++#endif + rxtclass:1; + } bits; + __u16 all; +--- linux-2.6.30.9/include/linux/irqflags.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/irqflags.h 2013-05-02 01:47:58.581226665 +0300 +@@ -12,6 +12,7 @@ + #define _LINUX_TRACE_IRQFLAGS_H + + #include <linux/typecheck.h> ++#include <asm/irqflags.h> + + #ifdef CONFIG_TRACE_IRQFLAGS + extern void trace_softirqs_on(unsigned long ip); +@@ -52,10 +53,7 @@ + # define start_critical_timings() do { } while (0) + #endif + +-#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT +- +-#include <asm/irqflags.h> +- ++#if defined(CONFIG_TRACE_IRQFLAGS_SUPPORT) + #define local_irq_enable() \ + do { trace_hardirqs_on(); raw_local_irq_enable(); } while (0) + #define local_irq_disable() \ +@@ -84,6 +82,7 @@ + * The local_irq_*() APIs are equal to the raw_local_irq*() + * if !TRACE_IRQFLAGS. + */ ++ #if 0 + # define raw_local_irq_disable() local_irq_disable() + # define raw_local_irq_enable() local_irq_enable() + # define raw_local_irq_save(flags) \ +@@ -96,9 +95,32 @@ + typecheck(unsigned long, flags); \ + local_irq_restore(flags); \ + } while (0) ++#endif ++ ++#define local_irq_enable() \ ++ do { raw_local_irq_enable(); } while (0) ++#define local_irq_disable() \ ++ do { raw_local_irq_disable();} while (0) ++#define local_irq_save(flags) \ ++ do { \ ++ typecheck(unsigned long, flags); \ ++ raw_local_irq_save(flags); \ ++ } while (0) ++ ++ ++#define local_irq_restore(flags) \ ++ do { \ ++ typecheck(unsigned long, flags); \ ++ if (raw_irqs_disabled_flags(flags)) { \ ++ raw_local_irq_restore(flags); \ ++ } else { \ ++ raw_local_irq_restore(flags); \ ++ } \ ++ } while (0) ++ + #endif /* CONFIG_TRACE_IRQFLAGS_SUPPORT */ + +-#ifdef CONFIG_TRACE_IRQFLAGS_SUPPORT ++#if defined(CONFIG_TRACE_IRQFLAGS_SUPPORT) + #define safe_halt() \ + do { \ + trace_hardirqs_on(); \ +@@ -124,6 +146,31 @@ + typecheck(unsigned long, flags); \ + raw_irqs_disabled_flags(flags); \ + }) +-#endif /* CONFIG_X86 */ ++#elif defined(CONFIG_RTL_819X) ++#define safe_halt() \ ++ do { \ ++ raw_safe_halt(); \ ++ } while (0) ++ ++#define local_save_flags(flags) \ ++ do { \ ++ typecheck(unsigned long, flags); \ ++ raw_local_save_flags(flags); \ ++ } while (0) ++ ++#define irqs_disabled() \ ++({ \ ++ unsigned long _flags; \ ++ \ ++ raw_local_save_flags(_flags); \ ++ raw_irqs_disabled_flags(_flags); \ ++}) ++ ++#define irqs_disabled_flags(flags) \ ++({ \ ++ typecheck(unsigned long, flags); \ ++ raw_irqs_disabled_flags(flags); \ ++}) ++#endif + + #endif +--- linux-2.6.30.9/include/linux/irq.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/irq.h 2013-05-02 01:47:58.581226665 +0300 +@@ -205,7 +205,9 @@ extern void arch_init_copy_chip_data(str + extern void arch_free_chip_data(struct irq_desc *old_desc, struct irq_desc *desc); + + #ifndef CONFIG_SPARSE_IRQ ++#if !defined(CONFIG_RTL_819X) + extern struct irq_desc irq_desc[NR_IRQS]; ++#endif + #else /* CONFIG_SPARSE_IRQ */ + extern struct irq_desc *move_irq_desc(struct irq_desc *old_desc, int cpu); + #endif /* CONFIG_SPARSE_IRQ */ +--- linux-2.6.30.9/include/linux/irqnr.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/irqnr.h 2013-05-02 01:47:58.591226664 +0300 +@@ -24,7 +23,12 @@ + #else /* CONFIG_GENERIC_HARDIRQS */ + + extern int nr_irqs; +-extern struct irq_desc *irq_to_desc(unsigned int irq); ++#if defined(CONFIG_RTL_819X) && !defined(CONFIG_RTL_8196C) && !defined(CONFIG_SPARSE_IRQ) ++ //__MIPS16 is defined at include/net/rtl/rtl_types.h ++ extern __attribute__((mips16)) struct irq_desc *irq_to_desc(unsigned int irq); ++#else ++ extern struct irq_desc *irq_to_desc(unsigned int irq); ++#endif + + # define for_each_irq_desc(irq, desc) \ + for (irq = 0, desc = irq_to_desc(irq); irq < nr_irqs; \ +--- linux-2.6.30.9/include/linux/jiffies.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/jiffies.h 2013-05-02 01:47:58.605226663 +0300 +@@ -71,7 +71,11 @@ + * but that can only take up to, say, 4-byte variables. jiffies being part of + * an 8-byte variable may not be correctly accessed unless we force the issue + */ ++ #if defined(CONFIG_RTL_819X) ++ #define __jiffy_data __attribute__((section(".dram-gen"))) ++ #else + #define __jiffy_data __attribute__((section(".data"))) ++#endif + + /* + * The 64-bit value is not atomic - you MUST NOT read it +--- linux-2.6.30.9/include/linux/kernel.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/kernel.h 2013-05-02 01:47:58.607226663 +0300 +@@ -232,11 +232,18 @@ extern struct pid *session_of_pgrp(struc + #define FW_WARN "[Firmware Warn]: " + #define FW_INFO "[Firmware Info]: " + +-#ifdef CONFIG_PRINTK ++asmlinkage int scrlog_printk(const char *fmt, ...); ++ ++#if defined(CONFIG_PRINTK) || defined(CONFIG_PANIC_PRINTK) + asmlinkage int vprintk(const char *fmt, va_list args) + __attribute__ ((format (printf, 1, 0))); ++#endif ++ ++#ifdef CONFIG_PRINTK + asmlinkage int printk(const char * fmt, ...) + __attribute__ ((format (printf, 1, 2))) __cold; ++asmlinkage int panic_printk(const char * fmt, ...) ++ __attribute__ ((format (printf, 1, 2))) __cold; + + extern struct ratelimit_state printk_ratelimit_state; + extern int printk_ratelimit(void); +@@ -257,11 +264,15 @@ extern bool printk_timed_ratelimit(unsig + + void log_buf_kexec_setup(void); + #else ++#if !defined(CONFIG_PANIC_PRINTK) + static inline int vprintk(const char *s, va_list args) + __attribute__ ((format (printf, 1, 0))); + static inline int vprintk(const char *s, va_list args) { return 0; } ++#endif + static inline int printk(const char *s, ...) + __attribute__ ((format (printf, 1, 2))); ++asmlinkage int panic_printk(const char * fmt, ...) ++ __attribute__ ((format (printf, 1, 2))) __cold; + static inline int __cold printk(const char *s, ...) { return 0; } + static inline int printk_ratelimit(void) { return 0; } + static inline bool printk_timed_ratelimit(unsigned long *caller_jiffies, \ +--- linux-2.6.30.9/include/linux/major.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/major.h 2013-05-02 01:47:58.626226661 +0300 +@@ -54,6 +54,7 @@ + #define ACSI_MAJOR 28 + #define AZTECH_CDROM_MAJOR 29 + #define FB_MAJOR 29 /* /dev/fb* framebuffers */ ++#define MTDBLK_MAJOR 31 /*/dev/mtdblock*/ + #define CM206_CDROM_MAJOR 32 + #define IDE2_MAJOR 33 + #define IDE3_MAJOR 34 +--- linux-2.6.30.9/include/linux/mm.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/mm.h 2013-05-02 01:47:58.640226660 +0300 +@@ -7,7 +7,6 @@ + + #include <linux/gfp.h> + #include <linux/list.h> +-#include <linux/mmdebug.h> + #include <linux/mmzone.h> + #include <linux/rbtree.h> + #include <linux/prio_tree.h> +@@ -823,8 +822,12 @@ static inline int handle_mm_fault(struct + extern int make_pages_present(unsigned long addr, unsigned long end); + extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write); + +-int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, unsigned long start, +- int len, int write, int force, struct page **pages, struct vm_area_struct **vmas); ++int get_user_pages(struct task_struct *tsk, struct mm_struct *mm, ++ unsigned long start, int nr_pages, int write, int force, ++ struct page **pages, struct vm_area_struct **vmas); ++int get_user_pages_fast(unsigned long start, int nr_pages, int write, ++ struct page **pages); ++ + + extern int try_to_release_page(struct page * page, gfp_t gfp_mask); + extern void do_invalidatepage(struct page *page, unsigned long offset); +@@ -849,16 +852,9 @@ extern int mprotect_fixup(struct vm_area + unsigned long end, unsigned long newflags); + + /* +- * get_user_pages_fast provides equivalent functionality to get_user_pages, +- * operating on current and current->mm (force=0 and doesn't return any vmas). +- * +- * get_user_pages_fast may take mmap_sem and page tables, so no assumptions +- * can be made about locking. get_user_pages_fast is to be implemented in a +- * way that is advantageous (vs get_user_pages()) when the user memory area is +- * already faulted in and present in ptes. However if the pages have to be +- * faulted in, it may turn out to be slightly slower). ++ * doesn't attempt to fault and will return short. + */ +-int get_user_pages_fast(unsigned long start, int nr_pages, int write, ++int __get_user_pages_fast(unsigned long start, int nr_pages, int write, + struct page **pages); + + /* +--- linux-2.6.30.9/include/linux/mmzone.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/mmzone.h 2013-05-02 01:47:58.644226660 +0300 +@@ -86,13 +86,8 @@ enum zone_stat_item { + NR_ACTIVE_ANON, /* " " " " " */ + NR_INACTIVE_FILE, /* " " " " " */ + NR_ACTIVE_FILE, /* " " " " " */ +-#ifdef CONFIG_UNEVICTABLE_LRU + NR_UNEVICTABLE, /* " " " " " */ + NR_MLOCK, /* mlock()ed pages found and moved off LRU */ +-#else +- NR_UNEVICTABLE = NR_ACTIVE_FILE, /* avoid compiler errors in dead code */ +- NR_MLOCK = NR_ACTIVE_FILE, +-#endif + NR_ANON_PAGES, /* Mapped anonymous pages */ + NR_FILE_MAPPED, /* pagecache pages mapped into pagetables. + only modified from process context */ +@@ -135,11 +130,7 @@ enum lru_list { + LRU_ACTIVE_ANON = LRU_BASE + LRU_ACTIVE, + LRU_INACTIVE_FILE = LRU_BASE + LRU_FILE, + LRU_ACTIVE_FILE = LRU_BASE + LRU_FILE + LRU_ACTIVE, +-#ifdef CONFIG_UNEVICTABLE_LRU + LRU_UNEVICTABLE, +-#else +- LRU_UNEVICTABLE = LRU_ACTIVE_FILE, /* avoid compiler errors in dead code */ +-#endif + NR_LRU_LISTS + }; + +@@ -159,11 +150,7 @@ static inline int is_active_lru(enum lru + + static inline int is_unevictable_lru(enum lru_list l) + { +-#ifdef CONFIG_UNEVICTABLE_LRU + return (l == LRU_UNEVICTABLE); +-#else +- return 0; +-#endif + } + + struct per_cpu_pages { +--- linux-2.6.30.9/include/linux/mroute.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/mroute.h 2013-05-02 01:47:58.646226660 +0300 +@@ -198,6 +198,9 @@ struct mfc_cache + #endif + __be32 mfc_mcastgrp; /* Group the entry belongs to */ + __be32 mfc_origin; /* Source of packet */ ++ #if defined (CONFIG_RTL_IGMP_PROXY) ++ __u32 mfc_firstone; ++ #endif + vifi_t mfc_parent; /* Source interface */ + int mfc_flags; /* Flags on line */ + +--- linux-2.6.30.9/include/linux/mtd/mtd.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/mtd/mtd.h 2013-05-02 01:47:58.649226660 +0300 +@@ -343,5 +343,127 @@ static inline void mtd_erase_callback(st + } while(0) + + #endif /* CONFIG_MTD_DEBUG */ ++/*****************************************************************************/ ++/* ++* Added by alva_zhang ++*/ ++/*****************************************************************************/ ++ ++__asm__ ( ++ ".macro\t__sti\n\t" ++ ".set\tpush\n\t" ++ ".set\treorder\n\t" ++ ".set\tnoat\n\t" ++ "mfc0\t$1,$12\n\t" ++ "ori\t$1,0x1f\n\t" ++ "xori\t$1,0x1e\n\t" ++ "mtc0\t$1,$12\n\t" ++ ".set\tpop\n\t" ++ ".endm"); ++ ++extern __inline__ void ++mtd_sti(void) ++{ ++ __asm__ __volatile__( ++ "__sti" ++ : /* no outputs */ ++ : /* no inputs */ ++ : "memory"); ++} ++ ++/* ++ * For cli() we have to insert nops to make sure that the new value ++ * has actually arrived in the status register before the end of this ++ * macro. ++ * R4000/R4400 need three nops, the R4600 two nops and the R10000 needs ++ * no nops at all. ++ */ ++__asm__ ( ++ ".macro\t__cli\n\t" ++ ".set\tpush\n\t" ++ ".set\tnoat\n\t" ++ "mfc0\t$1,$12\n\t" ++ "ori\t$1,1\n\t" ++ "xori\t$1,1\n\t" ++ ".set\tnoreorder\n\t" ++ "mtc0\t$1,$12\n\t" ++ "sll\t$0, $0, 1\t\t\t# nop\n\t" ++ "sll\t$0, $0, 1\t\t\t# nop\n\t" ++ "sll\t$0, $0, 1\t\t\t# nop\n\t" ++ ".set\tpop\n\t" ++ ".endm"); ++ ++extern __inline__ void ++mtd_cli(void) ++{ ++ __asm__ __volatile__( ++ "__cli" ++ : /* no outputs */ ++ : /* no inputs */ ++ : "memory"); ++} ++ ++__asm__ ( ++ ".macro\t__save_flags flags\n\t" ++ ".set\tpush\n\t" ++ ".set\treorder\n\t" ++ "mfc0\t\\flags, $12\n\t" ++ ".set\tpop\n\t" ++ ".endm"); ++ ++#define mtd_save_flags(x) \ ++__asm__ __volatile__( \ ++ "__save_flags %0" \ ++ : "=r" (x)) ++ ++__asm__ ( ++ ".macro\t__save_and_cli result\n\t" ++ ".set\tpush\n\t" ++ ".set\treorder\n\t" ++ ".set\tnoat\n\t" ++ "mfc0\t\\result, $12\n\t" ++ "ori\t$1, \\result, 1\n\t" ++ "xori\t$1, 1\n\t" ++ ".set\tnoreorder\n\t" ++ "mtc0\t$1, $12\n\t" ++ "sll\t$0, $0, 1\t\t\t# nop\n\t" ++ "sll\t$0, $0, 1\t\t\t# nop\n\t" ++ "sll\t$0, $0, 1\t\t\t# nop\n\t" ++ ".set\tpop\n\t" ++ ".endm"); ++ ++#define mtd_save_and_cli(x) \ ++__asm__ __volatile__( \ ++ "__save_and_cli\t%0" \ ++ : "=r" (x) \ ++ : /* no inputs */ \ ++ : "memory") ++ ++__asm__(".macro\t__restore_flags flags\n\t" ++ ".set\tnoreorder\n\t" ++ ".set\tnoat\n\t" ++ "mfc0\t$1, $12\n\t" ++ "andi\t\\flags, 1\n\t" ++ "ori\t$1, 1\n\t" ++ "xori\t$1, 1\n\t" ++ "or\t\\flags, $1\n\t" ++ "mtc0\t\\flags, $12\n\t" ++ "nop\n\t" ++ "nop\n\t" ++ "nop\n\t" ++ ".set\tat\n\t" ++ ".set\treorder\n\t" ++ ".endm"); ++ ++#define mtd_restore_flags(flags) \ ++do { \ ++ unsigned long __tmp1; \ ++ \ ++ __asm__ __volatile__( \ ++ "__restore_flags\t%0" \ ++ : "=r" (__tmp1) \ ++ : "0" (flags) \ ++ : "memory"); \ ++} while(0) + + #endif /* __MTD_MTD_H__ */ +--- linux-2.6.30.9/include/linux/netdevice.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/netdevice.h 2013-05-02 01:47:58.658226659 +0300 +@@ -75,7 +75,11 @@ struct wireless_dev; + #define NET_RX_CN_MOD 3 /* Storm on its way! */ + #define NET_RX_CN_HIGH 4 /* The storm is here */ + #define NET_RX_BAD 5 /* packet dropped due to kernel error */ ++#define NET_RX_PASSBY 6 /* packet pass by for next process */ + ++#if defined (CONFIG_RTL865X_LANPORT_RESTRICTION) ++#define NET_RX_AUTH_BLOCK 6 ++#endif + /* NET_XMIT_CN is special. It does not guarantee that this packet is lost. It + * indicates that the device will soon be dropping packets, or already drops + * some packets of the same priority; prompting us to send less aggressively. */ +@@ -712,6 +716,7 @@ struct net_device + /* Instance data managed by the core of Wireless Extensions. */ + struct iw_public_data * wireless_data; + #endif ++ void *priv; /* pointer to private data */ + /* Management operations */ + const struct net_device_ops *netdev_ops; + const struct ethtool_ops *ethtool_ops; +@@ -905,6 +910,12 @@ struct net_device + #endif + }; + #endif ++ ++ #if defined(CONFIG_RTL_HARDWARE_NAT) || defined(CONFIG_RTL_HW_NAPT) ++ /*2007-12-19*/ ++ int wanif; ++ #endif ++ + }; + #define to_net_dev(d) container_of(d, struct net_device, dev) + +@@ -990,6 +1001,14 @@ static inline void *netdev_priv(const st + */ + #define SET_NETDEV_DEV(net, pdev) ((net)->dev.parent = (pdev)) + ++#ifdef CONFIG_RTL_USB_OTG ++/* Set the sysfs device type for the network logical device to allow ++ * fin grained indentification of different network device types. For ++ * example Ethernet, Wirelss LAN, Bluetooth, WiMAX etc. ++ */ ++#define SET_NETDEV_DEVTYPE(net, devtype) ((net)->dev.type = (devtype)) ++#endif ++ + /** + * netif_napi_add - initialize a napi context + * @dev: network device +@@ -1098,6 +1117,7 @@ extern struct net_device *dev_get_by_fla + unsigned short mask); + extern struct net_device *dev_get_by_name(struct net *net, const char *name); + extern struct net_device *__dev_get_by_name(struct net *net, const char *name); ++extern int rtl865x_getDevIpAndNetmask(struct net_device * dev, unsigned int *ipAddr, unsigned int *netMask ); + extern int dev_alloc_name(struct net_device *dev, const char *name); + extern int dev_open(struct net_device *dev); + extern int dev_close(struct net_device *dev); +--- linux-2.6.30.9/include/linux/netfilter/nf_conntrack_common.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/netfilter/nf_conntrack_common.h 2013-05-02 01:47:58.659226659 +0300 +@@ -73,6 +73,13 @@ enum ip_conntrack_status { + /* Connection has fixed timeout. */ + IPS_FIXED_TIMEOUT_BIT = 10, + IPS_FIXED_TIMEOUT = (1 << IPS_FIXED_TIMEOUT_BIT), ++ ++#if defined(CONFIG_RTL_NF_CONNTRACK_GARBAGE_NEW) ++ /* Connection is bt session: identify for bt session */ ++ IPS_BT_SESSION_BIT = 11, ++ IPS_BT_SESSION = (1 << IPS_BT_SESSION_BIT), ++#endif ++ + }; + + /* Connection tracking event bits */ +--- linux-2.6.30.9/include/linux/netfilter/x_tables.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/netfilter/x_tables.h 2013-05-02 01:47:58.663226659 +0300 +@@ -5,6 +5,11 @@ + + #define XT_FUNCTION_MAXNAMELEN 30 + #define XT_TABLE_MAXNAMELEN 32 ++#if defined(CONFIG_RTL_IPTABLES_RULE_2_ACL) ++#define RTL865X_SKIP_THIS_RULE 0x8 ++#define RTL865X_ESTABLISH_RULE 0x10 ++#define RTL865X_MATCH_NOT_SUPPORTED 0xFFFF; ++#endif + + struct xt_entry_match + { +@@ -292,6 +297,15 @@ struct xt_match + void (*compat_from_user)(void *dst, void *src); + int (*compat_to_user)(void __user *dst, void *src); + ++#if defined(CONFIG_RTL_IPTABLES_RULE_2_ACL) ++ int (*match2acl)(const char *tablename, ++ const void *ip, ++ const struct xt_match *match, ++ void *matchinfo, ++ void *rule, ++ unsigned int *invflag); ++#endif ++ + /* Set this to THIS_MODULE if you are a module, otherwise NULL */ + struct module *me; + +@@ -336,6 +350,16 @@ struct xt_target + /* Set this to THIS_MODULE if you are a module, otherwise NULL */ + struct module *me; + ++#if defined(CONFIG_RTL_IPTABLES_RULE_2_ACL) ++ int (*target2acl)(const char *tablename, ++ const void *entry, ++ const struct xt_target *target, ++ void *targinfo, ++ void *rule, ++ unsigned int hook_mask, ++ void **data); ++#endif ++ + const char *table; + unsigned int targetsize; + unsigned int compatsize; +--- linux-2.6.30.9/include/linux/netfilter/xt_mac.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/netfilter/xt_mac.h 2013-05-02 01:47:58.666226658 +0300 +@@ -1,8 +1,26 @@ + #ifndef _XT_MAC_H + #define _XT_MAC_H + ++#define MAC_SRC 0x01 /* Match source MAC address */ ++#define MAC_DST 0x02 /* Match destination MAC address */ ++#if defined(CONFIG_RTL_MAC_FILTER_CARE_INPORT) ++#define INPORT_FLAG 0x04 ++#endif ++#define MAC_SRC_INV 0x10 /* Negate the condition */ ++#define MAC_DST_INV 0x20 /* Negate the condition */ ++ ++struct xt_mac{ ++ unsigned char macaddr[ETH_ALEN]; ++}; ++ + struct xt_mac_info { +- unsigned char srcaddr[ETH_ALEN]; +- int invert; ++ struct xt_mac srcaddr; ++ struct xt_mac dstaddr; ++// int invert; ++ u_int8_t flags; ++#if defined(CONFIG_RTL_MAC_FILTER_CARE_INPORT) ++ u_int8_t inPortMask; ++#endif + }; ++ + #endif /*_XT_MAC_H*/ +--- linux-2.6.30.9/include/linux/netfilter_ipv4/ip_tables.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/netfilter_ipv4/ip_tables.h 2013-05-02 01:47:58.673226658 +0300 +@@ -73,6 +73,11 @@ struct ipt_ip { + #define IPT_INV_PROTO XT_INV_PROTO + #define IPT_INV_MASK 0x7F /* All possible flag bits mask. */ + ++#if defined(CONFIG_RTL_HW_QOS_SUPPORT) && defined(CONFIG_RTL_IPTABLES_RULE_2_ACL) ++/* Values for special return value */ ++#define RTL_QOSFINDSPECIALNETIF 1 ++#endif ++ + /* This structure defines each of the firewall rules. Consists of 3 + parts which are 1) general IP header stuff 2) match specific + stuff 3) the target to perform if the rule matches */ +@@ -228,6 +233,25 @@ ipt_get_target(struct ipt_entry *e) + return (void *)e + e->target_offset; + } + ++#if defined(CONFIG_RTL_IPTABLES_RULE_2_ACL) ++ ++#define IPT_MATCH_NUMBER(e) \ ++({ \ ++ unsigned int __i; \ ++ int __ret = 0; \ ++ struct ipt_entry_match *__match; \ ++ for(__i = sizeof(struct ipt_entry); \ ++ __i < (e)->target_offset; \ ++ __i += __match->u.match_size) \ ++ { \ ++ __match = (void*)(e) + __i; \ ++ __ret++; \ ++ } \ ++ __ret; \ ++}) ++ ++#endif ++ + /* fn returns 0 to continue iteration */ + #define IPT_MATCH_ITERATE(e, fn, args...) \ + XT_MATCH_ITERATE(struct ipt_entry, e, fn, ## args) +@@ -336,4 +360,37 @@ compat_ipt_get_target(struct compat_ipt_ + + #endif /* CONFIG_COMPAT */ + #endif /*__KERNEL__*/ ++ ++#if defined(CONFIG_RTL_IPTABLES_RULE_2_ACL) ++#define RTL865X_CHAINLIST_NUMBER_PER_TBL 5 ++#define RTL865x_CHAINLIST_PRIORITY_LEVEL_0 0 ++#define RTL865x_CHAINLIST_PRIORITY_LEVEL_1 1 ++#define RTL865x_CHAINLIST_PRIORITY_LEVEL_2 2 ++#define RTL865x_CHAINLIST_PRIORITY_LEVEL_3 3 ++#define RTL865x_CHAINLIST_PRIORITY_LEVEL_4 4 ++ ++typedef struct _rtl865x_iptRule2Acl_tbl_ ++{ ++ struct list_head list; ++ /*chain list priority: 0 > 1 > ...> 4*/ ++ struct list_head chainList[RTL865X_CHAINLIST_NUMBER_PER_TBL]; /*chain list head in this table*/ ++ ++ int32_t priority; /*table priority*/ ++ char tblName[32]; ++}rtl865x_iptRule2Acl_tbl; ++//extern struct list_head rtl865x_iptRule2Acl_tbl_list; ++//extern struct list_head rtl865x_iptRule2Acl_def_rule_list; ++//extern struct list_head match_to_acl_rule_list; ++//extern struct list_head def_rule_list; ++#endif ++ ++#if defined (CONFIG_RTL_IGMP_SNOOPING) && defined (CONFIG_NETFILTER) ++extern unsigned int (*IgmpRxFilter_Hook)(struct sk_buff *skb, ++ unsigned int hook, ++ const struct net_device *in, ++ const struct net_device *out, ++ struct xt_table *table); ++#endif ++ ++ + #endif /* _IPTABLES_H */ +--- linux-2.6.30.9/include/linux/netfilter_ipv4.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/netfilter_ipv4.h 2013-05-02 01:47:58.671226658 +0300 +@@ -36,6 +36,7 @@ + #define NFC_IP_DST_PT 0x0400 + /* Something else about the proto */ + #define NFC_IP_PROTO_UNKNOWN 0x2000 ++#endif /* ! __KERNEL__ */ + + /* IP Hooks */ + /* After promisc drops, checksum checks. */ +@@ -49,7 +50,7 @@ + /* Packets about to hit the wire. */ + #define NF_IP_POST_ROUTING 4 + #define NF_IP_NUMHOOKS 5 +-#endif /* ! __KERNEL__ */ ++ + + enum nf_ip_hook_priorities { + NF_IP_PRI_FIRST = INT_MIN, +--- linux-2.6.30.9/include/linux/netlink.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/netlink.h 2013-05-02 01:47:58.679226657 +0300 +@@ -25,6 +25,16 @@ + #define NETLINK_SCSITRANSPORT 18 /* SCSI Transports */ + #define NETLINK_ECRYPTFS 19 + ++#define NETLINK_L2TP 20 ++ ++#if defined(CONFIG_RTL_819X) ++#define NETLINK_RTK_DEBUG 21 ++#define NETLINK_RTK_FILTER 22 ++#define NETLINK_MULTICAST_DELETE 23 ++#define NETLINK_RTK_FB 24 ++#define NETLINK_RTK_HW_QOS 25 ++#endif ++ + #define MAX_LINKS 32 + + struct net; +@@ -174,8 +184,10 @@ struct netlink_skb_parms + + #define NETLINK_CB(skb) (*(struct netlink_skb_parms*)&((skb)->cb)) + #define NETLINK_CREDS(skb) (&NETLINK_CB((skb)).creds) +- +- ++#if defined(CONFIG_RTL_819X) ++extern int rtk_nlrecvmsg(struct sk_buff *_skb,int _len, void *_recv_data); ++extern int rtk_nlsendmsg (int _pid,struct sock *_nl_sk,int _len,void *_send_info); ++#endif + extern struct sock *netlink_kernel_create(struct net *net, + int unit,unsigned int groups, + void (*input)(struct sk_buff *skb), +--- linux-2.6.30.9/include/linux/page-flags.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/page-flags.h 2013-05-02 01:47:58.687226657 +0300 +@@ -95,9 +95,7 @@ enum pageflags { + PG_reclaim, /* To be reclaimed asap */ + PG_buddy, /* Page is free, on buddy lists */ + PG_swapbacked, /* Page is backed by RAM/swap */ +-#ifdef CONFIG_UNEVICTABLE_LRU + PG_unevictable, /* Page is "unevictable" */ +-#endif + #ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT + PG_mlocked, /* Page is vma mlocked */ + #endif +@@ -248,14 +246,8 @@ PAGEFLAG_FALSE(SwapCache) + SETPAGEFLAG_NOOP(SwapCache) CLEARPAGEFLAG_NOOP(SwapCache) + #endif + +-#ifdef CONFIG_UNEVICTABLE_LRU + PAGEFLAG(Unevictable, unevictable) __CLEARPAGEFLAG(Unevictable, unevictable) + TESTCLEARFLAG(Unevictable, unevictable) +-#else +-PAGEFLAG_FALSE(Unevictable) TESTCLEARFLAG_FALSE(Unevictable) +- SETPAGEFLAG_NOOP(Unevictable) CLEARPAGEFLAG_NOOP(Unevictable) +- __CLEARPAGEFLAG_NOOP(Unevictable) +-#endif + + #ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT + #define MLOCK_PAGES 1 +@@ -382,11 +374,7 @@ static inline void __ClearPageTail(struc + + #endif /* !PAGEFLAGS_EXTENDED */ + +-#ifdef CONFIG_UNEVICTABLE_LRU + #define __PG_UNEVICTABLE (1 << PG_unevictable) +-#else +-#define __PG_UNEVICTABLE 0 +-#endif + + #ifdef CONFIG_HAVE_MLOCKED_PAGE_BIT + #define __PG_MLOCKED (1 << PG_mlocked) +--- linux-2.6.30.9/include/linux/pagemap.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/pagemap.h 2013-05-02 01:47:58.688226656 +0300 +@@ -22,9 +22,7 @@ enum mapping_flags { + AS_EIO = __GFP_BITS_SHIFT + 0, /* IO error on async write */ + AS_ENOSPC = __GFP_BITS_SHIFT + 1, /* ENOSPC on async write */ + AS_MM_ALL_LOCKS = __GFP_BITS_SHIFT + 2, /* under mm_take_all_locks() */ +-#ifdef CONFIG_UNEVICTABLE_LRU + AS_UNEVICTABLE = __GFP_BITS_SHIFT + 3, /* e.g., ramdisk, SHM_LOCK */ +-#endif + }; + + static inline void mapping_set_error(struct address_space *mapping, int error) +@@ -37,8 +35,6 @@ static inline void mapping_set_error(str + } + } + +-#ifdef CONFIG_UNEVICTABLE_LRU +- + static inline void mapping_set_unevictable(struct address_space *mapping) + { + set_bit(AS_UNEVICTABLE, &mapping->flags); +@@ -55,14 +51,6 @@ static inline int mapping_unevictable(st + return test_bit(AS_UNEVICTABLE, &mapping->flags); + return !!mapping; + } +-#else +-static inline void mapping_set_unevictable(struct address_space *mapping) { } +-static inline void mapping_clear_unevictable(struct address_space *mapping) { } +-static inline int mapping_unevictable(struct address_space *mapping) +-{ +- return 0; +-} +-#endif + + static inline gfp_t mapping_gfp_mask(struct address_space * mapping) + { +--- linux-2.6.30.9/include/linux/ppp_channel.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/ppp_channel.h 2013-05-02 01:47:58.698226656 +0300 +@@ -81,5 +81,10 @@ extern int ppp_unit_number(struct ppp_ch + * that ppp_unregister_channel returns. + */ + ++#if defined(CONFIG_RTL_PPPOE_HWACC) || defined (CONFIG_RTL_FAST_PPPOE) ++extern void ppp_channel_pppoe(struct ppp_channel *chan); ++#endif ++ ++ + #endif /* __KERNEL__ */ + #endif +--- linux-2.6.30.9/include/linux/ppp-comp.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/ppp-comp.h 2013-05-02 01:47:58.698226656 +0300 +@@ -26,7 +26,7 @@ + */ + + /* +- * ==FILEVERSION 980319== ++ * ==FILEVERSION 20040509== + * + * NOTE TO MAINTAINERS: + * If you modify this file at all, please set the above date. +@@ -109,8 +109,11 @@ struct compressor { + + /* Used in locking compressor modules */ + struct module *owner; ++ ++#if !defined(CONFIG_PPP_MPPE_MPPC) + /* Extra skb space needed by the compressor algorithm */ + unsigned int comp_extra; ++#endif + }; + + /* +@@ -191,12 +194,43 @@ struct compressor { + #define DEFLATE_CHK_SEQUENCE 0 + + /* +- * Definitions for MPPE. ++ * Definitions for MPPE/MPPC. + */ + + #define CI_MPPE 18 /* config option for MPPE */ + #define CILEN_MPPE 6 /* length of config option */ + ++#if defined(CONFIG_PPP_MPPE_MPPC) ++#define MPPE_OVHD 4 /* MPPE overhead */ ++#define MPPE_MAX_KEY_LEN 16 /* largest key length (128-bit) */ ++ ++#define MPPE_STATELESS 0x01 /* configuration bit H */ ++#define MPPE_40BIT 0x20 /* configuration bit L */ ++#define MPPE_56BIT 0x80 /* configuration bit M */ ++#define MPPE_128BIT 0x40 /* configuration bit S */ ++#define MPPE_MPPC 0x01 /* configuration bit C */ ++ ++/* ++ * Definitions for Stac LZS. ++ */ ++ ++#define CI_LZS 17 /* config option for Stac LZS */ ++#define CILEN_LZS 5 /* length of config option */ ++ ++#define LZS_OVHD 4 /* max. LZS overhead */ ++#define LZS_HIST_LEN 2048 /* LZS history size */ ++#define LZS_MAX_CCOUNT 0x0FFF /* max. coherency counter value */ ++ ++#define LZS_MODE_NONE 0 ++#define LZS_MODE_LCB 1 ++#define LZS_MODE_CRC 2 ++#define LZS_MODE_SEQ 3 ++#define LZS_MODE_EXT 4 ++ ++#define LZS_EXT_BIT_FLUSHED 0x80 /* bit A */ ++#define LZS_EXT_BIT_COMP 0x20 /* bit C */ ++#endif ++ + /* + * Definitions for other, as yet unsupported, compression methods. + */ +--- linux-2.6.30.9/include/linux/rmap.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/rmap.h 2013-05-02 01:47:58.708226655 +0300 +@@ -105,18 +105,11 @@ unsigned long page_address_in_vma(struct + */ + int page_mkclean(struct page *); + +-#ifdef CONFIG_UNEVICTABLE_LRU + /* + * called in munlock()/munmap() path to check for other vmas holding + * the page mlocked. + */ + int try_to_munlock(struct page *); +-#else +-static inline int try_to_munlock(struct page *page) +-{ +- return 0; /* a.k.a. SWAP_SUCCESS */ +-} +-#endif + + #else /* !CONFIG_MMU */ + +--- linux-2.6.30.9/include/linux/root_dev.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/root_dev.h 2013-05-02 01:47:58.708226655 +0300 +@@ -16,6 +16,7 @@ enum { + Root_SDA2 = MKDEV(SCSI_DISK0_MAJOR, 2), + Root_HDC1 = MKDEV(IDE1_MAJOR, 1), + Root_SR0 = MKDEV(SCSI_CDROM_MAJOR, 0), ++ Root_MTDBLK1=MKDEV(MTDBLK_MAJOR, 1), + }; + + extern dev_t ROOT_DEV; +--- linux-2.6.30.9/include/linux/rtnetlink.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/rtnetlink.h 2013-05-02 01:47:58.711226655 +0300 +@@ -113,6 +113,11 @@ enum { + RTM_SETDCB, + #define RTM_SETDCB RTM_SETDCB + ++#ifdef CONFIG_RTK_VOIP ++ RTM_LINKCHANGE, ++#define RTM_LINKCHANGE RTM_LINKCHANGE ++#endif ++ + __RTM_MAX, + #define RTM_MAX (((__RTM_MAX + 3) & ~3) - 1) + }; +--- linux-2.6.30.9/include/linux/sched.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/sched.h 2013-05-02 01:47:58.713226654 +0300 +@@ -482,6 +482,15 @@ struct task_cputime { + .sum_exec_runtime = 0, \ + } + ++/* ++ * Disable preemption until the scheduler is running. ++ * Reset by start_kernel()->sched_init()->init_idle(). ++ * ++ * We include PREEMPT_ACTIVE to avoid cond_resched() from working ++ * before the scheduler is active -- see should_resched(). ++ */ ++#define INIT_PREEMPT_COUNT (1 + PREEMPT_ACTIVE) ++ + /** + * struct thread_group_cputimer - thread group interval timer counts + * @cputime: thread group interval timers. +--- linux-2.6.30.9/include/linux/serial_8250.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/serial_8250.h 2013-05-02 01:47:58.716226654 +0300 +@@ -50,6 +50,7 @@ enum { + PLAT8250_DEV_MCA, + PLAT8250_DEV_AU1X00, + PLAT8250_DEV_SM501, ++ PLAT8250_DEV_SC16IS7X0, // I2C + }; + + /* +--- linux-2.6.30.9/include/linux/serial_core.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/serial_core.h 2013-05-02 01:47:58.716226654 +0300 +@@ -273,6 +273,7 @@ struct uart_port { + #define UPIO_TSI (5) /* Tsi108/109 type IO */ + #define UPIO_DWAPB (6) /* DesignWare APB UART */ + #define UPIO_RM9000 (7) /* RM9000 type IO */ ++#define UPIO_I2C (8) /* I2C */ + + unsigned int read_status_mask; /* driver specific */ + unsigned int ignore_status_mask; /* driver specific */ +--- linux-2.6.30.9/include/linux/skbuff.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/skbuff.h 2013-05-02 01:47:58.719226654 +0300 +@@ -28,6 +28,24 @@ + #include <linux/rcupdate.h> + #include <linux/dmaengine.h> + #include <linux/hrtimer.h> ++#if defined(CONFIG_RTK_VLAN_SUPPORT) ++#include <net/rtl/rtk_vlan.h> ++#endif ++ ++#if defined(CONFIG_RTL_819X) || defined(CONFIG_RTL8192CD) || defined(CONFIG_RTL8190) || defined(CONFIG_RTL8192SE) ++#define RTL_PRIV_DATA_SIZE 128 ++#endif ++ ++#if defined(CONFIG_RTL_QOS_PATCH) || defined(CONFIG_RTK_VOIP_QOS)|| defined(CONFIG_RTK_VLAN_WAN_TAG_SUPPORT) ++#define QOS_PATCH_HIGH_QUEUE_PRIO 7 ++#define QOS_PATCH_RX_FROM_LOCAL 0xff ++#define QOS_PATCH_RX_FROM_WIRELESS 7 ++#if defined(CONFIG_RTK_VLAN_WAN_TAG_SUPPORT) ++#define RX_FROM_LOCAL QOS_PATCH_RX_FROM_LOCAL ++#define RX_FROM_WIRELESS QOS_PATCH_RX_FROM_WIRELESS ++#endif ++#endif ++ + + /* Don't change this without changing skb_csum_unnecessary! */ + #define CHECKSUM_NONE 0 +@@ -334,6 +352,9 @@ struct sk_buff { + */ + char cb[48]; + ++ /*This field is only needed by RTL8190 Driver.FIX ME!!!*/ ++ unsigned char __unused; ++ + unsigned int len, + data_len; + __u16 mac_len, +@@ -391,6 +412,50 @@ struct sk_buff { + __u32 secmark; + #endif + ++#if defined( CONFIG_RTL_HARDWARE_MULTICAST) || defined(CONFIG_RTL865X_LANPORT_RESTRICTION) ++ __u16 srcPort; ++ __u16 srcVlanId:12; ++#endif ++ ++#if defined(CONFIG_RTL_QOS_8021P_SUPPORT) ++ __u16 srcVlanPriority:3; ++#endif ++ ++/* #if defined(CONFIG_NETFILTER_XT_MATCH_PHYPORT)|| defined(CONFIG_RTL_FAST_FILTER) */ ++ __u8 srcPhyPort; // 0~4 ++ __u8 dstPhyPort; // 0~4 ++/* #endif */ ++ ++#if defined(CONFIG_RTK_VLAN_SUPPORT) ++ struct vlan_tag tag; ++#if defined(CONFIG_RTK_VLAN_NEW_FEATURE) ++ struct vlan_info *src_info; ++#endif ++#endif ++#if defined (CONFIG_RTL_LOCAL_PUBLIC) ++ __u32 srcLocalPublicIp; ++ __u8 fromLocalPublic; ++ __u8 toLocalPublic; ++ __u8 localPublicFlags; ++#endif ++#if defined(CONFIG_RTL_FAST_BRIDGE) ++ __u8 fast_br_forwarding_flags; ++#endif ++ ++#if defined(CONFIG_RTL_DSCP_IPTABLE_CHECK) ++ __u8 original_dscp; ++ #endif ++ ++#if defined(CONFIG_RTL_IPTABLES_FAST_PATH) ++/* #if defined(IMPROVE_QOS) && defined(CONFIG_NET_SCHED) */ ++ /* This member is only used at fastpath when both IMPROVE_QOS and CONFIG_NET_SCHED are defined. */ ++ struct net_device *inDev; ++/* end of IMPROVE_QOS and CONFIG_NET_SCHED */ ++#endif ++#if defined (CONFIG_RTL_FAST_PPPOE) ++ __u32 pppoe_flag; ++ struct net_device *rx_dev; ++#endif + __u32 mark; + + __u16 vlan_tci; +@@ -1423,11 +1488,19 @@ static inline void skb_orphan(struct sk_ + * list lock and the caller must hold the relevant locks to use it. + */ + extern void skb_queue_purge(struct sk_buff_head *list); ++extern void dev_kfree_skb_any(struct sk_buff *skb); + static inline void __skb_queue_purge(struct sk_buff_head *list) + { + struct sk_buff *skb; + while ((skb = __skb_dequeue(list)) != NULL) ++ { ++ #if CONFIG_RTL_819X ++ dev_kfree_skb_any(skb); ++ #else + kfree_skb(skb); ++ #endif ++ } ++ + } + + /** +@@ -2044,5 +2117,9 @@ static inline void skb_forward_csum(stru + } + + bool skb_partial_csum_set(struct sk_buff *skb, u16 start, u16 off); ++ ++#if defined(CONFIG_RTL_ETH_PRIV_SKB) && (defined(CONFIG_NET_WIRELESS_AGN) || defined(CONFIG_NET_WIRELESS_AG)) ++void copy_skb_header(struct sk_buff *new, const struct sk_buff *old); ++#endif + #endif /* __KERNEL__ */ + #endif /* _LINUX_SKBUFF_H */ +--- linux-2.6.30.9/include/linux/string.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/string.h 2013-05-02 01:47:58.730226653 +0300 +@@ -14,6 +14,7 @@ + + extern char *strndup_user(const char __user *, long); + extern void *memdup_user(const void __user *, size_t); ++extern char * strtok(char *,const char *); + + /* + * Include machine specific inline routines +--- linux-2.6.30.9/include/linux/swap.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/swap.h 2013-05-02 01:47:58.735226653 +0300 +@@ -235,7 +235,6 @@ static inline int zone_reclaim(struct zo + } + #endif + +-#ifdef CONFIG_UNEVICTABLE_LRU + extern int page_evictable(struct page *page, struct vm_area_struct *vma); + extern void scan_mapping_unevictable_pages(struct address_space *); + +@@ -244,24 +243,6 @@ extern int scan_unevictable_handler(stru + void __user *, size_t *, loff_t *); + extern int scan_unevictable_register_node(struct node *node); + extern void scan_unevictable_unregister_node(struct node *node); +-#else +-static inline int page_evictable(struct page *page, +- struct vm_area_struct *vma) +-{ +- return 1; +-} +- +-static inline void scan_mapping_unevictable_pages(struct address_space *mapping) +-{ +-} +- +-static inline int scan_unevictable_register_node(struct node *node) +-{ +- return 0; +-} +- +-static inline void scan_unevictable_unregister_node(struct node *node) { } +-#endif + + extern int kswapd_run(int nid); + +--- linux-2.6.30.9/include/linux/sysctl.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/sysctl.h 2013-05-02 01:47:58.736226653 +0300 +@@ -335,6 +335,11 @@ enum + NET_NF_CONNTRACK_FRAG6_LOW_THRESH=30, + NET_NF_CONNTRACK_FRAG6_HIGH_THRESH=31, + NET_NF_CONNTRACK_CHECKSUM=32, ++#if defined(CONFIG_RTL_NF_CONNTRACK_GARBAGE_NEW) ++ NET_NF_CONNTRACK_GARBAGE_TCP, ++ NET_NF_CONNTRACK_GARBAGE_UDP, ++#endif ++ + }; + + /* /proc/sys/net/ipv4 */ +--- linux-2.6.30.9/include/linux/types.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/types.h 2013-05-02 01:47:58.745226652 +0300 +@@ -135,9 +135,14 @@ typedef __s64 int64_t; + typedef u64 sector_t; + typedef u64 blkcnt_t; + #else ++#ifdef CONFIG_4KB_HARDDISK_SUPPORT ++typedef u64 sector_t; ++typedef u64 blkcnt_t; ++#else + typedef unsigned long sector_t; + typedef unsigned long blkcnt_t; + #endif ++#endif + + /* + * The type of an index into the pagecache. Use a #define so asm/types.h +--- linux-2.6.30.9/include/linux/usb/ch9.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/usb/ch9.h 2013-05-02 01:47:58.750226651 +0300 +@@ -191,6 +191,8 @@ struct usb_ctrlrequest { + #define USB_DT_WIRE_ADAPTER 0x21 + #define USB_DT_RPIPE 0x22 + #define USB_DT_CS_RADIO_CONTROL 0x23 ++/* USB 3.0 */ ++#define USB_DT_SS_ENDPOINT_COMP 0x30 + + /* Conventional codes for class-specific descriptors. The convention is + * defined in the USB "Common Class" Spec (3.11). Individual class specs +@@ -715,6 +717,15 @@ struct usb_wireless_ep_comp_descriptor { + #define USB_ENDPOINT_SWITCH_SCALE 2 + } __attribute__((packed)); + ++/* USB 3.0 */ ++struct usb_superspeed_ep_comp_descriptor { ++ __u8 bLength; ++ __u8 bDescriptorType; ++ __u8 bMaxBurst; ++ __u8 bmAttributes; ++ __u16 wBytesPerInterval; ++} __attribute__((packed)); ++ + /*-------------------------------------------------------------------------*/ + + /* USB_REQ_SET_HANDSHAKE is a four-way handshake used between a wireless +@@ -752,6 +763,7 @@ enum usb_device_speed { + USB_SPEED_LOW, USB_SPEED_FULL, /* usb 1.1 */ + USB_SPEED_HIGH, /* usb 2.0 */ + USB_SPEED_VARIABLE, /* wireless (usb 2.5) */ ++ USB_SPEED_SUPER, /* usb 3.0 */ + }; + + enum usb_device_state { +--- linux-2.6.30.9/include/linux/usb/gadget.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/usb/gadget.h 2013-05-02 01:47:58.751226651 +0300 +@@ -83,6 +83,11 @@ struct usb_request { + unsigned zero:1; + unsigned short_not_ok:1; + ++#ifdef DWC_UASP_GADGET ++ unsigned padding:13; // align stream_id to 16-bit boundary ++ unsigned stream_id:16; ++#endif ++ + void (*complete)(struct usb_ep *ep, + struct usb_request *req); + void *context; +@@ -110,6 +115,12 @@ struct usb_ep_ops { + gfp_t gfp_flags); + void (*free_request) (struct usb_ep *ep, struct usb_request *req); + ++#ifdef CONFIG_RTL_USB_OTG ++ void *(*alloc_buffer) (struct usb_ep *ep, unsigned bytes, ++ dma_addr_t *dma, gfp_t gfp_flags); ++ void (*free_buffer) (struct usb_ep *ep, void *buf, dma_addr_t dma, ++ unsigned bytes); ++#endif + int (*queue) (struct usb_ep *ep, struct usb_request *req, + gfp_t gfp_flags); + int (*dequeue) (struct usb_ep *ep, struct usb_request *req); +@@ -228,6 +239,49 @@ static inline void usb_ep_free_request(s + ep->ops->free_request(ep, req); + } + ++#ifdef CONFIG_RTL_USB_OTG ++/** ++ * usb_ep_alloc_buffer - allocate an I/O buffer ++ * @ep:the endpoint associated with the buffer ++ * @len:length of the desired buffer ++ * @dma:pointer to the buffer's DMA address; must be valid ++ * @gfp_flags:GFP_* flags to use ++ * ++ * Returns a new buffer, or null if one could not be allocated. ++ * The buffer is suitably aligned for dma, if that endpoint uses DMA, ++ * and the caller won't have to care about dma-inconsistency ++ * or any hidden "bounce buffer" mechanism. No additional per-request ++ * DMA mapping will be required for such buffers. ++ * Free it later with usb_ep_free_buffer(). ++ * ++ * You don't need to use this call to allocate I/O buffers unless you ++ * want to make sure drivers don't incur costs for such "bounce buffer" ++ * copies or per-request DMA mappings. ++ */ ++static inline void * ++usb_ep_alloc_buffer (struct usb_ep *ep, unsigned len, dma_addr_t *dma, ++ gfp_t gfp_flags) ++{ ++ return ep->ops->alloc_buffer (ep, len, dma, gfp_flags); ++} ++ ++/** ++ * usb_ep_free_buffer - frees an i/o buffer ++ * @ep:the endpoint associated with the buffer ++ * @buf:CPU view address of the buffer ++ * @dma:the buffer's DMA address ++ * @len:length of the buffer ++ * ++ * reverses the effect of usb_ep_alloc_buffer(). ++ * caller guarantees the buffer will no longer be accessed ++ */ ++static inline void ++usb_ep_free_buffer (struct usb_ep *ep, void *buf, dma_addr_t dma, unsigned len) ++{ ++ ep->ops->free_buffer (ep, buf, dma, len); ++} ++#endif ++ + /** + * usb_ep_queue - queues (submits) an I/O request to an endpoint. + * @ep:the endpoint associated with the request +@@ -887,9 +941,16 @@ static inline void usb_free_descriptors( + + /* utility wrapping a simple endpoint selection policy */ + ++#if defined(CONFIG_RTL_ULINKER) ++extern struct usb_ep *usb_ep_autoconfig(struct usb_gadget *, ++ struct usb_endpoint_descriptor *); ++ ++extern void usb_ep_autoconfig_reset(struct usb_gadget *); ++#else + extern struct usb_ep *usb_ep_autoconfig(struct usb_gadget *, + struct usb_endpoint_descriptor *) __devinit; + + extern void usb_ep_autoconfig_reset(struct usb_gadget *) __devinit; ++#endif /* #if defined(CONFIG_RTL_ULINKER) */ + + #endif /* __LINUX_USB_GADGET_H */ +--- linux-2.6.30.9/include/linux/vmstat.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/linux/vmstat.h 2013-05-02 01:47:58.760226651 +0300 +@@ -44,7 +44,6 @@ enum vm_event_item { PGPGIN, PGPGOUT, PS + #ifdef CONFIG_HUGETLB_PAGE + HTLB_BUDDY_PGALLOC, HTLB_BUDDY_PGALLOC_FAIL, + #endif +-#ifdef CONFIG_UNEVICTABLE_LRU + UNEVICTABLE_PGCULLED, /* culled to noreclaim list */ + UNEVICTABLE_PGSCANNED, /* scanned for reclaimability */ + UNEVICTABLE_PGRESCUED, /* rescued from noreclaim list */ +@@ -53,7 +52,6 @@ enum vm_event_item { PGPGIN, PGPGOUT, PS + UNEVICTABLE_PGCLEARED, /* on COW, page truncate */ + UNEVICTABLE_PGSTRANDED, /* unable to isolate on unlock */ + UNEVICTABLE_MLOCKFREED, +-#endif + NR_VM_EVENT_ITEMS + }; + +--- linux-2.6.30.9/include/net/dst.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/net/dst.h 2013-05-02 01:47:58.780226649 +0300 +@@ -124,6 +124,15 @@ struct dst_ops + struct net *dst_net; + }; + ++struct dst_gc ++{ ++ spinlock_t lock; ++ struct dst_entry *list; ++ unsigned long timer_inc; ++ unsigned long timer_expires; ++}; ++ ++ + #ifdef __KERNEL__ + + static inline u32 +@@ -271,6 +280,22 @@ static inline int dst_output(struct sk_b + /* Input packet from network to transport. */ + static inline int dst_input(struct sk_buff *skb) + { ++ if(skb->dst == NULL) ++ { ++ //printk("Func[%s] Line[%d], skb(0x%p),skb->dst(0x%p)\n", __FUNCTION__, __LINE__, skb,skb->dst); ++ kfree_skb(skb); ++ return -EHOSTUNREACH; ++ } ++ ++ if(skb->dst->output == NULL) ++ { ++ //printk("Func[%s] Line[%d], func 0x%p,skb(0x%p),skb->dst(0x%p)\n", __FUNCTION__, __LINE__, skb->dst->output,skb,skb->dst); ++ //if(skb->dst->dev) ++ //printk("skb->dst->dev->name(%s)\n",skb->dst->dev->name); ++ kfree_skb(skb); ++ return -EHOSTUNREACH; ++ } ++ + return skb->dst->input(skb); + } + +--- linux-2.6.30.9/include/net/ip_vs.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/net/ip_vs.h 2013-05-02 01:47:58.784226649 +0300 +@@ -383,6 +383,10 @@ struct ip_vs_conn { + void *app_data; /* Application private data */ + struct ip_vs_seq in_seq; /* incoming seq. struct */ + struct ip_vs_seq out_seq; /* outgoing seq. struct */ ++ #if defined(CONFIG_RTL_HARDWARE_NAT) ++ /*2007-12-19*/ ++ __u32 hw_acc; /* 1: hardware acceleration, 0: software only */ ++ #endif + }; + + +--- linux-2.6.30.9/include/net/netfilter/nf_conntrack_core.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/net/netfilter/nf_conntrack_core.h 2013-05-02 01:47:58.795226648 +0300 +@@ -51,6 +51,7 @@ nf_ct_invert_tuple(struct nf_conntrack_t + extern struct nf_conntrack_tuple_hash * + nf_conntrack_find_get(struct net *net, const struct nf_conntrack_tuple *tuple); + ++#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) + extern int __nf_conntrack_confirm(struct sk_buff *skb); + + /* Confirm a connection: returns NF_DROP if packet must be dropped. */ +@@ -67,6 +68,7 @@ static inline int nf_conntrack_confirm(s + } + return ret; + } ++#endif + + int + print_tuple(struct seq_file *s, const struct nf_conntrack_tuple *tuple, +--- linux-2.6.30.9/include/net/netfilter/nf_conntrack_expect.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/net/netfilter/nf_conntrack_expect.h 2013-05-02 01:47:58.796226648 +0300 +@@ -81,6 +81,11 @@ void nf_conntrack_expect_fini(struct net + struct nf_conntrack_expect * + __nf_ct_expect_find(struct net *net, const struct nf_conntrack_tuple *tuple); + ++#if defined(CONFIG_IP_NF_TARGET_CONENAT) ++struct nf_conntrack_expect * ++__nf_ct_expect_find_bysave(struct net *net, const struct nf_conntrack_tuple *tupleMake, const struct nf_conntrack_tuple *tuple); ++#endif ++ + struct nf_conntrack_expect * + nf_ct_expect_find_get(struct net *net, const struct nf_conntrack_tuple *tuple); + +--- linux-2.6.30.9/include/net/netfilter/nf_conntrack.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/net/netfilter/nf_conntrack.h 2013-05-02 01:47:58.795226648 +0300 +@@ -12,6 +12,14 @@ + #ifndef _NF_CONNTRACK_H + #define _NF_CONNTRACK_H + ++#if defined(CONFIG_RTL_819X) ++/* by default disable */ ++#if defined(CONFIG_FAST_PATH_SPI_ENABLED) ++#define FAST_PATH_SPI_ENABLED 1 ++#endif ++ ++#endif ++ + #include <linux/netfilter/nf_conntrack_common.h> + + #ifdef __KERNEL__ +@@ -92,9 +101,11 @@ struct nf_conn_help { + #include <net/netfilter/ipv6/nf_conntrack_ipv6.h> + + struct nf_conn { ++#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) + /* Usage count in here is 1 for hash table/destruct timer, 1 per skb, + plus 1 for any connection(s) we are `master' for */ + struct nf_conntrack ct_general; ++#endif + + /* XXX should I move this to the tail ? - Y.K */ + /* These are my tuples; original and reply */ +@@ -117,16 +128,95 @@ struct nf_conn { + u_int32_t secmark; + #endif + ++#if defined(CONFIG_NETFILTER_XT_MATCH_LAYER7) || \ ++ defined(CONFIG_NETFILTER_XT_MATCH_LAYER7_MODULE) ++ struct { ++ /* ++ * e.g. "http". NULL before decision. "unknown" after decision ++ * if no match. ++ */ ++ char *app_proto; ++ /* ++ * application layer data so far. NULL after match decision. ++ */ ++ char *app_data; ++ unsigned int app_data_len; ++ } layer7; ++#endif ++ + /* Storage reserved for other modules: */ + union nf_conntrack_proto proto; + + /* Extensions */ + struct nf_ct_ext *ext; +-#ifdef CONFIG_NET_NS ++ ++ #ifdef CONFIG_NET_NS + struct net *ct_net; +-#endif ++ #endif ++ ++ #if defined(CONFIG_RTL_NF_CONNTRACK_GARBAGE_NEW) ++ struct list_head state_tuple; ++ char drop_flag; ++ char removed; ++ #endif + }; + ++ ++extern int routerTypeFlag; ++ ++#define CONFIG_RTL_ROUTER_FAST_PATH 1 ++#if defined (CONFIG_RTL_ROUTER_FAST_PATH) ++extern unsigned int _br0_ip; ++extern unsigned int _br0_mask; ++ ++static inline int rtl_isRouterType(struct nf_conn *ct) ++{ ++ if(((ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip == ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip) && ++ (ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.ip == ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3.ip))) ++ return 1; ++ return 0; ++} ++ ++static inline int rtl_isRouterTypeWantoLan(struct nf_conn * ct) ++{ ++ if((ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3.ip != _br0_ip) && ++ ((ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3.ip & _br0_mask) == (_br0_ip & _br0_mask)) && ++ ((ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip & _br0_mask) != (_br0_ip & _br0_mask))) ++ return 1; ++ ++ return 0; ++} ++ ++ ++static inline int rtl_isNatTypeWantoLan(struct nf_conn* ct) ++{ ++ if(ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip== ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip) ++ return 1; ++ ++ return 0; ++} ++ ++static inline int rtl_isRouterTypeLantoWan(struct nf_conn* ct) ++{ ++ if((ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip != _br0_ip) && ++ ((ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip & _br0_mask) == (_br0_ip & _br0_mask)) && ++ ((ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3.ip & _br0_mask) != (_br0_ip & _br0_mask))) ++ return 1; ++ ++ return 0; ++} ++ ++static inline int rtl_isNatTypeLantoWan(struct nf_conn* ct) ++{ ++ if (ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.ip== ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3.ip) ++ return 1; ++ ++ return 0; ++} ++ ++#endif ++ ++ + static inline struct nf_conn * + nf_ct_tuplehash_to_ctrack(const struct nf_conntrack_tuple_hash *hash) + { +@@ -169,6 +259,8 @@ extern int + nf_conntrack_tuple_taken(const struct nf_conntrack_tuple *tuple, + const struct nf_conn *ignored_conntrack); + ++#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) ++ + /* Return conntrack_info and tuple hash for given skb. */ + static inline struct nf_conn * + nf_ct_get(const struct sk_buff *skb, enum ip_conntrack_info *ctinfo) +@@ -183,6 +275,7 @@ static inline void nf_ct_put(struct nf_c + NF_CT_ASSERT(ct); + nf_conntrack_put(&ct->ct_general); + } ++#endif + + /* Protocol module loading */ + extern int nf_ct_l3proto_try_module_get(unsigned short l3proto); +@@ -215,6 +308,37 @@ extern void __nf_ct_refresh_acct(struct + unsigned long extra_jiffies, + int do_acct); + ++#if defined(CONFIG_RTL_NF_CONNTRACK_GARBAGE_NEW) ++extern void __nf_ct_refresh_acct_proto(void *ct, ++ enum ip_conntrack_info ctinfo, ++ const void *skb, ++ unsigned long extra_jiffies, ++ int do_acct, ++ unsigned char proto, ++ void * extra1, ++ void * extra2); ++ ++static inline void nf_ct_refresh_acct_tcp(struct nf_conn *ct, ++ enum ip_conntrack_info ctinfo, ++ const struct sk_buff *skb, ++ unsigned long extra_jiffies, ++ enum tcp_conntrack oldstate, ++ enum tcp_conntrack newstate) ++{ ++ __nf_ct_refresh_acct_proto(ct, ctinfo, skb, extra_jiffies, 1, 6, (void *)oldstate, (void *)newstate); ++} ++ ++ ++static inline void nf_ct_refresh_acct_udp(struct nf_conn *ct, ++ enum ip_conntrack_info ctinfo, ++ const struct sk_buff *skb, ++ unsigned long extra_jiffies, char * status) ++{ ++ __nf_ct_refresh_acct_proto(ct, ctinfo, skb, extra_jiffies, 1, 17, (void *)status, (void *)0); ++} ++#endif ++ ++ + /* Refresh conntrack for this many jiffies and do accounting */ + static inline void nf_ct_refresh_acct(struct nf_conn *ct, + enum ip_conntrack_info ctinfo, +@@ -261,6 +385,20 @@ extern void nf_conntrack_tcp_update(cons + /* Fake conntrack entry for untracked connections */ + extern struct nf_conn nf_conntrack_untracked; + ++#if defined(CONFIG_RTL_BATTLENET_ALG) ++#define BATTLENET_PORT 6112 ++#define RTL_DEV_NAME_NUM(name,num) name#num ++#define RTL_PS_PPP_NAME "ppp" ++#define RTL_PS_PPP0_DEV_NAME RTL_DEV_NAME_NUM(RTL_PS_PPP_NAME,0) ++extern unsigned int wan_ip; ++extern unsigned int wan_mask; ++extern struct net_device *rtl865x_getBattleNetWanDev(void ); ++extern int rtl865x_getBattleNetDevIpAndNetmask(struct net_device * dev, unsigned int *ipAddr, unsigned int *netMask ); ++extern struct nf_conn *rtl_find_ct_by_tuple_src(struct nf_conntrack_tuple *tuple, int *flag); ++extern struct nf_conn *rtl_find_ct_by_tuple_dst(struct nf_conntrack_tuple *tuple, int *flag); ++ ++#endif ++ + /* Iterate over all conntracks: if iter returns true, it's deleted. */ + extern void + nf_ct_iterate_cleanup(struct net *net, int (*iter)(struct nf_conn *i, void *data), void *data); +@@ -282,10 +420,12 @@ static inline int nf_ct_is_dying(struct + return test_bit(IPS_DYING_BIT, &ct->status); + } + ++#if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE) + static inline int nf_ct_is_untracked(const struct sk_buff *skb) + { + return (skb->nfct == &nf_conntrack_untracked.ct_general); + } ++#endif + + extern int nf_conntrack_set_hashsize(const char *val, struct kernel_param *kp); + extern unsigned int nf_conntrack_htable_size; +@@ -303,5 +443,40 @@ do { \ + #define MODULE_ALIAS_NFCT_HELPER(helper) \ + MODULE_ALIAS("nfct-helper-" helper) + ++ ++#define RTL_NF_ALG_CTL 1 ++ ++#ifdef RTL_NF_ALG_CTL ++extern int alg_enable(int type); ++ ++enum alg_type ++{ ++ alg_type_ftp, ++ alg_type_tftp, ++ alg_type_rtsp, ++ alg_type_pptp, ++ alg_type_l2tp, ++ alg_type_ipsec, ++ alg_type_sip, ++ alg_type_h323, ++ alg_type_end ++}; ++ ++struct alg_entry ++{ ++ char *name; ++ int enable; ++}; ++ ++#define ALG_CTL_DEF(type, val) [alg_type_##type] = {#type, val} ++ ++#define ALG_CHECK_ONOFF(type) \ ++if (!alg_enable(type))\ ++{\ ++ return NF_DROP;\ ++} ++#endif ++ ++ + #endif /* __KERNEL__ */ + #endif /* _NF_CONNTRACK_H */ +--- linux-2.6.30.9/include/net/netfilter/nf_conntrack_tuple.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/net/netfilter/nf_conntrack_tuple.h 2013-05-02 01:47:58.796226648 +0300 +@@ -152,8 +152,7 @@ struct nf_conntrack_tuple_hash { + struct nf_conntrack_tuple tuple; + }; + +-#endif /* __KERNEL__ */ +- ++#ifdef CONFIG_NETFILTER + static inline bool __nf_ct_tuple_src_equal(const struct nf_conntrack_tuple *t1, + const struct nf_conntrack_tuple *t2) + { +@@ -216,5 +215,6 @@ nf_ct_tuple_mask_cmp(const struct nf_con + return nf_ct_tuple_src_mask_cmp(t, tuple, mask) && + __nf_ct_tuple_dst_equal(t, tuple); + } +- ++#endif ++#endif /* __KERNEL__ */ + #endif /* _NF_CONNTRACK_TUPLE_H */ +--- linux-2.6.30.9/include/net/netfilter/nf_nat.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/net/netfilter/nf_nat.h 2013-05-02 01:47:58.796226648 +0300 +@@ -76,6 +76,11 @@ struct nf_conn_nat + defined(CONFIG_IP_NF_TARGET_MASQUERADE_MODULE) + int masq_index; + #endif ++ ++#if defined(CONFIG_RTL_HARDWARE_NAT) ++/*2007-12-19*/ ++ int hw_acc; /* 1: hardware acceleration, 0: software only */ ++#endif + }; + + /* Set up the info structure to map into this range. */ +--- linux-2.6.30.9/include/net/pkt_cls.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/net/pkt_cls.h 2013-05-02 01:47:58.800226647 +0300 +@@ -362,4 +362,8 @@ tcf_match_indev(struct sk_buff *skb, cha + } + #endif /* CONFIG_NET_CLS_IND */ + ++#if defined(CONFIG_RTL_HW_QOS_SUPPORT) ++int tc_getHandleByKey(__u32 key, __u32 *handle, struct net_device *d, struct net_device **m); ++#endif /* CONFIG_RTL_HW_QOS_SUPPORT */ ++ + #endif +--- linux-2.6.30.9/include/net/sch_generic.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/net/sch_generic.h 2013-05-02 01:47:58.806226647 +0300 +@@ -103,6 +103,11 @@ struct Qdisc_class_ops + struct sk_buff *skb, struct tcmsg*); + int (*dump_stats)(struct Qdisc *, unsigned long, + struct gnet_dump *); ++#if defined(CONFIG_RTL_HW_QOS_SUPPORT) ++ /* used for hw qos */ ++ int (*syncHwQueue)(struct net_device *); ++ int (*getHandleByKey)(__u32, __u32 *, struct Qdisc *); ++#endif + }; + + struct Qdisc_ops +@@ -156,7 +161,10 @@ struct tcf_proto_ops + /* rtnetlink specific */ + int (*dump)(struct tcf_proto*, unsigned long, + struct sk_buff *skb, struct tcmsg*); +- ++#if defined(CONFIG_RTL_HW_QOS_SUPPORT) ++ int (*classifyMark)(__u32, struct tcf_proto*, ++ struct tcf_result *); ++#endif + struct module *owner; + }; + +@@ -556,4 +564,8 @@ static inline struct sk_buff *skb_act_cl + } + #endif + ++#if defined(CONFIG_RTL_HW_QOS_SUPPORT) ++int tc_classifyMark(__u32 mark, struct tcf_proto *tp, struct tcf_result *res); ++#endif ++ + #endif +--- linux-2.6.30.9/include/net/slhc_vj.h 2009-10-05 18:38:08.000000000 +0300 ++++ linux-2.6.30.9-rsdk/include/net/slhc_vj.h 2013-05-02 01:47:58.809226647 +0300 +@@ -117,7 +117,8 @@ + */ + + typedef __u8 byte_t; +-typedef __u32 int32; ++//typedef __u32 int32; ++#define int32 __u32 + + /* + * "state" data for each active tcp conversation on the wire. This is |