From 92dd4fee15cb7c33868c7d7213f82136955397b1 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sat, 29 May 2010 14:29:22 +0200 Subject: upgrade all targets to Linux 2.6.34 --- target/lemote/patches/lemote.patch | 11715 +++++++++++++++++++++-------------- 1 file changed, 6995 insertions(+), 4720 deletions(-) (limited to 'target/lemote/patches') diff --git a/target/lemote/patches/lemote.patch b/target/lemote/patches/lemote.patch index edb778459..31af80bb6 100644 --- a/target/lemote/patches/lemote.patch +++ b/target/lemote/patches/lemote.patch @@ -1,32 +1,6 @@ -diff -Nur linux-2.6.33/arch/mips/boot/compressed/dbg.c linux-lemote/arch/mips/boot/compressed/dbg.c ---- linux-2.6.33/arch/mips/boot/compressed/dbg.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/boot/compressed/dbg.c 2010-03-06 16:42:59.000000000 +0100 -@@ -9,7 +9,7 @@ - #include - #include - --void __attribute__ ((weak)) putc(char c) -+void __weak putc(char c) - { - } - -diff -Nur linux-2.6.33/arch/mips/boot/compressed/decompress.c linux-lemote/arch/mips/boot/compressed/decompress.c ---- linux-2.6.33/arch/mips/boot/compressed/decompress.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/boot/compressed/decompress.c 2010-03-06 16:42:59.000000000 +0100 -@@ -5,8 +5,8 @@ - * Author: Matt Porter Derived from - * arch/ppc/boot/prep/misc.c - * -- * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology -- * Author: Wu Zhangjin -+ * Copyright (C) 2009 Lemote, Inc. -+ * Author: Wu Zhangjin - * - * 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 -diff -Nur linux-2.6.33/arch/mips/boot/compressed/ld.script linux-lemote/arch/mips/boot/compressed/ld.script ---- linux-2.6.33/arch/mips/boot/compressed/ld.script 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/boot/compressed/ld.script 2010-03-06 16:42:59.000000000 +0100 +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 * @@ -36,60 +10,16 @@ diff -Nur linux-2.6.33/arch/mips/boot/compressed/ld.script linux-lemote/arch/mip */ OUTPUT_ARCH(mips) -@@ -29,8 +29,8 @@ - __image_end = .; - CONSTRUCTORS - } -- .sdata : { *(.sdata) } -- . = ALIGN(4); -+ .sdata : { *(.sdata) } -+ . = ALIGN(4); - _edata = .; /* End of data section */ - - /* BSS */ -diff -Nur linux-2.6.33/arch/mips/boot/compressed/Makefile linux-lemote/arch/mips/boot/compressed/Makefile ---- linux-2.6.33/arch/mips/boot/compressed/Makefile 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/boot/compressed/Makefile 2010-03-06 16:42:59.000000000 +0100 -@@ -9,7 +9,7 @@ - # modified by Cort (cort@cs.nmt.edu) - # - # Copyright (C) 2009 Lemote Inc. & DSLab, Lanzhou University --# Author: Wu Zhangjin -+# Author: Wu Zhangjin - # - - # compressed kernel load addr: VMLINUZ_LOAD_ADDRESS > VMLINUX_LOAD_ADDRESS + VMLINUX_SIZE -@@ -27,15 +27,17 @@ - KBUILD_CFLAGS := $(shell echo $(KBUILD_CFLAGS) | sed -e "s/-pg//") - - KBUILD_CFLAGS := $(LINUXINCLUDE) $(KBUILD_CFLAGS) -D__KERNEL__ \ -- -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" \ -+ -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" - - KBUILD_AFLAGS := $(LINUXINCLUDE) $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ -- -DKERNEL_ENTRY=0x$(shell $(NM) $(objtree)/$(KBUILD_IMAGE) 2>/dev/null | grep " kernel_entry" | cut -f1 -d \ ) \ -- -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -+ -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \ -+ -DKERNEL_ENTRY=0x$(shell $(NM) $(objtree)/$(KBUILD_IMAGE) 2>/dev/null | grep " kernel_entry" | cut -f1 -d \ ) - - obj-y := $(obj)/head.o $(obj)/decompress.o $(obj)/dbg.o - -+ifdef CONFIG_DEBUG_ZBOOT - obj-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o -+endif - - OBJCOPYFLAGS_vmlinux.bin := $(OBJCOPYFLAGS) -O binary -R .comment -S - $(obj)/vmlinux.bin: $(KBUILD_IMAGE) -diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/mips/configs/fuloong2e_defconfig ---- linux-2.6.33/arch/mips/configs/fuloong2e_defconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/configs/fuloong2e_defconfig 2010-03-06 16:42:59.000000000 +0100 +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.33 -+# Mon Mar 1 23:44:14 2010 ++# Linux kernel version: 2.6.34-rc5 ++# Wed Apr 28 01:14:53 2010 # CONFIG_MIPS=y @@ -110,11 +40,13 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m CONFIG_RWSEM_GENERIC_SPINLOCK=y # CONFIG_ARCH_HAS_ILOG2_U32 is not set # CONFIG_ARCH_HAS_ILOG2_U64 is not set -@@ -67,7 +70,6 @@ +@@ -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_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 @@ -134,7 +66,14 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m CONFIG_CPU_LOONGSON2=y CONFIG_SYS_HAS_CPU_LOONGSON2E=y CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y -@@ -134,7 +136,6 @@ +@@ -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 @@ -142,7 +81,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m CONFIG_ARCH_POPULATES_NODE_MAP=y CONFIG_SELECT_MEMORY_MODEL=y # CONFIG_FLATMEM_MANUAL is not set -@@ -143,23 +144,18 @@ +@@ -143,23 +145,18 @@ CONFIG_SPARSEMEM=y CONFIG_HAVE_MEMORY_PRESENT=y CONFIG_SPARSEMEM_STATIC=y @@ -167,7 +106,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_HZ_48 is not set # CONFIG_HZ_100 is not set # CONFIG_HZ_128 is not set -@@ -190,9 +186,11 @@ +@@ -190,9 +187,11 @@ CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y CONFIG_HAVE_KERNEL_LZMA=y @@ -179,7 +118,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m CONFIG_SWAP=y CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y -@@ -208,6 +206,7 @@ +@@ -208,6 +207,7 @@ # CONFIG_TREE_RCU=y # CONFIG_TREE_PREEMPT_RCU is not set @@ -187,9 +126,11 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=64 # CONFIG_RCU_FANOUT_EXACT is not set -@@ -217,8 +216,7 @@ +@@ -215,10 +215,8 @@ + CONFIG_IKCONFIG=y + CONFIG_IKCONFIG_PROC=y CONFIG_LOG_BUF_SHIFT=14 - # CONFIG_GROUP_SCHED is not set +-# CONFIG_GROUP_SCHED is not set # CONFIG_CGROUPS is not set -CONFIG_SYSFS_DEPRECATED=y -CONFIG_SYSFS_DEPRECATED_V2=y @@ -197,15 +138,23 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_RELAY is not set CONFIG_NAMESPACES=y # CONFIG_UTS_NS is not set -@@ -268,6 +266,7 @@ +@@ -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 @@ # - # CONFIG_GCOV_KERNEL is not set + # 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 -@@ -287,14 +286,41 @@ +@@ -287,14 +283,41 @@ # IO Schedulers # CONFIG_IOSCHED_NOOP=y @@ -249,15 +198,39 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m CONFIG_FREEZER=y # -@@ -340,7 +366,6 @@ +@@ -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 -@@ -491,10 +516,6 @@ + # + 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 @@ -268,7 +241,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_LIB80211 is not set # -@@ -617,6 +638,10 @@ +@@ -617,6 +633,10 @@ # CONFIG_BLK_DEV_COW_COMMON is not set CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_CRYPTOLOOP=m @@ -279,7 +252,15 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_SX8 is not set # CONFIG_BLK_DEV_UB is not set -@@ -755,7 +780,7 @@ +@@ -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 @@ # # @@ -288,7 +269,15 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # # CONFIG_FIREWIRE is not set # CONFIG_IEEE1394 is not set -@@ -798,6 +823,7 @@ +@@ -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 @@ -296,7 +285,30 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_NET_VENDOR_RACAL is not set # CONFIG_DNET is not set # CONFIG_NET_TULIP is not set -@@ -888,8 +914,10 @@ +@@ -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 @@ -309,7 +321,15 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # # Enable WiMAX (Networking options) to see the WiMAX drivers -@@ -926,6 +954,7 @@ +@@ -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 @@ -317,7 +337,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_ISDN is not set # CONFIG_PHONE is not set -@@ -935,6 +964,7 @@ +@@ -935,6 +966,7 @@ CONFIG_INPUT=y CONFIG_INPUT_FF_MEMLESS=y # CONFIG_INPUT_POLLDEV is not set @@ -325,7 +345,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # # Userland interfaces -@@ -992,6 +1022,7 @@ +@@ -992,6 +1024,7 @@ # CONFIG_SERIO_PCIPS2 is not set CONFIG_SERIO_LIBPS2=y # CONFIG_SERIO_RAW is not set @@ -333,7 +353,23 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_GAMEPORT is not set # -@@ -1078,11 +1109,6 @@ +@@ -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 # @@ -345,23 +381,44 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # Other I2C/SMBus bus drivers # # CONFIG_I2C_ELEKTOR is not set -@@ -1093,7 +1119,6 @@ - # - # Miscellaneous I2C Chip support - # + # 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_SENSORS_TSL2550 is not set # CONFIG_I2C_DEBUG_CORE is not set # CONFIG_I2C_DEBUG_ALGO is not set -@@ -1125,7 +1150,6 @@ + # 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_WM8350_I2C is not set ++# CONFIG_MFD_WM8994 is not set # CONFIG_MFD_PCF50633 is not set - # CONFIG_AB3100_CORE is not set -@@ -1271,6 +1295,7 @@ +-# 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 @@ -369,7 +426,49 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_SND_CTXFI is not set # CONFIG_SND_DARLA20 is not set # CONFIG_SND_GINA20 is not set -@@ -1482,6 +1507,7 @@ +@@ -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 @@ -377,7 +476,17 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # # File systems -@@ -1522,8 +1548,8 @@ +@@ -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 @@ -388,27 +497,55 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # # Caches -@@ -1700,6 +1726,11 @@ +@@ -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_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 -@@ -1710,6 +1741,7 @@ - # CONFIG_DYNAMIC_DEBUG is not set +-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 # -@@ -1718,7 +1750,11 @@ +@@ -1718,7 +1741,11 @@ # CONFIG_KEYS is not set # CONFIG_SECURITY is not set # CONFIG_SECURITYFS is not set @@ -421,145 +558,78 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m CONFIG_CRYPTO=y # -diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mips/configs/lemote2f_defconfig ---- linux-2.6.33/arch/mips/configs/lemote2f_defconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/configs/lemote2f_defconfig 2010-03-06 16:42:59.000000000 +0100 +@@ -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.32-rc6 --# Mon Nov 9 23:42:42 2009 -+# Linux kernel version: 2.6.33 -+# Mon Mar 1 23:36:53 2010 +-# 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 -@@ -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 -@@ -51,6 +52,9 @@ - # CONFIG_LEMOTE_FULOONG2E is not set - CONFIG_LEMOTE_MACH2F=y - CONFIG_CS5536=y -+CONFIG_CS5536_MFGPT=y -+CONFIG_LOONGSON_SUSPEND=y -+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 -@@ -63,13 +67,8 @@ - CONFIG_GENERIC_CMOS_UPDATE=y +@@ -68,7 +68,7 @@ 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_DMA_NEED_PCI_MAP_STATE=y --CONFIG_EARLY_PRINTK=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 -@@ -109,13 +108,15 @@ - # 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_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 -@@ -137,7 +138,6 @@ - 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 -@@ -146,17 +146,11 @@ - 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 -@@ -175,7 +169,7 @@ - # CONFIG_PREEMPT_NONE is not set - # CONFIG_PREEMPT_VOLUNTARY is not set - CONFIG_PREEMPT=y --# CONFIG_KEXEC is not set -+CONFIG_KEXEC=y - # CONFIG_SECCOMP is not set - CONFIG_LOCKDEP_SUPPORT=y - CONFIG_STACKTRACE_SUPPORT=y -@@ -194,9 +188,11 @@ +@@ -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_KERNEL_GZIP is not set +CONFIG_HAVE_KERNEL_LZO=y -+CONFIG_KERNEL_GZIP=y + CONFIG_KERNEL_GZIP=y # CONFIG_KERNEL_BZIP2 is not set --CONFIG_KERNEL_LZMA=y -+# CONFIG_KERNEL_LZMA 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 -@@ -211,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 -@@ -220,11 +217,15 @@ +@@ -213,10 +216,8 @@ + CONFIG_IKCONFIG=y + CONFIG_IKCONFIG_PROC=y CONFIG_LOG_BUF_SHIFT=15 - # CONFIG_GROUP_SCHED is not set +-# 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 is not set -+CONFIG_BLK_DEV_INITRD=y -+CONFIG_INITRAMFS_SOURCE="" -+CONFIG_RD_GZIP=y -+CONFIG_RD_BZIP2=y -+CONFIG_RD_LZMA=y + 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 -@@ -251,21 +252,24 @@ +@@ -250,13 +252,12 @@ # CONFIG_VM_EVENT_COUNTERS=y CONFIG_PCI_QUIRKS=y @@ -569,520 +639,167 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_SLAB is not set CONFIG_SLUB=y # CONFIG_SLOB is not set --# CONFIG_PROFILING is not set -+CONFIG_PROFILING=y -+CONFIG_TRACEPOINTS=y -+CONFIG_OPROFILE=m + 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_SLOW_WORK is not set -+# CONFIG_GCOV_KERNEL is not set -+CONFIG_SLOW_WORK=y -+# CONFIG_SLOW_WORK_DEBUG is not set +-# 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 -@@ -283,14 +287,41 @@ - # IO Schedulers - # - CONFIG_IOSCHED_NOOP=y --CONFIG_IOSCHED_AS=y --CONFIG_IOSCHED_DEADLINE=y -+CONFIG_IOSCHED_DEADLINE=m - 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 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=y - - # -@@ -300,7 +331,7 @@ +@@ -330,7 +328,6 @@ CONFIG_PCI=y CONFIG_PCI_DOMAINS=y # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y -+# CONFIG_PCI_LEGACY is not set # CONFIG_PCI_STUB is not set # CONFIG_PCI_IOV is not set CONFIG_ISA=y -@@ -314,7 +345,7 @@ - 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_BINFMT_MISC=m - CONFIG_MIPS32_COMPAT=y - CONFIG_COMPAT=y - CONFIG_SYSVIPC_COMPAT=y -@@ -335,7 +366,33 @@ - CONFIG_HIBERNATION_NVS=y +@@ -366,6 +363,7 @@ CONFIG_HIBERNATION=y CONFIG_PM_STD_PARTITION="/dev/hda3" --# CONFIG_PM_RUNTIME is not set -+CONFIG_PM_RUNTIME=y -+CONFIG_MIPS_EXTERNAL_TIMER=y -+CONFIG_MIPS_CPUFREQ=y -+ -+# -+# CPU Frequency scaling -+# -+CONFIG_CPU_FREQ=y -+CONFIG_CPU_FREQ_TABLE=y -+CONFIG_CPU_FREQ_DEBUG=y -+CONFIG_CPU_FREQ_STAT=m -+CONFIG_CPU_FREQ_STAT_DETAILS=y -+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set -+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set -+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set -+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y -+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set -+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -+CONFIG_CPU_FREQ_GOV_POWERSAVE=m -+CONFIG_CPU_FREQ_GOV_USERSPACE=m -+CONFIG_CPU_FREQ_GOV_ONDEMAND=y -+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m -+ -+# -+# CPUFreq processor drivers -+# -+CONFIG_LOONGSON2_CPUFREQ=m - CONFIG_NET=y - CONFIG_COMPAT_NETLINK_MESSAGES=y + CONFIG_PM_RUNTIME=y ++CONFIG_PM_OPS=y + CONFIG_MIPS_EXTERNAL_TIMER=y + CONFIG_MIPS_CPUFREQ=y -@@ -346,11 +403,12 @@ - CONFIG_PACKET_MMAP=y - CONFIG_UNIX=y - CONFIG_XFRM=y --# CONFIG_XFRM_USER is not set -+CONFIG_XFRM_USER=m - # CONFIG_XFRM_SUB_POLICY is not set - # CONFIG_XFRM_MIGRATE is not set - # CONFIG_XFRM_STATISTICS is not set --# CONFIG_NET_KEY is not set -+CONFIG_NET_KEY=m -+# CONFIG_NET_KEY_MIGRATE is not set - CONFIG_INET=y - CONFIG_IP_MULTICAST=y - CONFIG_IP_ADVANCED_ROUTER=y -@@ -361,12 +419,13 @@ - CONFIG_IP_ROUTE_MULTIPATH=y - CONFIG_IP_ROUTE_VERBOSE=y - # CONFIG_IP_PNP is not set --# CONFIG_NET_IPIP is not set --# CONFIG_NET_IPGRE is not set -+CONFIG_NET_IPIP=m -+CONFIG_NET_IPGRE=m -+# CONFIG_NET_IPGRE_BROADCAST is not set - CONFIG_IP_MROUTE=y - CONFIG_IP_PIMSM_V1=y - CONFIG_IP_PIMSM_V2=y --# CONFIG_ARPD is not set -+CONFIG_ARPD=y - CONFIG_SYN_COOKIES=y - # CONFIG_INET_AH is not set - # CONFIG_INET_ESP is not set -@@ -399,30 +458,34 @@ - # CONFIG_DEFAULT_WESTWOOD is not set - # CONFIG_DEFAULT_RENO is not set - CONFIG_DEFAULT_TCP_CONG="bic" --# CONFIG_TCP_MD5SIG is not set -+CONFIG_TCP_MD5SIG=y - CONFIG_IPV6=m - CONFIG_IPV6_PRIVACY=y --# CONFIG_IPV6_ROUTER_PREF is not set -+CONFIG_IPV6_ROUTER_PREF=y -+# CONFIG_IPV6_ROUTE_INFO is not set - # CONFIG_IPV6_OPTIMISTIC_DAD is not set - # CONFIG_INET6_AH is not set - # CONFIG_INET6_ESP is not set - # CONFIG_INET6_IPCOMP is not set - # CONFIG_IPV6_MIP6 is not set - # CONFIG_INET6_XFRM_TUNNEL is not set --# CONFIG_INET6_TUNNEL is not set -+CONFIG_INET6_TUNNEL=m - CONFIG_INET6_XFRM_MODE_TRANSPORT=m - CONFIG_INET6_XFRM_MODE_TUNNEL=m - CONFIG_INET6_XFRM_MODE_BEET=m - # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set - CONFIG_IPV6_SIT=m -+# CONFIG_IPV6_SIT_6RD is not set - CONFIG_IPV6_NDISC_NODETYPE=y --# CONFIG_IPV6_TUNNEL is not set --# CONFIG_IPV6_MULTIPLE_TABLES is not set -+CONFIG_IPV6_TUNNEL=m -+CONFIG_IPV6_MULTIPLE_TABLES=y -+CONFIG_IPV6_SUBTREES=y - # CONFIG_IPV6_MROUTE is not set - CONFIG_NETWORK_SECMARK=y - CONFIG_NETFILTER=y - # CONFIG_NETFILTER_DEBUG is not set - CONFIG_NETFILTER_ADVANCED=y -+CONFIG_BRIDGE_NETFILTER=y +@@ -393,12 +391,12 @@ + # + CONFIG_LOONGSON2_CPUFREQ=m + CONFIG_NET=y ++CONFIG_COMPAT_NETLINK_MESSAGES=y # - # Core Netfilter Configuration -@@ -446,17 +509,22 @@ + # Networking options # - # CONFIG_IP6_NF_QUEUE is not set - # CONFIG_IP6_NF_IPTABLES is not set -+# CONFIG_BRIDGE_NF_EBTABLES 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_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_BRIDGE is not set -+CONFIG_STP=m -+CONFIG_BRIDGE=m + CONFIG_STP=m + CONFIG_BRIDGE=m ++CONFIG_BRIDGE_IGMP_SNOOPING=y # CONFIG_NET_DSA is not set --# CONFIG_VLAN_8021Q is not set -+CONFIG_VLAN_8021Q=m -+# CONFIG_VLAN_8021Q_GVRP is not set - # CONFIG_DECNET is not set -+CONFIG_LLC=m - # CONFIG_LLC2 is not set --# CONFIG_IPX is not set -+CONFIG_IPX=m -+# CONFIG_IPX_INTERN is not set - # CONFIG_ATALK is not set - # CONFIG_X25 is not set - # CONFIG_LAPB is not set -@@ -518,26 +586,64 @@ + 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_NET_DROP_MONITOR is not set # CONFIG_HAMRADIO is not set # CONFIG_CAN is not set # CONFIG_IRDA is not set --# CONFIG_BT is not set -+CONFIG_BT=m -+CONFIG_BT_L2CAP=m -+CONFIG_BT_SCO=m -+CONFIG_BT_RFCOMM=m -+CONFIG_BT_RFCOMM_TTY=y -+CONFIG_BT_BNEP=m -+CONFIG_BT_BNEP_MC_FILTER=y -+CONFIG_BT_BNEP_PROTO_FILTER=y -+CONFIG_BT_HIDP=m -+ -+# -+# Bluetooth device drivers -+# -+CONFIG_BT_HCIBTUSB=m -+# CONFIG_BT_HCIBTSDIO is not set -+# CONFIG_BT_HCIUART is not set -+# CONFIG_BT_HCIBCM203X is not set -+# CONFIG_BT_HCIBPA10X is not set -+CONFIG_BT_HCIBFUSB=m -+CONFIG_BT_HCIVHCI=m -+# CONFIG_BT_MRVL 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_CFG80211 is not set --CONFIG_CFG80211_DEFAULT_PS_VALUE=0 --# CONFIG_WIRELESS_OLD_REGULATORY is not set - CONFIG_WIRELESS_EXT=y -+CONFIG_WEXT_CORE=y -+CONFIG_WEXT_PROC=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_WEXT=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 is not set -- --# --# CFG80211 needs to be enabled for MAC80211 --# -+CONFIG_LIB80211=m -+CONFIG_LIB80211_DEBUG=y -+CONFIG_MAC80211=m -+# CONFIG_MAC80211_RC_PID is not set -+CONFIG_MAC80211_RC_MINSTREL=y -+# CONFIG_MAC80211_RC_DEFAULT_PID is not set -+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y -+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_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 --# CONFIG_RFKILL_INPUT is not set -+CONFIG_RFKILL_LEDS=y -+CONFIG_RFKILL_INPUT=y - # CONFIG_NET_9P is not set - - # -@@ -555,7 +661,7 @@ - CONFIG_FIRMWARE_IN_KERNEL=y - CONFIG_EXTRA_FIRMWARE="" - # CONFIG_SYS_HYPERVISOR is not set --# CONFIG_CONNECTOR is not set -+CONFIG_CONNECTOR=m - # CONFIG_MTD is not set - # CONFIG_PARPORT is not set - # CONFIG_PNP is not set -@@ -566,7 +672,8 @@ - # CONFIG_BLK_DEV_UMEM is not set +@@ -668,10 +667,6 @@ # CONFIG_BLK_DEV_COW_COMMON is not set CONFIG_BLK_DEV_LOOP=y --CONFIG_BLK_DEV_CRYPTOLOOP=y -+CONFIG_BLK_DEV_CRYPTOLOOP=m -+# CONFIG_BLK_DEV_DRBD is not set - # CONFIG_BLK_DEV_NBD is not set - # CONFIG_BLK_DEV_SX8 is not set - # CONFIG_BLK_DEV_UB is not set -@@ -577,19 +684,7 @@ - # CONFIG_CDROM_PKTCDVD is not set - # CONFIG_ATA_OVER_ETH is not set - # CONFIG_BLK_DEV_HD is not set --CONFIG_MISC_DEVICES=y --# CONFIG_PHANTOM is not set --# CONFIG_SGI_IOC4 is not set --# CONFIG_TIFM_CORE is not set --# CONFIG_ENCLOSURE_SERVICES is not set --# CONFIG_HP_ILO is not set --# CONFIG_C2PORT is not set + CONFIG_BLK_DEV_CRYPTOLOOP=m - -# --# EEPROM support +-# DRBD disabled because PROC_FS, INET or CONNECTOR not selected -# --# CONFIG_EEPROM_93CX6 is not set --# CONFIG_CB710_CORE is not set -+# CONFIG_MISC_DEVICES is not set - CONFIG_HAVE_IDE=y - CONFIG_IDE=y - -@@ -619,8 +714,7 @@ - # - CONFIG_BLK_DEV_IDEPCI=y - # CONFIG_IDEPCI_PCIBUS_ORDER is not set --# CONFIG_BLK_DEV_OFFBOARD is not set --CONFIG_BLK_DEV_GENERIC=y -+# 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 -@@ -700,7 +794,29 @@ - # CONFIG_SCSI_DH is not set - # CONFIG_SCSI_OSD_INITIATOR is not set - # CONFIG_ATA is not set --# CONFIG_MD is not set -+CONFIG_MD=y -+CONFIG_BLK_DEV_MD=m -+CONFIG_MD_LINEAR=m -+CONFIG_MD_RAID0=m -+CONFIG_MD_RAID1=m -+CONFIG_MD_RAID10=m -+CONFIG_MD_RAID456=m -+CONFIG_MD_RAID6_PQ=m -+# CONFIG_ASYNC_RAID6_TEST is not set -+CONFIG_MD_MULTIPATH=m -+CONFIG_MD_FAULTY=m -+CONFIG_BLK_DEV_DM=m -+CONFIG_DM_DEBUG=y -+CONFIG_DM_CRYPT=m -+CONFIG_DM_SNAPSHOT=m -+CONFIG_DM_MIRROR=m -+CONFIG_DM_LOG_USERSPACE=m -+CONFIG_DM_ZERO=m -+CONFIG_DM_MULTIPATH=m -+CONFIG_DM_MULTIPATH_QL=m -+CONFIG_DM_MULTIPATH_ST=m -+CONFIG_DM_DELAY=m -+CONFIG_DM_UEVENT=y - # CONFIG_FUSION is not set - - # -@@ -712,19 +828,19 @@ - # - + # 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 @@ # --# See the help texts for more information. -+# The newer stack is recommended. + # SCSI device support # - # CONFIG_FIREWIRE is not set - # CONFIG_IEEE1394 is not set - # CONFIG_I2O is not set - CONFIG_NETDEVICES=y - # CONFIG_IFB is not set --# CONFIG_DUMMY is not set -+CONFIG_DUMMY=m - # 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_TUN=m -+CONFIG_VETH=m - # CONFIG_ARCNET is not set - # CONFIG_PHYLIB is not set - CONFIG_NET_ETHERNET=y -@@ -738,6 +854,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 -@@ -767,9 +884,9 @@ ++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=y -+# CONFIG_8139TOO_TUNE_TWISTER is not set + # 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 -@@ -794,7 +911,8 @@ +@@ -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_R8169_VLAN=y # CONFIG_SIS190 is not set # CONFIG_SKGE is not set - # CONFIG_SKY2 is not set -@@ -810,15 +928,31 @@ - # CONFIG_NETDEV_10000 is not set - # CONFIG_TR is not set - CONFIG_WLAN=y --CONFIG_WLAN_PRE80211=y --# CONFIG_STRIP is not set --# CONFIG_WAVELAN is not set --CONFIG_WLAN_80211=y --# CONFIG_LIBERTAS is not set -+# CONFIG_LIBERTAS_THINFIRM is not set - # CONFIG_ATMEL is not set -+# CONFIG_AT76C50X_USB is not set - # CONFIG_PRISM54 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_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 -+# CONFIG_ATH_COMMON is not set -+# CONFIG_B43 is not set -+# CONFIG_B43LEGACY is not set - # CONFIG_HOSTAP is not set -+# CONFIG_IPW2100 is not set -+# CONFIG_IPW2200 is not set -+# CONFIG_IWLWIFI is not set -+# CONFIG_IWM is not set -+# CONFIG_LIBERTAS is not set -+# CONFIG_HERMES is not set -+# CONFIG_P54_COMMON is not set -+# CONFIG_RT2X00 is not set -+# CONFIG_WL12XX is not set -+# CONFIG_ZD1211RW is not set - - # - # Enable WiMAX (Networking options) to see the WiMAX drivers -@@ -831,17 +965,39 @@ - # 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_USBNET=m -+CONFIG_USB_NET_AX8817X=m -+CONFIG_USB_NET_CDCETHER=m -+CONFIG_USB_NET_CDC_EEM=m -+# CONFIG_USB_NET_DM9601 is not set -+# CONFIG_USB_NET_SMSC95XX is not set -+# CONFIG_USB_NET_GL620A is not set -+CONFIG_USB_NET_NET1080=m -+# CONFIG_USB_NET_PLUSB is not set -+# CONFIG_USB_NET_MCS7830 is not set -+# CONFIG_USB_NET_RNDIS_HOST is not set -+CONFIG_USB_NET_CDC_SUBSET=m -+# CONFIG_USB_ALI_M5632 is not set -+# CONFIG_USB_AN2720 is not set -+CONFIG_USB_BELKIN=y -+CONFIG_USB_ARMLINUX=y -+# CONFIG_USB_EPSON2888 is not set -+# CONFIG_USB_KC2190 is not set -+CONFIG_USB_NET_ZAURUS=m - # CONFIG_USB_HSO is not set -+# CONFIG_USB_NET_INT51X1 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_NETCONSOLE=m -+CONFIG_NETCONSOLE_DYNAMIC=y -+CONFIG_NETPOLL=y -+# CONFIG_NETPOLL_TRAP is not set -+CONFIG_NET_POLL_CONTROLLER=y -+# CONFIG_VMXNET3 is not set - # CONFIG_ISDN is not set - # CONFIG_PHONE is not set - -@@ -849,25 +1005,26 @@ - # Input device support - # + # 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 is not set --# CONFIG_INPUT_POLLDEV is not set -+CONFIG_INPUT_FF_MEMLESS=m -+CONFIG_INPUT_POLLDEV=m + CONFIG_INPUT_FF_MEMLESS=m + CONFIG_INPUT_POLLDEV=m +-# CONFIG_INPUT_SPARSEKMAP is not set +CONFIG_INPUT_SPARSEKMAP=m # @@ -1107,7 +824,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_OPENCORES is not set -@@ -875,7 +1032,7 @@ +@@ -1031,7 +1029,7 @@ # CONFIG_KEYBOARD_SUNKBD is not set # CONFIG_KEYBOARD_XTKBD is not set CONFIG_INPUT_MOUSE=y @@ -1116,24 +833,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_MOUSE_PS2_ALPS is not set # CONFIG_MOUSE_PS2_LOGIPS2PP is not set CONFIG_MOUSE_PS2_SYNAPTICS=y -@@ -884,7 +1041,7 @@ - # 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_APPLETOUCH=m - # CONFIG_MOUSE_BCM5974 is not set - # CONFIG_MOUSE_INPORT is not set - # CONFIG_MOUSE_LOGIBM is not set -@@ -904,6 +1061,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 - - # -@@ -915,27 +1073,13 @@ +@@ -1072,20 +1070,7 @@ CONFIG_HW_CONSOLE=y # CONFIG_VT_HW_CONSOLE_BINDING is not set CONFIG_DEVKMEM=y @@ -1155,25 +855,15 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_NOZOMI is not set # - # Serial drivers - # --CONFIG_SERIAL_8250=y --CONFIG_SERIAL_8250_CONSOLE=y -+CONFIG_SERIAL_8250=m - # CONFIG_SERIAL_8250_PCI is not set - CONFIG_SERIAL_8250_NR_UARTS=16 - CONFIG_SERIAL_8250_RUNTIME_UARTS=4 -@@ -953,8 +1097,7 @@ - # - # Non-8250 serial port support +@@ -1111,6 +1096,7 @@ # --CONFIG_SERIAL_CORE=y --CONFIG_SERIAL_CORE_CONSOLE=y -+CONFIG_SERIAL_CORE=m + 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 -@@ -963,7 +1106,6 @@ + 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 @@ -1181,7 +871,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -@@ -978,7 +1120,10 @@ +@@ -1133,7 +1118,10 @@ # # CONFIG_PPS is not set # CONFIG_W1 is not set @@ -1193,134 +883,45 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi CONFIG_HWMON=y # CONFIG_HWMON_VID is not set # CONFIG_HWMON_DEBUG_CHIP is not set -@@ -1033,14 +1178,18 @@ - # - # Multimedia drivers - # -+CONFIG_IR_CORE=m -+CONFIG_VIDEO_IR=m - # CONFIG_MEDIA_ATTACH is not set - CONFIG_VIDEO_V4L2=m - CONFIG_VIDEO_V4L1=m -+CONFIG_VIDEOBUF_GEN=m -+CONFIG_VIDEOBUF_VMALLOC=m - CONFIG_VIDEO_CAPTURE_DRIVERS=y - # CONFIG_VIDEO_ADV_DEBUG is not set - # CONFIG_VIDEO_FIXED_MINOR_RANGES is not set - CONFIG_VIDEO_HELPER_CHIPS_AUTO=y --# CONFIG_VIDEO_VIVI is not set -+CONFIG_VIDEO_VIVI=m - # CONFIG_VIDEO_PMS is not set - # CONFIG_VIDEO_CPIA is not set - # CONFIG_VIDEO_CPIA2 is not set -@@ -1049,52 +1198,55 @@ - CONFIG_USB_VIDEO_CLASS=m - CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y - CONFIG_USB_GSPCA=m --# CONFIG_USB_M5602 is not set --# CONFIG_USB_STV06XX is not set -+CONFIG_USB_M5602=m -+CONFIG_USB_STV06XX=m +@@ -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_CONEX is not set --# CONFIG_USB_GSPCA_ETOMS is not set --# CONFIG_USB_GSPCA_FINEPIX is not set -+CONFIG_USB_GSPCA_CONEX=m -+CONFIG_USB_GSPCA_ETOMS=m -+CONFIG_USB_GSPCA_FINEPIX=m ++# 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 --# CONFIG_USB_GSPCA_MARS is not set --# CONFIG_USB_GSPCA_MR97310A is not set --# CONFIG_USB_GSPCA_OV519 is not set --# CONFIG_USB_GSPCA_OV534 is not set --# CONFIG_USB_GSPCA_PAC207 is not set --# CONFIG_USB_GSPCA_PAC7311 is not set --# CONFIG_USB_GSPCA_SN9C20X is not set --# CONFIG_USB_GSPCA_SONIXB is not set --# CONFIG_USB_GSPCA_SONIXJ is not set --# CONFIG_USB_GSPCA_SPCA500 is not set --# CONFIG_USB_GSPCA_SPCA501 is not set --# CONFIG_USB_GSPCA_SPCA505 is not set --# CONFIG_USB_GSPCA_SPCA506 is not set --# CONFIG_USB_GSPCA_SPCA508 is not set --# CONFIG_USB_GSPCA_SPCA561 is not set --# CONFIG_USB_GSPCA_SQ905 is not set --# CONFIG_USB_GSPCA_SQ905C is not set --# CONFIG_USB_GSPCA_STK014 is not set --# CONFIG_USB_GSPCA_SUNPLUS is not set --# CONFIG_USB_GSPCA_T613 is not set --# CONFIG_USB_GSPCA_TV8532 is not set --# CONFIG_USB_GSPCA_VC032X is not set --# CONFIG_USB_GSPCA_ZC3XX is not set -+CONFIG_USB_GSPCA_MARS=m -+CONFIG_USB_GSPCA_MR97310A=m -+CONFIG_USB_GSPCA_OV519=m -+CONFIG_USB_GSPCA_OV534=m -+CONFIG_USB_GSPCA_PAC207=m -+# CONFIG_USB_GSPCA_PAC7302 is not set -+CONFIG_USB_GSPCA_PAC7311=m -+CONFIG_USB_GSPCA_SN9C20X=m -+CONFIG_USB_GSPCA_SN9C20X_EVDEV=y -+CONFIG_USB_GSPCA_SONIXB=m -+CONFIG_USB_GSPCA_SONIXJ=m -+CONFIG_USB_GSPCA_SPCA500=m -+CONFIG_USB_GSPCA_SPCA501=m -+CONFIG_USB_GSPCA_SPCA505=m -+CONFIG_USB_GSPCA_SPCA506=m -+CONFIG_USB_GSPCA_SPCA508=m -+CONFIG_USB_GSPCA_SPCA561=m -+CONFIG_USB_GSPCA_SQ905=m -+CONFIG_USB_GSPCA_SQ905C=m -+CONFIG_USB_GSPCA_STK014=m -+# CONFIG_USB_GSPCA_STV0680 is not set -+CONFIG_USB_GSPCA_SUNPLUS=m -+CONFIG_USB_GSPCA_T613=m -+CONFIG_USB_GSPCA_TV8532=m -+CONFIG_USB_GSPCA_VC032X=m -+CONFIG_USB_GSPCA_ZC3XX=m - # CONFIG_VIDEO_HDPVR is not set - # CONFIG_USB_VICAM is not set - # CONFIG_USB_IBMCAM is not set - # CONFIG_USB_KONICAWC is not set - # CONFIG_USB_QUICKCAM_MESSENGER is not set --# CONFIG_USB_ET61X251 is not set -+CONFIG_USB_ET61X251=m - # CONFIG_USB_OV511 is not set - # CONFIG_USB_SE401 is not set --# CONFIG_USB_SN9C102 is not set -+CONFIG_USB_SN9C102=m - # CONFIG_USB_STV680 is not set --# CONFIG_USB_ZC0301 is not set -+CONFIG_USB_ZC0301=m - # CONFIG_USB_PWC is not set - CONFIG_USB_PWC_INPUT_EVDEV=y --# CONFIG_USB_ZR364XX is not set --# CONFIG_USB_STKWEBCAM is not set --# CONFIG_USB_S2255 is not set -+CONFIG_USB_ZR364XX=m -+CONFIG_USB_STKWEBCAM=m -+CONFIG_USB_S2255=m - # CONFIG_RADIO_ADAPTERS is not set - # CONFIG_DAB is not set - -@@ -1132,6 +1284,7 @@ - # CONFIG_FB_CYBER2000 is not set - # CONFIG_FB_ASILIANT is not set - # CONFIG_FB_IMSTT is not set -+# CONFIG_FB_UVESA is not set - # CONFIG_FB_S1D13XXX is not set - # CONFIG_FB_NVIDIA is not set - # CONFIG_FB_RIVA is not set -@@ -1161,7 +1314,7 @@ - CONFIG_BACKLIGHT_LCD_SUPPORT=y - # CONFIG_LCD_CLASS_DEVICE is not set - CONFIG_BACKLIGHT_CLASS_DEVICE=y --CONFIG_BACKLIGHT_GENERIC=y -+CONFIG_BACKLIGHT_GENERIC=m - +@@ -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 # - # Display device support -@@ -1188,33 +1341,45 @@ + 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 @@ -1330,137 +931,54 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi -CONFIG_LOGO_LINUX_CLUT224=y +# CONFIG_LOGO is not set CONFIG_SOUND=m --# CONFIG_SOUND_OSS_CORE is not set -+CONFIG_SOUND_OSS_CORE=y -+CONFIG_SOUND_OSS_CORE_PRECLAIM=y - CONFIG_SND=m - CONFIG_SND_TIMER=m - CONFIG_SND_PCM=m --# CONFIG_SND_SEQUENCER is not set --# CONFIG_SND_MIXER_OSS is not set --# CONFIG_SND_PCM_OSS is not set --# CONFIG_SND_HRTIMER is not set + 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_HWDEP=m -+CONFIG_SND_RAWMIDI=m -+CONFIG_SND_SEQUENCER=m -+CONFIG_SND_SEQ_DUMMY=m -+CONFIG_SND_OSSEMUL=y -+CONFIG_SND_MIXER_OSS=m -+CONFIG_SND_PCM_OSS=m -+CONFIG_SND_PCM_OSS_PLUGINS=y -+CONFIG_SND_SEQUENCER_OSS=y -+CONFIG_SND_HRTIMER=m -+CONFIG_SND_SEQ_HRTIMER_DEFAULT=y # CONFIG_SND_DYNAMIC_MINORS is not set --# CONFIG_SND_SUPPORT_OLD_API is not set --# CONFIG_SND_VERBOSE_PROCFS is not set -+CONFIG_SND_SUPPORT_OLD_API=y -+CONFIG_SND_VERBOSE_PROCFS=y - # CONFIG_SND_VERBOSE_PRINTK is not set - # CONFIG_SND_DEBUG is not set - CONFIG_SND_VMASTER=y --# CONFIG_SND_RAWMIDI_SEQ is not set -+CONFIG_SND_RAWMIDI_SEQ=m - # CONFIG_SND_OPL3_LIB_SEQ is not set - # CONFIG_SND_OPL4_LIB_SEQ is not set - # CONFIG_SND_SBAWE_SEQ is not set - # CONFIG_SND_EMU10K1_SEQ is not set -+CONFIG_SND_MPU401_UART=m - CONFIG_SND_AC97_CODEC=m --# CONFIG_SND_DRIVERS is not set -+CONFIG_SND_DRIVERS=y -+CONFIG_SND_DUMMY=m -+CONFIG_SND_VIRMIDI=m -+# CONFIG_SND_MTPAV is not set -+CONFIG_SND_SERIAL_U16550=m -+CONFIG_SND_MPU401=m -+CONFIG_SND_AC97_POWER_SAVE=y -+CONFIG_SND_AC97_POWER_SAVE_DEFAULT=10 - CONFIG_SND_PCI=y - # CONFIG_SND_AD1889 is not set - # CONFIG_SND_ALS300 is not set -@@ -1281,7 +1446,10 @@ - # CONFIG_SND_VX222 is not set - # CONFIG_SND_YMFPCI 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 is not set -+CONFIG_SND_USB=y -+CONFIG_SND_USB_AUDIO=m -+CONFIG_SND_USB_CAIAQ=m -+CONFIG_SND_USB_CAIAQ_INPUT=y + 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 - # CONFIG_SOUND_PRIME is not set - CONFIG_AC97_BUS=m -@@ -1299,32 +1467,41 @@ +@@ -1481,6 +1472,7 @@ # # Special HID drivers # --# CONFIG_HID_A4TECH is not set --# CONFIG_HID_APPLE is not set --# CONFIG_HID_BELKIN is not set --# CONFIG_HID_CHERRY is not set --# CONFIG_HID_CHICONY is not set --# CONFIG_HID_CYPRESS is not set --# CONFIG_HID_DRAGONRISE is not set --# CONFIG_HID_EZKEY is not set --# CONFIG_HID_KYE is not set --# CONFIG_HID_GYRATION is not set --# CONFIG_HID_TWINHAN is not set --# CONFIG_HID_KENSINGTON is not set --# CONFIG_HID_LOGITECH is not set --# CONFIG_HID_MICROSOFT is not set --# CONFIG_HID_MONTEREY is not set --# CONFIG_HID_NTRIG is not set --# CONFIG_HID_PANTHERLORD is not set --# CONFIG_HID_PETALYNX is not set --# CONFIG_HID_SAMSUNG is not set --# CONFIG_HID_SONY is not set --# CONFIG_HID_SUNPLUS is not set --# CONFIG_HID_GREENASIA is not set --# CONFIG_HID_SMARTJOYPLUS is not set --# CONFIG_HID_TOPSEED is not set --# CONFIG_HID_THRUSTMASTER is not set --# CONFIG_HID_ZEROPLUS is not set -+CONFIG_HID_A4TECH=m -+CONFIG_HID_APPLE=m -+CONFIG_HID_BELKIN=m -+CONFIG_HID_CHERRY=m -+CONFIG_HID_CHICONY=m -+CONFIG_HID_CYPRESS=m -+CONFIG_HID_DRAGONRISE=m -+CONFIG_DRAGONRISE_FF=y -+CONFIG_HID_EZKEY=m -+CONFIG_HID_KYE=m -+CONFIG_HID_GYRATION=m -+CONFIG_HID_TWINHAN=m -+CONFIG_HID_KENSINGTON=m -+CONFIG_HID_LOGITECH=m -+CONFIG_LOGITECH_FF=y -+CONFIG_LOGIRUMBLEPAD2_FF=y -+CONFIG_HID_MICROSOFT=m -+CONFIG_HID_MONTEREY=m -+CONFIG_HID_NTRIG=m -+CONFIG_HID_PANTHERLORD=m -+CONFIG_PANTHERLORD_FF=y -+CONFIG_HID_PETALYNX=m -+CONFIG_HID_SAMSUNG=m -+CONFIG_HID_SONY=m -+CONFIG_HID_SUNPLUS=m -+CONFIG_HID_GREENASIA=m -+CONFIG_GREENASIA_FF=y -+CONFIG_HID_SMARTJOYPLUS=m -+CONFIG_SMARTJOYPLUS_FF=y -+CONFIG_HID_TOPSEED=m -+CONFIG_HID_THRUSTMASTER=m -+CONFIG_THRUSTMASTER_FF=y -+CONFIG_HID_WACOM=m -+CONFIG_HID_ZEROPLUS=m -+CONFIG_ZEROPLUS_FF=y - CONFIG_USB_SUPPORT=y - CONFIG_USB_ARCH_HAS_HCD=y - CONFIG_USB_ARCH_HAS_OHCI=y -@@ -1336,15 +1513,15 @@ ++# 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 # @@ -1473,146 +991,77 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi 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_MON=m -+CONFIG_USB_WUSB=m + CONFIG_USB_WUSB=m # CONFIG_USB_WUSB_CBAF is not set - # -@@ -1366,14 +1543,15 @@ - CONFIG_USB_UHCI_HCD=m - # 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 -+CONFIG_USB_WHCI_HCD=m -+CONFIG_USB_HWA_HCD=m -+# CONFIG_USB_GADGET_MUSB_HDRC is not set - - # - # USB Device Class drivers - # - CONFIG_USB_ACM=m --# CONFIG_USB_PRINTER is not set -+CONFIG_USB_PRINTER=m - CONFIG_USB_WDM=m - # CONFIG_USB_TMC is not set - -@@ -1397,7 +1575,7 @@ - # 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 is not set -+CONFIG_USB_LIBUSUAL=y +@@ -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 # - # USB Imaging devices -@@ -1467,7 +1645,7 @@ +@@ -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 is not set -+CONFIG_USB_LED=m +-# CONFIG_USB_BERRY_CHARGE is not set + CONFIG_USB_LED=m # CONFIG_USB_CYPRESS_CY7C63 is not set # CONFIG_USB_CYTHERM is not set - # CONFIG_USB_IDMOUSE is not set -@@ -1480,19 +1658,136 @@ +@@ -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 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 -+# CONFIG_USB_GADGET_ATMEL_USBA is not set -+# CONFIG_USB_GADGET_FSL_USB2 is not set -+# CONFIG_USB_GADGET_LH7A40X is not set -+# CONFIG_USB_GADGET_OMAP is not set -+# CONFIG_USB_GADGET_PXA25X is not set -+# CONFIG_USB_GADGET_R8A66597 is not set -+# CONFIG_USB_GADGET_PXA27X is not set -+# CONFIG_USB_GADGET_S3C_HSOTG is not set -+# CONFIG_USB_GADGET_IMX is not set -+# CONFIG_USB_GADGET_S3C2410 is not set -+CONFIG_USB_GADGET_M66592=y -+CONFIG_USB_M66592=m -+# CONFIG_USB_GADGET_AMD5536UDC is not set -+# CONFIG_USB_GADGET_FSL_QE is not set -+# CONFIG_USB_GADGET_CI13XXX is not set -+# CONFIG_USB_GADGET_NET2280 is not set -+# CONFIG_USB_GADGET_GOKU is not set -+# CONFIG_USB_GADGET_LANGWELL is not set -+# CONFIG_USB_GADGET_DUMMY_HCD is not set -+CONFIG_USB_GADGET_DUALSPEED=y -+# CONFIG_USB_ZERO is not set -+# CONFIG_USB_AUDIO is not set -+# CONFIG_USB_ETH is not set -+# CONFIG_USB_GADGETFS is not set -+# CONFIG_USB_FILE_STORAGE is not set -+# CONFIG_USB_MASS_STORAGE is not set -+# CONFIG_USB_G_SERIAL is not set -+# CONFIG_USB_MIDI_GADGET is not set -+# CONFIG_USB_G_PRINTER is not set -+# CONFIG_USB_CDC_COMPOSITE is not set -+# CONFIG_USB_G_MULTI 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 # - # OTG and related infrastructure +@@ -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_NOP_USB_XCEIV is not set --# CONFIG_UWB is not set --# CONFIG_MMC is not set -+CONFIG_UWB=m -+CONFIG_UWB_HWA=m -+CONFIG_UWB_WHCI=m -+# CONFIG_UWB_WLP is not set -+# CONFIG_UWB_I1480U is not set -+CONFIG_MMC=m -+# CONFIG_MMC_DEBUG is not set -+# CONFIG_MMC_UNSAFE_RESUME is not set -+ -+# -+# MMC/SD/SDIO Card Drivers -+# -+CONFIG_MMC_BLOCK=m -+CONFIG_MMC_BLOCK_BOUNCE=y -+# CONFIG_SDIO_UART is not set -+# CONFIG_MMC_TEST is not set -+ -+# -+# 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 - # CONFIG_MEMSTICK is not set --# CONFIG_NEW_LEDS is not set -+CONFIG_NEW_LEDS=y -+CONFIG_LEDS_CLASS=m -+ -+# -+# LED drivers -+# -+ -+# -+# 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 -+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set -+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set -+ -+# -+# iptables trigger is under Netfilter config (LED target) -+# + + # + # 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 @@ -1658,305 +1107,83 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_DMADEVICES is not set # CONFIG_AUXDISPLAY is not set # CONFIG_UIO is not set -@@ -1504,22 +1799,21 @@ - # CONFIG_STAGING_EXCLUDE_BUILD 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_W35UND is not set ++# CONFIG_PRISM2_USB is not set # CONFIG_ECHO is not set -+# CONFIG_OTUS 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_RTL8187SE is not set -+# CONFIG_R8187SE is not set - # CONFIG_RTL8192SU 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_INPUT_MIMIO is not set # CONFIG_TRANZPORT is not set # --# Android --# -- --# - # Qualcomm MSM Camera And Video - # - -@@ -1527,7 +1821,6 @@ - # Camera Sensor Selection +@@ -1795,8 +1830,6 @@ # # CONFIG_INPUT_GPIO is not set --# CONFIG_DST is not set # CONFIG_POHMELFS is not set - # CONFIG_B3DFG is not set - # CONFIG_PLAN9AUTH is not set -@@ -1544,28 +1837,57 @@ - # - # 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_WAVELAN 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=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 - # --# CONFIG_EXT2_FS is not set -+CONFIG_EXT2_FS=m -+# CONFIG_EXT2_FS_XATTR 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=y - CONFIG_EXT3_FS_SECURITY=y --# CONFIG_EXT4_FS is not set -+CONFIG_EXT4_FS=y -+CONFIG_EXT4_FS_XATTR=y -+# CONFIG_EXT4_FS_POSIX_ACL is not set -+# CONFIG_EXT4_FS_SECURITY is not set -+# CONFIG_EXT4_DEBUG is not set +@@ -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_JBD_DEBUG is not set + CONFIG_JBD2=y +-# CONFIG_JBD2_DEBUG is not set CONFIG_FS_MBCACHE=y --# CONFIG_REISERFS_FS is not set --# CONFIG_JFS_FS is not set -+CONFIG_REISERFS_FS=m -+# CONFIG_REISERFS_CHECK is not set -+CONFIG_REISERFS_PROC_INFO=y -+CONFIG_REISERFS_FS_XATTR=y -+# CONFIG_REISERFS_FS_POSIX_ACL is not set -+# CONFIG_REISERFS_FS_SECURITY is not set -+CONFIG_JFS_FS=m -+CONFIG_JFS_POSIX_ACL=y -+# CONFIG_JFS_SECURITY is not set -+# CONFIG_JFS_DEBUG is not set -+# CONFIG_JFS_STATISTICS is not set - CONFIG_FS_POSIX_ACL=y --# CONFIG_XFS_FS is not set -+CONFIG_XFS_FS=m -+CONFIG_XFS_QUOTA=y -+CONFIG_XFS_POSIX_ACL=y -+# CONFIG_XFS_RT is not set -+# CONFIG_XFS_DEBUG is not set - # CONFIG_GFS2_FS is not set - # CONFIG_OCFS2_FS is not set --# CONFIG_BTRFS_FS is not set -+CONFIG_BTRFS_FS=m -+# CONFIG_BTRFS_FS_POSIX_ACL is not set - # CONFIG_NILFS2_FS is not set - CONFIG_FILE_LOCKING=y - CONFIG_FSNOTIFY=y -@@ -1575,17 +1897,26 @@ - CONFIG_QUOTA=y - # CONFIG_QUOTA_NETLINK_INTERFACE is not set - CONFIG_PRINT_QUOTA_WARNING=y -+CONFIG_QUOTA_TREE=m - # CONFIG_QFMT_V1 is not set --# CONFIG_QFMT_V2 is not set -+CONFIG_QFMT_V2=m + CONFIG_REISERFS_FS=m + # CONFIG_REISERFS_CHECK is not set +@@ -1874,7 +1909,8 @@ CONFIG_QUOTACTL=y --# CONFIG_AUTOFS_FS is not set --# CONFIG_AUTOFS4_FS is not set + CONFIG_AUTOFS_FS=m + CONFIG_AUTOFS4_FS=m -# CONFIG_FUSE_FS is not set -+CONFIG_AUTOFS_FS=m -+CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m +CONFIG_CUSE=m # # Caches - # --# CONFIG_FSCACHE is not set -+CONFIG_FSCACHE=m -+# CONFIG_FSCACHE_STATS is not set -+# CONFIG_FSCACHE_HISTOGRAM is not set -+# CONFIG_FSCACHE_DEBUG is not set -+# CONFIG_FSCACHE_OBJECT_LIST is not set -+CONFIG_CACHEFILES=m -+# CONFIG_CACHEFILES_DEBUG is not set -+# CONFIG_CACHEFILES_HISTOGRAM is not set - - # - # CD-ROM/DVD Filesystems -@@ -1599,11 +1930,13 @@ - # DOS/FAT/NT Filesystems - # - CONFIG_FAT_FS=m --# CONFIG_MSDOS_FS is not set -+CONFIG_MSDOS_FS=m - CONFIG_VFAT_FS=m - CONFIG_FAT_DEFAULT_CODEPAGE=437 - CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" --# CONFIG_NTFS_FS is not set -+CONFIG_NTFS_FS=m -+# CONFIG_NTFS_DEBUG is not set -+CONFIG_NTFS_RW=y - - # - # Pseudo filesystems -@@ -1616,23 +1949,60 @@ - 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_CONFIGFS_FS=m -+CONFIG_MISC_FILESYSTEMS=y -+# CONFIG_ADFS_FS is not set -+# CONFIG_AFFS_FS is not set -+# CONFIG_ECRYPT_FS is not set -+# CONFIG_HFS_FS is not set -+# CONFIG_HFSPLUS_FS is not set -+# CONFIG_BEFS_FS is not set -+# CONFIG_BFS_FS is not set -+# CONFIG_EFS_FS is not set -+CONFIG_CRAMFS=m -+CONFIG_SQUASHFS=m -+CONFIG_SQUASHFS_EMBEDDED=y -+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 -+# CONFIG_VXFS_FS is not set -+# CONFIG_MINIX_FS is not set -+# CONFIG_OMFS_FS is not set -+# CONFIG_HPFS_FS is not set -+# CONFIG_QNX4FS_FS is not set -+CONFIG_ROMFS_FS=m -+CONFIG_ROMFS_BACKED_BY_BLOCK=y -+# CONFIG_ROMFS_BACKED_BY_MTD is not set -+# CONFIG_ROMFS_BACKED_BY_BOTH is not set -+CONFIG_ROMFS_ON_BLOCK=y -+# CONFIG_SYSV_FS is not set -+# CONFIG_UFS_FS is not set - CONFIG_NETWORK_FILESYSTEMS=y - CONFIG_NFS_FS=m - CONFIG_NFS_V3=y - CONFIG_NFS_V3_ACL=y - # CONFIG_NFS_V4 is not set --# CONFIG_NFSD is not set -+# CONFIG_NFS_FSCACHE is not set -+CONFIG_NFSD=m -+CONFIG_NFSD_V3=y -+# CONFIG_NFSD_V3_ACL is not set -+CONFIG_NFSD_V4=y - CONFIG_LOCKD=m - CONFIG_LOCKD_V4=y -+CONFIG_EXPORTFS=m - CONFIG_NFS_ACL_SUPPORT=m - CONFIG_NFS_COMMON=y - CONFIG_SUNRPC=m --# CONFIG_RPCSEC_GSS_KRB5 is not set -+CONFIG_SUNRPC_GSS=m -+CONFIG_RPCSEC_GSS_KRB5=m +@@ -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_CIFS is not set -+CONFIG_CIFS=m -+# CONFIG_CIFS_STATS is not set -+# CONFIG_CIFS_WEAK_PW_HASH is not set -+# CONFIG_CIFS_UPCALL is not set -+# CONFIG_CIFS_XATTR is not set -+# CONFIG_CIFS_DEBUG2 is not set -+# CONFIG_CIFS_DFS_UPCALL is not set -+# CONFIG_CIFS_EXPERIMENTAL is not set - # CONFIG_NCP_FS is not set - # CONFIG_CODA_FS is not set - # CONFIG_AFS_FS is not set -@@ -1643,177 +2013,205 @@ - # CONFIG_PARTITION_ADVANCED is not set - CONFIG_MSDOS_PARTITION=y - CONFIG_NLS=y --CONFIG_NLS_DEFAULT="utf-8" --# CONFIG_NLS_CODEPAGE_437 is not set --# 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 is not set --# 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 is not set -+CONFIG_NLS_DEFAULT="utf8" -+CONFIG_NLS_CODEPAGE_437=m -+CONFIG_NLS_CODEPAGE_737=m -+CONFIG_NLS_CODEPAGE_775=m -+CONFIG_NLS_CODEPAGE_850=m -+CONFIG_NLS_CODEPAGE_852=m -+CONFIG_NLS_CODEPAGE_855=m -+CONFIG_NLS_CODEPAGE_857=m -+CONFIG_NLS_CODEPAGE_860=m -+CONFIG_NLS_CODEPAGE_861=m -+CONFIG_NLS_CODEPAGE_862=m -+CONFIG_NLS_CODEPAGE_863=m -+CONFIG_NLS_CODEPAGE_864=m -+CONFIG_NLS_CODEPAGE_865=m -+CONFIG_NLS_CODEPAGE_866=m -+CONFIG_NLS_CODEPAGE_869=m -+CONFIG_NLS_CODEPAGE_936=m -+CONFIG_NLS_CODEPAGE_950=m -+CONFIG_NLS_CODEPAGE_932=m -+CONFIG_NLS_CODEPAGE_949=m -+CONFIG_NLS_CODEPAGE_874=m -+CONFIG_NLS_ISO8859_8=m -+CONFIG_NLS_CODEPAGE_1250=m -+CONFIG_NLS_CODEPAGE_1251=m -+CONFIG_NLS_ASCII=m -+CONFIG_NLS_ISO8859_1=m -+CONFIG_NLS_ISO8859_2=m -+CONFIG_NLS_ISO8859_3=m -+CONFIG_NLS_ISO8859_4=m -+CONFIG_NLS_ISO8859_5=m -+CONFIG_NLS_ISO8859_6=m -+CONFIG_NLS_ISO8859_7=m -+CONFIG_NLS_ISO8859_9=m -+CONFIG_NLS_ISO8859_13=m -+CONFIG_NLS_ISO8859_14=m -+CONFIG_NLS_ISO8859_15=m -+CONFIG_NLS_KOI8_R=m -+CONFIG_NLS_KOI8_U=m -+CONFIG_NLS_UTF8=y - # CONFIG_DLM 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 @@ -1968,266 +1195,1521 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_MAGIC_SYSRQ is not set CONFIG_STRIP_ASM_SYMS=y # CONFIG_UNUSED_SYMBOLS is not set --# CONFIG_DEBUG_FS is not set -+CONFIG_DEBUG_FS=y +-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_STACKTRACE=y # CONFIG_DEBUG_MEMORY_INIT is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set --CONFIG_SYSCTL_SYSCALL_CHECK=y -+# CONFIG_SYSCTL_SYSCALL_CHECK is not set -+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_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_DYNAMIC_DEBUG is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y -+CONFIG_EARLY_PRINTK=y +-CONFIG_EARLY_PRINTK=y ++# CONFIG_EARLY_PRINTK is not set # CONFIG_CMDLINE_BOOL is not set # - # Security options +@@ -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 + # --# CONFIG_KEYS is not set -+CONFIG_KEYS=y -+CONFIG_KEYS_DEBUG_PROC_KEYS=y - # CONFIG_SECURITY is not set - # CONFIG_SECURITYFS is not set --# CONFIG_SECURITY_FILE_CAPABILITIES 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_XOR_BLOCKS=m -+CONFIG_ASYNC_CORE=m -+CONFIG_ASYNC_MEMCPY=m -+CONFIG_ASYNC_XOR=m -+CONFIG_ASYNC_PQ=m -+CONFIG_ASYNC_RAID6_RECOV=m - CONFIG_CRYPTO=y - - # - # Crypto core or helper - # -+CONFIG_CRYPTO_FIPS=y - CONFIG_CRYPTO_ALGAPI=y - CONFIG_CRYPTO_ALGAPI2=y -+CONFIG_CRYPTO_AEAD=m - CONFIG_CRYPTO_AEAD2=y --CONFIG_CRYPTO_BLKCIPHER=y -+CONFIG_CRYPTO_BLKCIPHER=m - CONFIG_CRYPTO_BLKCIPHER2=y -+CONFIG_CRYPTO_HASH=y - CONFIG_CRYPTO_HASH2=y -+CONFIG_CRYPTO_RNG=m - CONFIG_CRYPTO_RNG2=y - CONFIG_CRYPTO_PCOMP=y --CONFIG_CRYPTO_MANAGER=y -+CONFIG_CRYPTO_MANAGER=m - CONFIG_CRYPTO_MANAGER2=y --# CONFIG_CRYPTO_GF128MUL is not set --# CONFIG_CRYPTO_NULL is not set -+CONFIG_CRYPTO_GF128MUL=m -+CONFIG_CRYPTO_NULL=m - CONFIG_CRYPTO_WORKQUEUE=y --# CONFIG_CRYPTO_CRYPTD is not set --# CONFIG_CRYPTO_AUTHENC is not set --# CONFIG_CRYPTO_TEST is not set -+CONFIG_CRYPTO_CRYPTD=m -+CONFIG_CRYPTO_AUTHENC=m -+CONFIG_CRYPTO_TEST=m - - # - # Authenticated Encryption with Associated Data - # --# CONFIG_CRYPTO_CCM is not set --# CONFIG_CRYPTO_GCM is not set --# CONFIG_CRYPTO_SEQIV is not set -+CONFIG_CRYPTO_CCM=m -+CONFIG_CRYPTO_GCM=m -+CONFIG_CRYPTO_SEQIV=m - - # - # Block modes - # --CONFIG_CRYPTO_CBC=y --# CONFIG_CRYPTO_CTR is not set -+CONFIG_CRYPTO_CBC=m -+CONFIG_CRYPTO_CTR=m - # CONFIG_CRYPTO_CTS is not set --# CONFIG_CRYPTO_ECB is not set --# CONFIG_CRYPTO_LRW is not set --# CONFIG_CRYPTO_PCBC is not set --# CONFIG_CRYPTO_XTS is not set -+CONFIG_CRYPTO_ECB=m -+CONFIG_CRYPTO_LRW=m -+CONFIG_CRYPTO_PCBC=m -+CONFIG_CRYPTO_XTS=m - - # - # Hash modes - # --# CONFIG_CRYPTO_HMAC is not set --# CONFIG_CRYPTO_XCBC is not set -+CONFIG_CRYPTO_HMAC=m -+CONFIG_CRYPTO_XCBC=m - # CONFIG_CRYPTO_VMAC is not set - - # - # Digest - # --# CONFIG_CRYPTO_CRC32C is not set --# CONFIG_CRYPTO_GHASH is not set --# CONFIG_CRYPTO_MD4 is not set --# CONFIG_CRYPTO_MD5 is not set --# CONFIG_CRYPTO_MICHAEL_MIC is not set --# CONFIG_CRYPTO_RMD128 is not set --# CONFIG_CRYPTO_RMD160 is not set --# CONFIG_CRYPTO_RMD256 is not set --# CONFIG_CRYPTO_RMD320 is not set --# CONFIG_CRYPTO_SHA1 is not set --# CONFIG_CRYPTO_SHA256 is not set --# CONFIG_CRYPTO_SHA512 is not set --# CONFIG_CRYPTO_TGR192 is not set --# CONFIG_CRYPTO_WP512 is not set -+CONFIG_CRYPTO_CRC32C=m -+CONFIG_CRYPTO_GHASH=m -+CONFIG_CRYPTO_MD4=m -+CONFIG_CRYPTO_MD5=y -+CONFIG_CRYPTO_MICHAEL_MIC=m -+CONFIG_CRYPTO_RMD128=m -+CONFIG_CRYPTO_RMD160=m -+CONFIG_CRYPTO_RMD256=m -+CONFIG_CRYPTO_RMD320=m -+CONFIG_CRYPTO_SHA1=m -+CONFIG_CRYPTO_SHA256=m -+CONFIG_CRYPTO_SHA512=m -+CONFIG_CRYPTO_TGR192=m -+CONFIG_CRYPTO_WP512=m - - # - # Ciphers - # --# CONFIG_CRYPTO_AES is not set --# CONFIG_CRYPTO_ANUBIS is not set --# CONFIG_CRYPTO_ARC4 is not set --# CONFIG_CRYPTO_BLOWFISH is not set --# CONFIG_CRYPTO_CAMELLIA is not set --# CONFIG_CRYPTO_CAST5 is not set --# CONFIG_CRYPTO_CAST6 is not set --# CONFIG_CRYPTO_DES is not set --# CONFIG_CRYPTO_FCRYPT is not set --# CONFIG_CRYPTO_KHAZAD is not set --# CONFIG_CRYPTO_SALSA20 is not set --# CONFIG_CRYPTO_SEED is not set --# CONFIG_CRYPTO_SERPENT is not set --# CONFIG_CRYPTO_TEA is not set --# CONFIG_CRYPTO_TWOFISH is not set -+CONFIG_CRYPTO_AES=m -+CONFIG_CRYPTO_ANUBIS=m -+CONFIG_CRYPTO_ARC4=m -+CONFIG_CRYPTO_BLOWFISH=m -+CONFIG_CRYPTO_CAMELLIA=m -+CONFIG_CRYPTO_CAST5=m -+CONFIG_CRYPTO_CAST6=m -+CONFIG_CRYPTO_DES=m -+CONFIG_CRYPTO_FCRYPT=m -+CONFIG_CRYPTO_KHAZAD=m -+CONFIG_CRYPTO_SALSA20=m -+CONFIG_CRYPTO_SEED=m -+CONFIG_CRYPTO_SERPENT=m -+CONFIG_CRYPTO_TEA=m -+CONFIG_CRYPTO_TWOFISH=m -+CONFIG_CRYPTO_TWOFISH_COMMON=m - - # - # Compression - # --# CONFIG_CRYPTO_DEFLATE is not set --# CONFIG_CRYPTO_ZLIB is not set --# CONFIG_CRYPTO_LZO is not set -+CONFIG_CRYPTO_DEFLATE=m -+CONFIG_CRYPTO_ZLIB=m -+CONFIG_CRYPTO_LZO=m - - # - # Random Number Generation - # --# CONFIG_CRYPTO_ANSI_CPRNG is not set -+CONFIG_CRYPTO_ANSI_CPRNG=m - CONFIG_CRYPTO_HW=y - # CONFIG_CRYPTO_DEV_HIFN_795X is not set --# CONFIG_BINARY_PRINTF is not set -+CONFIG_BINARY_PRINTF=y - - # - # Library routines -@@ -1821,14 +2219,20 @@ - CONFIG_BITREVERSE=y - CONFIG_GENERIC_FIND_LAST_BIT=y - # CONFIG_CRC_CCITT is not set --# CONFIG_CRC16 is not set -+CONFIG_CRC16=y - CONFIG_CRC_T10DIF=y - # CONFIG_CRC_ITU_T is not set - CONFIG_CRC32=y - # CONFIG_CRC7 is not set --# CONFIG_LIBCRC32C is not set -+CONFIG_LIBCRC32C=m - CONFIG_AUDIT_GENERIC=y --CONFIG_ZLIB_INFLATE=m ++# 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_ZLIB_DEFLATE=m -+CONFIG_LZO_COMPRESS=m -+CONFIG_LZO_DECOMPRESS=m ++CONFIG_LZO_DECOMPRESS=y +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_LZMA=y - CONFIG_HAS_IOMEM=y - CONFIG_HAS_IOPORT=y - CONFIG_HAS_DMA=y -diff -Nur linux-2.6.33/arch/mips/include/asm/ftrace.h linux-lemote/arch/mips/include/asm/ftrace.h ---- linux-2.6.33/arch/mips/include/asm/ftrace.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/ftrace.h 2010-03-06 16:43:00.000000000 +0100 -@@ -4,7 +4,7 @@ ++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 +@@ -74,4 +74,8 @@ + extern void dma_cache_sync(struct device *dev, void *vaddr, size_t size, + enum dma_data_direction direction); + ++#define ARCH_HAS_DMA_MMAP_COHERENT ++extern int dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma, ++ 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 -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin +- * Copyright (C) 2009 DSLab, Lanzhou University, China ++ * Copyright (C) 2009, 2010 DSLab, Lanzhou University, China + * Author: Wu Zhangjin */ - #ifndef _ASM_MIPS_FTRACE_H -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h linux-lemote/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h 2010-03-06 16:43:00.000000000 +0100 -@@ -3,7 +3,7 @@ - * License. See the file "COPYING" in the main directory of this archive - * for more details. - * -- * Copyright (C) 2009 Wu Zhangjin -+ * Copyright (C) 2009 Wu Zhangjin - * Copyright (C) 2009 Philippe Vachon - * Copyright (C) 2009 Zhang Le - * -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h linux-lemote/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h 2010-03-06 16:43:00.000000000 +0100 -@@ -301,5 +301,40 @@ +@@ -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 +@@ -255,21 +255,12 @@ + * IDE STANDARD + */ + #define IDE_CAP 0x00 +-#define IDE_CONFIG 0x01 +-#define IDE_SMI 0x02 +-#define IDE_ERROR 0x03 +-#define IDE_PM 0x04 +-#define IDE_DIAG 0x05 +- +-/* +- * IDE SPEC. +- */ + #define IDE_IO_BAR 0x08 + #define IDE_CFG 0x10 + #define IDE_DTC 0x12 + #define IDE_CAST 0x13 + #define IDE_ETC 0x14 +-#define IDE_INTERNAL_PM 0x15 ++#define IDE_PM 0x15 + + /* + * ACC STANDARD +@@ -301,5 +292,40 @@ /* GPIO : I/O SPACE; REG : 32BITS */ #define GPIOL_OUT_VAL 0x00 #define GPIOL_OUT_EN 0x04 @@ -2268,9 +2750,9 @@ diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h linux +#define SMB_CTRL3 0x06 #endif /* _CS5536_H */ -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h linux-lemote/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h 2010-03-06 16:43:00.000000000 +0100 +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 @@ -32,4 +32,9 @@ #define MFGPT0_CNT (MFGPT_BASE + 4) #define MFGPT0_SETUP (MFGPT_BASE + 6) @@ -2281,21 +2763,9 @@ diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h +#define MFGPT2_SETUP (MFGPT_BASE + 0x16) + #endif /*!_CS5536_MFGPT_H */ -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h linux-lemote/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h 2010-03-06 16:43:00.000000000 +0100 -@@ -2,7 +2,7 @@ - * the read/write interfaces for Virtual Support Module(VSM) - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - */ - - #ifndef _CS5536_VSM_H -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/ec_kb3310b.h linux-lemote/arch/mips/include/asm/mach-loongson/ec_kb3310b.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/ec_kb3310b.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/ec_kb3310b.h 2010-03-06 16:43:00.000000000 +0100 +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 @@ -0,0 +1,191 @@ +/* + * KB3310B Embedded Controller @@ -2469,18 +2939,18 @@ diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/ec_kb3310b.h linux-le +/* SCI Event Number from EC */ +enum { + EVENT_LID = 0x23, /* Turn on/off LID */ -+ EVENT_DISPLAY_TOGGLE, /* Fn+F3 for display switch */ ++ EVENT_SWITCHVIDEOMODE, /* Fn+F3 for display switch */ + EVENT_SLEEP, /* Fn+F1 for entering sleep mode */ + EVENT_OVERTEMP, /* Over-temperature happened */ + EVENT_CRT_DETECT, /* CRT is connected */ + EVENT_CAMERA, /* Camera on/off */ + EVENT_USB_OC2, /* USB2 Over Current occurred */ + EVENT_USB_OC0, /* USB0 Over Current occurred */ -+ EVENT_BLACK_SCREEN, /* Turn on/off backlight */ -+ EVENT_AUDIO_MUTE, /* Mute on/off */ -+ EVENT_DISPLAY_BRIGHTNESS,/* LCD backlight brightness adjust */ ++ EVENT_DISPLAYTOGGLE, /* Fn+F2, Turn on/off backlight */ ++ EVENT_AUDIO_MUTE, /* Fn+F4, Mute on/off */ ++ EVENT_DISPLAY_BRIGHTNESS,/* Fn+^/V, LCD backlight brightness adjust */ + EVENT_AC_BAT, /* AC & Battery relative issue */ -+ EVENT_AUDIO_VOLUME, /* Volume adjust */ ++ EVENT_AUDIO_VOLUME, /* Fn+<|>, Volume adjust */ + EVENT_WLAN, /* Wlan on/off */ +}; + @@ -2488,33 +2958,49 @@ diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/ec_kb3310b.h linux-le +#define EVENT_END EVENT_WLAN + +#endif /* !_EC_KB3310B_H */ -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/loongson.h linux-lemote/arch/mips/include/asm/mach-loongson/loongson.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/loongson.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/loongson.h 2010-03-06 16:43:00.000000000 +0100 -@@ -1,12 +1,11 @@ - /* - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - * - * 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 __ASM_MACH_LOONGSON_LOONGSON_H -@@ -23,7 +22,7 @@ - extern void mach_prepare_shutdown(void); - - /* environment arguments from bootloader */ --extern unsigned long bus_clock, cpu_clock_freq; -+extern unsigned long cpu_clock_freq; - extern unsigned long memsize, highmemsize; - - /* loongson-specific command line, env and memory initialization */ -@@ -43,6 +42,12 @@ +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 ++ * Copyright (c) 2008-2010 Arnaud Patard ++ * ++ * 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 ++ ++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 +@@ -42,6 +42,12 @@ #endif } @@ -2527,99 +3013,28 @@ diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/loongson.h linux-lemo /* irq operation functions */ extern void bonito_irqdispatch(void); extern void __init bonito_irq_init(void); -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/machine.h linux-lemote/arch/mips/include/asm/mach-loongson/machine.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/machine.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/machine.h 2010-03-06 16:43:00.000000000 +0100 -@@ -1,6 +1,6 @@ - /* -- * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology -- * Author: Wu Zhangjin -+ * Copyright (C) 2009 Lemote, Inc. -+ * Author: Wu Zhangjin - * - * 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 -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/mem.h linux-lemote/arch/mips/include/asm/mach-loongson/mem.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/mem.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/mem.h 2010-03-06 16:43:00.000000000 +0100 -@@ -1,6 +1,6 @@ - /* - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - * - * 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 -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/pci.h linux-lemote/arch/mips/include/asm/mach-loongson/pci.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/pci.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/pci.h 2010-03-06 16:43:00.000000000 +0100 -@@ -1,23 +1,12 @@ - /* - * Copyright (c) 2008 Zhang Le -- * Copyright (c) 2009 Wu Zhangjin -+ * Copyright (c) 2009 Wu Zhangjin - * - * 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., 675 Mass Ave, Cambridge, MA -- * 02139, USA. - */ - - #ifndef __ASM_MACH_LOONGSON_PCI_H_ -diff -Nur linux-2.6.33/arch/mips/include/asm/stackframe.h linux-lemote/arch/mips/include/asm/stackframe.h ---- linux-2.6.33/arch/mips/include/asm/stackframe.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/stackframe.h 2010-03-06 16:43:00.000000000 +0100 -@@ -121,6 +121,25 @@ - .endm - #else - .macro get_saved_sp /* Uniprocessor variation */ -+ /* -+ * clear BTB(branch target buffer), forbid RAS(row address -+ * strobe) to make cpu execute predictively via -+ * loongson2-specific 64bit diagnostic register -+ */ -+#ifdef CONFIG_CPU_LOONGSON2F -+ move k0, ra -+ jal 1f -+ nop -+1: jal 1f -+ nop -+1: jal 1f -+ nop -+1: jal 1f -+ nop -+1: move ra, k0 -+ li k0, 3 -+ mtc0 k0, $22 -+#endif - #if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32) - lui k1, %hi(kernelsp) - #else -diff -Nur linux-2.6.33/arch/mips/Kconfig linux-lemote/arch/mips/Kconfig ---- linux-2.6.33/arch/mips/Kconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/Kconfig 2010-03-06 16:42:59.000000000 +0100 +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 @@ -180,7 +180,7 @@ config MACH_LOONGSON bool "Loongson family of machines" -- select SYS_SUPPORTS_ZBOOT_UART16550 -+ select SYS_SUPPORTS_ZBOOT +- select SYS_SUPPORTS_ZBOOT ++ select SYS_SUPPORTS_ZBOOT_UART16550 help This enables the support of Loongson family of machines. -@@ -1934,6 +1934,18 @@ +@@ -1075,6 +1075,8 @@ + bool "Loongson 2F" + depends on SYS_HAS_CPU_LOONGSON2F + select CPU_LOONGSON2 ++ select GENERIC_GPIO ++ select ARCH_REQUIRE_GPIOLIB + help + The Loongson 2F processor implements the MIPS III instruction set + with many extensions. +@@ -1965,6 +1967,18 @@ source "kernel/time/Kconfig" # @@ -2638,46 +3053,9 @@ diff -Nur linux-2.6.33/arch/mips/Kconfig linux-lemote/arch/mips/Kconfig # Timer Interrupt Frequency Configuration # -diff -Nur linux-2.6.33/arch/mips/Kconfig.debug linux-lemote/arch/mips/Kconfig.debug ---- linux-2.6.33/arch/mips/Kconfig.debug 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/Kconfig.debug 2010-03-06 16:42:59.000000000 +0100 -@@ -102,4 +102,22 @@ - arch/mips/include/asm/debug.h for debugging macros. - If unsure, say N. - -+config DEBUG_ZBOOT -+ bool "Enable compressed kernel support debugging" -+ depends on DEBUG_KERNEL && SYS_SUPPORTS_ZBOOT -+ help -+ If you want to add compressed kernel support to a new board, and the -+ board supports uart16550 compatible serial port, please select -+ SYS_SUPPORTS_ZBOOT_UART16550 for your board and enable this option to -+ debug it. -+ -+ If your board doesn't support uart16550 compatible serial port, you -+ can try to select SYS_SUPPORTS_ZBOOT and use the other methods to -+ debug it. for example, add a new serial port support just as -+ arch/mips/boot/compressed/uart-16550.c does. -+ -+ After the compressed kernel support works, please disable this option -+ to reduce the kernel image size and speed up the booting procedure a -+ little. -+ - endmenu -diff -Nur linux-2.6.33/arch/mips/kernel/cpufreq/loongson2_clock.c linux-lemote/arch/mips/kernel/cpufreq/loongson2_clock.c ---- linux-2.6.33/arch/mips/kernel/cpufreq/loongson2_clock.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/kernel/cpufreq/loongson2_clock.c 2010-03-06 16:43:01.000000000 +0100 -@@ -164,3 +164,7 @@ - spin_unlock_irqrestore(&loongson2_wait_lock, flags); - } - EXPORT_SYMBOL_GPL(loongson2_cpu_wait); -+ -+MODULE_AUTHOR("Yanhua "); -+MODULE_DESCRIPTION("cpuclock driver of Loongson2F"); -+MODULE_LICENSE("GPL"); -diff -Nur linux-2.6.33/arch/mips/kernel/csrc-r4k.c linux-lemote/arch/mips/kernel/csrc-r4k.c ---- linux-2.6.33/arch/mips/kernel/csrc-r4k.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/kernel/csrc-r4k.c 2010-03-06 16:43:01.000000000 +0100 +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 @@ -6,10 +6,66 @@ * Copyright (C) 2007 by Ralf Baechle */ @@ -2754,33 +3132,457 @@ diff -Nur linux-2.6.33/arch/mips/kernel/csrc-r4k.c linux-lemote/arch/mips/kernel /* Calculate a somewhat reasonable rating value */ clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000; -diff -Nur linux-2.6.33/arch/mips/kernel/ftrace.c linux-lemote/arch/mips/kernel/ftrace.c ---- linux-2.6.33/arch/mips/kernel/ftrace.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/kernel/ftrace.c 2010-03-06 16:43:01.000000000 +0100 -@@ -3,7 +3,7 @@ +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 - * Copyright (C) 2009 DSLab, Lanzhou University, China -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin +- * Copyright (C) 2009 DSLab, Lanzhou University, China ++ * Copyright (C) 2009, 2010 DSLab, Lanzhou University, China + * Author: Wu Zhangjin * * Thanks goes to Steven Rostedt for writing the original x86 version. - */ -diff -Nur linux-2.6.33/arch/mips/kernel/mcount.S linux-lemote/arch/mips/kernel/mcount.S ---- linux-2.6.33/arch/mips/kernel/mcount.S 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/kernel/mcount.S 2010-03-06 16:43:01.000000000 +0100 -@@ -6,7 +6,7 @@ +@@ -15,15 +15,51 @@ + #include + #include + #include ++#include ++ ++#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 -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin ++ * Copyright (C) 2010 DSLab, Lanzhou University, China + * Author: Wu Zhangjin */ - #include -diff -Nur linux-2.6.33/arch/mips/kernel/time.c linux-lemote/arch/mips/kernel/time.c ---- linux-2.6.33/arch/mips/kernel/time.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/kernel/time.c 2010-03-06 16:43:01.000000000 +0100 +@@ -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 @@ -119,6 +119,11 @@ void __init time_init(void) @@ -2793,18 +3595,10 @@ diff -Nur linux-2.6.33/arch/mips/kernel/time.c linux-lemote/arch/mips/kernel/tim plat_time_init(); if (!mips_clockevent_init() || !cpu_has_mfc0_count_bug()) -diff -Nur linux-2.6.33/arch/mips/loongson/common/cmdline.c linux-lemote/arch/mips/loongson/common/cmdline.c ---- linux-2.6.33/arch/mips/loongson/common/cmdline.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cmdline.c 2010-03-06 16:43:01.000000000 +0100 -@@ -10,23 +10,27 @@ - * Author: Fuxin Zhang, zhangfx@lemote.com - * - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: 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 +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 +@@ -17,10 +17,15 @@ * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. */ @@ -2813,22 +3607,14 @@ diff -Nur linux-2.6.33/arch/mips/loongson/common/cmdline.c linux-lemote/arch/mip #include --int prom_argc; --/* pmon passes arguments in 32bit pointers */ --int *_prom_argv; +/* the kernel command line copied from arcs_cmdline */ +char loongson_cmdline[COMMAND_LINE_SIZE]; +EXPORT_SYMBOL(loongson_cmdline); - ++ void __init prom_init_cmdline(void) { -+ int prom_argc; -+ /* pmon passes arguments in 32bit pointers */ -+ int *_prom_argv; - int i; - long l; - -@@ -51,4 +55,26 @@ + int prom_argc; +@@ -50,4 +55,26 @@ strcat(arcs_cmdline, " root=/dev/hda1"); prom_init_machtype(); @@ -2855,215 +3641,878 @@ diff -Nur linux-2.6.33/arch/mips/loongson/common/cmdline.c linux-lemote/arch/mip + /* copy arcs_cmdline into loongson_cmdline */ + strncpy(loongson_cmdline, arcs_cmdline, COMMAND_LINE_SIZE); } -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_acc.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_acc.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_acc.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_acc.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author : jlliu, liujl@lemote.com - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: 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 -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_ehci.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_ehci.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_ehci.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_ehci.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author : jlliu, liujl@lemote.com - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: 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 -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_ide.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_ide.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_ide.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_ide.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author : jlliu, liujl@lemote.com - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: 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 -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_isa.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_isa.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_isa.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_isa.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author : jlliu, liujl@lemote.com - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: 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 -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author: Yanhua, yanh@lemote.com - * - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu zhangjin, wuzj@lemote.com -+ * Author: Wu zhangjin, wuzhangjin@gmail.com - * - * Reference: AMD Geode(TM) CS5536 Companion Device Data Book - * -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_ohci.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_ohci.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_ohci.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_ohci.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author : jlliu, liujl@lemote.com - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: 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 -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_pci.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_pci.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_pci.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_pci.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author : jlliu, liujl@lemote.com - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: 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 -diff -Nur linux-2.6.33/arch/mips/loongson/common/early_printk.c linux-lemote/arch/mips/loongson/common/early_printk.c ---- linux-2.6.33/arch/mips/loongson/common/early_printk.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/early_printk.c 2010-03-06 16:43:01.000000000 +0100 -@@ -2,7 +2,7 @@ - * - * Copyright (c) 2009 Philippe Vachon - * Copyright (c) 2009 Lemote Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: 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 -diff -Nur linux-2.6.33/arch/mips/loongson/common/env.c linux-lemote/arch/mips/loongson/common/env.c ---- linux-2.6.33/arch/mips/loongson/common/env.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/env.c 2010-03-06 16:43:01.000000000 +0100 -@@ -9,8 +9,8 @@ - * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology - * Author: Fuxin Zhang, zhangfx@lemote.com - * -- * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Copyright (C) 2009 Lemote Inc. -+ * Author: 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 -@@ -23,13 +23,10 @@ +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 +@@ -18,7 +18,7 @@ - #include + void pci_acc_write_reg(int reg, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; --unsigned long bus_clock, cpu_clock_freq; -+unsigned long cpu_clock_freq; - EXPORT_SYMBOL(cpu_clock_freq); - unsigned long memsize, highmemsize; + switch (reg) { + case PCI_COMMAND: +@@ -66,75 +66,73 @@ + u32 pci_acc_read_reg(int reg) + { + u32 hi, lo; +- u32 conf_data = 0; ++ u32 cfg = 0; --/* pmon passes arguments in 32bit pointers */ --int *_prom_envp; -- - #define parse_even_earlier(res, option, p) \ - do { \ - if (strncmp(option, (char *)p, strlen(option)) == 0) \ -@@ -39,6 +36,10 @@ + switch (reg) { + case PCI_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_ACC_DEVICE_ID, CS5536_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_ACC_DEVICE_ID, ++ CS5536_VENDOR_ID); + break; + case PCI_COMMAND: + _rdmsr(GLIU_MSR_REG(GLIU_IOD_BM1), &hi, &lo); + if (((lo & 0xfff00000) || (hi & 0x000000ff)) + && ((hi & 0xf0000000) == 0xa0000000)) +- conf_data |= PCI_COMMAND_IO; ++ cfg |= PCI_COMMAND_IO; + _rdmsr(GLIU_MSR_REG(GLIU_PAE), &hi, &lo); + if ((lo & 0x300) == 0x300) +- conf_data |= PCI_COMMAND_MASTER; ++ cfg |= PCI_COMMAND_MASTER; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_FAST_BACK; + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_PARITY; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_PARITY; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; + break; + case PCI_CLASS_REVISION: + _rdmsr(ACC_MSR_REG(ACC_CAP), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_ACC_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_ACC_CLASS_CODE << 8); + break; + case PCI_CACHE_LINE_SIZE: +- conf_data = +- CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, +- PCI_NORMAL_LATENCY_TIMER); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, ++ PCI_NORMAL_LATENCY_TIMER); + break; + case PCI_BAR0_REG: + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & SOFT_BAR_ACC_FLAG) { +- conf_data = CS5536_ACC_RANGE | ++ cfg = CS5536_ACC_RANGE | + PCI_BASE_ADDRESS_SPACE_IO; + lo &= ~SOFT_BAR_ACC_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(GLIU_MSR_REG(GLIU_IOD_BM1), &hi, &lo); +- conf_data = (hi & 0x000000ff) << 12; +- conf_data |= (lo & 0xfff00000) >> 20; +- conf_data |= 0x01; +- conf_data &= ~0x02; ++ cfg = (hi & 0x000000ff) << 12; ++ cfg |= (lo & 0xfff00000) >> 20; ++ cfg |= 0x01; ++ cfg &= ~0x02; + } + 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_ACC_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_ACC_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_USB_POINTER; ++ cfg = PCI_CAPLIST_USB_POINTER; + break; + case PCI_INTERRUPT_LINE: +- conf_data = +- CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_ACC_INTR); ++ cfg = CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_ACC_INTR); + break; + default: + break; + } + +- 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 +@@ -18,7 +18,7 @@ - void __init prom_init_env(void) + void pci_ehci_write_reg(int reg, u32 value) { -+ /* pmon passes arguments in 32bit pointers */ -+ int *_prom_envp; -+ unsigned long bus_clock; -+ unsigned int processor_id; - long l; +- u32 hi = 0, lo = value; ++ u32 hi, lo; + + 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 @@ + + u32 pci_ehci_read_reg(int reg) + { +- u32 conf_data = 0; ++ u32 cfg = 0; + u32 hi, lo; - /* firmware arguments are initialized in head.S */ -@@ -55,6 +56,22 @@ + switch (reg) { + case PCI_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_EHCI_DEVICE_ID, CS5536_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_EHCI_DEVICE_ID, ++ CS5536_VENDOR_ID); + break; + case PCI_COMMAND: + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); + if (hi & PCI_COMMAND_MASTER) +- conf_data |= PCI_COMMAND_MASTER; ++ cfg |= PCI_COMMAND_MASTER; + if (hi & PCI_COMMAND_MEMORY) +- conf_data |= PCI_COMMAND_MEMORY; ++ cfg |= PCI_COMMAND_MEMORY; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_FAST_BACK; + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_PARITY; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_PARITY; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; + break; + case PCI_CLASS_REVISION: + _rdmsr(USB_MSR_REG(USB_CAP), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_EHCI_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_EHCI_CLASS_CODE << 8); + break; + case PCI_CACHE_LINE_SIZE: +- conf_data = +- CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, +- PCI_NORMAL_LATENCY_TIMER); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, ++ PCI_NORMAL_LATENCY_TIMER); + break; + case PCI_BAR0_REG: + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & SOFT_BAR_EHCI_FLAG) { +- conf_data = CS5536_EHCI_RANGE | ++ cfg = CS5536_EHCI_RANGE | + PCI_BASE_ADDRESS_SPACE_MEMORY; + lo &= ~SOFT_BAR_EHCI_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); +- conf_data = lo & 0xfffff000; ++ cfg = lo & 0xfffff000; + } + 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_EHCI_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_EHCI_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_USB_POINTER; ++ cfg = PCI_CAPLIST_USB_POINTER; + break; + case PCI_INTERRUPT_LINE: +- conf_data = +- CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR); ++ cfg = CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR); + break; + case PCI_EHCI_LEGSMIEN_REG: + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); +- conf_data = (hi & 0x003f0000) >> 16; ++ cfg = (hi & 0x003f0000) >> 16; + break; + case PCI_EHCI_LEGSMISTS_REG: + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); +- conf_data = (hi & 0x3f000000) >> 24; ++ cfg = (hi & 0x3f000000) >> 24; + break; + case PCI_EHCI_FLADJ_REG: + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); +- conf_data = hi & 0x00003f00; ++ cfg = hi & 0x00003f00; + break; + default: + break; } - if (memsize == 0) - memsize = 256; -+ if (bus_clock == 0) -+ bus_clock = 66000000; -+ if (cpu_clock_freq == 0) { -+ processor_id = (¤t_cpu_data)->processor_id; -+ switch (processor_id & PRID_REV_MASK) { -+ case PRID_REV_LOONGSON2E: -+ cpu_clock_freq = 533080000; -+ break; -+ case PRID_REV_LOONGSON2F: -+ cpu_clock_freq = 797000000; -+ break; -+ default: -+ cpu_clock_freq = 100000000; -+ break; + +- 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 +@@ -18,7 +18,7 @@ + + void pci_ide_write_reg(int reg, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; + + 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; + _wrmsr(IDE_MSR_REG(IDE_CFG), hi, lo); + } -+ } + break; +- case PCI_IDE_DTC_REG: +- _wrmsr(IDE_MSR_REG(IDE_DTC), hi, lo); +- break; +- case PCI_IDE_CAST_REG: +- _wrmsr(IDE_MSR_REG(IDE_CAST), hi, lo); +- break; +- case PCI_IDE_ETC_REG: +- _wrmsr(IDE_MSR_REG(IDE_ETC), hi, lo); +- break; +- case PCI_IDE_PM_REG: +- _wrmsr(IDE_MSR_REG(IDE_INTERNAL_PM), hi, lo); +- break; ++#define SET_PCI_IDE_REG(r) \ ++ case PCI_IDE_##r##_REG: \ ++ _rdmsr(IDE_MSR_REG(IDE_##r), &hi, &lo); \ ++ lo = value; \ ++ _wrmsr(IDE_MSR_REG(IDE_##r), hi, lo); \ ++ break; ++ SET_PCI_IDE_REG(DTC) ++ SET_PCI_IDE_REG(CAST) ++ SET_PCI_IDE_REG(ETC) ++ SET_PCI_IDE_REG(PM) + default: + break; + } +@@ -87,93 +89,82 @@ + + u32 pci_ide_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_IDE_DEVICE_ID, CS5536_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_IDE_DEVICE_ID, ++ CS5536_VENDOR_ID); + break; + case PCI_COMMAND: + _rdmsr(IDE_MSR_REG(IDE_IO_BAR), &hi, &lo); + if (lo & 0xfffffff0) +- conf_data |= PCI_COMMAND_IO; ++ cfg |= PCI_COMMAND_IO; + _rdmsr(GLIU_MSR_REG(GLIU_PAE), &hi, &lo); + if ((lo & 0x30) == 0x30) +- conf_data |= PCI_COMMAND_MASTER; ++ cfg |= PCI_COMMAND_MASTER; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_FAST_BACK; + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_PARITY; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_PARITY; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; + break; + case PCI_CLASS_REVISION: + _rdmsr(IDE_MSR_REG(IDE_CAP), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_IDE_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_IDE_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_NORMAL_HEADER_TYPE, hi); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, hi); + break; + case PCI_BAR4_REG: + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & SOFT_BAR_IDE_FLAG) { +- conf_data = CS5536_IDE_RANGE | ++ cfg = CS5536_IDE_RANGE | + PCI_BASE_ADDRESS_SPACE_IO; + lo &= ~SOFT_BAR_IDE_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(IDE_MSR_REG(IDE_IO_BAR), &hi, &lo); +- conf_data = lo & 0xfffffff0; +- conf_data |= 0x01; +- conf_data &= ~0x02; ++ cfg = lo & 0xfffffff0; ++ cfg |= 0x01; ++ cfg &= ~0x02; + } + 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_IDE_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_IDE_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: +- conf_data = +- CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_IDE_INTR); +- break; +- case PCI_IDE_CFG_REG: +- _rdmsr(IDE_MSR_REG(IDE_CFG), &hi, &lo); +- conf_data = lo; +- break; +- case PCI_IDE_DTC_REG: +- _rdmsr(IDE_MSR_REG(IDE_DTC), &hi, &lo); +- conf_data = lo; +- break; +- case PCI_IDE_CAST_REG: +- _rdmsr(IDE_MSR_REG(IDE_CAST), &hi, &lo); +- conf_data = lo; +- break; +- case PCI_IDE_ETC_REG: +- _rdmsr(IDE_MSR_REG(IDE_ETC), &hi, &lo); +- conf_data = lo; +- case PCI_IDE_PM_REG: +- _rdmsr(IDE_MSR_REG(IDE_INTERNAL_PM), &hi, &lo); +- conf_data = lo; ++ cfg = CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_IDE_INTR); + break; ++#define GET_PCI_IDE_REG(r) \ ++ case PCI_IDE_##r##_REG: \ ++ _rdmsr(IDE_MSR_REG(IDE_##r), &hi, &cfg); \ ++ break; ++ GET_PCI_IDE_REG(CFG) ++ GET_PCI_IDE_REG(DTC) ++ GET_PCI_IDE_REG(CAST) ++ GET_PCI_IDE_REG(ETC) ++ GET_PCI_IDE_REG(PM) + default: + break; + } + +- 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; + } - pr_info("busclock=%ld, cpuclock=%ld, memsize=%ld, highmemsize=%ld\n", - bus_clock, cpu_clock_freq, memsize, highmemsize); -diff -Nur linux-2.6.33/arch/mips/loongson/common/init.c linux-lemote/arch/mips/loongson/common/init.c ---- linux-2.6.33/arch/mips/loongson/common/init.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/init.c 2010-03-06 16:43:01.000000000 +0100 -@@ -1,6 +1,6 @@ - /* - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: 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 -diff -Nur linux-2.6.33/arch/mips/loongson/common/machtype.c linux-lemote/arch/mips/loongson/common/machtype.c ---- linux-2.6.33/arch/mips/loongson/common/machtype.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/machtype.c 2010-03-06 16:43:01.000000000 +0100 -@@ -1,6 +1,6 @@ /* -- * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Copyright (C) 2009 Lemote Inc. -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * Copyright (c) 2009 Zhang Le - * -@@ -35,6 +35,10 @@ - return system_types[mips_machtype]; +@@ -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 +@@ -18,7 +18,7 @@ + + void pci_ohci_write_reg(int reg, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; + + 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 @@ + + u32 pci_ohci_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_OHCI_DEVICE_ID, CS5536_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_OHCI_DEVICE_ID, ++ CS5536_VENDOR_ID); + break; + case PCI_COMMAND: + _rdmsr(USB_MSR_REG(USB_OHCI), &hi, &lo); + if (hi & PCI_COMMAND_MASTER) +- conf_data |= PCI_COMMAND_MASTER; ++ cfg |= PCI_COMMAND_MASTER; + if (hi & PCI_COMMAND_MEMORY) +- conf_data |= PCI_COMMAND_MEMORY; ++ cfg |= PCI_COMMAND_MEMORY; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_FAST_BACK; + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_PARITY; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_PARITY; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; + break; + case PCI_CLASS_REVISION: + _rdmsr(USB_MSR_REG(USB_CAP), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_OHCI_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_OHCI_CLASS_CODE << 8); + break; + case PCI_CACHE_LINE_SIZE: +- conf_data = +- CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, +- PCI_NORMAL_LATENCY_TIMER); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, ++ PCI_NORMAL_LATENCY_TIMER); + break; + case PCI_BAR0_REG: + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & SOFT_BAR_OHCI_FLAG) { +- conf_data = CS5536_OHCI_RANGE | ++ cfg = CS5536_OHCI_RANGE | + PCI_BASE_ADDRESS_SPACE_MEMORY; + lo &= ~SOFT_BAR_OHCI_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(USB_MSR_REG(USB_OHCI), &hi, &lo); +- conf_data = lo & 0xffffff00; +- conf_data &= ~0x0000000f; /* 32bit mem */ ++ cfg = lo & 0xffffff00; ++ cfg &= ~0x0000000f; /* 32bit mem */ + } + 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_OHCI_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_OHCI_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_USB_POINTER; ++ cfg = PCI_CAPLIST_USB_POINTER; + break; + case PCI_INTERRUPT_LINE: +- conf_data = +- CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR); ++ cfg = CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR); + break; + case PCI_OHCI_INT_REG: + _rdmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), &hi, &lo); + if ((lo & 0x00000f00) == CS5536_USB_INTR) +- conf_data = 1; ++ cfg = 1; + break; + default: + break; + } -+void __weak __init mach_prom_init_machtype(void) +- 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 ++ * Copyright (c) 2008-2010 Arnaud Patard ++ * ++ * 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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#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 __init prom_init_machtype(void) - { - char *p, str[MACHTYPE_LEN]; -@@ -43,8 +47,10 @@ - mips_machtype = LOONGSON_MACHTYPE; - - p = strstr(arcs_cmdline, "machtype="); -- if (!p) -+ if (!p) { -+ mach_prom_init_machtype(); - return; ++void gpio_set_value(unsigned gpio, int state) ++{ ++ u32 val; ++ u32 mask; ++ ++ if (gpio >= STLS2F_N_GPIO) { ++ __gpio_set_value(gpio, state); ++ return ; + } - p += strlen("machtype="); - strncpy(str, p, MACHTYPE_LEN); - p = strstr(str, " "); -diff -Nur linux-2.6.33/arch/mips/loongson/common/Makefile linux-lemote/arch/mips/loongson/common/Makefile ---- linux-2.6.33/arch/mips/loongson/common/Makefile 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/Makefile 2010-03-06 16:43:01.000000000 +0100 -@@ -23,3 +23,9 @@ ++ ++ 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 @@ -3073,27 +4522,9 @@ diff -Nur linux-2.6.33/arch/mips/loongson/common/Makefile linux-lemote/arch/mips +# please enable CONFIG_RTC_DRV_CMOS +# +obj-$(CONFIG_RTC_DRV_CMOS) += rtc.o -diff -Nur linux-2.6.33/arch/mips/loongson/common/mem.c linux-lemote/arch/mips/loongson/common/mem.c ---- linux-2.6.33/arch/mips/loongson/common/mem.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/mem.c 2010-03-06 16:43:01.000000000 +0100 -@@ -16,10 +16,11 @@ - - void __init prom_init_memory(void) - { -- add_memory_region(0x0, (memsize << 20), BOOT_MEM_RAM); -+ add_memory_region(0x0, (memsize << 20), BOOT_MEM_RAM); -+ -+ add_memory_region(memsize << 20, LOONGSON_PCI_MEM_START - (memsize << -+ 20), BOOT_MEM_RESERVED); - -- add_memory_region(memsize << 20, LOONGSON_PCI_MEM_START - (memsize << -- 20), BOOT_MEM_RESERVED); - #ifdef CONFIG_CPU_SUPPORTS_ADDRWINCFG - { - int bit; -diff -Nur linux-2.6.33/arch/mips/loongson/common/mtd.c linux-lemote/arch/mips/loongson/common/mtd.c ---- linux-2.6.33/arch/mips/loongson/common/mtd.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/mtd.c 2010-03-06 16:43:01.000000000 +0100 +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 @@ -0,0 +1,91 @@ +/* + * Driver for flushing/dumping ROM of PMON on loongson family machines @@ -3186,796 +4617,3365 @@ diff -Nur linux-2.6.33/arch/mips/loongson/common/mtd.c linux-lemote/arch/mips/lo +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Yanhua "); +MODULE_DESCRIPTION("MTD driver for pmon flushing/dumping"); -diff -Nur linux-2.6.33/arch/mips/loongson/common/platform.c linux-lemote/arch/mips/loongson/common/platform.c ---- linux-2.6.33/arch/mips/loongson/common/platform.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/platform.c 2010-03-06 16:43:01.000000000 +0100 -@@ -1,6 +1,6 @@ - /* - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: 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 -diff -Nur linux-2.6.33/arch/mips/loongson/common/pm.c linux-lemote/arch/mips/loongson/common/pm.c ---- linux-2.6.33/arch/mips/loongson/common/pm.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/pm.c 2010-03-06 16:43:01.000000000 +0100 -@@ -2,7 +2,7 @@ - * loongson-specific suspend support - * - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - * - * 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 -diff -Nur linux-2.6.33/arch/mips/loongson/common/reset.c linux-lemote/arch/mips/loongson/common/reset.c ---- linux-2.6.33/arch/mips/loongson/common/reset.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/reset.c 2010-03-06 16:43:01.000000000 +0100 -@@ -6,8 +6,8 @@ - * - * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology - * Author: Fuxin Zhang, zhangfx@lemote.com -- * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology -- * Author: Zhangjin Wu, wuzj@lemote.com -+ * Copyright (C) 2009 Lemote, Inc. -+ * Author: Zhangjin Wu, wuzhangjin@gmail.com - */ - #include - #include -@@ -21,22 +21,39 @@ - /* do preparation for reboot */ - mach_prepare_reboot(); +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 ++ * Copyright (C) 2009 Wu Zhangjin ++ * ++ * 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 ++#include ++#include ++#include ++ ++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 +@@ -14,7 +14,7 @@ + #include + #include -- /* reboot via jumping to boot base address */ -+ /* reboot via jumping to boot base address -+ * -+ * ".set noat" and ".set at" are used to ensure the address not -+ * polluted by the binutils patch. the patch will try to change the -+ * jumping address to "addr & 0xcfffffff" via the at register, which is -+ * really wrong for 0xbfc00000: -+ */ +-#include "ec_kb3310b.h" ++#include + + static DEFINE_SPINLOCK(index_access_lock); + static DEFINE_SPINLOCK(port_access_lock); +@@ -78,12 +78,9 @@ + spin_unlock_irqrestore(&port_access_lock, flags); + + if (timeout <= 0) { +- printk(KERN_ERR "%s: deadable error : timeout...\n", __func__); ++ pr_err("%s: deadable error : timeout...\n", __func__); + ret = -EINVAL; +- } else +- printk(KERN_INFO +- "(%x/%d)ec issued command %d status : 0x%x\n", +- timeout, EC_CMD_TIMEOUT - timeout, cmd, status); ++ } + + return ret; + } +@@ -118,8 +115,7 @@ + udelay(EC_REG_DELAY); + } + if (timeout <= 0) { +- pr_info("%s: get event number timeout.\n", __func__); +- ++ pr_err("%s: get event number timeout.\n", __func__); + 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 +@@ -1,188 +0,0 @@ +-/* +- * KB3310B Embedded Controller +- * +- * Copyright (C) 2008 Lemote Inc. +- * Author: liujl , 2008-03-14 +- * +- * 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 _EC_KB3310B_H +-#define _EC_KB3310B_H +- +-extern unsigned char ec_read(unsigned short addr); +-extern void ec_write(unsigned short addr, unsigned char val); +-extern int ec_query_seq(unsigned char cmd); +-extern int ec_query_event_num(void); +-extern int ec_get_event_num(void); +- +-typedef int (*sci_handler) (int status); +-extern sci_handler yeeloong_report_lid_status; +- +-#define SCI_IRQ_NUM 0x0A +- +-/* +- * The following registers are determined by the EC index configuration. +- * 1, fill the PORT_HIGH as EC register high part. +- * 2, fill the PORT_LOW as EC register low part. +- * 3, fill the PORT_DATA as EC register write data or get the data from it. +- */ +-#define EC_IO_PORT_HIGH 0x0381 +-#define EC_IO_PORT_LOW 0x0382 +-#define EC_IO_PORT_DATA 0x0383 +- +-/* +- * EC delay time is 500us for register and status access +- */ +-#define EC_REG_DELAY 500 /* unit : us */ +-#define EC_CMD_TIMEOUT 0x1000 +- +-/* +- * EC access port for SCI communication +- */ +-#define EC_CMD_PORT 0x66 +-#define EC_STS_PORT 0x66 +-#define EC_DAT_PORT 0x62 +-#define CMD_INIT_IDLE_MODE 0xdd +-#define CMD_EXIT_IDLE_MODE 0xdf +-#define CMD_INIT_RESET_MODE 0xd8 +-#define CMD_REBOOT_SYSTEM 0x8c +-#define CMD_GET_EVENT_NUM 0x84 +-#define CMD_PROGRAM_PIECE 0xda +- +-/* temperature & fan registers */ +-#define REG_TEMPERATURE_VALUE 0xF458 +-#define REG_FAN_AUTO_MAN_SWITCH 0xF459 +-#define BIT_FAN_AUTO 0 +-#define BIT_FAN_MANUAL 1 +-#define REG_FAN_CONTROL 0xF4D2 +-#define BIT_FAN_CONTROL_ON (1 << 0) +-#define BIT_FAN_CONTROL_OFF (0 << 0) +-#define REG_FAN_STATUS 0xF4DA +-#define BIT_FAN_STATUS_ON (1 << 0) +-#define BIT_FAN_STATUS_OFF (0 << 0) +-#define REG_FAN_SPEED_HIGH 0xFE22 +-#define REG_FAN_SPEED_LOW 0xFE23 +-#define REG_FAN_SPEED_LEVEL 0xF4CC +-/* fan speed divider */ +-#define FAN_SPEED_DIVIDER 480000 /* (60*1000*1000/62.5/2)*/ +- +-/* battery registers */ +-#define REG_BAT_DESIGN_CAP_HIGH 0xF77D +-#define REG_BAT_DESIGN_CAP_LOW 0xF77E +-#define REG_BAT_FULLCHG_CAP_HIGH 0xF780 +-#define REG_BAT_FULLCHG_CAP_LOW 0xF781 +-#define REG_BAT_DESIGN_VOL_HIGH 0xF782 +-#define REG_BAT_DESIGN_VOL_LOW 0xF783 +-#define REG_BAT_CURRENT_HIGH 0xF784 +-#define REG_BAT_CURRENT_LOW 0xF785 +-#define REG_BAT_VOLTAGE_HIGH 0xF786 +-#define REG_BAT_VOLTAGE_LOW 0xF787 +-#define REG_BAT_TEMPERATURE_HIGH 0xF788 +-#define REG_BAT_TEMPERATURE_LOW 0xF789 +-#define REG_BAT_RELATIVE_CAP_HIGH 0xF492 +-#define REG_BAT_RELATIVE_CAP_LOW 0xF493 +-#define REG_BAT_VENDOR 0xF4C4 +-#define FLAG_BAT_VENDOR_SANYO 0x01 +-#define FLAG_BAT_VENDOR_SIMPLO 0x02 +-#define REG_BAT_CELL_COUNT 0xF4C6 +-#define FLAG_BAT_CELL_3S1P 0x03 +-#define FLAG_BAT_CELL_3S2P 0x06 +-#define REG_BAT_CHARGE 0xF4A2 +-#define FLAG_BAT_CHARGE_DISCHARGE 0x01 +-#define FLAG_BAT_CHARGE_CHARGE 0x02 +-#define FLAG_BAT_CHARGE_ACPOWER 0x00 +-#define REG_BAT_STATUS 0xF4B0 +-#define BIT_BAT_STATUS_LOW (1 << 5) +-#define BIT_BAT_STATUS_DESTROY (1 << 2) +-#define BIT_BAT_STATUS_FULL (1 << 1) +-#define BIT_BAT_STATUS_IN (1 << 0) +-#define REG_BAT_CHARGE_STATUS 0xF4B1 +-#define BIT_BAT_CHARGE_STATUS_OVERTEMP (1 << 2) +-#define BIT_BAT_CHARGE_STATUS_PRECHG (1 << 1) +-#define REG_BAT_STATE 0xF482 +-#define BIT_BAT_STATE_CHARGING (1 << 1) +-#define BIT_BAT_STATE_DISCHARGING (1 << 0) +-#define REG_BAT_POWER 0xF440 +-#define BIT_BAT_POWER_S3 (1 << 2) +-#define BIT_BAT_POWER_ON (1 << 1) +-#define BIT_BAT_POWER_ACIN (1 << 0) +- +-/* other registers */ +-/* Audio: rd/wr */ +-#define REG_AUDIO_VOLUME 0xF46C +-#define REG_AUDIO_MUTE 0xF4E7 +-#define REG_AUDIO_BEEP 0xF4D0 +-/* USB port power or not: rd/wr */ +-#define REG_USB0_FLAG 0xF461 +-#define REG_USB1_FLAG 0xF462 +-#define REG_USB2_FLAG 0xF463 +-#define BIT_USB_FLAG_ON 1 +-#define BIT_USB_FLAG_OFF 0 +-/* LID */ +-#define REG_LID_DETECT 0xF4BD +-#define BIT_LID_DETECT_ON 1 +-#define BIT_LID_DETECT_OFF 0 +-/* CRT */ +-#define REG_CRT_DETECT 0xF4AD +-#define BIT_CRT_DETECT_PLUG 1 +-#define BIT_CRT_DETECT_UNPLUG 0 +-/* LCD backlight brightness adjust: 9 levels */ +-#define REG_DISPLAY_BRIGHTNESS 0xF4F5 +-/* Black screen Status */ +-#define BIT_DISPLAY_LCD_ON 1 +-#define BIT_DISPLAY_LCD_OFF 0 +-/* LCD backlight control: off/restore */ +-#define REG_BACKLIGHT_CTRL 0xF7BD +-#define BIT_BACKLIGHT_ON 1 +-#define BIT_BACKLIGHT_OFF 0 +-/* Reset the machine auto-clear: rd/wr */ +-#define REG_RESET 0xF4EC +-#define BIT_RESET_ON 1 +-/* Light the led: rd/wr */ +-#define REG_LED 0xF4C8 +-#define BIT_LED_RED_POWER (1 << 0) +-#define BIT_LED_ORANGE_POWER (1 << 1) +-#define BIT_LED_GREEN_CHARGE (1 << 2) +-#define BIT_LED_RED_CHARGE (1 << 3) +-#define BIT_LED_NUMLOCK (1 << 4) +-/* Test led mode, all led on/off */ +-#define REG_LED_TEST 0xF4C2 +-#define BIT_LED_TEST_IN 1 +-#define BIT_LED_TEST_OUT 0 +-/* Camera on/off */ +-#define REG_CAMERA_STATUS 0xF46A +-#define BIT_CAMERA_STATUS_ON 1 +-#define BIT_CAMERA_STATUS_OFF 0 +-#define REG_CAMERA_CONTROL 0xF7B7 +-#define BIT_CAMERA_CONTROL_OFF 0 +-#define BIT_CAMERA_CONTROL_ON 1 +-/* Wlan Status */ +-#define REG_WLAN 0xF4FA +-#define BIT_WLAN_ON 1 +-#define BIT_WLAN_OFF 0 +-#define REG_DISPLAY_LCD 0xF79F +- +-/* SCI Event Number from EC */ +-enum { +- EVENT_LID = 0x23, /* LID open/close */ +- EVENT_DISPLAY_TOGGLE, /* Fn+F3 for display switch */ +- EVENT_SLEEP, /* Fn+F1 for entering sleep mode */ +- EVENT_OVERTEMP, /* Over-temperature happened */ +- EVENT_CRT_DETECT, /* CRT is connected */ +- EVENT_CAMERA, /* Camera on/off */ +- EVENT_USB_OC2, /* USB2 Over Current occurred */ +- EVENT_USB_OC0, /* USB0 Over Current occurred */ +- EVENT_BLACK_SCREEN, /* Turn on/off backlight */ +- EVENT_AUDIO_MUTE, /* Mute on/off */ +- EVENT_DISPLAY_BRIGHTNESS,/* LCD backlight brightness adjust */ +- EVENT_AC_BAT, /* AC & Battery relative issue */ +- EVENT_AUDIO_VOLUME, /* Volume adjust */ +- EVENT_WLAN, /* Wlan on/off */ +- EVENT_END +-}; +- +-#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 +@@ -2,7 +2,7 @@ + # Makefile for lemote loongson2f family machines + # + +-obj-y += machtype.o irq.o reset.o ec_kb3310b.o ++obj-y += machtype.o irq.o reset.o ec_kb3310b.o platform.o + + # + # 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 +@@ -0,0 +1,48 @@ ++/* ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: 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 ++#include ++ ++#include ++ ++static struct platform_device yeeloong_pdev = { ++ .name = "yeeloong_laptop", ++ .id = -1, ++}; ++ ++static struct platform_device lynloong_pdev = { ++ .name = "lynloong_pc", ++ .id = -1, ++}; ++ ++static int __init lemote2f_platform_init(void) ++{ ++ struct platform_device *pdev = NULL; ++ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_YL2F89: ++ pdev = &yeeloong_pdev; ++ break; ++ case MACH_LEMOTE_LL2F: ++ pdev = &lynloong_pdev; ++ break; ++ default: ++ break; ++ ++ } ++ ++ if (pdev != NULL) ++ return platform_device_register(pdev); ++ ++ return -ENODEV; ++} ++ ++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 +@@ -23,7 +23,7 @@ + #include + + #include +-#include "ec_kb3310b.h" ++#include + + #define I8042_KBD_IRQ 1 + #define I8042_CTR_KBDINT 0x01 +@@ -100,7 +100,7 @@ + if (irq < 0) + return 0; + +- printk(KERN_INFO "%s: irq = %d\n", __func__, irq); ++ pr_info("%s: irq = %d\n", __func__, irq); + + 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 +@@ -20,7 +20,7 @@ + #include + + #include +-#include "ec_kb3310b.h" ++#include + + 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 +@@ -375,3 +375,16 @@ + } + + EXPORT_SYMBOL(dma_cache_sync); ++ ++int __weak dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma, ++ void *cpu_addr, dma_addr_t handle, size_t size) ++{ ++ struct page *pg; ++ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); ++ cpu_addr = (void *)dma_addr_to_virt(dev, handle); ++ pg = virt_to_page(cpu_addr); ++ return remap_pfn_range(vma, vma->vm_start, ++ page_to_pfn(pg) + vma->vm_pgoff, ++ 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 + #include +@@ -17,24 +16,18 @@ + #include /* 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 +@@ -27,6 +27,8 @@ + #include + #include + ++#include ++ + void SELECT_MASK(ide_drive_t *drive, int mask) + { + const struct ide_port_ops *port_ops = drive->hwif->port_ops; +@@ -300,6 +302,9 @@ + { + const char **list, *m = (char *)&drive->id[ATA_ID_PROD]; + ++ if (mips_machtype != MACH_LEMOTE_YL2F89) ++ return; ++ + 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. + ++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 ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* For MII specifc registers, titan_mdio.h should be included */ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#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 "); ++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 ++#include ++#include ++#include ++ ++/* ++ * 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. ++ * ++ */ + -+ __asm__ __volatile__(".set noat\n"); - ((void (*)(void))ioremap_nocache(LOONGSON_BOOT_BASE, 4)) (); -+ __asm__ __volatile__(".set at\n"); - } - --static void loongson_halt(void) -+static void loongson_poweroff(void) - { - mach_prepare_shutdown(); -- while (1) -- ; -+ unreachable(); -+} ++#include "titan_mdio.h" ++ ++#define MDIO_DEBUG + -+static void loongson_halt(void) ++/* ++ * 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) +{ -+ pr_notice("** You can safely turn off the power ** !\n"); -+ while (1) { -+ if (cpu_wait) -+ cpu_wait(); ++ 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; + } - } - - static int __init mips_reboot_setup(void) - { - _machine_restart = loongson_restart; - _machine_halt = loongson_halt; -- pm_power_off = loongson_halt; -+ pm_power_off = loongson_poweroff; - - return 0; - } -diff -Nur linux-2.6.33/arch/mips/loongson/common/rtc.c linux-lemote/arch/mips/loongson/common/rtc.c ---- linux-2.6.33/arch/mips/loongson/common/rtc.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/rtc.c 2010-03-06 16:43:01.000000000 +0100 -@@ -0,0 +1,43 @@ ++ ++ return TITAN_GE_MDIO_ERROR; ++} ++ ++ +/* -+ * Registration of Loongson RTC platform device. -+ * -+ * Copyright (C) 2007 Yoichi Yuasa -+ * Copyright (C) 2009 Wu Zhangjin -+ * -+ * 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. ++ * Initialize and configure the MDIO + */ ++int titan_ge_mdio_setup(titan_ge_mdio_config *titan_mdio) ++{ ++ unsigned long val; + -+#include -+#include -+#include -+#include ++ /* 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); + -+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, -+ }, -+}; ++ /* 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); + -+static struct platform_device rtc_cmos_device = { -+ .name = "rtc_cmos", -+ .id = -1, -+ .num_resources = ARRAY_SIZE(rtc_cmos_resource), -+ .resource = rtc_cmos_resource -+}; ++ /* 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); + -+static __init int rtc_cmos_init(void) ++ /* 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) +{ -+ return platform_device_register(&rtc_cmos_device); ++ 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; +} + -+device_initcall(rtc_cmos_init); -diff -Nur linux-2.6.33/arch/mips/loongson/common/serial.c linux-lemote/arch/mips/loongson/common/serial.c ---- linux-2.6.33/arch/mips/loongson/common/serial.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/serial.c 2010-03-06 16:43:01.000000000 +0100 -@@ -7,7 +7,7 @@ - * - * Copyright (C) 2009 Lemote, Inc. - * Author: Yan hua (yanhua@lemote.com) -- * Author: Wu Zhangjin (wuzj@lemote.com) -+ * Author: Wu Zhangjin (wuzhangjin@gmail.com) - */ - - #include -diff -Nur linux-2.6.33/arch/mips/loongson/common/time.c linux-lemote/arch/mips/loongson/common/time.c ---- linux-2.6.33/arch/mips/loongson/common/time.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/time.c 2010-03-06 16:43:01.000000000 +0100 -@@ -2,8 +2,8 @@ - * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology - * Author: Fuxin Zhang, zhangfx@lemote.com - * -- * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Copyright (C) 2009 Lemote Inc. -+ * Author: 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 -diff -Nur linux-2.6.33/arch/mips/loongson/common/uart_base.c linux-lemote/arch/mips/loongson/common/uart_base.c ---- linux-2.6.33/arch/mips/loongson/common/uart_base.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/uart_base.c 2010-03-06 16:43:01.000000000 +0100 -@@ -1,6 +1,6 @@ - /* - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: 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 -diff -Nur linux-2.6.33/arch/mips/loongson/fuloong-2e/reset.c linux-lemote/arch/mips/loongson/fuloong-2e/reset.c ---- linux-2.6.33/arch/mips/loongson/fuloong-2e/reset.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/fuloong-2e/reset.c 2010-03-06 16:43:01.000000000 +0100 -@@ -1,8 +1,8 @@ - /* Board-specific reboot/shutdown routines - * Copyright (c) 2009 Philippe Vachon - * -- * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Copyright (C) 2009 Lemote Inc. -+ * Author: 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 -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/ec_kb3310b.c linux-lemote/arch/mips/loongson/lemote-2f/ec_kb3310b.c ---- linux-2.6.33/arch/mips/loongson/lemote-2f/ec_kb3310b.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/ec_kb3310b.c 2010-03-06 16:43:01.000000000 +0100 -@@ -14,7 +14,7 @@ - #include - #include - --#include "ec_kb3310b.h" -+#include - - static DEFINE_SPINLOCK(index_access_lock); - static DEFINE_SPINLOCK(port_access_lock); -@@ -76,12 +76,9 @@ - } - - if (timeout <= 0) { -- printk(KERN_ERR "%s: deadable error : timeout...\n", __func__); -+ pr_err("%s: deadable error : timeout...\n", __func__); - ret = -EINVAL; -- } else -- printk(KERN_INFO -- "(%x/%d)ec issued command %d status : 0x%x\n", -- timeout, EC_CMD_TIMEOUT - timeout, cmd, status); -+ } - - spin_unlock_irqrestore(&port_access_lock, flags); - -@@ -118,8 +115,7 @@ - udelay(EC_REG_DELAY); - } - if (timeout <= 0) { -- pr_info("%s: get event number timeout.\n", __func__); -- -+ pr_err("%s: get event number timeout.\n", __func__); - return -EINVAL; - } - value = inb(EC_DAT_PORT); -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/ec_kb3310b.h linux-lemote/arch/mips/loongson/lemote-2f/ec_kb3310b.h ---- linux-2.6.33/arch/mips/loongson/lemote-2f/ec_kb3310b.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/ec_kb3310b.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,188 +0,0 @@ --/* -- * KB3310B Embedded Controller -- * -- * Copyright (C) 2008 Lemote Inc. -- * Author: liujl , 2008-03-14 -- * -- * 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 _EC_KB3310B_H --#define _EC_KB3310B_H -- --extern unsigned char ec_read(unsigned short addr); --extern void ec_write(unsigned short addr, unsigned char val); --extern int ec_query_seq(unsigned char cmd); --extern int ec_query_event_num(void); --extern int ec_get_event_num(void); -- --typedef int (*sci_handler) (int status); --extern sci_handler yeeloong_report_lid_status; -- --#define SCI_IRQ_NUM 0x0A -- --/* -- * The following registers are determined by the EC index configuration. -- * 1, fill the PORT_HIGH as EC register high part. -- * 2, fill the PORT_LOW as EC register low part. -- * 3, fill the PORT_DATA as EC register write data or get the data from it. -- */ --#define EC_IO_PORT_HIGH 0x0381 --#define EC_IO_PORT_LOW 0x0382 --#define EC_IO_PORT_DATA 0x0383 -- --/* -- * EC delay time is 500us for register and status access -- */ --#define EC_REG_DELAY 500 /* unit : us */ --#define EC_CMD_TIMEOUT 0x1000 -- --/* -- * EC access port for SCI communication -- */ --#define EC_CMD_PORT 0x66 --#define EC_STS_PORT 0x66 --#define EC_DAT_PORT 0x62 --#define CMD_INIT_IDLE_MODE 0xdd --#define CMD_EXIT_IDLE_MODE 0xdf --#define CMD_INIT_RESET_MODE 0xd8 --#define CMD_REBOOT_SYSTEM 0x8c --#define CMD_GET_EVENT_NUM 0x84 --#define CMD_PROGRAM_PIECE 0xda -- --/* temperature & fan registers */ --#define REG_TEMPERATURE_VALUE 0xF458 --#define REG_FAN_AUTO_MAN_SWITCH 0xF459 --#define BIT_FAN_AUTO 0 --#define BIT_FAN_MANUAL 1 --#define REG_FAN_CONTROL 0xF4D2 --#define BIT_FAN_CONTROL_ON (1 << 0) --#define BIT_FAN_CONTROL_OFF (0 << 0) --#define REG_FAN_STATUS 0xF4DA --#define BIT_FAN_STATUS_ON (1 << 0) --#define BIT_FAN_STATUS_OFF (0 << 0) --#define REG_FAN_SPEED_HIGH 0xFE22 --#define REG_FAN_SPEED_LOW 0xFE23 --#define REG_FAN_SPEED_LEVEL 0xF4CC --/* fan speed divider */ --#define FAN_SPEED_DIVIDER 480000 /* (60*1000*1000/62.5/2)*/ -- --/* battery registers */ --#define REG_BAT_DESIGN_CAP_HIGH 0xF77D --#define REG_BAT_DESIGN_CAP_LOW 0xF77E --#define REG_BAT_FULLCHG_CAP_HIGH 0xF780 --#define REG_BAT_FULLCHG_CAP_LOW 0xF781 --#define REG_BAT_DESIGN_VOL_HIGH 0xF782 --#define REG_BAT_DESIGN_VOL_LOW 0xF783 --#define REG_BAT_CURRENT_HIGH 0xF784 --#define REG_BAT_CURRENT_LOW 0xF785 --#define REG_BAT_VOLTAGE_HIGH 0xF786 --#define REG_BAT_VOLTAGE_LOW 0xF787 --#define REG_BAT_TEMPERATURE_HIGH 0xF788 --#define REG_BAT_TEMPERATURE_LOW 0xF789 --#define REG_BAT_RELATIVE_CAP_HIGH 0xF492 --#define REG_BAT_RELATIVE_CAP_LOW 0xF493 --#define REG_BAT_VENDOR 0xF4C4 --#define FLAG_BAT_VENDOR_SANYO 0x01 --#define FLAG_BAT_VENDOR_SIMPLO 0x02 --#define REG_BAT_CELL_COUNT 0xF4C6 --#define FLAG_BAT_CELL_3S1P 0x03 --#define FLAG_BAT_CELL_3S2P 0x06 --#define REG_BAT_CHARGE 0xF4A2 --#define FLAG_BAT_CHARGE_DISCHARGE 0x01 --#define FLAG_BAT_CHARGE_CHARGE 0x02 --#define FLAG_BAT_CHARGE_ACPOWER 0x00 --#define REG_BAT_STATUS 0xF4B0 --#define BIT_BAT_STATUS_LOW (1 << 5) --#define BIT_BAT_STATUS_DESTROY (1 << 2) --#define BIT_BAT_STATUS_FULL (1 << 1) --#define BIT_BAT_STATUS_IN (1 << 0) --#define REG_BAT_CHARGE_STATUS 0xF4B1 --#define BIT_BAT_CHARGE_STATUS_OVERTEMP (1 << 2) --#define BIT_BAT_CHARGE_STATUS_PRECHG (1 << 1) --#define REG_BAT_STATE 0xF482 --#define BIT_BAT_STATE_CHARGING (1 << 1) --#define BIT_BAT_STATE_DISCHARGING (1 << 0) --#define REG_BAT_POWER 0xF440 --#define BIT_BAT_POWER_S3 (1 << 2) --#define BIT_BAT_POWER_ON (1 << 1) --#define BIT_BAT_POWER_ACIN (1 << 0) -- --/* other registers */ --/* Audio: rd/wr */ --#define REG_AUDIO_VOLUME 0xF46C --#define REG_AUDIO_MUTE 0xF4E7 --#define REG_AUDIO_BEEP 0xF4D0 --/* USB port power or not: rd/wr */ --#define REG_USB0_FLAG 0xF461 --#define REG_USB1_FLAG 0xF462 --#define REG_USB2_FLAG 0xF463 --#define BIT_USB_FLAG_ON 1 --#define BIT_USB_FLAG_OFF 0 --/* LID */ --#define REG_LID_DETECT 0xF4BD --#define BIT_LID_DETECT_ON 1 --#define BIT_LID_DETECT_OFF 0 --/* CRT */ --#define REG_CRT_DETECT 0xF4AD --#define BIT_CRT_DETECT_PLUG 1 --#define BIT_CRT_DETECT_UNPLUG 0 --/* LCD backlight brightness adjust: 9 levels */ --#define REG_DISPLAY_BRIGHTNESS 0xF4F5 --/* Black screen Status */ --#define BIT_DISPLAY_LCD_ON 1 --#define BIT_DISPLAY_LCD_OFF 0 --/* LCD backlight control: off/restore */ --#define REG_BACKLIGHT_CTRL 0xF7BD --#define BIT_BACKLIGHT_ON 1 --#define BIT_BACKLIGHT_OFF 0 --/* Reset the machine auto-clear: rd/wr */ --#define REG_RESET 0xF4EC --#define BIT_RESET_ON 1 --/* Light the led: rd/wr */ --#define REG_LED 0xF4C8 --#define BIT_LED_RED_POWER (1 << 0) --#define BIT_LED_ORANGE_POWER (1 << 1) --#define BIT_LED_GREEN_CHARGE (1 << 2) --#define BIT_LED_RED_CHARGE (1 << 3) --#define BIT_LED_NUMLOCK (1 << 4) --/* Test led mode, all led on/off */ --#define REG_LED_TEST 0xF4C2 --#define BIT_LED_TEST_IN 1 --#define BIT_LED_TEST_OUT 0 --/* Camera on/off */ --#define REG_CAMERA_STATUS 0xF46A --#define BIT_CAMERA_STATUS_ON 1 --#define BIT_CAMERA_STATUS_OFF 0 --#define REG_CAMERA_CONTROL 0xF7B7 --#define BIT_CAMERA_CONTROL_OFF 0 --#define BIT_CAMERA_CONTROL_ON 1 --/* Wlan Status */ --#define REG_WLAN 0xF4FA --#define BIT_WLAN_ON 1 --#define BIT_WLAN_OFF 0 --#define REG_DISPLAY_LCD 0xF79F -- --/* SCI Event Number from EC */ --enum { -- EVENT_LID = 0x23, /* LID open/close */ -- EVENT_DISPLAY_TOGGLE, /* Fn+F3 for display switch */ -- EVENT_SLEEP, /* Fn+F1 for entering sleep mode */ -- EVENT_OVERTEMP, /* Over-temperature happened */ -- EVENT_CRT_DETECT, /* CRT is connected */ -- EVENT_CAMERA, /* Camera on/off */ -- EVENT_USB_OC2, /* USB2 Over Current occurred */ -- EVENT_USB_OC0, /* USB0 Over Current occurred */ -- EVENT_BLACK_SCREEN, /* Turn on/off backlight */ -- EVENT_AUDIO_MUTE, /* Mute on/off */ -- EVENT_DISPLAY_BRIGHTNESS,/* LCD backlight brightness adjust */ -- EVENT_AC_BAT, /* AC & Battery relative issue */ -- EVENT_AUDIO_VOLUME, /* Volume adjust */ -- EVENT_WLAN, /* Wlan on/off */ -- EVENT_END --}; -- --#endif /* !_EC_KB3310B_H */ -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/machtype.c linux-lemote/arch/mips/loongson/lemote-2f/machtype.c ---- linux-2.6.33/arch/mips/loongson/lemote-2f/machtype.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/machtype.c 2010-03-06 16:43:01.000000000 +0100 -@@ -0,0 +1,45 @@ +/* -+ * Copyright (C) 2009 Lemote Inc. -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * Read the MDIO register. This is what the individual parametes mean: + * -+ * 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. ++ * dev_addr : PHY ID ++ * reg_addr : register offset ++ * ++ * See the spec for the Titan MAC. We operate in the Direct Mode. + */ -+#include + -+#include ++#define MAX_RETRIES 2 + -+void __init mach_prom_init_machtype(void) ++int titan_ge_mdio_read(int dev_addr, int reg_addr, unsigned int *pdata) +{ -+ /* We share the same kernel image file among Lemote 2F family -+ * of machines, and provide the machtype= kernel command line -+ * to users to indicate their machine, this command line will -+ * be passed by the latest PMON automatically. and fortunately, -+ * up to now, we can get the machine type from the PMON_VER= -+ * commandline directly except the NAS machine, In the old -+ * machines, this will help the users a lot. -+ * -+ * If no "machtype=" passed, get machine type from "PMON_VER=". -+ * PMON_VER=LM8089 Lemote 8.9'' netbook -+ * LM8101 Lemote 10.1'' netbook -+ * (The above two netbooks have the same kernel support) -+ * LM6XXX Lemote FuLoong(2F) box series -+ * LM9XXX Lemote LynLoong PC series -+ */ -+ if (strstr(arcs_cmdline, "PMON_VER=LM")) { -+ if (strstr(arcs_cmdline, "PMON_VER=LM8")) -+ mips_machtype = MACH_LEMOTE_YL2F89; -+ else if (strstr(arcs_cmdline, "PMON_VER=LM6")) -+ mips_machtype = MACH_LEMOTE_FL2F; -+ else if (strstr(arcs_cmdline, "PMON_VER=LM9")) -+ mips_machtype = MACH_LEMOTE_LL2F; -+ else -+ mips_machtype = MACH_LEMOTE_NAS; ++ 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); + -+ strcat(arcs_cmdline, " machtype="); -+ strcat(arcs_cmdline, get_system_type()); -+ strcat(arcs_cmdline, " "); ++ udelay(30); ++ ++ if (val & 0x2) { ++ if (retries == MAX_RETRIES) ++ return TITAN_GE_MDIO_ERROR; ++ else { ++ retries++; ++ goto again; ++ } + } ++ ++ return TITAN_GE_MDIO_GOOD; +} -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/Makefile linux-lemote/arch/mips/loongson/lemote-2f/Makefile ---- linux-2.6.33/arch/mips/loongson/lemote-2f/Makefile 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/Makefile 2010-03-06 16:43:01.000000000 +0100 -@@ -2,7 +2,7 @@ - # Makefile for lemote loongson2f family machines - # - --obj-y += irq.o reset.o ec_kb3310b.o -+obj-y += machtype.o irq.o reset.o ec_kb3310b.o platform.o - - # - # Suspend Support -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/platform.c linux-lemote/arch/mips/loongson/lemote-2f/platform.c ---- linux-2.6.33/arch/mips/loongson/lemote-2f/platform.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/platform.c 2010-03-06 16:43:01.000000000 +0100 -@@ -0,0 +1,48 @@ ++ +/* -+ * Copyright (C) 2009 Lemote Inc. -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * Write to the MDIO register ++ * ++ * dev_addr : PHY ID ++ * reg_addr : register that needs to be written to + * -+ * 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. + */ ++int titan_ge_mdio_write(int dev_addr, int reg_addr, unsigned int data) ++{ ++ volatile unsigned long val; + -+#include -+#include ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; + -+#include ++ /* 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); + -+static struct platform_device yeeloong_pdev = { -+ .name = "yeeloong_laptop", -+ .id = -1, -+}; ++ udelay(30); + -+static struct platform_device lynloong_pdev = { -+ .name = "lynloong_pc", -+ .id = -1, -+}; ++ /* Setup the data to write */ ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DATA, data); + -+static int __init lemote2f_platform_init(void) -+{ -+ struct platform_device *pdev = NULL; ++ udelay(30); + -+ switch (mips_machtype) { -+ case MACH_LEMOTE_YL2F89: -+ pdev = &yeeloong_pdev; -+ break; -+ case MACH_LEMOTE_LL2F: -+ pdev = &lynloong_pdev; -+ break; -+ default: -+ break; ++ /* 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 (pdev != NULL) -+ return platform_device_register(pdev); ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; + -+ return -ENODEV; ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS); ++ if (val & 0x2) ++ return TITAN_GE_MDIO_ERROR; ++ ++ return TITAN_GE_MDIO_GOOD; +} + -+arch_initcall(lemote2f_platform_init); -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/pm.c linux-lemote/arch/mips/loongson/lemote-2f/pm.c ---- linux-2.6.33/arch/mips/loongson/lemote-2f/pm.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/pm.c 2010-03-06 16:43:01.000000000 +0100 -@@ -2,7 +2,7 @@ - * Lemote loongson2f family machines' specific suspend support - * - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - * - * 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 -@@ -23,7 +23,7 @@ - #include - - #include --#include "ec_kb3310b.h" -+#include - - #define I8042_KBD_IRQ 1 - #define I8042_CTR_KBDINT 0x01 -@@ -100,7 +100,7 @@ - if (irq < 0) - return 0; - -- printk(KERN_INFO "%s: irq = %d\n", __func__, irq); -+ pr_info("%s: irq = %d\n", __func__, irq); - - if (irq == I8042_KBD_IRQ) - return 1; -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/reset.c linux-lemote/arch/mips/loongson/lemote-2f/reset.c ---- linux-2.6.33/arch/mips/loongson/lemote-2f/reset.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/reset.c 2010-03-06 16:43:01.000000000 +0100 -@@ -3,7 +3,7 @@ - * Copyright (c) 2009 Philippe Vachon - * - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: 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 -@@ -20,7 +20,7 @@ - #include - - #include --#include "ec_kb3310b.h" -+#include - - static void reset_cpu(void) - { -@@ -32,6 +32,7 @@ - } - - /* reset support for fuloong2f */ -+DEFINE_SPINLOCK(msr_lock); - - static void fl2f_reboot(void) - { -@@ -46,9 +47,13 @@ - */ - { - u32 hi, lo; -+ unsigned long flags; -+ -+ spin_lock_irqsave(&msr_lock, flags); - _rdmsr(DIVIL_MSR_REG(DIVIL_SOFT_RESET), &hi, &lo); - lo |= 0x00000001; - _wrmsr(DIVIL_MSR_REG(DIVIL_SOFT_RESET), hi, lo); -+ spin_unlock_irqrestore(&msr_lock, flags); - } - } - -@@ -56,9 +61,13 @@ - { - u32 hi, lo, val; - int gpio_base; -+ unsigned long flags; - - /* get gpio base */ -+ spin_lock_irqsave(&msr_lock, flags); - _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &lo); -+ spin_unlock_irqrestore(&msr_lock, flags); +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 + - gpio_base = lo & 0xff00; - - /* make cs5536 gpio13 output enable */ -diff -Nur linux-2.6.33/arch/mips/Makefile linux-lemote/arch/mips/Makefile ---- linux-2.6.33/arch/mips/Makefile 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/Makefile 2010-03-06 16:42:59.000000000 +0100 -@@ -135,7 +135,10 @@ - cflags-$(CONFIG_CPU_LOONGSON2E) += \ - $(call cc-option,-march=loongson2e,-march=r4600) - cflags-$(CONFIG_CPU_LOONGSON2F) += \ -- $(call cc-option,-march=loongson2f,-march=r4600) -+ $(call cc-option,-march=loongson2f,-march=r4600) \ -+ $(call as-option,-Wa$(comma)-mfix-ls2f-kernel,) \ -+ $(call as-option,-Wa$(comma)-mfix-loongson2f-nop,) \ -+ $(call as-option,-Wa$(comma)-mfix-loongson2f-jump,) - - cflags-$(CONFIG_CPU_MIPS32_R1) += $(call cc-option,-march=mips32,-mips32 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \ - -Wa,-mips32 -Wa,--trap -@@ -332,11 +335,11 @@ - # - # Loongson family - # --core-$(CONFIG_MACH_LOONGSON) +=arch/mips/loongson/ -+core-$(CONFIG_MACH_LOONGSON) += arch/mips/loongson/ - cflags-$(CONFIG_MACH_LOONGSON) += -I$(srctree)/arch/mips/include/asm/mach-loongson \ - -mno-branch-likely --load-$(CONFIG_LEMOTE_FULOONG2E) +=0xffffffff80100000 --load-$(CONFIG_LEMOTE_MACH2F) +=0xffffffff80200000 -+load-$(CONFIG_LEMOTE_FULOONG2E) += 0xffffffff80100000 -+load-$(CONFIG_LEMOTE_MACH2F) += 0xffffffff80200000 - - # - # MIPS Malta board -diff -Nur linux-2.6.33/arch/mips/oprofile/common.c linux-lemote/arch/mips/oprofile/common.c ---- linux-2.6.33/arch/mips/oprofile/common.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/oprofile/common.c 2010-03-06 16:43:01.000000000 +0100 -@@ -14,9 +14,9 @@ - - #include "op_impl.h" - --extern struct op_mips_model op_model_mipsxx_ops __attribute__((weak)); --extern struct op_mips_model op_model_rm9000_ops __attribute__((weak)); --extern struct op_mips_model op_model_loongson2_ops __attribute__((weak)); -+extern struct op_mips_model op_model_mipsxx_ops __weak; -+extern struct op_mips_model op_model_rm9000_ops __weak; -+extern struct op_mips_model op_model_loongson2_ops __weak; - - static struct op_mips_model *model; - -diff -Nur linux-2.6.33/arch/mips/oprofile/op_model_loongson2.c linux-lemote/arch/mips/oprofile/op_model_loongson2.c ---- linux-2.6.33/arch/mips/oprofile/op_model_loongson2.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/oprofile/op_model_loongson2.c 2010-03-06 16:43:01.000000000 +0100 -@@ -3,7 +3,7 @@ - * - * Copyright (C) 2009 Lemote Inc. - * Author: Yanhua -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - * - * 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 -diff -Nur linux-2.6.33/arch/mips/pci/fixup-lemote2f.c linux-lemote/arch/mips/pci/fixup-lemote2f.c ---- linux-2.6.33/arch/mips/pci/fixup-lemote2f.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/pci/fixup-lemote2f.c 2010-03-06 16:43:01.000000000 +0100 -@@ -131,7 +131,7 @@ - - /* Serial short detect enable */ - _rdmsr(USB_MSR_REG(USB_CONFIG), &hi, &lo); -- _wrmsr(USB_MSR_REG(USB_CONFIG), (1 << 1) | (1 << 2) | (1 << 3), lo); -+ _wrmsr(USB_MSR_REG(USB_CONFIG), (1 << 1) | (1 << 3), lo); - - /* setting the USB2.0 micro frame length */ - pci_write_config_dword(pdev, PCI_EHCI_FLADJ_REG, 0x2000); -diff -Nur linux-2.6.33/arch/mips/pci/ops-loongson2.c linux-lemote/arch/mips/pci/ops-loongson2.c ---- linux-2.6.33/arch/mips/pci/ops-loongson2.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/pci/ops-loongson2.c 2010-03-06 16:43:01.000000000 +0100 -@@ -1,13 +1,11 @@ - /* -- * fuloong2e specific PCI support. -- * - * Copyright (C) 1999, 2000, 2004 MIPS Technologies, Inc. - * All rights reserved. - * Authors: Carsten Langgaard - * Maciej W. Rozycki - * - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - * - * This program is free software; you can distribute it and/or modify it - * under the terms of the GNU General Public License (Version 2) as -diff -Nur linux-2.6.33/arch/mips/power/cpu.c linux-lemote/arch/mips/power/cpu.c ---- linux-2.6.33/arch/mips/power/cpu.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/power/cpu.c 2010-03-06 16:43:01.000000000 +0100 -@@ -3,9 +3,9 @@ - * - * Licensed under the GPLv2 - * -- * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology -+ * Copyright (C) 2009 Lemote Inc. - * Author: Hu Hongbing -- * Wu Zhangjin -+ * Wu Zhangjin - */ - #include - #include -diff -Nur linux-2.6.33/arch/mips/power/hibernate.S linux-lemote/arch/mips/power/hibernate.S ---- linux-2.6.33/arch/mips/power/hibernate.S 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/power/hibernate.S 2010-03-06 16:43:01.000000000 +0100 -@@ -3,9 +3,9 @@ - * - * Licensed under the GPLv2 - * -- * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology -+ * Copyright (C) 2009 Lemote Inc. - * Author: Hu Hongbing -- * Wu Zhangjin -+ * Wu Zhangjin - */ - #include - #include -diff -Nur linux-2.6.33/arch/powerpc/include/asm/prom.h linux-lemote/arch/powerpc/include/asm/prom.h ---- linux-2.6.33/arch/powerpc/include/asm/prom.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/powerpc/include/asm/prom.h 2010-03-06 16:43:03.000000000 +0100 -@@ -23,21 +23,8 @@ - #include - #include - --#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 1 --#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1 -- --#define of_compat_cmp(s1, s2, l) strcasecmp((s1), (s2)) --#define of_prop_cmp(s1, s2) strcmp((s1), (s2)) --#define of_node_cmp(s1, s2) strcasecmp((s1), (s2)) -- --extern struct device_node *of_chosen; -- - #define HAVE_ARCH_DEVTREE_FIXUPS - --/* For updating the device tree at runtime */ --extern void of_attach_node(struct device_node *); --extern void of_detach_node(struct device_node *); -- - #ifdef CONFIG_PPC32 - /* - * PCI <-> OF matching functions -@@ -52,11 +39,6 @@ - extern void pci_create_OF_bus_map(void); - #endif - --extern struct resource *request_OF_resource(struct device_node* node, -- int index, const char* name_postfix); --extern int release_OF_resource(struct device_node* node, int index); -- -- - /* - * OF address retreival & translation - */ -diff -Nur linux-2.6.33/drivers/ide/ide-iops.c linux-lemote/drivers/ide/ide-iops.c ---- linux-2.6.33/drivers/ide/ide-iops.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/ide/ide-iops.c 2010-03-06 16:43:16.000000000 +0100 -@@ -27,6 +27,8 @@ - #include - #include - -+#include ++#include ++#include ++#include ++#include "titan_ge.h" + - void SELECT_MASK(ide_drive_t *drive, int mask) - { - const struct ide_port_ops *port_ops = drive->hwif->port_ops; -@@ -300,6 +302,9 @@ - { - const char **list, *m = (char *)&drive->id[ATA_ID_PROD]; - -+ if (mips_machtype != MACH_LEMOTE_YL2F89) -+ return; + - 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.33/drivers/net/wireless/Kconfig linux-lemote/drivers/net/wireless/Kconfig ---- linux-2.6.33/drivers/net/wireless/Kconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/Kconfig 2010-03-06 16:43:20.000000000 +0100 -@@ -267,7 +267,7 @@ ++#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" @@ -3984,7 +7984,7 @@ diff -Nur linux-2.6.33/drivers/net/wireless/Kconfig linux-lemote/drivers/net/wir select EEPROM_93CX6 ---help--- This is a driver for RTL8187 and RTL8187B based cards. -@@ -294,6 +294,19 @@ +@@ -295,6 +295,19 @@ depends on RTL8187 && MAC80211_LEDS && (LEDS_CLASS = y || LEDS_CLASS = RTL8187) default y @@ -4004,9 +8004,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/Kconfig linux-lemote/drivers/net/wir config ADM8211 tristate "ADMtek ADM8211 support" depends on MAC80211 && PCI && EXPERIMENTAL -diff -Nur linux-2.6.33/drivers/net/wireless/Makefile linux-lemote/drivers/net/wireless/Makefile ---- linux-2.6.33/drivers/net/wireless/Makefile 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/Makefile 2010-03-06 16:43:20.000000000 +0100 +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 @@ -24,6 +24,7 @@ obj-$(CONFIG_ZD1211RW) += zd1211rw/ obj-$(CONFIG_RTL8180) += rtl818x/ @@ -4015,9 +8015,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/Makefile linux-lemote/drivers/net/wi # 16-bit wireless PCMCIA client drivers obj-$(CONFIG_PCMCIA_RAYCS) += ray_cs.o -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/dot11d.h linux-lemote/drivers/net/wireless/rtl8187b/dot11d.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/dot11d.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/dot11d.h 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,102 @@ +#ifndef __INC_DOT11D_H +#define __INC_DOT11D_H @@ -4121,9 +8121,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/dot11d.h linux-lemote/drive + +void dump_chnl_map(u8 * channel_map); +#endif // #ifndef __INC_DOT11D_H -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/arc4.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/arc4.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/arc4.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/arc4.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,103 @@ +/* + * Cryptographic API @@ -4228,9 +8228,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/arc4.c linux-lemo +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("ARC4 Cipher Algorithm"); +MODULE_AUTHOR("Jon Oberheide "); -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,244 @@ +#ifdef ENABLE_DOT11D +//----------------------------------------------------------------------------- @@ -4476,9 +8476,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c linux-le +EXPORT_SYMBOL(IsLegalChannel); +EXPORT_SYMBOL(ToLegalChannel); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,102 @@ +#ifndef __INC_DOT11D_H +#define __INC_DOT11D_H @@ -4582,9 +8582,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h linux-le + +void dump_chnl_map(u8 * channel_map); +#endif // #ifndef __INC_DOT11D_H -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,275 @@ +/* + * Host AP crypto routines @@ -4861,9 +8861,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c +module_init(ieee80211_crypto_init); +module_exit(ieee80211_crypto_deinit); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,524 @@ +/* + * Host AP crypt: host-based CCMP encryption implementation for Host AP driver @@ -5389,9 +9389,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_c +module_init(ieee80211_crypto_ccmp_init); +module_exit(ieee80211_crypto_ccmp_exit); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,91 @@ +/* + * Original code based on Host AP (software wireless LAN access point) driver @@ -5484,9 +9484,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h +#endif + +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,996 @@ +/* + * Host AP crypt: host-based TKIP encryption implementation for Host AP driver @@ -6484,9 +10484,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_t +module_init(ieee80211_crypto_tkip_init); +module_exit(ieee80211_crypto_tkip_exit); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,383 @@ +/* + * Host AP crypt: host-based WEP encryption implementation for Host AP driver @@ -6871,9 +10871,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_w +module_init(ieee80211_crypto_wep_init); +module_exit(ieee80211_crypto_wep_exit); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,1903 @@ +/* + * Merged with mainline ieee80211.h in Aug 2004. Original ieee802_11 @@ -8778,9 +12778,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h linux + return escaped; +} +#endif /* IEEE80211_H */ -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,385 @@ +/******************************************************************************* + @@ -9167,9 +13167,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module. +EXPORT_SYMBOL_NOVERS(alloc_ieee80211); +EXPORT_SYMBOL_NOVERS(free_ieee80211); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,2074 @@ +/* + * Original code based Host AP (software wireless LAN access point) driver @@ -11245,9 +15245,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c li +EXPORT_SYMBOL_NOVERS(ieee_ext_skb_p80211_to_ether); +#endif +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,4083 @@ +/* IEEE 802.11 SoftMAC layer + * Copyright (c) 2005 Andrea Merello @@ -15332,9 +19332,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac + +#endif +//EXPORT_SYMBOL(ieee80211_sta_ps_send_null_frame); -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,629 @@ +/* IEEE 802.11 SoftMAC layer + * Copyright (c) 2005 Andrea Merello @@ -15965,9 +19965,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac +EXPORT_SYMBOL_NOVERS(ieee80211_wx_get_power); +EXPORT_SYMBOL_NOVERS(ieee80211_wlan_frequencies); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,876 @@ +/****************************************************************************** + @@ -16845,9 +20845,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c li +#endif // _RTL8187_EXT_PATCH_ +#endif + -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,926 @@ +/****************************************************************************** + @@ -17775,9 +21775,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c li +EXPORT_SYMBOL_NOVERS(ieee80211_wx_set_encode); +EXPORT_SYMBOL_NOVERS(ieee80211_wx_get_encode); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/internal.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/internal.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/internal.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/internal.h 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,115 @@ +/* + * Cryptographic API. @@ -17894,9 +21894,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/internal.h linux- + +#endif /* _CRYPTO_INTERNAL_H */ + -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,20 @@ +#ifndef __KMAP_TYPES_H + @@ -17918,9 +21918,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h linu +#define _ASM_KMAP_TYPES_H + +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/readme linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/readme ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/readme 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/readme 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,162 @@ +What this layer should do + @@ -18084,9 +22084,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/readme linux-lemo +function and the stop scan function are called with this semaphore held). + + -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,282 @@ +#ifndef _RTL8187_MESH_H_ +#define _RTL8187_MESH_H_ @@ -18370,9 +22370,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h li +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.33/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,399 @@ +/* + * Scatterlist Cryptographic API. @@ -18773,9 +22773,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h linu + +#endif /* _LINUX_CRYPTO_H */ + -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,51 @@ +/* + * Cryptographic API. @@ -18828,9 +22828,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h lin +void scatterwalk_done(struct scatter_walk *walk, int out, int more); + +#endif /* _CRYPTO_SCATTERWALK_H */ -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/Makefile linux-lemote/drivers/net/wireless/rtl8187b/Makefile ---- linux-2.6.33/drivers/net/wireless/rtl8187b/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/Makefile 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,41 @@ +obj-$(CONFIG_RTL8187B) += rtl8187b.o + @@ -18873,9 +22873,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/Makefile linux-lemote/drive + +#for dot11d +EXTRA_CFLAGS += -DENABLE_DOT11D -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/msh_class.h linux-lemote/drivers/net/wireless/rtl8187b/msh_class.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/msh_class.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/msh_class.h 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,117 @@ +/*! \file msh_class.h + \brief msh CLASS extension @@ -18994,9 +22994,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/msh_class.h linux-lemote/dr + + +#endif // _MESH_CLASS_HDR_H_ -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/r8180_93cx6.c linux-lemote/drivers/net/wireless/rtl8187b/r8180_93cx6.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/r8180_93cx6.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/r8180_93cx6.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,146 @@ +/* + This files contains card eeprom (93c46 or 93c56) programming routines, @@ -19144,9 +23144,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/r8180_93cx6.c linux-lemote/ + (EPROM_CMD_NORMAL<bLedOn = 0; +} + -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/r8187_led.h linux-lemote/drivers/net/wireless/rtl8187b/r8187_led.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/r8187_led.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/r8187_led.h 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,276 @@ +/*++ + @@ -36105,9 +40105,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/r8187_led.h linux-lemote/dr + + +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/r8187_rfkill.c linux-lemote/drivers/net/wireless/rtl8187b/r8187_rfkill.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/r8187_rfkill.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/r8187_rfkill.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,157 @@ +/* + * rtl8187b specific rfkill support @@ -36266,9 +40266,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/r8187_rfkill.c linux-lemote + } + r8187b_rfkill = NULL; +} -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/readme linux-lemote/drivers/net/wireless/rtl8187b/readme ---- linux-2.6.33/drivers/net/wireless/rtl8187b/readme 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/readme 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,124 @@ +rtl8187 Linux kernel driver +Released under the terms of GNU General Public Licence (GPL) @@ -36394,9 +40394,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/readme linux-lemote/drivers + +If you have some question/comments please feel free to write me. + -diff -Nur linux-2.6.33/drivers/platform/Kconfig linux-lemote/drivers/platform/Kconfig ---- linux-2.6.33/drivers/platform/Kconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/platform/Kconfig 2010-03-06 16:43:22.000000000 +0100 +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 @@ -1,3 +1,7 @@ if X86 source "drivers/platform/x86/Kconfig" @@ -36405,17 +40405,17 @@ diff -Nur linux-2.6.33/drivers/platform/Kconfig linux-lemote/drivers/platform/Kc +if MIPS +source "drivers/platform/mips/Kconfig" +endif -diff -Nur linux-2.6.33/drivers/platform/Makefile linux-lemote/drivers/platform/Makefile ---- linux-2.6.33/drivers/platform/Makefile 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/platform/Makefile 2010-03-06 16:43:22.000000000 +0100 +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 @@ -3,3 +3,4 @@ # obj-$(CONFIG_X86) += x86/ +obj-$(CONFIG_MIPS) += mips/ -diff -Nur linux-2.6.33/drivers/platform/mips/Kconfig linux-lemote/drivers/platform/mips/Kconfig ---- linux-2.6.33/drivers/platform/mips/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/platform/mips/Kconfig 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,43 @@ +# +# MIPS Platform Specific Drivers @@ -36460,10 +40460,10 @@ diff -Nur linux-2.6.33/drivers/platform/mips/Kconfig linux-lemote/drivers/platfo + its own specific suspend support. + +endif # MIPS_PLATFORM_DEVICES -diff -Nur linux-2.6.33/drivers/platform/mips/lynloong_pc.c linux-lemote/drivers/platform/mips/lynloong_pc.c ---- linux-2.6.33/drivers/platform/mips/lynloong_pc.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/platform/mips/lynloong_pc.c 2010-03-06 16:43:22.000000000 +0100 -@@ -0,0 +1,511 @@ +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 +@@ -0,0 +1,513 @@ +/* + * Driver for LynLoong PC extras + * @@ -36581,6 +40581,7 @@ diff -Nur linux-2.6.33/drivers/platform/mips/lynloong_pc.c linux-lemote/drivers/ +{ + int ret; + u32 hi; ++ struct backlight_properties props; + + /* Get gpio_base */ + _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &gpio_base); @@ -36594,15 +40595,16 @@ diff -Nur linux-2.6.33/drivers/platform/mips/lynloong_pc.c linux-lemote/drivers/ + /* Enable brightness controlling */ + set_gpio_output_high(7); + ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; + lynloong_backlight_dev = backlight_device_register("backlight0", NULL, -+ NULL, &backlight_ops); ++ NULL, &backlight_ops, &props); + + if (IS_ERR(lynloong_backlight_dev)) { + ret = PTR_ERR(lynloong_backlight_dev); + return ret; + } + -+ lynloong_backlight_dev->props.max_brightness = MAX_BRIGHTNESS; + lynloong_backlight_dev->props.brightness = DEFAULT_BRIGHTNESS; + backlight_update_status(lynloong_backlight_dev); + @@ -36975,9 +40977,9 @@ diff -Nur linux-2.6.33/drivers/platform/mips/lynloong_pc.c linux-lemote/drivers/ +MODULE_AUTHOR("Wu Zhangjin ; Xiang Yu "); +MODULE_DESCRIPTION("LynLoong PC driver"); +MODULE_LICENSE("GPL"); -diff -Nur linux-2.6.33/drivers/platform/mips/Makefile linux-lemote/drivers/platform/mips/Makefile ---- linux-2.6.33/drivers/platform/mips/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/platform/mips/Makefile 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,7 @@ +# +# Makefile for MIPS Platform-Specific Drivers @@ -36986,9 +40988,9 @@ diff -Nur linux-2.6.33/drivers/platform/mips/Makefile linux-lemote/drivers/platf +obj-$(CONFIG_LEMOTE_YEELOONG2F) += yeeloong_laptop.o + +obj-$(CONFIG_LEMOTE_LYNLOONG2F) += lynloong_pc.o -diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_ecrom.c linux-lemote/drivers/platform/mips/yeeloong_ecrom.c ---- linux-2.6.33/drivers/platform/mips/yeeloong_ecrom.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/platform/mips/yeeloong_ecrom.c 2010-03-06 16:43:22.000000000 +0100 +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 @@ -0,0 +1,943 @@ +/* + * Driver for flushing/dumping ROM of EC on YeeLoong laptop @@ -37933,10 +41935,10 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_ecrom.c linux-lemote/drive +MODULE_AUTHOR("liujl "); +MODULE_DESCRIPTION("Driver for flushing/dumping ROM of EC on YeeLoong laptop"); +MODULE_LICENSE("GPL"); -diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/drivers/platform/mips/yeeloong_laptop.c ---- linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/platform/mips/yeeloong_laptop.c 2010-03-06 16:43:22.000000000 +0100 -@@ -0,0 +1,1194 @@ +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 +@@ -0,0 +1,1200 @@ +/* + * Driver for YeeLoong laptop extras + * @@ -37969,7 +41971,7 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv +/* common function */ +#define EC_VER_LEN 64 + -+static int ec_ver_small_than(char *version) ++static int ec_version_before(char *version) +{ + char *p, ec_ver[EC_VER_LEN]; + @@ -37983,11 +41985,7 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + *p = '\0'; + } + -+ /* Seems EC(>=PQ1D26) does this job for us, we can not do it again, -+ * otherwise, the brightness will not resume to the normal level! */ -+ if (strncasecmp(ec_ver, version, 64) < 0) -+ return 1; -+ return 0; ++ return (strncasecmp(ec_ver, version, 64) < 0); +} + +/* backlight subdriver */ @@ -38030,9 +42028,12 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv +static int yeeloong_backlight_init(void) +{ + int ret; ++ struct backlight_properties props; + ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; + yeeloong_backlight_dev = backlight_device_register("backlight0", NULL, -+ NULL, &backlight_ops); ++ NULL, &backlight_ops, &props); + + if (IS_ERR(yeeloong_backlight_dev)) { + ret = PTR_ERR(yeeloong_backlight_dev); @@ -38040,7 +42041,6 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + return ret; + } + -+ yeeloong_backlight_dev->props.max_brightness = MAX_BRIGHTNESS; + yeeloong_backlight_dev->props.brightness = + yeeloong_get_brightness(yeeloong_backlight_dev); + backlight_update_status(yeeloong_backlight_dev); @@ -38133,7 +42133,7 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + break; + case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: + /* seconds */ -+ val->intval = bat_in ? (curr_cap - 3) * 54 + 142 : 00; ++ val->intval = bat_in ? (curr_cap - 3) * 54 + 142 : 0; + break; + case POWER_SUPPLY_PROP_STATUS: + if (!bat_in) @@ -38168,6 +42168,9 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + } + val->intval = health; + break; ++ case POWER_SUPPLY_PROP_CHARGE_NOW: /* 1/100(%)*1000 µAh */ ++ val->intval = curr_cap * get_bat_info(FULLCHG_CAP) * 10; ++ break; + default: + return -EINVAL; + } @@ -38208,13 +42211,13 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + switch (psp) { + /* Fixed information */ + case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: -+ val->intval = get_bat_info(DESIGN_CAP) * 1000; /* mV -> µV */ ++ val->intval = get_bat_info(DESIGN_VOL) * 1000; /* mV -> µV */ + break; + case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: -+ val->intval = get_bat_info(DESIGN_VOL) * 1000; /* mA -> µA */ ++ val->intval = get_bat_info(DESIGN_CAP) * 1000; /* mAh->µAh */ + break; + case POWER_SUPPLY_PROP_CHARGE_FULL: -+ val->intval = get_bat_info(FULLCHG_CAP) * 1000; /* µA */ ++ val->intval = get_bat_info(FULLCHG_CAP) * 1000; /* µAh */ + break; + case POWER_SUPPLY_PROP_MANUFACTURER: + val->strval = (ec_read(REG_BAT_VENDOR) == @@ -38243,6 +42246,8 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + POWER_SUPPLY_PROP_PRESENT, + POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, + POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_FULL, ++ POWER_SUPPLY_PROP_CHARGE_NOW, + POWER_SUPPLY_PROP_CURRENT_NOW, + POWER_SUPPLY_PROP_VOLTAGE_NOW, + POWER_SUPPLY_PROP_HEALTH, @@ -38570,10 +42575,8 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + +static void yeeloong_lcd_vo_set(int status) +{ -+ if (ec_ver_small_than("EC_VER=PQ1D27")) { -+ lcd_output_dev->request_state = status; -+ lcd_video_output_set(lcd_output_dev); -+ } ++ lcd_output_dev->request_state = status; ++ lcd_video_output_set(lcd_output_dev); +} + +static void yeeloong_crt_vo_set(int status) @@ -38634,7 +42637,8 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + {KE_SW, EVENT_LID, { SW_LID } }, + {KE_KEY, EVENT_CAMERA, { KEY_CAMERA } }, /* Fn + ESC */ + {KE_KEY, EVENT_SLEEP, { KEY_SLEEP } }, /* Fn + F1 */ -+ {KE_KEY, EVENT_DISPLAY_TOGGLE, { KEY_SWITCHVIDEOMODE } }, /* Fn + F3 */ ++ {KE_KEY, EVENT_DISPLAYTOGGLE, { KEY_DISPLAYTOGGLE } }, /* Fn + F2 */ ++ {KE_KEY, EVENT_SWITCHVIDEOMODE, { KEY_SWITCHVIDEOMODE } }, /* Fn + F3 */ + {KE_KEY, EVENT_AUDIO_MUTE, { KEY_MUTE } }, /* Fn + F4 */ + {KE_KEY, EVENT_WLAN, { KEY_WLAN } }, /* Fn + F5 */ + {KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSUP } }, /* Fn + up */ @@ -38693,15 +42697,17 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + return status; +} + -+static int black_screen_handler(int status) ++static int displaytoggle_handler(int status) +{ -+ if (ec_ver_small_than("EC_VER=PQ1D26")) ++ /* EC(>=PQ1D26) does this job for us, we can not do it again, ++ * otherwise, the brightness will not resume to the normal level! */ ++ if (ec_version_before("EC_VER=PQ1D26")) + yeeloong_lcd_vo_set(status); + + return status; +} + -+static int display_toggle_handler(int status) ++static int switchvideomode_handler(int status) +{ + static int video_output_status; + @@ -38790,8 +42796,8 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + case EVENT_LID: + reg = REG_LID_DETECT; + break; -+ case EVENT_DISPLAY_TOGGLE: -+ handler = display_toggle_handler; ++ case EVENT_SWITCHVIDEOMODE: ++ handler = switchvideomode_handler; + break; + case EVENT_CRT_DETECT: + reg = REG_CRT_DETECT; @@ -38809,9 +42815,9 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + reg = REG_USB0_FLAG; + handler = usb0_handler; + break; -+ case EVENT_BLACK_SCREEN: ++ case EVENT_DISPLAYTOGGLE: + reg = REG_DISPLAY_LCD; -+ handler = black_screen_handler; ++ handler = displaytoggle_handler; + break; + case EVENT_AUDIO_MUTE: + reg = REG_AUDIO_MUTE; @@ -39022,7 +43028,8 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv +static int yeeloong_suspend(struct device *dev) + +{ -+ yeeloong_lcd_vo_set(BIT_DISPLAY_LCD_OFF); ++ if (ec_version_before("EC_VER=PQ1D27")) ++ yeeloong_lcd_vo_set(BIT_DISPLAY_LCD_OFF); + yeeloong_crt_vo_set(BIT_CRT_DETECT_UNPLUG); + usb_ports_set(BIT_USB_FLAG_OFF); + @@ -39031,7 +43038,8 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + +static int yeeloong_resume(struct device *dev) +{ -+ yeeloong_lcd_vo_set(BIT_DISPLAY_LCD_ON); ++ if (ec_version_before("EC_VER=PQ1D27")) ++ yeeloong_lcd_vo_set(BIT_DISPLAY_LCD_ON); + yeeloong_crt_vo_set(BIT_CRT_DETECT_PLUG); + usb_ports_set(BIT_USB_FLAG_ON); + @@ -39131,9 +43139,9 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv +MODULE_AUTHOR("Wu Zhangjin ; Liu Junliang "); +MODULE_DESCRIPTION("YeeLoong laptop driver"); +MODULE_LICENSE("GPL"); -diff -Nur linux-2.6.33/drivers/rtc/rtc-cmos.c linux-lemote/drivers/rtc/rtc-cmos.c ---- linux-2.6.33/drivers/rtc/rtc-cmos.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/rtc/rtc-cmos.c 2010-03-06 16:43:22.000000000 +0100 +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; * doesn't know 12-hour mode either. @@ -39146,1548 +43154,10 @@ diff -Nur linux-2.6.33/drivers/rtc/rtc-cmos.c linux-lemote/drivers/rtc/rtc-cmos. retval = -ENXIO; goto cleanup1; } -diff -Nur linux-2.6.33/drivers/staging/sm7xx/Kconfig linux-lemote/drivers/staging/sm7xx/Kconfig ---- linux-2.6.33/drivers/staging/sm7xx/Kconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/staging/sm7xx/Kconfig 2010-03-06 16:43:30.000000000 +0100 -@@ -6,10 +6,3 @@ - select FB_CFB_IMAGEBLIT - help - Frame Buffer driver for the Silicon Motion SM7XX serial graphic card. -- --config FB_SM7XX_ACCEL -- bool "Siliconmotion Acceleration functions (EXPERIMENTAL)" -- depends on FB_SM7XX && EXPERIMENTAL -- help -- This will compile the Trident frame buffer device with -- acceleration functions. -diff -Nur linux-2.6.33/drivers/staging/sm7xx/smtc2d.c linux-lemote/drivers/staging/sm7xx/smtc2d.c ---- linux-2.6.33/drivers/staging/sm7xx/smtc2d.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/staging/sm7xx/smtc2d.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1,979 +0,0 @@ --/* -- * Silicon Motion SM7XX 2D drawing engine functions. -- * -- * Copyright (C) 2006 Silicon Motion Technology Corp. -- * Author: Boyod boyod.yang@siliconmotion.com.cn -- * -- * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -- * -- * 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. -- * -- * Version 0.10.26192.21.01 -- * - Add PowerPC support -- * - Add 2D support for Lynx - -- * Verified on 2.6.19.2 -- * Boyod.yang -- */ -- --unsigned char smtc_de_busy; -- --void SMTC_write2Dreg(unsigned long nOffset, unsigned long nData) --{ -- writel(nData, smtc_2DBaseAddress + nOffset); --} -- --unsigned long SMTC_read2Dreg(unsigned long nOffset) --{ -- return readl(smtc_2DBaseAddress + nOffset); --} -- --void SMTC_write2Ddataport(unsigned long nOffset, unsigned long nData) --{ -- writel(nData, smtc_2Ddataport + nOffset); --} -- --/********************************************************************** -- * -- * deInit -- * -- * Purpose -- * Drawing engine initialization. -- * -- **********************************************************************/ -- --void deInit(unsigned int nModeWidth, unsigned int nModeHeight, -- unsigned int bpp) --{ -- /* Get current power configuration. */ -- unsigned char clock; -- clock = smtc_seqr(0x21); -- -- /* initialize global 'mutex lock' variable */ -- smtc_de_busy = 0; -- -- /* Enable 2D Drawing Engine */ -- smtc_seqw(0x21, clock & 0xF8); -- -- SMTC_write2Dreg(DE_CLIP_TL, -- FIELD_VALUE(0, DE_CLIP_TL, TOP, 0) | -- FIELD_SET(0, DE_CLIP_TL, STATUS, DISABLE) | -- FIELD_SET(0, DE_CLIP_TL, INHIBIT, OUTSIDE) | -- FIELD_VALUE(0, DE_CLIP_TL, LEFT, 0)); -- -- if (bpp >= 24) { -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- nModeWidth * 3) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- nModeWidth -- * 3)); -- } else { -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- nModeWidth) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- nModeWidth)); -- } -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- nModeWidth) | FIELD_VALUE(0, -- DE_WINDOW_WIDTH, -- SOURCE, -- nModeWidth)); -- -- switch (bpp) { -- case 8: -- SMTC_write2Dreg(DE_STRETCH_FORMAT, -- FIELD_SET(0, DE_STRETCH_FORMAT, PATTERN_XY, -- NORMAL) | FIELD_VALUE(0, -- DE_STRETCH_FORMAT, -- PATTERN_Y, -- 0) | -- FIELD_VALUE(0, DE_STRETCH_FORMAT, PATTERN_X, -- 0) | FIELD_SET(0, DE_STRETCH_FORMAT, -- PIXEL_FORMAT, -- 8) | FIELD_SET(0, -- DE_STRETCH_FORMAT, -- ADDRESSING, -- XY) | -- FIELD_VALUE(0, DE_STRETCH_FORMAT, -- SOURCE_HEIGHT, 3)); -- break; -- case 24: -- SMTC_write2Dreg(DE_STRETCH_FORMAT, -- FIELD_SET(0, DE_STRETCH_FORMAT, PATTERN_XY, -- NORMAL) | FIELD_VALUE(0, -- DE_STRETCH_FORMAT, -- PATTERN_Y, -- 0) | -- FIELD_VALUE(0, DE_STRETCH_FORMAT, PATTERN_X, -- 0) | FIELD_SET(0, DE_STRETCH_FORMAT, -- PIXEL_FORMAT, -- 24) | FIELD_SET(0, -- DE_STRETCH_FORMAT, -- ADDRESSING, -- XY) | -- FIELD_VALUE(0, DE_STRETCH_FORMAT, -- SOURCE_HEIGHT, 3)); -- break; -- case 16: -- default: -- SMTC_write2Dreg(DE_STRETCH_FORMAT, -- FIELD_SET(0, DE_STRETCH_FORMAT, PATTERN_XY, -- NORMAL) | FIELD_VALUE(0, -- DE_STRETCH_FORMAT, -- PATTERN_Y, -- 0) | -- FIELD_VALUE(0, DE_STRETCH_FORMAT, PATTERN_X, -- 0) | FIELD_SET(0, DE_STRETCH_FORMAT, -- PIXEL_FORMAT, -- 16) | FIELD_SET(0, -- DE_STRETCH_FORMAT, -- ADDRESSING, -- XY) | -- FIELD_VALUE(0, DE_STRETCH_FORMAT, -- SOURCE_HEIGHT, 3)); -- break; -- } -- -- SMTC_write2Dreg(DE_MASKS, -- FIELD_VALUE(0, DE_MASKS, BYTE_MASK, 0xFFFF) | -- FIELD_VALUE(0, DE_MASKS, BIT_MASK, 0xFFFF)); -- SMTC_write2Dreg(DE_COLOR_COMPARE_MASK, -- FIELD_VALUE(0, DE_COLOR_COMPARE_MASK, MASKS, \ -- 0xFFFFFF)); -- SMTC_write2Dreg(DE_COLOR_COMPARE, -- FIELD_VALUE(0, DE_COLOR_COMPARE, COLOR, 0xFFFFFF)); --} -- --void deVerticalLine(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long nX, -- unsigned long nY, -- unsigned long dst_height, unsigned long nColor) --{ -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, -- FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, ADDRESS, -- dst_base)); -- -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, dst_pitch) | -- FIELD_VALUE(0, DE_PITCH, SOURCE, dst_pitch)); -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, DE_WINDOW_WIDTH, -- SOURCE, -- dst_pitch)); -- -- SMTC_write2Dreg(DE_FOREGROUND, -- FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_DESTINATION, X, nX) | -- FIELD_VALUE(0, DE_DESTINATION, Y, nY)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, 1) | -- FIELD_VALUE(0, DE_DIMENSION, Y_ET, dst_height)); -- -- SMTC_write2Dreg(DE_CONTROL, -- FIELD_SET(0, DE_CONTROL, STATUS, START) | -- FIELD_SET(0, DE_CONTROL, DIRECTION, LEFT_TO_RIGHT) | -- FIELD_SET(0, DE_CONTROL, MAJOR, Y) | -- FIELD_SET(0, DE_CONTROL, STEP_X, NEGATIVE) | -- FIELD_SET(0, DE_CONTROL, STEP_Y, POSITIVE) | -- FIELD_SET(0, DE_CONTROL, LAST_PIXEL, OFF) | -- FIELD_SET(0, DE_CONTROL, COMMAND, SHORT_STROKE) | -- FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | -- FIELD_VALUE(0, DE_CONTROL, ROP, 0x0C)); -- -- smtc_de_busy = 1; --} -- --void deHorizontalLine(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long nX, -- unsigned long nY, -- unsigned long dst_width, unsigned long nColor) --{ -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, -- FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, ADDRESS, -- dst_base)); -- -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, dst_pitch) | -- FIELD_VALUE(0, DE_PITCH, SOURCE, dst_pitch)); -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, DE_WINDOW_WIDTH, -- SOURCE, -- dst_pitch)); -- SMTC_write2Dreg(DE_FOREGROUND, -- FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, -- DISABLE) | FIELD_VALUE(0, DE_DESTINATION, X, -- nX) | FIELD_VALUE(0, -- DE_DESTINATION, -- Y, -- nY)); -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, -- dst_width) | FIELD_VALUE(0, DE_DIMENSION, -- Y_ET, 1)); -- SMTC_write2Dreg(DE_CONTROL, -- FIELD_SET(0, DE_CONTROL, STATUS, START) | FIELD_SET(0, -- DE_CONTROL, -- DIRECTION, -- RIGHT_TO_LEFT) -- | FIELD_SET(0, DE_CONTROL, MAJOR, X) | FIELD_SET(0, -- DE_CONTROL, -- STEP_X, -- POSITIVE) -- | FIELD_SET(0, DE_CONTROL, STEP_Y, -- NEGATIVE) | FIELD_SET(0, DE_CONTROL, -- LAST_PIXEL, -- OFF) | FIELD_SET(0, -- DE_CONTROL, -- COMMAND, -- SHORT_STROKE) -- | FIELD_SET(0, DE_CONTROL, ROP_SELECT, -- ROP2) | FIELD_VALUE(0, DE_CONTROL, ROP, -- 0x0C)); -- -- smtc_de_busy = 1; --} -- --void deLine(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long nX1, -- unsigned long nY1, -- unsigned long nX2, unsigned long nY2, unsigned long nColor) --{ -- unsigned long nCommand = -- FIELD_SET(0, DE_CONTROL, STATUS, START) | -- FIELD_SET(0, DE_CONTROL, DIRECTION, LEFT_TO_RIGHT) | -- FIELD_SET(0, DE_CONTROL, MAJOR, X) | -- FIELD_SET(0, DE_CONTROL, STEP_X, POSITIVE) | -- FIELD_SET(0, DE_CONTROL, STEP_Y, POSITIVE) | -- FIELD_SET(0, DE_CONTROL, LAST_PIXEL, OFF) | -- FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | -- FIELD_VALUE(0, DE_CONTROL, ROP, 0x0C); -- unsigned long DeltaX; -- unsigned long DeltaY; -- -- /* Calculate delta X */ -- if (nX1 <= nX2) -- DeltaX = nX2 - nX1; -- else { -- DeltaX = nX1 - nX2; -- nCommand = FIELD_SET(nCommand, DE_CONTROL, STEP_X, NEGATIVE); -- } -- -- /* Calculate delta Y */ -- if (nY1 <= nY2) -- DeltaY = nY2 - nY1; -- else { -- DeltaY = nY1 - nY2; -- nCommand = FIELD_SET(nCommand, DE_CONTROL, STEP_Y, NEGATIVE); -- } -- -- /* Determine the major axis */ -- if (DeltaX < DeltaY) -- nCommand = FIELD_SET(nCommand, DE_CONTROL, MAJOR, Y); -- -- /* Vertical line? */ -- if (nX1 == nX2) -- deVerticalLine(dst_base, dst_pitch, nX1, nY1, DeltaY, nColor); -- -- /* Horizontal line? */ -- else if (nY1 == nY2) -- deHorizontalLine(dst_base, dst_pitch, nX1, nY1, \ -- DeltaX, nColor); -- -- /* Diagonal line? */ -- else if (DeltaX == DeltaY) { -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, -- FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, -- ADDRESS, dst_base)); -- -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- dst_pitch)); -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_WINDOW_WIDTH, -- SOURCE, -- dst_pitch)); -- -- SMTC_write2Dreg(DE_FOREGROUND, -- FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_DESTINATION, X, 1) | -- FIELD_VALUE(0, DE_DESTINATION, Y, nY1)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, 1) | -- FIELD_VALUE(0, DE_DIMENSION, Y_ET, DeltaX)); -- -- SMTC_write2Dreg(DE_CONTROL, -- FIELD_SET(nCommand, DE_CONTROL, COMMAND, -- SHORT_STROKE)); -- } -- -- /* Generic line */ -- else { -- unsigned int k1, k2, et, w; -- if (DeltaX < DeltaY) { -- k1 = 2 * DeltaX; -- et = k1 - DeltaY; -- k2 = et - DeltaY; -- w = DeltaY + 1; -- } else { -- k1 = 2 * DeltaY; -- et = k1 - DeltaX; -- k2 = et - DeltaX; -- w = DeltaX + 1; -- } -- -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, -- FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, -- ADDRESS, dst_base)); -- -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- dst_pitch)); -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_WINDOW_WIDTH, -- SOURCE, -- dst_pitch)); -- -- SMTC_write2Dreg(DE_FOREGROUND, -- FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); -- -- SMTC_write2Dreg(DE_SOURCE, -- FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_SOURCE, X_K1, k1) | -- FIELD_VALUE(0, DE_SOURCE, Y_K2, k2)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_DESTINATION, X, nX1) | -- FIELD_VALUE(0, DE_DESTINATION, Y, nY1)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, w) | -- FIELD_VALUE(0, DE_DIMENSION, Y_ET, et)); -- -- SMTC_write2Dreg(DE_CONTROL, -- FIELD_SET(nCommand, DE_CONTROL, COMMAND, -- LINE_DRAW)); -- } -- -- smtc_de_busy = 1; --} -- --void deFillRect(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long dst_X, -- unsigned long dst_Y, -- unsigned long dst_width, -- unsigned long dst_height, unsigned long nColor) --{ -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, -- FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, ADDRESS, -- dst_base)); -- -- if (dst_pitch) { -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- dst_pitch)); -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_WINDOW_WIDTH, -- SOURCE, -- dst_pitch)); -- } -- -- SMTC_write2Dreg(DE_FOREGROUND, -- FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_DESTINATION, X, dst_X) | -- FIELD_VALUE(0, DE_DESTINATION, Y, dst_Y)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, dst_width) | -- FIELD_VALUE(0, DE_DIMENSION, Y_ET, dst_height)); -- -- SMTC_write2Dreg(DE_CONTROL, -- FIELD_SET(0, DE_CONTROL, STATUS, START) | -- FIELD_SET(0, DE_CONTROL, DIRECTION, LEFT_TO_RIGHT) | -- FIELD_SET(0, DE_CONTROL, LAST_PIXEL, OFF) | -- FIELD_SET(0, DE_CONTROL, COMMAND, RECTANGLE_FILL) | -- FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | -- FIELD_VALUE(0, DE_CONTROL, ROP, 0x0C)); -- -- smtc_de_busy = 1; --} -- --/********************************************************************** -- * -- * deRotatePattern -- * -- * Purpose -- * Rotate the given pattern if necessary -- * -- * Parameters -- * [in] -- * pPattern - Pointer to DE_SURFACE structure containing -- * pattern attributes -- * patternX - X position (0-7) of pattern origin -- * patternY - Y position (0-7) of pattern origin -- * -- * [out] -- * pattern_dstaddr - Pointer to pre-allocated buffer containing -- * rotated pattern -- * -- **********************************************************************/ --void deRotatePattern(unsigned char *pattern_dstaddr, -- unsigned long pattern_src_addr, -- unsigned long pattern_BPP, -- unsigned long pattern_stride, int patternX, int patternY) --{ -- unsigned int i; -- unsigned long pattern[PATTERN_WIDTH * PATTERN_HEIGHT]; -- unsigned int x, y; -- unsigned char *pjPatByte; -- -- if (pattern_dstaddr != NULL) { -- deWaitForNotBusy(); -- -- if (patternX || patternY) { -- /* Rotate pattern */ -- pjPatByte = (unsigned char *)pattern; -- -- switch (pattern_BPP) { -- case 8: -- { -- for (y = 0; y < 8; y++) { -- unsigned char *pjBuffer = -- pattern_dstaddr + -- ((patternY + y) & 7) * 8; -- for (x = 0; x < 8; x++) { -- pjBuffer[(patternX + -- x) & 7] = -- pjPatByte[x]; -- } -- pjPatByte += pattern_stride; -- } -- break; -- } -- -- case 16: -- { -- for (y = 0; y < 8; y++) { -- unsigned short *pjBuffer = -- (unsigned short *) -- pattern_dstaddr + -- ((patternY + y) & 7) * 8; -- for (x = 0; x < 8; x++) { -- pjBuffer[(patternX + -- x) & 7] = -- ((unsigned short *) -- pjPatByte)[x]; -- } -- pjPatByte += pattern_stride; -- } -- break; -- } -- -- case 32: -- { -- for (y = 0; y < 8; y++) { -- unsigned long *pjBuffer = -- (unsigned long *) -- pattern_dstaddr + -- ((patternY + y) & 7) * 8; -- for (x = 0; x < 8; x++) { -- pjBuffer[(patternX + -- x) & 7] = -- ((unsigned long *) -- pjPatByte)[x]; -- } -- pjPatByte += pattern_stride; -- } -- break; -- } -- } -- } else { -- /*Don't rotate,just copy pattern into pattern_dstaddr*/ -- for (i = 0; i < (pattern_BPP * 2); i++) { -- ((unsigned long *)pattern_dstaddr)[i] = -- pattern[i]; -- } -- } -- -- } --} -- --/********************************************************************** -- * -- * deCopy -- * -- * Purpose -- * Copy a rectangular area of the source surface to a destination surface -- * -- * Remarks -- * Source bitmap must have the same color depth (BPP) as the destination -- * bitmap. -- * --**********************************************************************/ --void deCopy(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long dst_BPP, -- unsigned long dst_X, -- unsigned long dst_Y, -- unsigned long dst_width, -- unsigned long dst_height, -- unsigned long src_base, -- unsigned long src_pitch, -- unsigned long src_X, -- unsigned long src_Y, pTransparent pTransp, unsigned char nROP2) --{ -- unsigned long nDirection = 0; -- unsigned long nTransparent = 0; -- /* Direction of ROP2 operation: -- * 1 = Left to Right, -- * (-1) = Right to Left -- */ -- unsigned long opSign = 1; -- /* xWidth is in pixels */ -- unsigned long xWidth = 192 / (dst_BPP / 8); -- unsigned long de_ctrl = 0; -- -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, -- FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, ADDRESS, -- dst_base)); -- -- SMTC_write2Dreg(DE_WINDOW_SOURCE_BASE, -- FIELD_VALUE(0, DE_WINDOW_SOURCE_BASE, ADDRESS, -- src_base)); -- -- if (dst_pitch && src_pitch) { -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- src_pitch)); -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_WINDOW_WIDTH, -- SOURCE, -- src_pitch)); -- } -- -- /* Set transparent bits if necessary */ -- if (pTransp != NULL) { -- nTransparent = -- pTransp->match | pTransp->select | pTransp->control; -- -- /* Set color compare register */ -- SMTC_write2Dreg(DE_COLOR_COMPARE, -- FIELD_VALUE(0, DE_COLOR_COMPARE, COLOR, -- pTransp->color)); -- } -- -- /* Determine direction of operation */ -- if (src_Y < dst_Y) { -- /* +----------+ -- |S | -- | +----------+ -- | | | | -- | | | | -- +---|------+ | -- | D | -- +----------+ */ -- -- nDirection = BOTTOM_TO_TOP; -- } else if (src_Y > dst_Y) { -- /* +----------+ -- |D | -- | +----------+ -- | | | | -- | | | | -- +---|------+ | -- | S | -- +----------+ */ -- -- nDirection = TOP_TO_BOTTOM; -- } else { -- /* src_Y == dst_Y */ -- -- if (src_X <= dst_X) { -- /* +------+---+------+ -- |S | | D| -- | | | | -- | | | | -- | | | | -- +------+---+------+ */ -- -- nDirection = RIGHT_TO_LEFT; -- } else { -- /* src_X > dst_X */ -- -- /* +------+---+------+ -- |D | | S| -- | | | | -- | | | | -- | | | | -- +------+---+------+ */ -- -- nDirection = LEFT_TO_RIGHT; -- } -- } -- -- if ((nDirection == BOTTOM_TO_TOP) || (nDirection == RIGHT_TO_LEFT)) { -- src_X += dst_width - 1; -- src_Y += dst_height - 1; -- dst_X += dst_width - 1; -- dst_Y += dst_height - 1; -- opSign = (-1); -- } -- -- if (dst_BPP >= 24) { -- src_X *= 3; -- src_Y *= 3; -- dst_X *= 3; -- dst_Y *= 3; -- dst_width *= 3; -- if ((nDirection == BOTTOM_TO_TOP) -- || (nDirection == RIGHT_TO_LEFT)) { -- src_X += 2; -- dst_X += 2; -- } -- } -- -- /* Workaround for 192 byte hw bug */ -- if ((nROP2 != 0x0C) && ((dst_width * (dst_BPP / 8)) >= 192)) { -- /* -- * Perform the ROP2 operation in chunks of (xWidth * -- * dst_height) -- */ -- while (1) { -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_SOURCE, -- FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_SOURCE, X_K1, src_X) | -- FIELD_VALUE(0, DE_SOURCE, Y_K2, src_Y)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, -- DISABLE) | FIELD_VALUE(0, -- DE_DESTINATION, -- X, -- dst_X) -- | FIELD_VALUE(0, DE_DESTINATION, Y, -- dst_Y)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, -- xWidth) | FIELD_VALUE(0, -- DE_DIMENSION, -- Y_ET, -- dst_height)); -- -- de_ctrl = -- FIELD_VALUE(0, DE_CONTROL, ROP, -- nROP2) | nTransparent | FIELD_SET(0, -- DE_CONTROL, -- ROP_SELECT, -- ROP2) -- | FIELD_SET(0, DE_CONTROL, COMMAND, -- BITBLT) | ((nDirection == -- 1) ? FIELD_SET(0, -- DE_CONTROL, -- DIRECTION, -- RIGHT_TO_LEFT) -- : FIELD_SET(0, DE_CONTROL, -- DIRECTION, -- LEFT_TO_RIGHT)) | -- FIELD_SET(0, DE_CONTROL, STATUS, START); -- -- SMTC_write2Dreg(DE_CONTROL, de_ctrl); -- -- src_X += (opSign * xWidth); -- dst_X += (opSign * xWidth); -- dst_width -= xWidth; -- -- if (dst_width <= 0) { -- /* ROP2 operation is complete */ -- break; -- } -- -- if (xWidth > dst_width) -- xWidth = dst_width; -- } -- } else { -- deWaitForNotBusy(); -- SMTC_write2Dreg(DE_SOURCE, -- FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_SOURCE, X_K1, src_X) | -- FIELD_VALUE(0, DE_SOURCE, Y_K2, src_Y)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_DESTINATION, X, dst_X) | -- FIELD_VALUE(0, DE_DESTINATION, Y, dst_Y)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, dst_width) | -- FIELD_VALUE(0, DE_DIMENSION, Y_ET, dst_height)); -- -- de_ctrl = FIELD_VALUE(0, DE_CONTROL, ROP, nROP2) | -- nTransparent | -- FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | -- FIELD_SET(0, DE_CONTROL, COMMAND, BITBLT) | -- ((nDirection == 1) ? FIELD_SET(0, DE_CONTROL, DIRECTION, -- RIGHT_TO_LEFT) -- : FIELD_SET(0, DE_CONTROL, DIRECTION, -- LEFT_TO_RIGHT)) | FIELD_SET(0, DE_CONTROL, -- STATUS, START); -- SMTC_write2Dreg(DE_CONTROL, de_ctrl); -- } -- -- smtc_de_busy = 1; --} -- --/* -- * This function sets the pixel format that will apply to the 2D Engine. -- */ --void deSetPixelFormat(unsigned long bpp) --{ -- unsigned long de_format; -- -- de_format = SMTC_read2Dreg(DE_STRETCH_FORMAT); -- -- switch (bpp) { -- case 8: -- de_format = -- FIELD_SET(de_format, DE_STRETCH_FORMAT, PIXEL_FORMAT, 8); -- break; -- default: -- case 16: -- de_format = -- FIELD_SET(de_format, DE_STRETCH_FORMAT, PIXEL_FORMAT, 16); -- break; -- case 32: -- de_format = -- FIELD_SET(de_format, DE_STRETCH_FORMAT, PIXEL_FORMAT, 32); -- break; -- } -- -- SMTC_write2Dreg(DE_STRETCH_FORMAT, de_format); --} -- --/* -- * System memory to Video memory monochrome expansion. -- * -- * Source is monochrome image in system memory. This function expands the -- * monochrome data to color image in video memory. -- */ -- --long deSystemMem2VideoMemMonoBlt(const char *pSrcbuf, -- long srcDelta, -- unsigned long startBit, -- unsigned long dBase, -- unsigned long dPitch, -- unsigned long bpp, -- unsigned long dx, unsigned long dy, -- unsigned long width, unsigned long height, -- unsigned long fColor, -- unsigned long bColor, -- unsigned long rop2) { -- unsigned long bytePerPixel; -- unsigned long ulBytesPerScan; -- unsigned long ul4BytesPerScan; -- unsigned long ulBytesRemain; -- unsigned long de_ctrl = 0; -- unsigned char ajRemain[4]; -- long i, j; -- -- bytePerPixel = bpp / 8; -- -- /* Just make sure the start bit is within legal range */ -- startBit &= 7; -- -- ulBytesPerScan = (width + startBit + 7) / 8; -- ul4BytesPerScan = ulBytesPerScan & ~3; -- ulBytesRemain = ulBytesPerScan & 3; -- -- if (smtc_de_busy) -- deWaitForNotBusy(); -- -- /* -- * 2D Source Base. Use 0 for HOST Blt. -- */ -- -- SMTC_write2Dreg(DE_WINDOW_SOURCE_BASE, 0); -- -- /* -- * 2D Destination Base. -- * -- * It is an address offset (128 bit aligned) from the beginning of -- * frame buffer. -- */ -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, dBase); -- -- if (dPitch) { -- -- /* -- * Program pitch (distance between the 1st points of two -- * adjacent lines). -- * -- * Note that input pitch is BYTE value, but the 2D Pitch -- * register uses pixel values. Need Byte to pixel convertion. -- */ -- -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- dPitch / -- bytePerPixel) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- dPitch / -- bytePerPixel)); -- -- /* Screen Window width in Pixels. -- * -- * 2D engine uses this value to calculate the linear address in -- * frame buffer for a given point. -- */ -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- (dPitch / -- bytePerPixel)) | FIELD_VALUE(0, -- DE_WINDOW_WIDTH, -- SOURCE, -- (dPitch -- / -- bytePerPixel))); -- } -- /* Note: For 2D Source in Host Write, only X_K1 field is needed, and -- * Y_K2 field is not used. For mono bitmap, use startBit for X_K1. -- */ -- -- SMTC_write2Dreg(DE_SOURCE, -- FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_SOURCE, X_K1, startBit) | -- FIELD_VALUE(0, DE_SOURCE, Y_K2, 0)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_DESTINATION, X, dx) | -- FIELD_VALUE(0, DE_DESTINATION, Y, dy)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, width) | -- FIELD_VALUE(0, DE_DIMENSION, Y_ET, height)); -- -- SMTC_write2Dreg(DE_FOREGROUND, fColor); -- SMTC_write2Dreg(DE_BACKGROUND, bColor); -- -- if (bpp) -- deSetPixelFormat(bpp); -- /* Set the pixel format of the destination */ -- -- de_ctrl = FIELD_VALUE(0, DE_CONTROL, ROP, rop2) | -- FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | -- FIELD_SET(0, DE_CONTROL, COMMAND, HOST_WRITE) | -- FIELD_SET(0, DE_CONTROL, HOST, MONO) | -- FIELD_SET(0, DE_CONTROL, STATUS, START); -- -- SMTC_write2Dreg(DE_CONTROL, de_ctrl | deGetTransparency()); -- -- /* Write MONO data (line by line) to 2D Engine data port */ -- for (i = 0; i < height; i++) { -- /* For each line, send the data in chunks of 4 bytes */ -- for (j = 0; j < (ul4BytesPerScan / 4); j++) -- SMTC_write2Ddataport(0, -- *(unsigned long *)(pSrcbuf + -- (j * 4))); -- -- if (ulBytesRemain) { -- memcpy(ajRemain, pSrcbuf + ul4BytesPerScan, -- ulBytesRemain); -- SMTC_write2Ddataport(0, *(unsigned long *)ajRemain); -- } -- -- pSrcbuf += srcDelta; -- } -- smtc_de_busy = 1; -- -- return 0; --} -- --/* -- * This function gets the transparency status from DE_CONTROL register. -- * It returns a double word with the transparent fields properly set, -- * while other fields are 0. -- */ --unsigned long deGetTransparency(void) --{ -- unsigned long de_ctrl; -- -- de_ctrl = SMTC_read2Dreg(DE_CONTROL); -- -- de_ctrl &= -- FIELD_MASK(DE_CONTROL_TRANSPARENCY_MATCH) | -- FIELD_MASK(DE_CONTROL_TRANSPARENCY_SELECT) | -- FIELD_MASK(DE_CONTROL_TRANSPARENCY); -- -- return de_ctrl; --} -diff -Nur linux-2.6.33/drivers/staging/sm7xx/smtc2d.h linux-lemote/drivers/staging/sm7xx/smtc2d.h ---- linux-2.6.33/drivers/staging/sm7xx/smtc2d.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/staging/sm7xx/smtc2d.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,530 +0,0 @@ --/* -- * Silicon Motion SM712 2D drawing engine functions. -- * -- * Copyright (C) 2006 Silicon Motion Technology Corp. -- * Author: Ge Wang, gewang@siliconmotion.com -- * -- * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -- * -- * 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. -- */ -- --#ifndef NULL --#define NULL 0 --#endif -- --/* Internal macros */ -- --#define _F_START(f) (0 ? f) --#define _F_END(f) (1 ? f) --#define _F_SIZE(f) (1 + _F_END(f) - _F_START(f)) --#define _F_MASK(f) (((1ULL << _F_SIZE(f)) - 1) << _F_START(f)) --#define _F_NORMALIZE(v, f) (((v) & _F_MASK(f)) >> _F_START(f)) --#define _F_DENORMALIZE(v, f) (((v) << _F_START(f)) & _F_MASK(f)) -- --/* Global macros */ -- --#define FIELD_GET(x, reg, field) \ --( \ -- _F_NORMALIZE((x), reg ## _ ## field) \ --) -- --#define FIELD_SET(x, reg, field, value) \ --( \ -- (x & ~_F_MASK(reg ## _ ## field)) \ -- | _F_DENORMALIZE(reg ## _ ## field ## _ ## value, reg ## _ ## field) \ --) -- --#define FIELD_VALUE(x, reg, field, value) \ --( \ -- (x & ~_F_MASK(reg ## _ ## field)) \ -- | _F_DENORMALIZE(value, reg ## _ ## field) \ --) -- --#define FIELD_CLEAR(reg, field) \ --( \ -- ~_F_MASK(reg ## _ ## field) \ --) -- --/* Field Macros */ -- --#define FIELD_START(field) (0 ? field) --#define FIELD_END(field) (1 ? field) --#define FIELD_SIZE(field) \ -- (1 + FIELD_END(field) - FIELD_START(field)) -- --#define FIELD_MASK(field) \ -- (((1 << (FIELD_SIZE(field)-1)) \ -- | ((1 << (FIELD_SIZE(field)-1)) - 1)) \ -- << FIELD_START(field)) -- --#define FIELD_NORMALIZE(reg, field) \ -- (((reg) & FIELD_MASK(field)) >> FIELD_START(field)) -- --#define FIELD_DENORMALIZE(field, value) \ -- (((value) << FIELD_START(field)) & FIELD_MASK(field)) -- --#define FIELD_INIT(reg, field, value) \ -- FIELD_DENORMALIZE(reg ## _ ## field, \ -- reg ## _ ## field ## _ ## value) -- --#define FIELD_INIT_VAL(reg, field, value) \ -- (FIELD_DENORMALIZE(reg ## _ ## field, value)) -- --#define FIELD_VAL_SET(x, r, f, v) ({ \ -- x = (x & ~FIELD_MASK(r ## _ ## f)) \ -- | FIELD_DENORMALIZE(r ## _ ## f, r ## _ ## f ## _ ## v) \ --}) -- --#define RGB(r, g, b) ((unsigned long)(((r) << 16) | ((g) << 8) | (b))) -- --/* Transparent info definition */ --typedef struct { -- unsigned long match; /* Matching pixel is OPAQUE/TRANSPARENT */ -- unsigned long select; /* Transparency controlled by SRC/DST */ -- unsigned long control; /* ENABLE/DISABLE transparency */ -- unsigned long color; /* Transparent color */ --} Transparent, *pTransparent; -- --#define PIXEL_DEPTH_1_BP 0 /* 1 bit per pixel */ --#define PIXEL_DEPTH_8_BPP 1 /* 8 bits per pixel */ --#define PIXEL_DEPTH_16_BPP 2 /* 16 bits per pixel */ --#define PIXEL_DEPTH_32_BPP 3 /* 32 bits per pixel */ --#define PIXEL_DEPTH_YUV422 8 /* 16 bits per pixel YUV422 */ --#define PIXEL_DEPTH_YUV420 9 /* 16 bits per pixel YUV420 */ -- --#define PATTERN_WIDTH 8 --#define PATTERN_HEIGHT 8 -- --#define TOP_TO_BOTTOM 0 --#define BOTTOM_TO_TOP 1 --#define RIGHT_TO_LEFT BOTTOM_TO_TOP --#define LEFT_TO_RIGHT TOP_TO_BOTTOM -- --/* Constants used in Transparent structure */ --#define MATCH_OPAQUE 0x00000000 --#define MATCH_TRANSPARENT 0x00000400 --#define SOURCE 0x00000000 --#define DESTINATION 0x00000200 -- --/* 2D registers. */ -- --#define DE_SOURCE 0x000000 --#define DE_SOURCE_WRAP 31 : 31 --#define DE_SOURCE_WRAP_DISABLE 0 --#define DE_SOURCE_WRAP_ENABLE 1 --#define DE_SOURCE_X_K1 29 : 16 --#define DE_SOURCE_Y_K2 15 : 0 -- --#define DE_DESTINATION 0x000004 --#define DE_DESTINATION_WRAP 31 : 31 --#define DE_DESTINATION_WRAP_DISABLE 0 --#define DE_DESTINATION_WRAP_ENABLE 1 --#define DE_DESTINATION_X 28 : 16 --#define DE_DESTINATION_Y 15 : 0 -- --#define DE_DIMENSION 0x000008 --#define DE_DIMENSION_X 28 : 16 --#define DE_DIMENSION_Y_ET 15 : 0 -- --#define DE_CONTROL 0x00000C --#define DE_CONTROL_STATUS 31 : 31 --#define DE_CONTROL_STATUS_STOP 0 --#define DE_CONTROL_STATUS_START 1 --#define DE_CONTROL_PATTERN 30 : 30 --#define DE_CONTROL_PATTERN_MONO 0 --#define DE_CONTROL_PATTERN_COLOR 1 --#define DE_CONTROL_UPDATE_DESTINATION_X 29 : 29 --#define DE_CONTROL_UPDATE_DESTINATION_X_DISABLE 0 --#define DE_CONTROL_UPDATE_DESTINATION_X_ENABLE 1 --#define DE_CONTROL_QUICK_START 28 : 28 --#define DE_CONTROL_QUICK_START_DISABLE 0 --#define DE_CONTROL_QUICK_START_ENABLE 1 --#define DE_CONTROL_DIRECTION 27 : 27 --#define DE_CONTROL_DIRECTION_LEFT_TO_RIGHT 0 --#define DE_CONTROL_DIRECTION_RIGHT_TO_LEFT 1 --#define DE_CONTROL_MAJOR 26 : 26 --#define DE_CONTROL_MAJOR_X 0 --#define DE_CONTROL_MAJOR_Y 1 --#define DE_CONTROL_STEP_X 25 : 25 --#define DE_CONTROL_STEP_X_POSITIVE 1 --#define DE_CONTROL_STEP_X_NEGATIVE 0 --#define DE_CONTROL_STEP_Y 24 : 24 --#define DE_CONTROL_STEP_Y_POSITIVE 1 --#define DE_CONTROL_STEP_Y_NEGATIVE 0 --#define DE_CONTROL_STRETCH 23 : 23 --#define DE_CONTROL_STRETCH_DISABLE 0 --#define DE_CONTROL_STRETCH_ENABLE 1 --#define DE_CONTROL_HOST 22 : 22 --#define DE_CONTROL_HOST_COLOR 0 --#define DE_CONTROL_HOST_MONO 1 --#define DE_CONTROL_LAST_PIXEL 21 : 21 --#define DE_CONTROL_LAST_PIXEL_OFF 0 --#define DE_CONTROL_LAST_PIXEL_ON 1 --#define DE_CONTROL_COMMAND 20 : 16 --#define DE_CONTROL_COMMAND_BITBLT 0 --#define DE_CONTROL_COMMAND_RECTANGLE_FILL 1 --#define DE_CONTROL_COMMAND_DE_TILE 2 --#define DE_CONTROL_COMMAND_TRAPEZOID_FILL 3 --#define DE_CONTROL_COMMAND_ALPHA_BLEND 4 --#define DE_CONTROL_COMMAND_RLE_STRIP 5 --#define DE_CONTROL_COMMAND_SHORT_STROKE 6 --#define DE_CONTROL_COMMAND_LINE_DRAW 7 --#define DE_CONTROL_COMMAND_HOST_WRITE 8 --#define DE_CONTROL_COMMAND_HOST_READ 9 --#define DE_CONTROL_COMMAND_HOST_WRITE_BOTTOM_UP 10 --#define DE_CONTROL_COMMAND_ROTATE 11 --#define DE_CONTROL_COMMAND_FONT 12 --#define DE_CONTROL_COMMAND_TEXTURE_LOAD 15 --#define DE_CONTROL_ROP_SELECT 15 : 15 --#define DE_CONTROL_ROP_SELECT_ROP3 0 --#define DE_CONTROL_ROP_SELECT_ROP2 1 --#define DE_CONTROL_ROP2_SOURCE 14 : 14 --#define DE_CONTROL_ROP2_SOURCE_BITMAP 0 --#define DE_CONTROL_ROP2_SOURCE_PATTERN 1 --#define DE_CONTROL_MONO_DATA 13 : 12 --#define DE_CONTROL_MONO_DATA_NOT_PACKED 0 --#define DE_CONTROL_MONO_DATA_8_PACKED 1 --#define DE_CONTROL_MONO_DATA_16_PACKED 2 --#define DE_CONTROL_MONO_DATA_32_PACKED 3 --#define DE_CONTROL_REPEAT_ROTATE 11 : 11 --#define DE_CONTROL_REPEAT_ROTATE_DISABLE 0 --#define DE_CONTROL_REPEAT_ROTATE_ENABLE 1 --#define DE_CONTROL_TRANSPARENCY_MATCH 10 : 10 --#define DE_CONTROL_TRANSPARENCY_MATCH_OPAQUE 0 --#define DE_CONTROL_TRANSPARENCY_MATCH_TRANSPARENT 1 --#define DE_CONTROL_TRANSPARENCY_SELECT 9 : 9 --#define DE_CONTROL_TRANSPARENCY_SELECT_SOURCE 0 --#define DE_CONTROL_TRANSPARENCY_SELECT_DESTINATION 1 --#define DE_CONTROL_TRANSPARENCY 8 : 8 --#define DE_CONTROL_TRANSPARENCY_DISABLE 0 --#define DE_CONTROL_TRANSPARENCY_ENABLE 1 --#define DE_CONTROL_ROP 7 : 0 -- --/* Pseudo fields. */ -- --#define DE_CONTROL_SHORT_STROKE_DIR 27 : 24 --#define DE_CONTROL_SHORT_STROKE_DIR_225 0 --#define DE_CONTROL_SHORT_STROKE_DIR_135 1 --#define DE_CONTROL_SHORT_STROKE_DIR_315 2 --#define DE_CONTROL_SHORT_STROKE_DIR_45 3 --#define DE_CONTROL_SHORT_STROKE_DIR_270 4 --#define DE_CONTROL_SHORT_STROKE_DIR_90 5 --#define DE_CONTROL_SHORT_STROKE_DIR_180 8 --#define DE_CONTROL_SHORT_STROKE_DIR_0 10 --#define DE_CONTROL_ROTATION 25 : 24 --#define DE_CONTROL_ROTATION_0 0 --#define DE_CONTROL_ROTATION_270 1 --#define DE_CONTROL_ROTATION_90 2 --#define DE_CONTROL_ROTATION_180 3 -- --#define DE_PITCH 0x000010 --#define DE_PITCH_DESTINATION 28 : 16 --#define DE_PITCH_SOURCE 12 : 0 -- --#define DE_FOREGROUND 0x000014 --#define DE_FOREGROUND_COLOR 31 : 0 -- --#define DE_BACKGROUND 0x000018 --#define DE_BACKGROUND_COLOR 31 : 0 -- --#define DE_STRETCH_FORMAT 0x00001C --#define DE_STRETCH_FORMAT_PATTERN_XY 30 : 30 --#define DE_STRETCH_FORMAT_PATTERN_XY_NORMAL 0 --#define DE_STRETCH_FORMAT_PATTERN_XY_OVERWRITE 1 --#define DE_STRETCH_FORMAT_PATTERN_Y 29 : 27 --#define DE_STRETCH_FORMAT_PATTERN_X 25 : 23 --#define DE_STRETCH_FORMAT_PIXEL_FORMAT 21 : 20 --#define DE_STRETCH_FORMAT_PIXEL_FORMAT_8 0 --#define DE_STRETCH_FORMAT_PIXEL_FORMAT_16 1 --#define DE_STRETCH_FORMAT_PIXEL_FORMAT_24 3 --#define DE_STRETCH_FORMAT_PIXEL_FORMAT_32 2 --#define DE_STRETCH_FORMAT_ADDRESSING 19 : 16 --#define DE_STRETCH_FORMAT_ADDRESSING_XY 0 --#define DE_STRETCH_FORMAT_ADDRESSING_LINEAR 15 --#define DE_STRETCH_FORMAT_SOURCE_HEIGHT 11 : 0 -- --#define DE_COLOR_COMPARE 0x000020 --#define DE_COLOR_COMPARE_COLOR 23 : 0 -- --#define DE_COLOR_COMPARE_MASK 0x000024 --#define DE_COLOR_COMPARE_MASK_MASKS 23 : 0 -- --#define DE_MASKS 0x000028 --#define DE_MASKS_BYTE_MASK 31 : 16 --#define DE_MASKS_BIT_MASK 15 : 0 -- --#define DE_CLIP_TL 0x00002C --#define DE_CLIP_TL_TOP 31 : 16 --#define DE_CLIP_TL_STATUS 13 : 13 --#define DE_CLIP_TL_STATUS_DISABLE 0 --#define DE_CLIP_TL_STATUS_ENABLE 1 --#define DE_CLIP_TL_INHIBIT 12 : 12 --#define DE_CLIP_TL_INHIBIT_OUTSIDE 0 --#define DE_CLIP_TL_INHIBIT_INSIDE 1 --#define DE_CLIP_TL_LEFT 11 : 0 -- --#define DE_CLIP_BR 0x000030 --#define DE_CLIP_BR_BOTTOM 31 : 16 --#define DE_CLIP_BR_RIGHT 12 : 0 -- --#define DE_MONO_PATTERN_LOW 0x000034 --#define DE_MONO_PATTERN_LOW_PATTERN 31 : 0 -- --#define DE_MONO_PATTERN_HIGH 0x000038 --#define DE_MONO_PATTERN_HIGH_PATTERN 31 : 0 -- --#define DE_WINDOW_WIDTH 0x00003C --#define DE_WINDOW_WIDTH_DESTINATION 28 : 16 --#define DE_WINDOW_WIDTH_SOURCE 12 : 0 -- --#define DE_WINDOW_SOURCE_BASE 0x000040 --#define DE_WINDOW_SOURCE_BASE_EXT 27 : 27 --#define DE_WINDOW_SOURCE_BASE_EXT_LOCAL 0 --#define DE_WINDOW_SOURCE_BASE_EXT_EXTERNAL 1 --#define DE_WINDOW_SOURCE_BASE_CS 26 : 26 --#define DE_WINDOW_SOURCE_BASE_CS_0 0 --#define DE_WINDOW_SOURCE_BASE_CS_1 1 --#define DE_WINDOW_SOURCE_BASE_ADDRESS 25 : 0 -- --#define DE_WINDOW_DESTINATION_BASE 0x000044 --#define DE_WINDOW_DESTINATION_BASE_EXT 27 : 27 --#define DE_WINDOW_DESTINATION_BASE_EXT_LOCAL 0 --#define DE_WINDOW_DESTINATION_BASE_EXT_EXTERNAL 1 --#define DE_WINDOW_DESTINATION_BASE_CS 26 : 26 --#define DE_WINDOW_DESTINATION_BASE_CS_0 0 --#define DE_WINDOW_DESTINATION_BASE_CS_1 1 --#define DE_WINDOW_DESTINATION_BASE_ADDRESS 25 : 0 -- --#define DE_ALPHA 0x000048 --#define DE_ALPHA_VALUE 7 : 0 -- --#define DE_WRAP 0x00004C --#define DE_WRAP_X 31 : 16 --#define DE_WRAP_Y 15 : 0 -- --#define DE_STATUS 0x000050 --#define DE_STATUS_CSC 1 : 1 --#define DE_STATUS_CSC_CLEAR 0 --#define DE_STATUS_CSC_NOT_ACTIVE 0 --#define DE_STATUS_CSC_ACTIVE 1 --#define DE_STATUS_2D 0 : 0 --#define DE_STATUS_2D_CLEAR 0 --#define DE_STATUS_2D_NOT_ACTIVE 0 --#define DE_STATUS_2D_ACTIVE 1 -- --/* Color Space Conversion registers. */ -- --#define CSC_Y_SOURCE_BASE 0x0000C8 --#define CSC_Y_SOURCE_BASE_EXT 27 : 27 --#define CSC_Y_SOURCE_BASE_EXT_LOCAL 0 --#define CSC_Y_SOURCE_BASE_EXT_EXTERNAL 1 --#define CSC_Y_SOURCE_BASE_CS 26 : 26 --#define CSC_Y_SOURCE_BASE_CS_0 0 --#define CSC_Y_SOURCE_BASE_CS_1 1 --#define CSC_Y_SOURCE_BASE_ADDRESS 25 : 0 -- --#define CSC_CONSTANTS 0x0000CC --#define CSC_CONSTANTS_Y 31 : 24 --#define CSC_CONSTANTS_R 23 : 16 --#define CSC_CONSTANTS_G 15 : 8 --#define CSC_CONSTANTS_B 7 : 0 -- --#define CSC_Y_SOURCE_X 0x0000D0 --#define CSC_Y_SOURCE_X_INTEGER 26 : 16 --#define CSC_Y_SOURCE_X_FRACTION 15 : 3 -- --#define CSC_Y_SOURCE_Y 0x0000D4 --#define CSC_Y_SOURCE_Y_INTEGER 27 : 16 --#define CSC_Y_SOURCE_Y_FRACTION 15 : 3 -- --#define CSC_U_SOURCE_BASE 0x0000D8 --#define CSC_U_SOURCE_BASE_EXT 27 : 27 --#define CSC_U_SOURCE_BASE_EXT_LOCAL 0 --#define CSC_U_SOURCE_BASE_EXT_EXTERNAL 1 --#define CSC_U_SOURCE_BASE_CS 26 : 26 --#define CSC_U_SOURCE_BASE_CS_0 0 --#define CSC_U_SOURCE_BASE_CS_1 1 --#define CSC_U_SOURCE_BASE_ADDRESS 25 : 0 -- --#define CSC_V_SOURCE_BASE 0x0000DC --#define CSC_V_SOURCE_BASE_EXT 27 : 27 --#define CSC_V_SOURCE_BASE_EXT_LOCAL 0 --#define CSC_V_SOURCE_BASE_EXT_EXTERNAL 1 --#define CSC_V_SOURCE_BASE_CS 26 : 26 --#define CSC_V_SOURCE_BASE_CS_0 0 --#define CSC_V_SOURCE_BASE_CS_1 1 --#define CSC_V_SOURCE_BASE_ADDRESS 25 : 0 -- --#define CSC_SOURCE_DIMENSION 0x0000E0 --#define CSC_SOURCE_DIMENSION_X 31 : 16 --#define CSC_SOURCE_DIMENSION_Y 15 : 0 -- --#define CSC_SOURCE_PITCH 0x0000E4 --#define CSC_SOURCE_PITCH_Y 31 : 16 --#define CSC_SOURCE_PITCH_UV 15 : 0 -- --#define CSC_DESTINATION 0x0000E8 --#define CSC_DESTINATION_WRAP 31 : 31 --#define CSC_DESTINATION_WRAP_DISABLE 0 --#define CSC_DESTINATION_WRAP_ENABLE 1 --#define CSC_DESTINATION_X 27 : 16 --#define CSC_DESTINATION_Y 11 : 0 -- --#define CSC_DESTINATION_DIMENSION 0x0000EC --#define CSC_DESTINATION_DIMENSION_X 31 : 16 --#define CSC_DESTINATION_DIMENSION_Y 15 : 0 -- --#define CSC_DESTINATION_PITCH 0x0000F0 --#define CSC_DESTINATION_PITCH_X 31 : 16 --#define CSC_DESTINATION_PITCH_Y 15 : 0 -- --#define CSC_SCALE_FACTOR 0x0000F4 --#define CSC_SCALE_FACTOR_HORIZONTAL 31 : 16 --#define CSC_SCALE_FACTOR_VERTICAL 15 : 0 -- --#define CSC_DESTINATION_BASE 0x0000F8 --#define CSC_DESTINATION_BASE_EXT 27 : 27 --#define CSC_DESTINATION_BASE_EXT_LOCAL 0 --#define CSC_DESTINATION_BASE_EXT_EXTERNAL 1 --#define CSC_DESTINATION_BASE_CS 26 : 26 --#define CSC_DESTINATION_BASE_CS_0 0 --#define CSC_DESTINATION_BASE_CS_1 1 --#define CSC_DESTINATION_BASE_ADDRESS 25 : 0 -- --#define CSC_CONTROL 0x0000FC --#define CSC_CONTROL_STATUS 31 : 31 --#define CSC_CONTROL_STATUS_STOP 0 --#define CSC_CONTROL_STATUS_START 1 --#define CSC_CONTROL_SOURCE_FORMAT 30 : 28 --#define CSC_CONTROL_SOURCE_FORMAT_YUV422 0 --#define CSC_CONTROL_SOURCE_FORMAT_YUV420I 1 --#define CSC_CONTROL_SOURCE_FORMAT_YUV420 2 --#define CSC_CONTROL_SOURCE_FORMAT_YVU9 3 --#define CSC_CONTROL_SOURCE_FORMAT_IYU1 4 --#define CSC_CONTROL_SOURCE_FORMAT_IYU2 5 --#define CSC_CONTROL_SOURCE_FORMAT_RGB565 6 --#define CSC_CONTROL_SOURCE_FORMAT_RGB8888 7 --#define CSC_CONTROL_DESTINATION_FORMAT 27 : 26 --#define CSC_CONTROL_DESTINATION_FORMAT_RGB565 0 --#define CSC_CONTROL_DESTINATION_FORMAT_RGB8888 1 --#define CSC_CONTROL_HORIZONTAL_FILTER 25 : 25 --#define CSC_CONTROL_HORIZONTAL_FILTER_DISABLE 0 --#define CSC_CONTROL_HORIZONTAL_FILTER_ENABLE 1 --#define CSC_CONTROL_VERTICAL_FILTER 24 : 24 --#define CSC_CONTROL_VERTICAL_FILTER_DISABLE 0 --#define CSC_CONTROL_VERTICAL_FILTER_ENABLE 1 --#define CSC_CONTROL_BYTE_ORDER 23 : 23 --#define CSC_CONTROL_BYTE_ORDER_YUYV 0 --#define CSC_CONTROL_BYTE_ORDER_UYVY 1 -- --#define DE_DATA_PORT_501 0x110000 --#define DE_DATA_PORT_712 0x400000 --#define DE_DATA_PORT_722 0x6000 -- --/* point to virtual Memory Map IO starting address */ --extern char *smtc_RegBaseAddress; --/* point to virtual video memory starting address */ --extern char *smtc_VRAMBaseAddress; --extern unsigned char smtc_de_busy; -- --extern unsigned long memRead32(unsigned long nOffset); --extern void memWrite32(unsigned long nOffset, unsigned long nData); --extern unsigned long SMTC_read2Dreg(unsigned long nOffset); -- --/* 2D functions */ --extern void deInit(unsigned int nModeWidth, unsigned int nModeHeight, -- unsigned int bpp); -- --extern void deWaitForNotBusy(void); -- --extern void deVerticalLine(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long nX, -- unsigned long nY, -- unsigned long dst_height, -- unsigned long nColor); -- --extern void deHorizontalLine(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long nX, -- unsigned long nY, -- unsigned long dst_width, -- unsigned long nColor); -- --extern void deLine(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long nX1, -- unsigned long nY1, -- unsigned long nX2, -- unsigned long nY2, -- unsigned long nColor); -- --extern void deFillRect(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long dst_X, -- unsigned long dst_Y, -- unsigned long dst_width, -- unsigned long dst_height, -- unsigned long nColor); -- --extern void deRotatePattern(unsigned char *pattern_dstaddr, -- unsigned long pattern_src_addr, -- unsigned long pattern_BPP, -- unsigned long pattern_stride, -- int patternX, -- int patternY); -- --extern void deCopy(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long dst_BPP, -- unsigned long dst_X, -- unsigned long dst_Y, -- unsigned long dst_width, -- unsigned long dst_height, -- unsigned long src_base, -- unsigned long src_pitch, -- unsigned long src_X, -- unsigned long src_Y, -- pTransparent pTransp, -- unsigned char nROP2); -- --/* -- * System memory to Video memory monochrome expansion. -- * -- * Source is monochrome image in system memory. This function expands the -- * monochrome data to color image in video memory. -- * -- * @pSrcbuf: pointer to start of source buffer in system memory -- * @srcDelta: Pitch value (in bytes) of the source buffer, +ive means top -- * down and -ive mean button up -- * @startBit: Mono data can start at any bit in a byte, this value should -- * be 0 to 7 -- * @dBase: Address of destination : offset in frame buffer -- * @dPitch: Pitch value of destination surface in BYTE -- * @bpp: Color depth of destination surface -- * @dx, dy: Starting coordinate of destination surface -- * @width, height: width and height of rectange in pixel value -- * @fColor,bColor: Foreground, Background color (corresponding to a 1, 0 in -- * the monochrome data) -- * @rop2: ROP value -- */ -- --extern long deSystemMem2VideoMemMonoBlt( -- const char *pSrcbuf, -- long srcDelta, -- unsigned long startBit, -- unsigned long dBase, -- unsigned long dPitch, -- unsigned long bpp, -- unsigned long dx, unsigned long dy, -- unsigned long width, unsigned long height, -- unsigned long fColor, -- unsigned long bColor, -- unsigned long rop2); -- --extern unsigned long deGetTransparency(void); --extern void deSetPixelFormat(unsigned long bpp); -diff -Nur linux-2.6.33/drivers/staging/sm7xx/smtcfb.c linux-lemote/drivers/staging/sm7xx/smtcfb.c ---- linux-2.6.33/drivers/staging/sm7xx/smtcfb.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/staging/sm7xx/smtcfb.c 2010-03-06 16:43:30.000000000 +0100 -@@ -6,12 +6,14 @@ - * Boyod boyod.yang@siliconmotion.com.cn - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This file is subject to the terms and conditions of the GNU General Public +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 +@@ -12,6 +12,8 @@ * License. See the file COPYING in the main directory of this archive for * more details. * @@ -40696,15 +43166,7 @@ diff -Nur linux-2.6.33/drivers/staging/sm7xx/smtcfb.c linux-lemote/drivers/stagi * Version 0.10.26192.21.01 * - Add PowerPC/Big endian support * - Add 2D support for Lynx -@@ -45,7 +47,6 @@ - struct screen_info smtc_screen_info; - - #include "smtcfb.h" --#include "smtc2d.h" - - #ifdef DEBUG - #define smdbg(format, arg...) printk(KERN_DEBUG format , ## arg) -@@ -107,6 +108,7 @@ +@@ -107,6 +109,7 @@ {"0x307", 1280, 1024, 8}, {"0x311", 640, 480, 16}, @@ -40712,222 +43174,9 @@ diff -Nur linux-2.6.33/drivers/staging/sm7xx/smtcfb.c linux-lemote/drivers/stagi {"0x314", 800, 600, 16}, {"0x317", 1024, 768, 16}, {"0x31A", 1280, 1024, 16}, -@@ -120,10 +122,6 @@ - char __iomem *smtc_RegBaseAddress; /* Memory Map IO starting address */ - char __iomem *smtc_VRAMBaseAddress; /* video memory starting address */ - --char *smtc_2DBaseAddress; /* 2D engine starting address */ --char *smtc_2Ddataport; /* 2D data port offset */ --short smtc_2Dacceleration; -- - static u32 colreg[17]; - static struct par_info hw; /* hardware information */ - -@@ -135,16 +133,6 @@ - - #define numSMTCchipIDs (sizeof(smtc_ChipIDs) / sizeof(u16)) - --void deWaitForNotBusy(void) --{ -- unsigned long i = 0x1000000; -- while (i--) { -- if ((smtc_seqr(0x16) & 0x18) == 0x10) -- break; -- } -- smtc_de_busy = 0; --} -- - static void sm712_set_timing(struct smtcfb_info *sfb, - struct par_info *ppar_info) - { -@@ -324,7 +312,7 @@ - return chan << bf->offset; - } - --static int smtcfb_blank(int blank_mode, struct fb_info *info) -+static int cfb_blank(int blank_mode, struct fb_info *info) - { - /* clear DPMS setting */ - switch (blank_mode) { -@@ -622,93 +610,13 @@ - } - #endif /* ! __BIG_ENDIAN */ - --#include "smtc2d.c" -- --void smtcfb_copyarea(struct fb_info *info, const struct fb_copyarea *area) --{ -- struct par_info *p = (struct par_info *)info->par; -- -- if (smtc_2Dacceleration) { -- if (!area->width || !area->height) -- return; -- -- deCopy(p->BaseAddressInVRAM, 0, info->var.bits_per_pixel, -- area->dx, area->dy, area->width, area->height, -- p->BaseAddressInVRAM, 0, area->sx, area->sy, 0, 0xC); -- -- } else -- cfb_copyarea(info, area); --} -- --void smtcfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect) --{ -- struct par_info *p = (struct par_info *)info->par; -- -- if (smtc_2Dacceleration) { -- if (!rect->width || !rect->height) -- return; -- if (info->var.bits_per_pixel >= 24) -- deFillRect(p->BaseAddressInVRAM, 0, rect->dx * 3, -- rect->dy * 3, rect->width * 3, rect->height, -- rect->color); -- else -- deFillRect(p->BaseAddressInVRAM, 0, rect->dx, rect->dy, -- rect->width, rect->height, rect->color); -- } else -- cfb_fillrect(info, rect); --} -- --void smtcfb_imageblit(struct fb_info *info, const struct fb_image *image) --{ -- struct par_info *p = (struct par_info *)info->par; -- u32 bg_col = 0, fg_col = 0; -- -- if ((smtc_2Dacceleration) && (image->depth == 1)) { -- if (smtc_de_busy) -- deWaitForNotBusy(); -- -- switch (info->var.bits_per_pixel) { -- case 8: -- bg_col = image->bg_color; -- fg_col = image->fg_color; -- break; -- case 16: -- bg_col = -- ((u32 *) (info->pseudo_palette))[image->bg_color]; -- fg_col = -- ((u32 *) (info->pseudo_palette))[image->fg_color]; -- break; -- case 32: -- bg_col = -- ((u32 *) (info->pseudo_palette))[image->bg_color]; -- fg_col = -- ((u32 *) (info->pseudo_palette))[image->fg_color]; -- break; -- } -- -- deSystemMem2VideoMemMonoBlt( -- image->data, -- image->width / 8, -- 0, -- p->BaseAddressInVRAM, -- 0, -- 0, -- image->dx, image->dy, -- image->width, image->height, -- fg_col, bg_col, -- 0x0C); -- -- } else -- cfb_imageblit(info, image); --} -- - static struct fb_ops smtcfb_ops = { - .owner = THIS_MODULE, - .fb_setcolreg = smtc_setcolreg, -- .fb_blank = smtcfb_blank, -- .fb_fillrect = smtcfb_fillrect, -- .fb_imageblit = smtcfb_imageblit, -- .fb_copyarea = smtcfb_copyarea, -+ .fb_blank = cfb_blank, -+ .fb_fillrect = cfb_fillrect, -+ .fb_imageblit = cfb_imageblit, -+ .fb_copyarea = cfb_copyarea, - #ifdef __BIG_ENDIAN - .fb_read = smtcfb_read, - .fb_write = smtcfb_write, -@@ -772,12 +680,6 @@ - hw.height = sfb->fb.var.yres; - hw.hz = 60; - smtc_set_timing(sfb, &hw); -- if (smtc_2Dacceleration) { -- printk("2D acceleration enabled!\n"); -- /* Init smtc drawing engine */ -- deInit(sfb->fb.var.xres, sfb->fb.var.yres, -- sfb->fb.var.bits_per_pixel); -- } - } - - /* -@@ -1004,9 +906,7 @@ - #endif - hw.m_pMMIO = (smtc_RegBaseAddress = - smtc_VRAMBaseAddress + 0x00700000); -- smtc_2DBaseAddress = (hw.m_pDPR = -- smtc_VRAMBaseAddress + 0x00408000); -- smtc_2Ddataport = smtc_VRAMBaseAddress + DE_DATA_PORT_712; -+ hw.m_pDPR = smtc_VRAMBaseAddress + 0x00408000; - hw.m_pVPR = hw.m_pLFB + 0x0040c000; - #ifdef __BIG_ENDIAN - if (sfb->fb.var.bits_per_pixel == 32) { -@@ -1035,27 +935,21 @@ - if (sfb->fb.var.bits_per_pixel == 32) - smtc_seqw(0x17, 0x30); - #endif --#ifdef CONFIG_FB_SM7XX_ACCEL -- smtc_2Dacceleration = 1; --#endif - break; - case 0x720: - sfb->fb.fix.mmio_start = pFramebufferPhysical; - sfb->fb.fix.mmio_len = 0x00200000; - smem_size = SM722_VIDEOMEMORYSIZE; -- smtc_2DBaseAddress = (hw.m_pDPR = -- ioremap(pFramebufferPhysical, 0x00a00000)); -+ hw.m_pDPR = ioremap(pFramebufferPhysical, 0x00a00000); - hw.m_pLFB = (smtc_VRAMBaseAddress = -- smtc_2DBaseAddress + 0x00200000); -+ hw.m_pDPR + 0x00200000); - hw.m_pMMIO = (smtc_RegBaseAddress = -- smtc_2DBaseAddress + 0x000c0000); -- smtc_2Ddataport = smtc_2DBaseAddress + DE_DATA_PORT_722; -- hw.m_pVPR = smtc_2DBaseAddress + 0x800; -+ hw.m_pDPR + 0x000c0000); -+ hw.m_pVPR = hw.m_pDPR + 0x800; - - smtc_seqw(0x62, 0xff); - smtc_seqw(0x6a, 0x0d); - smtc_seqw(0x6b, 0x02); -- smtc_2Dacceleration = 0; - break; - default: - printk(KERN_INFO -diff -Nur linux-2.6.33/drivers/staging/sm7xx/smtcfb.h linux-lemote/drivers/staging/sm7xx/smtcfb.h ---- linux-2.6.33/drivers/staging/sm7xx/smtcfb.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/staging/sm7xx/smtcfb.h 2010-03-06 16:43:30.000000000 +0100 -@@ -6,7 +6,7 @@ - * Boyod boyod.yang@siliconmotion.com.cn - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * 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 -diff -Nur linux-2.6.33/drivers/staging/sm7xx/TODO linux-lemote/drivers/staging/sm7xx/TODO ---- linux-2.6.33/drivers/staging/sm7xx/TODO 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/staging/sm7xx/TODO 2010-03-06 16:43:30.000000000 +0100 -@@ -1,5 +1,6 @@ - TODO: - - Dual head support -+- 2D acceleration support - - use kernel coding style - - checkpatch.pl clean - - refine the code and remove unused code -diff -Nur linux-2.6.33/drivers/usb/host/ohci-hcd.c linux-lemote/drivers/usb/host/ohci-hcd.c ---- linux-2.6.33/drivers/usb/host/ohci-hcd.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/usb/host/ohci-hcd.c 2010-03-06 16:43:31.000000000 +0100 +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 @@ -832,9 +832,13 @@ } @@ -40945,3 +43194,29 @@ diff -Nur linux-2.6.33/drivers/usb/host/ohci-hcd.c linux-lemote/drivers/usb/host } 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 +@@ -1571,8 +1571,8 @@ + if (default_par->mtrr_handle >= 0) + mtrr_del(default_par->mtrr_handle, info->fix.smem_start, + info->fix.smem_len); +- release_mem_region(pci_resource_start(pdev, 2), +- pci_resource_len(pdev, 2)); ++ release_region(pci_resource_start(pdev, 2), ++ pci_resource_len(pdev, 2)); + 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 +@@ -112,7 +112,7 @@ + static DEFINE_MUTEX(rfkill_global_mutex); + static LIST_HEAD(rfkill_fds); /* list of open fds of /dev/rfkill */ + +-static unsigned int rfkill_default_state = 1; ++static unsigned int rfkill_default_state; /* default: 0 = radio off */ + module_param_named(default_state, rfkill_default_state, uint, 0444); + MODULE_PARM_DESC(default_state, + "Default initial state for all radio types, 0 = radio off"); -- cgit v1.2.3