summaryrefslogtreecommitdiff
path: root/target/lemote
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2010-08-05 22:49:12 +0200
committerWaldemar Brodkorb <wbx@openadk.org>2010-08-05 22:49:12 +0200
commita2e96ddb9519a2f40857f11501b88e465d25082d (patch)
tree10defcae7e5d0452ca35d7d43e8fac59f5038064 /target/lemote
parentdd48d0019b7f5442cef387b5754a276b33f8e52f (diff)
parent91024313d470314ecd49ecc0a9cdd80573b24139 (diff)
Merge branch 'master' of git+ssh://openadk.org/git/openadk
Diffstat (limited to 'target/lemote')
-rw-r--r--target/lemote/kernel.config120
-rw-r--r--target/lemote/patches/lemote.patch9282
-rw-r--r--target/lemote/target.mk4
3 files changed, 1456 insertions, 7950 deletions
diff --git a/target/lemote/kernel.config b/target/lemote/kernel.config
index 21df7a57a..6b536c015 100644
--- a/target/lemote/kernel.config
+++ b/target/lemote/kernel.config
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.34
-# Thu Jun 3 15:37:40 2010
+# Linux kernel version: 2.6.35
+# Thu Aug 5 22:28:58 2010
#
CONFIG_MIPS=y
@@ -55,6 +55,7 @@ CONFIG_CS5536=y
CONFIG_CS5536_MFGPT=y
CONFIG_LOONGSON_SUSPEND=y
CONFIG_LOONGSON_UART_BASE=y
+CONFIG_LOONGSON_MC146818=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
@@ -188,6 +189,7 @@ CONFIG_CONSTRUCTORS=y
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_CROSS_COMPILE=""
CONFIG_LOCALVERSION=""
# CONFIG_LOCALVERSION_AUTO is not set
CONFIG_HAVE_KERNEL_GZIP=y
@@ -354,9 +356,9 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_PM=y
# CONFIG_PM_DEBUG is not set
CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND_NVS=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
-CONFIG_HIBERNATION_NVS=y
CONFIG_HIBERNATION=y
CONFIG_PM_STD_PARTITION="/dev/mapper/swap"
# CONFIG_PM_RUNTIME is not set
@@ -426,6 +428,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_RDS is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
+# CONFIG_L2TP is not set
# CONFIG_BRIDGE is not set
# CONFIG_NET_DSA is not set
# CONFIG_VLAN_8021Q is not set
@@ -458,9 +461,14 @@ CONFIG_WIRELESS=y
#
# CFG80211 needs to be enabled for MAC80211
#
+
+#
+# Some wireless drivers require a rate control algorithm
+#
# CONFIG_WIMAX is not set
# CONFIG_RFKILL is not set
# CONFIG_NET_9P is not set
+# CONFIG_CAIF is not set
#
# Device Drivers
@@ -550,70 +558,96 @@ CONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not set
# CONFIG_ATA_VERBOSE_ERROR is not set
# CONFIG_SATA_PMP is not set
+
+#
+# Controllers with non-SFF native interface
+#
# CONFIG_SATA_AHCI is not set
+# CONFIG_SATA_AHCI_PLATFORM is not set
+# CONFIG_SATA_INIC162X is not set
# CONFIG_SATA_SIL24 is not set
CONFIG_ATA_SFF=y
-# CONFIG_SATA_SVW is not set
+
+#
+# SFF controllers with custom DMA interface
+#
+# CONFIG_PDC_ADMA is not set
+# CONFIG_SATA_QSTOR is not set
+# CONFIG_SATA_SX4 is not set
+CONFIG_ATA_BMDMA=y
+
+#
+# SATA SFF controllers with BMDMA
+#
# CONFIG_ATA_PIIX is not set
# CONFIG_SATA_MV is not set
# CONFIG_SATA_NV is not set
-# CONFIG_PDC_ADMA is not set
-# CONFIG_SATA_QSTOR is not set
# CONFIG_SATA_PROMISE is not set
-# CONFIG_SATA_SX4 is not set
# CONFIG_SATA_SIL is not set
# CONFIG_SATA_SIS is not set
+# CONFIG_SATA_SVW is not set
# CONFIG_SATA_ULI is not set
# CONFIG_SATA_VIA is not set
# CONFIG_SATA_VITESSE is not set
-# CONFIG_SATA_INIC162X is not set
+
+#
+# PATA SFF controllers with BMDMA
+#
# CONFIG_PATA_ALI is not set
CONFIG_PATA_AMD=y
# CONFIG_PATA_ARTOP is not set
-# CONFIG_PATA_ATP867X is not set
# CONFIG_PATA_ATIIXP is not set
-# CONFIG_PATA_CMD640_PCI is not set
+# CONFIG_PATA_ATP867X is not set
# CONFIG_PATA_CMD64X is not set
# CONFIG_PATA_CS5520 is not set
# CONFIG_PATA_CS5530 is not set
# CONFIG_PATA_CYPRESS is not set
# CONFIG_PATA_EFAR is not set
-# CONFIG_ATA_GENERIC is not set
# CONFIG_PATA_HPT366 is not set
# CONFIG_PATA_HPT37X is not set
# CONFIG_PATA_HPT3X2N is not set
# CONFIG_PATA_HPT3X3 is not set
-# CONFIG_PATA_ISAPNP is not set
-# CONFIG_PATA_IT821X is not set
# CONFIG_PATA_IT8213 is not set
+# CONFIG_PATA_IT821X is not set
# CONFIG_PATA_JMICRON is not set
-# CONFIG_PATA_LEGACY is not set
-# CONFIG_PATA_TRIFLEX is not set
# CONFIG_PATA_MARVELL is not set
-# CONFIG_PATA_MPIIX is not set
-# CONFIG_PATA_OLDPIIX is not set
# CONFIG_PATA_NETCELL is not set
# CONFIG_PATA_NINJA32 is not set
-# CONFIG_PATA_NS87410 is not set
# CONFIG_PATA_NS87415 is not set
-# CONFIG_PATA_OPTI is not set
+# CONFIG_PATA_OLDPIIX is not set
# CONFIG_PATA_OPTIDMA is not set
# CONFIG_PATA_PDC2027X is not set
# CONFIG_PATA_PDC_OLD is not set
-# CONFIG_PATA_QDI is not set
# CONFIG_PATA_RADISYS is not set
# CONFIG_PATA_RDC is not set
-# CONFIG_PATA_RZ1000 is not set
# CONFIG_PATA_SC1200 is not set
+# CONFIG_PATA_SCH is not set
# CONFIG_PATA_SERVERWORKS is not set
# CONFIG_PATA_SIL680 is not set
# CONFIG_PATA_SIS is not set
# CONFIG_PATA_TOSHIBA is not set
+# CONFIG_PATA_TRIFLEX is not set
# CONFIG_PATA_VIA is not set
# CONFIG_PATA_WINBOND is not set
-# CONFIG_PATA_WINBOND_VLB is not set
+
+#
+# PIO-only SFF controllers
+#
+# CONFIG_PATA_CMD640_PCI is not set
+# CONFIG_PATA_ISAPNP is not set
+# CONFIG_PATA_MPIIX is not set
+# CONFIG_PATA_NS87410 is not set
+# CONFIG_PATA_OPTI is not set
# CONFIG_PATA_PLATFORM is not set
-# CONFIG_PATA_SCH is not set
+# CONFIG_PATA_QDI is not set
+# CONFIG_PATA_RZ1000 is not set
+# CONFIG_PATA_WINBOND_VLB is not set
+
+#
+# Generic fallback / legacy drivers
+#
+# CONFIG_ATA_GENERIC is not set
+# CONFIG_PATA_LEGACY is not set
# CONFIG_MD is not set
# CONFIG_FUSION is not set
@@ -810,6 +844,7 @@ CONFIG_HW_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set
# CONFIG_DEVKMEM is not set
# CONFIG_SERIAL_NONSTANDARD is not set
+# CONFIG_N_GSM is not set
# CONFIG_NOZOMI is not set
#
@@ -829,6 +864,8 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=2
CONFIG_SERIAL_CORE=y
# CONFIG_SERIAL_JSM is not set
# CONFIG_SERIAL_TIMBERDALE is not set
+# CONFIG_SERIAL_ALTERA_JTAGUART is not set
+# CONFIG_SERIAL_ALTERA_UART is not set
CONFIG_UNIX98_PTYS=y
# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
# CONFIG_LEGACY_PTYS is not set
@@ -840,6 +877,7 @@ CONFIG_UNIX98_PTYS=y
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
CONFIG_DEVPORT=y
+# CONFIG_RAMOOPS is not set
# CONFIG_I2C is not set
# CONFIG_SPI is not set
@@ -867,6 +905,7 @@ CONFIG_GPIOLIB=y
# CONFIG_GPIO_CS5535 is not set
# CONFIG_GPIO_BT8XX is not set
# CONFIG_GPIO_LANGWELL is not set
+# CONFIG_GPIO_RDC321X is not set
#
# SPI GPIO expanders:
@@ -875,10 +914,15 @@ CONFIG_GPIOLIB=y
#
# AC97 GPIO expanders:
#
+
+#
+# MODULbus GPIO expanders:
+#
# CONFIG_W1 is not set
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set
+# CONFIG_TEST_POWER is not set
# CONFIG_BATTERY_DS2760 is not set
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
@@ -910,16 +954,16 @@ CONFIG_SSB_POSSIBLE=y
# Sonics Silicon Backplane
#
# CONFIG_SSB is not set
-
-#
-# Multifunction device drivers
-#
+CONFIG_MFD_SUPPORT=y
# CONFIG_MFD_CORE is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_HTC_PASIC3 is not set
# CONFIG_MFD_TMIO is not set
+# CONFIG_ABX500_CORE is not set
# CONFIG_MFD_TIMBERDALE is not set
# CONFIG_LPC_SCH is not set
+# CONFIG_MFD_RDC321X is not set
+# CONFIG_MFD_JANZ_CMODIO is not set
# CONFIG_REGULATOR is not set
# CONFIG_MEDIA_SUPPORT is not set
@@ -1198,10 +1242,6 @@ CONFIG_RTC_DRV_CMOS=y
# CONFIG_DMADEVICES is not set
# CONFIG_AUXDISPLAY is not set
# CONFIG_UIO is not set
-
-#
-# TI VLYNQ
-#
CONFIG_STAGING=y
# CONFIG_STAGING_EXCLUDE_BUILD is not set
# CONFIG_USB_IP_COMMON is not set
@@ -1214,15 +1254,6 @@ CONFIG_STAGING=y
# CONFIG_RTL8192U is not set
# CONFIG_RTL8192E is not set
# CONFIG_TRANZPORT is not set
-
-#
-# Qualcomm MSM Camera And Video
-#
-
-#
-# Camera Sensor Selection
-#
-# CONFIG_INPUT_GPIO is not set
# CONFIG_POHMELFS is not set
# CONFIG_IDE_PHISON is not set
# CONFIG_VT6655 is not set
@@ -1237,11 +1268,14 @@ CONFIG_STAGING=y
# CONFIG_IIO is not set
# CONFIG_RAMZSWAP is not set
# CONFIG_BATMAN_ADV is not set
-# CONFIG_STRIP is not set
-# CONFIG_WAVELAN is not set
CONFIG_FB_SM7XX=y
# CONFIG_DT3155 is not set
# CONFIG_CRYSTALHD is not set
+
+#
+# Texas Instruments shared transport line discipline
+#
+# CONFIG_FB_XGI is not set
CONFIG_MIPS_PLATFORM_DEVICES=y
CONFIG_LEMOTE_YEELOONG2F=y
# CONFIG_LEMOTE_LYNLOONG2F is not set
@@ -1260,7 +1294,6 @@ CONFIG_LEMOTE_YEELOONG2F=y
# CONFIG_OCFS2_FS is not set
# CONFIG_BTRFS_FS is not set
# CONFIG_NILFS2_FS is not set
-# CONFIG_AUFS_FS is not set
CONFIG_FILE_LOCKING=y
# CONFIG_FSNOTIFY is not set
# CONFIG_DNOTIFY is not set
@@ -1383,6 +1416,7 @@ CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_TRACING_SUPPORT=y
# CONFIG_FTRACE is not set
+# CONFIG_ATOMIC64_SELFTEST is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
CONFIG_EARLY_PRINTK=y
diff --git a/target/lemote/patches/lemote.patch b/target/lemote/patches/lemote.patch
index 31af80bb6..7785becb0 100644
--- a/target/lemote/patches/lemote.patch
+++ b/target/lemote/patches/lemote.patch
@@ -1,2630 +1,6 @@
-diff -Nur linux-2.6.34.orig/arch/mips/boot/compressed/ld.script linux-loongson/arch/mips/boot/compressed/ld.script
---- linux-2.6.34.orig/arch/mips/boot/compressed/ld.script 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/boot/compressed/ld.script 2010-05-27 18:12:28.592215840 +0200
-@@ -2,7 +2,7 @@
- * ld.script for compressed kernel support of MIPS
- *
- * Copyright (C) 2009 Lemote Inc.
-- * Author: Wu Zhangjin <wuzj@lemote.com>
-+ * Author: Wu Zhangjin <wuzhangjin@gmail.com>
- */
-
- OUTPUT_ARCH(mips)
-diff -Nur linux-2.6.34.orig/arch/mips/configs/fuloong2e_defconfig linux-loongson/arch/mips/configs/fuloong2e_defconfig
---- linux-2.6.34.orig/arch/mips/configs/fuloong2e_defconfig 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/configs/fuloong2e_defconfig 2010-05-27 18:12:28.602215969 +0200
-@@ -1,7 +1,7 @@
- #
- # Automatically generated make config: don't edit
--# Linux kernel version: 2.6.32-rc4
--# Fri Oct 16 13:18:01 2009
-+# Linux kernel version: 2.6.34-rc5
-+# Wed Apr 28 01:14:53 2010
- #
- CONFIG_MIPS=y
-
-@@ -27,6 +27,7 @@
- # CONFIG_PNX8550_STB810 is not set
- # CONFIG_PMC_MSP is not set
- # CONFIG_PMC_YOSEMITE is not set
-+# CONFIG_POWERTV is not set
- # CONFIG_SGI_IP22 is not set
- # CONFIG_SGI_IP27 is not set
- # CONFIG_SGI_IP28 is not set
-@@ -49,6 +50,8 @@
- # CONFIG_ALCHEMY_GPIO_INDIRECT is not set
- CONFIG_ARCH_SPARSEMEM_ENABLE=y
- CONFIG_LEMOTE_FULOONG2E=y
-+# CONFIG_LEMOTE_MACH2F is not set
-+CONFIG_LOONGSON_UART_BASE=y
- CONFIG_RWSEM_GENERIC_SPINLOCK=y
- # CONFIG_ARCH_HAS_ILOG2_U32 is not set
- # CONFIG_ARCH_HAS_ILOG2_U64 is not set
-@@ -66,8 +69,7 @@
- CONFIG_CSRC_R4K_LIB=y
- CONFIG_CSRC_R4K=y
- CONFIG_DMA_NONCOHERENT=y
--CONFIG_DMA_NEED_PCI_MAP_STATE=y
--CONFIG_EARLY_PRINTK=y
-+CONFIG_NEED_DMA_MAP_STATE=y
- CONFIG_SYS_HAS_EARLY_PRINTK=y
- CONFIG_I8259=y
- # CONFIG_NO_IOPORT is not set
-@@ -84,6 +86,7 @@
- # CPU selection
- #
- CONFIG_CPU_LOONGSON2E=y
-+# CONFIG_CPU_LOONGSON2F is not set
- # CONFIG_CPU_MIPS32_R1 is not set
- # CONFIG_CPU_MIPS32_R2 is not set
- # CONFIG_CPU_MIPS64_R1 is not set
-@@ -106,7 +109,6 @@
- # CONFIG_CPU_SB1 is not set
- # CONFIG_CPU_CAVIUM_OCTEON is not set
- CONFIG_SYS_SUPPORTS_ZBOOT=y
--CONFIG_SYS_SUPPORTS_ZBOOT_UART16550=y
- CONFIG_CPU_LOONGSON2=y
- CONFIG_SYS_HAS_CPU_LOONGSON2E=y
- CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
-@@ -128,13 +130,13 @@
- CONFIG_MIPS_MT_DISABLED=y
- # CONFIG_MIPS_MT_SMP is not set
- # CONFIG_MIPS_MT_SMTC is not set
-+# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
- CONFIG_CPU_HAS_WB=y
- CONFIG_CPU_HAS_SYNC=y
- CONFIG_GENERIC_HARDIRQS=y
- CONFIG_GENERIC_IRQ_PROBE=y
- CONFIG_CPU_SUPPORTS_HIGHMEM=y
- CONFIG_SYS_SUPPORTS_HIGHMEM=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
- CONFIG_ARCH_POPULATES_NODE_MAP=y
- CONFIG_SELECT_MEMORY_MODEL=y
- # CONFIG_FLATMEM_MANUAL is not set
-@@ -143,23 +145,18 @@
- CONFIG_SPARSEMEM=y
- CONFIG_HAVE_MEMORY_PRESENT=y
- CONFIG_SPARSEMEM_STATIC=y
--
--#
--# Memory hotplug is currently incompatible with Software Suspend
--#
- CONFIG_PAGEFLAGS_EXTENDED=y
- CONFIG_SPLIT_PTLOCK_CPUS=4
- CONFIG_PHYS_ADDR_T_64BIT=y
- CONFIG_ZONE_DMA_FLAG=0
- CONFIG_VIRT_TO_BUS=y
--CONFIG_HAVE_MLOCK=y
--CONFIG_HAVE_MLOCKED_PAGE_BIT=y
- # CONFIG_KSM is not set
- CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
- CONFIG_TICK_ONESHOT=y
- CONFIG_NO_HZ=y
- CONFIG_HIGH_RES_TIMERS=y
- CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+CONFIG_CPU_SUPPORTS_HR_SCHED_CLOCK=y
- # CONFIG_HZ_48 is not set
- # CONFIG_HZ_100 is not set
- # CONFIG_HZ_128 is not set
-@@ -190,9 +187,11 @@
- CONFIG_HAVE_KERNEL_GZIP=y
- CONFIG_HAVE_KERNEL_BZIP2=y
- CONFIG_HAVE_KERNEL_LZMA=y
-+CONFIG_HAVE_KERNEL_LZO=y
- CONFIG_KERNEL_GZIP=y
- # CONFIG_KERNEL_BZIP2 is not set
- # CONFIG_KERNEL_LZMA is not set
-+# CONFIG_KERNEL_LZO is not set
- CONFIG_SWAP=y
- CONFIG_SYSVIPC=y
- CONFIG_SYSVIPC_SYSCTL=y
-@@ -208,6 +207,7 @@
- #
- CONFIG_TREE_RCU=y
- # CONFIG_TREE_PREEMPT_RCU is not set
-+# CONFIG_TINY_RCU is not set
- # CONFIG_RCU_TRACE is not set
- CONFIG_RCU_FANOUT=64
- # CONFIG_RCU_FANOUT_EXACT is not set
-@@ -215,10 +215,8 @@
- CONFIG_IKCONFIG=y
- CONFIG_IKCONFIG_PROC=y
- CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_GROUP_SCHED is not set
- # CONFIG_CGROUPS is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_SYSFS_DEPRECATED_V2 is not set
- # CONFIG_RELAY is not set
- CONFIG_NAMESPACES=y
- # CONFIG_UTS_NS is not set
-@@ -258,7 +256,6 @@
- # CONFIG_SLUB is not set
- # CONFIG_SLOB is not set
- CONFIG_PROFILING=y
--CONFIG_TRACEPOINTS=y
- CONFIG_OPROFILE=m
- CONFIG_HAVE_OPROFILE=y
- CONFIG_HAVE_SYSCALL_WRAPPERS=y
-@@ -266,7 +263,6 @@
- #
- # GCOV-based kernel profiling
- #
--# CONFIG_GCOV_KERNEL is not set
- CONFIG_SLOW_WORK=y
- CONFIG_HAVE_GENERIC_DMA_COHERENT=y
- CONFIG_SLABINFO=y
-@@ -287,14 +283,41 @@
- # IO Schedulers
- #
- CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
- CONFIG_IOSCHED_DEADLINE=y
- CONFIG_IOSCHED_CFQ=y
--# CONFIG_DEFAULT_AS is not set
- # CONFIG_DEFAULT_DEADLINE is not set
- CONFIG_DEFAULT_CFQ=y
- # CONFIG_DEFAULT_NOOP is not set
- CONFIG_DEFAULT_IOSCHED="cfq"
-+# CONFIG_INLINE_SPIN_TRYLOCK is not set
-+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-+# CONFIG_INLINE_SPIN_LOCK is not set
-+# CONFIG_INLINE_SPIN_LOCK_BH is not set
-+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-+CONFIG_INLINE_SPIN_UNLOCK=y
-+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-+CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
-+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-+# CONFIG_INLINE_READ_TRYLOCK is not set
-+# CONFIG_INLINE_READ_LOCK is not set
-+# CONFIG_INLINE_READ_LOCK_BH is not set
-+# CONFIG_INLINE_READ_LOCK_IRQ is not set
-+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-+CONFIG_INLINE_READ_UNLOCK=y
-+# CONFIG_INLINE_READ_UNLOCK_BH is not set
-+CONFIG_INLINE_READ_UNLOCK_IRQ=y
-+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-+# CONFIG_INLINE_WRITE_TRYLOCK is not set
-+# CONFIG_INLINE_WRITE_LOCK is not set
-+# CONFIG_INLINE_WRITE_LOCK_BH is not set
-+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-+CONFIG_INLINE_WRITE_UNLOCK=y
-+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-+CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
-+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
- CONFIG_FREEZER=y
-
- #
-@@ -304,7 +327,6 @@
- CONFIG_PCI=y
- CONFIG_PCI_DOMAINS=y
- # CONFIG_ARCH_SUPPORTS_MSI is not set
--CONFIG_PCI_LEGACY=y
- # CONFIG_PCI_STUB is not set
- # CONFIG_PCI_IOV is not set
- CONFIG_ISA=y
-@@ -339,14 +361,13 @@
- CONFIG_HIBERNATION=y
- CONFIG_PM_STD_PARTITION="/dev/hda3"
- # CONFIG_PM_RUNTIME is not set
-+CONFIG_PM_OPS=y
- CONFIG_NET=y
--CONFIG_COMPAT_NETLINK_MESSAGES=y
-
- #
- # Networking options
- #
- CONFIG_PACKET=y
--CONFIG_PACKET_MMAP=y
- CONFIG_UNIX=y
- CONFIG_XFRM=y
- # CONFIG_XFRM_USER is not set
-@@ -483,7 +504,6 @@
- # Network testing
- #
- # CONFIG_NET_PKTGEN is not set
--# CONFIG_NET_DROP_MONITOR is not set
- # CONFIG_HAMRADIO is not set
- # CONFIG_CAN is not set
- # CONFIG_IRDA is not set
-@@ -491,10 +511,6 @@
- # CONFIG_AF_RXRPC is not set
- CONFIG_WIRELESS=y
- # CONFIG_CFG80211 is not set
--CONFIG_CFG80211_DEFAULT_PS_VALUE=0
--CONFIG_WIRELESS_OLD_REGULATORY=y
--CONFIG_WIRELESS_EXT=y
--CONFIG_WIRELESS_EXT_SYSFS=y
- # CONFIG_LIB80211 is not set
-
- #
-@@ -617,6 +633,10 @@
- # CONFIG_BLK_DEV_COW_COMMON is not set
- CONFIG_BLK_DEV_LOOP=y
- CONFIG_BLK_DEV_CRYPTOLOOP=m
-+
-+#
-+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
-+#
- # CONFIG_BLK_DEV_NBD is not set
- # CONFIG_BLK_DEV_SX8 is not set
- # CONFIG_BLK_DEV_UB is not set
-@@ -707,6 +727,7 @@
- #
- # SCSI device support
- #
-+CONFIG_SCSI_MOD=y
- # CONFIG_RAID_ATTRS is not set
- CONFIG_SCSI=y
- CONFIG_SCSI_DMA=y
-@@ -755,7 +776,7 @@
- #
-
- #
--# See the help texts for more information.
-+# The newer stack is recommended.
- #
- # CONFIG_FIREWIRE is not set
- # CONFIG_IEEE1394 is not set
-@@ -764,6 +785,7 @@
- # CONFIG_DUMMY is not set
- # CONFIG_BONDING is not set
- CONFIG_MACVLAN=m
-+# CONFIG_MACVTAP is not set
- # CONFIG_EQUALIZER is not set
- # CONFIG_TUN is not set
- CONFIG_VETH=m
-@@ -798,6 +820,7 @@
- # CONFIG_SMC91X is not set
- # CONFIG_DM9000 is not set
- # CONFIG_ETHOC is not set
-+# CONFIG_SMSC911X is not set
- # CONFIG_NET_VENDOR_RACAL is not set
- # CONFIG_DNET is not set
- # CONFIG_NET_TULIP is not set
-@@ -817,6 +840,7 @@
- # CONFIG_AMD8111_ETH is not set
- # CONFIG_ADAPTEC_STARFIRE is not set
- # CONFIG_AC3200 is not set
-+# CONFIG_KSZ884X_PCI is not set
- # CONFIG_APRICOT is not set
- # CONFIG_B44 is not set
- # CONFIG_FORCEDETH is not set
-@@ -871,6 +895,8 @@
- # CONFIG_CHELSIO_T1 is not set
- CONFIG_CHELSIO_T3_DEPENDS=y
- # CONFIG_CHELSIO_T3 is not set
-+CONFIG_CHELSIO_T4_DEPENDS=y
-+# CONFIG_CHELSIO_T4 is not set
- # CONFIG_ENIC is not set
- # CONFIG_IXGBE is not set
- # CONFIG_IXGB is not set
-@@ -883,13 +909,16 @@
- # CONFIG_MLX4_CORE is not set
- # CONFIG_TEHUTI is not set
- # CONFIG_BNX2X is not set
-+# CONFIG_QLCNIC is not set
- # CONFIG_QLGE is not set
- # CONFIG_SFC is not set
- # CONFIG_BE2NET is not set
- # CONFIG_TR is not set
- CONFIG_WLAN=y
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
-+# CONFIG_ATMEL is not set
-+# CONFIG_PRISM54 is not set
-+# CONFIG_USB_ZD1201 is not set
-+# CONFIG_HOSTAP is not set
-
- #
- # Enable WiMAX (Networking options) to see the WiMAX drivers
-@@ -904,6 +933,7 @@
- # CONFIG_USB_RTL8150 is not set
- # CONFIG_USB_USBNET is not set
- # CONFIG_USB_CDC_PHONET is not set
-+# CONFIG_USB_IPHETH is not set
- # CONFIG_WAN is not set
- # CONFIG_FDDI is not set
- # CONFIG_HIPPI is not set
-@@ -926,6 +956,7 @@
- # CONFIG_NETCONSOLE is not set
- # CONFIG_NETPOLL is not set
- # CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_VMXNET3 is not set
- # CONFIG_ISDN is not set
- # CONFIG_PHONE is not set
-
-@@ -935,6 +966,7 @@
- CONFIG_INPUT=y
- CONFIG_INPUT_FF_MEMLESS=y
- # CONFIG_INPUT_POLLDEV is not set
-+# CONFIG_INPUT_SPARSEKMAP is not set
-
- #
- # Userland interfaces
-@@ -992,6 +1024,7 @@
- # CONFIG_SERIO_PCIPS2 is not set
- CONFIG_SERIO_LIBPS2=y
- # CONFIG_SERIO_RAW is not set
-+# CONFIG_SERIO_ALTERA_PS2 is not set
- # CONFIG_GAMEPORT is not set
-
- #
-@@ -1022,6 +1055,7 @@
- CONFIG_SERIAL_CORE=y
- CONFIG_SERIAL_CORE_CONSOLE=y
- # CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_TIMBERDALE is not set
- CONFIG_UNIX98_PTYS=y
- # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
- CONFIG_LEGACY_PTYS=y
-@@ -1069,6 +1103,7 @@
- #
- # CONFIG_I2C_OCORES is not set
- # CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_XILINX is not set
-
- #
- # External I2C/SMBus adapter drivers
-@@ -1078,27 +1113,15 @@
- # CONFIG_I2C_TINY_USB is not set
-
- #
--# Graphics adapter I2C/DDC channel drivers
--#
--# CONFIG_I2C_VOODOO3 is not set
--
--#
- # Other I2C/SMBus bus drivers
- #
- # CONFIG_I2C_ELEKTOR is not set
- # CONFIG_I2C_PCA_ISA is not set
- # CONFIG_I2C_PCA_PLATFORM is not set
- # CONFIG_I2C_STUB is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_TSL2550 is not set
- # CONFIG_I2C_DEBUG_CORE is not set
- # CONFIG_I2C_DEBUG_ALGO is not set
- # CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
- # CONFIG_SPI is not set
-
- #
-@@ -1125,10 +1148,9 @@
- # CONFIG_HTC_PASIC3 is not set
- # CONFIG_MFD_TMIO is not set
- # CONFIG_MFD_WM8400 is not set
--# CONFIG_MFD_WM831X is not set
--# CONFIG_MFD_WM8350_I2C is not set
-+# CONFIG_MFD_WM8994 is not set
- # CONFIG_MFD_PCF50633 is not set
--# CONFIG_AB3100_CORE is not set
-+# CONFIG_LPC_SCH is not set
- # CONFIG_REGULATOR is not set
- # CONFIG_MEDIA_SUPPORT is not set
-
-@@ -1136,6 +1158,7 @@
- # Graphics support
- #
- CONFIG_VGA_ARB=y
-+CONFIG_VGA_ARB_MAX_GPUS=16
- # CONFIG_DRM is not set
- # CONFIG_VGASTATE is not set
- CONFIG_VIDEO_OUTPUT_CONTROL=m
-@@ -1271,6 +1294,7 @@
- # CONFIG_SND_OXYGEN is not set
- # CONFIG_SND_CS4281 is not set
- # CONFIG_SND_CS46XX is not set
-+# CONFIG_SND_CS5535AUDIO is not set
- # CONFIG_SND_CTXFI is not set
- # CONFIG_SND_DARLA20 is not set
- # CONFIG_SND_GINA20 is not set
-@@ -1321,6 +1345,7 @@
- CONFIG_SND_MIPS=y
- CONFIG_SND_USB=y
- # CONFIG_SND_USB_AUDIO is not set
-+# CONFIG_SND_USB_UA101 is not set
- # CONFIG_SND_USB_CAIAQ is not set
- # CONFIG_SND_SOC is not set
- # CONFIG_SOUND_PRIME is not set
-@@ -1358,7 +1383,6 @@
- CONFIG_USB_DEVICEFS=y
- # CONFIG_USB_DEVICE_CLASS is not set
- # CONFIG_USB_DYNAMIC_MINORS is not set
--# CONFIG_USB_SUSPEND is not set
- # CONFIG_USB_OTG is not set
- CONFIG_USB_OTG_WHITELIST=y
- # CONFIG_USB_OTG_BLACKLIST_HUB is not set
-@@ -1440,7 +1464,6 @@
- # CONFIG_USB_RIO500 is not set
- # CONFIG_USB_LEGOTOWER is not set
- # CONFIG_USB_LCD is not set
--# CONFIG_USB_BERRY_CHARGE is not set
- # CONFIG_USB_LED is not set
- # CONFIG_USB_CYPRESS_CY7C63 is not set
- # CONFIG_USB_CYTHERM is not set
-@@ -1453,7 +1476,6 @@
- # CONFIG_USB_IOWARRIOR is not set
- # CONFIG_USB_TEST is not set
- CONFIG_USB_ISIGHTFW=m
--CONFIG_USB_VST=m
- # CONFIG_USB_GADGET is not set
-
- #
-@@ -1473,15 +1495,16 @@
- CONFIG_UIO_CIF=m
- # CONFIG_UIO_PDRV is not set
- # CONFIG_UIO_PDRV_GENIRQ is not set
--# CONFIG_UIO_SMX is not set
- # CONFIG_UIO_AEC is not set
- # CONFIG_UIO_SERCOS3 is not set
- # CONFIG_UIO_PCI_GENERIC is not set
-+# CONFIG_UIO_NETX is not set
-
- #
- # TI VLYNQ
- #
- # CONFIG_STAGING is not set
-+CONFIG_MIPS_PLATFORM_DEVICES=y
-
- #
- # File systems
-@@ -1499,9 +1522,7 @@
- # CONFIG_EXT4_DEBUG is not set
- CONFIG_FS_XIP=y
- CONFIG_JBD=y
--# CONFIG_JBD_DEBUG is not set
- CONFIG_JBD2=m
--# CONFIG_JBD2_DEBUG is not set
- CONFIG_FS_MBCACHE=m
- CONFIG_REISERFS_FS=m
- # CONFIG_REISERFS_CHECK is not set
-@@ -1522,8 +1543,8 @@
- # CONFIG_QUOTA is not set
- CONFIG_AUTOFS_FS=y
- CONFIG_AUTOFS4_FS=y
--CONFIG_FUSE_FS=y
--# CONFIG_CUSE is not set
-+CONFIG_FUSE_FS=m
-+CONFIG_CUSE=m
-
- #
- # Caches
-@@ -1572,6 +1593,7 @@
- # CONFIG_BFS_FS is not set
- # CONFIG_EFS_FS is not set
- # CONFIG_JFFS2_FS is not set
-+# CONFIG_LOGFS is not set
- # CONFIG_CRAMFS is not set
- # CONFIG_SQUASHFS is not set
- # CONFIG_VXFS_FS is not set
-@@ -1605,6 +1627,7 @@
- CONFIG_SMB_FS=m
- CONFIG_SMB_NLS_DEFAULT=y
- CONFIG_SMB_NLS_REMOTE="cp936"
-+# CONFIG_CEPH_FS is not set
- CONFIG_CIFS=m
- CONFIG_CIFS_STATS=y
- CONFIG_CIFS_STATS2=y
-@@ -1692,24 +1715,24 @@
- # CONFIG_MAGIC_SYSRQ is not set
- # CONFIG_STRIP_ASM_SYMS is not set
- # CONFIG_UNUSED_SYMBOLS is not set
--CONFIG_DEBUG_FS=y
-+# CONFIG_DEBUG_FS is not set
- # CONFIG_HEADERS_CHECK is not set
- # CONFIG_DEBUG_KERNEL is not set
--CONFIG_STACKTRACE=y
- # CONFIG_DEBUG_MEMORY_INIT is not set
- # CONFIG_RCU_CPU_STALL_DETECTOR is not set
- CONFIG_SYSCTL_SYSCALL_CHECK=y
--CONFIG_NOP_TRACER=y
-+CONFIG_HAVE_FUNCTION_TRACER=y
-+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-+CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
-+CONFIG_HAVE_DYNAMIC_FTRACE=y
-+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
- CONFIG_RING_BUFFER=y
--CONFIG_EVENT_TRACING=y
--CONFIG_CONTEXT_SWITCH_TRACER=y
- CONFIG_RING_BUFFER_ALLOW_SWAP=y
--CONFIG_TRACING=y
- CONFIG_TRACING_SUPPORT=y
- # CONFIG_FTRACE is not set
--# CONFIG_DYNAMIC_DEBUG is not set
- # CONFIG_SAMPLES is not set
- CONFIG_HAVE_ARCH_KGDB=y
-+# CONFIG_EARLY_PRINTK is not set
- # CONFIG_CMDLINE_BOOL is not set
-
- #
-@@ -1718,7 +1741,11 @@
- # CONFIG_KEYS is not set
- # CONFIG_SECURITY is not set
- # CONFIG_SECURITYFS is not set
--CONFIG_SECURITY_FILE_CAPABILITIES=y
-+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
-+# CONFIG_DEFAULT_SECURITY_SMACK is not set
-+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
-+CONFIG_DEFAULT_SECURITY_DAC=y
-+CONFIG_DEFAULT_SECURITY=""
- CONFIG_CRYPTO=y
-
- #
-@@ -1819,7 +1846,7 @@
- #
- CONFIG_CRYPTO_ANSI_CPRNG=m
- # CONFIG_CRYPTO_HW is not set
--CONFIG_BINARY_PRINTF=y
-+# CONFIG_BINARY_PRINTF is not set
-
- #
- # Library routines
-diff -Nur linux-2.6.34.orig/arch/mips/configs/lemote2f_defconfig linux-loongson/arch/mips/configs/lemote2f_defconfig
---- linux-2.6.34.orig/arch/mips/configs/lemote2f_defconfig 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/configs/lemote2f_defconfig 2010-05-27 18:12:28.612213391 +0200
-@@ -1,7 +1,7 @@
- #
- # Automatically generated make config: don't edit
--# Linux kernel version: 2.6.33-rc2
--# Mon Jan 4 13:41:09 2010
-+# Linux kernel version: 2.6.34-rc3
-+# Sun Apr 11 04:31:19 2010
- #
- CONFIG_MIPS=y
-
-@@ -68,7 +68,7 @@
- CONFIG_SCHED_OMIT_FRAME_POINTER=y
- CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
- CONFIG_DMA_NONCOHERENT=y
--CONFIG_DMA_NEED_PCI_MAP_STATE=y
-+CONFIG_NEED_DMA_MAP_STATE=y
- CONFIG_SYS_HAS_EARLY_PRINTK=y
- CONFIG_I8259=y
- # CONFIG_NO_IOPORT is not set
-@@ -132,6 +132,7 @@
- CONFIG_MIPS_MT_DISABLED=y
- # CONFIG_MIPS_MT_SMP is not set
- # CONFIG_MIPS_MT_SMTC is not set
-+# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
- CONFIG_CPU_HAS_WB=y
- CONFIG_CPU_HAS_SYNC=y
- CONFIG_GENERIC_HARDIRQS=y
-@@ -188,9 +189,11 @@
- CONFIG_HAVE_KERNEL_GZIP=y
- CONFIG_HAVE_KERNEL_BZIP2=y
- CONFIG_HAVE_KERNEL_LZMA=y
-+CONFIG_HAVE_KERNEL_LZO=y
- CONFIG_KERNEL_GZIP=y
- # CONFIG_KERNEL_BZIP2 is not set
- # CONFIG_KERNEL_LZMA is not set
-+# CONFIG_KERNEL_LZO is not set
- CONFIG_SWAP=y
- CONFIG_SYSVIPC=y
- CONFIG_SYSVIPC_SYSCTL=y
-@@ -213,10 +216,8 @@
- CONFIG_IKCONFIG=y
- CONFIG_IKCONFIG_PROC=y
- CONFIG_LOG_BUF_SHIFT=15
--# CONFIG_GROUP_SCHED is not set
- # CONFIG_CGROUPS is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_SYSFS_DEPRECATED_V2 is not set
- # CONFIG_RELAY is not set
- # CONFIG_NAMESPACES is not set
- CONFIG_BLK_DEV_INITRD=y
-@@ -224,6 +225,7 @@
- CONFIG_RD_GZIP=y
- CONFIG_RD_BZIP2=y
- CONFIG_RD_LZMA=y
-+# CONFIG_RD_LZO is not set
- # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
- CONFIG_SYSCTL=y
- CONFIG_ANON_INODES=y
-@@ -250,13 +252,12 @@
- #
- CONFIG_VM_EVENT_COUNTERS=y
- CONFIG_PCI_QUIRKS=y
--CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLUB_DEBUG is not set
- CONFIG_COMPAT_BRK=y
- # CONFIG_SLAB is not set
- CONFIG_SLUB=y
- # CONFIG_SLOB is not set
- CONFIG_PROFILING=y
--CONFIG_TRACEPOINTS=y
- CONFIG_OPROFILE=m
- CONFIG_HAVE_OPROFILE=y
- CONFIG_HAVE_SYSCALL_WRAPPERS=y
-@@ -264,11 +265,8 @@
- #
- # GCOV-based kernel profiling
- #
--# CONFIG_GCOV_KERNEL is not set
- CONFIG_SLOW_WORK=y
--# CONFIG_SLOW_WORK_DEBUG is not set
- CONFIG_HAVE_GENERIC_DMA_COHERENT=y
--CONFIG_SLABINFO=y
- CONFIG_RT_MUTEXES=y
- CONFIG_BASE_SMALL=0
- CONFIG_MODULES=y
-@@ -330,7 +328,6 @@
- CONFIG_PCI=y
- CONFIG_PCI_DOMAINS=y
- # CONFIG_ARCH_SUPPORTS_MSI is not set
--CONFIG_PCI_LEGACY=y
- # CONFIG_PCI_STUB is not set
- # CONFIG_PCI_IOV is not set
- CONFIG_ISA=y
-@@ -366,6 +363,7 @@
- CONFIG_HIBERNATION=y
- CONFIG_PM_STD_PARTITION="/dev/hda3"
- CONFIG_PM_RUNTIME=y
-+CONFIG_PM_OPS=y
- CONFIG_MIPS_EXTERNAL_TIMER=y
- CONFIG_MIPS_CPUFREQ=y
-
-@@ -393,12 +391,12 @@
- #
- CONFIG_LOONGSON2_CPUFREQ=m
- CONFIG_NET=y
-+CONFIG_COMPAT_NETLINK_MESSAGES=y
-
- #
- # Networking options
- #
- CONFIG_PACKET=y
--CONFIG_PACKET_MMAP=y
- CONFIG_UNIX=y
- CONFIG_XFRM=y
- CONFIG_XFRM_USER=m
-@@ -515,6 +513,7 @@
- # CONFIG_ATM is not set
- CONFIG_STP=m
- CONFIG_BRIDGE=m
-+CONFIG_BRIDGE_IGMP_SNOOPING=y
- # CONFIG_NET_DSA is not set
- CONFIG_VLAN_8021Q=m
- # CONFIG_VLAN_8021Q_GVRP is not set
-@@ -584,7 +583,6 @@
- # Network testing
- #
- # CONFIG_NET_PKTGEN is not set
--# CONFIG_NET_DROP_MONITOR is not set
- # CONFIG_HAMRADIO is not set
- # CONFIG_CAN is not set
- # CONFIG_IRDA is not set
-@@ -609,18 +607,20 @@
- CONFIG_BT_HCIBFUSB=m
- CONFIG_BT_HCIVHCI=m
- # CONFIG_BT_MRVL is not set
-+# CONFIG_BT_ATH3K is not set
- # CONFIG_AF_RXRPC is not set
- CONFIG_FIB_RULES=y
- CONFIG_WIRELESS=y
-+CONFIG_WIRELESS_EXT=y
- CONFIG_WEXT_CORE=y
- CONFIG_WEXT_PROC=y
-+CONFIG_WEXT_PRIV=y
- CONFIG_CFG80211=m
- # CONFIG_NL80211_TESTMODE is not set
- # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
- # CONFIG_CFG80211_REG_DEBUG is not set
- CONFIG_CFG80211_DEFAULT_PS=y
--# CONFIG_CFG80211_DEBUGFS is not set
--# CONFIG_WIRELESS_OLD_REGULATORY is not set
-+# CONFIG_CFG80211_INTERNAL_REGDB is not set
- CONFIG_CFG80211_WEXT=y
- CONFIG_WIRELESS_EXT_SYSFS=y
- CONFIG_LIB80211=m
-@@ -633,7 +633,6 @@
- CONFIG_MAC80211_RC_DEFAULT="minstrel"
- # CONFIG_MAC80211_MESH is not set
- CONFIG_MAC80211_LEDS=y
--# CONFIG_MAC80211_DEBUGFS is not set
- # CONFIG_MAC80211_DEBUG_MENU is not set
- # CONFIG_WIMAX is not set
- CONFIG_RFKILL=m
-@@ -668,10 +667,6 @@
- # CONFIG_BLK_DEV_COW_COMMON is not set
- CONFIG_BLK_DEV_LOOP=y
- CONFIG_BLK_DEV_CRYPTOLOOP=m
--
--#
--# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
--#
- # CONFIG_BLK_DEV_DRBD is not set
- # CONFIG_BLK_DEV_NBD is not set
- # CONFIG_BLK_DEV_SX8 is not set
-@@ -758,6 +753,7 @@
- #
- # SCSI device support
- #
-+CONFIG_SCSI_MOD=m
- # CONFIG_RAID_ATTRS is not set
- CONFIG_SCSI=m
- CONFIG_SCSI_DMA=y
-@@ -873,6 +869,7 @@
- # CONFIG_AMD8111_ETH is not set
- # CONFIG_ADAPTEC_STARFIRE is not set
- # CONFIG_AC3200 is not set
-+# CONFIG_KSZ884X_PCI is not set
- # CONFIG_APRICOT is not set
- # CONFIG_B44 is not set
- # CONFIG_FORCEDETH is not set
-@@ -883,7 +880,7 @@
- # CONFIG_NATSEMI is not set
- # CONFIG_NE2K_PCI is not set
- # CONFIG_8139CP is not set
--CONFIG_8139TOO=y
-+CONFIG_8139TOO=m
- # CONFIG_8139TOO_PIO is not set
- # CONFIG_8139TOO_TUNE_TWISTER is not set
- # CONFIG_8139TOO_8129 is not set
-@@ -910,7 +907,7 @@
- # CONFIG_NS83820 is not set
- # CONFIG_HAMACHI is not set
- # CONFIG_YELLOWFIN is not set
--CONFIG_R8169=y
-+CONFIG_R8169=m
- CONFIG_R8169_VLAN=y
- # CONFIG_SIS190 is not set
- # CONFIG_SKGE is not set
-@@ -934,7 +931,7 @@
- # CONFIG_USB_ZD1201 is not set
- # CONFIG_USB_NET_RNDIS_WLAN is not set
- # CONFIG_RTL8180 is not set
--# CONFIG_RTL8187 is not set
-+CONFIG_RTL8187B=m
- # CONFIG_ADM8211 is not set
- # CONFIG_MAC80211_HWSIM is not set
- # CONFIG_MWL8K is not set
-@@ -969,6 +966,7 @@
- CONFIG_USB_NET_CDCETHER=m
- CONFIG_USB_NET_CDC_EEM=m
- # CONFIG_USB_NET_DM9601 is not set
-+# CONFIG_USB_NET_SMSC75XX is not set
- # CONFIG_USB_NET_SMSC95XX is not set
- # CONFIG_USB_NET_GL620A is not set
- CONFIG_USB_NET_NET1080=m
-@@ -1006,24 +1004,24 @@
- CONFIG_INPUT=y
- CONFIG_INPUT_FF_MEMLESS=m
- CONFIG_INPUT_POLLDEV=m
--# CONFIG_INPUT_SPARSEKMAP is not set
-+CONFIG_INPUT_SPARSEKMAP=m
-
- #
- # Userland interfaces
- #
--CONFIG_INPUT_MOUSEDEV=y
-+CONFIG_INPUT_MOUSEDEV=m
- CONFIG_INPUT_MOUSEDEV_PSAUX=y
- CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
- CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
- # CONFIG_INPUT_JOYDEV is not set
--CONFIG_INPUT_EVDEV=y
-+CONFIG_INPUT_EVDEV=m
- # CONFIG_INPUT_EVBUG is not set
-
- #
- # Input Device Drivers
- #
- CONFIG_INPUT_KEYBOARD=y
--CONFIG_KEYBOARD_ATKBD=y
-+CONFIG_KEYBOARD_ATKBD=m
- # CONFIG_KEYBOARD_LKKBD is not set
- # CONFIG_KEYBOARD_NEWTON is not set
- # CONFIG_KEYBOARD_OPENCORES is not set
-@@ -1031,7 +1029,7 @@
- # CONFIG_KEYBOARD_SUNKBD is not set
- # CONFIG_KEYBOARD_XTKBD is not set
- CONFIG_INPUT_MOUSE=y
--CONFIG_MOUSE_PS2=y
-+CONFIG_MOUSE_PS2=m
- # CONFIG_MOUSE_PS2_ALPS is not set
- # CONFIG_MOUSE_PS2_LOGIPS2PP is not set
- CONFIG_MOUSE_PS2_SYNAPTICS=y
-@@ -1072,20 +1070,7 @@
- CONFIG_HW_CONSOLE=y
- # CONFIG_VT_HW_CONSOLE_BINDING is not set
- CONFIG_DEVKMEM=y
--CONFIG_SERIAL_NONSTANDARD=y
--# CONFIG_COMPUTONE is not set
--# CONFIG_ROCKETPORT is not set
--# CONFIG_CYCLADES is not set
--# CONFIG_DIGIEPCA is not set
--# CONFIG_MOXA_INTELLIO is not set
--# CONFIG_MOXA_SMARTIO is not set
--# CONFIG_ISI is not set
--# CONFIG_SYNCLINKMP is not set
--# CONFIG_SYNCLINK_GT is not set
--# CONFIG_N_HDLC is not set
--# CONFIG_RISCOM8 is not set
--# CONFIG_SPECIALIX is not set
--# CONFIG_STALDRV is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
- # CONFIG_NOZOMI is not set
-
- #
-@@ -1111,6 +1096,7 @@
- #
- CONFIG_SERIAL_CORE=m
- # CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_TIMBERDALE is not set
- CONFIG_UNIX98_PTYS=y
- # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
- CONFIG_LEGACY_PTYS=y
-@@ -1118,7 +1104,6 @@
- # CONFIG_IPMI_HANDLER is not set
- CONFIG_HW_RANDOM=y
- # CONFIG_HW_RANDOM_TIMERIOMEM is not set
--CONFIG_RTC=y
- # CONFIG_DTLK is not set
- # CONFIG_R3964 is not set
- # CONFIG_APPLICOM is not set
-@@ -1133,7 +1118,10 @@
- #
- # CONFIG_PPS is not set
- # CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
-+CONFIG_POWER_SUPPLY=m
-+# CONFIG_POWER_SUPPLY_DEBUG is not set
-+# CONFIG_PDA_POWER is not set
-+# CONFIG_BATTERY_DS2760 is not set
- CONFIG_HWMON=y
- # CONFIG_HWMON_VID is not set
- # CONFIG_HWMON_DEBUG_CHIP is not set
-@@ -1172,6 +1160,7 @@
- # CONFIG_MFD_SM501 is not set
- # CONFIG_HTC_PASIC3 is not set
- # CONFIG_MFD_TMIO is not set
-+# CONFIG_LPC_SCH is not set
- # CONFIG_REGULATOR is not set
- CONFIG_MEDIA_SUPPORT=m
-
-@@ -1211,7 +1200,9 @@
- CONFIG_USB_M5602=m
- CONFIG_USB_STV06XX=m
- # CONFIG_USB_GL860 is not set
-+# CONFIG_USB_GSPCA_BENQ is not set
- CONFIG_USB_GSPCA_CONEX=m
-+# CONFIG_USB_GSPCA_CPIA1 is not set
- CONFIG_USB_GSPCA_ETOMS=m
- CONFIG_USB_GSPCA_FINEPIX=m
- # CONFIG_USB_GSPCA_JEILINJ is not set
-@@ -1219,9 +1210,11 @@
- CONFIG_USB_GSPCA_MR97310A=m
- CONFIG_USB_GSPCA_OV519=m
- CONFIG_USB_GSPCA_OV534=m
-+# CONFIG_USB_GSPCA_OV534_9 is not set
- CONFIG_USB_GSPCA_PAC207=m
- # CONFIG_USB_GSPCA_PAC7302 is not set
- CONFIG_USB_GSPCA_PAC7311=m
-+# CONFIG_USB_GSPCA_SN9C2028 is not set
- CONFIG_USB_GSPCA_SN9C20X=m
- CONFIG_USB_GSPCA_SN9C20X_EVDEV=y
- CONFIG_USB_GSPCA_SONIXB=m
-@@ -1264,6 +1257,7 @@
- # Graphics support
- #
- CONFIG_VGA_ARB=y
-+CONFIG_VGA_ARB_MAX_GPUS=16
- # CONFIG_DRM is not set
- # CONFIG_VGASTATE is not set
- CONFIG_VIDEO_OUTPUT_CONTROL=y
-@@ -1351,10 +1345,7 @@
- CONFIG_FONT_SUN8x16=y
- CONFIG_FONT_SUN12x22=y
- CONFIG_FONT_10x18=y
--CONFIG_LOGO=y
--# CONFIG_LOGO_LINUX_MONO is not set
--# CONFIG_LOGO_LINUX_VGA16 is not set
--CONFIG_LOGO_LINUX_CLUT224=y
-+# CONFIG_LOGO is not set
- CONFIG_SOUND=m
- CONFIG_SOUND_OSS_CORE=y
- CONFIG_SOUND_OSS_CORE_PRECLAIM=y
-@@ -1372,7 +1363,6 @@
- CONFIG_SND_SEQUENCER_OSS=y
- CONFIG_SND_HRTIMER=m
- CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
--# CONFIG_SND_RTCTIMER is not set
- # CONFIG_SND_DYNAMIC_MINORS is not set
- CONFIG_SND_SUPPORT_OLD_API=y
- CONFIG_SND_VERBOSE_PROCFS=y
-@@ -1462,6 +1452,7 @@
- # CONFIG_SND_MIPS is not set
- CONFIG_SND_USB=y
- CONFIG_SND_USB_AUDIO=m
-+# CONFIG_SND_USB_UA101 is not set
- CONFIG_SND_USB_CAIAQ=m
- CONFIG_SND_USB_CAIAQ_INPUT=y
- # CONFIG_SND_SOC is not set
-@@ -1481,6 +1472,7 @@
- #
- # Special HID drivers
- #
-+# CONFIG_HID_3M_PCT is not set
- CONFIG_HID_A4TECH=m
- CONFIG_HID_APPLE=m
- CONFIG_HID_BELKIN=m
-@@ -1497,14 +1489,20 @@
- CONFIG_HID_LOGITECH=m
- CONFIG_LOGITECH_FF=y
- CONFIG_LOGIRUMBLEPAD2_FF=y
-+# CONFIG_LOGIG940_FF is not set
-+# CONFIG_HID_MAGICMOUSE is not set
- CONFIG_HID_MICROSOFT=m
-+# CONFIG_HID_MOSART is not set
- CONFIG_HID_MONTEREY=m
- CONFIG_HID_NTRIG=m
-+# CONFIG_HID_ORTEK is not set
- CONFIG_HID_PANTHERLORD=m
- CONFIG_PANTHERLORD_FF=y
- CONFIG_HID_PETALYNX=m
-+# CONFIG_HID_QUANTA is not set
- CONFIG_HID_SAMSUNG=m
- CONFIG_HID_SONY=m
-+# CONFIG_HID_STANTUM is not set
- CONFIG_HID_SUNPLUS=m
- CONFIG_HID_GREENASIA=m
- CONFIG_GREENASIA_FF=y
-@@ -1527,14 +1525,14 @@
- #
- # Miscellaneous USB options
- #
--CONFIG_USB_DEVICEFS=y
-+# CONFIG_USB_DEVICEFS is not set
- # CONFIG_USB_DEVICE_CLASS is not set
- CONFIG_USB_DYNAMIC_MINORS=y
- CONFIG_USB_SUSPEND=y
- # CONFIG_USB_OTG is not set
- CONFIG_USB_OTG_WHITELIST=y
- # CONFIG_USB_OTG_BLACKLIST_HUB is not set
--CONFIG_USB_MON=y
-+CONFIG_USB_MON=m
- CONFIG_USB_WUSB=m
- # CONFIG_USB_WUSB_CBAF is not set
-
-@@ -1633,6 +1631,7 @@
- # CONFIG_USB_SERIAL_NAVMAN is not set
- # CONFIG_USB_SERIAL_PL2303 is not set
- # CONFIG_USB_SERIAL_OTI6858 is not set
-+# CONFIG_USB_SERIAL_QCAUX is not set
- # CONFIG_USB_SERIAL_QUALCOMM is not set
- # CONFIG_USB_SERIAL_SPCP8X5 is not set
- # CONFIG_USB_SERIAL_HP4X is not set
-@@ -1646,6 +1645,7 @@
- # CONFIG_USB_SERIAL_OPTION is not set
- # CONFIG_USB_SERIAL_OMNINET is not set
- # CONFIG_USB_SERIAL_OPTICON is not set
-+# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set
- # CONFIG_USB_SERIAL_DEBUG is not set
-
- #
-@@ -1658,7 +1658,6 @@
- # CONFIG_USB_RIO500 is not set
- # CONFIG_USB_LEGOTOWER is not set
- # CONFIG_USB_LCD is not set
--# CONFIG_USB_BERRY_CHARGE is not set
- CONFIG_USB_LED=m
- # CONFIG_USB_CYPRESS_CY7C63 is not set
- # CONFIG_USB_CYTHERM is not set
-@@ -1671,10 +1670,8 @@
- # CONFIG_USB_IOWARRIOR is not set
- # CONFIG_USB_TEST is not set
- # CONFIG_USB_ISIGHTFW is not set
--# CONFIG_USB_VST is not set
- CONFIG_USB_GADGET=m
- # CONFIG_USB_GADGET_DEBUG_FILES is not set
--# CONFIG_USB_GADGET_DEBUG_FS is not set
- CONFIG_USB_GADGET_VBUS_DRAW=2
- CONFIG_USB_GADGET_SELECTED=y
- # CONFIG_USB_GADGET_AT91 is not set
-@@ -1708,6 +1705,7 @@
- # CONFIG_USB_MIDI_GADGET is not set
- # CONFIG_USB_G_PRINTER is not set
- # CONFIG_USB_CDC_COMPOSITE is not set
-+# CONFIG_USB_G_NOKIA is not set
- # CONFIG_USB_G_MULTI is not set
-
- #
-@@ -1735,8 +1733,6 @@
- # MMC/SD/SDIO Host Controller Drivers
- #
- # CONFIG_MMC_SDHCI is not set
--# CONFIG_MMC_AT91 is not set
--# CONFIG_MMC_ATMELMCI is not set
- # CONFIG_MMC_TIFM_SD is not set
- # CONFIG_MMC_CB710 is not set
- # CONFIG_MMC_VIA_SDMMC is not set
-@@ -1747,11 +1743,11 @@
- #
- # LED drivers
- #
-+CONFIG_LEDS_TRIGGERS=y
-
- #
- # LED Triggers
- #
--CONFIG_LEDS_TRIGGERS=y
- # CONFIG_LEDS_TRIGGER_TIMER is not set
- # CONFIG_LEDS_TRIGGER_IDE_DISK is not set
- # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-@@ -1763,7 +1759,45 @@
- #
- # CONFIG_ACCESSIBILITY is not set
- # CONFIG_INFINIBAND is not set
--# CONFIG_RTC_CLASS is not set
-+CONFIG_RTC_LIB=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
-+
-+#
-+# RTC interfaces
-+#
-+CONFIG_RTC_INTF_SYSFS=y
-+CONFIG_RTC_INTF_PROC=y
-+CONFIG_RTC_INTF_DEV=y
-+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-+# CONFIG_RTC_DRV_TEST is not set
-+
-+#
-+# SPI RTC drivers
-+#
-+
-+#
-+# Platform RTC drivers
-+#
-+CONFIG_RTC_DRV_CMOS=y
-+# CONFIG_RTC_DRV_DS1286 is not set
-+# CONFIG_RTC_DRV_DS1511 is not set
-+# CONFIG_RTC_DRV_DS1553 is not set
-+# CONFIG_RTC_DRV_DS1742 is not set
-+# CONFIG_RTC_DRV_STK17TA8 is not set
-+# CONFIG_RTC_DRV_M48T86 is not set
-+# CONFIG_RTC_DRV_M48T35 is not set
-+# CONFIG_RTC_DRV_M48T59 is not set
-+# CONFIG_RTC_DRV_MSM6242 is not set
-+# CONFIG_RTC_DRV_BQ4802 is not set
-+# CONFIG_RTC_DRV_RP5C01 is not set
-+# CONFIG_RTC_DRV_V3020 is not set
-+
-+#
-+# on-CPU RTC drivers
-+#
- # CONFIG_DMADEVICES is not set
- # CONFIG_AUXDISPLAY is not set
- # CONFIG_UIO is not set
-@@ -1776,14 +1810,15 @@
- # CONFIG_ET131X is not set
- # CONFIG_USB_IP_COMMON is not set
- # CONFIG_W35UND is not set
-+# CONFIG_PRISM2_USB is not set
- # CONFIG_ECHO is not set
- # CONFIG_OTUS is not set
- # CONFIG_COMEDI is not set
- # CONFIG_ASUS_OLED is not set
--# CONFIG_ALTERA_PCIE_CHDMA is not set
- # CONFIG_R8187SE is not set
-+# CONFIG_RTL8192SU is not set
-+# CONFIG_RTL8192U is not set
- # CONFIG_RTL8192E is not set
--# CONFIG_INPUT_MIMIO is not set
- # CONFIG_TRANZPORT is not set
-
- #
-@@ -1795,8 +1830,6 @@
- #
- # CONFIG_INPUT_GPIO is not set
- # CONFIG_POHMELFS is not set
--# CONFIG_B3DFG is not set
--# CONFIG_PLAN9AUTH is not set
- # CONFIG_LINE6_USB is not set
- # CONFIG_USB_SERIAL_QUATECH2 is not set
- # CONFIG_USB_SERIAL_QUATECH_USB2 is not set
-@@ -1815,7 +1848,11 @@
- # CONFIG_STRIP is not set
- # CONFIG_WAVELAN is not set
- CONFIG_FB_SM7XX=y
--# CONFIG_FB_SM7XX_ACCEL is not set
-+# CONFIG_DT3155 is not set
-+# CONFIG_CRYSTALHD is not set
-+CONFIG_MIPS_PLATFORM_DEVICES=y
-+CONFIG_LEMOTE_YEELOONG2F=m
-+CONFIG_LEMOTE_LYNLOONG2F=m
-
- #
- # File systems
-@@ -1834,9 +1871,7 @@
- # CONFIG_EXT4_FS_SECURITY is not set
- # CONFIG_EXT4_DEBUG is not set
- CONFIG_JBD=y
--# CONFIG_JBD_DEBUG is not set
- CONFIG_JBD2=y
--# CONFIG_JBD2_DEBUG is not set
- CONFIG_FS_MBCACHE=y
- CONFIG_REISERFS_FS=m
- # CONFIG_REISERFS_CHECK is not set
-@@ -1874,7 +1909,8 @@
- CONFIG_QUOTACTL=y
- CONFIG_AUTOFS_FS=m
- CONFIG_AUTOFS4_FS=m
--# CONFIG_FUSE_FS is not set
-+CONFIG_FUSE_FS=m
-+CONFIG_CUSE=m
-
- #
- # Caches
-@@ -1929,6 +1965,7 @@
- # CONFIG_BEFS_FS is not set
- # CONFIG_BFS_FS is not set
- # CONFIG_EFS_FS is not set
-+# CONFIG_LOGFS is not set
- CONFIG_CRAMFS=m
- CONFIG_SQUASHFS=m
- CONFIG_SQUASHFS_EMBEDDED=y
-@@ -1965,6 +2002,7 @@
- CONFIG_RPCSEC_GSS_KRB5=m
- # CONFIG_RPCSEC_GSS_SPKM3 is not set
- # CONFIG_SMB_FS is not set
-+# CONFIG_CEPH_FS is not set
- CONFIG_CIFS=m
- # CONFIG_CIFS_STATS is not set
- # CONFIG_CIFS_WEAK_PW_HASH is not set
-@@ -2028,39 +2066,31 @@
- # Kernel hacking
- #
- CONFIG_TRACE_IRQFLAGS_SUPPORT=y
--CONFIG_PRINTK_TIME=y
-+# CONFIG_PRINTK_TIME is not set
- CONFIG_ENABLE_WARN_DEPRECATED=y
- CONFIG_ENABLE_MUST_CHECK=y
- CONFIG_FRAME_WARN=1024
- # CONFIG_MAGIC_SYSRQ is not set
- CONFIG_STRIP_ASM_SYMS=y
- # CONFIG_UNUSED_SYMBOLS is not set
--CONFIG_DEBUG_FS=y
-+# CONFIG_DEBUG_FS is not set
- # CONFIG_HEADERS_CHECK is not set
- # CONFIG_DEBUG_KERNEL is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--CONFIG_STACKTRACE=y
- # CONFIG_DEBUG_MEMORY_INIT is not set
- # CONFIG_RCU_CPU_STALL_DETECTOR is not set
- CONFIG_SYSCTL_SYSCALL_CHECK=y
--CONFIG_NOP_TRACER=y
- CONFIG_HAVE_FUNCTION_TRACER=y
- CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
- CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
- CONFIG_HAVE_DYNAMIC_FTRACE=y
- CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
- CONFIG_RING_BUFFER=y
--CONFIG_EVENT_TRACING=y
--CONFIG_CONTEXT_SWITCH_TRACER=y
- CONFIG_RING_BUFFER_ALLOW_SWAP=y
--CONFIG_TRACING=y
- CONFIG_TRACING_SUPPORT=y
- # CONFIG_FTRACE is not set
--# CONFIG_DYNAMIC_DEBUG is not set
- # CONFIG_SAMPLES is not set
- CONFIG_HAVE_ARCH_KGDB=y
--CONFIG_EARLY_PRINTK=y
-+# CONFIG_EARLY_PRINTK is not set
- # CONFIG_CMDLINE_BOOL is not set
-
- #
-@@ -2183,7 +2213,7 @@
- CONFIG_CRYPTO_ANSI_CPRNG=m
- CONFIG_CRYPTO_HW=y
- # CONFIG_CRYPTO_DEV_HIFN_795X is not set
--CONFIG_BINARY_PRINTF=y
-+# CONFIG_BINARY_PRINTF is not set
-
- #
- # Library routines
-diff -Nur linux-2.6.34.orig/arch/mips/configs/lemote2f_minimal_defconfig linux-loongson/arch/mips/configs/lemote2f_minimal_defconfig
---- linux-2.6.34.orig/arch/mips/configs/lemote2f_minimal_defconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/arch/mips/configs/lemote2f_minimal_defconfig 2010-05-27 18:12:28.612213391 +0200
-@@ -0,0 +1,1383 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.34-rc5
-+# Wed Apr 28 01:06:41 2010
-+#
-+CONFIG_MIPS=y
-+
-+#
-+# Machine selection
-+#
-+# CONFIG_MACH_ALCHEMY is not set
-+# CONFIG_AR7 is not set
-+# CONFIG_BCM47XX is not set
-+# CONFIG_BCM63XX is not set
-+# CONFIG_MIPS_COBALT is not set
-+# CONFIG_MACH_DECSTATION is not set
-+# CONFIG_MACH_JAZZ is not set
-+# CONFIG_LASAT is not set
-+CONFIG_MACH_LOONGSON=y
-+# CONFIG_MIPS_MALTA is not set
-+# CONFIG_MIPS_SIM is not set
-+# CONFIG_NEC_MARKEINS is not set
-+# CONFIG_MACH_VR41XX is not set
-+# CONFIG_NXP_STB220 is not set
-+# CONFIG_NXP_STB225 is not set
-+# CONFIG_PNX8550_JBS is not set
-+# CONFIG_PNX8550_STB810 is not set
-+# CONFIG_PMC_MSP is not set
-+# CONFIG_PMC_YOSEMITE is not set
-+# CONFIG_POWERTV is not set
-+# CONFIG_SGI_IP22 is not set
-+# CONFIG_SGI_IP27 is not set
-+# CONFIG_SGI_IP28 is not set
-+# CONFIG_SGI_IP32 is not set
-+# CONFIG_SIBYTE_CRHINE is not set
-+# CONFIG_SIBYTE_CARMEL is not set
-+# CONFIG_SIBYTE_CRHONE is not set
-+# CONFIG_SIBYTE_RHONE is not set
-+# CONFIG_SIBYTE_SWARM is not set
-+# CONFIG_SIBYTE_LITTLESUR is not set
-+# CONFIG_SIBYTE_SENTOSA is not set
-+# CONFIG_SIBYTE_BIGSUR is not set
-+# CONFIG_SNI_RM is not set
-+# CONFIG_MACH_TX39XX is not set
-+# CONFIG_MACH_TX49XX is not set
-+# CONFIG_MIKROTIK_RB532 is not set
-+# CONFIG_WR_PPMC is not set
-+# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
-+# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
-+# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
-+CONFIG_ARCH_SPARSEMEM_ENABLE=y
-+# CONFIG_LEMOTE_FULOONG2E is not set
-+CONFIG_LEMOTE_MACH2F=y
-+CONFIG_CS5536=y
-+# CONFIG_CS5536_MFGPT is not set
-+CONFIG_LOONGSON_UART_BASE=y
-+CONFIG_RWSEM_GENERIC_SPINLOCK=y
-+# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-+# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-+CONFIG_ARCH_SUPPORTS_OPROFILE=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_SCHED_OMIT_FRAME_POINTER=y
-+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-+CONFIG_CEVT_R4K_LIB=y
-+CONFIG_CEVT_R4K=y
-+CONFIG_CSRC_R4K_LIB=y
-+CONFIG_CSRC_R4K=y
-+CONFIG_DMA_NONCOHERENT=y
-+CONFIG_NEED_DMA_MAP_STATE=y
-+CONFIG_SYS_HAS_EARLY_PRINTK=y
-+CONFIG_I8259=y
-+# CONFIG_NO_IOPORT is not set
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_GENERIC_ISA_DMA_SUPPORT_BROKEN=y
-+# CONFIG_CPU_BIG_ENDIAN is not set
-+CONFIG_CPU_LITTLE_ENDIAN=y
-+CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
-+CONFIG_IRQ_CPU=y
-+CONFIG_BOOT_ELF32=y
-+CONFIG_MIPS_L1_CACHE_SHIFT=5
-+
-+#
-+# CPU selection
-+#
-+# CONFIG_CPU_LOONGSON2E is not set
-+CONFIG_CPU_LOONGSON2F=y
-+# CONFIG_CPU_MIPS32_R1 is not set
-+# CONFIG_CPU_MIPS32_R2 is not set
-+# CONFIG_CPU_MIPS64_R1 is not set
-+# CONFIG_CPU_MIPS64_R2 is not set
-+# CONFIG_CPU_R3000 is not set
-+# CONFIG_CPU_TX39XX is not set
-+# CONFIG_CPU_VR41XX is not set
-+# CONFIG_CPU_R4300 is not set
-+# CONFIG_CPU_R4X00 is not set
-+# CONFIG_CPU_TX49XX is not set
-+# CONFIG_CPU_R5000 is not set
-+# CONFIG_CPU_R5432 is not set
-+# CONFIG_CPU_R5500 is not set
-+# CONFIG_CPU_R6000 is not set
-+# CONFIG_CPU_NEVADA is not set
-+# CONFIG_CPU_R8000 is not set
-+# CONFIG_CPU_R10000 is not set
-+# CONFIG_CPU_RM7000 is not set
-+# CONFIG_CPU_RM9000 is not set
-+# CONFIG_CPU_SB1 is not set
-+# CONFIG_CPU_CAVIUM_OCTEON is not set
-+CONFIG_SYS_SUPPORTS_ZBOOT=y
-+CONFIG_CPU_LOONGSON2=y
-+CONFIG_SYS_HAS_CPU_LOONGSON2F=y
-+CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
-+CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y
-+CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
-+CONFIG_CPU_SUPPORTS_64BIT_KERNEL=y
-+CONFIG_CPU_SUPPORTS_CPUFREQ=y
-+CONFIG_CPU_SUPPORTS_ADDRWINCFG=y
-+CONFIG_CPU_SUPPORTS_UNCACHED_ACCELERATED=y
-+
-+#
-+# Kernel type
-+#
-+# CONFIG_32BIT is not set
-+CONFIG_64BIT=y
-+# CONFIG_PAGE_SIZE_4KB is not set
-+# CONFIG_PAGE_SIZE_8KB is not set
-+CONFIG_PAGE_SIZE_16KB=y
-+# CONFIG_PAGE_SIZE_32KB is not set
-+# CONFIG_PAGE_SIZE_64KB is not set
-+CONFIG_BOARD_SCACHE=y
-+CONFIG_MIPS_MT_DISABLED=y
-+# CONFIG_MIPS_MT_SMP is not set
-+# CONFIG_MIPS_MT_SMTC is not set
-+# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
-+CONFIG_CPU_HAS_WB=y
-+CONFIG_CPU_HAS_SYNC=y
-+CONFIG_GENERIC_HARDIRQS=y
-+CONFIG_GENERIC_IRQ_PROBE=y
-+CONFIG_CPU_SUPPORTS_HIGHMEM=y
-+CONFIG_SYS_SUPPORTS_HIGHMEM=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+# CONFIG_FLATMEM_MANUAL is not set
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+CONFIG_SPARSEMEM_MANUAL=y
-+CONFIG_SPARSEMEM=y
-+CONFIG_HAVE_MEMORY_PRESENT=y
-+CONFIG_SPARSEMEM_STATIC=y
-+CONFIG_PAGEFLAGS_EXTENDED=y
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+CONFIG_PHYS_ADDR_T_64BIT=y
-+CONFIG_ZONE_DMA_FLAG=0
-+CONFIG_VIRT_TO_BUS=y
-+# CONFIG_KSM is not set
-+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+CONFIG_CPU_SUPPORTS_HR_SCHED_CLOCK=y
-+# CONFIG_HZ_48 is not set
-+# CONFIG_HZ_100 is not set
-+# CONFIG_HZ_128 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_256 is not set
-+# CONFIG_HZ_1000 is not set
-+# CONFIG_HZ_1024 is not set
-+CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
-+CONFIG_HZ=250
-+# CONFIG_PREEMPT_NONE is not set
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+CONFIG_PREEMPT=y
-+CONFIG_KEXEC=y
-+# CONFIG_SECCOMP is not set
-+CONFIG_LOCKDEP_SUPPORT=y
-+CONFIG_STACKTRACE_SUPPORT=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+CONFIG_CONSTRUCTORS=y
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_LOCK_KERNEL=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+# CONFIG_LOCALVERSION_AUTO is not set
-+CONFIG_HAVE_KERNEL_GZIP=y
-+CONFIG_HAVE_KERNEL_BZIP2=y
-+CONFIG_HAVE_KERNEL_LZMA=y
-+CONFIG_HAVE_KERNEL_LZO=y
-+CONFIG_KERNEL_GZIP=y
-+# CONFIG_KERNEL_BZIP2 is not set
-+# CONFIG_KERNEL_LZMA is not set
-+# CONFIG_KERNEL_LZO is not set
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+CONFIG_BSD_PROCESS_ACCT=y
-+CONFIG_BSD_PROCESS_ACCT_V3=y
-+# CONFIG_TASKSTATS is not set
-+CONFIG_AUDIT=y
-+
-+#
-+# RCU Subsystem
-+#
-+CONFIG_TREE_RCU=y
-+# CONFIG_TREE_PREEMPT_RCU is not set
-+# CONFIG_TINY_RCU is not set
-+# CONFIG_RCU_TRACE is not set
-+CONFIG_RCU_FANOUT=64
-+# CONFIG_RCU_FANOUT_EXACT is not set
-+# CONFIG_TREE_RCU_TRACE is not set
-+CONFIG_IKCONFIG=y
-+CONFIG_IKCONFIG_PROC=y
-+CONFIG_LOG_BUF_SHIFT=15
-+# CONFIG_CGROUPS is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+CONFIG_RD_GZIP=y
-+CONFIG_RD_BZIP2=y
-+CONFIG_RD_LZMA=y
-+CONFIG_RD_LZO=y
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_PCSPKR_PLATFORM=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_AIO=y
-+
-+#
-+# Kernel Performance Events And Counters
-+#
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_PCI_QUIRKS=y
-+CONFIG_SLUB_DEBUG=y
-+CONFIG_COMPAT_BRK=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+CONFIG_PROFILING=y
-+# CONFIG_OPROFILE is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_SYSCALL_WRAPPERS=y
-+
-+#
-+# GCOV-based kernel profiling
-+#
-+# CONFIG_SLOW_WORK is not set
-+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+CONFIG_BASE_SMALL=0
-+# CONFIG_MODULES is not set
-+CONFIG_BLOCK=y
-+# CONFIG_BLK_DEV_BSG is not set
-+# CONFIG_BLK_DEV_INTEGRITY is not set
-+CONFIG_BLOCK_COMPAT=y
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+# CONFIG_IOSCHED_DEADLINE is not set
-+# CONFIG_IOSCHED_CFQ is not set
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+CONFIG_DEFAULT_NOOP=y
-+CONFIG_DEFAULT_IOSCHED="noop"
-+# CONFIG_INLINE_SPIN_TRYLOCK is not set
-+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-+# CONFIG_INLINE_SPIN_LOCK is not set
-+# CONFIG_INLINE_SPIN_LOCK_BH is not set
-+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-+# CONFIG_INLINE_SPIN_UNLOCK is not set
-+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
-+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-+# CONFIG_INLINE_READ_TRYLOCK is not set
-+# CONFIG_INLINE_READ_LOCK is not set
-+# CONFIG_INLINE_READ_LOCK_BH is not set
-+# CONFIG_INLINE_READ_LOCK_IRQ is not set
-+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-+# CONFIG_INLINE_READ_UNLOCK is not set
-+# CONFIG_INLINE_READ_UNLOCK_BH is not set
-+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
-+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-+# CONFIG_INLINE_WRITE_TRYLOCK is not set
-+# CONFIG_INLINE_WRITE_LOCK is not set
-+# CONFIG_INLINE_WRITE_LOCK_BH is not set
-+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-+# CONFIG_INLINE_WRITE_UNLOCK is not set
-+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
-+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
-+# CONFIG_FREEZER is not set
-+
-+#
-+# Bus options (PCI, PCMCIA, EISA, ISA, TC)
-+#
-+CONFIG_HW_HAS_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+# CONFIG_ARCH_SUPPORTS_MSI is not set
-+# CONFIG_PCI_STUB is not set
-+# CONFIG_PCI_IOV is not set
-+CONFIG_ISA=y
-+CONFIG_MMU=y
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Executable file formats
-+#
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-+# CONFIG_HAVE_AOUT is not set
-+# CONFIG_BINFMT_MISC is not set
-+CONFIG_MIPS32_COMPAT=y
-+CONFIG_COMPAT=y
-+CONFIG_SYSVIPC_COMPAT=y
-+CONFIG_MIPS32_O32=y
-+CONFIG_MIPS32_N32=y
-+CONFIG_BINFMT_ELF32=y
-+
-+#
-+# Power management options
-+#
-+CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-+CONFIG_ARCH_SUSPEND_POSSIBLE=y
-+# CONFIG_PM is not set
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+# CONFIG_IP_PNP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+# CONFIG_INET_DIAG is not set
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_RDS is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_NET_DSA is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_PHONET is not set
-+# CONFIG_IEEE802154 is not set
-+# CONFIG_NET_SCHED is not set
-+# CONFIG_DCB is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+# CONFIG_WIRELESS is not set
-+# CONFIG_WIMAX is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+# CONFIG_DEVTMPFS is not set
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+CONFIG_FIRMWARE_IN_KERNEL=y
-+CONFIG_EXTRA_FIRMWARE=""
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+# CONFIG_PARPORT is not set
-+# CONFIG_PNP is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+
-+#
-+# DRBD disabled because PROC_FS, INET or CONNECTOR not selected
-+#
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+# CONFIG_BLK_DEV_UB is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=8192
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_BLK_DEV_HD is not set
-+# CONFIG_MISC_DEVICES is not set
-+CONFIG_HAVE_IDE=y
-+CONFIG_IDE=y
-+
-+#
-+# Please see Documentation/ide/ide.txt for help/info on IDE drives
-+#
-+CONFIG_IDE_XFER_MODE=y
-+CONFIG_IDE_TIMINGS=y
-+# CONFIG_BLK_DEV_IDE_SATA is not set
-+CONFIG_IDE_GD=y
-+CONFIG_IDE_GD_ATA=y
-+# CONFIG_IDE_GD_ATAPI is not set
-+# CONFIG_BLK_DEV_IDECD is not set
-+# CONFIG_BLK_DEV_IDETAPE is not set
-+# CONFIG_IDE_TASK_IOCTL is not set
-+# CONFIG_IDE_PROC_FS is not set
-+
-+#
-+# IDE chipset support/bugfixes
-+#
-+# CONFIG_IDE_GENERIC is not set
-+# CONFIG_BLK_DEV_PLATFORM is not set
-+CONFIG_BLK_DEV_IDEDMA_SFF=y
-+
-+#
-+# PCI IDE chipsets support
-+#
-+CONFIG_BLK_DEV_IDEPCI=y
-+# CONFIG_IDEPCI_PCIBUS_ORDER is not set
-+# CONFIG_BLK_DEV_GENERIC is not set
-+# CONFIG_BLK_DEV_OPTI621 is not set
-+CONFIG_BLK_DEV_IDEDMA_PCI=y
-+# CONFIG_BLK_DEV_AEC62XX is not set
-+# CONFIG_BLK_DEV_ALI15X3 is not set
-+CONFIG_BLK_DEV_AMD74XX=y
-+# CONFIG_BLK_DEV_CMD64X is not set
-+# CONFIG_BLK_DEV_TRIFLEX is not set
-+# CONFIG_BLK_DEV_CS5520 is not set
-+# CONFIG_BLK_DEV_CS5530 is not set
-+# CONFIG_BLK_DEV_HPT366 is not set
-+# CONFIG_BLK_DEV_JMICRON is not set
-+# CONFIG_BLK_DEV_SC1200 is not set
-+# CONFIG_BLK_DEV_PIIX is not set
-+# CONFIG_BLK_DEV_IT8172 is not set
-+# CONFIG_BLK_DEV_IT8213 is not set
-+# CONFIG_BLK_DEV_IT821X is not set
-+# CONFIG_BLK_DEV_NS87415 is not set
-+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-+# CONFIG_BLK_DEV_SVWKS is not set
-+# CONFIG_BLK_DEV_SIIMAGE is not set
-+# CONFIG_BLK_DEV_SLC90E66 is not set
-+# CONFIG_BLK_DEV_TRM290 is not set
-+# CONFIG_BLK_DEV_VIA82CXXX is not set
-+# CONFIG_BLK_DEV_TC86C001 is not set
-+
-+#
-+# Other IDE chipsets support
-+#
-+
-+#
-+# Note: most of these also require special kernel boot parameters
-+#
-+# CONFIG_BLK_DEV_4DRIVES is not set
-+# CONFIG_BLK_DEV_ALI14XX is not set
-+# CONFIG_BLK_DEV_DTC2278 is not set
-+# CONFIG_BLK_DEV_HT6560B is not set
-+# CONFIG_BLK_DEV_QD65XX is not set
-+# CONFIG_BLK_DEV_UMC8672 is not set
-+CONFIG_BLK_DEV_IDEDMA=y
-+
-+#
-+# SCSI device support
-+#
-+CONFIG_SCSI_MOD=y
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_SCSI_PROC_FS is not set
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+CONFIG_BLK_DEV_SD=y
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_CHR_DEV_OSST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+# CONFIG_CHR_DEV_SG is not set
-+# CONFIG_CHR_DEV_SCH is not set
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+
-+#
-+# SCSI Transports
-+#
-+# CONFIG_SCSI_SPI_ATTRS is not set
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_ATTRS is not set
-+# CONFIG_SCSI_SAS_LIBSAS is not set
-+# CONFIG_SCSI_SRP_ATTRS is not set
-+# CONFIG_SCSI_LOWLEVEL is not set
-+# CONFIG_SCSI_DH is not set
-+# CONFIG_SCSI_OSD_INITIATOR is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+
-+#
-+# You can enable one or both FireWire driver stacks.
-+#
-+
-+#
-+# The newer stack is recommended.
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+# CONFIG_PHYLIB is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_AX88796 is not set
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_VENDOR_SMC is not set
-+# CONFIG_SMC91X is not set
-+# CONFIG_DM9000 is not set
-+# CONFIG_ETHOC is not set
-+# CONFIG_SMSC911X is not set
-+# CONFIG_NET_VENDOR_RACAL is not set
-+# CONFIG_DNET is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_AT1700 is not set
-+# CONFIG_DEPCA is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_NET_ISA is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
-+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
-+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
-+CONFIG_NET_PCI=y
-+# CONFIG_PCNET32 is not set
-+# CONFIG_AMD8111_ETH is not set
-+# CONFIG_ADAPTEC_STARFIRE is not set
-+# CONFIG_AC3200 is not set
-+# CONFIG_KSZ884X_PCI is not set
-+# CONFIG_APRICOT is not set
-+# CONFIG_B44 is not set
-+# CONFIG_FORCEDETH is not set
-+# CONFIG_CS89x0 is not set
-+# CONFIG_TC35815 is not set
-+# CONFIG_E100 is not set
-+# CONFIG_FEALNX is not set
-+# CONFIG_NATSEMI is not set
-+# CONFIG_NE2K_PCI is not set
-+# CONFIG_8139CP is not set
-+CONFIG_8139TOO=y
-+CONFIG_8139TOO_PIO=y
-+# CONFIG_8139TOO_TUNE_TWISTER is not set
-+# CONFIG_8139TOO_8129 is not set
-+# CONFIG_8139_OLD_RX_RESET is not set
-+# CONFIG_R6040 is not set
-+# CONFIG_SIS900 is not set
-+# CONFIG_EPIC100 is not set
-+# CONFIG_SMSC9420 is not set
-+# CONFIG_SUNDANCE is not set
-+# CONFIG_TLAN is not set
-+# CONFIG_KS8842 is not set
-+# CONFIG_KS8851_MLL is not set
-+# CONFIG_VIA_RHINE is not set
-+# CONFIG_SC92031 is not set
-+# CONFIG_ATL2 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_IGBVF is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+CONFIG_R8169=y
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+# CONFIG_CNIC is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+# CONFIG_ATL1E is not set
-+# CONFIG_ATL1C is not set
-+# CONFIG_JME is not set
-+# CONFIG_NETDEV_10000 is not set
-+# CONFIG_TR is not set
-+# CONFIG_WLAN is not set
-+
-+#
-+# Enable WiMAX (Networking options) to see the WiMAX drivers
-+#
-+
-+#
-+# USB Network Adapters
-+#
-+# CONFIG_USB_CATC is not set
-+# CONFIG_USB_KAWETH is not set
-+# CONFIG_USB_PEGASUS is not set
-+# CONFIG_USB_RTL8150 is not set
-+# CONFIG_USB_USBNET is not set
-+# CONFIG_USB_IPHETH is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_VMXNET3 is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+CONFIG_INPUT_FF_MEMLESS=y
-+# CONFIG_INPUT_POLLDEV is not set
-+# CONFIG_INPUT_SPARSEKMAP is not set
-+
-+#
-+# Userland interfaces
-+#
-+CONFIG_INPUT_MOUSEDEV=y
-+CONFIG_INPUT_MOUSEDEV_PSAUX=y
-+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+CONFIG_INPUT_KEYBOARD=y
-+CONFIG_KEYBOARD_ATKBD=y
-+# CONFIG_KEYBOARD_LKKBD is not set
-+# CONFIG_KEYBOARD_NEWTON is not set
-+# CONFIG_KEYBOARD_OPENCORES is not set
-+# CONFIG_KEYBOARD_STOWAWAY is not set
-+# CONFIG_KEYBOARD_SUNKBD is not set
-+# CONFIG_KEYBOARD_XTKBD is not set
-+CONFIG_INPUT_MOUSE=y
-+CONFIG_MOUSE_PS2=y
-+# CONFIG_MOUSE_PS2_ALPS is not set
-+# CONFIG_MOUSE_PS2_LOGIPS2PP is not set
-+CONFIG_MOUSE_PS2_SYNAPTICS=y
-+# CONFIG_MOUSE_PS2_TRACKPOINT is not set
-+# CONFIG_MOUSE_PS2_ELANTECH is not set
-+# CONFIG_MOUSE_PS2_SENTELIC is not set
-+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
-+# CONFIG_MOUSE_SERIAL is not set
-+# CONFIG_MOUSE_APPLETOUCH is not set
-+# CONFIG_MOUSE_BCM5974 is not set
-+# CONFIG_MOUSE_INPORT is not set
-+# CONFIG_MOUSE_LOGIBM is not set
-+# CONFIG_MOUSE_PC110PAD is not set
-+# CONFIG_MOUSE_VSXXXAA is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+CONFIG_SERIO=y
-+CONFIG_SERIO_I8042=y
-+# CONFIG_SERIO_SERPORT is not set
-+# CONFIG_SERIO_PCIPS2 is not set
-+CONFIG_SERIO_LIBPS2=y
-+# CONFIG_SERIO_RAW is not set
-+# CONFIG_SERIO_ALTERA_PS2 is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+CONFIG_VT=y
-+CONFIG_CONSOLE_TRANSLATIONS=y
-+CONFIG_VT_CONSOLE=y
-+CONFIG_HW_CONSOLE=y
-+# CONFIG_VT_HW_CONSOLE_BINDING is not set
-+# CONFIG_DEVKMEM is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+# CONFIG_SERIAL_8250_PCI is not set
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_TIMBERDALE is not set
-+CONFIG_UNIX98_PTYS=y
-+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=16
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_DTLK is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+# CONFIG_SPI is not set
-+
-+#
-+# PPS support
-+#
-+# CONFIG_PPS is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+CONFIG_SSB_POSSIBLE=y
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_CORE is not set
-+# CONFIG_MFD_SM501 is not set
-+# CONFIG_HTC_PASIC3 is not set
-+# CONFIG_MFD_TMIO is not set
-+# CONFIG_LPC_SCH is not set
-+# CONFIG_REGULATOR is not set
-+# CONFIG_MEDIA_SUPPORT is not set
-+
-+#
-+# Graphics support
-+#
-+CONFIG_VGA_ARB=y
-+CONFIG_VGA_ARB_MAX_GPUS=16
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=y
-+CONFIG_FB=y
-+CONFIG_FIRMWARE_EDID=y
-+# CONFIG_FB_DDC is not set
-+CONFIG_FB_BOOT_VESA_SUPPORT=y
-+CONFIG_FB_CFB_FILLRECT=y
-+CONFIG_FB_CFB_COPYAREA=y
-+CONFIG_FB_CFB_IMAGEBLIT=y
-+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-+# CONFIG_FB_SYS_FILLRECT is not set
-+# CONFIG_FB_SYS_COPYAREA is not set
-+# CONFIG_FB_SYS_IMAGEBLIT is not set
-+# CONFIG_FB_FOREIGN_ENDIAN is not set
-+# CONFIG_FB_SYS_FOPS is not set
-+# CONFIG_FB_SVGALIB is not set
-+# CONFIG_FB_MACMODES is not set
-+# CONFIG_FB_BACKLIGHT is not set
-+CONFIG_FB_MODE_HELPERS=y
-+CONFIG_FB_TILEBLITTING=y
-+
-+#
-+# Frame buffer hardware drivers
-+#
-+# CONFIG_FB_CIRRUS is not set
-+# CONFIG_FB_PM2 is not set
-+# CONFIG_FB_CYBER2000 is not set
-+# CONFIG_FB_ASILIANT is not set
-+# CONFIG_FB_IMSTT is not set
-+# CONFIG_FB_S1D13XXX is not set
-+# CONFIG_FB_NVIDIA is not set
-+# CONFIG_FB_RIVA is not set
-+# CONFIG_FB_MATROX is not set
-+# CONFIG_FB_RADEON is not set
-+# CONFIG_FB_ATY128 is not set
-+# CONFIG_FB_ATY is not set
-+# CONFIG_FB_S3 is not set
-+# CONFIG_FB_SAVAGE is not set
-+CONFIG_FB_SIS=y
-+CONFIG_FB_SIS_300=y
-+CONFIG_FB_SIS_315=y
-+# CONFIG_FB_VIA is not set
-+# CONFIG_FB_NEOMAGIC is not set
-+# CONFIG_FB_KYRO is not set
-+# CONFIG_FB_3DFX is not set
-+# CONFIG_FB_VOODOO1 is not set
-+# CONFIG_FB_VT8623 is not set
-+# CONFIG_FB_TRIDENT is not set
-+# CONFIG_FB_ARK is not set
-+# CONFIG_FB_PM3 is not set
-+# CONFIG_FB_CARMINE is not set
-+# CONFIG_FB_VIRTUAL is not set
-+# CONFIG_FB_METRONOME is not set
-+# CONFIG_FB_MB862XX is not set
-+# CONFIG_FB_BROADSHEET is not set
-+CONFIG_BACKLIGHT_LCD_SUPPORT=y
-+# CONFIG_LCD_CLASS_DEVICE is not set
-+CONFIG_BACKLIGHT_CLASS_DEVICE=y
-+CONFIG_BACKLIGHT_GENERIC=y
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Console display driver support
-+#
-+# CONFIG_VGA_CONSOLE is not set
-+# CONFIG_MDA_CONSOLE is not set
-+CONFIG_DUMMY_CONSOLE=y
-+CONFIG_FRAMEBUFFER_CONSOLE=y
-+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
-+CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
-+CONFIG_FONTS=y
-+CONFIG_FONT_8x8=y
-+CONFIG_FONT_8x16=y
-+CONFIG_FONT_6x11=y
-+CONFIG_FONT_7x14=y
-+CONFIG_FONT_PEARL_8x8=y
-+CONFIG_FONT_ACORN_8x8=y
-+CONFIG_FONT_MINI_4x6=y
-+CONFIG_FONT_SUN8x16=y
-+CONFIG_FONT_SUN12x22=y
-+CONFIG_FONT_10x18=y
-+CONFIG_LOGO=y
-+# CONFIG_LOGO_LINUX_MONO is not set
-+# CONFIG_LOGO_LINUX_VGA16 is not set
-+CONFIG_LOGO_LINUX_CLUT224=y
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+CONFIG_HIDRAW=y
-+
-+#
-+# USB Input Devices
-+#
-+CONFIG_USB_HID=y
-+# CONFIG_HID_PID is not set
-+CONFIG_USB_HIDDEV=y
-+
-+#
-+# Special HID drivers
-+#
-+# CONFIG_HID_3M_PCT is not set
-+CONFIG_HID_A4TECH=y
-+CONFIG_HID_APPLE=y
-+CONFIG_HID_BELKIN=y
-+CONFIG_HID_CHERRY=y
-+CONFIG_HID_CHICONY=y
-+CONFIG_HID_CYPRESS=y
-+CONFIG_HID_DRAGONRISE=y
-+CONFIG_DRAGONRISE_FF=y
-+CONFIG_HID_EZKEY=y
-+CONFIG_HID_KYE=y
-+CONFIG_HID_GYRATION=y
-+CONFIG_HID_TWINHAN=y
-+CONFIG_HID_KENSINGTON=y
-+CONFIG_HID_LOGITECH=y
-+CONFIG_LOGITECH_FF=y
-+CONFIG_LOGIRUMBLEPAD2_FF=y
-+# CONFIG_LOGIG940_FF is not set
-+CONFIG_HID_MICROSOFT=y
-+# CONFIG_HID_MOSART is not set
-+CONFIG_HID_MONTEREY=y
-+CONFIG_HID_NTRIG=y
-+# CONFIG_HID_ORTEK is not set
-+CONFIG_HID_PANTHERLORD=y
-+CONFIG_PANTHERLORD_FF=y
-+CONFIG_HID_PETALYNX=y
-+# CONFIG_HID_QUANTA is not set
-+CONFIG_HID_SAMSUNG=y
-+CONFIG_HID_SONY=y
-+# CONFIG_HID_STANTUM is not set
-+CONFIG_HID_SUNPLUS=y
-+CONFIG_HID_GREENASIA=y
-+CONFIG_GREENASIA_FF=y
-+CONFIG_HID_SMARTJOYPLUS=y
-+CONFIG_SMARTJOYPLUS_FF=y
-+CONFIG_HID_TOPSEED=y
-+CONFIG_HID_THRUSTMASTER=y
-+CONFIG_THRUSTMASTER_FF=y
-+CONFIG_HID_ZEROPLUS=y
-+CONFIG_ZEROPLUS_FF=y
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+CONFIG_USB=y
-+# CONFIG_USB_DEBUG is not set
-+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-+
-+#
-+# Miscellaneous USB options
-+#
-+# CONFIG_USB_DEVICEFS is not set
-+# CONFIG_USB_DEVICE_CLASS is not set
-+CONFIG_USB_DYNAMIC_MINORS=y
-+# CONFIG_USB_OTG is not set
-+CONFIG_USB_OTG_WHITELIST=y
-+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
-+CONFIG_USB_MON=y
-+# CONFIG_USB_WUSB is not set
-+# CONFIG_USB_WUSB_CBAF is not set
-+
-+#
-+# USB Host Controller Drivers
-+#
-+# CONFIG_USB_C67X00_HCD is not set
-+# CONFIG_USB_XHCI_HCD is not set
-+CONFIG_USB_EHCI_HCD=y
-+CONFIG_USB_EHCI_ROOT_HUB_TT=y
-+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-+# CONFIG_USB_OXU210HP_HCD is not set
-+# CONFIG_USB_ISP116X_HCD is not set
-+# CONFIG_USB_ISP1760_HCD is not set
-+# CONFIG_USB_ISP1362_HCD is not set
-+CONFIG_USB_OHCI_HCD=y
-+# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
-+# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
-+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-+# CONFIG_USB_UHCI_HCD is not set
-+# CONFIG_USB_SL811_HCD is not set
-+# CONFIG_USB_R8A66597_HCD is not set
-+# CONFIG_USB_WHCI_HCD is not set
-+# CONFIG_USB_HWA_HCD is not set
-+
-+#
-+# USB Device Class drivers
-+#
-+# CONFIG_USB_ACM is not set
-+# CONFIG_USB_PRINTER is not set
-+# CONFIG_USB_WDM is not set
-+# CONFIG_USB_TMC is not set
-+
-+#
-+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
-+#
-+
-+#
-+# also be needed; see USB_STORAGE Help for more info
-+#
-+CONFIG_USB_STORAGE=y
-+# CONFIG_USB_STORAGE_DEBUG is not set
-+# CONFIG_USB_STORAGE_DATAFAB is not set
-+# CONFIG_USB_STORAGE_FREECOM is not set
-+# CONFIG_USB_STORAGE_ISD200 is not set
-+# CONFIG_USB_STORAGE_USBAT is not set
-+# CONFIG_USB_STORAGE_SDDR09 is not set
-+# CONFIG_USB_STORAGE_SDDR55 is not set
-+# CONFIG_USB_STORAGE_JUMPSHOT is not set
-+# CONFIG_USB_STORAGE_ALAUDA is not set
-+# CONFIG_USB_STORAGE_ONETOUCH is not set
-+# CONFIG_USB_STORAGE_KARMA is not set
-+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
-+CONFIG_USB_LIBUSUAL=y
-+
-+#
-+# USB Imaging devices
-+#
-+# CONFIG_USB_MDC800 is not set
-+# CONFIG_USB_MICROTEK is not set
-+
-+#
-+# USB port drivers
-+#
-+# CONFIG_USB_SERIAL is not set
-+
-+#
-+# USB Miscellaneous drivers
-+#
-+# CONFIG_USB_EMI62 is not set
-+# CONFIG_USB_EMI26 is not set
-+# CONFIG_USB_ADUTUX is not set
-+# CONFIG_USB_SEVSEG is not set
-+# CONFIG_USB_RIO500 is not set
-+# CONFIG_USB_LEGOTOWER is not set
-+# CONFIG_USB_LCD is not set
-+# CONFIG_USB_LED is not set
-+# CONFIG_USB_CYPRESS_CY7C63 is not set
-+# CONFIG_USB_CYTHERM is not set
-+# CONFIG_USB_IDMOUSE is not set
-+# CONFIG_USB_FTDI_ELAN is not set
-+# CONFIG_USB_APPLEDISPLAY is not set
-+# CONFIG_USB_SISUSBVGA is not set
-+# CONFIG_USB_LD is not set
-+# CONFIG_USB_TRANCEVIBRATOR is not set
-+# CONFIG_USB_IOWARRIOR is not set
-+# CONFIG_USB_TEST is not set
-+# CONFIG_USB_ISIGHTFW is not set
-+# CONFIG_USB_GADGET is not set
-+
-+#
-+# OTG and related infrastructure
-+#
-+# CONFIG_NOP_USB_XCEIV is not set
-+# CONFIG_UWB is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_ACCESSIBILITY is not set
-+# CONFIG_INFINIBAND is not set
-+CONFIG_RTC_LIB=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
-+
-+#
-+# RTC interfaces
-+#
-+CONFIG_RTC_INTF_SYSFS=y
-+CONFIG_RTC_INTF_PROC=y
-+CONFIG_RTC_INTF_DEV=y
-+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-+# CONFIG_RTC_DRV_TEST is not set
-+
-+#
-+# SPI RTC drivers
-+#
-+
-+#
-+# Platform RTC drivers
-+#
-+CONFIG_RTC_DRV_CMOS=y
-+# CONFIG_RTC_DRV_DS1286 is not set
-+# CONFIG_RTC_DRV_DS1511 is not set
-+# CONFIG_RTC_DRV_DS1553 is not set
-+# CONFIG_RTC_DRV_DS1742 is not set
-+# CONFIG_RTC_DRV_STK17TA8 is not set
-+# CONFIG_RTC_DRV_M48T86 is not set
-+# CONFIG_RTC_DRV_M48T35 is not set
-+# CONFIG_RTC_DRV_M48T59 is not set
-+# CONFIG_RTC_DRV_MSM6242 is not set
-+# CONFIG_RTC_DRV_BQ4802 is not set
-+# CONFIG_RTC_DRV_RP5C01 is not set
-+# CONFIG_RTC_DRV_V3020 is not set
-+
-+#
-+# on-CPU RTC drivers
-+#
-+# CONFIG_DMADEVICES is not set
-+# CONFIG_AUXDISPLAY is not set
-+# CONFIG_UIO is not set
-+
-+#
-+# TI VLYNQ
-+#
-+CONFIG_STAGING=y
-+# CONFIG_STAGING_EXCLUDE_BUILD is not set
-+# CONFIG_ET131X is not set
-+# CONFIG_USB_IP_COMMON is not set
-+# CONFIG_ECHO is not set
-+# CONFIG_ASUS_OLED is not set
-+# CONFIG_TRANZPORT is not set
-+
-+#
-+# Qualcomm MSM Camera And Video
-+#
-+
-+#
-+# Camera Sensor Selection
-+#
-+# CONFIG_INPUT_GPIO is not set
-+# CONFIG_POHMELFS is not set
-+# CONFIG_FB_UDL is not set
-+# CONFIG_VME_BUS is not set
-+
-+#
-+# RAR Register Driver
-+#
-+# CONFIG_RAR_REGISTER is not set
-+# CONFIG_IIO is not set
-+# CONFIG_RAMZSWAP is not set
-+# CONFIG_BATMAN_ADV is not set
-+# CONFIG_STRIP is not set
-+CONFIG_FB_SM7XX=y
-+# CONFIG_DT3155 is not set
-+# CONFIG_CRYSTALHD is not set
-+CONFIG_MIPS_PLATFORM_DEVICES=y
-+# CONFIG_LEMOTE_YEELOONG2F is not set
-+# CONFIG_LEMOTE_LYNLOONG2F is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+CONFIG_EXT2_FS_XATTR=y
-+# CONFIG_EXT2_FS_POSIX_ACL is not set
-+# CONFIG_EXT2_FS_SECURITY is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+# CONFIG_BTRFS_FS is not set
-+# CONFIG_NILFS2_FS is not set
-+CONFIG_FILE_LOCKING=y
-+CONFIG_FSNOTIFY=y
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# Caches
-+#
-+# CONFIG_FSCACHE is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+CONFIG_FAT_FS=y
-+CONFIG_MSDOS_FS=y
-+CONFIG_VFAT_FS=y
-+CONFIG_FAT_DEFAULT_CODEPAGE=437
-+CONFIG_FAT_DEFAULT_IOCHARSET="utf-8"
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+# CONFIG_MISC_FILESYSTEMS is not set
-+# CONFIG_NETWORK_FILESYSTEMS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+CONFIG_NLS=y
-+CONFIG_NLS_DEFAULT="utf8"
-+CONFIG_NLS_CODEPAGE_437=y
-+# CONFIG_NLS_CODEPAGE_737 is not set
-+# CONFIG_NLS_CODEPAGE_775 is not set
-+# CONFIG_NLS_CODEPAGE_850 is not set
-+# CONFIG_NLS_CODEPAGE_852 is not set
-+# CONFIG_NLS_CODEPAGE_855 is not set
-+# CONFIG_NLS_CODEPAGE_857 is not set
-+# CONFIG_NLS_CODEPAGE_860 is not set
-+# CONFIG_NLS_CODEPAGE_861 is not set
-+# CONFIG_NLS_CODEPAGE_862 is not set
-+# CONFIG_NLS_CODEPAGE_863 is not set
-+# CONFIG_NLS_CODEPAGE_864 is not set
-+# CONFIG_NLS_CODEPAGE_865 is not set
-+# CONFIG_NLS_CODEPAGE_866 is not set
-+# CONFIG_NLS_CODEPAGE_869 is not set
-+# CONFIG_NLS_CODEPAGE_936 is not set
-+# CONFIG_NLS_CODEPAGE_950 is not set
-+# CONFIG_NLS_CODEPAGE_932 is not set
-+# CONFIG_NLS_CODEPAGE_949 is not set
-+# CONFIG_NLS_CODEPAGE_874 is not set
-+# CONFIG_NLS_ISO8859_8 is not set
-+# CONFIG_NLS_CODEPAGE_1250 is not set
-+# CONFIG_NLS_CODEPAGE_1251 is not set
-+CONFIG_NLS_ASCII=y
-+# CONFIG_NLS_ISO8859_1 is not set
-+# CONFIG_NLS_ISO8859_2 is not set
-+# CONFIG_NLS_ISO8859_3 is not set
-+# CONFIG_NLS_ISO8859_4 is not set
-+# CONFIG_NLS_ISO8859_5 is not set
-+# CONFIG_NLS_ISO8859_6 is not set
-+# CONFIG_NLS_ISO8859_7 is not set
-+# CONFIG_NLS_ISO8859_9 is not set
-+# CONFIG_NLS_ISO8859_13 is not set
-+# CONFIG_NLS_ISO8859_14 is not set
-+# CONFIG_NLS_ISO8859_15 is not set
-+# CONFIG_NLS_KOI8_R is not set
-+# CONFIG_NLS_KOI8_U is not set
-+CONFIG_NLS_UTF8=y
-+# CONFIG_DLM is not set
-+
-+#
-+# Kernel hacking
-+#
-+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-+CONFIG_PRINTK_TIME=y
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_FRAME_WARN=1024
-+# CONFIG_MAGIC_SYSRQ is not set
-+CONFIG_STRIP_ASM_SYMS=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_MEMORY_INIT is not set
-+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-+CONFIG_SYSCTL_SYSCALL_CHECK=y
-+CONFIG_HAVE_FUNCTION_TRACER=y
-+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-+CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
-+CONFIG_HAVE_DYNAMIC_FTRACE=y
-+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-+CONFIG_TRACING_SUPPORT=y
-+# CONFIG_FTRACE is not set
-+# CONFIG_SAMPLES is not set
-+CONFIG_HAVE_ARCH_KGDB=y
-+# CONFIG_EARLY_PRINTK is not set
-+# CONFIG_CMDLINE_BOOL is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITYFS is not set
-+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
-+# CONFIG_DEFAULT_SECURITY_SMACK is not set
-+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
-+CONFIG_DEFAULT_SECURITY_DAC=y
-+CONFIG_DEFAULT_SECURITY=""
-+# CONFIG_CRYPTO is not set
-+# CONFIG_BINARY_PRINTF is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+CONFIG_GENERIC_FIND_LAST_BIT=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_T10DIF is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_AUDIT_GENERIC=y
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_LZO_DECOMPRESS=y
-+CONFIG_DECOMPRESS_GZIP=y
-+CONFIG_DECOMPRESS_BZIP2=y
-+CONFIG_DECOMPRESS_LZMA=y
-+CONFIG_DECOMPRESS_LZO=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+CONFIG_NLATTR=y
-diff -Nur linux-2.6.34.orig/arch/mips/include/asm/dma-mapping.h linux-loongson/arch/mips/include/asm/dma-mapping.h
---- linux-2.6.34.orig/arch/mips/include/asm/dma-mapping.h 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/include/asm/dma-mapping.h 2010-05-27 18:12:28.622215656 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/include/asm/dma-mapping.h linux-2.6.35/arch/mips/include/asm/dma-mapping.h
+--- linux-2.6.35.orig/arch/mips/include/asm/dma-mapping.h 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/include/asm/dma-mapping.h 2010-08-05 21:12:33.013620986 +0200
@@ -74,4 +74,8 @@
extern void dma_cache_sync(struct device *dev, void *vaddr, size_t size,
enum dma_data_direction direction);
@@ -2634,58 +10,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/include/asm/dma-mapping.h linux-loongson/a
+ void *cpu_addr, dma_addr_t handle, size_t size);
+
#endif /* _ASM_DMA_MAPPING_H */
-diff -Nur linux-2.6.34.orig/arch/mips/include/asm/ftrace.h linux-loongson/arch/mips/include/asm/ftrace.h
---- linux-2.6.34.orig/arch/mips/include/asm/ftrace.h 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/include/asm/ftrace.h 2010-05-27 18:12:28.642214121 +0200
-@@ -3,7 +3,7 @@
- * License. See the file "COPYING" in the main directory of this archive for
- * more details.
- *
-- * Copyright (C) 2009 DSLab, Lanzhou University, China
-+ * Copyright (C) 2009, 2010 DSLab, Lanzhou University, China
- * Author: Wu Zhangjin <wuzhangjin@gmail.com>
- */
-
-@@ -19,6 +19,14 @@
- extern void _mcount(void);
- #define mcount _mcount
-
-+/*
-+ * If the Instruction Pointer is in module space (0xc0000000), return true;
-+ * otherwise, it is in kernel space (0x80000000), return false.
-+ *
-+ * FIXME: This may not work in some cases.
-+ */
-+#define in_module(ip) (unlikely((ip) & 0x40000000))
-+
- #define safe_load(load, src, dst, error) \
- do { \
- asm volatile ( \
-@@ -83,8 +91,8 @@
-
- struct dyn_arch_ftrace {
- };
--
- #endif /* CONFIG_DYNAMIC_FTRACE */
-+
- #endif /* __ASSEMBLY__ */
- #endif /* CONFIG_FUNCTION_TRACER */
- #endif /* _ASM_MIPS_FTRACE_H */
-diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h linux-loongson/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h
---- linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h 2010-05-27 18:12:28.712212405 +0200
-@@ -52,6 +52,8 @@
- #define cpu_has_tx39_cache 0
- #define cpu_has_userlocal 0
- #define cpu_has_vce 0
-+#define cpu_has_veic 0
-+#define cpu_has_vint 0
- #define cpu_has_vtag_icache 0
- #define cpu_has_watch 1
-
-diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h linux-loongson/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h
---- linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h 2010-05-27 18:12:28.712212405 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h linux-2.6.35/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h
+--- linux-2.6.35.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h 2010-08-05 21:12:33.034870166 +0200
@@ -255,21 +255,12 @@
* IDE STANDARD
*/
@@ -2750,9 +77,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h
+#define SMB_CTRL3 0x06
#endif /* _CS5536_H */
-diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h linux-loongson/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h
---- linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h 2010-05-27 18:12:28.712212405 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h linux-2.6.35/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h
+--- linux-2.6.35.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h 2010-08-05 21:12:33.073620683 +0200
@@ -32,4 +32,9 @@
#define MFGPT0_CNT (MFGPT_BASE + 4)
#define MFGPT0_SETUP (MFGPT_BASE + 6)
@@ -2763,9 +90,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mf
+#define MFGPT2_SETUP (MFGPT_BASE + 0x16)
+
#endif /*!_CS5536_MFGPT_H */
-diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/ec_kb3310b.h linux-loongson/arch/mips/include/asm/mach-loongson/ec_kb3310b.h
---- linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/ec_kb3310b.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/arch/mips/include/asm/mach-loongson/ec_kb3310b.h 2010-05-27 18:12:28.712212405 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/include/asm/mach-loongson/ec_kb3310b.h linux-2.6.35/arch/mips/include/asm/mach-loongson/ec_kb3310b.h
+--- linux-2.6.35.orig/arch/mips/include/asm/mach-loongson/ec_kb3310b.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/arch/mips/include/asm/mach-loongson/ec_kb3310b.h 2010-08-05 21:12:33.114869474 +0200
@@ -0,0 +1,191 @@
+/*
+ * KB3310B Embedded Controller
@@ -2958,48 +285,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/ec_kb3310b.h lin
+#define EVENT_END EVENT_WLAN
+
+#endif /* !_EC_KB3310B_H */
-diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/gpio.h linux-loongson/arch/mips/include/asm/mach-loongson/gpio.h
---- linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/gpio.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/arch/mips/include/asm/mach-loongson/gpio.h 2010-05-27 18:12:28.712212405 +0200
-@@ -0,0 +1,35 @@
-+/*
-+ * STLS2F GPIO Support
-+ *
-+ * Copyright (c) 2008 Richard Liu, STMicroelectronics <richard.liu@st.com>
-+ * Copyright (c) 2008-2010 Arnaud Patard <apatard@mandriva.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#ifndef __STLS2F_GPIO_H
-+#define __STLS2F_GPIO_H
-+
-+#include <asm-generic/gpio.h>
-+
-+extern void gpio_set_value(unsigned gpio, int value);
-+extern int gpio_get_value(unsigned gpio);
-+extern int gpio_cansleep(unsigned gpio);
-+
-+/* The chip can do interrupt
-+ * but it has not been tested and doc not clear
-+ */
-+static inline int gpio_to_irq(int gpio)
-+{
-+ return -EINVAL;
-+}
-+
-+static inline int irq_to_gpio(int gpio)
-+{
-+ return -EINVAL;
-+}
-+
-+#endif /* __STLS2F_GPIO_H */
-diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/loongson.h linux-loongson/arch/mips/include/asm/mach-loongson/loongson.h
---- linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/loongson.h 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/include/asm/mach-loongson/loongson.h 2010-05-27 18:12:28.712212405 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/include/asm/mach-loongson/loongson.h linux-2.6.35/arch/mips/include/asm/mach-loongson/loongson.h
+--- linux-2.6.35.orig/arch/mips/include/asm/mach-loongson/loongson.h 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/include/asm/mach-loongson/loongson.h 2010-08-05 21:12:33.153620689 +0200
@@ -42,6 +42,12 @@
#endif
}
@@ -3013,9 +301,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/loongson.h linux
/* irq operation functions */
extern void bonito_irqdispatch(void);
extern void __init bonito_irq_init(void);
-diff -Nur linux-2.6.34.orig/arch/mips/Kconfig linux-loongson/arch/mips/Kconfig
---- linux-2.6.34.orig/arch/mips/Kconfig 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/Kconfig 2010-05-27 18:12:28.582214052 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/Kconfig linux-2.6.35/arch/mips/Kconfig
+--- linux-2.6.35.orig/arch/mips/Kconfig 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/Kconfig 2010-08-05 21:12:33.193620319 +0200
@@ -180,7 +180,7 @@
config MACH_LOONGSON
@@ -3025,16 +313,16 @@ diff -Nur linux-2.6.34.orig/arch/mips/Kconfig linux-loongson/arch/mips/Kconfig
help
This enables the support of Loongson family of machines.
-@@ -1075,6 +1075,8 @@
- bool "Loongson 2F"
- depends on SYS_HAS_CPU_LOONGSON2F
+@@ -1064,6 +1064,8 @@
+ bool "Loongson 2E"
+ depends on SYS_HAS_CPU_LOONGSON2E
select CPU_LOONGSON2
+ select GENERIC_GPIO
+ select ARCH_REQUIRE_GPIOLIB
help
- The Loongson 2F processor implements the MIPS III instruction set
+ The Loongson 2E processor implements the MIPS III instruction set
with many extensions.
-@@ -1965,6 +1967,18 @@
+@@ -1967,6 +1969,18 @@
source "kernel/time/Kconfig"
#
@@ -3053,9 +341,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/Kconfig linux-loongson/arch/mips/Kconfig
# Timer Interrupt Frequency Configuration
#
-diff -Nur linux-2.6.34.orig/arch/mips/kernel/csrc-r4k.c linux-loongson/arch/mips/kernel/csrc-r4k.c
---- linux-2.6.34.orig/arch/mips/kernel/csrc-r4k.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/kernel/csrc-r4k.c 2010-05-27 18:12:28.882214141 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/kernel/csrc-r4k.c linux-2.6.35/arch/mips/kernel/csrc-r4k.c
+--- linux-2.6.35.orig/arch/mips/kernel/csrc-r4k.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/kernel/csrc-r4k.c 2010-08-05 21:12:33.243617980 +0200
@@ -6,10 +6,66 @@
* Copyright (C) 2007 by Ralf Baechle
*/
@@ -3132,457 +420,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/kernel/csrc-r4k.c linux-loongson/arch/mips
/* Calculate a somewhat reasonable rating value */
clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000;
-diff -Nur linux-2.6.34.orig/arch/mips/kernel/ftrace.c linux-loongson/arch/mips/kernel/ftrace.c
---- linux-2.6.34.orig/arch/mips/kernel/ftrace.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/kernel/ftrace.c 2010-05-27 18:12:28.882214141 +0200
-@@ -2,7 +2,7 @@
- * Code for replacing ftrace calls with jumps.
- *
- * Copyright (C) 2007-2008 Steven Rostedt <srostedt@redhat.com>
-- * Copyright (C) 2009 DSLab, Lanzhou University, China
-+ * Copyright (C) 2009, 2010 DSLab, Lanzhou University, China
- * Author: Wu Zhangjin <wuzhangjin@gmail.com>
- *
- * Thanks goes to Steven Rostedt for writing the original x86 version.
-@@ -15,15 +15,51 @@
- #include <asm/cacheflush.h>
- #include <asm/asm.h>
- #include <asm/asm-offsets.h>
-+#include <asm/uasm.h>
-+
-+#define INSN_S_R_SP 0xafb00000 /* s{d,w} R, offset(sp) */
-
- #ifdef CONFIG_DYNAMIC_FTRACE
-
--#define JAL 0x0c000000 /* jump & link: ip --> ra, jump to target */
--#define ADDR_MASK 0x03ffffff /* op_code|addr : 31...26|25 ....0 */
--#define jump_insn_encode(op_code, addr) \
-- ((unsigned int)((op_code) | (((addr) >> 2) & ADDR_MASK)))
-+/* Before linking, the following instructions are fixed. */
-+#ifdef CONFIG_CPU_LOONGSON2F
-+#define INSN_NOP 0x00200825 /* or at, at, zero */
-+#else
-+#define INSN_NOP 0x00000000 /* nop */
-+#endif
-+#define INSN_B_1F_16 0x10000004 /* b 1f; offset = (16 >> 2) */
-+#define INSN_B_1F_20 0x10000005 /* b 1f; offset = (20 >> 2) */
-+
-+/* After linking, the following instructions are fixed. */
-+static unsigned int insn_jal_ftrace_caller __read_mostly;
-+static unsigned int insn_lui_v1_hi16_mcount __read_mostly;
-+static unsigned int insn_j_ftrace_graph_caller __maybe_unused __read_mostly;
-+
-+/* The following instructions are encoded in the run-time */
-+/* insn: jal func; op_code|addr : 31...26|25 ....0 */
-+#define INSN_JAL(addr) \
-+ ((unsigned int)(0x0c000000 | (((addr) >> 2) & 0x03ffffff)))
-
--static unsigned int ftrace_nop = 0x00000000;
-+static inline void ftrace_dyn_arch_init_insns(void)
-+{
-+ u32 *buf;
-+ unsigned int v1;
-+
-+ /* lui v1, hi16_mcount */
-+ v1 = 3;
-+ buf = (u32 *)&insn_lui_v1_hi16_mcount;
-+ UASM_i_LA_mostly(&buf, v1, MCOUNT_ADDR);
-+
-+ /* jal (ftrace_caller + 8), jump over the first two instruction */
-+ buf = (u32 *)&insn_jal_ftrace_caller;
-+ uasm_i_jal(&buf, (FTRACE_ADDR + 8));
-+
-+#ifdef CONFIG_FUNCTION_GRAPH_TRACER
-+ /* j ftrace_graph_caller */
-+ buf = (u32 *)&insn_j_ftrace_graph_caller;
-+ uasm_i_j(&buf, (unsigned long)ftrace_graph_caller);
-+#endif
-+}
-
- static int ftrace_modify_code(unsigned long ip, unsigned int new_code)
- {
-@@ -31,7 +67,6 @@
-
- /* *(unsigned int *)ip = new_code; */
- safe_store_code(new_code, ip, faulted);
--
- if (unlikely(faulted))
- return -EFAULT;
-
-@@ -40,84 +75,82 @@
- return 0;
- }
-
--static int lui_v1;
--static int jal_mcount;
--
- int ftrace_make_nop(struct module *mod,
- struct dyn_ftrace *rec, unsigned long addr)
- {
- unsigned int new;
-- int faulted;
- unsigned long ip = rec->ip;
-
-- /* We have compiled module with -mlong-calls, but compiled the kernel
-- * without it, we need to cope with them respectively. */
-- if (ip & 0x40000000) {
-- /* record it for ftrace_make_call */
-- if (lui_v1 == 0) {
-- /* lui_v1 = *(unsigned int *)ip; */
-- safe_load_code(lui_v1, ip, faulted);
--
-- if (unlikely(faulted))
-- return -EFAULT;
-- }
--
-- /* lui v1, hi_16bit_of_mcount --> b 1f (0x10000004)
-- * addiu v1, v1, low_16bit_of_mcount
-- * move at, ra
-- * jalr v1
-- * nop
-- * 1f: (ip + 12)
-- */
-- new = 0x10000004;
-- } else {
-- /* record/calculate it for ftrace_make_call */
-- if (jal_mcount == 0) {
-- /* We can record it directly like this:
-- * jal_mcount = *(unsigned int *)ip;
-- * Herein, jump over the first two nop instructions */
-- jal_mcount = jump_insn_encode(JAL, (MCOUNT_ADDR + 8));
-- }
-+ /*
-+ * We have compiled modules with -mlong-calls, but compiled kernel
-+ * without it, therefore, need to cope with them respectively.
-+ *
-+ * For module:
-+ *
-+ * lui v1, hi16_mcount --> b 1f
-+ * addiu v1, v1, lo16_mcount
-+ * move at, ra
-+ * jalr v1
-+ * nop
-+ * 1f: (ip + 16)
-+ * For kernel:
-+ *
-+ * move at, ra
-+ * jal _mcount --> nop
-+ *
-+ * And with the -mmcount-ra-address option, the offset may be 20 for
-+ * leaf fuction and 24 for non-leaf function.
-+ */
-
-- /* move at, ra
-- * jalr v1 --> nop
-- */
-- new = ftrace_nop;
-+ if (!in_module(ip))
-+ new = INSN_NOP;
-+ else {
-+#if defined(KBUILD_MCOUNT_RA_ADDRESS) && defined(CONFIG_32BIT)
-+ new = INSN_B_1F_20;
-+#else
-+ new = INSN_B_1F_16;
-+#endif
- }
-+
- return ftrace_modify_code(ip, new);
- }
-
--static int modified; /* initialized as 0 by default */
--
- int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
- {
- unsigned int new;
- unsigned long ip = rec->ip;
-
-- /* We just need to remove the "b ftrace_stub" at the fist time! */
-- if (modified == 0) {
-- modified = 1;
-- ftrace_modify_code(addr, ftrace_nop);
-- }
-- /* ip, module: 0xc0000000, kernel: 0x80000000 */
-- new = (ip & 0x40000000) ? lui_v1 : jal_mcount;
-+ new = in_module(ip) ? insn_lui_v1_hi16_mcount : insn_jal_ftrace_caller;
-
- return ftrace_modify_code(ip, new);
- }
-
--#define FTRACE_CALL_IP ((unsigned long)(&ftrace_call))
--
- int ftrace_update_ftrace_func(ftrace_func_t func)
- {
- unsigned int new;
-
-- new = jump_insn_encode(JAL, (unsigned long)func);
-+ new = INSN_JAL((unsigned long)func);
-
-- return ftrace_modify_code(FTRACE_CALL_IP, new);
-+ return ftrace_modify_code((unsigned long)(&ftrace_call), new);
- }
-
- int __init ftrace_dyn_arch_init(void *data)
- {
-+ ftrace_dyn_arch_init_insns();
-+
-+ /*
-+ * We are safe to remove the "b ftrace_stub" for the current
-+ * ftrace_caller() is almost empty (only the stack operations), and
-+ * most importantly, the calling to mcount will be disabled later in
-+ * ftrace_init(), then there is no 'big' overhead. And in the future,
-+ * we are hoping the function_trace_stop is initialized as 1 then we
-+ * can eventually remove that 'useless' "b ftrace_stub" and the
-+ * following nop. Currently, although we can call ftrace_stop() to set
-+ * function_trace_stop as 1, but it will change the behavior of the
-+ * Function Tracer.
-+ */
-+ ftrace_modify_code(MCOUNT_ADDR, INSN_NOP);
-+
- /* The return code is retured via data */
- *(unsigned long *)data = 0;
-
-@@ -128,30 +161,24 @@
- #ifdef CONFIG_FUNCTION_GRAPH_TRACER
-
- #ifdef CONFIG_DYNAMIC_FTRACE
--
- extern void ftrace_graph_call(void);
--#define JMP 0x08000000 /* jump to target directly */
--#define CALL_FTRACE_GRAPH_CALLER \
-- jump_insn_encode(JMP, (unsigned long)(&ftrace_graph_caller))
- #define FTRACE_GRAPH_CALL_IP ((unsigned long)(&ftrace_graph_call))
-
- int ftrace_enable_ftrace_graph_caller(void)
- {
- return ftrace_modify_code(FTRACE_GRAPH_CALL_IP,
-- CALL_FTRACE_GRAPH_CALLER);
-+ insn_j_ftrace_graph_caller);
- }
-
- int ftrace_disable_ftrace_graph_caller(void)
- {
-- return ftrace_modify_code(FTRACE_GRAPH_CALL_IP, ftrace_nop);
-+ return ftrace_modify_code(FTRACE_GRAPH_CALL_IP, INSN_NOP);
- }
--
- #endif /* !CONFIG_DYNAMIC_FTRACE */
-
- #ifndef KBUILD_MCOUNT_RA_ADDRESS
--#define S_RA_SP (0xafbf << 16) /* s{d,w} ra, offset(sp) */
--#define S_R_SP (0xafb0 << 16) /* s{d,w} R, offset(sp) */
--#define OFFSET_MASK 0xffff /* stack offset range: 0 ~ PT_SIZE */
-+#define INSN_S_RA_SP 0xafbf0000 /* s{d,w} ra, offset(sp) */
-+#define STACK_OFFSET_MASK 0xffff /* stack offset range: 0 ~ PT_SIZE */
-
- unsigned long ftrace_get_parent_addr(unsigned long self_addr,
- unsigned long parent,
-@@ -162,35 +189,35 @@
- unsigned int code;
- int faulted;
-
-- /* in module or kernel? */
-- if (self_addr & 0x40000000) {
-- /* module: move to the instruction "lui v1, HI_16BIT_OF_MCOUNT" */
-- ip = self_addr - 20;
-- } else {
-- /* kernel: move to the instruction "move ra, at" */
-- ip = self_addr - 12;
-- }
-+ /*
-+ * For module, move the ip from calling site of mcount to the
-+ * instruction "lui v1, hi_16bit_of_mcount"(offset is 20), but for
-+ * kernel, move to the instruction "move ra, at"(offset is 12)
-+ */
-+ ip = self_addr - (in_module(self_addr) ? 20 : 12);
-
-- /* search the text until finding the non-store instruction or "s{d,w}
-- * ra, offset(sp)" instruction */
-+ /*
-+ * search the text until finding the non-store instruction or "s{d,w}
-+ * ra, offset(sp)" instruction
-+ */
- do {
- ip -= 4;
-
- /* get the code at "ip": code = *(unsigned int *)ip; */
- safe_load_code(code, ip, faulted);
--
- if (unlikely(faulted))
- return 0;
-
-- /* If we hit the non-store instruction before finding where the
-+ /*
-+ * If we hit the non-store instruction before finding where the
- * ra is stored, then this is a leaf function and it does not
-- * store the ra on the stack. */
-- if ((code & S_R_SP) != S_R_SP)
-+ * store the ra on the stack.
-+ */
-+ if ((code & INSN_S_R_SP) != INSN_S_R_SP)
- return parent_addr;
-+ } while (((code & INSN_S_RA_SP) != INSN_S_RA_SP));
-
-- } while (((code & S_RA_SP) != S_RA_SP));
--
-- sp = fp + (code & OFFSET_MASK);
-+ sp = fp + (code & STACK_OFFSET_MASK);
-
- /* ra = *(unsigned long *)sp; */
- safe_load_stack(ra, sp, faulted);
-@@ -201,8 +228,7 @@
- return sp;
- return 0;
- }
--
--#endif
-+#endif /* !KBUILD_MCOUNT_RA_ADDRESS */
-
- /*
- * Hook the return address and push it in the stack of return addrs
-@@ -211,16 +237,17 @@
- void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr,
- unsigned long fp)
- {
-+ int faulted;
- unsigned long old;
- struct ftrace_graph_ent trace;
- unsigned long return_hooker = (unsigned long)
- &return_to_handler;
-- int faulted;
-
- if (unlikely(atomic_read(&current->tracing_graph_pause)))
- return;
-
-- /* "parent" is the stack address saved the return address of the caller
-+ /*
-+ * "parent" is the stack address saved the return address of the caller
- * of _mcount.
- *
- * if the gcc < 4.5, a leaf function does not save the return address
-@@ -241,12 +268,14 @@
- if (unlikely(faulted))
- goto out;
- #ifndef KBUILD_MCOUNT_RA_ADDRESS
-- parent = (unsigned long *)ftrace_get_parent_addr(self_addr, old,
-- (unsigned long)parent,
-- fp);
-- /* If fails when getting the stack address of the non-leaf function's
-- * ra, stop function graph tracer and return */
-- if (parent == 0)
-+ parent = (unsigned long *)ftrace_get_parent_addr(
-+ self_addr, old, (unsigned long)parent, fp);
-+
-+ /*
-+ * If fails on getting the stack address of the non-leaf function's ra,
-+ * stop function graph tracer and return
-+ */
-+ if (unlikely(parent == 0))
- goto out;
- #endif
- /* *parent = return_hooker; */
-diff -Nur linux-2.6.34.orig/arch/mips/kernel/mcount.S linux-loongson/arch/mips/kernel/mcount.S
---- linux-2.6.34.orig/arch/mips/kernel/mcount.S 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/kernel/mcount.S 2010-05-27 18:12:28.882214141 +0200
-@@ -6,6 +6,7 @@
- * more details.
- *
- * Copyright (C) 2009 Lemote Inc. & DSLab, Lanzhou University, China
-+ * Copyright (C) 2010 DSLab, Lanzhou University, China
- * Author: Wu Zhangjin <wuzhangjin@gmail.com>
- */
-
-@@ -45,8 +46,6 @@
- PTR_L a5, PT_R9(sp)
- PTR_L a6, PT_R10(sp)
- PTR_L a7, PT_R11(sp)
--#endif
--#ifdef CONFIG_64BIT
- PTR_ADDIU sp, PT_SIZE
- #else
- PTR_ADDIU sp, (PT_SIZE + 8)
-@@ -71,14 +70,14 @@
-
- MCOUNT_SAVE_REGS
- #ifdef KBUILD_MCOUNT_RA_ADDRESS
-- PTR_S t0, PT_R12(sp) /* t0 saved the location of the return address(at) by -mmcount-ra-address */
-+ PTR_S $12, PT_R12(sp) /* save location of parent's return address */
- #endif
-
-- move a0, ra /* arg1: next ip, selfaddr */
-+ move a0, ra /* arg1: self return address */
- .globl ftrace_call
- ftrace_call:
- nop /* a placeholder for the call to a real tracing function */
-- move a1, AT /* arg2: the caller's next ip, parent */
-+ move a1, AT /* arg2: parent's return address */
-
- #ifdef CONFIG_FUNCTION_GRAPH_TRACER
- .globl ftrace_graph_call
-@@ -119,9 +118,9 @@
- static_trace:
- MCOUNT_SAVE_REGS
-
-- move a0, ra /* arg1: next ip, selfaddr */
-+ move a0, ra /* arg1: self return address */
- jalr t2 /* (1) call *ftrace_trace_function */
-- move a1, AT /* arg2: the caller's next ip, parent */
-+ move a1, AT /* arg2: parent's return address */
-
- MCOUNT_RESTORE_REGS
- .globl ftrace_stub
-@@ -134,28 +133,36 @@
- #ifdef CONFIG_FUNCTION_GRAPH_TRACER
-
- NESTED(ftrace_graph_caller, PT_SIZE, ra)
--#ifdef CONFIG_DYNAMIC_FTRACE
-- PTR_L a1, PT_R31(sp) /* load the original ra from the stack */
--#ifdef KBUILD_MCOUNT_RA_ADDRESS
-- PTR_L t0, PT_R12(sp) /* load the original t0 from the stack */
--#endif
--#else
-+#ifndef CONFIG_DYNAMIC_FTRACE
- MCOUNT_SAVE_REGS
-- move a1, ra /* arg2: next ip, selfaddr */
- #endif
-
-+ /* arg1: Get the location of the parent's return address */
- #ifdef KBUILD_MCOUNT_RA_ADDRESS
-- bnez t0, 1f /* non-leaf func: t0 saved the location of the return address */
-+#ifdef CONFIG_DYNAMIC_FTRACE
-+ PTR_L a0, PT_R12(sp)
-+#else
-+ move a0, $12
-+#endif
-+ bnez a0, 1f /* arg1: non-leaf func: stored in $12 */
- nop
-- PTR_LA t0, PT_R1(sp) /* leaf func: get the location of at(old ra) from our own stack */
--1: move a0, t0 /* arg1: the location of the return address */
-+#endif
-+ PTR_LA a0, PT_R1(sp) /* leaf func: the location in current stack */
-+
-+1:
-+ /* arg2: Get self return address */
-+#ifdef CONFIG_DYNAMIC_FTRACE
-+ PTR_L a1, PT_R31(sp)
- #else
-- PTR_LA a0, PT_R1(sp) /* arg1: &AT -> a0 */
-+ move a1, ra
- #endif
-+
- jal prepare_ftrace_return
-+
-+ /* arg3: Get frame pointer of current stack */
- #ifdef CONFIG_FRAME_POINTER
-- move a2, fp /* arg3: frame pointer */
--#else
-+ move a2, fp
-+#else /* ! CONFIG_FRAME_POINTER */
- #ifdef CONFIG_64BIT
- PTR_LA a2, PT_SIZE(sp)
- #else
-diff -Nur linux-2.6.34.orig/arch/mips/kernel/time.c linux-loongson/arch/mips/kernel/time.c
---- linux-2.6.34.orig/arch/mips/kernel/time.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/kernel/time.c 2010-05-27 18:12:28.892213481 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/kernel/time.c linux-2.6.35/arch/mips/kernel/time.c
+--- linux-2.6.35.orig/arch/mips/kernel/time.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/kernel/time.c 2010-08-05 21:12:33.283618090 +0200
@@ -119,6 +119,11 @@
void __init time_init(void)
@@ -3595,9 +435,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/kernel/time.c linux-loongson/arch/mips/ker
plat_time_init();
if (!mips_clockevent_init() || !cpu_has_mfc0_count_bug())
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cmdline.c linux-loongson/arch/mips/loongson/common/cmdline.c
---- linux-2.6.34.orig/arch/mips/loongson/common/cmdline.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/loongson/common/cmdline.c 2010-05-27 18:12:28.902214422 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/loongson/common/cmdline.c linux-2.6.35/arch/mips/loongson/common/cmdline.c
+--- linux-2.6.35.orig/arch/mips/loongson/common/cmdline.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/loongson/common/cmdline.c 2010-08-05 21:12:33.323621053 +0200
@@ -17,10 +17,15 @@
* Free Software Foundation; either version 2 of the License, or (at your
* option) any later version.
@@ -3641,9 +481,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cmdline.c linux-loongson/a
+ /* copy arcs_cmdline into loongson_cmdline */
+ strncpy(loongson_cmdline, arcs_cmdline, COMMAND_LINE_SIZE);
}
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_acc.c linux-loongson/arch/mips/loongson/common/cs5536/cs5536_acc.c
---- linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_acc.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/loongson/common/cs5536/cs5536_acc.c 2010-05-27 18:12:28.902214422 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/loongson/common/cs5536/cs5536_acc.c linux-2.6.35/arch/mips/loongson/common/cs5536/cs5536_acc.c
+--- linux-2.6.35.orig/arch/mips/loongson/common/cs5536/cs5536_acc.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/loongson/common/cs5536/cs5536_acc.c 2010-08-05 21:12:33.363620665 +0200
@@ -18,7 +18,7 @@
void pci_acc_write_reg(int reg, u32 value)
@@ -3754,9 +594,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_acc.c linux-
- return conf_data;
+ return cfg;
}
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ehci.c linux-loongson/arch/mips/loongson/common/cs5536/cs5536_ehci.c
---- linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ehci.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/loongson/common/cs5536/cs5536_ehci.c 2010-05-27 18:12:28.902214422 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/loongson/common/cs5536/cs5536_ehci.c linux-2.6.35/arch/mips/loongson/common/cs5536/cs5536_ehci.c
+--- linux-2.6.35.orig/arch/mips/loongson/common/cs5536/cs5536_ehci.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/loongson/common/cs5536/cs5536_ehci.c 2010-08-05 21:12:33.413620336 +0200
@@ -18,7 +18,7 @@
void pci_ehci_write_reg(int reg, u32 value)
@@ -3766,16 +606,7 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ehci.c linux
switch (reg) {
case PCI_COMMAND:
-@@ -49,6 +49,8 @@
- lo |= SOFT_BAR_EHCI_FLAG;
- _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
- } else if ((value & 0x01) == 0x00) {
-+ _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo);
-+ lo = value;
- _wrmsr(USB_MSR_REG(USB_EHCI), hi, lo);
-
- value &= 0xfffffff0;
-@@ -76,83 +78,81 @@
+@@ -78,83 +78,81 @@
u32 pci_ehci_read_reg(int reg)
{
@@ -3884,9 +715,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ehci.c linux
- return conf_data;
+ return cfg;
}
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ide.c linux-loongson/arch/mips/loongson/common/cs5536/cs5536_ide.c
---- linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ide.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/loongson/common/cs5536/cs5536_ide.c 2010-05-27 18:12:28.902214422 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/loongson/common/cs5536/cs5536_ide.c linux-2.6.35/arch/mips/loongson/common/cs5536/cs5536_ide.c
+--- linux-2.6.35.orig/arch/mips/loongson/common/cs5536/cs5536_ide.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/loongson/common/cs5536/cs5536_ide.c 2010-08-05 21:49:22.613620707 +0200
@@ -18,7 +18,7 @@
void pci_ide_write_reg(int reg, u32 value)
@@ -3896,35 +727,28 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ide.c linux-
switch (reg) {
case PCI_COMMAND:
-@@ -51,6 +51,7 @@
- lo |= SOFT_BAR_IDE_FLAG;
- _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
- } else if (value & 0x01) {
-+ _rdmsr(IDE_MSR_REG(IDE_IO_BAR), &hi, &lo);
- lo = (value & 0xfffffff0) | 0x1;
- _wrmsr(IDE_MSR_REG(IDE_IO_BAR), hi, lo);
-
-@@ -65,21 +66,22 @@
- _rdmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), &hi, &lo);
- lo |= 0x01;
- _wrmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), hi, lo);
-- } else
-+ } else {
-+ _rdmsr(IDE_MSR_REG(IDE_CFG), &hi, &lo);
-+ lo = value;
+@@ -72,26 +72,16 @@
_wrmsr(IDE_MSR_REG(IDE_CFG), hi, lo);
-+ }
+ }
break;
- case PCI_IDE_DTC_REG:
+- _rdmsr(IDE_MSR_REG(IDE_DTC), &hi, &lo);
+- lo = value;
- _wrmsr(IDE_MSR_REG(IDE_DTC), hi, lo);
- break;
- case PCI_IDE_CAST_REG:
+- _rdmsr(IDE_MSR_REG(IDE_CAST), &hi, &lo);
+- lo = value;
- _wrmsr(IDE_MSR_REG(IDE_CAST), hi, lo);
- break;
- case PCI_IDE_ETC_REG:
+- _rdmsr(IDE_MSR_REG(IDE_ETC), &hi, &lo);
+- lo = value;
- _wrmsr(IDE_MSR_REG(IDE_ETC), hi, lo);
- break;
- case PCI_IDE_PM_REG:
+- _rdmsr(IDE_MSR_REG(IDE_INTERNAL_PM), &hi, &lo);
+- lo = value;
- _wrmsr(IDE_MSR_REG(IDE_INTERNAL_PM), hi, lo);
- break;
+#define SET_PCI_IDE_REG(r) \
@@ -3940,7 +764,7 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ide.c linux-
default:
break;
}
-@@ -87,93 +89,82 @@
+@@ -99,94 +89,82 @@
u32 pci_ide_read_reg(int reg)
{
@@ -4045,6 +869,7 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ide.c linux-
- case PCI_IDE_ETC_REG:
- _rdmsr(IDE_MSR_REG(IDE_ETC), &hi, &lo);
- conf_data = lo;
+- break;
- case PCI_IDE_PM_REG:
- _rdmsr(IDE_MSR_REG(IDE_INTERNAL_PM), &hi, &lo);
- conf_data = lo;
@@ -4066,178 +891,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ide.c linux-
- return conf_data;
+ return cfg;
}
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_isa.c linux-loongson/arch/mips/loongson/common/cs5536/cs5536_isa.c
---- linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_isa.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/loongson/common/cs5536/cs5536_isa.c 2010-05-27 18:12:28.902214422 +0200
-@@ -61,7 +61,7 @@
- for (offset = DIVIL_LBAR_SMB; offset <= DIVIL_LBAR_PMS; offset++) {
- _rdmsr(DIVIL_MSR_REG(offset), &hi, &lo);
- hi |= 0x01;
-- _wrmsr(DIVIL_MSR_REG(DIVIL_LBAR_SMB), hi, lo);
-+ _wrmsr(DIVIL_MSR_REG(offset), hi, lo);
- }
- }
-
-@@ -76,7 +76,7 @@
- for (offset = DIVIL_LBAR_SMB; offset <= DIVIL_LBAR_PMS; offset++) {
- _rdmsr(DIVIL_MSR_REG(offset), &hi, &lo);
- hi &= ~0x01;
-- _wrmsr(DIVIL_MSR_REG(DIVIL_LBAR_SMB), hi, lo);
-+ _wrmsr(DIVIL_MSR_REG(offset), hi, lo);
- }
- }
-
-@@ -86,7 +86,7 @@
-
- void pci_isa_write_bar(int n, u32 value)
- {
-- u32 hi = 0, lo = value;
-+ u32 hi, lo;
-
- if (value == PCI_BAR_RANGE_MASK) {
- _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo);
-@@ -95,7 +95,7 @@
- } else if (value & 0x01) {
- /* NATIVE reg */
- hi = 0x0000f001;
-- lo &= bar_space_range[n];
-+ lo = value & bar_space_range[n];
- _wrmsr(divil_msr_reg[n], hi, lo);
-
- /* RCONFx is 4bytes in units for I/O space */
-@@ -112,21 +112,21 @@
-
- u32 pci_isa_read_bar(int n)
- {
-- u32 conf_data = 0;
-+ u32 cfg = 0;
- u32 hi, lo;
-
- _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo);
- if (lo & soft_bar_flag[n]) {
-- conf_data = bar_space_range[n] | PCI_BASE_ADDRESS_SPACE_IO;
-+ cfg = bar_space_range[n] | PCI_BASE_ADDRESS_SPACE_IO;
- lo &= ~soft_bar_flag[n];
- _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
- } else {
- _rdmsr(divil_msr_reg[n], &hi, &lo);
-- conf_data = lo & bar_space_range[n];
-- conf_data |= 0x01;
-- conf_data &= ~0x02;
-+ cfg = lo & bar_space_range[n];
-+ cfg |= 0x01;
-+ cfg &= ~0x02;
- }
-- return conf_data;
-+ return cfg;
- }
-
- /*
-@@ -136,7 +136,7 @@
- */
- void pci_isa_write_reg(int reg, u32 value)
- {
-- u32 hi = 0, lo = value;
-+ u32 hi, lo;
- u32 temp;
-
- switch (reg) {
-@@ -230,45 +230,45 @@
- */
- u32 pci_isa_read_reg(int reg)
- {
-- u32 conf_data = 0;
-+ u32 cfg = 0;
- u32 hi, lo;
-
- switch (reg) {
- case PCI_VENDOR_ID:
-- conf_data =
-- CFG_PCI_VENDOR_ID(CS5536_ISA_DEVICE_ID, CS5536_VENDOR_ID);
-+ cfg = CFG_PCI_VENDOR_ID(CS5536_ISA_DEVICE_ID,
-+ CS5536_VENDOR_ID);
- break;
- case PCI_COMMAND:
- /* we just check the first LBAR for the IO enable bit, */
- /* maybe we should changed later. */
- _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_SMB), &hi, &lo);
- if (hi & 0x01)
-- conf_data |= PCI_COMMAND_IO;
-+ cfg |= PCI_COMMAND_IO;
- break;
- case PCI_STATUS:
-- conf_data |= PCI_STATUS_66MHZ;
-- conf_data |= PCI_STATUS_DEVSEL_MEDIUM;
-- conf_data |= PCI_STATUS_FAST_BACK;
-+ cfg |= PCI_STATUS_66MHZ;
-+ cfg |= PCI_STATUS_DEVSEL_MEDIUM;
-+ cfg |= PCI_STATUS_FAST_BACK;
-
- _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo);
- if (lo & SB_TAS_ERR_FLAG)
-- conf_data |= PCI_STATUS_SIG_TARGET_ABORT;
-+ cfg |= PCI_STATUS_SIG_TARGET_ABORT;
- if (lo & SB_TAR_ERR_FLAG)
-- conf_data |= PCI_STATUS_REC_TARGET_ABORT;
-+ cfg |= PCI_STATUS_REC_TARGET_ABORT;
- if (lo & SB_MAR_ERR_FLAG)
-- conf_data |= PCI_STATUS_REC_MASTER_ABORT;
-+ cfg |= PCI_STATUS_REC_MASTER_ABORT;
- if (lo & SB_PARE_ERR_FLAG)
-- conf_data |= PCI_STATUS_DETECTED_PARITY;
-+ cfg |= PCI_STATUS_DETECTED_PARITY;
- break;
- case PCI_CLASS_REVISION:
- _rdmsr(GLCP_MSR_REG(GLCP_CHIP_REV_ID), &hi, &lo);
-- conf_data = lo & 0x000000ff;
-- conf_data |= (CS5536_ISA_CLASS_CODE << 8);
-+ cfg = lo & 0x000000ff;
-+ cfg |= (CS5536_ISA_CLASS_CODE << 8);
- break;
- case PCI_CACHE_LINE_SIZE:
- _rdmsr(SB_MSR_REG(SB_CTRL), &hi, &lo);
- hi &= 0x000000f8;
-- conf_data = CFG_PCI_CACHE_LINE_SIZE(PCI_BRIDGE_HEADER_TYPE, hi);
-+ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_BRIDGE_HEADER_TYPE, hi);
- break;
- /*
- * we only use the LBAR of DIVIL, no RCONF used.
-@@ -292,25 +292,25 @@
- return pci_isa_read_bar(5);
- break;
- case PCI_CARDBUS_CIS:
-- conf_data = PCI_CARDBUS_CIS_POINTER;
-+ cfg = PCI_CARDBUS_CIS_POINTER;
- break;
- case PCI_SUBSYSTEM_VENDOR_ID:
-- conf_data =
-- CFG_PCI_VENDOR_ID(CS5536_ISA_SUB_ID, CS5536_SUB_VENDOR_ID);
-+ cfg = CFG_PCI_VENDOR_ID(CS5536_ISA_SUB_ID,
-+ CS5536_SUB_VENDOR_ID);
- break;
- case PCI_ROM_ADDRESS:
-- conf_data = PCI_EXPANSION_ROM_BAR;
-+ cfg = PCI_EXPANSION_ROM_BAR;
- break;
- case PCI_CAPABILITY_LIST:
-- conf_data = PCI_CAPLIST_POINTER;
-+ cfg = PCI_CAPLIST_POINTER;
- break;
- case PCI_INTERRUPT_LINE:
- /* no interrupt used here */
-- conf_data = CFG_PCI_INTERRUPT_LINE(0x00, 0x00);
-+ cfg = CFG_PCI_INTERRUPT_LINE(0x00, 0x00);
- break;
- default:
- break;
- }
-
-- return conf_data;
-+ return cfg;
- }
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ohci.c linux-loongson/arch/mips/loongson/common/cs5536/cs5536_ohci.c
---- linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ohci.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/loongson/common/cs5536/cs5536_ohci.c 2010-05-27 18:12:28.902214422 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/loongson/common/cs5536/cs5536_ohci.c linux-2.6.35/arch/mips/loongson/common/cs5536/cs5536_ohci.c
+--- linux-2.6.35.orig/arch/mips/loongson/common/cs5536/cs5536_ohci.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/loongson/common/cs5536/cs5536_ohci.c 2010-08-05 21:12:33.513622309 +0200
@@ -18,7 +18,7 @@
void pci_ohci_write_reg(int reg, u32 value)
@@ -4247,16 +903,7 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ohci.c linux
switch (reg) {
case PCI_COMMAND:
-@@ -49,6 +49,8 @@
- lo |= SOFT_BAR_OHCI_FLAG;
- _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
- } else if ((value & 0x01) == 0x00) {
-+ _rdmsr(USB_MSR_REG(USB_OHCI), &hi, &lo);
-+ lo = value;
- _wrmsr(USB_MSR_REG(USB_OHCI), hi, lo);
-
- value &= 0xfffffff0;
-@@ -71,77 +73,75 @@
+@@ -73,77 +73,75 @@
u32 pci_ohci_read_reg(int reg)
{
@@ -4358,173 +1005,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ohci.c linux
- return conf_data;
+ return cfg;
}
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/gpio.c linux-loongson/arch/mips/loongson/common/gpio.c
---- linux-2.6.34.orig/arch/mips/loongson/common/gpio.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/arch/mips/loongson/common/gpio.c 2010-05-27 18:12:28.902214422 +0200
-@@ -0,0 +1,139 @@
-+/*
-+ * STLS2F GPIO Support
-+ *
-+ * Copyright (c) 2008 Richard Liu, STMicroelectronics <richard.liu@st.com>
-+ * Copyright (c) 2008-2010 Arnaud Patard <apatard@mandriva.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/spinlock.h>
-+#include <linux/err.h>
-+#include <asm/types.h>
-+#include <loongson.h>
-+#include <linux/gpio.h>
-+
-+#define STLS2F_N_GPIO 4
-+#define STLS2F_GPIO_IN_OFFSET 16
-+
-+static DEFINE_SPINLOCK(gpio_lock);
-+
-+int gpio_get_value(unsigned gpio)
-+{
-+ u32 val;
-+ u32 mask;
-+
-+ if (gpio >= STLS2F_N_GPIO)
-+ return __gpio_get_value(gpio);
-+
-+ mask = 1 << (gpio + STLS2F_GPIO_IN_OFFSET);
-+ spin_lock(&gpio_lock);
-+ val = LOONGSON_GPIODATA;
-+ spin_unlock(&gpio_lock);
-+
-+ return ((val & mask) != 0);
-+}
-+EXPORT_SYMBOL(gpio_get_value);
-+
-+void gpio_set_value(unsigned gpio, int state)
-+{
-+ u32 val;
-+ u32 mask;
-+
-+ if (gpio >= STLS2F_N_GPIO) {
-+ __gpio_set_value(gpio, state);
-+ return ;
-+ }
-+
-+ mask = 1 << gpio;
-+
-+ spin_lock(&gpio_lock);
-+ val = LOONGSON_GPIODATA;
-+ if (state)
-+ val |= mask;
-+ else
-+ val &= (~mask);
-+ LOONGSON_GPIODATA = val;
-+ spin_unlock(&gpio_lock);
-+}
-+EXPORT_SYMBOL(gpio_set_value);
-+
-+int gpio_cansleep(unsigned gpio)
-+{
-+ if (gpio < STLS2F_N_GPIO)
-+ return 0;
-+ else
-+ return __gpio_cansleep(gpio);
-+}
-+EXPORT_SYMBOL(gpio_cansleep);
-+
-+static int ls2f_gpio_direction_input(struct gpio_chip *chip, unsigned gpio)
-+{
-+ u32 temp;
-+ u32 mask;
-+
-+ if (gpio >= STLS2F_N_GPIO)
-+ return -EINVAL;
-+
-+ spin_lock(&gpio_lock);
-+ mask = 1 << gpio;
-+ temp = LOONGSON_GPIOIE;
-+ temp |= mask;
-+ LOONGSON_GPIOIE = temp;
-+ spin_unlock(&gpio_lock);
-+
-+ return 0;
-+}
-+
-+static int ls2f_gpio_direction_output(struct gpio_chip *chip,
-+ unsigned gpio, int level)
-+{
-+ u32 temp;
-+ u32 mask;
-+
-+ if (gpio >= STLS2F_N_GPIO)
-+ return -EINVAL;
-+
-+ gpio_set_value(gpio, level);
-+ spin_lock(&gpio_lock);
-+ mask = 1 << gpio;
-+ temp = LOONGSON_GPIOIE;
-+ temp &= (~mask);
-+ LOONGSON_GPIOIE = temp;
-+ spin_unlock(&gpio_lock);
-+
-+ return 0;
-+}
-+
-+static int ls2f_gpio_get_value(struct gpio_chip *chip, unsigned gpio)
-+{
-+ return gpio_get_value(gpio);
-+}
-+
-+static void ls2f_gpio_set_value(struct gpio_chip *chip,
-+ unsigned gpio, int value)
-+{
-+ gpio_set_value(gpio, value);
-+}
-+
-+static struct gpio_chip ls2f_chip = {
-+ .label = "ls2f",
-+ .direction_input = ls2f_gpio_direction_input,
-+ .get = ls2f_gpio_get_value,
-+ .direction_output = ls2f_gpio_direction_output,
-+ .set = ls2f_gpio_set_value,
-+ .base = 0,
-+ .ngpio = STLS2F_N_GPIO,
-+};
-+
-+static int __init ls2f_gpio_setup(void)
-+{
-+ return gpiochip_add(&ls2f_chip);
-+}
-+arch_initcall(ls2f_gpio_setup);
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/Makefile linux-loongson/arch/mips/loongson/common/Makefile
---- linux-2.6.34.orig/arch/mips/loongson/common/Makefile 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/loongson/common/Makefile 2010-05-27 18:12:28.902214422 +0200
-@@ -4,6 +4,7 @@
-
- obj-y += setup.o init.o cmdline.o env.o time.o reset.o irq.o \
- pci.o bonito-irq.o mem.o machtype.o platform.o
-+obj-$(CONFIG_GENERIC_GPIO) += gpio.o
-
- #
- # Serial port support
-@@ -23,3 +24,9 @@
- #
-
- obj-$(CONFIG_LOONGSON_SUSPEND) += pm.o
-+
-+# Enable RTC Class support
-+#
-+# please enable CONFIG_RTC_DRV_CMOS
-+#
-+obj-$(CONFIG_RTC_DRV_CMOS) += rtc.o
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/mtd.c linux-loongson/arch/mips/loongson/common/mtd.c
---- linux-2.6.34.orig/arch/mips/loongson/common/mtd.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/arch/mips/loongson/common/mtd.c 2010-05-27 18:12:28.902214422 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/loongson/common/mtd.c linux-2.6.35/arch/mips/loongson/common/mtd.c
+--- linux-2.6.35.orig/arch/mips/loongson/common/mtd.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/arch/mips/loongson/common/mtd.c 2010-08-05 21:12:33.563620627 +0200
@@ -0,0 +1,91 @@
+/*
+ * Driver for flushing/dumping ROM of PMON on loongson family machines
@@ -4617,56 +1100,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/mtd.c linux-loongson/arch/
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Yanhua <yanh@lemote.com>");
+MODULE_DESCRIPTION("MTD driver for pmon flushing/dumping");
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/rtc.c linux-loongson/arch/mips/loongson/common/rtc.c
---- linux-2.6.34.orig/arch/mips/loongson/common/rtc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/arch/mips/loongson/common/rtc.c 2010-05-27 18:12:28.902214422 +0200
-@@ -0,0 +1,43 @@
-+/*
-+ * Registration of Loongson RTC platform device.
-+ *
-+ * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
-+ * Copyright (C) 2009 Wu Zhangjin <wuzhangjin@gmail.com>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/ioport.h>
-+#include <linux/mc146818rtc.h>
-+#include <linux/platform_device.h>
-+
-+static struct resource rtc_cmos_resource[] = {
-+ {
-+ .start = RTC_PORT(0),
-+ .end = RTC_PORT(1),
-+ .flags = IORESOURCE_IO,
-+ },
-+ {
-+ .start = RTC_IRQ,
-+ .end = RTC_IRQ,
-+ .flags = IORESOURCE_IRQ,
-+ },
-+};
-+
-+static struct platform_device rtc_cmos_device = {
-+ .name = "rtc_cmos",
-+ .id = -1,
-+ .num_resources = ARRAY_SIZE(rtc_cmos_resource),
-+ .resource = rtc_cmos_resource
-+};
-+
-+static __init int rtc_cmos_init(void)
-+{
-+ return platform_device_register(&rtc_cmos_device);
-+}
-+
-+device_initcall(rtc_cmos_init);
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.c linux-loongson/arch/mips/loongson/lemote-2f/ec_kb3310b.c
---- linux-2.6.34.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/loongson/lemote-2f/ec_kb3310b.c 2010-05-27 18:12:28.902214422 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.c linux-2.6.35/arch/mips/loongson/lemote-2f/ec_kb3310b.c
+--- linux-2.6.35.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/loongson/lemote-2f/ec_kb3310b.c 2010-08-05 21:12:33.613622876 +0200
@@ -14,7 +14,7 @@
#include <linux/spinlock.h>
#include <linux/delay.h>
@@ -4701,9 +1137,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.c linux-loon
return -EINVAL;
}
value = inb(EC_DAT_PORT);
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.h linux-loongson/arch/mips/loongson/lemote-2f/ec_kb3310b.h
---- linux-2.6.34.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.h 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/loongson/lemote-2f/ec_kb3310b.h 1970-01-01 01:00:00.000000000 +0100
+diff -Nur linux-2.6.35.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.h linux-2.6.35/arch/mips/loongson/lemote-2f/ec_kb3310b.h
+--- linux-2.6.35.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.h 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/loongson/lemote-2f/ec_kb3310b.h 1970-01-01 01:00:00.000000000 +0100
@@ -1,188 +0,0 @@
-/*
- * KB3310B Embedded Controller
@@ -4893,9 +1329,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.h linux-loon
-};
-
-#endif /* !_EC_KB3310B_H */
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/Makefile linux-loongson/arch/mips/loongson/lemote-2f/Makefile
---- linux-2.6.34.orig/arch/mips/loongson/lemote-2f/Makefile 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/loongson/lemote-2f/Makefile 2010-05-27 18:12:28.902214422 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/loongson/lemote-2f/Makefile linux-2.6.35/arch/mips/loongson/lemote-2f/Makefile
+--- linux-2.6.35.orig/arch/mips/loongson/lemote-2f/Makefile 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/loongson/lemote-2f/Makefile 2010-08-05 21:12:33.653620488 +0200
@@ -2,7 +2,7 @@
# Makefile for lemote loongson2f family machines
#
@@ -4905,9 +1341,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/Makefile linux-loongson
#
# Suspend Support
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/platform.c linux-loongson/arch/mips/loongson/lemote-2f/platform.c
---- linux-2.6.34.orig/arch/mips/loongson/lemote-2f/platform.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/arch/mips/loongson/lemote-2f/platform.c 2010-05-27 18:12:28.902214422 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/loongson/lemote-2f/platform.c linux-2.6.35/arch/mips/loongson/lemote-2f/platform.c
+--- linux-2.6.35.orig/arch/mips/loongson/lemote-2f/platform.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/arch/mips/loongson/lemote-2f/platform.c 2010-08-05 21:12:33.683620719 +0200
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2009 Lemote Inc.
@@ -4957,9 +1393,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/platform.c linux-loongs
+}
+
+arch_initcall(lemote2f_platform_init);
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/pm.c linux-loongson/arch/mips/loongson/lemote-2f/pm.c
---- linux-2.6.34.orig/arch/mips/loongson/lemote-2f/pm.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/loongson/lemote-2f/pm.c 2010-05-27 18:12:28.902214422 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/loongson/lemote-2f/pm.c linux-2.6.35/arch/mips/loongson/lemote-2f/pm.c
+--- linux-2.6.35.orig/arch/mips/loongson/lemote-2f/pm.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/loongson/lemote-2f/pm.c 2010-08-05 21:12:33.723620505 +0200
@@ -23,7 +23,7 @@
#include <loongson.h>
@@ -4978,9 +1414,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/pm.c linux-loongson/arc
if (irq == I8042_KBD_IRQ)
return 1;
-diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/reset.c linux-loongson/arch/mips/loongson/lemote-2f/reset.c
---- linux-2.6.34.orig/arch/mips/loongson/lemote-2f/reset.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/loongson/lemote-2f/reset.c 2010-05-27 18:12:28.902214422 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/loongson/lemote-2f/reset.c linux-2.6.35/arch/mips/loongson/lemote-2f/reset.c
+--- linux-2.6.35.orig/arch/mips/loongson/lemote-2f/reset.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/loongson/lemote-2f/reset.c 2010-08-05 21:12:33.763620406 +0200
@@ -20,7 +20,7 @@
#include <loongson.h>
@@ -4990,9 +1426,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/reset.c linux-loongson/
static void reset_cpu(void)
{
-diff -Nur linux-2.6.34.orig/arch/mips/mm/dma-default.c linux-loongson/arch/mips/mm/dma-default.c
---- linux-2.6.34.orig/arch/mips/mm/dma-default.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/mm/dma-default.c 2010-05-27 18:12:28.932213915 +0200
+diff -Nur linux-2.6.35.orig/arch/mips/mm/dma-default.c linux-2.6.35/arch/mips/mm/dma-default.c
+--- linux-2.6.35.orig/arch/mips/mm/dma-default.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/arch/mips/mm/dma-default.c 2010-08-05 21:12:33.803630014 +0200
@@ -375,3 +375,16 @@
}
@@ -5010,147 +1446,9 @@ diff -Nur linux-2.6.34.orig/arch/mips/mm/dma-default.c linux-loongson/arch/mips/
+ size, vma->vm_page_prot);
+}
+EXPORT_SYMBOL(dma_mmap_coherent);
-diff -Nur linux-2.6.34.orig/arch/mips/oprofile/op_model_loongson2.c linux-loongson/arch/mips/oprofile/op_model_loongson2.c
---- linux-2.6.34.orig/arch/mips/oprofile/op_model_loongson2.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/arch/mips/oprofile/op_model_loongson2.c 2010-05-27 18:12:28.962214357 +0200
-@@ -8,7 +8,6 @@
- * This file is subject to the terms and conditions of the GNU General Public
- * License. See the file "COPYING" in the main directory of this archive
- * for more details.
-- *
- */
- #include <linux/init.h>
- #include <linux/oprofile.h>
-@@ -17,24 +16,18 @@
- #include <loongson.h> /* LOONGSON2_PERFCNT_IRQ */
- #include "op_impl.h"
-
--/*
-- * a patch should be sent to oprofile with the loongson-specific support.
-- * otherwise, the oprofile tool will not recognize this and complain about
-- * "cpu_type 'unset' is not valid".
-- */
- #define LOONGSON2_CPU_TYPE "mips/loongson2"
-
--#define LOONGSON2_COUNTER1_EVENT(event) ((event & 0x0f) << 5)
--#define LOONGSON2_COUNTER2_EVENT(event) ((event & 0x0f) << 9)
--
--#define LOONGSON2_PERFCNT_EXL (1UL << 0)
--#define LOONGSON2_PERFCNT_KERNEL (1UL << 1)
--#define LOONGSON2_PERFCNT_SUPERVISOR (1UL << 2)
--#define LOONGSON2_PERFCNT_USER (1UL << 3)
--#define LOONGSON2_PERFCNT_INT_EN (1UL << 4)
- #define LOONGSON2_PERFCNT_OVERFLOW (1ULL << 31)
-
--/* Loongson2 performance counter register */
-+#define LOONGSON2_PERFCTRL_EXL (1UL << 0)
-+#define LOONGSON2_PERFCTRL_KERNEL (1UL << 1)
-+#define LOONGSON2_PERFCTRL_SUPERVISOR (1UL << 2)
-+#define LOONGSON2_PERFCTRL_USER (1UL << 3)
-+#define LOONGSON2_PERFCTRL_ENABLE (1UL << 4)
-+#define LOONGSON2_PERFCTRL_EVENT(idx, event) \
-+ (((event) & 0x0f) << ((idx) ? 9 : 5))
-+
- #define read_c0_perfctrl() __read_64bit_c0_register($24, 0)
- #define write_c0_perfctrl(val) __write_64bit_c0_register($24, 0, val)
- #define read_c0_perfcnt() __read_64bit_c0_register($25, 0)
-@@ -49,7 +42,12 @@
-
- static char *oprofid = "LoongsonPerf";
- static irqreturn_t loongson2_perfcount_handler(int irq, void *dev_id);
--/* Compute all of the registers in preparation for enabling profiling. */
-+
-+static void reset_counters(void *arg)
-+{
-+ write_c0_perfctrl(0);
-+ write_c0_perfcnt(0);
-+}
-
- static void loongson2_reg_setup(struct op_counter_config *cfg)
- {
-@@ -57,41 +55,38 @@
-
- reg.reset_counter1 = 0;
- reg.reset_counter2 = 0;
-- /* Compute the performance counter ctrl word. */
-- /* For now count kernel and user mode */
-+
-+ /*
-+ * Compute the performance counter ctrl word.
-+ * For now, count kernel and user mode.
-+ */
- if (cfg[0].enabled) {
-- ctrl |= LOONGSON2_COUNTER1_EVENT(cfg[0].event);
-+ ctrl |= LOONGSON2_PERFCTRL_EVENT(0, cfg[0].event);
- reg.reset_counter1 = 0x80000000ULL - cfg[0].count;
- }
-
- if (cfg[1].enabled) {
-- ctrl |= LOONGSON2_COUNTER2_EVENT(cfg[1].event);
-- reg.reset_counter2 = (0x80000000ULL - cfg[1].count);
-+ ctrl |= LOONGSON2_PERFCTRL_EVENT(1, cfg[1].event);
-+ reg.reset_counter2 = 0x80000000ULL - cfg[1].count;
- }
-
- if (cfg[0].enabled || cfg[1].enabled) {
-- ctrl |= LOONGSON2_PERFCNT_EXL | LOONGSON2_PERFCNT_INT_EN;
-+ ctrl |= LOONGSON2_PERFCTRL_EXL | LOONGSON2_PERFCTRL_ENABLE;
- if (cfg[0].kernel || cfg[1].kernel)
-- ctrl |= LOONGSON2_PERFCNT_KERNEL;
-+ ctrl |= LOONGSON2_PERFCTRL_KERNEL;
- if (cfg[0].user || cfg[1].user)
-- ctrl |= LOONGSON2_PERFCNT_USER;
-+ ctrl |= LOONGSON2_PERFCTRL_USER;
- }
-
- reg.ctrl = ctrl;
-
- reg.cnt1_enabled = cfg[0].enabled;
- reg.cnt2_enabled = cfg[1].enabled;
--
- }
-
--/* Program all of the registers in preparation for enabling profiling. */
--
- static void loongson2_cpu_setup(void *args)
- {
-- uint64_t perfcount;
--
-- perfcount = (reg.reset_counter2 << 32) | reg.reset_counter1;
-- write_c0_perfcnt(perfcount);
-+ write_c0_perfcnt((reg.reset_counter2 << 32) | reg.reset_counter1);
- }
-
- static void loongson2_cpu_start(void *args)
-@@ -114,15 +109,8 @@
- struct pt_regs *regs = get_irq_regs();
- int enabled;
-
-- /*
-- * LOONGSON2 defines two 32-bit performance counters.
-- * To avoid a race updating the registers we need to stop the counters
-- * while we're messing with
-- * them ...
-- */
--
- /* Check whether the irq belongs to me */
-- enabled = read_c0_perfctrl() & LOONGSON2_PERFCNT_INT_EN;
-+ enabled = read_c0_perfctrl() & LOONGSON2_PERFCTRL_ENABLE;
- if (!enabled)
- return IRQ_NONE;
- enabled = reg.cnt1_enabled | reg.cnt2_enabled;
-@@ -157,7 +145,7 @@
-
- static void loongson2_exit(void)
- {
-- write_c0_perfctrl(0);
-+ reset_counters(NULL);
- free_irq(LOONGSON2_PERFCNT_IRQ, oprofid);
- }
-
-diff -Nur linux-2.6.34.orig/drivers/ide/ide-iops.c linux-loongson/drivers/ide/ide-iops.c
---- linux-2.6.34.orig/drivers/ide/ide-iops.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/drivers/ide/ide-iops.c 2010-05-27 18:12:36.363472774 +0200
+diff -Nur linux-2.6.35.orig/drivers/ide/ide-iops.c linux-2.6.35/drivers/ide/ide-iops.c
+--- linux-2.6.35.orig/drivers/ide/ide-iops.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/drivers/ide/ide-iops.c 2010-08-05 21:12:33.853620821 +0200
@@ -27,6 +27,8 @@
#include <asm/uaccess.h>
#include <asm/io.h>
@@ -5170,2823 +1468,12 @@ diff -Nur linux-2.6.34.orig/drivers/ide/ide-iops.c linux-loongson/drivers/ide/id
for (list = nien_quirk_list; *list != NULL; list++)
if (strstr(m, *list) != NULL) {
drive->dev_flags |= IDE_DFLAG_NIEN_QUIRK;
-diff -Nur linux-2.6.34.orig/drivers/net/Kconfig linux-loongson/drivers/net/Kconfig
---- linux-2.6.34.orig/drivers/net/Kconfig 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/drivers/net/Kconfig 2010-05-27 18:15:36.182214625 +0200
-@@ -2432,6 +2432,13 @@
- Some boards that use the Discovery chipset are the Momenco
- Ocelot C and Jaguar ATX and Pegasos II.
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/Kconfig linux-2.6.35/drivers/net/wireless/Kconfig
+--- linux-2.6.35.orig/drivers/net/wireless/Kconfig 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/drivers/net/wireless/Kconfig 2010-08-05 21:12:33.893625922 +0200
+@@ -219,6 +219,19 @@
-+config TITAN_GE
-+ bool "PMC-Sierra TITAN Gigabit Ethernet Support"
-+ depends on PMC_YOSEMITE
-+ help
-+ This enables support for the the integrated ethernet of
-+ PMC-Sierra's Titan SoC.
-+
- config XILINX_LL_TEMAC
- tristate "Xilinx LL TEMAC (LocalLink Tri-mode Ethernet MAC) driver"
- select PHYLIB
-diff -Nur linux-2.6.34.orig/drivers/net/Makefile linux-loongson/drivers/net/Makefile
---- linux-2.6.34.orig/drivers/net/Makefile 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/drivers/net/Makefile 2010-05-27 18:15:36.182214625 +0200
-@@ -154,6 +154,8 @@
- obj-$(CONFIG_QLCNIC) += qlcnic/
- obj-$(CONFIG_QLGE) += qlge/
-
-+obj-$(CONFIG_TITAN_GE) += titan_mdio.o titan_ge.o
-+
- obj-$(CONFIG_PPP) += ppp_generic.o
- obj-$(CONFIG_PPP_ASYNC) += ppp_async.o
- obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o
-diff -Nur linux-2.6.34.orig/drivers/net/titan_ge.c linux-loongson/drivers/net/titan_ge.c
---- linux-2.6.34.orig/drivers/net/titan_ge.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/titan_ge.c 2010-05-27 18:12:39.084716399 +0200
-@@ -0,0 +1,2069 @@
-+/*
-+ * drivers/net/titan_ge.c - Driver for Titan ethernet ports
-+ *
-+ * Copyright (C) 2003 PMC-Sierra Inc.
-+ * Author : Manish Lachwani (lachwani@pmc-sierra.com)
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2
-+ * of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ */
-+
-+/*
-+ * The MAC unit of the Titan consists of the following:
-+ *
-+ * -> XDMA Engine to move data to from the memory to the MAC packet FIFO
-+ * -> FIFO is where the incoming and outgoing data is placed
-+ * -> TRTG is the unit that pulls the data from the FIFO for Tx and pushes
-+ * the data into the FIFO for Rx
-+ * -> TMAC is the outgoing MAC interface and RMAC is the incoming.
-+ * -> AFX is the address filtering block
-+ * -> GMII block to communicate with the PHY
-+ *
-+ * Rx will look like the following:
-+ * GMII --> RMAC --> AFX --> TRTG --> Rx FIFO --> XDMA --> CPU memory
-+ *
-+ * Tx will look like the following:
-+ * CPU memory --> XDMA --> Tx FIFO --> TRTG --> TMAC --> GMII
-+ *
-+ * The Titan driver has support for the following performance features:
-+ * -> Rx side checksumming
-+ * -> Jumbo Frames
-+ * -> Interrupt Coalscing
-+ * -> Rx NAPI
-+ * -> SKB Recycling
-+ * -> Transmit/Receive descriptors in SRAM
-+ * -> Fast routing for IP forwarding
-+ */
-+
-+#include <linux/dma-mapping.h>
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/ioport.h>
-+#include <linux/interrupt.h>
-+#include <linux/slab.h>
-+#include <linux/string.h>
-+#include <linux/errno.h>
-+#include <linux/ip.h>
-+#include <linux/init.h>
-+#include <linux/in.h>
-+#include <linux/platform_device.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/skbuff.h>
-+#include <linux/mii.h>
-+#include <linux/delay.h>
-+#include <linux/skbuff.h>
-+#include <linux/prefetch.h>
-+
-+/* For MII specifc registers, titan_mdio.h should be included */
-+#include <net/ip.h>
-+
-+#include <asm/bitops.h>
-+#include <asm/io.h>
-+#include <asm/types.h>
-+#include <asm/pgtable.h>
-+#include <asm/system.h>
-+#include <asm/titan_dep.h>
-+
-+#include "titan_ge.h"
-+#include "titan_mdio.h"
-+
-+/* Static Function Declarations */
-+static int titan_ge_eth_open(struct net_device *);
-+static void titan_ge_eth_stop(struct net_device *);
-+static struct net_device_stats *titan_ge_get_stats(struct net_device *);
-+static int titan_ge_init_rx_desc_ring(titan_ge_port_info *, int, int,
-+ unsigned long, unsigned long,
-+ unsigned long);
-+static int titan_ge_init_tx_desc_ring(titan_ge_port_info *, int,
-+ unsigned long, unsigned long);
-+
-+static int titan_ge_open(struct net_device *);
-+static int titan_ge_start_xmit(struct sk_buff *, struct net_device *);
-+static int titan_ge_stop(struct net_device *);
-+
-+static unsigned long titan_ge_tx_coal(unsigned long, int);
-+
-+static void titan_ge_port_reset(unsigned int);
-+static int titan_ge_free_tx_queue(titan_ge_port_info *);
-+static int titan_ge_rx_task(struct net_device *, titan_ge_port_info *);
-+static int titan_ge_port_start(struct net_device *, titan_ge_port_info *);
-+
-+static int titan_ge_return_tx_desc(titan_ge_port_info *, int);
-+
-+/*
-+ * Some configuration for the FIFO and the XDMA channel needs
-+ * to be done only once for all the ports. This flag controls
-+ * that
-+ */
-+static unsigned long config_done;
-+
-+/*
-+ * One time out of memory flag
-+ */
-+static unsigned int oom_flag;
-+
-+static int titan_ge_poll(struct net_device *netdev, int *budget);
-+
-+static int titan_ge_receive_queue(struct net_device *, unsigned int);
-+
-+static struct platform_device *titan_ge_device[3];
-+
-+/* MAC Address */
-+extern unsigned char titan_ge_mac_addr_base[6];
-+
-+unsigned long titan_ge_base;
-+static unsigned long titan_ge_sram;
-+
-+static char titan_string[] = "titan";
-+
-+/*
-+ * The Titan GE has two alignment requirements:
-+ * -> skb->data to be cacheline aligned (32 byte)
-+ * -> IP header alignment to 16 bytes
-+ *
-+ * The latter is not implemented. So, that results in an extra copy on
-+ * the Rx. This is a big performance hog. For the former case, the
-+ * dev_alloc_skb() has been replaced with titan_ge_alloc_skb(). The size
-+ * requested is calculated:
-+ *
-+ * Ethernet Frame Size : 1518
-+ * Ethernet Header : 14
-+ * Future Titan change for IP header alignment : 2
-+ *
-+ * Hence, we allocate (1518 + 14 + 2+ 64) = 1580 bytes. For IP header
-+ * alignment, we use skb_reserve().
-+ */
-+
-+#define ALIGNED_RX_SKB_ADDR(addr) \
-+ ((((unsigned long)(addr) + (64UL - 1UL)) \
-+ & ~(64UL - 1UL)) - (unsigned long)(addr))
-+
-+#define titan_ge_alloc_skb(__length, __gfp_flags) \
-+({ struct sk_buff *__skb; \
-+ __skb = alloc_skb((__length) + 64, (__gfp_flags)); \
-+ if(__skb) { \
-+ int __offset = (int) ALIGNED_RX_SKB_ADDR(__skb->data); \
-+ if(__offset) \
-+ skb_reserve(__skb, __offset); \
-+ } \
-+ __skb; \
-+})
-+
-+/*
-+ * Configure the GMII block of the Titan based on what the PHY tells us
-+ */
-+static void titan_ge_gmii_config(int port_num)
-+{
-+ unsigned int reg_data = 0, phy_reg;
-+ int err;
-+
-+ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg);
-+
-+ if (err == TITAN_GE_MDIO_ERROR) {
-+ printk(KERN_ERR
-+ "Could not read PHY control register 0x11 \n");
-+ printk(KERN_ERR
-+ "Setting speed to 1000 Mbps and Duplex to Full \n");
-+
-+ return;
-+ }
-+
-+ err = titan_ge_mdio_write(port_num, TITAN_GE_MDIO_PHY_IE, 0);
-+
-+ if (phy_reg & 0x8000) {
-+ if (phy_reg & 0x2000) {
-+ /* Full Duplex and 1000 Mbps */
-+ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE +
-+ (port_num << 12)), 0x201);
-+ } else {
-+ /* Half Duplex and 1000 Mbps */
-+ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE +
-+ (port_num << 12)), 0x2201);
-+ }
-+ }
-+ if (phy_reg & 0x4000) {
-+ if (phy_reg & 0x2000) {
-+ /* Full Duplex and 100 Mbps */
-+ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE +
-+ (port_num << 12)), 0x100);
-+ } else {
-+ /* Half Duplex and 100 Mbps */
-+ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE +
-+ (port_num << 12)), 0x2100);
-+ }
-+ }
-+ reg_data = TITAN_GE_READ(TITAN_GE_GMII_CONFIG_GENERAL +
-+ (port_num << 12));
-+ reg_data |= 0x3;
-+ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_GENERAL +
-+ (port_num << 12)), reg_data);
-+}
-+
-+/*
-+ * Enable the TMAC if it is not
-+ */
-+static void titan_ge_enable_tx(unsigned int port_num)
-+{
-+ unsigned long reg_data;
-+
-+ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12));
-+ if (!(reg_data & 0x8000)) {
-+ printk("TMAC disabled for port %d!! \n", port_num);
-+
-+ reg_data |= 0x0001; /* Enable TMAC */
-+ reg_data |= 0x4000; /* CRC Check Enable */
-+ reg_data |= 0x2000; /* Padding enable */
-+ reg_data |= 0x0800; /* CRC Add enable */
-+ reg_data |= 0x0080; /* PAUSE frame */
-+
-+ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 +
-+ (port_num << 12)), reg_data);
-+ }
-+}
-+
-+/*
-+ * Tx Timeout function
-+ */
-+static void titan_ge_tx_timeout(struct net_device *netdev)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+
-+ printk(KERN_INFO "%s: TX timeout ", netdev->name);
-+ printk(KERN_INFO "Resetting card \n");
-+
-+ /* Do the reset outside of interrupt context */
-+ schedule_work(&titan_ge_eth->tx_timeout_task);
-+}
-+
-+/*
-+ * Update the AFX tables for UC and MC for slice 0 only
-+ */
-+static void titan_ge_update_afx(titan_ge_port_info * titan_ge_eth)
-+{
-+ int port = titan_ge_eth->port_num;
-+ unsigned int i;
-+ volatile unsigned long reg_data = 0;
-+ u8 p_addr[6];
-+
-+ memcpy(p_addr, titan_ge_eth->port_mac_addr, 6);
-+
-+ /* Set the MAC address here for TMAC and RMAC */
-+ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port << 12)),
-+ ((p_addr[5] << 8) | p_addr[4]));
-+ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port << 12)),
-+ ((p_addr[3] << 8) | p_addr[2]));
-+ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port << 12)),
-+ ((p_addr[1] << 8) | p_addr[0]));
-+
-+ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port << 12)),
-+ ((p_addr[5] << 8) | p_addr[4]));
-+ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port << 12)),
-+ ((p_addr[3] << 8) | p_addr[2]));
-+ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port << 12)),
-+ ((p_addr[1] << 8) | p_addr[0]));
-+
-+ TITAN_GE_WRITE((0x112c | (port << 12)), 0x1);
-+ /* Configure the eight address filters */
-+ for (i = 0; i < 8; i++) {
-+ /* Select each of the eight filters */
-+ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 +
-+ (port << 12)), i);
-+
-+ /* Configure the match */
-+ reg_data = 0x9; /* Forward Enable Bit */
-+ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 +
-+ (port << 12)), reg_data);
-+
-+ /* Finally, AFX Exact Match Address Registers */
-+ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_LOW + (port << 12)),
-+ ((p_addr[1] << 8) | p_addr[0]));
-+ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_MID + (port << 12)),
-+ ((p_addr[3] << 8) | p_addr[2]));
-+ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_HIGH + (port << 12)),
-+ ((p_addr[5] << 8) | p_addr[4]));
-+
-+ /* VLAN id set to 0 */
-+ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_VID +
-+ (port << 12)), 0);
-+ }
-+}
-+
-+/*
-+ * Actual Routine to reset the adapter when the timeout occurred
-+ */
-+static void titan_ge_tx_timeout_task(struct net_device *netdev)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+ int port = titan_ge_eth->port_num;
-+
-+ printk("Titan GE: Transmit timed out. Resetting ... \n");
-+
-+ /* Dump debug info */
-+ printk(KERN_ERR "TRTG cause : %x \n",
-+ TITAN_GE_READ(0x100c + (port << 12)));
-+
-+ /* Fix this for the other ports */
-+ printk(KERN_ERR "FIFO cause : %x \n", TITAN_GE_READ(0x482c));
-+ printk(KERN_ERR "IE cause : %x \n", TITAN_GE_READ(0x0040));
-+ printk(KERN_ERR "XDMA GDI ERROR : %x \n",
-+ TITAN_GE_READ(0x5008 + (port << 8)));
-+ printk(KERN_ERR "CHANNEL ERROR: %x \n",
-+ TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT
-+ + (port << 8)));
-+
-+ netif_device_detach(netdev);
-+ titan_ge_port_reset(titan_ge_eth->port_num);
-+ titan_ge_port_start(netdev, titan_ge_eth);
-+ netif_device_attach(netdev);
-+}
-+
-+/*
-+ * Change the MTU of the Ethernet Device
-+ */
-+static int titan_ge_change_mtu(struct net_device *netdev, int new_mtu)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+ unsigned long flags;
-+
-+ if ((new_mtu > 9500) || (new_mtu < 64))
-+ return -EINVAL;
-+
-+ spin_lock_irqsave(&titan_ge_eth->lock, flags);
-+
-+ netdev->mtu = new_mtu;
-+
-+ /* Now we have to reopen the interface so that SKBs with the new
-+ * size will be allocated */
-+
-+ if (netif_running(netdev)) {
-+ titan_ge_eth_stop(netdev);
-+
-+ if (titan_ge_eth_open(netdev) != TITAN_OK) {
-+ printk(KERN_ERR
-+ "%s: Fatal error on opening device\n",
-+ netdev->name);
-+ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
-+ return -1;
-+ }
-+ }
-+
-+ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
-+ return 0;
-+}
-+
-+/*
-+ * Titan Gbe Interrupt Handler. All the three ports send interrupt to one line
-+ * only. Once an interrupt is triggered, figure out the port and then check
-+ * the channel.
-+ */
-+static irqreturn_t titan_ge_int_handler(int irq, void *dev_id)
-+{
-+ struct net_device *netdev = (struct net_device *) dev_id;
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+ unsigned int port_num = titan_ge_eth->port_num;
-+ unsigned int reg_data;
-+ unsigned int eth_int_cause_error = 0, is;
-+ unsigned long eth_int_cause1;
-+ int err = 0;
-+#ifdef CONFIG_SMP
-+ unsigned long eth_int_cause2;
-+#endif
-+
-+ /* Ack the CPU interrupt */
-+ switch (port_num) {
-+ case 0:
-+ is = OCD_READ(RM9000x2_OCD_INTP0STATUS1);
-+ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR1, is);
-+
-+#ifdef CONFIG_SMP
-+ is = OCD_READ(RM9000x2_OCD_INTP1STATUS1);
-+ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR1, is);
-+#endif
-+ break;
-+
-+ case 1:
-+ is = OCD_READ(RM9000x2_OCD_INTP0STATUS0);
-+ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR0, is);
-+
-+#ifdef CONFIG_SMP
-+ is = OCD_READ(RM9000x2_OCD_INTP1STATUS0);
-+ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR0, is);
-+#endif
-+ break;
-+
-+ case 2:
-+ is = OCD_READ(RM9000x2_OCD_INTP0STATUS4);
-+ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR4, is);
-+
-+#ifdef CONFIG_SMP
-+ is = OCD_READ(RM9000x2_OCD_INTP1STATUS4);
-+ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR4, is);
-+#endif
-+ }
-+
-+ eth_int_cause1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A);
-+#ifdef CONFIG_SMP
-+ eth_int_cause2 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_B);
-+#endif
-+
-+ /* Spurious interrupt */
-+#ifdef CONFIG_SMP
-+ if ( (eth_int_cause1 == 0) && (eth_int_cause2 == 0)) {
-+#else
-+ if (eth_int_cause1 == 0) {
-+#endif
-+ eth_int_cause_error = TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT +
-+ (port_num << 8));
-+
-+ if (eth_int_cause_error == 0)
-+ return IRQ_NONE;
-+ }
-+
-+ /* Handle Tx first. No need to ack interrupts */
-+#ifdef CONFIG_SMP
-+ if ( (eth_int_cause1 & 0x20202) ||
-+ (eth_int_cause2 & 0x20202) )
-+#else
-+ if (eth_int_cause1 & 0x20202)
-+#endif
-+ titan_ge_free_tx_queue(titan_ge_eth);
-+
-+ /* Handle the Rx next */
-+#ifdef CONFIG_SMP
-+ if ( (eth_int_cause1 & 0x10101) ||
-+ (eth_int_cause2 & 0x10101)) {
-+#else
-+ if (eth_int_cause1 & 0x10101) {
-+#endif
-+ if (netif_rx_schedule_prep(netdev)) {
-+ unsigned int ack;
-+
-+ ack = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE);
-+ /* Disable Tx and Rx both */
-+ if (port_num == 0)
-+ ack &= ~(0x3);
-+ if (port_num == 1)
-+ ack &= ~(0x300);
-+
-+ if (port_num == 2)
-+ ack &= ~(0x30000);
-+
-+ /* Interrupts have been disabled */
-+ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, ack);
-+
-+ __netif_rx_schedule(netdev);
-+ }
-+ }
-+
-+ /* Handle error interrupts */
-+ if (eth_int_cause_error && (eth_int_cause_error != 0x2)) {
-+ printk(KERN_ERR
-+ "XDMA Channel Error : %x on port %d\n",
-+ eth_int_cause_error, port_num);
-+
-+ printk(KERN_ERR
-+ "XDMA GDI Hardware error : %x on port %d\n",
-+ TITAN_GE_READ(0x5008 + (port_num << 8)), port_num);
-+
-+ printk(KERN_ERR
-+ "XDMA currently has %d Rx descriptors \n",
-+ TITAN_GE_READ(0x5048 + (port_num << 8)));
-+
-+ printk(KERN_ERR
-+ "XDMA currently has prefetcted %d Rx descriptors \n",
-+ TITAN_GE_READ(0x505c + (port_num << 8)));
-+
-+ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT +
-+ (port_num << 8)), eth_int_cause_error);
-+ }
-+
-+ /*
-+ * PHY interrupt to inform abt the changes. Reading the
-+ * PHY Status register will clear the interrupt
-+ */
-+ if ((!(eth_int_cause1 & 0x30303)) &&
-+ (eth_int_cause_error == 0)) {
-+ err =
-+ titan_ge_mdio_read(port_num,
-+ TITAN_GE_MDIO_PHY_IS, &reg_data);
-+
-+ if (reg_data & 0x0400) {
-+ /* Link status change */
-+ titan_ge_mdio_read(port_num,
-+ TITAN_GE_MDIO_PHY_STATUS, &reg_data);
-+ if (!(reg_data & 0x0400)) {
-+ /* Link is down */
-+ netif_carrier_off(netdev);
-+ netif_stop_queue(netdev);
-+ } else {
-+ /* Link is up */
-+ netif_carrier_on(netdev);
-+ netif_wake_queue(netdev);
-+
-+ /* Enable the queue */
-+ titan_ge_enable_tx(port_num);
-+ }
-+ }
-+ }
-+
-+ return IRQ_HANDLED;
-+}
-+
-+/*
-+ * Multicast and Promiscuous mode set. The
-+ * set_multi entry point is called whenever the
-+ * multicast address list or the network interface
-+ * flags are updated.
-+ */
-+static void titan_ge_set_multi(struct net_device *netdev)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+ unsigned int port_num = titan_ge_eth->port_num;
-+ unsigned long reg_data;
-+
-+ reg_data = TITAN_GE_READ(TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 +
-+ (port_num << 12));
-+
-+ if (netdev->flags & IFF_PROMISC) {
-+ reg_data |= 0x2;
-+ }
-+ else if (netdev->flags & IFF_ALLMULTI) {
-+ reg_data |= 0x01;
-+ reg_data |= 0x400; /* Use the 64-bit Multicast Hash bin */
-+ }
-+ else {
-+ reg_data = 0x2;
-+ }
-+
-+ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 +
-+ (port_num << 12)), reg_data);
-+ if (reg_data & 0x01) {
-+ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_LOW +
-+ (port_num << 12)), 0xffff);
-+ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDLOW +
-+ (port_num << 12)), 0xffff);
-+ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDHI +
-+ (port_num << 12)), 0xffff);
-+ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_HI +
-+ (port_num << 12)), 0xffff);
-+ }
-+}
-+
-+/*
-+ * Open the network device
-+ */
-+static int titan_ge_open(struct net_device *netdev)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+ unsigned int port_num = titan_ge_eth->port_num;
-+ unsigned int irq = TITAN_ETH_PORT_IRQ - port_num;
-+ int retval;
-+
-+ retval = request_irq(irq, titan_ge_int_handler,
-+ SA_INTERRUPT | SA_SAMPLE_RANDOM , netdev->name, netdev);
-+
-+ if (retval != 0) {
-+ printk(KERN_ERR "Cannot assign IRQ number to TITAN GE \n");
-+ return -1;
-+ }
-+
-+ netdev->irq = irq;
-+ printk(KERN_INFO "Assigned IRQ %d to port %d\n", irq, port_num);
-+
-+ spin_lock_irq(&(titan_ge_eth->lock));
-+
-+ if (titan_ge_eth_open(netdev) != TITAN_OK) {
-+ spin_unlock_irq(&(titan_ge_eth->lock));
-+ printk("%s: Error opening interface \n", netdev->name);
-+ free_irq(netdev->irq, netdev);
-+ return -EBUSY;
-+ }
-+
-+ spin_unlock_irq(&(titan_ge_eth->lock));
-+
-+ return 0;
-+}
-+
-+/*
-+ * Allocate the SKBs for the Rx ring. Also used
-+ * for refilling the queue
-+ */
-+static int titan_ge_rx_task(struct net_device *netdev,
-+ titan_ge_port_info *titan_ge_port)
-+{
-+ struct device *device = &titan_ge_device[titan_ge_port->port_num]->dev;
-+ volatile titan_ge_rx_desc *rx_desc;
-+ struct sk_buff *skb;
-+ int rx_used_desc;
-+ int count = 0;
-+
-+ while (titan_ge_port->rx_ring_skbs < titan_ge_port->rx_ring_size) {
-+
-+ /* First try to get the skb from the recycler */
-+#ifdef TITAN_GE_JUMBO_FRAMES
-+ skb = titan_ge_alloc_skb(TITAN_GE_JUMBO_BUFSIZE, GFP_ATOMIC);
-+#else
-+ skb = titan_ge_alloc_skb(TITAN_GE_STD_BUFSIZE, GFP_ATOMIC);
-+#endif
-+ if (unlikely(!skb)) {
-+ /* OOM, set the flag */
-+ printk("OOM \n");
-+ oom_flag = 1;
-+ break;
-+ }
-+ count++;
-+ skb->dev = netdev;
-+
-+ titan_ge_port->rx_ring_skbs++;
-+
-+ rx_used_desc = titan_ge_port->rx_used_desc_q;
-+ rx_desc = &(titan_ge_port->rx_desc_area[rx_used_desc]);
-+
-+#ifdef TITAN_GE_JUMBO_FRAMES
-+ rx_desc->buffer_addr = dma_map_single(device, skb->data,
-+ TITAN_GE_JUMBO_BUFSIZE - 2, DMA_FROM_DEVICE);
-+#else
-+ rx_desc->buffer_addr = dma_map_single(device, skb->data,
-+ TITAN_GE_STD_BUFSIZE - 2, DMA_FROM_DEVICE);
-+#endif
-+
-+ titan_ge_port->rx_skb[rx_used_desc] = skb;
-+ rx_desc->cmd_sts = TITAN_GE_RX_BUFFER_OWNED;
-+
-+ titan_ge_port->rx_used_desc_q =
-+ (rx_used_desc + 1) % TITAN_GE_RX_QUEUE;
-+ }
-+
-+ return count;
-+}
-+
-+/*
-+ * Actual init of the Tital GE port. There is one register for
-+ * the channel configuration
-+ */
-+static void titan_port_init(struct net_device *netdev,
-+ titan_ge_port_info * titan_ge_eth)
-+{
-+ unsigned long reg_data;
-+
-+ titan_ge_port_reset(titan_ge_eth->port_num);
-+
-+ /* First reset the TMAC */
-+ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG);
-+ reg_data |= 0x80000000;
-+ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data);
-+
-+ udelay(30);
-+
-+ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG);
-+ reg_data &= ~(0xc0000000);
-+ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data);
-+
-+ /* Now reset the RMAC */
-+ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG);
-+ reg_data |= 0x00080000;
-+ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data);
-+
-+ udelay(30);
-+
-+ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG);
-+ reg_data &= ~(0x000c0000);
-+ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data);
-+}
-+
-+/*
-+ * Start the port. All the hardware specific configuration
-+ * for the XDMA, Tx FIFO, Rx FIFO, TMAC, RMAC, TRTG and AFX
-+ * go here
-+ */
-+static int titan_ge_port_start(struct net_device *netdev,
-+ titan_ge_port_info * titan_port)
-+{
-+ volatile unsigned long reg_data, reg_data1;
-+ int port_num = titan_port->port_num;
-+ int count = 0;
-+ unsigned long reg_data_1;
-+
-+ if (config_done == 0) {
-+ reg_data = TITAN_GE_READ(0x0004);
-+ reg_data |= 0x100;
-+ TITAN_GE_WRITE(0x0004, reg_data);
-+
-+ reg_data &= ~(0x100);
-+ TITAN_GE_WRITE(0x0004, reg_data);
-+
-+ /* Turn on GMII/MII mode and turn off TBI mode */
-+ reg_data = TITAN_GE_READ(TITAN_GE_TSB_CTRL_1);
-+ reg_data |= 0x00000700;
-+ reg_data &= ~(0x00800000); /* Fencing */
-+
-+ TITAN_GE_WRITE(0x000c, 0x00001100);
-+
-+ TITAN_GE_WRITE(TITAN_GE_TSB_CTRL_1, reg_data);
-+
-+ /* Set the CPU Resource Limit register */
-+ TITAN_GE_WRITE(0x00f8, 0x8);
-+
-+ /* Be conservative when using the BIU buffers */
-+ TITAN_GE_WRITE(0x0068, 0x4);
-+ }
-+
-+ titan_port->tx_threshold = 0;
-+ titan_port->rx_threshold = 0;
-+
-+ /* We need to write the descriptors for Tx and Rx */
-+ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_TX_DESC + (port_num << 8)),
-+ (unsigned long) titan_port->tx_dma);
-+ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_RX_DESC + (port_num << 8)),
-+ (unsigned long) titan_port->rx_dma);
-+
-+ if (config_done == 0) {
-+ /* Step 1: XDMA config */
-+ reg_data = TITAN_GE_READ(TITAN_GE_XDMA_CONFIG);
-+ reg_data &= ~(0x80000000); /* clear reset */
-+ reg_data |= 0x1 << 29; /* sparse tx descriptor spacing */
-+ reg_data |= 0x1 << 28; /* sparse rx descriptor spacing */
-+ reg_data |= (0x1 << 23) | (0x1 << 24); /* Descriptor Coherency */
-+ reg_data |= (0x1 << 21) | (0x1 << 22); /* Data Coherency */
-+ TITAN_GE_WRITE(TITAN_GE_XDMA_CONFIG, reg_data);
-+ }
-+
-+ /* IR register for the XDMA */
-+ reg_data = TITAN_GE_READ(TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8));
-+ reg_data |= 0x80068000; /* No Rx_OOD */
-+ TITAN_GE_WRITE((TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)), reg_data);
-+
-+ /* Start the Tx and Rx XDMA controller */
-+ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + (port_num << 8));
-+ reg_data &= 0x4fffffff; /* Clear tx reset */
-+ reg_data &= 0xfff4ffff; /* Clear rx reset */
-+
-+#ifdef TITAN_GE_JUMBO_FRAMES
-+ reg_data |= 0xa0 | 0x30030000;
-+#else
-+ reg_data |= 0x40 | 0x20030000;
-+#endif
-+
-+#ifndef CONFIG_SMP
-+ reg_data &= ~(0x10);
-+ reg_data |= 0x0f; /* All of the packet */
-+#endif
-+
-+ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)), reg_data);
-+
-+ /* Rx desc count */
-+ count = titan_ge_rx_task(netdev, titan_port);
-+ TITAN_GE_WRITE((0x5048 + (port_num << 8)), count);
-+ count = TITAN_GE_READ(0x5048 + (port_num << 8));
-+
-+ udelay(30);
-+
-+ /*
-+ * Step 2: Configure the SDQPF, i.e. FIFO
-+ */
-+ if (config_done == 0) {
-+ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL);
-+ reg_data = 0x1;
-+ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data);
-+ reg_data &= ~(0x1);
-+ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data);
-+ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL);
-+ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data);
-+
-+ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL);
-+ reg_data = 0x1;
-+ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data);
-+ reg_data &= ~(0x1);
-+ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data);
-+ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL);
-+ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data);
-+ }
-+ /*
-+ * Enable RX FIFO 0, 4 and 8
-+ */
-+ if (port_num == 0) {
-+ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_0);
-+
-+ reg_data |= 0x100000;
-+ reg_data |= (0xff << 10);
-+
-+ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data);
-+ /*
-+ * BAV2,BAV and DAV settings for the Rx FIFO
-+ */
-+ reg_data1 = TITAN_GE_READ(0x4844);
-+ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1);
-+ TITAN_GE_WRITE(0x4844, reg_data1);
-+
-+ reg_data &= ~(0x00100000);
-+ reg_data |= 0x200000;
-+
-+ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data);
-+
-+ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_0);
-+ reg_data |= 0x100000;
-+
-+ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data);
-+
-+ reg_data |= (0xff << 10);
-+
-+ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data);
-+
-+ /*
-+ * BAV2, BAV and DAV settings for the Tx FIFO
-+ */
-+ reg_data1 = TITAN_GE_READ(0x4944);
-+ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10);
-+
-+ TITAN_GE_WRITE(0x4944, reg_data1);
-+
-+ reg_data &= ~(0x00100000);
-+ reg_data |= 0x200000;
-+
-+ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data);
-+
-+ }
-+
-+ if (port_num == 1) {
-+ reg_data = TITAN_GE_READ(0x4870);
-+
-+ reg_data |= 0x100000;
-+ reg_data |= (0xff << 10) | (0xff + 1);
-+
-+ TITAN_GE_WRITE(0x4870, reg_data);
-+ /*
-+ * BAV2,BAV and DAV settings for the Rx FIFO
-+ */
-+ reg_data1 = TITAN_GE_READ(0x4874);
-+ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1);
-+ TITAN_GE_WRITE(0x4874, reg_data1);
-+
-+ reg_data &= ~(0x00100000);
-+ reg_data |= 0x200000;
-+
-+ TITAN_GE_WRITE(0x4870, reg_data);
-+
-+ reg_data = TITAN_GE_READ(0x494c);
-+ reg_data |= 0x100000;
-+
-+ TITAN_GE_WRITE(0x494c, reg_data);
-+ reg_data |= (0xff << 10) | (0xff + 1);
-+ TITAN_GE_WRITE(0x494c, reg_data);
-+
-+ /*
-+ * BAV2, BAV and DAV settings for the Tx FIFO
-+ */
-+ reg_data1 = TITAN_GE_READ(0x4950);
-+ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10);
-+
-+ TITAN_GE_WRITE(0x4950, reg_data1);
-+
-+ reg_data &= ~(0x00100000);
-+ reg_data |= 0x200000;
-+
-+ TITAN_GE_WRITE(0x494c, reg_data);
-+ }
-+
-+ /*
-+ * Titan 1.2 revision does support port #2
-+ */
-+ if (port_num == 2) {
-+ /*
-+ * Put the descriptors in the SRAM
-+ */
-+ reg_data = TITAN_GE_READ(0x48a0);
-+
-+ reg_data |= 0x100000;
-+ reg_data |= (0xff << 10) | (2*(0xff + 1));
-+
-+ TITAN_GE_WRITE(0x48a0, reg_data);
-+ /*
-+ * BAV2,BAV and DAV settings for the Rx FIFO
-+ */
-+ reg_data1 = TITAN_GE_READ(0x48a4);
-+ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1);
-+ TITAN_GE_WRITE(0x48a4, reg_data1);
-+
-+ reg_data &= ~(0x00100000);
-+ reg_data |= 0x200000;
-+
-+ TITAN_GE_WRITE(0x48a0, reg_data);
-+
-+ reg_data = TITAN_GE_READ(0x4958);
-+ reg_data |= 0x100000;
-+
-+ TITAN_GE_WRITE(0x4958, reg_data);
-+ reg_data |= (0xff << 10) | (2*(0xff + 1));
-+ TITAN_GE_WRITE(0x4958, reg_data);
-+
-+ /*
-+ * BAV2, BAV and DAV settings for the Tx FIFO
-+ */
-+ reg_data1 = TITAN_GE_READ(0x495c);
-+ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10);
-+
-+ TITAN_GE_WRITE(0x495c, reg_data1);
-+
-+ reg_data &= ~(0x00100000);
-+ reg_data |= 0x200000;
-+
-+ TITAN_GE_WRITE(0x4958, reg_data);
-+ }
-+
-+ if (port_num == 2) {
-+ reg_data = TITAN_GE_READ(0x48a0);
-+
-+ reg_data |= 0x100000;
-+ reg_data |= (0xff << 10) | (2*(0xff + 1));
-+
-+ TITAN_GE_WRITE(0x48a0, reg_data);
-+ /*
-+ * BAV2,BAV and DAV settings for the Rx FIFO
-+ */
-+ reg_data1 = TITAN_GE_READ(0x48a4);
-+ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1);
-+ TITAN_GE_WRITE(0x48a4, reg_data1);
-+
-+ reg_data &= ~(0x00100000);
-+ reg_data |= 0x200000;
-+
-+ TITAN_GE_WRITE(0x48a0, reg_data);
-+
-+ reg_data = TITAN_GE_READ(0x4958);
-+ reg_data |= 0x100000;
-+
-+ TITAN_GE_WRITE(0x4958, reg_data);
-+ reg_data |= (0xff << 10) | (2*(0xff + 1));
-+ TITAN_GE_WRITE(0x4958, reg_data);
-+
-+ /*
-+ * BAV2, BAV and DAV settings for the Tx FIFO
-+ */
-+ reg_data1 = TITAN_GE_READ(0x495c);
-+ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10);
-+
-+ TITAN_GE_WRITE(0x495c, reg_data1);
-+
-+ reg_data &= ~(0x00100000);
-+ reg_data |= 0x200000;
-+
-+ TITAN_GE_WRITE(0x4958, reg_data);
-+ }
-+
-+ /*
-+ * Step 3: TRTG block enable
-+ */
-+ reg_data = TITAN_GE_READ(TITAN_GE_TRTG_CONFIG + (port_num << 12));
-+
-+ /*
-+ * This is the 1.2 revision of the chip. It has fix for the
-+ * IP header alignment. Now, the IP header begins at an
-+ * aligned address and this wont need an extra copy in the
-+ * driver. This performance drawback existed in the previous
-+ * versions of the silicon
-+ */
-+ reg_data_1 = TITAN_GE_READ(0x103c + (port_num << 12));
-+ reg_data_1 |= 0x40000000;
-+ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1);
-+
-+ reg_data_1 |= 0x04000000;
-+ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1);
-+
-+ mdelay(5);
-+
-+ reg_data_1 &= ~(0x04000000);
-+ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1);
-+
-+ mdelay(5);
-+
-+ reg_data |= 0x0001;
-+ TITAN_GE_WRITE((TITAN_GE_TRTG_CONFIG + (port_num << 12)), reg_data);
-+
-+ /*
-+ * Step 4: Start the Tx activity
-+ */
-+ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_2 + (port_num << 12)), 0xe197);
-+#ifdef TITAN_GE_JUMBO_FRAMES
-+ TITAN_GE_WRITE((0x1258 + (port_num << 12)), 0x4000);
-+#endif
-+ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12));
-+ reg_data |= 0x0001; /* Enable TMAC */
-+ reg_data |= 0x6c70; /* PAUSE also set */
-+
-+ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)), reg_data);
-+
-+ udelay(30);
-+
-+ /* Destination Address drop bit */
-+ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_2 + (port_num << 12));
-+ reg_data |= 0x218; /* DA_DROP bit and pause */
-+ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)), reg_data);
-+
-+ TITAN_GE_WRITE((0x1218 + (port_num << 12)), 0x3);
-+
-+#ifdef TITAN_GE_JUMBO_FRAMES
-+ TITAN_GE_WRITE((0x1208 + (port_num << 12)), 0x4000);
-+#endif
-+ /* Start the Rx activity */
-+ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12));
-+ reg_data |= 0x0001; /* RMAC Enable */
-+ reg_data |= 0x0010; /* CRC Check enable */
-+ reg_data |= 0x0040; /* Min Frame check enable */
-+ reg_data |= 0x4400; /* Max Frame check enable */
-+
-+ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data);
-+
-+ udelay(30);
-+
-+ /*
-+ * Enable the Interrupts for Tx and Rx
-+ */
-+ reg_data1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE);
-+
-+ if (port_num == 0) {
-+ reg_data1 |= 0x3;
-+#ifdef CONFIG_SMP
-+ TITAN_GE_WRITE(0x0038, 0x003);
-+#else
-+ TITAN_GE_WRITE(0x0038, 0x303);
-+#endif
-+ }
-+
-+ if (port_num == 1) {
-+ reg_data1 |= 0x300;
-+ }
-+
-+ if (port_num == 2)
-+ reg_data1 |= 0x30000;
-+
-+ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data1);
-+ TITAN_GE_WRITE(0x003c, 0x300);
-+
-+ if (config_done == 0) {
-+ TITAN_GE_WRITE(0x0024, 0x04000024); /* IRQ vector */
-+ TITAN_GE_WRITE(0x0020, 0x000fb000); /* INTMSG base */
-+ }
-+
-+ /* Priority */
-+ reg_data = TITAN_GE_READ(0x1038 + (port_num << 12));
-+ reg_data &= ~(0x00f00000);
-+ TITAN_GE_WRITE((0x1038 + (port_num << 12)), reg_data);
-+
-+ /* Step 5: GMII config */
-+ titan_ge_gmii_config(port_num);
-+
-+ if (config_done == 0) {
-+ TITAN_GE_WRITE(0x1a80, 0);
-+ config_done = 1;
-+ }
-+
-+ return TITAN_OK;
-+}
-+
-+/*
-+ * Function to queue the packet for the Ethernet device
-+ */
-+static void titan_ge_tx_queue(titan_ge_port_info * titan_ge_eth,
-+ struct sk_buff * skb)
-+{
-+ struct device *device = &titan_ge_device[titan_ge_eth->port_num]->dev;
-+ unsigned int curr_desc = titan_ge_eth->tx_curr_desc_q;
-+ volatile titan_ge_tx_desc *tx_curr;
-+ int port_num = titan_ge_eth->port_num;
-+
-+ tx_curr = &(titan_ge_eth->tx_desc_area[curr_desc]);
-+ tx_curr->buffer_addr =
-+ dma_map_single(device, skb->data, skb_headlen(skb),
-+ DMA_TO_DEVICE);
-+
-+ titan_ge_eth->tx_skb[curr_desc] = (struct sk_buff *) skb;
-+ tx_curr->buffer_len = skb_headlen(skb);
-+
-+ /* Last descriptor enables interrupt and changes ownership */
-+ tx_curr->cmd_sts = 0x1 | (1 << 15) | (1 << 5);
-+
-+ /* Kick the XDMA to start the transfer from memory to the FIFO */
-+ TITAN_GE_WRITE((0x5044 + (port_num << 8)), 0x1);
-+
-+ /* Current descriptor updated */
-+ titan_ge_eth->tx_curr_desc_q = (curr_desc + 1) % TITAN_GE_TX_QUEUE;
-+
-+ /* Prefetch the next descriptor */
-+ prefetch((const void *)
-+ &titan_ge_eth->tx_desc_area[titan_ge_eth->tx_curr_desc_q]);
-+}
-+
-+/*
-+ * Actually does the open of the Ethernet device
-+ */
-+static int titan_ge_eth_open(struct net_device *netdev)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+ unsigned int port_num = titan_ge_eth->port_num;
-+ struct device *device = &titan_ge_device[port_num]->dev;
-+ unsigned long reg_data;
-+ unsigned int phy_reg;
-+ int err = 0;
-+
-+ /* Stop the Rx activity */
-+ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12));
-+ reg_data &= ~(0x00000001);
-+ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data);
-+
-+ /* Clear the port interrupts */
-+ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + (port_num << 8)), 0x0);
-+
-+ if (config_done == 0) {
-+ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0);
-+ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_B, 0);
-+ }
-+
-+ /* Set the MAC Address */
-+ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6);
-+
-+ if (config_done == 0)
-+ titan_port_init(netdev, titan_ge_eth);
-+
-+ titan_ge_update_afx(titan_ge_eth);
-+
-+ /* Allocate the Tx ring now */
-+ titan_ge_eth->tx_ring_skbs = 0;
-+ titan_ge_eth->tx_ring_size = TITAN_GE_TX_QUEUE;
-+
-+ /* Allocate space in the SRAM for the descriptors */
-+ titan_ge_eth->tx_desc_area = (titan_ge_tx_desc *)
-+ (titan_ge_sram + TITAN_TX_RING_BYTES * port_num);
-+ titan_ge_eth->tx_dma = TITAN_SRAM_BASE + TITAN_TX_RING_BYTES * port_num;
-+
-+ if (!titan_ge_eth->tx_desc_area) {
-+ printk(KERN_ERR
-+ "%s: Cannot allocate Tx Ring (size %d bytes) for port %d\n",
-+ netdev->name, TITAN_TX_RING_BYTES, port_num);
-+ return -ENOMEM;
-+ }
-+
-+ memset(titan_ge_eth->tx_desc_area, 0, titan_ge_eth->tx_desc_area_size);
-+
-+ /* Now initialize the Tx descriptor ring */
-+ titan_ge_init_tx_desc_ring(titan_ge_eth,
-+ titan_ge_eth->tx_ring_size,
-+ (unsigned long) titan_ge_eth->tx_desc_area,
-+ (unsigned long) titan_ge_eth->tx_dma);
-+
-+ /* Allocate the Rx ring now */
-+ titan_ge_eth->rx_ring_size = TITAN_GE_RX_QUEUE;
-+ titan_ge_eth->rx_ring_skbs = 0;
-+
-+ titan_ge_eth->rx_desc_area =
-+ (titan_ge_rx_desc *)(titan_ge_sram + 0x1000 + TITAN_RX_RING_BYTES * port_num);
-+
-+ titan_ge_eth->rx_dma = TITAN_SRAM_BASE + 0x1000 + TITAN_RX_RING_BYTES * port_num;
-+
-+ if (!titan_ge_eth->rx_desc_area) {
-+ printk(KERN_ERR "%s: Cannot allocate Rx Ring (size %d bytes)\n",
-+ netdev->name, TITAN_RX_RING_BYTES);
-+
-+ printk(KERN_ERR "%s: Freeing previously allocated TX queues...",
-+ netdev->name);
-+
-+ dma_free_coherent(device, titan_ge_eth->tx_desc_area_size,
-+ (void *) titan_ge_eth->tx_desc_area,
-+ titan_ge_eth->tx_dma);
-+
-+ return -ENOMEM;
-+ }
-+
-+ memset(titan_ge_eth->rx_desc_area, 0, titan_ge_eth->rx_desc_area_size);
-+
-+ /* Now initialize the Rx ring */
-+#ifdef TITAN_GE_JUMBO_FRAMES
-+ if ((titan_ge_init_rx_desc_ring
-+ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_JUMBO_BUFSIZE,
-+ (unsigned long) titan_ge_eth->rx_desc_area, 0,
-+ (unsigned long) titan_ge_eth->rx_dma)) == 0)
-+#else
-+ if ((titan_ge_init_rx_desc_ring
-+ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_STD_BUFSIZE,
-+ (unsigned long) titan_ge_eth->rx_desc_area, 0,
-+ (unsigned long) titan_ge_eth->rx_dma)) == 0)
-+#endif
-+ panic("%s: Error initializing RX Ring\n", netdev->name);
-+
-+ /* Fill the Rx ring with the SKBs */
-+ titan_ge_port_start(netdev, titan_ge_eth);
-+
-+ /*
-+ * Check if Interrupt Coalscing needs to be turned on. The
-+ * values specified in the register is multiplied by
-+ * (8 x 64 nanoseconds) to determine when an interrupt should
-+ * be sent to the CPU.
-+ */
-+
-+ if (TITAN_GE_TX_COAL) {
-+ titan_ge_eth->tx_int_coal =
-+ titan_ge_tx_coal(TITAN_GE_TX_COAL, port_num);
-+ }
-+
-+ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg);
-+ if (err == TITAN_GE_MDIO_ERROR) {
-+ printk(KERN_ERR
-+ "Could not read PHY control register 0x11 \n");
-+ return TITAN_ERROR;
-+ }
-+ if (!(phy_reg & 0x0400)) {
-+ netif_carrier_off(netdev);
-+ netif_stop_queue(netdev);
-+ return TITAN_ERROR;
-+ } else {
-+ netif_carrier_on(netdev);
-+ netif_start_queue(netdev);
-+ }
-+
-+ return TITAN_OK;
-+}
-+
-+/*
-+ * Queue the packet for Tx. Currently no support for zero copy,
-+ * checksum offload and Scatter Gather. The chip does support
-+ * Scatter Gather only. But, that wont help here since zero copy
-+ * requires support for Tx checksumming also.
-+ */
-+int titan_ge_start_xmit(struct sk_buff *skb, struct net_device *netdev)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+ unsigned long flags;
-+ struct net_device_stats *stats;
-+//printk("titan_ge_start_xmit\n");
-+
-+ stats = &titan_ge_eth->stats;
-+ spin_lock_irqsave(&titan_ge_eth->lock, flags);
-+
-+ if ((TITAN_GE_TX_QUEUE - titan_ge_eth->tx_ring_skbs) <=
-+ (skb_shinfo(skb)->nr_frags + 1)) {
-+ netif_stop_queue(netdev);
-+ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
-+ printk(KERN_ERR "Tx OOD \n");
-+ return 1;
-+ }
-+
-+ titan_ge_tx_queue(titan_ge_eth, skb);
-+ titan_ge_eth->tx_ring_skbs++;
-+
-+ if (TITAN_GE_TX_QUEUE <= (titan_ge_eth->tx_ring_skbs + 4)) {
-+ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
-+ titan_ge_free_tx_queue(titan_ge_eth);
-+ spin_lock_irqsave(&titan_ge_eth->lock, flags);
-+ }
-+
-+ stats->tx_bytes += skb->len;
-+ stats->tx_packets++;
-+
-+ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
-+
-+ netdev->trans_start = jiffies;
-+
-+ return 0;
-+}
-+
-+/*
-+ * Actually does the Rx. Rx side checksumming supported.
-+ */
-+static int titan_ge_rx(struct net_device *netdev, int port_num,
-+ titan_ge_port_info * titan_ge_port,
-+ titan_ge_packet * packet)
-+{
-+ int rx_curr_desc, rx_used_desc;
-+ volatile titan_ge_rx_desc *rx_desc;
-+
-+ rx_curr_desc = titan_ge_port->rx_curr_desc_q;
-+ rx_used_desc = titan_ge_port->rx_used_desc_q;
-+
-+ if (((rx_curr_desc + 1) % TITAN_GE_RX_QUEUE) == rx_used_desc)
-+ return TITAN_ERROR;
-+
-+ rx_desc = &(titan_ge_port->rx_desc_area[rx_curr_desc]);
-+
-+ if (rx_desc->cmd_sts & TITAN_GE_RX_BUFFER_OWNED)
-+ return TITAN_ERROR;
-+
-+ packet->skb = titan_ge_port->rx_skb[rx_curr_desc];
-+ packet->len = (rx_desc->cmd_sts & 0x7fff);
-+
-+ /*
-+ * At this point, we dont know if the checksumming
-+ * actually helps relieve CPU. So, keep it for
-+ * port 0 only
-+ */
-+ packet->checksum = ntohs((rx_desc->buffer & 0xffff0000) >> 16);
-+ packet->cmd_sts = rx_desc->cmd_sts;
-+
-+ titan_ge_port->rx_curr_desc_q = (rx_curr_desc + 1) % TITAN_GE_RX_QUEUE;
-+
-+ /* Prefetch the next descriptor */
-+ prefetch((const void *)
-+ &titan_ge_port->rx_desc_area[titan_ge_port->rx_curr_desc_q + 1]);
-+
-+ return TITAN_OK;
-+}
-+
-+/*
-+ * Free the Tx queue of the used SKBs
-+ */
-+static int titan_ge_free_tx_queue(titan_ge_port_info *titan_ge_eth)
-+{
-+ unsigned long flags;
-+
-+ /* Take the lock */
-+ spin_lock_irqsave(&(titan_ge_eth->lock), flags);
-+
-+ while (titan_ge_return_tx_desc(titan_ge_eth, titan_ge_eth->port_num) == 0)
-+ if (titan_ge_eth->tx_ring_skbs != 1)
-+ titan_ge_eth->tx_ring_skbs--;
-+
-+ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
-+
-+ return TITAN_OK;
-+}
-+
-+/*
-+ * Threshold beyond which we do the cleaning of
-+ * Tx queue and new allocation for the Rx
-+ * queue
-+ */
-+#define TX_THRESHOLD 4
-+#define RX_THRESHOLD 10
-+
-+/*
-+ * Receive the packets and send it to the kernel.
-+ */
-+static int titan_ge_receive_queue(struct net_device *netdev, unsigned int max)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+ unsigned int port_num = titan_ge_eth->port_num;
-+ titan_ge_packet packet;
-+ struct net_device_stats *stats;
-+ struct sk_buff *skb;
-+ unsigned long received_packets = 0;
-+ unsigned int ack;
-+
-+ stats = &titan_ge_eth->stats;
-+
-+ while ((--max)
-+ && (titan_ge_rx(netdev, port_num, titan_ge_eth, &packet) == TITAN_OK)) {
-+ skb = (struct sk_buff *) packet.skb;
-+
-+ titan_ge_eth->rx_ring_skbs--;
-+
-+ if (--titan_ge_eth->rx_work_limit < 0)
-+ break;
-+ received_packets++;
-+
-+ stats->rx_packets++;
-+ stats->rx_bytes += packet.len;
-+
-+ if ((packet.cmd_sts & TITAN_GE_RX_PERR) ||
-+ (packet.cmd_sts & TITAN_GE_RX_OVERFLOW_ERROR) ||
-+ (packet.cmd_sts & TITAN_GE_RX_TRUNC) ||
-+ (packet.cmd_sts & TITAN_GE_RX_CRC_ERROR)) {
-+ stats->rx_dropped++;
-+ dev_kfree_skb_any(skb);
-+
-+ continue;
-+ }
-+ /*
-+ * Either support fast path or slow path. Decision
-+ * making can really slow down the performance. The
-+ * idea is to cut down the number of checks and improve
-+ * the fastpath.
-+ */
-+
-+ skb_put(skb, packet.len - 2);
-+
-+ /*
-+ * Increment data pointer by two since thats where
-+ * the MAC starts
-+ */
-+ skb_reserve(skb, 2);
-+ skb->protocol = eth_type_trans(skb, netdev);
-+ netif_receive_skb(skb);
-+
-+ if (titan_ge_eth->rx_threshold > RX_THRESHOLD) {
-+ ack = titan_ge_rx_task(netdev, titan_ge_eth);
-+ TITAN_GE_WRITE((0x5048 + (port_num << 8)), ack);
-+ titan_ge_eth->rx_threshold = 0;
-+ } else
-+ titan_ge_eth->rx_threshold++;
-+
-+ if (titan_ge_eth->tx_threshold > TX_THRESHOLD) {
-+ titan_ge_eth->tx_threshold = 0;
-+ titan_ge_free_tx_queue(titan_ge_eth);
-+ }
-+ else
-+ titan_ge_eth->tx_threshold++;
-+
-+ }
-+ return received_packets;
-+}
-+
-+
-+/*
-+ * Enable the Rx side interrupts
-+ */
-+static void titan_ge_enable_int(unsigned int port_num,
-+ titan_ge_port_info *titan_ge_eth,
-+ struct net_device *netdev)
-+{
-+ unsigned long reg_data = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE);
-+
-+ if (port_num == 0)
-+ reg_data |= 0x3;
-+ if (port_num == 1)
-+ reg_data |= 0x300;
-+ if (port_num == 2)
-+ reg_data |= 0x30000;
-+
-+ /* Re-enable interrupts */
-+ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data);
-+}
-+
-+/*
-+ * Main function to handle the polling for Rx side NAPI.
-+ * Receive interrupts have been disabled at this point.
-+ * The poll schedules the transmit followed by receive.
-+ */
-+static int titan_ge_poll(struct net_device *netdev, int *budget)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+ int port_num = titan_ge_eth->port_num;
-+ int work_done = 0;
-+ unsigned long flags, status;
-+
-+ titan_ge_eth->rx_work_limit = *budget;
-+ if (titan_ge_eth->rx_work_limit > netdev->quota)
-+ titan_ge_eth->rx_work_limit = netdev->quota;
-+
-+ do {
-+ /* Do the transmit cleaning work here */
-+ titan_ge_free_tx_queue(titan_ge_eth);
-+
-+ /* Ack the Rx interrupts */
-+ if (port_num == 0)
-+ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x3);
-+ if (port_num == 1)
-+ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x300);
-+ if (port_num == 2)
-+ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x30000);
-+
-+ work_done += titan_ge_receive_queue(netdev, 0);
-+
-+ /* Out of quota and there is work to be done */
-+ if (titan_ge_eth->rx_work_limit < 0)
-+ goto not_done;
-+
-+ /* Receive alloc_skb could lead to OOM */
-+ if (oom_flag == 1) {
-+ oom_flag = 0;
-+ goto oom;
-+ }
-+
-+ status = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A);
-+ } while (status & 0x30300);
-+
-+ /* If we are here, then no more interrupts to process */
-+ goto done;
-+
-+not_done:
-+ *budget -= work_done;
-+ netdev->quota -= work_done;
-+ return 1;
-+
-+oom:
-+ printk(KERN_ERR "OOM \n");
-+ netif_rx_complete(netdev);
-+ return 0;
-+
-+done:
-+ /*
-+ * No more packets on the poll list. Turn the interrupts
-+ * back on and we should be able to catch the new
-+ * packets in the interrupt handler
-+ */
-+ if (!work_done)
-+ work_done = 1;
-+
-+ *budget -= work_done;
-+ netdev->quota -= work_done;
-+
-+ spin_lock_irqsave(&titan_ge_eth->lock, flags);
-+
-+ /* Remove us from the poll list */
-+ netif_rx_complete(netdev);
-+
-+ /* Re-enable interrupts */
-+ titan_ge_enable_int(port_num, titan_ge_eth, netdev);
-+
-+ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
-+
-+ return 0;
-+}
-+
-+/*
-+ * Close the network device
-+ */
-+int titan_ge_stop(struct net_device *netdev)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+
-+ spin_lock_irq(&(titan_ge_eth->lock));
-+ titan_ge_eth_stop(netdev);
-+ free_irq(netdev->irq, netdev);
-+ spin_unlock_irq(&titan_ge_eth->lock);
-+
-+ return TITAN_OK;
-+}
-+
-+/*
-+ * Free the Tx ring
-+ */
-+static void titan_ge_free_tx_rings(struct net_device *netdev)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+ unsigned int port_num = titan_ge_eth->port_num;
-+ unsigned int curr;
-+ unsigned long reg_data;
-+
-+ /* Stop the Tx DMA */
-+ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG +
-+ (port_num << 8));
-+ reg_data |= 0xc0000000;
-+ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG +
-+ (port_num << 8)), reg_data);
-+
-+ /* Disable the TMAC */
-+ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 +
-+ (port_num << 12));
-+ reg_data &= ~(0x00000001);
-+ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 +
-+ (port_num << 12)), reg_data);
-+
-+ for (curr = 0;
-+ (titan_ge_eth->tx_ring_skbs) && (curr < TITAN_GE_TX_QUEUE);
-+ curr++) {
-+ if (titan_ge_eth->tx_skb[curr]) {
-+ dev_kfree_skb(titan_ge_eth->tx_skb[curr]);
-+ titan_ge_eth->tx_ring_skbs--;
-+ }
-+ }
-+
-+ if (titan_ge_eth->tx_ring_skbs != 0)
-+ printk
-+ ("%s: Error on Tx descriptor free - could not free %d"
-+ " descriptors\n", netdev->name,
-+ titan_ge_eth->tx_ring_skbs);
-+
-+#ifndef TITAN_RX_RING_IN_SRAM
-+ dma_free_coherent(&titan_ge_device[port_num]->dev,
-+ titan_ge_eth->tx_desc_area_size,
-+ (void *) titan_ge_eth->tx_desc_area,
-+ titan_ge_eth->tx_dma);
-+#endif
-+}
-+
-+/*
-+ * Free the Rx ring
-+ */
-+static void titan_ge_free_rx_rings(struct net_device *netdev)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+ unsigned int port_num = titan_ge_eth->port_num;
-+ unsigned int curr;
-+ unsigned long reg_data;
-+
-+ /* Stop the Rx DMA */
-+ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG +
-+ (port_num << 8));
-+ reg_data |= 0x000c0000;
-+ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG +
-+ (port_num << 8)), reg_data);
-+
-+ /* Disable the RMAC */
-+ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 +
-+ (port_num << 12));
-+ reg_data &= ~(0x00000001);
-+ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 +
-+ (port_num << 12)), reg_data);
-+
-+ for (curr = 0;
-+ titan_ge_eth->rx_ring_skbs && (curr < TITAN_GE_RX_QUEUE);
-+ curr++) {
-+ if (titan_ge_eth->rx_skb[curr]) {
-+ dev_kfree_skb(titan_ge_eth->rx_skb[curr]);
-+ titan_ge_eth->rx_ring_skbs--;
-+ }
-+ }
-+
-+ if (titan_ge_eth->rx_ring_skbs != 0)
-+ printk(KERN_ERR
-+ "%s: Error in freeing Rx Ring. %d skb's still"
-+ " stuck in RX Ring - ignoring them\n", netdev->name,
-+ titan_ge_eth->rx_ring_skbs);
-+
-+#ifndef TITAN_RX_RING_IN_SRAM
-+ dma_free_coherent(&titan_ge_device[port_num]->dev,
-+ titan_ge_eth->rx_desc_area_size,
-+ (void *) titan_ge_eth->rx_desc_area,
-+ titan_ge_eth->rx_dma);
-+#endif
-+}
-+
-+/*
-+ * Actually does the stop of the Ethernet device
-+ */
-+static void titan_ge_eth_stop(struct net_device *netdev)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+
-+ netif_stop_queue(netdev);
-+
-+ titan_ge_port_reset(titan_ge_eth->port_num);
-+
-+ titan_ge_free_tx_rings(netdev);
-+ titan_ge_free_rx_rings(netdev);
-+
-+ /* Disable the Tx and Rx Interrupts for all channels */
-+ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, 0x0);
-+}
-+
-+/*
-+ * Update the MAC address. Note that we have to write the
-+ * address in three station registers, 16 bits each. And this
-+ * has to be done for TMAC and RMAC
-+ */
-+static void titan_ge_update_mac_address(struct net_device *netdev)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+ unsigned int port_num = titan_ge_eth->port_num;
-+ u8 p_addr[6];
-+
-+ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6);
-+ memcpy(p_addr, netdev->dev_addr, 6);
-+
-+ /* Update the Address Filtering Match tables */
-+ titan_ge_update_afx(titan_ge_eth);
-+
-+ printk("Station MAC : %d %d %d %d %d %d \n",
-+ p_addr[5], p_addr[4], p_addr[3],
-+ p_addr[2], p_addr[1], p_addr[0]);
-+
-+ /* Set the MAC address here for TMAC and RMAC */
-+ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port_num << 12)),
-+ ((p_addr[5] << 8) | p_addr[4]));
-+ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port_num << 12)),
-+ ((p_addr[3] << 8) | p_addr[2]));
-+ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port_num << 12)),
-+ ((p_addr[1] << 8) | p_addr[0]));
-+
-+ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port_num << 12)),
-+ ((p_addr[5] << 8) | p_addr[4]));
-+ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port_num << 12)),
-+ ((p_addr[3] << 8) | p_addr[2]));
-+ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port_num << 12)),
-+ ((p_addr[1] << 8) | p_addr[0]));
-+}
-+
-+/*
-+ * Set the MAC address of the Ethernet device
-+ */
-+static int titan_ge_set_mac_address(struct net_device *dev, void *addr)
-+{
-+ titan_ge_port_info *tp = netdev_priv(dev);
-+ struct sockaddr *sa = addr;
-+
-+ memcpy(dev->dev_addr, sa->sa_data, dev->addr_len);
-+
-+ spin_lock_irq(&tp->lock);
-+ titan_ge_update_mac_address(dev);
-+ spin_unlock_irq(&tp->lock);
-+
-+ return 0;
-+}
-+
-+/*
-+ * Get the Ethernet device stats
-+ */
-+static struct net_device_stats *titan_ge_get_stats(struct net_device *netdev)
-+{
-+ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
-+
-+ return &titan_ge_eth->stats;
-+}
-+
-+/*
-+ * Initialize the Rx descriptor ring for the Titan Ge
-+ */
-+static int titan_ge_init_rx_desc_ring(titan_ge_port_info * titan_eth_port,
-+ int rx_desc_num,
-+ int rx_buff_size,
-+ unsigned long rx_desc_base_addr,
-+ unsigned long rx_buff_base_addr,
-+ unsigned long rx_dma)
-+{
-+ volatile titan_ge_rx_desc *rx_desc;
-+ unsigned long buffer_addr;
-+ int index;
-+ unsigned long titan_ge_rx_desc_bus = rx_dma;
-+
-+ buffer_addr = rx_buff_base_addr;
-+ rx_desc = (titan_ge_rx_desc *) rx_desc_base_addr;
-+
-+ /* Check alignment */
-+ if (rx_buff_base_addr & 0xF)
-+ return 0;
-+
-+ /* Check Rx buffer size */
-+ if ((rx_buff_size < 8) || (rx_buff_size > TITAN_GE_MAX_RX_BUFFER))
-+ return 0;
-+
-+ /* 64-bit alignment
-+ if ((rx_buff_base_addr + rx_buff_size) & 0x7)
-+ return 0; */
-+
-+ /* Initialize the Rx desc ring */
-+ for (index = 0; index < rx_desc_num; index++) {
-+ titan_ge_rx_desc_bus += sizeof(titan_ge_rx_desc);
-+ rx_desc[index].cmd_sts = 0;
-+ rx_desc[index].buffer_addr = buffer_addr;
-+ titan_eth_port->rx_skb[index] = NULL;
-+ buffer_addr += rx_buff_size;
-+ }
-+
-+ titan_eth_port->rx_curr_desc_q = 0;
-+ titan_eth_port->rx_used_desc_q = 0;
-+
-+ titan_eth_port->rx_desc_area = (titan_ge_rx_desc *) rx_desc_base_addr;
-+ titan_eth_port->rx_desc_area_size =
-+ rx_desc_num * sizeof(titan_ge_rx_desc);
-+
-+ titan_eth_port->rx_dma = rx_dma;
-+
-+ return TITAN_OK;
-+}
-+
-+/*
-+ * Initialize the Tx descriptor ring. Descriptors in the SRAM
-+ */
-+static int titan_ge_init_tx_desc_ring(titan_ge_port_info * titan_ge_port,
-+ int tx_desc_num,
-+ unsigned long tx_desc_base_addr,
-+ unsigned long tx_dma)
-+{
-+ titan_ge_tx_desc *tx_desc;
-+ int index;
-+ unsigned long titan_ge_tx_desc_bus = tx_dma;
-+
-+ if (tx_desc_base_addr & 0xF)
-+ return 0;
-+
-+ tx_desc = (titan_ge_tx_desc *) tx_desc_base_addr;
-+
-+ for (index = 0; index < tx_desc_num; index++) {
-+ titan_ge_port->tx_dma_array[index] =
-+ (dma_addr_t) titan_ge_tx_desc_bus;
-+ titan_ge_tx_desc_bus += sizeof(titan_ge_tx_desc);
-+ tx_desc[index].cmd_sts = 0x0000;
-+ tx_desc[index].buffer_len = 0;
-+ tx_desc[index].buffer_addr = 0x00000000;
-+ titan_ge_port->tx_skb[index] = NULL;
-+ }
-+
-+ titan_ge_port->tx_curr_desc_q = 0;
-+ titan_ge_port->tx_used_desc_q = 0;
-+
-+ titan_ge_port->tx_desc_area = (titan_ge_tx_desc *) tx_desc_base_addr;
-+ titan_ge_port->tx_desc_area_size =
-+ tx_desc_num * sizeof(titan_ge_tx_desc);
-+
-+ titan_ge_port->tx_dma = tx_dma;
-+ return TITAN_OK;
-+}
-+
-+/*
-+ * Initialize the device as an Ethernet device
-+ */
-+static int __init titan_ge_probe(struct device *device)
-+{
-+ titan_ge_port_info *titan_ge_eth;
-+ struct net_device *netdev;
-+ int port = to_platform_device(device)->id;
-+ int err;
-+
-+ netdev = alloc_etherdev(sizeof(titan_ge_port_info));
-+ if (!netdev) {
-+ err = -ENODEV;
-+ goto out;
-+ }
-+
-+ netdev->open = titan_ge_open;
-+ netdev->stop = titan_ge_stop;
-+ netdev->hard_start_xmit = titan_ge_start_xmit;
-+ netdev->get_stats = titan_ge_get_stats;
-+ netdev->set_multicast_list = titan_ge_set_multi;
-+ netdev->set_mac_address = titan_ge_set_mac_address;
-+
-+ /* Tx timeout */
-+ netdev->tx_timeout = titan_ge_tx_timeout;
-+ netdev->watchdog_timeo = 2 * HZ;
-+
-+ /* Set these to very high values */
-+ netdev->poll = titan_ge_poll;
-+ netdev->weight = 64;
-+
-+ netdev->tx_queue_len = TITAN_GE_TX_QUEUE;
-+ netif_carrier_off(netdev);
-+ netdev->base_addr = 0;
-+
-+ netdev->change_mtu = titan_ge_change_mtu;
-+
-+ titan_ge_eth = netdev_priv(netdev);
-+ /* Allocation of memory for the driver structures */
-+
-+ titan_ge_eth->port_num = port;
-+
-+ /* Configure the Tx timeout handler */
-+ INIT_WORK(&titan_ge_eth->tx_timeout_task,
-+ (void (*)(void *)) titan_ge_tx_timeout_task, netdev);
-+
-+ spin_lock_init(&titan_ge_eth->lock);
-+
-+ /* set MAC addresses */
-+ memcpy(netdev->dev_addr, titan_ge_mac_addr_base, 6);
-+ netdev->dev_addr[5] += port;
-+
-+ err = register_netdev(netdev);
-+
-+ if (err)
-+ goto out_free_netdev;
-+
-+ printk(KERN_NOTICE
-+ "%s: port %d with MAC address %02x:%02x:%02x:%02x:%02x:%02x\n",
-+ netdev->name, port, netdev->dev_addr[0],
-+ netdev->dev_addr[1], netdev->dev_addr[2],
-+ netdev->dev_addr[3], netdev->dev_addr[4],
-+ netdev->dev_addr[5]);
-+
-+ printk(KERN_NOTICE "Rx NAPI supported, Tx Coalescing ON \n");
-+
-+ return 0;
-+
-+out_free_netdev:
-+ kfree(netdev);
-+
-+out:
-+ return err;
-+}
-+
-+static void __devexit titan_device_remove(struct device *device)
-+{
-+}
-+
-+/*
-+ * Reset the Ethernet port
-+ */
-+static void titan_ge_port_reset(unsigned int port_num)
-+{
-+ unsigned int reg_data;
-+
-+ /* Stop the Tx port activity */
-+ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 +
-+ (port_num << 12));
-+ reg_data &= ~(0x0001);
-+ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 +
-+ (port_num << 12)), reg_data);
-+
-+ /* Stop the Rx port activity */
-+ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 +
-+ (port_num << 12));
-+ reg_data &= ~(0x0001);
-+ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 +
-+ (port_num << 12)), reg_data);
-+
-+ return;
-+}
-+
-+/*
-+ * Return the Tx desc after use by the XDMA
-+ */
-+static int titan_ge_return_tx_desc(titan_ge_port_info * titan_ge_eth, int port)
-+{
-+ int tx_desc_used;
-+ struct sk_buff *skb;
-+
-+ tx_desc_used = titan_ge_eth->tx_used_desc_q;
-+
-+ /* return right away */
-+ if (tx_desc_used == titan_ge_eth->tx_curr_desc_q)
-+ return TITAN_ERROR;
-+
-+ /* Now the critical stuff */
-+ skb = titan_ge_eth->tx_skb[tx_desc_used];
-+
-+ dev_kfree_skb_any(skb);
-+
-+ titan_ge_eth->tx_skb[tx_desc_used] = NULL;
-+ titan_ge_eth->tx_used_desc_q =
-+ (tx_desc_used + 1) % TITAN_GE_TX_QUEUE;
-+
-+ return 0;
-+}
-+
-+/*
-+ * Coalescing for the Tx path
-+ */
-+static unsigned long titan_ge_tx_coal(unsigned long delay, int port)
-+{
-+ unsigned long rx_delay;
-+
-+ rx_delay = TITAN_GE_READ(TITAN_GE_INT_COALESCING);
-+ delay = (delay << 16) | rx_delay;
-+
-+ TITAN_GE_WRITE(TITAN_GE_INT_COALESCING, delay);
-+ TITAN_GE_WRITE(0x5038, delay);
-+
-+ return delay;
-+}
-+
-+static struct device_driver titan_soc_driver = {
-+ .name = titan_string,
-+ .bus = &platform_bus_type,
-+ .probe = titan_ge_probe,
-+ .remove = __devexit_p(titan_device_remove),
-+};
-+
-+static void titan_platform_release (struct device *device)
-+{
-+ struct platform_device *pldev;
-+
-+ /* free device */
-+ pldev = to_platform_device (device);
-+ kfree (pldev);
-+}
-+
-+/*
-+ * Register the Titan GE with the kernel
-+ */
-+static int __init titan_ge_init_module(void)
-+{
-+ struct platform_device *pldev;
-+ unsigned int version, device;
-+ int i;
-+
-+ printk(KERN_NOTICE
-+ "PMC-Sierra TITAN 10/100/1000 Ethernet Driver \n");
-+
-+ titan_ge_base = (unsigned long) ioremap(TITAN_GE_BASE, TITAN_GE_SIZE);
-+ if (!titan_ge_base) {
-+ printk("Mapping Titan GE failed\n");
-+ goto out;
-+ }
-+
-+ device = TITAN_GE_READ(TITAN_GE_DEVICE_ID);
-+ version = (device & 0x000f0000) >> 16;
-+ device &= 0x0000ffff;
-+
-+ printk(KERN_NOTICE "Device Id : %x, Version : %x \n", device, version);
-+
-+#ifdef TITAN_RX_RING_IN_SRAM
-+ titan_ge_sram = (unsigned long) ioremap(TITAN_SRAM_BASE,
-+ TITAN_SRAM_SIZE);
-+ if (!titan_ge_sram) {
-+ printk("Mapping Titan SRAM failed\n");
-+ goto out_unmap_ge;
-+ }
-+#endif
-+
-+ if (driver_register(&titan_soc_driver)) {
-+ printk(KERN_ERR "Driver registration failed\n");
-+ goto out_unmap_sram;
-+ }
-+
-+ for (i = 0; i < 3; i++) {
-+ titan_ge_device[i] = NULL;
-+
-+ if (!(pldev = kmalloc (sizeof (*pldev), GFP_KERNEL)))
-+ continue;
-+
-+ memset (pldev, 0, sizeof (*pldev));
-+ pldev->name = titan_string;
-+ pldev->id = i;
-+ pldev->dev.release = titan_platform_release;
-+ titan_ge_device[i] = pldev;
-+
-+ if (platform_device_register (pldev)) {
-+ kfree (pldev);
-+ titan_ge_device[i] = NULL;
-+ continue;
-+ }
-+
-+ if (!pldev->dev.driver) {
-+ /*
-+ * The driver was not bound to this device, there was
-+ * no hardware at this address. Unregister it, as the
-+ * release fuction will take care of freeing the
-+ * allocated structure
-+ */
-+ titan_ge_device[i] = NULL;
-+ platform_device_unregister (pldev);
-+ }
-+ }
-+
-+ return 0;
-+
-+out_unmap_sram:
-+ iounmap((void *)titan_ge_sram);
-+
-+out_unmap_ge:
-+ iounmap((void *)titan_ge_base);
-+
-+out:
-+ return -ENOMEM;
-+}
-+
-+/*
-+ * Unregister the Titan GE from the kernel
-+ */
-+static void __exit titan_ge_cleanup_module(void)
-+{
-+ int i;
-+
-+ driver_unregister(&titan_soc_driver);
-+
-+ for (i = 0; i < 3; i++) {
-+ if (titan_ge_device[i]) {
-+ platform_device_unregister (titan_ge_device[i]);
-+ titan_ge_device[i] = NULL;
-+ }
-+ }
-+
-+ iounmap((void *)titan_ge_sram);
-+ iounmap((void *)titan_ge_base);
-+}
-+
-+MODULE_AUTHOR("Manish Lachwani <lachwani@pmc-sierra.com>");
-+MODULE_DESCRIPTION("Titan GE Ethernet driver");
-+MODULE_LICENSE("GPL");
-+
-+module_init(titan_ge_init_module);
-+module_exit(titan_ge_cleanup_module);
-diff -Nur linux-2.6.34.orig/drivers/net/titan_ge.h linux-loongson/drivers/net/titan_ge.h
---- linux-2.6.34.orig/drivers/net/titan_ge.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/titan_ge.h 2010-05-27 18:12:39.084716399 +0200
-@@ -0,0 +1,415 @@
-+#ifndef _TITAN_GE_H_
-+#define _TITAN_GE_H_
-+
-+#include <linux/module.h>
-+#include <linux/kernel.h>
-+#include <linux/spinlock.h>
-+#include <asm/byteorder.h>
-+
-+/*
-+ * These functions should be later moved to a more generic location since there
-+ * will be others accessing it also
-+ */
-+
-+/*
-+ * This is the way it works: LKB5 Base is at 0x0128. TITAN_BASE is defined in
-+ * include/asm/titan_dep.h. TITAN_GE_BASE is the value in the TITAN_GE_LKB5
-+ * register.
-+ */
-+
-+#define TITAN_GE_BASE 0xfe000000UL
-+#define TITAN_GE_SIZE 0x10000UL
-+
-+extern unsigned long titan_ge_base;
-+
-+#define TITAN_GE_WRITE(offset, data) \
-+ *(volatile u32 *)(titan_ge_base + (offset)) = (data)
-+
-+#define TITAN_GE_READ(offset) *(volatile u32 *)(titan_ge_base + (offset))
-+
-+#ifndef msec_delay
-+#define msec_delay(x) do { if(in_interrupt()) { \
-+ /* Don't mdelay in interrupt context! */ \
-+ BUG(); \
-+ } else { \
-+ set_current_state(TASK_UNINTERRUPTIBLE); \
-+ schedule_timeout((x * HZ)/1000); \
-+ } } while(0)
-+#endif
-+
-+#define TITAN_GE_PORT_0
-+
-+#define TITAN_SRAM_BASE ((OCD_READ(RM9000x2_OCD_LKB13) & ~1) << 4)
-+#define TITAN_SRAM_SIZE 0x2000UL
-+
-+/*
-+ * We may need these constants
-+ */
-+#define TITAN_BIT0 0x00000001
-+#define TITAN_BIT1 0x00000002
-+#define TITAN_BIT2 0x00000004
-+#define TITAN_BIT3 0x00000008
-+#define TITAN_BIT4 0x00000010
-+#define TITAN_BIT5 0x00000020
-+#define TITAN_BIT6 0x00000040
-+#define TITAN_BIT7 0x00000080
-+#define TITAN_BIT8 0x00000100
-+#define TITAN_BIT9 0x00000200
-+#define TITAN_BIT10 0x00000400
-+#define TITAN_BIT11 0x00000800
-+#define TITAN_BIT12 0x00001000
-+#define TITAN_BIT13 0x00002000
-+#define TITAN_BIT14 0x00004000
-+#define TITAN_BIT15 0x00008000
-+#define TITAN_BIT16 0x00010000
-+#define TITAN_BIT17 0x00020000
-+#define TITAN_BIT18 0x00040000
-+#define TITAN_BIT19 0x00080000
-+#define TITAN_BIT20 0x00100000
-+#define TITAN_BIT21 0x00200000
-+#define TITAN_BIT22 0x00400000
-+#define TITAN_BIT23 0x00800000
-+#define TITAN_BIT24 0x01000000
-+#define TITAN_BIT25 0x02000000
-+#define TITAN_BIT26 0x04000000
-+#define TITAN_BIT27 0x08000000
-+#define TITAN_BIT28 0x10000000
-+#define TITAN_BIT29 0x20000000
-+#define TITAN_BIT30 0x40000000
-+#define TITAN_BIT31 0x80000000
-+
-+/* Flow Control */
-+#define TITAN_GE_FC_NONE 0x0
-+#define TITAN_GE_FC_FULL 0x1
-+#define TITAN_GE_FC_TX_PAUSE 0x2
-+#define TITAN_GE_FC_RX_PAUSE 0x3
-+
-+/* Duplex Settings */
-+#define TITAN_GE_FULL_DUPLEX 0x1
-+#define TITAN_GE_HALF_DUPLEX 0x2
-+
-+/* Speed settings */
-+#define TITAN_GE_SPEED_1000 0x1
-+#define TITAN_GE_SPEED_100 0x2
-+#define TITAN_GE_SPEED_10 0x3
-+
-+/* Debugging info only */
-+#undef TITAN_DEBUG
-+
-+/* Keep the rings in the Titan's SSRAM */
-+#define TITAN_RX_RING_IN_SRAM
-+
-+#ifdef CONFIG_64BIT
-+#define TITAN_GE_IE_MASK 0xfffffffffb001b64
-+#define TITAN_GE_IE_STATUS 0xfffffffffb001b60
-+#else
-+#define TITAN_GE_IE_MASK 0xfb001b64
-+#define TITAN_GE_IE_STATUS 0xfb001b60
-+#endif
-+
-+/* Support for Jumbo Frames */
-+#undef TITAN_GE_JUMBO_FRAMES
-+
-+/* Rx buffer size */
-+#ifdef TITAN_GE_JUMBO_FRAMES
-+#define TITAN_GE_JUMBO_BUFSIZE 9080
-+#else
-+#define TITAN_GE_STD_BUFSIZE 1580
-+#endif
-+
-+/*
-+ * Tx and Rx Interrupt Coalescing parameter. These values are
-+ * for 1 Ghz processor. Rx coalescing can be taken care of
-+ * by NAPI. NAPI is adaptive and hence useful. Tx coalescing
-+ * is not adaptive. Hence, these values need to be adjusted
-+ * based on load, CPU speed etc.
-+ */
-+#define TITAN_GE_RX_COAL 150
-+#define TITAN_GE_TX_COAL 300
-+
-+#if defined(__BIG_ENDIAN)
-+
-+/* Define the Rx descriptor */
-+typedef struct eth_rx_desc {
-+ u32 reserved; /* Unused */
-+ u32 buffer_addr; /* CPU buffer address */
-+ u32 cmd_sts; /* Command and Status */
-+ u32 buffer; /* XDMA buffer address */
-+} titan_ge_rx_desc;
-+
-+/* Define the Tx descriptor */
-+typedef struct eth_tx_desc {
-+ u16 cmd_sts; /* Command, Status and Buffer count */
-+ u16 buffer_len; /* Length of the buffer */
-+ u32 buffer_addr; /* Physical address of the buffer */
-+} titan_ge_tx_desc;
-+
-+#elif defined(__LITTLE_ENDIAN)
-+
-+/* Define the Rx descriptor */
-+typedef struct eth_rx_desc {
-+ u32 buffer_addr; /* CPU buffer address */
-+ u32 reserved; /* Unused */
-+ u32 buffer; /* XDMA buffer address */
-+ u32 cmd_sts; /* Command and Status */
-+} titan_ge_rx_desc;
-+
-+/* Define the Tx descriptor */
-+typedef struct eth_tx_desc {
-+ u32 buffer_addr; /* Physical address of the buffer */
-+ u16 buffer_len; /* Length of the buffer */
-+ u16 cmd_sts; /* Command, Status and Buffer count */
-+} titan_ge_tx_desc;
-+#endif
-+
-+/* Default Tx Queue Size */
-+#define TITAN_GE_TX_QUEUE 128
-+#define TITAN_TX_RING_BYTES (TITAN_GE_TX_QUEUE * sizeof(struct eth_tx_desc))
-+
-+/* Default Rx Queue Size */
-+#define TITAN_GE_RX_QUEUE 64
-+#define TITAN_RX_RING_BYTES (TITAN_GE_RX_QUEUE * sizeof(struct eth_rx_desc))
-+
-+/* Packet Structure */
-+typedef struct _pkt_info {
-+ unsigned int len;
-+ unsigned int cmd_sts;
-+ unsigned int buffer;
-+ struct sk_buff *skb;
-+ unsigned int checksum;
-+} titan_ge_packet;
-+
-+
-+#define PHYS_CNT 3
-+
-+/* Titan Port specific data structure */
-+typedef struct _eth_port_ctrl {
-+ unsigned int port_num;
-+ u8 port_mac_addr[6];
-+
-+ /* Rx descriptor pointers */
-+ int rx_curr_desc_q, rx_used_desc_q;
-+
-+ /* Tx descriptor pointers */
-+ int tx_curr_desc_q, tx_used_desc_q;
-+
-+ /* Rx descriptor area */
-+ volatile titan_ge_rx_desc *rx_desc_area;
-+ unsigned int rx_desc_area_size;
-+ struct sk_buff* rx_skb[TITAN_GE_RX_QUEUE];
-+
-+ /* Tx Descriptor area */
-+ volatile titan_ge_tx_desc *tx_desc_area;
-+ unsigned int tx_desc_area_size;
-+ struct sk_buff* tx_skb[TITAN_GE_TX_QUEUE];
-+
-+ /* Timeout task */
-+ struct work_struct tx_timeout_task;
-+
-+ /* DMA structures and handles */
-+ dma_addr_t tx_dma;
-+ dma_addr_t rx_dma;
-+ dma_addr_t tx_dma_array[TITAN_GE_TX_QUEUE];
-+
-+ /* Device lock */
-+ spinlock_t lock;
-+
-+ unsigned int tx_ring_skbs;
-+ unsigned int rx_ring_size;
-+ unsigned int tx_ring_size;
-+ unsigned int rx_ring_skbs;
-+
-+ struct net_device_stats stats;
-+
-+ /* Tx and Rx coalescing */
-+ unsigned long rx_int_coal;
-+ unsigned long tx_int_coal;
-+
-+ /* Threshold for replenishing the Rx and Tx rings */
-+ unsigned int tx_threshold;
-+ unsigned int rx_threshold;
-+
-+ /* NAPI work limit */
-+ unsigned int rx_work_limit;
-+} titan_ge_port_info;
-+
-+/* Titan specific constants */
-+#define TITAN_ETH_PORT_IRQ 3
-+
-+/* Max Rx buffer */
-+#define TITAN_GE_MAX_RX_BUFFER 65536
-+
-+/* Tx and Rx Error */
-+#define TITAN_GE_ERROR
-+
-+/* Rx Descriptor Command and Status */
-+
-+#define TITAN_GE_RX_CRC_ERROR TITAN_BIT27 /* crc error */
-+#define TITAN_GE_RX_OVERFLOW_ERROR TITAN_BIT15 /* overflow */
-+#define TITAN_GE_RX_BUFFER_OWNED TITAN_BIT21 /* buffer ownership */
-+#define TITAN_GE_RX_STP TITAN_BIT31 /* start of packet */
-+#define TITAN_GE_RX_BAM TITAN_BIT30 /* broadcast address match */
-+#define TITAN_GE_RX_PAM TITAN_BIT28 /* physical address match */
-+#define TITAN_GE_RX_LAFM TITAN_BIT29 /* logical address filter match */
-+#define TITAN_GE_RX_VLAN TITAN_BIT26 /* virtual lans */
-+#define TITAN_GE_RX_PERR TITAN_BIT19 /* packet error */
-+#define TITAN_GE_RX_TRUNC TITAN_BIT20 /* packet size greater than 32 buffers */
-+
-+/* Tx Descriptor Command */
-+#define TITAN_GE_TX_BUFFER_OWNED TITAN_BIT5 /* buffer ownership */
-+#define TITAN_GE_TX_ENABLE_INTERRUPT TITAN_BIT15 /* Interrupt Enable */
-+
-+/* Return Status */
-+#define TITAN_OK 0x1 /* Good Status */
-+#define TITAN_ERROR 0x2 /* Error Status */
-+
-+/* MIB specific register offset */
-+#define TITAN_GE_MSTATX_STATS_BASE_LOW 0x0800 /* MSTATX COUNTL[15:0] */
-+#define TITAN_GE_MSTATX_STATS_BASE_MID 0x0804 /* MSTATX COUNTM[15:0] */
-+#define TITAN_GE_MSTATX_STATS_BASE_HI 0x0808 /* MSTATX COUNTH[7:0] */
-+#define TITAN_GE_MSTATX_CONTROL 0x0828 /* MSTATX Control */
-+#define TITAN_GE_MSTATX_VARIABLE_SELECT 0x082C /* MSTATX Variable Select */
-+
-+/* MIB counter offsets, add to the TITAN_GE_MSTATX_STATS_BASE_XXX */
-+#define TITAN_GE_MSTATX_RXFRAMESOK 0x0040
-+#define TITAN_GE_MSTATX_RXOCTETSOK 0x0050
-+#define TITAN_GE_MSTATX_RXFRAMES 0x0060
-+#define TITAN_GE_MSTATX_RXOCTETS 0x0070
-+#define TITAN_GE_MSTATX_RXUNICASTFRAMESOK 0x0080
-+#define TITAN_GE_MSTATX_RXBROADCASTFRAMESOK 0x0090
-+#define TITAN_GE_MSTATX_RXMULTICASTFRAMESOK 0x00A0
-+#define TITAN_GE_MSTATX_RXTAGGEDFRAMESOK 0x00B0
-+#define TITAN_GE_MSTATX_RXMACPAUSECONTROLFRAMESOK 0x00C0
-+#define TITAN_GE_MSTATX_RXMACCONTROLFRAMESOK 0x00D0
-+#define TITAN_GE_MSTATX_RXFCSERROR 0x00E0
-+#define TITAN_GE_MSTATX_RXALIGNMENTERROR 0x00F0
-+#define TITAN_GE_MSTATX_RXSYMBOLERROR 0x0100
-+#define TITAN_GE_MSTATX_RXLAYER1ERROR 0x0110
-+#define TITAN_GE_MSTATX_RXINRANGELENGTHERROR 0x0120
-+#define TITAN_GE_MSTATX_RXLONGLENGTHERROR 0x0130
-+#define TITAN_GE_MSTATX_RXLONGLENGTHCRCERROR 0x0140
-+#define TITAN_GE_MSTATX_RXSHORTLENGTHERROR 0x0150
-+#define TITAN_GE_MSTATX_RXSHORTLLENGTHCRCERROR 0x0160
-+#define TITAN_GE_MSTATX_RXFRAMES64OCTETS 0x0170
-+#define TITAN_GE_MSTATX_RXFRAMES65TO127OCTETS 0x0180
-+#define TITAN_GE_MSTATX_RXFRAMES128TO255OCTETS 0x0190
-+#define TITAN_GE_MSTATX_RXFRAMES256TO511OCTETS 0x01A0
-+#define TITAN_GE_MSTATX_RXFRAMES512TO1023OCTETS 0x01B0
-+#define TITAN_GE_MSTATX_RXFRAMES1024TO1518OCTETS 0x01C0
-+#define TITAN_GE_MSTATX_RXFRAMES1519TOMAXSIZE 0x01D0
-+#define TITAN_GE_MSTATX_RXSTATIONADDRESSFILTERED 0x01E0
-+#define TITAN_GE_MSTATX_RXVARIABLE 0x01F0
-+#define TITAN_GE_MSTATX_GENERICADDRESSFILTERED 0x0200
-+#define TITAN_GE_MSTATX_UNICASTFILTERED 0x0210
-+#define TITAN_GE_MSTATX_MULTICASTFILTERED 0x0220
-+#define TITAN_GE_MSTATX_BROADCASTFILTERED 0x0230
-+#define TITAN_GE_MSTATX_HASHFILTERED 0x0240
-+#define TITAN_GE_MSTATX_TXFRAMESOK 0x0250
-+#define TITAN_GE_MSTATX_TXOCTETSOK 0x0260
-+#define TITAN_GE_MSTATX_TXOCTETS 0x0270
-+#define TITAN_GE_MSTATX_TXTAGGEDFRAMESOK 0x0280
-+#define TITAN_GE_MSTATX_TXMACPAUSECONTROLFRAMESOK 0x0290
-+#define TITAN_GE_MSTATX_TXFCSERROR 0x02A0
-+#define TITAN_GE_MSTATX_TXSHORTLENGTHERROR 0x02B0
-+#define TITAN_GE_MSTATX_TXLONGLENGTHERROR 0x02C0
-+#define TITAN_GE_MSTATX_TXSYSTEMERROR 0x02D0
-+#define TITAN_GE_MSTATX_TXMACERROR 0x02E0
-+#define TITAN_GE_MSTATX_TXCARRIERSENSEERROR 0x02F0
-+#define TITAN_GE_MSTATX_TXSQETESTERROR 0x0300
-+#define TITAN_GE_MSTATX_TXUNICASTFRAMESOK 0x0310
-+#define TITAN_GE_MSTATX_TXBROADCASTFRAMESOK 0x0320
-+#define TITAN_GE_MSTATX_TXMULTICASTFRAMESOK 0x0330
-+#define TITAN_GE_MSTATX_TXUNICASTFRAMESATTEMPTED 0x0340
-+#define TITAN_GE_MSTATX_TXBROADCASTFRAMESATTEMPTED 0x0350
-+#define TITAN_GE_MSTATX_TXMULTICASTFRAMESATTEMPTED 0x0360
-+#define TITAN_GE_MSTATX_TXFRAMES64OCTETS 0x0370
-+#define TITAN_GE_MSTATX_TXFRAMES65TO127OCTETS 0x0380
-+#define TITAN_GE_MSTATX_TXFRAMES128TO255OCTETS 0x0390
-+#define TITAN_GE_MSTATX_TXFRAMES256TO511OCTETS 0x03A0
-+#define TITAN_GE_MSTATX_TXFRAMES512TO1023OCTETS 0x03B0
-+#define TITAN_GE_MSTATX_TXFRAMES1024TO1518OCTETS 0x03C0
-+#define TITAN_GE_MSTATX_TXFRAMES1519TOMAXSIZE 0x03D0
-+#define TITAN_GE_MSTATX_TXVARIABLE 0x03E0
-+#define TITAN_GE_MSTATX_RXSYSTEMERROR 0x03F0
-+#define TITAN_GE_MSTATX_SINGLECOLLISION 0x0400
-+#define TITAN_GE_MSTATX_MULTIPLECOLLISION 0x0410
-+#define TITAN_GE_MSTATX_DEFERREDXMISSIONS 0x0420
-+#define TITAN_GE_MSTATX_LATECOLLISIONS 0x0430
-+#define TITAN_GE_MSTATX_ABORTEDDUETOXSCOLLS 0x0440
-+
-+/* Interrupt specific defines */
-+#define TITAN_GE_DEVICE_ID 0x0000 /* Device ID */
-+#define TITAN_GE_RESET 0x0004 /* Reset reg */
-+#define TITAN_GE_TSB_CTRL_0 0x000C /* TSB Control reg 0 */
-+#define TITAN_GE_TSB_CTRL_1 0x0010 /* TSB Control reg 1 */
-+#define TITAN_GE_INTR_GRP0_STATUS 0x0040 /* General Interrupt Group 0 Status */
-+#define TITAN_GE_INTR_XDMA_CORE_A 0x0048 /* XDMA Channel Interrupt Status, Core A*/
-+#define TITAN_GE_INTR_XDMA_CORE_B 0x004C /* XDMA Channel Interrupt Status, Core B*/
-+#define TITAN_GE_INTR_XDMA_IE 0x0058 /* XDMA Channel Interrupt Enable */
-+#define TITAN_GE_SDQPF_ECC_INTR 0x480C /* SDQPF ECC Interrupt Status */
-+#define TITAN_GE_SDQPF_RXFIFO_CTL 0x4828 /* SDQPF RxFifo Control and Interrupt Enb*/
-+#define TITAN_GE_SDQPF_RXFIFO_INTR 0x482C /* SDQPF RxFifo Interrupt Status */
-+#define TITAN_GE_SDQPF_TXFIFO_CTL 0x4928 /* SDQPF TxFifo Control and Interrupt Enb*/
-+#define TITAN_GE_SDQPF_TXFIFO_INTR 0x492C /* SDQPF TxFifo Interrupt Status */
-+#define TITAN_GE_SDQPF_RXFIFO_0 0x4840 /* SDQPF RxFIFO Enable */
-+#define TITAN_GE_SDQPF_TXFIFO_0 0x4940 /* SDQPF TxFIFO Enable */
-+#define TITAN_GE_XDMA_CONFIG 0x5000 /* XDMA Global Configuration */
-+#define TITAN_GE_XDMA_INTR_SUMMARY 0x5010 /* XDMA Interrupt Summary */
-+#define TITAN_GE_XDMA_BUFADDRPRE 0x5018 /* XDMA Buffer Address Prefix */
-+#define TITAN_GE_XDMA_DESCADDRPRE 0x501C /* XDMA Descriptor Address Prefix */
-+#define TITAN_GE_XDMA_PORTWEIGHT 0x502C /* XDMA Port Weight Configuration */
-+
-+/* Rx MAC defines */
-+#define TITAN_GE_RMAC_CONFIG_1 0x1200 /* RMAC Configuration 1 */
-+#define TITAN_GE_RMAC_CONFIG_2 0x1204 /* RMAC Configuration 2 */
-+#define TITAN_GE_RMAC_MAX_FRAME_LEN 0x1208 /* RMAC Max Frame Length */
-+#define TITAN_GE_RMAC_STATION_HI 0x120C /* Rx Station Address High */
-+#define TITAN_GE_RMAC_STATION_MID 0x1210 /* Rx Station Address Middle */
-+#define TITAN_GE_RMAC_STATION_LOW 0x1214 /* Rx Station Address Low */
-+#define TITAN_GE_RMAC_LINK_CONFIG 0x1218 /* RMAC Link Configuration */
-+
-+/* Tx MAC defines */
-+#define TITAN_GE_TMAC_CONFIG_1 0x1240 /* TMAC Configuration 1 */
-+#define TITAN_GE_TMAC_CONFIG_2 0x1244 /* TMAC Configuration 2 */
-+#define TITAN_GE_TMAC_IPG 0x1248 /* TMAC Inter-Packet Gap */
-+#define TITAN_GE_TMAC_STATION_HI 0x124C /* Tx Station Address High */
-+#define TITAN_GE_TMAC_STATION_MID 0x1250 /* Tx Station Address Middle */
-+#define TITAN_GE_TMAC_STATION_LOW 0x1254 /* Tx Station Address Low */
-+#define TITAN_GE_TMAC_MAX_FRAME_LEN 0x1258 /* TMAC Max Frame Length */
-+#define TITAN_GE_TMAC_MIN_FRAME_LEN 0x125C /* TMAC Min Frame Length */
-+#define TITAN_GE_TMAC_PAUSE_FRAME_TIME 0x1260 /* TMAC Pause Frame Time */
-+#define TITAN_GE_TMAC_PAUSE_FRAME_INTERVAL 0x1264 /* TMAC Pause Frame Interval */
-+
-+/* GMII register */
-+#define TITAN_GE_GMII_INTERRUPT_STATUS 0x1348 /* GMII Interrupt Status */
-+#define TITAN_GE_GMII_CONFIG_GENERAL 0x134C /* GMII Configuration General */
-+#define TITAN_GE_GMII_CONFIG_MODE 0x1350 /* GMII Configuration Mode */
-+
-+/* Tx and Rx XDMA defines */
-+#define TITAN_GE_INT_COALESCING 0x5030 /* Interrupt Coalescing */
-+#define TITAN_GE_CHANNEL0_CONFIG 0x5040 /* Channel 0 XDMA config */
-+#define TITAN_GE_CHANNEL0_INTERRUPT 0x504c /* Channel 0 Interrupt Status */
-+#define TITAN_GE_GDI_INTERRUPT_ENABLE 0x5050 /* IE for the GDI Errors */
-+#define TITAN_GE_CHANNEL0_PACKET 0x5060 /* Channel 0 Packet count */
-+#define TITAN_GE_CHANNEL0_BYTE 0x5064 /* Channel 0 Byte count */
-+#define TITAN_GE_CHANNEL0_TX_DESC 0x5054 /* Channel 0 Tx first desc */
-+#define TITAN_GE_CHANNEL0_RX_DESC 0x5058 /* Channel 0 Rx first desc */
-+
-+/* AFX (Address Filter Exact) register offsets for Slice 0 */
-+#define TITAN_GE_AFX_EXACT_MATCH_LOW 0x1100 /* AFX Exact Match Address Low*/
-+#define TITAN_GE_AFX_EXACT_MATCH_MID 0x1104 /* AFX Exact Match Address Mid*/
-+#define TITAN_GE_AFX_EXACT_MATCH_HIGH 0x1108 /* AFX Exact Match Address Hi */
-+#define TITAN_GE_AFX_EXACT_MATCH_VID 0x110C /* AFX Exact Match VID */
-+#define TITAN_GE_AFX_MULTICAST_HASH_LOW 0x1110 /* AFX Multicast HASH Low */
-+#define TITAN_GE_AFX_MULTICAST_HASH_MIDLOW 0x1114 /* AFX Multicast HASH MidLow */
-+#define TITAN_GE_AFX_MULTICAST_HASH_MIDHI 0x1118 /* AFX Multicast HASH MidHi */
-+#define TITAN_GE_AFX_MULTICAST_HASH_HI 0x111C /* AFX Multicast HASH Hi */
-+#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 0x1120 /* AFX Address Filter Ctrl 0 */
-+#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 0x1124 /* AFX Address Filter Ctrl 1 */
-+#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 0x1128 /* AFX Address Filter Ctrl 2 */
-+
-+/* Traffic Groomer block */
-+#define TITAN_GE_TRTG_CONFIG 0x1000 /* TRTG Config */
-+
-+#endif /* _TITAN_GE_H_ */
-+
-diff -Nur linux-2.6.34.orig/drivers/net/titan_mdio.c linux-loongson/drivers/net/titan_mdio.c
---- linux-2.6.34.orig/drivers/net/titan_mdio.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/titan_mdio.c 2010-05-27 18:12:39.084716399 +0200
-@@ -0,0 +1,217 @@
-+/*
-+ * drivers/net/titan_mdio.c - Driver for Titan ethernet ports
-+ *
-+ * Copyright (C) 2003 PMC-Sierra Inc.
-+ * Author : Manish Lachwani (lachwani@pmc-sierra.com)
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2
-+ * of the License, or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * Management Data IO (MDIO) driver for the Titan GMII. Interacts with the Marvel PHY
-+ * on the Titan. No support for the TBI as yet.
-+ *
-+ */
-+
-+#include "titan_mdio.h"
-+
-+#define MDIO_DEBUG
-+
-+/*
-+ * Local constants
-+ */
-+#define MAX_CLKA 1023
-+#define MAX_PHY_DEV 31
-+#define MAX_PHY_REG 31
-+#define WRITEADDRS_OPCODE 0x0
-+#define READ_OPCODE 0x2
-+#define WRITE_OPCODE 0x1
-+#define MAX_MDIO_POLL 100
-+
-+/*
-+ * Titan MDIO and SCMB registers
-+ */
-+#define TITAN_GE_SCMB_CONTROL 0x01c0 /* SCMB Control */
-+#define TITAN_GE_SCMB_CLKA 0x01c4 /* SCMB Clock A */
-+#define TITAN_GE_MDIO_COMMAND 0x01d0 /* MDIO Command */
-+#define TITAN_GE_MDIO_DEVICE_PORT_ADDRESS 0x01d4 /* MDIO Device and Port addrs */
-+#define TITAN_GE_MDIO_DATA 0x01d8 /* MDIO Data */
-+#define TITAN_GE_MDIO_INTERRUPTS 0x01dC /* MDIO Interrupts */
-+
-+/*
-+ * Function to poll the MDIO
-+ */
-+static int titan_ge_mdio_poll(void)
-+{
-+ int i, val;
-+
-+ for (i = 0; i < MAX_MDIO_POLL; i++) {
-+ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND);
-+
-+ if (!(val & 0x8000))
-+ return TITAN_GE_MDIO_GOOD;
-+ }
-+
-+ return TITAN_GE_MDIO_ERROR;
-+}
-+
-+
-+/*
-+ * Initialize and configure the MDIO
-+ */
-+int titan_ge_mdio_setup(titan_ge_mdio_config *titan_mdio)
-+{
-+ unsigned long val;
-+
-+ /* Reset the SCMB and program into MDIO mode*/
-+ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x9000);
-+ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x1000);
-+
-+ /* CLK A */
-+ val = TITAN_GE_MDIO_READ(TITAN_GE_SCMB_CLKA);
-+ val = ( (val & ~(0x03ff)) | (titan_mdio->clka & 0x03ff));
-+ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CLKA, val);
-+
-+ /* Preamble Suppresion */
-+ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND);
-+ val = ( (val & ~(0x0001)) | (titan_mdio->mdio_spre & 0x0001));
-+ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val);
-+
-+ /* MDIO mode */
-+ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS);
-+ val = ( (val & ~(0x4000)) | (titan_mdio->mdio_mode & 0x4000));
-+ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val);
-+
-+ return TITAN_GE_MDIO_GOOD;
-+}
-+
-+/*
-+ * Set the PHY address in indirect mode
-+ */
-+int titan_ge_mdio_inaddrs(int dev_addr, int reg_addr)
-+{
-+ volatile unsigned long val;
-+
-+ /* Setup the PHY device */
-+ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS);
-+ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00));
-+ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f));
-+ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val);
-+
-+ /* Write the new address */
-+ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND);
-+ val = ( (val & ~(0x0300)) | ( (WRITEADDRS_OPCODE << 8) & 0x0300));
-+ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val);
-+
-+ return TITAN_GE_MDIO_GOOD;
-+}
-+
-+/*
-+ * Read the MDIO register. This is what the individual parametes mean:
-+ *
-+ * dev_addr : PHY ID
-+ * reg_addr : register offset
-+ *
-+ * See the spec for the Titan MAC. We operate in the Direct Mode.
-+ */
-+
-+#define MAX_RETRIES 2
-+
-+int titan_ge_mdio_read(int dev_addr, int reg_addr, unsigned int *pdata)
-+{
-+ volatile unsigned long val;
-+ int retries = 0;
-+
-+ /* Setup the PHY device */
-+
-+again:
-+ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS);
-+ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00));
-+ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f));
-+ val |= 0x4000;
-+ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val);
-+
-+ udelay(30);
-+
-+ /* Issue the read command */
-+ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND);
-+ val = ( (val & ~(0x0300)) | ( (READ_OPCODE << 8) & 0x0300));
-+ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val);
-+
-+ udelay(30);
-+
-+ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD)
-+ return TITAN_GE_MDIO_ERROR;
-+
-+ *pdata = (unsigned int)TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DATA);
-+ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS);
-+
-+ udelay(30);
-+
-+ if (val & 0x2) {
-+ if (retries == MAX_RETRIES)
-+ return TITAN_GE_MDIO_ERROR;
-+ else {
-+ retries++;
-+ goto again;
-+ }
-+ }
-+
-+ return TITAN_GE_MDIO_GOOD;
-+}
-+
-+/*
-+ * Write to the MDIO register
-+ *
-+ * dev_addr : PHY ID
-+ * reg_addr : register that needs to be written to
-+ *
-+ */
-+int titan_ge_mdio_write(int dev_addr, int reg_addr, unsigned int data)
-+{
-+ volatile unsigned long val;
-+
-+ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD)
-+ return TITAN_GE_MDIO_ERROR;
-+
-+ /* Setup the PHY device */
-+ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS);
-+ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00));
-+ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f));
-+ val |= 0x4000;
-+ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val);
-+
-+ udelay(30);
-+
-+ /* Setup the data to write */
-+ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DATA, data);
-+
-+ udelay(30);
-+
-+ /* Issue the write command */
-+ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND);
-+ val = ( (val & ~(0x0300)) | ( (WRITE_OPCODE << 8) & 0x0300));
-+ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val);
-+
-+ udelay(30);
-+
-+ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD)
-+ return TITAN_GE_MDIO_ERROR;
-+
-+ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS);
-+ if (val & 0x2)
-+ return TITAN_GE_MDIO_ERROR;
-+
-+ return TITAN_GE_MDIO_GOOD;
-+}
-+
-diff -Nur linux-2.6.34.orig/drivers/net/titan_mdio.h linux-loongson/drivers/net/titan_mdio.h
---- linux-2.6.34.orig/drivers/net/titan_mdio.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/titan_mdio.h 2010-05-27 18:12:39.084716399 +0200
-@@ -0,0 +1,56 @@
-+/*
-+ * MDIO used to interact with the PHY when using GMII/MII
-+ */
-+#ifndef _TITAN_MDIO_H
-+#define _TITAN_MDIO_H
-+
-+#include <linux/netdevice.h>
-+#include <linux/workqueue.h>
-+#include <linux/delay.h>
-+#include "titan_ge.h"
-+
-+
-+#define TITAN_GE_MDIO_ERROR (-9000)
-+#define TITAN_GE_MDIO_GOOD 0
-+
-+#define TITAN_GE_MDIO_BASE titan_ge_base
-+
-+#define TITAN_GE_MDIO_READ(offset) \
-+ *(volatile u32 *)(titan_ge_base + (offset))
-+
-+#define TITAN_GE_MDIO_WRITE(offset, data) \
-+ *(volatile u32 *)(titan_ge_base + (offset)) = (data)
-+
-+
-+/* GMII specific registers */
-+#define TITAN_GE_MARVEL_PHY_ID 0x00
-+#define TITAN_PHY_AUTONEG_ADV 0x04
-+#define TITAN_PHY_LP_ABILITY 0x05
-+#define TITAN_GE_MDIO_MII_CTRL 0x09
-+#define TITAN_GE_MDIO_MII_EXTENDED 0x0f
-+#define TITAN_GE_MDIO_PHY_CTRL 0x10
-+#define TITAN_GE_MDIO_PHY_STATUS 0x11
-+#define TITAN_GE_MDIO_PHY_IE 0x12
-+#define TITAN_GE_MDIO_PHY_IS 0x13
-+#define TITAN_GE_MDIO_PHY_LED 0x18
-+#define TITAN_GE_MDIO_PHY_LED_OVER 0x19
-+#define PHY_ANEG_TIME_WAIT 45 /* 45 seconds wait time */
-+
-+/*
-+ * MDIO Config Structure
-+ */
-+typedef struct {
-+ unsigned int clka;
-+ int mdio_spre;
-+ int mdio_mode;
-+} titan_ge_mdio_config;
-+
-+/*
-+ * Function Prototypes
-+ */
-+int titan_ge_mdio_setup(titan_ge_mdio_config *);
-+int titan_ge_mdio_inaddrs(int, int);
-+int titan_ge_mdio_read(int, int, unsigned int *);
-+int titan_ge_mdio_write(int, int, unsigned int);
-+
-+#endif /* _TITAN_MDIO_H */
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/Kconfig linux-loongson/drivers/net/wireless/Kconfig
---- linux-2.6.34.orig/drivers/net/wireless/Kconfig 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/drivers/net/wireless/Kconfig 2010-05-27 18:15:37.400979385 +0200
-@@ -268,7 +268,7 @@
-
- config RTL8187
- tristate "Realtek 8187 and 8187B USB support"
-- depends on MAC80211 && USB
-+ depends on MAC80211 && USB && !LEMOTE_MACH2F
- select EEPROM_93CX6
- ---help---
- This is a driver for RTL8187 and RTL8187B based cards.
-@@ -295,6 +295,19 @@
- depends on RTL8187 && MAC80211_LEDS && (LEDS_CLASS = y || LEDS_CLASS = RTL8187)
- default y
+ source "drivers/net/wireless/rtl818x/Kconfig"
+config RTL8187B
+ tristate "Realtek 8187B wifi support for yeeloong2f laptop"
@@ -8004,9 +1491,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/Kconfig linux-loongson/drivers/
config ADM8211
tristate "ADMtek ADM8211 support"
depends on MAC80211 && PCI && EXPERIMENTAL
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/Makefile linux-loongson/drivers/net/wireless/Makefile
---- linux-2.6.34.orig/drivers/net/wireless/Makefile 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/drivers/net/wireless/Makefile 2010-05-27 18:12:39.124712905 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/Makefile linux-2.6.35/drivers/net/wireless/Makefile
+--- linux-2.6.35.orig/drivers/net/wireless/Makefile 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/drivers/net/wireless/Makefile 2010-08-05 21:12:33.933623443 +0200
@@ -24,6 +24,7 @@
obj-$(CONFIG_ZD1211RW) += zd1211rw/
obj-$(CONFIG_RTL8180) += rtl818x/
@@ -8015,115 +1502,115 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/Makefile linux-loongson/drivers
# 16-bit wireless PCMCIA client drivers
obj-$(CONFIG_PCMCIA_RAYCS) += ray_cs.o
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/dot11d.h linux-loongson/drivers/net/wireless/rtl8187b/dot11d.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/dot11d.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/dot11d.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/dot11d.h linux-2.6.35/drivers/net/wireless/rtl8187b/dot11d.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/dot11d.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/dot11d.h 2010-08-05 21:12:33.973622039 +0200
@@ -0,0 +1,102 @@
-+#ifndef __INC_DOT11D_H
-+#define __INC_DOT11D_H
-+
-+#include "ieee80211/ieee80211.h"
-+
-+//#define ENABLE_DOT11D
-+
-+//#define DOT11D_MAX_CHNL_NUM 83
-+
-+typedef struct _CHNL_TXPOWER_TRIPLE {
-+ u8 FirstChnl;
-+ u8 NumChnls;
-+ u8 MaxTxPowerInDbm;
-+}CHNL_TXPOWER_TRIPLE, *PCHNL_TXPOWER_TRIPLE;
-+
-+typedef enum _DOT11D_STATE {
-+ DOT11D_STATE_NONE = 0,
-+ DOT11D_STATE_LEARNED,
-+ DOT11D_STATE_DONE,
-+}DOT11D_STATE;
-+
-+typedef struct _RT_DOT11D_INFO {
-+ //DECLARE_RT_OBJECT(RT_DOT11D_INFO);
-+
-+ bool bEnabled; // dot11MultiDomainCapabilityEnabled
-+
-+ u16 CountryIeLen; // > 0 if CountryIeBuf[] contains valid country information element.
-+ u8 CountryIeBuf[MAX_IE_LEN];
-+ u8 CountryIeSrcAddr[6]; // Source AP of the country IE.
-+ u8 CountryIeWatchdog;
-+
-+ u8 channel_map[MAX_CHANNEL_NUMBER+1]; //!!!Value 0: Invalid, 1: Valid (active scan), 2: Valid (passive scan)
-+ //u8 ChnlListLen; // #Bytes valid in ChnlList[].
-+ //u8 ChnlList[DOT11D_MAX_CHNL_NUM];
-+ u8 MaxTxPwrDbmList[MAX_CHANNEL_NUMBER+1];
-+
-+ DOT11D_STATE State;
-+}RT_DOT11D_INFO, *PRT_DOT11D_INFO;
-+#define eqMacAddr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 )
-+#define cpMacAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5])
-+#define GET_DOT11D_INFO(__pIeeeDev) ((PRT_DOT11D_INFO)((__pIeeeDev)->pDot11dInfo))
-+
-+#define IS_DOT11D_ENABLE(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->bEnabled
-+#define IS_COUNTRY_IE_VALID(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen > 0)
-+
-+#define IS_EQUAL_CIE_SRC(__pIeeeDev, __pTa) eqMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa)
-+#define UPDATE_CIE_SRC(__pIeeeDev, __pTa) cpMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa)
-+
-+#define IS_COUNTRY_IE_CHANGED(__pIeeeDev, __Ie) \
-+ (((__Ie).Length == 0 || (__Ie).Length != GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen) ? \
-+ FALSE : \
-+ (!memcmp(GET_DOT11D_INFO(__pIeeeDev)->CountryIeBuf, (__Ie).Octet, (__Ie).Length)))
-+
-+#define CIE_WATCHDOG_TH 1
-+#define GET_CIE_WATCHDOG(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->CountryIeWatchdog
-+#define RESET_CIE_WATCHDOG(__pIeeeDev) GET_CIE_WATCHDOG(__pIeeeDev) = 0
-+#define UPDATE_CIE_WATCHDOG(__pIeeeDev) ++GET_CIE_WATCHDOG(__pIeeeDev)
-+
-+#define IS_DOT11D_STATE_DONE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->State == DOT11D_STATE_DONE)
-+
-+
-+void
-+Dot11d_Init(
-+ struct ieee80211_device *dev
-+ );
-+
-+void
-+Dot11d_Reset(
-+ struct ieee80211_device *dev
-+ );
-+
-+void
-+Dot11d_UpdateCountryIe(
-+ struct ieee80211_device *dev,
-+ u8 * pTaddr,
-+ u16 CoutryIeLen,
-+ u8 * pCoutryIe
-+ );
-+
-+u8
-+DOT11D_GetMaxTxPwrInDbm(
-+ struct ieee80211_device *dev,
-+ u8 Channel
-+ );
-+
-+void
-+DOT11D_ScanComplete(
-+ struct ieee80211_device * dev
-+ );
-+
-+int IsLegalChannel(
-+ struct ieee80211_device * dev,
-+ u8 channel
-+);
-+
-+int ToLegalChannel(
-+ struct ieee80211_device * dev,
-+ u8 channel
-+);
-+
-+void dump_chnl_map(u8 * channel_map);
-+#endif // #ifndef __INC_DOT11D_H
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/arc4.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/arc4.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/arc4.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/arc4.c 2010-05-27 18:12:39.532222207 +0200
++#ifndef __INC_DOT11D_H
++#define __INC_DOT11D_H
++
++#include "ieee80211/ieee80211.h"
++
++//#define ENABLE_DOT11D
++
++//#define DOT11D_MAX_CHNL_NUM 83
++
++typedef struct _CHNL_TXPOWER_TRIPLE {
++ u8 FirstChnl;
++ u8 NumChnls;
++ u8 MaxTxPowerInDbm;
++}CHNL_TXPOWER_TRIPLE, *PCHNL_TXPOWER_TRIPLE;
++
++typedef enum _DOT11D_STATE {
++ DOT11D_STATE_NONE = 0,
++ DOT11D_STATE_LEARNED,
++ DOT11D_STATE_DONE,
++}DOT11D_STATE;
++
++typedef struct _RT_DOT11D_INFO {
++ //DECLARE_RT_OBJECT(RT_DOT11D_INFO);
++
++ bool bEnabled; // dot11MultiDomainCapabilityEnabled
++
++ u16 CountryIeLen; // > 0 if CountryIeBuf[] contains valid country information element.
++ u8 CountryIeBuf[MAX_IE_LEN];
++ u8 CountryIeSrcAddr[6]; // Source AP of the country IE.
++ u8 CountryIeWatchdog;
++
++ u8 channel_map[MAX_CHANNEL_NUMBER+1]; //!!!Value 0: Invalid, 1: Valid (active scan), 2: Valid (passive scan)
++ //u8 ChnlListLen; // #Bytes valid in ChnlList[].
++ //u8 ChnlList[DOT11D_MAX_CHNL_NUM];
++ u8 MaxTxPwrDbmList[MAX_CHANNEL_NUMBER+1];
++
++ DOT11D_STATE State;
++}RT_DOT11D_INFO, *PRT_DOT11D_INFO;
++#define eqMacAddr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 )
++#define cpMacAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5])
++#define GET_DOT11D_INFO(__pIeeeDev) ((PRT_DOT11D_INFO)((__pIeeeDev)->pDot11dInfo))
++
++#define IS_DOT11D_ENABLE(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->bEnabled
++#define IS_COUNTRY_IE_VALID(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen > 0)
++
++#define IS_EQUAL_CIE_SRC(__pIeeeDev, __pTa) eqMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa)
++#define UPDATE_CIE_SRC(__pIeeeDev, __pTa) cpMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa)
++
++#define IS_COUNTRY_IE_CHANGED(__pIeeeDev, __Ie) \
++ (((__Ie).Length == 0 || (__Ie).Length != GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen) ? \
++ FALSE : \
++ (!memcmp(GET_DOT11D_INFO(__pIeeeDev)->CountryIeBuf, (__Ie).Octet, (__Ie).Length)))
++
++#define CIE_WATCHDOG_TH 1
++#define GET_CIE_WATCHDOG(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->CountryIeWatchdog
++#define RESET_CIE_WATCHDOG(__pIeeeDev) GET_CIE_WATCHDOG(__pIeeeDev) = 0
++#define UPDATE_CIE_WATCHDOG(__pIeeeDev) ++GET_CIE_WATCHDOG(__pIeeeDev)
++
++#define IS_DOT11D_STATE_DONE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->State == DOT11D_STATE_DONE)
++
++
++void
++Dot11d_Init(
++ struct ieee80211_device *dev
++ );
++
++void
++Dot11d_Reset(
++ struct ieee80211_device *dev
++ );
++
++void
++Dot11d_UpdateCountryIe(
++ struct ieee80211_device *dev,
++ u8 * pTaddr,
++ u16 CoutryIeLen,
++ u8 * pCoutryIe
++ );
++
++u8
++DOT11D_GetMaxTxPwrInDbm(
++ struct ieee80211_device *dev,
++ u8 Channel
++ );
++
++void
++DOT11D_ScanComplete(
++ struct ieee80211_device * dev
++ );
++
++int IsLegalChannel(
++ struct ieee80211_device * dev,
++ u8 channel
++);
++
++int ToLegalChannel(
++ struct ieee80211_device * dev,
++ u8 channel
++);
++
++void dump_chnl_map(u8 * channel_map);
++#endif // #ifndef __INC_DOT11D_H
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/arc4.c linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/arc4.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/arc4.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/arc4.c 2010-08-05 21:12:34.013621816 +0200
@@ -0,0 +1,103 @@
+/*
+ * Cryptographic API
@@ -8228,363 +1715,363 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/arc4.c linux
+MODULE_LICENSE("GPL");
+MODULE_DESCRIPTION("ARC4 Cipher Algorithm");
+MODULE_AUTHOR("Jon Oberheide <jon@oberheide.org>");
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c 2010-08-05 21:12:34.063620315 +0200
@@ -0,0 +1,244 @@
-+#ifdef ENABLE_DOT11D
-+//-----------------------------------------------------------------------------
-+// File:
-+// Dot11d.c
-+//
-+// Description:
-+// Implement 802.11d.
-+//
-+//-----------------------------------------------------------------------------
-+
-+#include "dot11d.h"
-+
-+void
-+Dot11d_Init(struct ieee80211_device *ieee)
-+{
-+ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(ieee);
-+
-+ pDot11dInfo->bEnabled = 0;
-+
-+ pDot11dInfo->State = DOT11D_STATE_NONE;
-+ pDot11dInfo->CountryIeLen = 0;
-+ memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1);
-+ memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1);
-+ RESET_CIE_WATCHDOG(ieee);
-+
-+ //printk("Dot11d_Init()\n");
-+}
-+
-+//
-+// Description:
-+// Reset to the state as we are just entering a regulatory domain.
-+//
-+void
-+Dot11d_Reset(struct ieee80211_device *ieee)
-+{
-+ u32 i;
-+ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(ieee);
-+
-+ // Clear old channel map
-+ memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1);
-+ memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1);
-+ // Set new channel map
-+ for (i=1; i<=11; i++) {
-+ (pDot11dInfo->channel_map)[i] = 1;
-+ }
-+ for (i=12; i<=14; i++) {
-+ (pDot11dInfo->channel_map)[i] = 2;
-+ }
-+
-+ pDot11dInfo->State = DOT11D_STATE_NONE;
-+ pDot11dInfo->CountryIeLen = 0;
-+ RESET_CIE_WATCHDOG(ieee);
-+
-+ //printk("Dot11d_Reset()\n");
-+}
-+
-+//
-+// Description:
-+// Update country IE from Beacon or Probe Resopnse
-+// and configure PHY for operation in the regulatory domain.
-+//
-+// TODO:
-+// Configure Tx power.
-+//
-+// Assumption:
-+// 1. IS_DOT11D_ENABLE() is TRUE.
-+// 2. Input IE is an valid one.
-+//
-+void
-+Dot11d_UpdateCountryIe(
-+ struct ieee80211_device *dev,
-+ u8 * pTaddr,
-+ u16 CoutryIeLen,
-+ u8 * pCoutryIe
-+ )
-+{
-+ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
-+ u8 i, j, NumTriples, MaxChnlNum;
-+ PCHNL_TXPOWER_TRIPLE pTriple;
-+
-+ if((CoutryIeLen - 3)%3 != 0)
-+ {
-+ printk("Dot11d_UpdateCountryIe(): Invalid country IE, skip it........1\n");
-+ Dot11d_Reset(dev);
-+ return;
-+ }
-+
-+ memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1);
-+ memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1);
-+ MaxChnlNum = 0;
-+ NumTriples = (CoutryIeLen - 3) / 3; // skip 3-byte country string.
-+ pTriple = (PCHNL_TXPOWER_TRIPLE)(pCoutryIe + 3);
-+ for(i = 0; i < NumTriples; i++)
-+ {
-+ if(MaxChnlNum >= pTriple->FirstChnl)
-+ { // It is not in a monotonically increasing order, so stop processing.
-+ printk("Dot11d_UpdateCountryIe(): Invalid country IE, skip it........1\n");
-+ Dot11d_Reset(dev);
-+ return;
-+ }
-+ if(MAX_CHANNEL_NUMBER < (pTriple->FirstChnl + pTriple->NumChnls))
-+ { // It is not a valid set of channel id, so stop processing.
-+ printk("Dot11d_UpdateCountryIe(): Invalid country IE, skip it........2\n");
-+ Dot11d_Reset(dev);
-+ return;
-+ }
-+
-+ for(j = 0 ; j < pTriple->NumChnls; j++)
-+ {
-+ pDot11dInfo->channel_map[pTriple->FirstChnl + j] = 1;
-+ pDot11dInfo->MaxTxPwrDbmList[pTriple->FirstChnl + j] = pTriple->MaxTxPowerInDbm;
-+ MaxChnlNum = pTriple->FirstChnl + j;
-+ }
-+
-+ pTriple = (PCHNL_TXPOWER_TRIPLE)((u8*)pTriple + 3);
-+ }
-+#if 1
-+ //printk("Dot11d_UpdateCountryIe(): Channel List:\n");
-+ printk("Channel List:");
-+ for(i=1; i<= MAX_CHANNEL_NUMBER; i++)
-+ if(pDot11dInfo->channel_map[i] > 0)
-+ printk(" %d", i);
-+ printk("\n");
-+#endif
-+
-+ UPDATE_CIE_SRC(dev, pTaddr);
-+
-+ pDot11dInfo->CountryIeLen = CoutryIeLen;
-+ memcpy(pDot11dInfo->CountryIeBuf, pCoutryIe,CoutryIeLen);
-+ pDot11dInfo->State = DOT11D_STATE_LEARNED;
-+}
-+
-+void dump_chnl_map(u8 * channel_map)
-+{
-+ int i;
-+ printk("Channel List:");
-+ for(i=1; i<= MAX_CHANNEL_NUMBER; i++)
-+ if(channel_map[i] > 0)
-+ printk(" %d(%d)", i, channel_map[i]);
-+ printk("\n");
-+}
-+
-+u8
-+DOT11D_GetMaxTxPwrInDbm(
-+ struct ieee80211_device *dev,
-+ u8 Channel
-+ )
-+{
-+ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
-+ u8 MaxTxPwrInDbm = 255;
-+
-+ if(MAX_CHANNEL_NUMBER < Channel)
-+ {
-+ printk("DOT11D_GetMaxTxPwrInDbm(): Invalid Channel\n");
-+ return MaxTxPwrInDbm;
-+ }
-+ if(pDot11dInfo->channel_map[Channel])
-+ {
-+ MaxTxPwrInDbm = pDot11dInfo->MaxTxPwrDbmList[Channel];
-+ }
-+
-+ return MaxTxPwrInDbm;
-+}
-+
-+
-+void
-+DOT11D_ScanComplete(
-+ struct ieee80211_device * dev
-+ )
-+{
-+ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
-+
-+ switch(pDot11dInfo->State)
-+ {
-+ case DOT11D_STATE_LEARNED:
-+ pDot11dInfo->State = DOT11D_STATE_DONE;
-+ break;
-+
-+ case DOT11D_STATE_DONE:
-+ if( GET_CIE_WATCHDOG(dev) == 0 )
-+ { // Reset country IE if previous one is gone.
-+ Dot11d_Reset(dev);
-+ }
-+ break;
-+ case DOT11D_STATE_NONE:
-+ break;
-+ }
-+}
-+
-+int IsLegalChannel(
-+ struct ieee80211_device * dev,
-+ u8 channel
-+)
-+{
-+ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
-+
-+ if(MAX_CHANNEL_NUMBER < channel)
-+ {
-+ printk("IsLegalChannel(): Invalid Channel\n");
-+ return 0;
-+ }
-+ if(pDot11dInfo->channel_map[channel] > 0)
-+ return 1;
-+ return 0;
-+}
-+
-+int ToLegalChannel(
-+ struct ieee80211_device * dev,
-+ u8 channel
-+)
-+{
-+ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
-+ u8 default_chn = 0;
-+ u32 i = 0;
-+
-+ for (i=1; i<= MAX_CHANNEL_NUMBER; i++)
-+ {
-+ if(pDot11dInfo->channel_map[i] > 0)
-+ {
-+ default_chn = i;
-+ break;
-+ }
-+ }
-+
-+ if(MAX_CHANNEL_NUMBER < channel)
-+ {
-+ printk("IsLegalChannel(): Invalid Channel\n");
-+ return default_chn;
-+ }
-+
-+ if(pDot11dInfo->channel_map[channel] > 0)
-+ return channel;
-+
-+ return default_chn;
-+}
-+
-+EXPORT_SYMBOL(Dot11d_Init);
-+EXPORT_SYMBOL(Dot11d_Reset);
-+EXPORT_SYMBOL(Dot11d_UpdateCountryIe);
-+EXPORT_SYMBOL(DOT11D_GetMaxTxPwrInDbm);
-+EXPORT_SYMBOL(DOT11D_ScanComplete);
-+EXPORT_SYMBOL(IsLegalChannel);
-+EXPORT_SYMBOL(ToLegalChannel);
-+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h 2010-05-27 18:12:39.532222207 +0200
++#ifdef ENABLE_DOT11D
++//-----------------------------------------------------------------------------
++// File:
++// Dot11d.c
++//
++// Description:
++// Implement 802.11d.
++//
++//-----------------------------------------------------------------------------
++
++#include "dot11d.h"
++
++void
++Dot11d_Init(struct ieee80211_device *ieee)
++{
++ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(ieee);
++
++ pDot11dInfo->bEnabled = 0;
++
++ pDot11dInfo->State = DOT11D_STATE_NONE;
++ pDot11dInfo->CountryIeLen = 0;
++ memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1);
++ memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1);
++ RESET_CIE_WATCHDOG(ieee);
++
++ //printk("Dot11d_Init()\n");
++}
++
++//
++// Description:
++// Reset to the state as we are just entering a regulatory domain.
++//
++void
++Dot11d_Reset(struct ieee80211_device *ieee)
++{
++ u32 i;
++ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(ieee);
++
++ // Clear old channel map
++ memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1);
++ memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1);
++ // Set new channel map
++ for (i=1; i<=11; i++) {
++ (pDot11dInfo->channel_map)[i] = 1;
++ }
++ for (i=12; i<=14; i++) {
++ (pDot11dInfo->channel_map)[i] = 2;
++ }
++
++ pDot11dInfo->State = DOT11D_STATE_NONE;
++ pDot11dInfo->CountryIeLen = 0;
++ RESET_CIE_WATCHDOG(ieee);
++
++ //printk("Dot11d_Reset()\n");
++}
++
++//
++// Description:
++// Update country IE from Beacon or Probe Resopnse
++// and configure PHY for operation in the regulatory domain.
++//
++// TODO:
++// Configure Tx power.
++//
++// Assumption:
++// 1. IS_DOT11D_ENABLE() is TRUE.
++// 2. Input IE is an valid one.
++//
++void
++Dot11d_UpdateCountryIe(
++ struct ieee80211_device *dev,
++ u8 * pTaddr,
++ u16 CoutryIeLen,
++ u8 * pCoutryIe
++ )
++{
++ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
++ u8 i, j, NumTriples, MaxChnlNum;
++ PCHNL_TXPOWER_TRIPLE pTriple;
++
++ if((CoutryIeLen - 3)%3 != 0)
++ {
++ printk("Dot11d_UpdateCountryIe(): Invalid country IE, skip it........1\n");
++ Dot11d_Reset(dev);
++ return;
++ }
++
++ memset(pDot11dInfo->channel_map, 0, MAX_CHANNEL_NUMBER+1);
++ memset(pDot11dInfo->MaxTxPwrDbmList, 0xFF, MAX_CHANNEL_NUMBER+1);
++ MaxChnlNum = 0;
++ NumTriples = (CoutryIeLen - 3) / 3; // skip 3-byte country string.
++ pTriple = (PCHNL_TXPOWER_TRIPLE)(pCoutryIe + 3);
++ for(i = 0; i < NumTriples; i++)
++ {
++ if(MaxChnlNum >= pTriple->FirstChnl)
++ { // It is not in a monotonically increasing order, so stop processing.
++ printk("Dot11d_UpdateCountryIe(): Invalid country IE, skip it........1\n");
++ Dot11d_Reset(dev);
++ return;
++ }
++ if(MAX_CHANNEL_NUMBER < (pTriple->FirstChnl + pTriple->NumChnls))
++ { // It is not a valid set of channel id, so stop processing.
++ printk("Dot11d_UpdateCountryIe(): Invalid country IE, skip it........2\n");
++ Dot11d_Reset(dev);
++ return;
++ }
++
++ for(j = 0 ; j < pTriple->NumChnls; j++)
++ {
++ pDot11dInfo->channel_map[pTriple->FirstChnl + j] = 1;
++ pDot11dInfo->MaxTxPwrDbmList[pTriple->FirstChnl + j] = pTriple->MaxTxPowerInDbm;
++ MaxChnlNum = pTriple->FirstChnl + j;
++ }
++
++ pTriple = (PCHNL_TXPOWER_TRIPLE)((u8*)pTriple + 3);
++ }
++#if 1
++ //printk("Dot11d_UpdateCountryIe(): Channel List:\n");
++ printk("Channel List:");
++ for(i=1; i<= MAX_CHANNEL_NUMBER; i++)
++ if(pDot11dInfo->channel_map[i] > 0)
++ printk(" %d", i);
++ printk("\n");
++#endif
++
++ UPDATE_CIE_SRC(dev, pTaddr);
++
++ pDot11dInfo->CountryIeLen = CoutryIeLen;
++ memcpy(pDot11dInfo->CountryIeBuf, pCoutryIe,CoutryIeLen);
++ pDot11dInfo->State = DOT11D_STATE_LEARNED;
++}
++
++void dump_chnl_map(u8 * channel_map)
++{
++ int i;
++ printk("Channel List:");
++ for(i=1; i<= MAX_CHANNEL_NUMBER; i++)
++ if(channel_map[i] > 0)
++ printk(" %d(%d)", i, channel_map[i]);
++ printk("\n");
++}
++
++u8
++DOT11D_GetMaxTxPwrInDbm(
++ struct ieee80211_device *dev,
++ u8 Channel
++ )
++{
++ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
++ u8 MaxTxPwrInDbm = 255;
++
++ if(MAX_CHANNEL_NUMBER < Channel)
++ {
++ printk("DOT11D_GetMaxTxPwrInDbm(): Invalid Channel\n");
++ return MaxTxPwrInDbm;
++ }
++ if(pDot11dInfo->channel_map[Channel])
++ {
++ MaxTxPwrInDbm = pDot11dInfo->MaxTxPwrDbmList[Channel];
++ }
++
++ return MaxTxPwrInDbm;
++}
++
++
++void
++DOT11D_ScanComplete(
++ struct ieee80211_device * dev
++ )
++{
++ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
++
++ switch(pDot11dInfo->State)
++ {
++ case DOT11D_STATE_LEARNED:
++ pDot11dInfo->State = DOT11D_STATE_DONE;
++ break;
++
++ case DOT11D_STATE_DONE:
++ if( GET_CIE_WATCHDOG(dev) == 0 )
++ { // Reset country IE if previous one is gone.
++ Dot11d_Reset(dev);
++ }
++ break;
++ case DOT11D_STATE_NONE:
++ break;
++ }
++}
++
++int IsLegalChannel(
++ struct ieee80211_device * dev,
++ u8 channel
++)
++{
++ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
++
++ if(MAX_CHANNEL_NUMBER < channel)
++ {
++ printk("IsLegalChannel(): Invalid Channel\n");
++ return 0;
++ }
++ if(pDot11dInfo->channel_map[channel] > 0)
++ return 1;
++ return 0;
++}
++
++int ToLegalChannel(
++ struct ieee80211_device * dev,
++ u8 channel
++)
++{
++ PRT_DOT11D_INFO pDot11dInfo = GET_DOT11D_INFO(dev);
++ u8 default_chn = 0;
++ u32 i = 0;
++
++ for (i=1; i<= MAX_CHANNEL_NUMBER; i++)
++ {
++ if(pDot11dInfo->channel_map[i] > 0)
++ {
++ default_chn = i;
++ break;
++ }
++ }
++
++ if(MAX_CHANNEL_NUMBER < channel)
++ {
++ printk("IsLegalChannel(): Invalid Channel\n");
++ return default_chn;
++ }
++
++ if(pDot11dInfo->channel_map[channel] > 0)
++ return channel;
++
++ return default_chn;
++}
++
++EXPORT_SYMBOL(Dot11d_Init);
++EXPORT_SYMBOL(Dot11d_Reset);
++EXPORT_SYMBOL(Dot11d_UpdateCountryIe);
++EXPORT_SYMBOL(DOT11D_GetMaxTxPwrInDbm);
++EXPORT_SYMBOL(DOT11D_ScanComplete);
++EXPORT_SYMBOL(IsLegalChannel);
++EXPORT_SYMBOL(ToLegalChannel);
++#endif
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h 2010-08-05 21:12:34.103620371 +0200
@@ -0,0 +1,102 @@
-+#ifndef __INC_DOT11D_H
-+#define __INC_DOT11D_H
-+
-+#include "ieee80211.h"
-+
-+//#define ENABLE_DOT11D
-+
-+//#define DOT11D_MAX_CHNL_NUM 83
-+
-+typedef struct _CHNL_TXPOWER_TRIPLE {
-+ u8 FirstChnl;
-+ u8 NumChnls;
-+ u8 MaxTxPowerInDbm;
-+}CHNL_TXPOWER_TRIPLE, *PCHNL_TXPOWER_TRIPLE;
-+
-+typedef enum _DOT11D_STATE {
-+ DOT11D_STATE_NONE = 0,
-+ DOT11D_STATE_LEARNED,
-+ DOT11D_STATE_DONE,
-+}DOT11D_STATE;
-+
-+typedef struct _RT_DOT11D_INFO {
-+ //DECLARE_RT_OBJECT(RT_DOT11D_INFO);
-+
-+ bool bEnabled; // dot11MultiDomainCapabilityEnabled
-+
-+ u16 CountryIeLen; // > 0 if CountryIeBuf[] contains valid country information element.
-+ u8 CountryIeBuf[MAX_IE_LEN];
-+ u8 CountryIeSrcAddr[6]; // Source AP of the country IE.
-+ u8 CountryIeWatchdog;
-+
-+ u8 channel_map[MAX_CHANNEL_NUMBER+1]; //!!!Value 0: Invalid, 1: Valid (active scan), 2: Valid (passive scan)
-+ //u8 ChnlListLen; // #Bytes valid in ChnlList[].
-+ //u8 ChnlList[DOT11D_MAX_CHNL_NUM];
-+ u8 MaxTxPwrDbmList[MAX_CHANNEL_NUMBER+1];
-+
-+ DOT11D_STATE State;
-+}RT_DOT11D_INFO, *PRT_DOT11D_INFO;
-+#define eqMacAddr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 )
-+#define cpMacAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5])
-+#define GET_DOT11D_INFO(__pIeeeDev) ((PRT_DOT11D_INFO)((__pIeeeDev)->pDot11dInfo))
-+
-+#define IS_DOT11D_ENABLE(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->bEnabled
-+#define IS_COUNTRY_IE_VALID(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen > 0)
-+
-+#define IS_EQUAL_CIE_SRC(__pIeeeDev, __pTa) eqMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa)
-+#define UPDATE_CIE_SRC(__pIeeeDev, __pTa) cpMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa)
-+
-+#define IS_COUNTRY_IE_CHANGED(__pIeeeDev, __Ie) \
-+ (((__Ie).Length == 0 || (__Ie).Length != GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen) ? \
-+ FALSE : \
-+ (!memcmp(GET_DOT11D_INFO(__pIeeeDev)->CountryIeBuf, (__Ie).Octet, (__Ie).Length)))
-+
-+#define CIE_WATCHDOG_TH 1
-+#define GET_CIE_WATCHDOG(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->CountryIeWatchdog
-+#define RESET_CIE_WATCHDOG(__pIeeeDev) GET_CIE_WATCHDOG(__pIeeeDev) = 0
-+#define UPDATE_CIE_WATCHDOG(__pIeeeDev) ++GET_CIE_WATCHDOG(__pIeeeDev)
-+
-+#define IS_DOT11D_STATE_DONE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->State == DOT11D_STATE_DONE)
-+
-+
-+void
-+Dot11d_Init(
-+ struct ieee80211_device *dev
-+ );
-+
-+void
-+Dot11d_Reset(
-+ struct ieee80211_device *dev
-+ );
-+
-+void
-+Dot11d_UpdateCountryIe(
-+ struct ieee80211_device *dev,
-+ u8 * pTaddr,
-+ u16 CoutryIeLen,
-+ u8 * pCoutryIe
-+ );
-+
-+u8
-+DOT11D_GetMaxTxPwrInDbm(
-+ struct ieee80211_device *dev,
-+ u8 Channel
-+ );
-+
-+void
-+DOT11D_ScanComplete(
-+ struct ieee80211_device * dev
-+ );
-+
-+int IsLegalChannel(
-+ struct ieee80211_device * dev,
-+ u8 channel
-+);
-+
-+int ToLegalChannel(
-+ struct ieee80211_device * dev,
-+ u8 channel
-+);
-+
-+void dump_chnl_map(u8 * channel_map);
-+#endif // #ifndef __INC_DOT11D_H
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c 2010-05-27 18:12:39.532222207 +0200
++#ifndef __INC_DOT11D_H
++#define __INC_DOT11D_H
++
++#include "ieee80211.h"
++
++//#define ENABLE_DOT11D
++
++//#define DOT11D_MAX_CHNL_NUM 83
++
++typedef struct _CHNL_TXPOWER_TRIPLE {
++ u8 FirstChnl;
++ u8 NumChnls;
++ u8 MaxTxPowerInDbm;
++}CHNL_TXPOWER_TRIPLE, *PCHNL_TXPOWER_TRIPLE;
++
++typedef enum _DOT11D_STATE {
++ DOT11D_STATE_NONE = 0,
++ DOT11D_STATE_LEARNED,
++ DOT11D_STATE_DONE,
++}DOT11D_STATE;
++
++typedef struct _RT_DOT11D_INFO {
++ //DECLARE_RT_OBJECT(RT_DOT11D_INFO);
++
++ bool bEnabled; // dot11MultiDomainCapabilityEnabled
++
++ u16 CountryIeLen; // > 0 if CountryIeBuf[] contains valid country information element.
++ u8 CountryIeBuf[MAX_IE_LEN];
++ u8 CountryIeSrcAddr[6]; // Source AP of the country IE.
++ u8 CountryIeWatchdog;
++
++ u8 channel_map[MAX_CHANNEL_NUMBER+1]; //!!!Value 0: Invalid, 1: Valid (active scan), 2: Valid (passive scan)
++ //u8 ChnlListLen; // #Bytes valid in ChnlList[].
++ //u8 ChnlList[DOT11D_MAX_CHNL_NUM];
++ u8 MaxTxPwrDbmList[MAX_CHANNEL_NUMBER+1];
++
++ DOT11D_STATE State;
++}RT_DOT11D_INFO, *PRT_DOT11D_INFO;
++#define eqMacAddr(a,b) ( ((a)[0]==(b)[0] && (a)[1]==(b)[1] && (a)[2]==(b)[2] && (a)[3]==(b)[3] && (a)[4]==(b)[4] && (a)[5]==(b)[5]) ? 1:0 )
++#define cpMacAddr(des,src) ((des)[0]=(src)[0],(des)[1]=(src)[1],(des)[2]=(src)[2],(des)[3]=(src)[3],(des)[4]=(src)[4],(des)[5]=(src)[5])
++#define GET_DOT11D_INFO(__pIeeeDev) ((PRT_DOT11D_INFO)((__pIeeeDev)->pDot11dInfo))
++
++#define IS_DOT11D_ENABLE(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->bEnabled
++#define IS_COUNTRY_IE_VALID(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen > 0)
++
++#define IS_EQUAL_CIE_SRC(__pIeeeDev, __pTa) eqMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa)
++#define UPDATE_CIE_SRC(__pIeeeDev, __pTa) cpMacAddr(GET_DOT11D_INFO(__pIeeeDev)->CountryIeSrcAddr, __pTa)
++
++#define IS_COUNTRY_IE_CHANGED(__pIeeeDev, __Ie) \
++ (((__Ie).Length == 0 || (__Ie).Length != GET_DOT11D_INFO(__pIeeeDev)->CountryIeLen) ? \
++ FALSE : \
++ (!memcmp(GET_DOT11D_INFO(__pIeeeDev)->CountryIeBuf, (__Ie).Octet, (__Ie).Length)))
++
++#define CIE_WATCHDOG_TH 1
++#define GET_CIE_WATCHDOG(__pIeeeDev) GET_DOT11D_INFO(__pIeeeDev)->CountryIeWatchdog
++#define RESET_CIE_WATCHDOG(__pIeeeDev) GET_CIE_WATCHDOG(__pIeeeDev) = 0
++#define UPDATE_CIE_WATCHDOG(__pIeeeDev) ++GET_CIE_WATCHDOG(__pIeeeDev)
++
++#define IS_DOT11D_STATE_DONE(__pIeeeDev) (GET_DOT11D_INFO(__pIeeeDev)->State == DOT11D_STATE_DONE)
++
++
++void
++Dot11d_Init(
++ struct ieee80211_device *dev
++ );
++
++void
++Dot11d_Reset(
++ struct ieee80211_device *dev
++ );
++
++void
++Dot11d_UpdateCountryIe(
++ struct ieee80211_device *dev,
++ u8 * pTaddr,
++ u16 CoutryIeLen,
++ u8 * pCoutryIe
++ );
++
++u8
++DOT11D_GetMaxTxPwrInDbm(
++ struct ieee80211_device *dev,
++ u8 Channel
++ );
++
++void
++DOT11D_ScanComplete(
++ struct ieee80211_device * dev
++ );
++
++int IsLegalChannel(
++ struct ieee80211_device * dev,
++ u8 channel
++);
++
++int ToLegalChannel(
++ struct ieee80211_device * dev,
++ u8 channel
++);
++
++void dump_chnl_map(u8 * channel_map);
++#endif // #ifndef __INC_DOT11D_H
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c 2010-08-05 21:12:34.143621803 +0200
@@ -0,0 +1,275 @@
+/*
+ * Host AP crypto routines
@@ -8861,9 +2348,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_cr
+module_init(ieee80211_crypto_init);
+module_exit(ieee80211_crypto_deinit);
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c 2010-08-05 21:12:34.183623662 +0200
@@ -0,0 +1,524 @@
+/*
+ * Host AP crypt: host-based CCMP encryption implementation for Host AP driver
@@ -9389,9 +2876,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_cr
+module_init(ieee80211_crypto_ccmp_init);
+module_exit(ieee80211_crypto_ccmp_exit);
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h 2010-08-05 21:12:34.223620464 +0200
@@ -0,0 +1,91 @@
+/*
+ * Original code based on Host AP (software wireless LAN access point) driver
@@ -9484,9 +2971,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_cr
+#endif
+
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c 2010-08-05 21:12:34.263619025 +0200
@@ -0,0 +1,996 @@
+/*
+ * Host AP crypt: host-based TKIP encryption implementation for Host AP driver
@@ -10484,9 +3971,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_cr
+module_init(ieee80211_crypto_tkip_init);
+module_exit(ieee80211_crypto_tkip_exit);
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c 2010-08-05 21:12:34.313620509 +0200
@@ -0,0 +1,383 @@
+/*
+ * Host AP crypt: host-based WEP encryption implementation for Host AP driver
@@ -10871,9 +4358,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_cr
+module_init(ieee80211_crypto_wep_init);
+module_exit(ieee80211_crypto_wep_exit);
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h 2010-08-05 21:12:34.353620599 +0200
@@ -0,0 +1,1903 @@
+/*
+ * Merged with mainline ieee80211.h in Aug 2004. Original ieee802_11
@@ -12778,9 +6265,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h
+ return escaped;
+}
+#endif /* IEEE80211_H */
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c 2010-08-05 21:12:34.403617745 +0200
@@ -0,0 +1,385 @@
+/*******************************************************************************
+
@@ -13167,9 +6654,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_mo
+EXPORT_SYMBOL_NOVERS(alloc_ieee80211);
+EXPORT_SYMBOL_NOVERS(free_ieee80211);
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c 2010-08-05 21:12:34.443617689 +0200
@@ -0,0 +1,2074 @@
+/*
+ * Original code based Host AP (software wireless LAN access point) driver
@@ -15245,9 +8732,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx
+EXPORT_SYMBOL_NOVERS(ieee_ext_skb_p80211_to_ether);
+#endif
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c 2010-08-05 21:12:34.483617738 +0200
@@ -0,0 +1,4083 @@
+/* IEEE 802.11 SoftMAC layer
+ * Copyright (c) 2005 Andrea Merello <andreamrl@tiscali.it>
@@ -19332,9 +12819,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_so
+
+#endif
+//EXPORT_SYMBOL(ieee80211_sta_ps_send_null_frame);
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c 2010-08-05 21:12:34.523620485 +0200
@@ -0,0 +1,629 @@
+/* IEEE 802.11 SoftMAC layer
+ * Copyright (c) 2005 Andrea Merello <andreamrl@tiscali.it>
@@ -19965,9 +13452,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_so
+EXPORT_SYMBOL_NOVERS(ieee80211_wx_get_power);
+EXPORT_SYMBOL_NOVERS(ieee80211_wlan_frequencies);
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c 2010-08-05 21:12:34.563623786 +0200
@@ -0,0 +1,876 @@
+/******************************************************************************
+
@@ -20845,9 +14332,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx
+#endif // _RTL8187_EXT_PATCH_
+#endif
+
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c 2010-08-05 21:12:34.603620591 +0200
@@ -0,0 +1,926 @@
+/******************************************************************************
+
@@ -21775,9 +15262,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx
+EXPORT_SYMBOL_NOVERS(ieee80211_wx_set_encode);
+EXPORT_SYMBOL_NOVERS(ieee80211_wx_get_encode);
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/internal.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/internal.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/internal.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/internal.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/internal.h linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/internal.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/internal.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/internal.h 2010-08-05 21:12:34.643623535 +0200
@@ -0,0 +1,115 @@
+/*
+ * Cryptographic API.
@@ -21894,9 +15381,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/internal.h l
+
+#endif /* _CRYPTO_INTERNAL_H */
+
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h 2010-08-05 21:12:34.683618826 +0200
@@ -0,0 +1,20 @@
+#ifndef __KMAP_TYPES_H
+
@@ -21918,9 +15405,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h
+#define _ASM_KMAP_TYPES_H
+
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/readme linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/readme
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/readme 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/readme 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/readme linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/readme
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/readme 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/readme 2010-08-05 21:12:34.723621451 +0200
@@ -0,0 +1,162 @@
+What this layer should do
+
@@ -22084,295 +15571,295 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/readme linux
+function and the stop scan function are called with this semaphore held).
+
+
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h 2010-08-05 21:12:34.763617830 +0200
@@ -0,0 +1,282 @@
-+#ifndef _RTL8187_MESH_H_
-+#define _RTL8187_MESH_H_
-+
-+#include "msh_class.h" // struct mshclass
-+#include "mesh.h" // struct MESH-Neighbor-Entry
-+#include "ieee80211.h" // struct ieee80211-network
-+#include "mesh_8185_util.h" // DOT11-QUEUE
-+#include "hash_table.h" // hash-table
-+#include "8185s_pathsel.h"
-+#include <linux/list.h>
-+
-+#define GET_MESH_PRIV(x) ((struct mshclass_priv *)(x->priv))
-+
-+struct ieee80211_hdr_mesh {
-+ u16 frame_ctl;
-+ u16 duration_id;
-+ u8 addr1[ETH_ALEN];
-+ u8 addr2[ETH_ALEN];
-+ u8 addr3[ETH_ALEN];
-+ u16 seq_ctl;
-+ u8 addr4[ETH_ALEN];
-+ unsigned char mesh_flag;
-+ INT8 TTL;
-+ UINT16 segNum;
-+ unsigned char DestMACAddr[ETH_ALEN]; // modify for 6 address
-+ unsigned char SrcMACAddr[ETH_ALEN];
-+} __attribute__ ((packed));
-+
-+struct myMeshIDNode {
-+ struct list_head list;
-+ char id[MESH_ID_LEN+1];
-+ short popEN;
-+ char tried;
-+ unsigned long expire;
-+ struct ieee80211_network mesh_network;
-+};
-+
-+struct ieee80211_hdr_mesh_QOS {
-+ u16 frame_ctl;
-+ u16 duration_id;
-+ u8 addr1[ETH_ALEN];
-+ u8 addr2[ETH_ALEN];
-+ u8 addr3[ETH_ALEN];
-+ u16 seq_ctl;
-+ u8 addr4[ETH_ALEN];
-+ u16 QOS_ctl;
-+ unsigned char mesh_flag;
-+ INT8 TTL;
-+ UINT16 segNum;
-+ unsigned char DestMACAddr[ETH_ALEN]; // modify for 6 address
-+ unsigned char SrcMACAddr[ETH_ALEN];
-+} __attribute__ ((packed));
-+
-+
-+struct mesh_PeerEntry {
-+ // based on 8185ag.h
-+ struct list_head hash_list;
-+ unsigned int used; ///< used == TRUE => has been allocated, \n used == FALSE => can be allocated
-+ unsigned char hwaddr[MACADDRLEN]; ///< hardware address
-+
-+ // struct list_head mesh_unEstablish_ptr; // ©|¥¼(©Î±q¤w³s½u -> ¥¼³s½u) ¤§ MP list
-+ struct list_head mesh_mp_ptr; // MP list
-+
-+ /*mesh_neighbor:
-+ * Inited by "Neighbor Discovering"
-+ * cleaned by "Disassociation" or "Expired"
-+ */
-+ struct MESH_Neighbor_Entry mesh_neighbor_TBL;
-+
-+ struct ieee80211_network * pstat; // a backward pointer
-+
-+ // 802.11 seq checking
-+ u16 last_rxseq; /* rx seq previous per-tid */
-+ u16 last_rxfrag;/* tx frag previous per-tid */
-+ unsigned long last_time;
-+ //
-+};
-+
-+
-+struct mshclass_priv {
-+
-+ struct mesh_PeerEntry *meshEntries; // 1-to-1 for priv->ieee80211->networks
-+
-+ spinlock_t lock_stainfo; // lock for accessing the data structure of stat info
-+ spinlock_t lock_queue; // lock for DOT11_EnQueue2/DOT11_DeQueue2/enque/dequeue
-+ spinlock_t lock_Rreq; // lock for rreq_retry. Some function like aodv_expire/tx use lock_queue simultaneously
-+// spinlock_t lock_meshlist;
-+
-+ // struct _DOT11_QUEUE *pevent_queue; ///< 802.11 QUEUEµ²ºc
-+ // struct hash_table *pathsel_table; // GANTOE
-+ //tsananiu
-+ struct _DOT11_QUEUE *pathsel_queue; ///< 802.11 QUEUEµ²ºc
-+
-+ //tsananiu end
-+
-+ //add by shlu 20070518
-+ unsigned char RreqMAC[AODV_RREQ_TABLE_SIZE][6];
-+ unsigned int RreqBegin;
-+ unsigned int RreqEnd;
-+
-+#if defined(MESH_ROLE_ROOT) || defined(MESH_ROLE_PORTAL)
-+#define MAX_SZ_BAD_MAC 3
-+ unsigned char BadMac[MAX_SZ_BAD_MAC][MACADDRLEN];
-+ int idx_BadMac;
-+#endif // MESH_ROLE_ROOT || MESH_ROLE_PORTAL
-+
-+ //-------------
-+ unsigned char root_mac[MACADDRLEN];
-+ struct mesh_info dot11MeshInfo; // extrated from wifi_mib (ieee802_mib.h)
-+ struct hash_table *proxy_table, *mesh_rreq_retry_queue; //GANTOE //GANTOE
-+ struct hash_table *pathsel_table; // add by chuangch 2007.09.13
-+ // add by Jason
-+ struct mpp_tb *pann_mpp_tb;
-+
-+ struct timer_list expire_timer; // 1sec timer
-+
-+ struct timer_list beacon_timer; // 1sec timer
-+ struct list_head stat_hash[MAX_NETWORK_COUNT]; // sta_info hash table (aid_obj)
-+
-+ struct list_head meshList[MAX_CHANNEL_NUMBER];
-+ int scanMode;
-+
-+ struct {
-+ struct ieee80211_network *pstat;
-+ unsigned char hwaddr[MACADDRLEN];
-+ } stainfo_cache;
-+
-+ // The following elements are used by 802.11s.
-+ // For copyright-pretection, we use an independent (binary) module.
-+ // Note that it can also be put either under r8180_priv or ieee80211_device. The adv of put under
-+ // r8180_priv is to get "higher encapsulation". On the other hand, r8180_priv was originally designed
-+ // for "hardward specific."
-+ char mesh_mac_filter_allow[8][13];
-+ char mesh_mac_filter_deny[8][13];
-+
-+ struct MESH_Share meshare; // mesh share data
-+
-+ struct {
-+
-+ int prev_iw_mode; // Save this->iw_mode for r8180_wx->r8180_wx_enable_mesh. No init requirement
-+
-+ struct MESH_Profile mesh_profile; // contains MESHID
-+
-+ struct mesh_info dot11MeshInfo; // contains meshMaxAssocNum
-+
-+ struct net_device_stats mesh_stats;
-+
-+ UINT8 mesh_Version; // ¨Ï¥Îªºª©¥»
-+ // WLAN Mesh Capability
-+ INT16 mesh_PeerCAP_cap; // peer capability-Cap number (¦³¸¹¼Æ)
-+ UINT8 mesh_PeerCAP_flags; // peer capability-flags
-+ UINT8 mesh_PowerSaveCAP; // Power Save capability
-+ UINT8 mesh_SyncCAP; // Synchronization capability
-+ UINT8 mesh_MDA_CAP; // MDA capability
-+ UINT32 mesh_ChannelPrecedence; // Channel Precedence
-+
-+ // neighbor -> candidate neighbor, if mesh_available_peerlink > 0, page 56, D0.02
-+ UINT8 mesh_AvailablePeerLink; // ¦¹¬O§_¦³»Ý­n?(¦]¥¦µ¥¦P©ó mesh_PeerCAP)=>¼È ®É«O ¯d
-+
-+ UINT8 mesh_HeaderFlags; // mesh header ¤ºªº mesh flags field
-+
-+ // MKD domain element [MKDDIE]
-+ UINT8 mesh_MKD_DomainID[6];
-+ UINT8 mesh_MKDDIE_SecurityConfiguration;
-+
-+ // EMSA Handshake element [EMSAIE]
-+ UINT8 mesh_EMSAIE_ANonce[32];
-+ UINT8 mesh_EMSAIE_SNonce[32];
-+ UINT8 mesh_EMSAIE_MA_ID[6];
-+ UINT16 mesh_EMSAIE_MIC_Control;
-+ UINT8 mesh_EMSAIE_MIC[16];
-+
-+ struct timer_list mesh_peer_link_timer; ///< ¹ï©|¥¼³s ½u(»P³s½u°h¦Ü¥¼³s½u) MP mesh_unEstablish_hdr §@ peer link time out
-+
-+// struct timer_list mesh_beacon_timer;
-+ // mesh_unEstablish_hdr:
-+ // It is a list structure, only stores unEstablish (or Establish -> unEstablish [MP_HOLDING])MP entry
-+ // Each entry is a pointer pointing to an entry in "stat_info->mesh_mp_ptr"
-+ // and removed by successful "Peer link setup" or "Expired"
-+ struct list_head mesh_unEstablish_hdr;
-+
-+ // mesh_mp_hdr:
-+ // It is a list of MP/MAP/MPP who has already passed "Peer link setup"
-+ // Each entry is a pointer pointing to an entry in "stat_info->mesh_mp_ptr"
-+ // Every entry is inserted by "successful peer link setup"
-+ // and removed by "Expired"
-+ struct list_head mesh_mp_hdr;
-+
-+ } mesh;
-+
-+ int iCurChannel; // remember the working channel
-+};
-+
-+// Stanley, 04/23/07
-+// The following mode is used by ieee80211_device->iw_mode
-+// Although it is better to put the definition under linux/wireless.h (or wireless_copy.h), it is a system file
-+// that we shouldn't modify directly.
-+#define IW_MODE_MESH 11 /* 802.11s mesh mode */
-+
-+// Default MESHID
-+#define IEEE80211S_DEFAULT_MESHID "802.11s"
-+
-+// callback for 802.11s
-+extern short rtl8187_patch_ieee80211_probe_req_1 (struct ieee80211_device *ieee);
-+extern u8* rtl8187_patch_ieee80211_probe_req_2 (struct ieee80211_device *ieee, struct sk_buff *skb, u8 *tag);
-+
-+// wx
-+extern int rtl8187_patch_r8180_wx_get_meshinfo(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+extern int rtl8187_patch_r8180_wx_enable_mesh(struct net_device *dev);
-+extern int rtl8187_patch_r8180_wx_disable_mesh(struct net_device *dev);
-+extern int rtl8187_patch_r8180_wx_wx_set_meshID(struct net_device *dev, char *ext,unsigned char channel);
-+extern void rtl8187_patch_r8180_wx_set_channel (struct ieee80211_device *ieee, int ch);
-+extern int rtl8187_patch_r8180_wx_set_add_mac_allow(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+extern int rtl8187_patch_r8180_wx_set_del_mac_allow(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+extern int rtl8187_patch_r8180_wx_set_add_mac_deny(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+extern int rtl8187_patch_r8180_wx_set_del_mac_deny(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+extern int rtl8187_patch_r8180_wx_get_mac_allow(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+extern int rtl8187_patch_r8180_wx_get_mac_deny(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+
-+extern int rtl8187_patch_r8180_wx_get_mesh_list(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+extern int rtl8187_patch_r8180_wx_mesh_scan(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+extern int rtl8187_patch_r8180_wx_get_selected_mesh(struct net_device *dev, int en, char *cho, char* id);
-+//by amy for networkmanager UI
-+extern int rtl8187_patch_r8180_wx_get_selected_mesh_channel(struct net_device *dev, char *extmeshid, char *cho);
-+//by amy for networkmanager UI
-+// osdep
-+extern int rtl8187_patch_ieee80211_start_protocol (struct ieee80211_device *ieee);
-+extern u8 rtl8187_patch_rtl8180_up(struct mshclass *priv);
-+extern void rtl8187_patch_ieee80211_stop_protocol(struct ieee80211_device *ieee);
-+
-+// issue_assocreq_MP
-+extern void rtl8187_patch_ieee80211_association_req_1 (struct ieee80211_assoc_request_frame *hdr);
-+extern u8* rtl8187_patch_ieee80211_association_req_2 (struct ieee80211_device *ieee, struct ieee80211_network *pstat, struct sk_buff *skb);
-+
-+// OnAssocReq_MP
-+extern int rtl8187_patch_ieee80211_rx_frame_softmac_on_assoc_req (struct ieee80211_device *ieee, struct sk_buff *skb);
-+
-+// issue_assocrsp_MP
-+extern void rtl8187_patch_ieee80211_assoc_resp_by_net_1 (struct ieee80211_assoc_response_frame *assoc);
-+u8* rtl8187_patch_ieee80211_assoc_resp_by_net_2 (struct ieee80211_device *ieee, struct ieee80211_network *pstat, int pkt_type, struct sk_buff *skb);
-+
-+// OnAssocRsp_MP
-+extern int rtl8187_patch_ieee80211_rx_frame_softmac_on_assoc_rsp (struct ieee80211_device *ieee, struct sk_buff *skb);
-+
-+
-+extern int rtl8187_patch_ieee80211_rx_frame_softmac_on_auth(struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats);
-+extern int rtl8187_patch_ieee80211_rx_frame_softmac_on_deauth(struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats);
-+extern unsigned int rtl8187_patch_ieee80211_process_probe_response_1( struct ieee80211_device *ieee, struct ieee80211_probe_response *beacon, struct ieee80211_rx_stats *stats);
-+extern void rtl8187_patch_ieee80211_rx_mgt_on_probe_req( struct ieee80211_device *ieee, struct ieee80211_probe_request *beacon, struct ieee80211_rx_stats *stats);
-+extern void rtl8187_patch_ieee80211_rx_mgt_update_expire ( struct ieee80211_device *ieee, struct sk_buff *skb);
-+
-+// set channel
-+extern int rtl8187_patch_ieee80211_ext_stop_scan_wq_set_channel (struct ieee80211_device *ieee);
-+
-+// on rx (rx isr)
-+extern int rtl8187_patch_ieee80211_rx_on_rx (struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats, u16 type, u16 stype);
-+
-+// r8187_core
-+// handle ioctl
-+extern int rtl8187_patch_rtl8180_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
-+// create proc
-+extern void rtl8187_patch_create_proc(struct r8180_priv *priv);
-+extern void rtl8187_patch_remove_proc(struct r8180_priv *priv);
-+
-+// tx, xmit
-+// locked by ieee->lock. Call ieee80211_softmac_xmit afterward
-+extern struct ieee80211_txb* rtl8187_patch_ieee80211_xmit (struct sk_buff *skb, struct net_device *dev);
-+
-+// given a skb, output header's length
-+extern int rtl8187_patch_ieee80211_rx_frame_get_hdrlen (struct ieee80211_device *ieee, struct sk_buff *skb);
-+
-+// check the frame control field, return 0: not accept, 1: accept
-+extern int rtl8187_patch_ieee80211_rx_is_valid_framectl (struct ieee80211_device *ieee, u16 fc, u16 type, u16 stype);
-+
-+// process_dataframe
-+extern int rtl8187_patch_ieee80211_rx_process_dataframe (struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats);
-+
-+extern int rtl8187_patch_is_duplicate_packet (struct ieee80211_device *ieee, struct ieee80211_hdr *header, u16 type, u16 stype);
-+
-+extern int rtl8187_patch_ieee80211_softmac_xmit_get_rate (struct ieee80211_device *ieee, struct sk_buff *skb);
-+extern void ieee80211_start_mesh(struct ieee80211_device *ieee);
-+#endif // _RTL8187_MESH_H_
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h 2010-05-27 18:12:39.532222207 +0200
++#ifndef _RTL8187_MESH_H_
++#define _RTL8187_MESH_H_
++
++#include "msh_class.h" // struct mshclass
++#include "mesh.h" // struct MESH-Neighbor-Entry
++#include "ieee80211.h" // struct ieee80211-network
++#include "mesh_8185_util.h" // DOT11-QUEUE
++#include "hash_table.h" // hash-table
++#include "8185s_pathsel.h"
++#include <linux/list.h>
++
++#define GET_MESH_PRIV(x) ((struct mshclass_priv *)(x->priv))
++
++struct ieee80211_hdr_mesh {
++ u16 frame_ctl;
++ u16 duration_id;
++ u8 addr1[ETH_ALEN];
++ u8 addr2[ETH_ALEN];
++ u8 addr3[ETH_ALEN];
++ u16 seq_ctl;
++ u8 addr4[ETH_ALEN];
++ unsigned char mesh_flag;
++ INT8 TTL;
++ UINT16 segNum;
++ unsigned char DestMACAddr[ETH_ALEN]; // modify for 6 address
++ unsigned char SrcMACAddr[ETH_ALEN];
++} __attribute__ ((packed));
++
++struct myMeshIDNode {
++ struct list_head list;
++ char id[MESH_ID_LEN+1];
++ short popEN;
++ char tried;
++ unsigned long expire;
++ struct ieee80211_network mesh_network;
++};
++
++struct ieee80211_hdr_mesh_QOS {
++ u16 frame_ctl;
++ u16 duration_id;
++ u8 addr1[ETH_ALEN];
++ u8 addr2[ETH_ALEN];
++ u8 addr3[ETH_ALEN];
++ u16 seq_ctl;
++ u8 addr4[ETH_ALEN];
++ u16 QOS_ctl;
++ unsigned char mesh_flag;
++ INT8 TTL;
++ UINT16 segNum;
++ unsigned char DestMACAddr[ETH_ALEN]; // modify for 6 address
++ unsigned char SrcMACAddr[ETH_ALEN];
++} __attribute__ ((packed));
++
++
++struct mesh_PeerEntry {
++ // based on 8185ag.h
++ struct list_head hash_list;
++ unsigned int used; ///< used == TRUE => has been allocated, \n used == FALSE => can be allocated
++ unsigned char hwaddr[MACADDRLEN]; ///< hardware address
++
++ // struct list_head mesh_unEstablish_ptr; // ©|¥¼(©Î±q¤w³s½u -> ¥¼³s½u) ¤§ MP list
++ struct list_head mesh_mp_ptr; // MP list
++
++ /*mesh_neighbor:
++ * Inited by "Neighbor Discovering"
++ * cleaned by "Disassociation" or "Expired"
++ */
++ struct MESH_Neighbor_Entry mesh_neighbor_TBL;
++
++ struct ieee80211_network * pstat; // a backward pointer
++
++ // 802.11 seq checking
++ u16 last_rxseq; /* rx seq previous per-tid */
++ u16 last_rxfrag;/* tx frag previous per-tid */
++ unsigned long last_time;
++ //
++};
++
++
++struct mshclass_priv {
++
++ struct mesh_PeerEntry *meshEntries; // 1-to-1 for priv->ieee80211->networks
++
++ spinlock_t lock_stainfo; // lock for accessing the data structure of stat info
++ spinlock_t lock_queue; // lock for DOT11_EnQueue2/DOT11_DeQueue2/enque/dequeue
++ spinlock_t lock_Rreq; // lock for rreq_retry. Some function like aodv_expire/tx use lock_queue simultaneously
++// spinlock_t lock_meshlist;
++
++ // struct _DOT11_QUEUE *pevent_queue; ///< 802.11 QUEUEµ²ºc
++ // struct hash_table *pathsel_table; // GANTOE
++ //tsananiu
++ struct _DOT11_QUEUE *pathsel_queue; ///< 802.11 QUEUEµ²ºc
++
++ //tsananiu end
++
++ //add by shlu 20070518
++ unsigned char RreqMAC[AODV_RREQ_TABLE_SIZE][6];
++ unsigned int RreqBegin;
++ unsigned int RreqEnd;
++
++#if defined(MESH_ROLE_ROOT) || defined(MESH_ROLE_PORTAL)
++#define MAX_SZ_BAD_MAC 3
++ unsigned char BadMac[MAX_SZ_BAD_MAC][MACADDRLEN];
++ int idx_BadMac;
++#endif // MESH_ROLE_ROOT || MESH_ROLE_PORTAL
++
++ //-------------
++ unsigned char root_mac[MACADDRLEN];
++ struct mesh_info dot11MeshInfo; // extrated from wifi_mib (ieee802_mib.h)
++ struct hash_table *proxy_table, *mesh_rreq_retry_queue; //GANTOE //GANTOE
++ struct hash_table *pathsel_table; // add by chuangch 2007.09.13
++ // add by Jason
++ struct mpp_tb *pann_mpp_tb;
++
++ struct timer_list expire_timer; // 1sec timer
++
++ struct timer_list beacon_timer; // 1sec timer
++ struct list_head stat_hash[MAX_NETWORK_COUNT]; // sta_info hash table (aid_obj)
++
++ struct list_head meshList[MAX_CHANNEL_NUMBER];
++ int scanMode;
++
++ struct {
++ struct ieee80211_network *pstat;
++ unsigned char hwaddr[MACADDRLEN];
++ } stainfo_cache;
++
++ // The following elements are used by 802.11s.
++ // For copyright-pretection, we use an independent (binary) module.
++ // Note that it can also be put either under r8180_priv or ieee80211_device. The adv of put under
++ // r8180_priv is to get "higher encapsulation". On the other hand, r8180_priv was originally designed
++ // for "hardward specific."
++ char mesh_mac_filter_allow[8][13];
++ char mesh_mac_filter_deny[8][13];
++
++ struct MESH_Share meshare; // mesh share data
++
++ struct {
++
++ int prev_iw_mode; // Save this->iw_mode for r8180_wx->r8180_wx_enable_mesh. No init requirement
++
++ struct MESH_Profile mesh_profile; // contains MESHID
++
++ struct mesh_info dot11MeshInfo; // contains meshMaxAssocNum
++
++ struct net_device_stats mesh_stats;
++
++ UINT8 mesh_Version; // ¨Ï¥Îªºª©¥»
++ // WLAN Mesh Capability
++ INT16 mesh_PeerCAP_cap; // peer capability-Cap number (¦³¸¹¼Æ)
++ UINT8 mesh_PeerCAP_flags; // peer capability-flags
++ UINT8 mesh_PowerSaveCAP; // Power Save capability
++ UINT8 mesh_SyncCAP; // Synchronization capability
++ UINT8 mesh_MDA_CAP; // MDA capability
++ UINT32 mesh_ChannelPrecedence; // Channel Precedence
++
++ // neighbor -> candidate neighbor, if mesh_available_peerlink > 0, page 56, D0.02
++ UINT8 mesh_AvailablePeerLink; // ¦¹¬O§_¦³»Ý­n?(¦]¥¦µ¥¦P©ó mesh_PeerCAP)=>¼È ®É«O ¯d
++
++ UINT8 mesh_HeaderFlags; // mesh header ¤ºªº mesh flags field
++
++ // MKD domain element [MKDDIE]
++ UINT8 mesh_MKD_DomainID[6];
++ UINT8 mesh_MKDDIE_SecurityConfiguration;
++
++ // EMSA Handshake element [EMSAIE]
++ UINT8 mesh_EMSAIE_ANonce[32];
++ UINT8 mesh_EMSAIE_SNonce[32];
++ UINT8 mesh_EMSAIE_MA_ID[6];
++ UINT16 mesh_EMSAIE_MIC_Control;
++ UINT8 mesh_EMSAIE_MIC[16];
++
++ struct timer_list mesh_peer_link_timer; ///< ¹ï©|¥¼³s ½u(»P³s½u°h¦Ü¥¼³s½u) MP mesh_unEstablish_hdr §@ peer link time out
++
++// struct timer_list mesh_beacon_timer;
++ // mesh_unEstablish_hdr:
++ // It is a list structure, only stores unEstablish (or Establish -> unEstablish [MP_HOLDING])MP entry
++ // Each entry is a pointer pointing to an entry in "stat_info->mesh_mp_ptr"
++ // and removed by successful "Peer link setup" or "Expired"
++ struct list_head mesh_unEstablish_hdr;
++
++ // mesh_mp_hdr:
++ // It is a list of MP/MAP/MPP who has already passed "Peer link setup"
++ // Each entry is a pointer pointing to an entry in "stat_info->mesh_mp_ptr"
++ // Every entry is inserted by "successful peer link setup"
++ // and removed by "Expired"
++ struct list_head mesh_mp_hdr;
++
++ } mesh;
++
++ int iCurChannel; // remember the working channel
++};
++
++// Stanley, 04/23/07
++// The following mode is used by ieee80211_device->iw_mode
++// Although it is better to put the definition under linux/wireless.h (or wireless_copy.h), it is a system file
++// that we shouldn't modify directly.
++#define IW_MODE_MESH 11 /* 802.11s mesh mode */
++
++// Default MESHID
++#define IEEE80211S_DEFAULT_MESHID "802.11s"
++
++// callback for 802.11s
++extern short rtl8187_patch_ieee80211_probe_req_1 (struct ieee80211_device *ieee);
++extern u8* rtl8187_patch_ieee80211_probe_req_2 (struct ieee80211_device *ieee, struct sk_buff *skb, u8 *tag);
++
++// wx
++extern int rtl8187_patch_r8180_wx_get_meshinfo(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++extern int rtl8187_patch_r8180_wx_enable_mesh(struct net_device *dev);
++extern int rtl8187_patch_r8180_wx_disable_mesh(struct net_device *dev);
++extern int rtl8187_patch_r8180_wx_wx_set_meshID(struct net_device *dev, char *ext,unsigned char channel);
++extern void rtl8187_patch_r8180_wx_set_channel (struct ieee80211_device *ieee, int ch);
++extern int rtl8187_patch_r8180_wx_set_add_mac_allow(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++extern int rtl8187_patch_r8180_wx_set_del_mac_allow(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++extern int rtl8187_patch_r8180_wx_set_add_mac_deny(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++extern int rtl8187_patch_r8180_wx_set_del_mac_deny(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++extern int rtl8187_patch_r8180_wx_get_mac_allow(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++extern int rtl8187_patch_r8180_wx_get_mac_deny(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++
++extern int rtl8187_patch_r8180_wx_get_mesh_list(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++extern int rtl8187_patch_r8180_wx_mesh_scan(struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++extern int rtl8187_patch_r8180_wx_get_selected_mesh(struct net_device *dev, int en, char *cho, char* id);
++//by amy for networkmanager UI
++extern int rtl8187_patch_r8180_wx_get_selected_mesh_channel(struct net_device *dev, char *extmeshid, char *cho);
++//by amy for networkmanager UI
++// osdep
++extern int rtl8187_patch_ieee80211_start_protocol (struct ieee80211_device *ieee);
++extern u8 rtl8187_patch_rtl8180_up(struct mshclass *priv);
++extern void rtl8187_patch_ieee80211_stop_protocol(struct ieee80211_device *ieee);
++
++// issue_assocreq_MP
++extern void rtl8187_patch_ieee80211_association_req_1 (struct ieee80211_assoc_request_frame *hdr);
++extern u8* rtl8187_patch_ieee80211_association_req_2 (struct ieee80211_device *ieee, struct ieee80211_network *pstat, struct sk_buff *skb);
++
++// OnAssocReq_MP
++extern int rtl8187_patch_ieee80211_rx_frame_softmac_on_assoc_req (struct ieee80211_device *ieee, struct sk_buff *skb);
++
++// issue_assocrsp_MP
++extern void rtl8187_patch_ieee80211_assoc_resp_by_net_1 (struct ieee80211_assoc_response_frame *assoc);
++u8* rtl8187_patch_ieee80211_assoc_resp_by_net_2 (struct ieee80211_device *ieee, struct ieee80211_network *pstat, int pkt_type, struct sk_buff *skb);
++
++// OnAssocRsp_MP
++extern int rtl8187_patch_ieee80211_rx_frame_softmac_on_assoc_rsp (struct ieee80211_device *ieee, struct sk_buff *skb);
++
++
++extern int rtl8187_patch_ieee80211_rx_frame_softmac_on_auth(struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats);
++extern int rtl8187_patch_ieee80211_rx_frame_softmac_on_deauth(struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats);
++extern unsigned int rtl8187_patch_ieee80211_process_probe_response_1( struct ieee80211_device *ieee, struct ieee80211_probe_response *beacon, struct ieee80211_rx_stats *stats);
++extern void rtl8187_patch_ieee80211_rx_mgt_on_probe_req( struct ieee80211_device *ieee, struct ieee80211_probe_request *beacon, struct ieee80211_rx_stats *stats);
++extern void rtl8187_patch_ieee80211_rx_mgt_update_expire ( struct ieee80211_device *ieee, struct sk_buff *skb);
++
++// set channel
++extern int rtl8187_patch_ieee80211_ext_stop_scan_wq_set_channel (struct ieee80211_device *ieee);
++
++// on rx (rx isr)
++extern int rtl8187_patch_ieee80211_rx_on_rx (struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats, u16 type, u16 stype);
++
++// r8187_core
++// handle ioctl
++extern int rtl8187_patch_rtl8180_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
++// create proc
++extern void rtl8187_patch_create_proc(struct r8180_priv *priv);
++extern void rtl8187_patch_remove_proc(struct r8180_priv *priv);
++
++// tx, xmit
++// locked by ieee->lock. Call ieee80211_softmac_xmit afterward
++extern struct ieee80211_txb* rtl8187_patch_ieee80211_xmit (struct sk_buff *skb, struct net_device *dev);
++
++// given a skb, output header's length
++extern int rtl8187_patch_ieee80211_rx_frame_get_hdrlen (struct ieee80211_device *ieee, struct sk_buff *skb);
++
++// check the frame control field, return 0: not accept, 1: accept
++extern int rtl8187_patch_ieee80211_rx_is_valid_framectl (struct ieee80211_device *ieee, u16 fc, u16 type, u16 stype);
++
++// process_dataframe
++extern int rtl8187_patch_ieee80211_rx_process_dataframe (struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats);
++
++extern int rtl8187_patch_is_duplicate_packet (struct ieee80211_device *ieee, struct ieee80211_hdr *header, u16 type, u16 stype);
++
++extern int rtl8187_patch_ieee80211_softmac_xmit_get_rate (struct ieee80211_device *ieee, struct sk_buff *skb);
++extern void ieee80211_start_mesh(struct ieee80211_device *ieee);
++#endif // _RTL8187_MESH_H_
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h 2010-08-05 21:12:34.803620839 +0200
@@ -0,0 +1,399 @@
+/*
+ * Scatterlist Cryptographic API.
@@ -22773,9 +16260,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h
+
+#endif /* _LINUX_CRYPTO_H */
+
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h 2010-08-05 21:12:34.843620278 +0200
@@ -0,0 +1,51 @@
+/*
+ * Cryptographic API.
@@ -22828,9 +16315,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.
+void scatterwalk_done(struct scatter_walk *walk, int out, int more);
+
+#endif /* _CRYPTO_SCATTERWALK_H */
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/Makefile linux-loongson/drivers/net/wireless/rtl8187b/Makefile
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/Makefile 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/Makefile linux-2.6.35/drivers/net/wireless/rtl8187b/Makefile
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/Makefile 2010-08-05 21:12:34.883623740 +0200
@@ -0,0 +1,41 @@
+obj-$(CONFIG_RTL8187B) += rtl8187b.o
+
@@ -22873,130 +16360,130 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/Makefile linux-loongso
+
+#for dot11d
+EXTRA_CFLAGS += -DENABLE_DOT11D
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/msh_class.h linux-loongson/drivers/net/wireless/rtl8187b/msh_class.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/msh_class.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/msh_class.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/msh_class.h linux-2.6.35/drivers/net/wireless/rtl8187b/msh_class.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/msh_class.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/msh_class.h 2010-08-05 21:12:34.933991193 +0200
@@ -0,0 +1,117 @@
-+/*! \file msh_class.h
-+ \brief msh CLASS extension
-+
-+ \date 2007/5/2
-+ \author Stanley Chang <chagnsl@cs.nctu.edu.tw>
-+*/
-+
-+#ifndef _MESH_CLASS_HDR_H_
-+#define _MESH_CLASS_HDR_H_
-+
-+#include <linux/if_ether.h> /* ETH_ALEN */
-+#include <linux/kernel.h> /* ARRAY_SIZE */
-+#include <linux/version.h>
-+#include <linux/jiffies.h>
-+#include <linux/timer.h>
-+#include <linux/sched.h>
-+
-+#include "ieee80211/ieee80211.h" // for struct ieee80211-xxxx
-+#include "r8187.h" // for struct r8180-priv
-+
-+#define MAC_TABLE_SIZE 8
-+
-+struct mshclass {
-+ struct r8180_priv * p8187;
-+
-+ // callback functions
-+ // ieee80211_softmac.c
-+ int (*ext_patch_ieee80211_start_protocol) (struct ieee80211_device *ieee); // start special mode
-+
-+ short (*ext_patch_ieee80211_probe_req_1) (struct ieee80211_device *ieee); // return = 0: no more phases, >0: another phase
-+ u8* (*ext_patch_ieee80211_probe_req_2) (struct ieee80211_device *ieee, struct sk_buff *skb, u8 *tag); // return tag
-+
-+ void (*ext_patch_ieee80211_association_req_1) (struct ieee80211_assoc_request_frame *hdr);
-+ u8* (*ext_patch_ieee80211_association_req_2) (struct ieee80211_device *ieee, struct ieee80211_network *pstat, struct sk_buff *skb);
-+
-+ int (*ext_patch_ieee80211_rx_frame_softmac_on_assoc_req) (struct ieee80211_device *ieee, struct sk_buff *skb);
-+ int (*ext_patch_ieee80211_rx_frame_softmac_on_assoc_rsp) (struct ieee80211_device *ieee, struct sk_buff *skb);
-+
-+ void (*ext_patch_ieee80211_stop_protocol) (struct ieee80211_device *ieee); // stop timer
-+
-+ void (*ext_patch_ieee80211_assoc_resp_by_net_1) (struct ieee80211_assoc_response_frame *assoc);
-+ u8* (*ext_patch_ieee80211_assoc_resp_by_net_2) (struct ieee80211_device *ieee, struct ieee80211_network *pstat, int pkt_type, struct sk_buff *skb);
-+
-+ int (*ext_patch_ieee80211_ext_stop_scan_wq_set_channel) (struct ieee80211_device *ieee);
-+
-+ struct sk_buff* (*ext_patch_get_beacon_get_probersp)(struct ieee80211_device *ieee, u8 *dest, struct ieee80211_network *net);
-+
-+ int (*ext_patch_ieee80211_softmac_xmit_get_rate) (struct ieee80211_device *ieee, struct sk_buff *skb);
-+ int (*ext_patch_ieee80211_rx_frame_softmac_on_auth)(struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats);
-+ int (*ext_patch_ieee80211_rx_frame_softmac_on_deauth)(struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats);
-+//by amy for mesh
-+ void (*ext_patch_ieee80211_start_mesh)(struct ieee80211_device *ieee);
-+//by amy for mesh
-+ /// r8180_wx.c
-+ int (*ext_patch_r8180_wx_get_meshinfo) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+ int (*ext_patch_r8180_wx_enable_mesh) (struct net_device *dev);
-+ int (*ext_patch_r8180_wx_disable_mesh) (struct net_device *dev);
-+ int (*ext_patch_r8180_wx_set_meshID) ( struct net_device *dev, char *ext);
-+//by amy for mesh
-+ int (*ext_patch_r8180_wx_set_mesh_chan)(struct net_device *dev, unsigned char channel);
-+//by amy for mesh
-+ void (*ext_patch_r8180_wx_set_channel) (struct ieee80211_device *ieee, int ch);
-+
-+ int (*ext_patch_r8180_wx_set_add_mac_allow) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+ int (*ext_patch_r8180_wx_set_del_mac_allow) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+ int (*ext_patch_r8180_wx_set_add_mac_deny) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+ int (*ext_patch_r8180_wx_set_del_mac_deny) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+ int (*ext_patch_r8180_wx_get_mac_allow) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+ int (*ext_patch_r8180_wx_get_mac_deny) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+
-+ int (*ext_patch_r8180_wx_get_mesh_list) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+ int (*ext_patch_r8180_wx_mesh_scan) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
-+ int (*ext_patch_r8180_wx_get_selected_mesh)(struct net_device *dev, int en, char *cho, char* id);
-+//by amy for networkmanager UI
-+ int (*ext_patch_r8180_wx_get_selected_mesh_channel)(struct net_device *dev, char* extmeshid, char *cho);
-+//by amy for networkmanager UI
-+ /// r8187_core.c
-+ u8 (*ext_patch_rtl8180_up) (struct mshclass *priv);
-+
-+ // ieee80211_rx.c
-+ unsigned int (*ext_patch_ieee80211_process_probe_response_1) ( struct ieee80211_device *ieee, struct ieee80211_probe_response *beacon, struct ieee80211_rx_stats *stats);
-+ void (*ext_patch_ieee80211_rx_mgt_on_probe_req) ( struct ieee80211_device *ieee, struct ieee80211_probe_request *beacon, struct ieee80211_rx_stats *stats);
-+
-+ void (*ext_patch_ieee80211_rx_mgt_update_expire) ( struct ieee80211_device *ieee, struct sk_buff *skb);
-+
-+ int (*ext_patch_ieee80211_rx_on_rx) (struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats, u16 type, u16 stype);
-+
-+ int (*ext_patch_ieee80211_rx_frame_get_hdrlen) (struct ieee80211_device *ieee, struct sk_buff *skb);
-+
-+ int (*ext_patch_ieee80211_rx_is_valid_framectl) (struct ieee80211_device *ieee, u16 fc, u16 type, u16 stype);
-+
-+ // return > 0 is success. 0 when failed
-+ int (*ext_patch_ieee80211_rx_process_dataframe) (struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats);
-+
-+ int (*ext_patch_is_duplicate_packet) (struct ieee80211_device *ieee, struct ieee80211_hdr *header, u16 type, u16 stype);
-+ /* added by david for setting acl dynamically */
-+ u8 (*ext_patch_ieee80211_acl_query) (struct ieee80211_device *ieee, u8 *sa);
-+
-+ // r8187_core.c
-+ int (*ext_patch_rtl8180_ioctl) (struct net_device *dev, struct ifreq *rq, int cmd);
-+ void (*ext_patch_create_proc) (struct r8180_priv *priv);
-+ void (*ext_patch_remove_proc) (struct r8180_priv *priv);
-+
-+ // ieee80211_tx.c
-+
-+ // locked by ieee->lock. Call ieee80211_softmac_xmit afterward
-+ struct ieee80211_txb* (*ext_patch_ieee80211_xmit) (struct sk_buff *skb, struct net_device *dev);
-+
-+ // DO NOT MODIFY ANY STRUCTURE BELOW THIS LINE
-+ u8 priv[0]; // mshclass_priv;
-+};
-+
-+extern void free_mshobj(struct mshclass **pObj);
-+extern struct mshclass *alloc_mshobj(struct r8180_priv *caller_priv);
-+
-+
-+#endif // _MESH_CLASS_HDR_H_
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_93cx6.c linux-loongson/drivers/net/wireless/rtl8187b/r8180_93cx6.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_93cx6.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8180_93cx6.c 2010-05-27 18:12:39.532222207 +0200
++/*! \file msh_class.h
++ \brief msh CLASS extension
++
++ \date 2007/5/2
++ \author Stanley Chang <chagnsl@cs.nctu.edu.tw>
++*/
++
++#ifndef _MESH_CLASS_HDR_H_
++#define _MESH_CLASS_HDR_H_
++
++#include <linux/if_ether.h> /* ETH_ALEN */
++#include <linux/kernel.h> /* ARRAY_SIZE */
++#include <linux/version.h>
++#include <linux/jiffies.h>
++#include <linux/timer.h>
++#include <linux/sched.h>
++
++#include "ieee80211/ieee80211.h" // for struct ieee80211-xxxx
++#include "r8187.h" // for struct r8180-priv
++
++#define MAC_TABLE_SIZE 8
++
++struct mshclass {
++ struct r8180_priv * p8187;
++
++ // callback functions
++ // ieee80211_softmac.c
++ int (*ext_patch_ieee80211_start_protocol) (struct ieee80211_device *ieee); // start special mode
++
++ short (*ext_patch_ieee80211_probe_req_1) (struct ieee80211_device *ieee); // return = 0: no more phases, >0: another phase
++ u8* (*ext_patch_ieee80211_probe_req_2) (struct ieee80211_device *ieee, struct sk_buff *skb, u8 *tag); // return tag
++
++ void (*ext_patch_ieee80211_association_req_1) (struct ieee80211_assoc_request_frame *hdr);
++ u8* (*ext_patch_ieee80211_association_req_2) (struct ieee80211_device *ieee, struct ieee80211_network *pstat, struct sk_buff *skb);
++
++ int (*ext_patch_ieee80211_rx_frame_softmac_on_assoc_req) (struct ieee80211_device *ieee, struct sk_buff *skb);
++ int (*ext_patch_ieee80211_rx_frame_softmac_on_assoc_rsp) (struct ieee80211_device *ieee, struct sk_buff *skb);
++
++ void (*ext_patch_ieee80211_stop_protocol) (struct ieee80211_device *ieee); // stop timer
++
++ void (*ext_patch_ieee80211_assoc_resp_by_net_1) (struct ieee80211_assoc_response_frame *assoc);
++ u8* (*ext_patch_ieee80211_assoc_resp_by_net_2) (struct ieee80211_device *ieee, struct ieee80211_network *pstat, int pkt_type, struct sk_buff *skb);
++
++ int (*ext_patch_ieee80211_ext_stop_scan_wq_set_channel) (struct ieee80211_device *ieee);
++
++ struct sk_buff* (*ext_patch_get_beacon_get_probersp)(struct ieee80211_device *ieee, u8 *dest, struct ieee80211_network *net);
++
++ int (*ext_patch_ieee80211_softmac_xmit_get_rate) (struct ieee80211_device *ieee, struct sk_buff *skb);
++ int (*ext_patch_ieee80211_rx_frame_softmac_on_auth)(struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats);
++ int (*ext_patch_ieee80211_rx_frame_softmac_on_deauth)(struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats);
++//by amy for mesh
++ void (*ext_patch_ieee80211_start_mesh)(struct ieee80211_device *ieee);
++//by amy for mesh
++ /// r8180_wx.c
++ int (*ext_patch_r8180_wx_get_meshinfo) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++ int (*ext_patch_r8180_wx_enable_mesh) (struct net_device *dev);
++ int (*ext_patch_r8180_wx_disable_mesh) (struct net_device *dev);
++ int (*ext_patch_r8180_wx_set_meshID) ( struct net_device *dev, char *ext);
++//by amy for mesh
++ int (*ext_patch_r8180_wx_set_mesh_chan)(struct net_device *dev, unsigned char channel);
++//by amy for mesh
++ void (*ext_patch_r8180_wx_set_channel) (struct ieee80211_device *ieee, int ch);
++
++ int (*ext_patch_r8180_wx_set_add_mac_allow) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++ int (*ext_patch_r8180_wx_set_del_mac_allow) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++ int (*ext_patch_r8180_wx_set_add_mac_deny) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++ int (*ext_patch_r8180_wx_set_del_mac_deny) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++ int (*ext_patch_r8180_wx_get_mac_allow) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++ int (*ext_patch_r8180_wx_get_mac_deny) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++
++ int (*ext_patch_r8180_wx_get_mesh_list) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++ int (*ext_patch_r8180_wx_mesh_scan) (struct net_device *dev, struct iw_request_info *info, union iwreq_data *wrqu, char *extra);
++ int (*ext_patch_r8180_wx_get_selected_mesh)(struct net_device *dev, int en, char *cho, char* id);
++//by amy for networkmanager UI
++ int (*ext_patch_r8180_wx_get_selected_mesh_channel)(struct net_device *dev, char* extmeshid, char *cho);
++//by amy for networkmanager UI
++ /// r8187_core.c
++ u8 (*ext_patch_rtl8180_up) (struct mshclass *priv);
++
++ // ieee80211_rx.c
++ unsigned int (*ext_patch_ieee80211_process_probe_response_1) ( struct ieee80211_device *ieee, struct ieee80211_probe_response *beacon, struct ieee80211_rx_stats *stats);
++ void (*ext_patch_ieee80211_rx_mgt_on_probe_req) ( struct ieee80211_device *ieee, struct ieee80211_probe_request *beacon, struct ieee80211_rx_stats *stats);
++
++ void (*ext_patch_ieee80211_rx_mgt_update_expire) ( struct ieee80211_device *ieee, struct sk_buff *skb);
++
++ int (*ext_patch_ieee80211_rx_on_rx) (struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats, u16 type, u16 stype);
++
++ int (*ext_patch_ieee80211_rx_frame_get_hdrlen) (struct ieee80211_device *ieee, struct sk_buff *skb);
++
++ int (*ext_patch_ieee80211_rx_is_valid_framectl) (struct ieee80211_device *ieee, u16 fc, u16 type, u16 stype);
++
++ // return > 0 is success. 0 when failed
++ int (*ext_patch_ieee80211_rx_process_dataframe) (struct ieee80211_device *ieee, struct sk_buff *skb, struct ieee80211_rx_stats *rx_stats);
++
++ int (*ext_patch_is_duplicate_packet) (struct ieee80211_device *ieee, struct ieee80211_hdr *header, u16 type, u16 stype);
++ /* added by david for setting acl dynamically */
++ u8 (*ext_patch_ieee80211_acl_query) (struct ieee80211_device *ieee, u8 *sa);
++
++ // r8187_core.c
++ int (*ext_patch_rtl8180_ioctl) (struct net_device *dev, struct ifreq *rq, int cmd);
++ void (*ext_patch_create_proc) (struct r8180_priv *priv);
++ void (*ext_patch_remove_proc) (struct r8180_priv *priv);
++
++ // ieee80211_tx.c
++
++ // locked by ieee->lock. Call ieee80211_softmac_xmit afterward
++ struct ieee80211_txb* (*ext_patch_ieee80211_xmit) (struct sk_buff *skb, struct net_device *dev);
++
++ // DO NOT MODIFY ANY STRUCTURE BELOW THIS LINE
++ u8 priv[0]; // mshclass_priv;
++};
++
++extern void free_mshobj(struct mshclass **pObj);
++extern struct mshclass *alloc_mshobj(struct r8180_priv *caller_priv);
++
++
++#endif // _MESH_CLASS_HDR_H_
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_93cx6.c linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_93cx6.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_93cx6.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_93cx6.c 2010-08-05 21:12:34.973623604 +0200
@@ -0,0 +1,146 @@
+/*
+ This files contains card eeprom (93c46 or 93c56) programming routines,
@@ -23144,9 +16631,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_93cx6.c linux-lo
+ (EPROM_CMD_NORMAL<<EPROM_CMD_OPERATING_MODE_SHIFT));
+ return ret;
+}
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_93cx6.h linux-loongson/drivers/net/wireless/rtl8187b/r8180_93cx6.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_93cx6.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8180_93cx6.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_93cx6.h linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_93cx6.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_93cx6.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_93cx6.h 2010-08-05 21:12:35.013619071 +0200
@@ -0,0 +1,46 @@
+/*
+ This is part of rtl8187 OpenSource driver
@@ -23194,9 +16681,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_93cx6.h linux-lo
+
+
+u32 eprom_read(struct net_device *dev,u32 addr); //reads a 16 bits word
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_dm.c linux-loongson/drivers/net/wireless/rtl8187b/r8180_dm.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_dm.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8180_dm.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_dm.c linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_dm.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_dm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_dm.c 2010-08-05 21:12:35.063622294 +0200
@@ -0,0 +1,882 @@
+/*++
+Copyright (c) Realtek Semiconductor Corp. All rights reserved.
@@ -24080,9 +17567,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_dm.c linux-loong
+
+
+
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_dm.h linux-loongson/drivers/net/wireless/rtl8187b/r8180_dm.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_dm.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8180_dm.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_dm.h linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_dm.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_dm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_dm.h 2010-08-05 21:12:35.103620706 +0200
@@ -0,0 +1,38 @@
+/*
+ Hardware dynamic mechanism for RTL8187B.
@@ -24122,9 +17609,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_dm.h linux-loong
+//by lzm for antenna
+
+#endif //R8180_PM_H
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_hw.h linux-loongson/drivers/net/wireless/rtl8187b/r8180_hw.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_hw.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8180_hw.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_hw.h linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_hw.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_hw.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_hw.h 2010-08-05 21:12:35.143622600 +0200
@@ -0,0 +1,788 @@
+/*
+ This is part of rtl8187 OpenSource driver.
@@ -24914,9 +18401,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_hw.h linux-loong
+#define MAX_DOZE_WAITING_TIMES_87B 500
+
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_pm.c linux-loongson/drivers/net/wireless/rtl8187b/r8180_pm.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_pm.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8180_pm.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_pm.c linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_pm.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_pm.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_pm.c 2010-08-05 21:12:35.173620797 +0200
@@ -0,0 +1,97 @@
+/*
+ Power management interface routines.
@@ -25015,9 +18502,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_pm.c linux-loong
+
+
+#endif //CONFIG_RTL8180_PM
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_pm.h linux-loongson/drivers/net/wireless/rtl8187b/r8180_pm.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_pm.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8180_pm.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_pm.h linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_pm.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_pm.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_pm.h 2010-08-05 21:12:35.213623756 +0200
@@ -0,0 +1,28 @@
+/*
+ Power management interface routines.
@@ -25047,9 +18534,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_pm.h linux-loong
+#endif //R8180_PM_H
+
+#endif // CONFIG_RTL8180_PM
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225.c linux-loongson/drivers/net/wireless/rtl8187b/r8180_rtl8225.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8180_rtl8225.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225.c linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_rtl8225.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_rtl8225.c 2010-08-05 21:12:35.253629369 +0200
@@ -0,0 +1,1007 @@
+/*
+ This is part of the rtl8180-sa2400 driver
@@ -26058,9 +19545,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225.c linux-
+ //write_nic_word(dev,BRSR,brsr);
+
+}
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225.h linux-loongson/drivers/net/wireless/rtl8187b/r8180_rtl8225.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8180_rtl8225.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225.h linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_rtl8225.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_rtl8225.h 2010-08-05 21:12:35.303617868 +0200
@@ -0,0 +1,77 @@
+/*
+ This is part of the rtl8180-sa2400 driver
@@ -26139,9 +19626,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225.h linux-
+extern u32 rtl8225_chan[];
+
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c linux-loongson/drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c 2010-08-05 21:12:35.343622044 +0200
@@ -0,0 +1,2092 @@
+/*
+ This is part of the rtl8180-sa2400 driver
@@ -28235,9 +21722,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_rtl8225z2.c linu
+ write_nic_dword(dev, 0x94,0x04000002);
+ }
+}
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_wx.c linux-loongson/drivers/net/wireless/rtl8187b/r8180_wx.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_wx.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8180_wx.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_wx.c linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_wx.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_wx.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_wx.c 2010-08-05 21:12:35.383627915 +0200
@@ -0,0 +1,2067 @@
+/*
+ This file contains wireless extension handlers.
@@ -30306,9 +23793,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_wx.c linux-loong
+#ifdef _RTL8187_EXT_PATCH_
+EXPORT_SYMBOL(r8180_wx_set_channel);
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_wx.h linux-loongson/drivers/net/wireless/rtl8187b/r8180_wx.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_wx.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8180_wx.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_wx.h linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_wx.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8180_wx.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8180_wx.h 2010-08-05 21:12:35.413620698 +0200
@@ -0,0 +1,21 @@
+/*
+ This is part of rtl8180 OpenSource driver - v 0.3
@@ -30331,9 +23818,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_wx.h linux-loong
+extern struct iw_handler_def r8180_wx_handlers_def;
+
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_core.c linux-loongson/drivers/net/wireless/rtl8187b/r8187_core.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_core.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8187_core.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8187_core.c linux-2.6.35/drivers/net/wireless/rtl8187b/r8187_core.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8187_core.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8187_core.c 2010-08-05 21:12:35.453623576 +0200
@@ -0,0 +1,7042 @@
+/*
+ This is part of rtl8187 OpenSource driver - v 0.1
@@ -37377,9 +30864,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_core.c linux-loo
+****************************************************************************/
+module_init(rtl8187_usb_module_init);
+module_exit(rtl8187_usb_module_exit);
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187.h linux-loongson/drivers/net/wireless/rtl8187b/r8187.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8187.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8187.h linux-2.6.35/drivers/net/wireless/rtl8187b/r8187.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8187.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8187.h 2010-08-05 21:12:35.503620434 +0200
@@ -0,0 +1,811 @@
+/*
+ This is part of rtl8187 OpenSource driver.
@@ -38192,9 +31679,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187.h linux-loongson
+#endif
+
+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_led.c linux-loongson/drivers/net/wireless/rtl8187b/r8187_led.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_led.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8187_led.c 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8187_led.c linux-2.6.35/drivers/net/wireless/rtl8187b/r8187_led.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8187_led.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8187_led.c 2010-08-05 21:12:35.543617952 +0200
@@ -0,0 +1,1629 @@
+/*++
+Copyright (c) Realtek Semiconductor Corp. All rights reserved.
@@ -39825,289 +33312,289 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_led.c linux-loon
+ pLed->bLedOn = 0;
+}
+
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_led.h linux-loongson/drivers/net/wireless/rtl8187b/r8187_led.h
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_led.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8187_led.h 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8187_led.h linux-2.6.35/drivers/net/wireless/rtl8187b/r8187_led.h
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8187_led.h 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8187_led.h 2010-08-05 21:12:35.583623547 +0200
@@ -0,0 +1,276 @@
-+/*++
-+
-+Copyright (c) Microsoft Corporation. All rights reserved.
-+
-+Module Name:
-+ r8187_led.h
-+
-+Abstract:
-+ definitions and stuctures for rtl8187 led control.
-+
-+Major Change History:
-+ When Who What
-+ ---------- ------ ----------------------------------------------
-+ 2006-09-07 Xiong Created
-+
-+Notes:
-+
-+--*/
-+
-+#ifndef R8187_LED_H
-+#define R8187_LED_H
-+
-+#include <linux/types.h>
-+#include <linux/timer.h>
-+
-+
-+/*--------------------------Define -------------------------------------------*/
-+//
-+// 0x7E-0x7F is reserved for SW customization. 2006.04.21, by rcnjko.
-+//
-+// BIT[0-7] is for CustomerID where value 0x00 and 0xFF is reserved for Realtek.
-+#define EEPROM_SW_REVD_OFFSET 0x7E
-+
-+#define EEPROM_CID_MASK 0x00FF
-+#define EEPROM_CID_RSVD0 0x00
-+#define EEPROM_CID_RSVD1 0xFF
-+#define EEPROM_CID_ALPHA0 0x01
-+#define EEPROM_CID_SERCOMM_PS 0x02
-+#define EEPROM_CID_HW_LED 0x03
-+
-+#define EEPROM_CID_QMI 0x07 //Added by lizhaoming 2008.6.3
-+#define EEPROM_CID_DELL 0x08 //Added by lizhaoming 2008.6.3
-+
-+#define LED_BLINK_NORMAL_INTERVAL 100 //by lizhaoming 50 -> 100
-+#define LED_BLINK_SLOWLY_INTERVAL 200
-+
-+// Customized for AzWave, 2006.04.03, by rcnjko.
-+#define LED_CM2_BLINK_ON_INTERVAL 250
-+#define LED_CM2_BLINK_OFF_INTERVAL 4750
-+//
-+
-+// Customized for Sercomm Printer Server case, 2006.04.21, by rcnjko.
-+#define LED_CM3_BLINK_INTERVAL 1500
-+
-+// by lizhaoming 2008.6.3: Customized for QMI.
-+//
-+#define LED_CM4_BLINK_ON_INTERVAL 500
-+#define LED_CM4_BLINK_OFF_INTERVAL 4500
-+
-+
-+/*--------------------------Define MACRO--------------------------------------*/
-+
-+
-+/*------------------------------Define Struct---------------------------------*/
-+typedef enum _LED_STATE_8187{
-+ LED_UNKNOWN = 0,
-+ LED_ON = 1,
-+ LED_OFF = 2,
-+ LED_BLINK_NORMAL = 3,
-+ LED_BLINK_SLOWLY = 4,
-+ LED_POWER_ON_BLINK = 5,
-+ LED_SCAN_BLINK = 6, // LED is blinking during scanning period, the # of times to blink is depend on time for scanning.
-+ LED_NO_LINK_BLINK = 7, // LED is blinking during no link state.
-+ LED_BLINK_CM3 = 8, // Customzied for Sercomm Printer Server case
-+}LED_STATE_8187;
-+
-+typedef enum _RT_CID_TYPE {
-+ RT_CID_DEFAULT,
-+ RT_CID_8187_ALPHA0,
-+ RT_CID_8187_SERCOMM_PS,
-+ RT_CID_8187_HW_LED,
-+
-+ RT_CID_87B_QMI , //Added by lizhaoming 2008.6.3
-+ RT_CID_87B_DELL, //Added by lizhaoming 2008.6.3
-+
-+} RT_CID_TYPE;
-+
-+typedef enum _LED_STRATEGY_8187{
-+ SW_LED_MODE0, // SW control 1 LED via GPIO0. It is default option.
-+ SW_LED_MODE1, // 2 LEDs, through LED0 and LED1. For ALPHA.
-+ SW_LED_MODE2, // SW control 1 LED via GPIO0, customized for AzWave 8187 minicard.
-+ SW_LED_MODE3, // SW control 1 LED via GPIO0, customized for Sercomm Printer Server case.
-+ SW_LED_MODE4, //added by lizhaoming for bluetooth 2008.6.3
-+ SW_LED_MODE5, //added by lizhaoming for bluetooth 2008.6.3
-+ HW_LED, // HW control 2 LEDs, LED0 and LED1 (there are 4 different control modes, see MAC.CONFIG1 for details.)
-+}LED_STRATEGY_8187, *PLED_STRATEGY_8187;
-+
-+typedef enum _LED_PIN_8187{
-+ LED_PIN_GPIO0,
-+ LED_PIN_LED0,
-+ LED_PIN_LED1
-+}LED_PIN_8187;
-+
-+//by lizhaoming for LED 2008.6.23 into ieee80211.h
-+//typedef enum _LED_CTL_MODE {
-+// LED_CTL_POWER_ON,
-+// LED_CTL_POWER_OFF,
-+// LED_CTL_LINK,
-+// LED_CTL_NO_LINK,
-+// LED_CTL_TX,
-+// LED_CTL_RX,
-+// LED_CTL_SITE_SURVEY,
-+//} LED_CTL_MODE;
-+
-+typedef struct _LED_8187{
-+ LED_PIN_8187 LedPin; // Identify how to implement this SW led.
-+
-+ LED_STATE_8187 CurrLedState; // Current LED state.
-+ u8 bLedOn; // TRUE if LED is ON, FALSE if LED is OFF.
-+
-+ u8 bLedBlinkInProgress; // TRUE if it is blinking, FALSE o.w..
-+ u32 BlinkTimes; // Number of times to toggle led state for blinking.
-+ LED_STATE_8187 BlinkingLedState; // Next state for blinking, either LED_ON or LED_OFF are.
-+ struct timer_list BlinkTimer; // Timer object for led blinking.
-+} LED_8187, *PLED_8187;
-+
-+
-+
-+/*------------------------Export global variable------------------------------*/
-+
-+
-+/*------------------------------Funciton declaration--------------------------*/
-+void
-+InitSwLeds(
-+ struct net_device *dev
-+ );
-+
-+void
-+DeInitSwLeds(
-+ struct net_device *dev
-+ );
-+
-+void
-+InitLed8187(
-+ struct net_device *dev,
-+ PLED_8187 pLed,
-+ LED_PIN_8187 LedPin,
-+ void * BlinkCallBackFunc);
-+
-+void
-+DeInitLed8187(
-+ struct net_device *dev,
-+ PLED_8187 pLed);
-+
-+void
-+LedControl8187(
-+ struct net_device *dev,
-+ LED_CTL_MODE LedAction
-+);
-+
-+void
-+SwLedControlMode0(
-+ struct net_device *dev,
-+ LED_CTL_MODE LedAction
-+);
-+
-+void
-+SwLedControlMode1(
-+ struct net_device *dev,
-+ LED_CTL_MODE LedAction
-+);
-+
-+void
-+SwLedControlMode2(
-+ struct net_device *dev,
-+ LED_CTL_MODE LedAction
-+);
-+
-+void
-+SwLedControlMode3(
-+ struct net_device *dev,
-+ LED_CTL_MODE LedAction
-+);
-+
-+
-+void
-+SwLedControlMode4(
-+ struct net_device *dev,
-+ LED_CTL_MODE LedAction
-+);
-+
-+
-+void
-+SwLedControlMode5(
-+ struct net_device *dev,
-+ LED_CTL_MODE LedAction
-+);
-+
-+void
-+Gpio0LedBlinkTimerCallback(
-+ unsigned long data
-+ );
-+
-+void
-+SwLed0BlinkTimerCallback(
-+ unsigned long data
-+ );
-+
-+void
-+SwLed1BlinkTimerCallback(
-+ unsigned long data
-+ );
-+
-+void
-+PlatformSwLedBlink(
-+ struct net_device *dev,
-+ PLED_8187 pLed
-+ );
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
-+void
-+Gpio0LedWorkItemCallback(
-+ void * Context
-+ );
-+
-+void
-+SwLed0WorkItemCallback(
-+ void * Context
-+ );
-+
-+void
-+SwLed1WorkItemCallback(
-+ void * Context
-+ );
-+#else
-+void
-+Gpio0LedWorkItemCallback(struct work_struct *work);
-+
-+void
-+SwLed0WorkItemCallback(struct work_struct *work);
-+
-+void
-+SwLed1WorkItemCallback(struct work_struct *work);
-+
-+#endif
-+void
-+SwLedBlink(
-+ struct net_device *dev,
-+ PLED_8187 pLed
-+ );
-+
-+void
-+SwLedCm2Blink(
-+ struct net_device *dev,
-+ PLED_8187 pLed
-+ );
-+
-+void
-+SwLedCm4Blink(
-+ struct net_device *dev,
-+ PLED_8187 pLed
-+ );
-+
-+void
-+SwLedOn(
-+ struct net_device *dev,
-+ PLED_8187 pLed
-+);
-+
-+void
-+SwLedOff(
-+ struct net_device *dev,
-+ PLED_8187 pLed
-+);
-+
-+
-+#endif
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_rfkill.c linux-loongson/drivers/net/wireless/rtl8187b/r8187_rfkill.c
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_rfkill.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/r8187_rfkill.c 2010-05-27 18:12:39.532222207 +0200
++/*++
++
++Copyright (c) Microsoft Corporation. All rights reserved.
++
++Module Name:
++ r8187_led.h
++
++Abstract:
++ definitions and stuctures for rtl8187 led control.
++
++Major Change History:
++ When Who What
++ ---------- ------ ----------------------------------------------
++ 2006-09-07 Xiong Created
++
++Notes:
++
++--*/
++
++#ifndef R8187_LED_H
++#define R8187_LED_H
++
++#include <linux/types.h>
++#include <linux/timer.h>
++
++
++/*--------------------------Define -------------------------------------------*/
++//
++// 0x7E-0x7F is reserved for SW customization. 2006.04.21, by rcnjko.
++//
++// BIT[0-7] is for CustomerID where value 0x00 and 0xFF is reserved for Realtek.
++#define EEPROM_SW_REVD_OFFSET 0x7E
++
++#define EEPROM_CID_MASK 0x00FF
++#define EEPROM_CID_RSVD0 0x00
++#define EEPROM_CID_RSVD1 0xFF
++#define EEPROM_CID_ALPHA0 0x01
++#define EEPROM_CID_SERCOMM_PS 0x02
++#define EEPROM_CID_HW_LED 0x03
++
++#define EEPROM_CID_QMI 0x07 //Added by lizhaoming 2008.6.3
++#define EEPROM_CID_DELL 0x08 //Added by lizhaoming 2008.6.3
++
++#define LED_BLINK_NORMAL_INTERVAL 100 //by lizhaoming 50 -> 100
++#define LED_BLINK_SLOWLY_INTERVAL 200
++
++// Customized for AzWave, 2006.04.03, by rcnjko.
++#define LED_CM2_BLINK_ON_INTERVAL 250
++#define LED_CM2_BLINK_OFF_INTERVAL 4750
++//
++
++// Customized for Sercomm Printer Server case, 2006.04.21, by rcnjko.
++#define LED_CM3_BLINK_INTERVAL 1500
++
++// by lizhaoming 2008.6.3: Customized for QMI.
++//
++#define LED_CM4_BLINK_ON_INTERVAL 500
++#define LED_CM4_BLINK_OFF_INTERVAL 4500
++
++
++/*--------------------------Define MACRO--------------------------------------*/
++
++
++/*------------------------------Define Struct---------------------------------*/
++typedef enum _LED_STATE_8187{
++ LED_UNKNOWN = 0,
++ LED_ON = 1,
++ LED_OFF = 2,
++ LED_BLINK_NORMAL = 3,
++ LED_BLINK_SLOWLY = 4,
++ LED_POWER_ON_BLINK = 5,
++ LED_SCAN_BLINK = 6, // LED is blinking during scanning period, the # of times to blink is depend on time for scanning.
++ LED_NO_LINK_BLINK = 7, // LED is blinking during no link state.
++ LED_BLINK_CM3 = 8, // Customzied for Sercomm Printer Server case
++}LED_STATE_8187;
++
++typedef enum _RT_CID_TYPE {
++ RT_CID_DEFAULT,
++ RT_CID_8187_ALPHA0,
++ RT_CID_8187_SERCOMM_PS,
++ RT_CID_8187_HW_LED,
++
++ RT_CID_87B_QMI , //Added by lizhaoming 2008.6.3
++ RT_CID_87B_DELL, //Added by lizhaoming 2008.6.3
++
++} RT_CID_TYPE;
++
++typedef enum _LED_STRATEGY_8187{
++ SW_LED_MODE0, // SW control 1 LED via GPIO0. It is default option.
++ SW_LED_MODE1, // 2 LEDs, through LED0 and LED1. For ALPHA.
++ SW_LED_MODE2, // SW control 1 LED via GPIO0, customized for AzWave 8187 minicard.
++ SW_LED_MODE3, // SW control 1 LED via GPIO0, customized for Sercomm Printer Server case.
++ SW_LED_MODE4, //added by lizhaoming for bluetooth 2008.6.3
++ SW_LED_MODE5, //added by lizhaoming for bluetooth 2008.6.3
++ HW_LED, // HW control 2 LEDs, LED0 and LED1 (there are 4 different control modes, see MAC.CONFIG1 for details.)
++}LED_STRATEGY_8187, *PLED_STRATEGY_8187;
++
++typedef enum _LED_PIN_8187{
++ LED_PIN_GPIO0,
++ LED_PIN_LED0,
++ LED_PIN_LED1
++}LED_PIN_8187;
++
++//by lizhaoming for LED 2008.6.23 into ieee80211.h
++//typedef enum _LED_CTL_MODE {
++// LED_CTL_POWER_ON,
++// LED_CTL_POWER_OFF,
++// LED_CTL_LINK,
++// LED_CTL_NO_LINK,
++// LED_CTL_TX,
++// LED_CTL_RX,
++// LED_CTL_SITE_SURVEY,
++//} LED_CTL_MODE;
++
++typedef struct _LED_8187{
++ LED_PIN_8187 LedPin; // Identify how to implement this SW led.
++
++ LED_STATE_8187 CurrLedState; // Current LED state.
++ u8 bLedOn; // TRUE if LED is ON, FALSE if LED is OFF.
++
++ u8 bLedBlinkInProgress; // TRUE if it is blinking, FALSE o.w..
++ u32 BlinkTimes; // Number of times to toggle led state for blinking.
++ LED_STATE_8187 BlinkingLedState; // Next state for blinking, either LED_ON or LED_OFF are.
++ struct timer_list BlinkTimer; // Timer object for led blinking.
++} LED_8187, *PLED_8187;
++
++
++
++/*------------------------Export global variable------------------------------*/
++
++
++/*------------------------------Funciton declaration--------------------------*/
++void
++InitSwLeds(
++ struct net_device *dev
++ );
++
++void
++DeInitSwLeds(
++ struct net_device *dev
++ );
++
++void
++InitLed8187(
++ struct net_device *dev,
++ PLED_8187 pLed,
++ LED_PIN_8187 LedPin,
++ void * BlinkCallBackFunc);
++
++void
++DeInitLed8187(
++ struct net_device *dev,
++ PLED_8187 pLed);
++
++void
++LedControl8187(
++ struct net_device *dev,
++ LED_CTL_MODE LedAction
++);
++
++void
++SwLedControlMode0(
++ struct net_device *dev,
++ LED_CTL_MODE LedAction
++);
++
++void
++SwLedControlMode1(
++ struct net_device *dev,
++ LED_CTL_MODE LedAction
++);
++
++void
++SwLedControlMode2(
++ struct net_device *dev,
++ LED_CTL_MODE LedAction
++);
++
++void
++SwLedControlMode3(
++ struct net_device *dev,
++ LED_CTL_MODE LedAction
++);
++
++
++void
++SwLedControlMode4(
++ struct net_device *dev,
++ LED_CTL_MODE LedAction
++);
++
++
++void
++SwLedControlMode5(
++ struct net_device *dev,
++ LED_CTL_MODE LedAction
++);
++
++void
++Gpio0LedBlinkTimerCallback(
++ unsigned long data
++ );
++
++void
++SwLed0BlinkTimerCallback(
++ unsigned long data
++ );
++
++void
++SwLed1BlinkTimerCallback(
++ unsigned long data
++ );
++
++void
++PlatformSwLedBlink(
++ struct net_device *dev,
++ PLED_8187 pLed
++ );
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20)
++void
++Gpio0LedWorkItemCallback(
++ void * Context
++ );
++
++void
++SwLed0WorkItemCallback(
++ void * Context
++ );
++
++void
++SwLed1WorkItemCallback(
++ void * Context
++ );
++#else
++void
++Gpio0LedWorkItemCallback(struct work_struct *work);
++
++void
++SwLed0WorkItemCallback(struct work_struct *work);
++
++void
++SwLed1WorkItemCallback(struct work_struct *work);
++
++#endif
++void
++SwLedBlink(
++ struct net_device *dev,
++ PLED_8187 pLed
++ );
++
++void
++SwLedCm2Blink(
++ struct net_device *dev,
++ PLED_8187 pLed
++ );
++
++void
++SwLedCm4Blink(
++ struct net_device *dev,
++ PLED_8187 pLed
++ );
++
++void
++SwLedOn(
++ struct net_device *dev,
++ PLED_8187 pLed
++);
++
++void
++SwLedOff(
++ struct net_device *dev,
++ PLED_8187 pLed
++);
++
++
++#endif
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8187_rfkill.c linux-2.6.35/drivers/net/wireless/rtl8187b/r8187_rfkill.c
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/r8187_rfkill.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/r8187_rfkill.c 2010-08-05 21:12:35.633623528 +0200
@@ -0,0 +1,157 @@
+/*
+ * rtl8187b specific rfkill support
@@ -40266,9 +33753,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_rfkill.c linux-l
+ }
+ r8187b_rfkill = NULL;
+}
-diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/readme linux-loongson/drivers/net/wireless/rtl8187b/readme
---- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/readme 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/net/wireless/rtl8187b/readme 2010-05-27 18:12:39.532222207 +0200
+diff -Nur linux-2.6.35.orig/drivers/net/wireless/rtl8187b/readme linux-2.6.35/drivers/net/wireless/rtl8187b/readme
+--- linux-2.6.35.orig/drivers/net/wireless/rtl8187b/readme 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/net/wireless/rtl8187b/readme 2010-08-05 21:12:35.663623736 +0200
@@ -0,0 +1,124 @@
+rtl8187 Linux kernel driver
+Released under the terms of GNU General Public Licence (GPL)
@@ -40394,9 +33881,9 @@ diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/readme linux-loongson/
+
+If you have some question/comments please feel free to write me.
+
-diff -Nur linux-2.6.34.orig/drivers/platform/Kconfig linux-loongson/drivers/platform/Kconfig
---- linux-2.6.34.orig/drivers/platform/Kconfig 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/drivers/platform/Kconfig 2010-05-27 18:12:39.983464277 +0200
+diff -Nur linux-2.6.35.orig/drivers/platform/Kconfig linux-2.6.35/drivers/platform/Kconfig
+--- linux-2.6.35.orig/drivers/platform/Kconfig 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/drivers/platform/Kconfig 2010-08-05 21:12:35.693620642 +0200
@@ -1,3 +1,7 @@
if X86
source "drivers/platform/x86/Kconfig"
@@ -40405,17 +33892,17 @@ diff -Nur linux-2.6.34.orig/drivers/platform/Kconfig linux-loongson/drivers/plat
+if MIPS
+source "drivers/platform/mips/Kconfig"
+endif
-diff -Nur linux-2.6.34.orig/drivers/platform/Makefile linux-loongson/drivers/platform/Makefile
---- linux-2.6.34.orig/drivers/platform/Makefile 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/drivers/platform/Makefile 2010-05-27 18:12:39.983464277 +0200
+diff -Nur linux-2.6.35.orig/drivers/platform/Makefile linux-2.6.35/drivers/platform/Makefile
+--- linux-2.6.35.orig/drivers/platform/Makefile 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/drivers/platform/Makefile 2010-08-05 21:12:35.733620270 +0200
@@ -3,3 +3,4 @@
#
obj-$(CONFIG_X86) += x86/
+obj-$(CONFIG_MIPS) += mips/
-diff -Nur linux-2.6.34.orig/drivers/platform/mips/Kconfig linux-loongson/drivers/platform/mips/Kconfig
---- linux-2.6.34.orig/drivers/platform/mips/Kconfig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/platform/mips/Kconfig 2010-05-27 18:12:39.983464277 +0200
+diff -Nur linux-2.6.35.orig/drivers/platform/mips/Kconfig linux-2.6.35/drivers/platform/mips/Kconfig
+--- linux-2.6.35.orig/drivers/platform/mips/Kconfig 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/platform/mips/Kconfig 2010-08-05 21:12:35.763620661 +0200
@@ -0,0 +1,43 @@
+#
+# MIPS Platform Specific Drivers
@@ -40460,9 +33947,9 @@ diff -Nur linux-2.6.34.orig/drivers/platform/mips/Kconfig linux-loongson/drivers
+ its own specific suspend support.
+
+endif # MIPS_PLATFORM_DEVICES
-diff -Nur linux-2.6.34.orig/drivers/platform/mips/lynloong_pc.c linux-loongson/drivers/platform/mips/lynloong_pc.c
---- linux-2.6.34.orig/drivers/platform/mips/lynloong_pc.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/platform/mips/lynloong_pc.c 2010-05-27 18:12:39.993464274 +0200
+diff -Nur linux-2.6.35.orig/drivers/platform/mips/lynloong_pc.c linux-2.6.35/drivers/platform/mips/lynloong_pc.c
+--- linux-2.6.35.orig/drivers/platform/mips/lynloong_pc.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/platform/mips/lynloong_pc.c 2010-08-05 21:12:35.793620734 +0200
@@ -0,0 +1,513 @@
+/*
+ * Driver for LynLoong PC extras
@@ -40977,9 +34464,9 @@ diff -Nur linux-2.6.34.orig/drivers/platform/mips/lynloong_pc.c linux-loongson/d
+MODULE_AUTHOR("Wu Zhangjin <wuzhangjin@gmail.com>; Xiang Yu <xiangy@lemote.com>");
+MODULE_DESCRIPTION("LynLoong PC driver");
+MODULE_LICENSE("GPL");
-diff -Nur linux-2.6.34.orig/drivers/platform/mips/Makefile linux-loongson/drivers/platform/mips/Makefile
---- linux-2.6.34.orig/drivers/platform/mips/Makefile 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/platform/mips/Makefile 2010-05-27 18:12:39.993464274 +0200
+diff -Nur linux-2.6.35.orig/drivers/platform/mips/Makefile linux-2.6.35/drivers/platform/mips/Makefile
+--- linux-2.6.35.orig/drivers/platform/mips/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/platform/mips/Makefile 2010-08-05 21:12:35.833623345 +0200
@@ -0,0 +1,7 @@
+#
+# Makefile for MIPS Platform-Specific Drivers
@@ -40988,9 +34475,9 @@ diff -Nur linux-2.6.34.orig/drivers/platform/mips/Makefile linux-loongson/driver
+obj-$(CONFIG_LEMOTE_YEELOONG2F) += yeeloong_laptop.o
+
+obj-$(CONFIG_LEMOTE_LYNLOONG2F) += lynloong_pc.o
-diff -Nur linux-2.6.34.orig/drivers/platform/mips/yeeloong_ecrom.c linux-loongson/drivers/platform/mips/yeeloong_ecrom.c
---- linux-2.6.34.orig/drivers/platform/mips/yeeloong_ecrom.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/platform/mips/yeeloong_ecrom.c 2010-05-27 18:12:39.993464274 +0200
+diff -Nur linux-2.6.35.orig/drivers/platform/mips/yeeloong_ecrom.c linux-2.6.35/drivers/platform/mips/yeeloong_ecrom.c
+--- linux-2.6.35.orig/drivers/platform/mips/yeeloong_ecrom.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/platform/mips/yeeloong_ecrom.c 2010-08-05 21:12:35.863623591 +0200
@@ -0,0 +1,943 @@
+/*
+ * Driver for flushing/dumping ROM of EC on YeeLoong laptop
@@ -41935,9 +35422,9 @@ diff -Nur linux-2.6.34.orig/drivers/platform/mips/yeeloong_ecrom.c linux-loongso
+MODULE_AUTHOR("liujl <liujl@lemote.com>");
+MODULE_DESCRIPTION("Driver for flushing/dumping ROM of EC on YeeLoong laptop");
+MODULE_LICENSE("GPL");
-diff -Nur linux-2.6.34.orig/drivers/platform/mips/yeeloong_laptop.c linux-loongson/drivers/platform/mips/yeeloong_laptop.c
---- linux-2.6.34.orig/drivers/platform/mips/yeeloong_laptop.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-loongson/drivers/platform/mips/yeeloong_laptop.c 2010-05-27 18:12:39.993464274 +0200
+diff -Nur linux-2.6.35.orig/drivers/platform/mips/yeeloong_laptop.c linux-2.6.35/drivers/platform/mips/yeeloong_laptop.c
+--- linux-2.6.35.orig/drivers/platform/mips/yeeloong_laptop.c 1970-01-01 01:00:00.000000000 +0100
++++ linux-2.6.35/drivers/platform/mips/yeeloong_laptop.c 2010-08-05 21:12:35.893623330 +0200
@@ -0,0 +1,1200 @@
+/*
+ * Driver for YeeLoong laptop extras
@@ -43139,24 +36626,9 @@ diff -Nur linux-2.6.34.orig/drivers/platform/mips/yeeloong_laptop.c linux-loongs
+MODULE_AUTHOR("Wu Zhangjin <wuzhangjin@gmail.com>; Liu Junliang <liujl@lemote.com>");
+MODULE_DESCRIPTION("YeeLoong laptop driver");
+MODULE_LICENSE("GPL");
-diff -Nur linux-2.6.34.orig/drivers/rtc/rtc-cmos.c linux-loongson/drivers/rtc/rtc-cmos.c
---- linux-2.6.34.orig/drivers/rtc/rtc-cmos.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/drivers/rtc/rtc-cmos.c 2010-05-27 18:15:37.623465175 +0200
-@@ -752,9 +752,8 @@
- /* FIXME teach the alarm code how to handle binary mode;
- * <asm-generic/rtc.h> doesn't know 12-hour mode either.
- */
-- if (is_valid_irq(rtc_irq) &&
-- (!(rtc_control & RTC_24H) || (rtc_control & (RTC_DM_BINARY)))) {
-- dev_dbg(dev, "only 24-hr BCD mode supported\n");
-+ if (is_valid_irq(rtc_irq) && !(rtc_control & RTC_24H)) {
-+ dev_dbg(dev, "only 24-hr supported\n");
- retval = -ENXIO;
- goto cleanup1;
- }
-diff -Nur linux-2.6.34.orig/drivers/staging/sm7xx/smtcfb.c linux-loongson/drivers/staging/sm7xx/smtcfb.c
---- linux-2.6.34.orig/drivers/staging/sm7xx/smtcfb.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/drivers/staging/sm7xx/smtcfb.c 2010-05-27 18:15:38.733462789 +0200
+diff -Nur linux-2.6.35.orig/drivers/staging/sm7xx/smtcfb.c linux-2.6.35/drivers/staging/sm7xx/smtcfb.c
+--- linux-2.6.35.orig/drivers/staging/sm7xx/smtcfb.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/drivers/staging/sm7xx/smtcfb.c 2010-08-05 21:12:35.933620712 +0200
@@ -12,6 +12,8 @@
* License. See the file COPYING in the main directory of this archive for
* more details.
@@ -43164,8 +36636,8 @@ diff -Nur linux-2.6.34.orig/drivers/staging/sm7xx/smtcfb.c linux-loongson/driver
+ * - Remove the buggy 2D support for Lynx, 2010/01/06, Wu Zhangjin
+ *
* Version 0.10.26192.21.01
- * - Add PowerPC/Big endian support
- * - Add 2D support for Lynx
+ * - Add PowerPC/Big endian support
+ * - Add 2D support for Lynx
@@ -107,6 +109,7 @@
{"0x307", 1280, 1024, 8},
@@ -43174,9 +36646,9 @@ diff -Nur linux-2.6.34.orig/drivers/staging/sm7xx/smtcfb.c linux-loongson/driver
{"0x314", 800, 600, 16},
{"0x317", 1024, 768, 16},
{"0x31A", 1280, 1024, 16},
-diff -Nur linux-2.6.34.orig/drivers/usb/host/ohci-hcd.c linux-loongson/drivers/usb/host/ohci-hcd.c
---- linux-2.6.34.orig/drivers/usb/host/ohci-hcd.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/drivers/usb/host/ohci-hcd.c 2010-05-27 18:15:39.022214534 +0200
+diff -Nur linux-2.6.35.orig/drivers/usb/host/ohci-hcd.c linux-2.6.35/drivers/usb/host/ohci-hcd.c
+--- linux-2.6.35.orig/drivers/usb/host/ohci-hcd.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/drivers/usb/host/ohci-hcd.c 2010-08-05 21:12:35.973617973 +0200
@@ -832,9 +832,13 @@
}
@@ -43194,9 +36666,9 @@ diff -Nur linux-2.6.34.orig/drivers/usb/host/ohci-hcd.c linux-loongson/drivers/u
}
if (quirk_zfmicro(ohci) && (ints & OHCI_INTR_SF)) {
-diff -Nur linux-2.6.34.orig/drivers/video/tdfxfb.c linux-loongson/drivers/video/tdfxfb.c
---- linux-2.6.34.orig/drivers/video/tdfxfb.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/drivers/video/tdfxfb.c 2010-05-27 18:12:44.063464481 +0200
+diff -Nur linux-2.6.35.orig/drivers/video/tdfxfb.c linux-2.6.35/drivers/video/tdfxfb.c
+--- linux-2.6.35.orig/drivers/video/tdfxfb.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/drivers/video/tdfxfb.c 2010-08-05 21:12:36.023617867 +0200
@@ -1571,8 +1571,8 @@
if (default_par->mtrr_handle >= 0)
mtrr_del(default_par->mtrr_handle, info->fix.smem_start,
@@ -43208,9 +36680,9 @@ diff -Nur linux-2.6.34.orig/drivers/video/tdfxfb.c linux-loongson/drivers/video/
out_err_screenbase:
if (info->screen_base)
iounmap(info->screen_base);
-diff -Nur linux-2.6.34.orig/net/rfkill/core.c linux-loongson/net/rfkill/core.c
---- linux-2.6.34.orig/net/rfkill/core.c 2010-05-16 23:17:36.000000000 +0200
-+++ linux-loongson/net/rfkill/core.c 2010-05-27 18:15:42.770974885 +0200
+diff -Nur linux-2.6.35.orig/net/rfkill/core.c linux-2.6.35/net/rfkill/core.c
+--- linux-2.6.35.orig/net/rfkill/core.c 2010-08-02 00:11:14.000000000 +0200
++++ linux-2.6.35/net/rfkill/core.c 2010-08-05 21:12:36.053623260 +0200
@@ -112,7 +112,7 @@
static DEFINE_MUTEX(rfkill_global_mutex);
static LIST_HEAD(rfkill_fds); /* list of open fds of /dev/rfkill */
diff --git a/target/lemote/target.mk b/target/lemote/target.mk
index bc8ee1e27..ec5ab8a5d 100644
--- a/target/lemote/target.mk
+++ b/target/lemote/target.mk
@@ -1,7 +1,7 @@
ARCH:= mips
CPU_ARCH:= mips64el
-KERNEL_VERSION:= 2.6.34
+KERNEL_VERSION:= 2.6.35
KERNEL_RELEASE:= 1
-KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad
+KERNEL_MD5SUM:= 091abeb4684ce03d1d936851618687b6
TARGET_OPTIMIZATION:= -Os -pipe
TARGET_CFLAGS_ARCH:= -march=loongson2f -mabi=64