diff options
author | Waldemar Brodkorb <wbx@openadk.org> | 2010-08-05 22:39:01 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2010-08-05 22:39:01 +0200 |
commit | 57177df84b91ca2cfb1e205f83353a8b7d7e2024 (patch) | |
tree | 0c8d292addc7a80fe6fff014c3dc7fdd9ec2a6d3 /target/lemote | |
parent | 75dfa74232ee8a8ee1c2ff51d27d3d48def3cee7 (diff) |
update lemote to 2.6.35, enable version specific patches for kernel-header patches
Diffstat (limited to 'target/lemote')
-rw-r--r-- | target/lemote/kernel.config | 120 | ||||
-rw-r--r-- | target/lemote/patches/lemote.patch | 9282 | ||||
-rw-r--r-- | target/lemote/target.mk | 4 |
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(¤t->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, ®_data); -+ -+ if (reg_data & 0x0400) { -+ /* Link status change */ -+ titan_ge_mdio_read(port_num, -+ TITAN_GE_MDIO_PHY_STATUS, ®_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 |