summaryrefslogtreecommitdiff
path: root/target/lemote/patches
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbx@openadk.org>2009-06-13 17:16:58 +0200
committerWaldemar Brodkorb <wbx@openadk.org>2009-06-13 17:16:58 +0200
commitd804be5baee6590ff6e91d267c8cb9933ed7ac60 (patch)
tree80bbdd6c78bd0e593c5184dba26e659906c15335 /target/lemote/patches
parentcc772db2d7b186a9b218cb5715be30ee9445888c (diff)
finetune lemote target
Diffstat (limited to 'target/lemote/patches')
-rw-r--r--target/lemote/patches/yeelong.patch25204
1 files changed, 25204 insertions, 0 deletions
diff --git a/target/lemote/patches/yeelong.patch b/target/lemote/patches/yeelong.patch
new file mode 100644
index 000000000..66aa62573
--- /dev/null
+++ b/target/lemote/patches/yeelong.patch
@@ -0,0 +1,25204 @@
+diff -Nur linux-2.6.30/.gitignore rt4ls/.gitignore
+--- linux-2.6.30/.gitignore 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/.gitignore 2009-06-12 16:27:01.954006636 +0200
+@@ -32,6 +32,7 @@
+ tags
+ TAGS
+ vmlinux
++vmlinux.32
+ System.map
+ Module.markers
+ Module.symvers
+diff -Nur linux-2.6.30/Documentation/kernel-parameters.txt rt4ls/Documentation/kernel-parameters.txt
+--- linux-2.6.30/Documentation/kernel-parameters.txt 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/Documentation/kernel-parameters.txt 2009-06-12 16:27:02.534042890 +0200
+@@ -1220,6 +1220,10 @@
+ (machvec) in a generic kernel.
+ Example: machvec=hpzx1_swiotlb
+
++ machtype= [Loongson] Share the same kernel image file between different
++ yeeloong laptop.
++ Example: machtype=lemote-yeeloong-2f-7inch
++
+ max_addr=nn[KMG] [KNL,BOOT,ia64] All physical memory greater
+ than or equal to this physical address is ignored.
+
+diff -Nur linux-2.6.30/arch/mips/Kconfig rt4ls/arch/mips/Kconfig
+--- linux-2.6.30/arch/mips/Kconfig 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/Kconfig 2009-06-12 16:27:08.186400556 +0200
+@@ -6,7 +6,7 @@
+ select HAVE_ARCH_KGDB
+ # Horrible source of confusion. Die, die, die ...
+ select EMBEDDED
+- select RTC_LIB
++ select RTC_LIB if !MACH_LOONGSON
+
+ mainmenu "Linux/MIPS Kernel Configuration"
+
+@@ -154,30 +154,15 @@
+ select SYS_SUPPORTS_64BIT_KERNEL if BROKEN
+ select SYS_SUPPORTS_LITTLE_ENDIAN
+
+-config LEMOTE_FULONG
+- bool "Lemote Fulong mini-PC"
+- select ARCH_SPARSEMEM_ENABLE
+- select CEVT_R4K
+- select CSRC_R4K
+- select SYS_HAS_CPU_LOONGSON2
+- select DMA_NONCOHERENT
+- select BOOT_ELF32
+- select BOARD_SCACHE
+- select HAVE_STD_PC_SERIAL_PORT
+- select HW_HAS_PCI
+- select I8259
+- select ISA
+- select IRQ_CPU
+- select SYS_SUPPORTS_32BIT_KERNEL
+- select SYS_SUPPORTS_64BIT_KERNEL
+- select SYS_SUPPORTS_LITTLE_ENDIAN
+- select SYS_SUPPORTS_HIGHMEM
+- select SYS_HAS_EARLY_PRINTK
+- select GENERIC_ISA_DMA_SUPPORT_BROKEN
+- select CPU_HAS_WB
++config MACH_LOONGSON
++ bool "Loongson family of machines"
+ help
+- Lemote Fulong mini-PC board based on the Chinese Loongson-2E CPU and
+- an FPGA northbridge
++ This enables the support of Loongson family of machines.
++
++ Loongson is a family of general-purpose MIPS-compatible CPUs.
++ developed at Institute of Computing Technology (ICT),
++ Chinese Academy of Sciences (CAS) in the People's Republic
++ of China. The chief architect is Professor Weiwu Hu.
+
+ config MIPS_MALTA
+ bool "MIPS Malta board"
+@@ -643,6 +628,7 @@
+ source "arch/mips/txx9/Kconfig"
+ source "arch/mips/vr41xx/Kconfig"
+ source "arch/mips/cavium-octeon/Kconfig"
++source "arch/mips/loongson/Kconfig"
+
+ endmenu
+
+@@ -1005,16 +991,29 @@
+ prompt "CPU type"
+ default CPU_R4X00
+
+-config CPU_LOONGSON2
+- bool "Loongson 2"
+- depends on SYS_HAS_CPU_LOONGSON2
+- select CPU_SUPPORTS_32BIT_KERNEL
+- select CPU_SUPPORTS_64BIT_KERNEL
+- select CPU_SUPPORTS_HIGHMEM
++config CPU_LOONGSON2E
++ bool "Loongson 2E"
++ depends on SYS_HAS_CPU_LOONGSON2E
++ select CPU_LOONGSON2
+ help
+ The Loongson 2E processor implements the MIPS III instruction set
+ with many extensions.
+
++ It has an internal FPGA northbridge, which is compatiable to
++ bonito64.
++
++config CPU_LOONGSON2F
++ bool "Loongson 2F"
++ depends on SYS_HAS_CPU_LOONGSON2F
++ select CPU_LOONGSON2
++ help
++ The Loongson 2F processor implements the MIPS III instruction set
++ with many extensions.
++
++ Loongson2F have built-in DDR2 and PCIX controller. The PCIX controller
++ have a similar programming interface with FPGA northbridge used in
++ Loongson2E.
++
+ config CPU_MIPS32_R1
+ bool "MIPS32 Release 1"
+ depends on SYS_HAS_CPU_MIPS32_R1
+@@ -1253,7 +1252,16 @@
+
+ endchoice
+
+-config SYS_HAS_CPU_LOONGSON2
++config CPU_LOONGSON2
++ bool
++ select CPU_SUPPORTS_32BIT_KERNEL
++ select CPU_SUPPORTS_64BIT_KERNEL
++ select CPU_SUPPORTS_HIGHMEM
++
++config SYS_HAS_CPU_LOONGSON2E
++ bool
++
++config SYS_HAS_CPU_LOONGSON2F
+ bool
+
+ config SYS_HAS_CPU_MIPS32_R1
+@@ -2121,6 +2129,9 @@
+
+ menu "Power management options"
+
++config ARCH_HIBERNATION_POSSIBLE
++ def_bool y
++
+ config ARCH_SUSPEND_POSSIBLE
+ def_bool y
+ depends on !SMP
+@@ -2129,6 +2140,23 @@
+
+ endmenu
+
++menu "CPU Frequency scaling"
++
++source "drivers/cpufreq/Kconfig"
++
++config LOONGSON2F_CPU_FREQ
++ bool "Loongson-2F CPU Frequency driver"
++ depends on CPU_LOONGSON2F && CPU_FREQ && (CS5536_MFGPT || I8253)
++ select CPU_FREQ_TABLE
++ help
++ This adds the cpufreq driver for Loongson-2F.
++
++ For details, take a look at <file:Documentation/cpu-freq>.
++
++ If unsure, say N.
++
++endmenu
++
+ source "net/Kconfig"
+
+ source "drivers/Kconfig"
+diff -Nur linux-2.6.30/arch/mips/Makefile rt4ls/arch/mips/Makefile
+--- linux-2.6.30/arch/mips/Makefile 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/Makefile 2009-06-12 16:27:08.186400556 +0200
+@@ -120,7 +120,14 @@
+ cflags-$(CONFIG_CPU_VR41XX) += -march=r4100 -Wa,--trap
+ cflags-$(CONFIG_CPU_R4X00) += -march=r4600 -Wa,--trap
+ cflags-$(CONFIG_CPU_TX49XX) += -march=r4600 -Wa,--trap
+-cflags-$(CONFIG_CPU_LOONGSON2) += -march=r4600 -Wa,--trap
++
++# only gcc >= 4.4 have the loongson-specific support
++cflags-$(CONFIG_CPU_LOONGSON2) += -Wa,--trap
++cflags-$(CONFIG_CPU_LOONGSON2E) += \
++ $(call cc-option,-march=loongson2e,-march=r4600) $(call cc-option,-mtune=loongson2e)
++cflags-$(CONFIG_CPU_LOONGSON2F) += \
++ $(call cc-option,-march=loongson2f,-march=r4600) $(call cc-optoin,-mtune=loongson2f)
++
+ cflags-$(CONFIG_CPU_MIPS32_R1) += $(call cc-option,-march=mips32,-mips32 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \
+ -Wa,-mips32 -Wa,--trap
+ cflags-$(CONFIG_CPU_MIPS32_R2) += $(call cc-option,-march=mips32r2,-mips32r2 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \
+@@ -307,9 +314,12 @@
+ #
+ # lemote fulong mini-PC board
+ #
+-core-$(CONFIG_LEMOTE_FULONG) +=arch/mips/lemote/lm2e/
+-load-$(CONFIG_LEMOTE_FULONG) +=0xffffffff80100000
+-cflags-$(CONFIG_LEMOTE_FULONG) += -I$(srctree)/arch/mips/include/asm/mach-lemote
++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_FULOONG2F) +=0xffffffff80200000
++load-$(CONFIG_LEMOTE_YEELOONG2F) +=0xffffffff80200000
+
+ #
+ # MIPS Malta board
+@@ -675,6 +685,9 @@
+
+ drivers-$(CONFIG_OPROFILE) += arch/mips/oprofile/
+
++# suspend and hibernation support
++drivers-$(CONFIG_PM) += arch/mips/power/
++
+ ifdef CONFIG_LASAT
+ rom.bin rom.sw: vmlinux
+ $(Q)$(MAKE) $(build)=arch/mips/lasat/image $@
+diff -Nur linux-2.6.30/arch/mips/configs/fulong_defconfig rt4ls/arch/mips/configs/fulong_defconfig
+--- linux-2.6.30/arch/mips/configs/fulong_defconfig 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/configs/fulong_defconfig 1970-01-01 01:00:00.000000000 +0100
+@@ -1,1912 +0,0 @@
+-#
+-# Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.28-rc6
+-# Fri Nov 28 17:53:48 2008
+-#
+-CONFIG_MIPS=y
+-
+-#
+-# Machine selection
+-#
+-# CONFIG_MACH_ALCHEMY is not set
+-# CONFIG_BASLER_EXCITE is not set
+-# CONFIG_BCM47XX 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_LEMOTE_FULONG=y
+-# CONFIG_MIPS_MALTA is not set
+-# CONFIG_MIPS_SIM is not set
+-# CONFIG_MACH_EMMA 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_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_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_NO_NO_OMIT_FRAME_POINTER=y
+-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+-CONFIG_CEVT_R4K=y
+-CONFIG_CSRC_R4K=y
+-CONFIG_DMA_NONCOHERENT=y
+-CONFIG_DMA_NEED_PCI_MAP_STATE=y
+-CONFIG_EARLY_PRINTK=y
+-CONFIG_SYS_HAS_EARLY_PRINTK=y
+-# CONFIG_HOTPLUG_CPU is not set
+-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
+-CONFIG_HAVE_STD_PC_SERIAL_PORT=y
+-
+-#
+-# CPU selection
+-#
+-CONFIG_CPU_LOONGSON2=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_SYS_HAS_CPU_LOONGSON2=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
+-
+-#
+-# 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_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_CPU_HAS_WB=y
+-CONFIG_CPU_HAS_SYNC=y
+-CONFIG_GENERIC_HARDIRQS=y
+-CONFIG_GENERIC_IRQ_PROBE=y
+-CONFIG_CPU_SUPPORTS_HIGHMEM=y
+-CONFIG_SYS_SUPPORTS_HIGHMEM=y
+-CONFIG_ARCH_FLATMEM_ENABLE=y
+-CONFIG_ARCH_POPULATES_NODE_MAP=y
+-CONFIG_ARCH_SPARSEMEM_ENABLE=y
+-CONFIG_SELECT_MEMORY_MODEL=y
+-CONFIG_FLATMEM_MANUAL=y
+-# CONFIG_DISCONTIGMEM_MANUAL is not set
+-# CONFIG_SPARSEMEM_MANUAL is not set
+-CONFIG_FLATMEM=y
+-CONFIG_FLAT_NODE_MEM_MAP=y
+-CONFIG_SPARSEMEM_STATIC=y
+-CONFIG_PAGEFLAGS_EXTENDED=y
+-CONFIG_SPLIT_PTLOCK_CPUS=4
+-CONFIG_RESOURCES_64BIT=y
+-CONFIG_PHYS_ADDR_T_64BIT=y
+-CONFIG_ZONE_DMA_FLAG=0
+-CONFIG_VIRT_TO_BUS=y
+-CONFIG_UNEVICTABLE_LRU=y
+-CONFIG_TICK_ONESHOT=y
+-CONFIG_NO_HZ=y
+-CONFIG_HIGH_RES_TIMERS=y
+-CONFIG_GENERIC_CLOCKEVENTS_BUILD=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=y
+-# CONFIG_PREEMPT is not set
+-# CONFIG_KEXEC is not set
+-CONFIG_SECCOMP=y
+-CONFIG_LOCKDEP_SUPPORT=y
+-CONFIG_STACKTRACE_SUPPORT=y
+-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+-
+-#
+-# General setup
+-#
+-CONFIG_EXPERIMENTAL=y
+-CONFIG_BROKEN_ON_SMP=y
+-CONFIG_INIT_ENV_ARG_LIMIT=32
+-CONFIG_LOCALVERSION="lm32"
+-# CONFIG_LOCALVERSION_AUTO is not set
+-CONFIG_SWAP=y
+-CONFIG_SYSVIPC=y
+-CONFIG_SYSVIPC_SYSCTL=y
+-CONFIG_POSIX_MQUEUE=y
+-CONFIG_BSD_PROCESS_ACCT=y
+-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+-# CONFIG_TASKSTATS is not set
+-# CONFIG_AUDIT is not set
+-CONFIG_IKCONFIG=y
+-CONFIG_IKCONFIG_PROC=y
+-CONFIG_LOG_BUF_SHIFT=14
+-# CONFIG_CGROUPS is not set
+-# CONFIG_GROUP_SCHED is not set
+-CONFIG_SYSFS_DEPRECATED=y
+-CONFIG_SYSFS_DEPRECATED_V2=y
+-# CONFIG_RELAY is not set
+-CONFIG_NAMESPACES=y
+-# CONFIG_UTS_NS is not set
+-# CONFIG_IPC_NS is not set
+-CONFIG_USER_NS=y
+-CONFIG_PID_NS=y
+-# CONFIG_BLK_DEV_INITRD is not set
+-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+-CONFIG_SYSCTL=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 is not set
+-# CONFIG_COMPAT_BRK is not set
+-CONFIG_BASE_FULL=y
+-CONFIG_FUTEX=y
+-CONFIG_ANON_INODES=y
+-CONFIG_EPOLL=y
+-CONFIG_SIGNALFD=y
+-CONFIG_TIMERFD=y
+-CONFIG_EVENTFD=y
+-CONFIG_SHMEM=y
+-CONFIG_AIO=y
+-CONFIG_VM_EVENT_COUNTERS=y
+-CONFIG_PCI_QUIRKS=y
+-CONFIG_SLAB=y
+-# CONFIG_SLUB is not set
+-# CONFIG_SLOB is not set
+-CONFIG_PROFILING=y
+-# CONFIG_MARKERS is not set
+-CONFIG_OPROFILE=m
+-CONFIG_HAVE_OPROFILE=y
+-# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
+-CONFIG_SLABINFO=y
+-CONFIG_RT_MUTEXES=y
+-# CONFIG_TINY_SHMEM is not set
+-CONFIG_BASE_SMALL=0
+-CONFIG_MODULES=y
+-# CONFIG_MODULE_FORCE_LOAD is not set
+-CONFIG_MODULE_UNLOAD=y
+-CONFIG_MODULE_FORCE_UNLOAD=y
+-# CONFIG_MODVERSIONS is not set
+-# CONFIG_MODULE_SRCVERSION_ALL is not set
+-CONFIG_KMOD=y
+-CONFIG_BLOCK=y
+-# CONFIG_BLK_DEV_IO_TRACE is not set
+-CONFIG_BLK_DEV_BSG=y
+-# CONFIG_BLK_DEV_INTEGRITY is not set
+-CONFIG_BLOCK_COMPAT=y
+-
+-#
+-# IO Schedulers
+-#
+-CONFIG_IOSCHED_NOOP=y
+-CONFIG_IOSCHED_AS=y
+-CONFIG_IOSCHED_DEADLINE=y
+-CONFIG_IOSCHED_CFQ=y
+-# CONFIG_DEFAULT_AS is not set
+-# CONFIG_DEFAULT_DEADLINE is not set
+-CONFIG_DEFAULT_CFQ=y
+-# CONFIG_DEFAULT_NOOP is not set
+-CONFIG_DEFAULT_IOSCHED="cfq"
+-CONFIG_CLASSIC_RCU=y
+-CONFIG_FREEZER=y
+-
+-#
+-# 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_LEGACY=y
+-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=y
+-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_SUSPEND_POSSIBLE=y
+-CONFIG_PM=y
+-# CONFIG_PM_DEBUG is not set
+-CONFIG_PM_SLEEP=y
+-CONFIG_SUSPEND=y
+-CONFIG_SUSPEND_FREEZER=y
+-CONFIG_NET=y
+-
+-#
+-# Networking options
+-#
+-CONFIG_PACKET=y
+-CONFIG_PACKET_MMAP=y
+-CONFIG_UNIX=y
+-CONFIG_XFRM=y
+-# CONFIG_XFRM_USER is not set
+-# 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_INET=y
+-CONFIG_IP_MULTICAST=y
+-# CONFIG_IP_ADVANCED_ROUTER is not set
+-CONFIG_IP_FIB_HASH=y
+-CONFIG_IP_PNP=y
+-# CONFIG_IP_PNP_DHCP is not set
+-CONFIG_IP_PNP_BOOTP=y
+-# CONFIG_IP_PNP_RARP is not set
+-CONFIG_NET_IPIP=m
+-CONFIG_NET_IPGRE=m
+-CONFIG_NET_IPGRE_BROADCAST=y
+-# CONFIG_IP_MROUTE 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=m
+-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
+-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
+-CONFIG_INET_XFRM_MODE_BEET=y
+-# 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=y
+-# CONFIG_NETFILTER_DEBUG is not set
+-CONFIG_NETFILTER_ADVANCED=y
+-
+-#
+-# Core Netfilter Configuration
+-#
+-CONFIG_NETFILTER_NETLINK=m
+-CONFIG_NETFILTER_NETLINK_QUEUE=m
+-CONFIG_NETFILTER_NETLINK_LOG=m
+-# CONFIG_NF_CONNTRACK is not set
+-CONFIG_NETFILTER_XTABLES=m
+-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+-# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
+-CONFIG_NETFILTER_XT_TARGET_MARK=m
+-# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
+-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+-CONFIG_NETFILTER_XT_TARGET_RATEEST=m
+-CONFIG_NETFILTER_XT_TARGET_TRACE=m
+-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
+-CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+-CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+-CONFIG_NETFILTER_XT_MATCH_DCCP=m
+-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
+-CONFIG_NETFILTER_XT_MATCH_ESP=m
+-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
+-CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
+-CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+-CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+-CONFIG_NETFILTER_XT_MATCH_MAC=m
+-CONFIG_NETFILTER_XT_MATCH_MARK=m
+-CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+-CONFIG_NETFILTER_XT_MATCH_OWNER=m
+-# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
+-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+-CONFIG_NETFILTER_XT_MATCH_QUOTA=m
+-CONFIG_NETFILTER_XT_MATCH_RATEEST=m
+-CONFIG_NETFILTER_XT_MATCH_REALM=m
+-CONFIG_NETFILTER_XT_MATCH_RECENT=m
+-# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set
+-CONFIG_NETFILTER_XT_MATCH_SCTP=m
+-CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
+-CONFIG_NETFILTER_XT_MATCH_STRING=m
+-CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+-CONFIG_NETFILTER_XT_MATCH_TIME=m
+-CONFIG_NETFILTER_XT_MATCH_U32=m
+-# CONFIG_IP_VS is not set
+-
+-#
+-# IP: Netfilter Configuration
+-#
+-# CONFIG_NF_DEFRAG_IPV4 is not set
+-CONFIG_IP_NF_QUEUE=m
+-CONFIG_IP_NF_IPTABLES=m
+-CONFIG_IP_NF_MATCH_ADDRTYPE=m
+-CONFIG_IP_NF_MATCH_AH=m
+-CONFIG_IP_NF_MATCH_ECN=m
+-CONFIG_IP_NF_MATCH_TTL=m
+-CONFIG_IP_NF_FILTER=m
+-CONFIG_IP_NF_TARGET_REJECT=m
+-CONFIG_IP_NF_TARGET_LOG=m
+-CONFIG_IP_NF_TARGET_ULOG=m
+-CONFIG_IP_NF_MANGLE=m
+-CONFIG_IP_NF_TARGET_ECN=m
+-CONFIG_IP_NF_TARGET_TTL=m
+-CONFIG_IP_NF_RAW=m
+-CONFIG_IP_NF_ARPTABLES=m
+-CONFIG_IP_NF_ARPFILTER=m
+-CONFIG_IP_NF_ARP_MANGLE=m
+-# CONFIG_IP_DCCP is not set
+-# CONFIG_IP_SCTP 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_NET_SCHED is not set
+-CONFIG_NET_CLS_ROUTE=y
+-
+-#
+-# 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_PHONET=m
+-CONFIG_WIRELESS=y
+-# CONFIG_CFG80211 is not set
+-CONFIG_WIRELESS_OLD_REGULATORY=y
+-CONFIG_WIRELESS_EXT=y
+-CONFIG_WIRELESS_EXT_SYSFS=y
+-# CONFIG_MAC80211 is not set
+-CONFIG_IEEE80211=m
+-# CONFIG_IEEE80211_DEBUG is not set
+-CONFIG_IEEE80211_CRYPT_WEP=m
+-# CONFIG_IEEE80211_CRYPT_CCMP is not set
+-# CONFIG_IEEE80211_CRYPT_TKIP is not set
+-# CONFIG_RFKILL is not set
+-CONFIG_NET_9P=m
+-# CONFIG_NET_9P_DEBUG is not set
+-
+-#
+-# Device Drivers
+-#
+-
+-#
+-# Generic Driver Options
+-#
+-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+-CONFIG_STANDALONE=y
+-CONFIG_PREVENT_FIRMWARE_BUILD=y
+-CONFIG_FW_LOADER=m
+-CONFIG_FIRMWARE_IN_KERNEL=y
+-CONFIG_EXTRA_FIRMWARE=""
+-# CONFIG_SYS_HYPERVISOR is not set
+-# CONFIG_CONNECTOR is not set
+-CONFIG_MTD=m
+-# CONFIG_MTD_DEBUG is not set
+-# CONFIG_MTD_CONCAT is not set
+-# CONFIG_MTD_PARTITIONS is not set
+-
+-#
+-# User Modules And Translation Layers
+-#
+-CONFIG_MTD_CHAR=m
+-CONFIG_MTD_BLKDEVS=m
+-CONFIG_MTD_BLOCK=m
+-# CONFIG_MTD_BLOCK_RO is not set
+-# CONFIG_FTL is not set
+-# CONFIG_NFTL is not set
+-# CONFIG_INFTL is not set
+-# CONFIG_RFD_FTL is not set
+-# CONFIG_SSFDC is not set
+-# CONFIG_MTD_OOPS is not set
+-
+-#
+-# RAM/ROM/Flash chip drivers
+-#
+-CONFIG_MTD_CFI=m
+-CONFIG_MTD_JEDECPROBE=m
+-CONFIG_MTD_GEN_PROBE=m
+-CONFIG_MTD_CFI_ADV_OPTIONS=y
+-CONFIG_MTD_CFI_NOSWAP=y
+-# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+-# CONFIG_MTD_CFI_GEOMETRY is not set
+-CONFIG_MTD_MAP_BANK_WIDTH_1=y
+-CONFIG_MTD_MAP_BANK_WIDTH_2=y
+-CONFIG_MTD_MAP_BANK_WIDTH_4=y
+-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+-CONFIG_MTD_CFI_I1=y
+-CONFIG_MTD_CFI_I2=y
+-# CONFIG_MTD_CFI_I4 is not set
+-# CONFIG_MTD_CFI_I8 is not set
+-# CONFIG_MTD_OTP is not set
+-# CONFIG_MTD_CFI_INTELEXT is not set
+-CONFIG_MTD_CFI_AMDSTD=m
+-CONFIG_MTD_CFI_STAA=m
+-CONFIG_MTD_CFI_UTIL=m
+-# CONFIG_MTD_RAM is not set
+-# CONFIG_MTD_ROM is not set
+-# CONFIG_MTD_ABSENT is not set
+-
+-#
+-# Mapping drivers for chip access
+-#
+-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+-CONFIG_MTD_PHYSMAP=m
+-CONFIG_MTD_PHYSMAP_START=0x1fc00000
+-CONFIG_MTD_PHYSMAP_LEN=0x80000
+-CONFIG_MTD_PHYSMAP_BANKWIDTH=1
+-# CONFIG_MTD_INTEL_VR_NOR is not set
+-# CONFIG_MTD_PLATRAM is not set
+-
+-#
+-# Self-contained MTD device drivers
+-#
+-# CONFIG_MTD_PMC551 is not set
+-# CONFIG_MTD_SLRAM is not set
+-# CONFIG_MTD_PHRAM is not set
+-# CONFIG_MTD_MTDRAM is not set
+-# CONFIG_MTD_BLOCK2MTD is not set
+-
+-#
+-# Disk-On-Chip Device Drivers
+-#
+-# CONFIG_MTD_DOC2000 is not set
+-# CONFIG_MTD_DOC2001 is not set
+-# CONFIG_MTD_DOC2001PLUS is not set
+-# CONFIG_MTD_NAND is not set
+-# CONFIG_MTD_ONENAND is not set
+-
+-#
+-# UBI - Unsorted block images
+-#
+-# CONFIG_MTD_UBI 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=m
+-# 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=m
+-CONFIG_BLK_DEV_RAM_COUNT=16
+-CONFIG_BLK_DEV_RAM_SIZE=4096
+-# CONFIG_BLK_DEV_XIP is not set
+-CONFIG_CDROM_PKTCDVD=m
+-CONFIG_CDROM_PKTCDVD_BUFFERS=8
+-# CONFIG_CDROM_PKTCDVD_WCACHE is not set
+-CONFIG_ATA_OVER_ETH=m
+-# 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_TIMINGS=y
+-CONFIG_IDE_ATAPI=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=y
+-CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
+-# CONFIG_BLK_DEV_IDETAPE is not set
+-CONFIG_BLK_DEV_IDESCSI=y
+-CONFIG_IDE_TASK_IOCTL=y
+-CONFIG_IDE_PROC_FS=y
+-
+-#
+-# IDE chipset support/bugfixes
+-#
+-CONFIG_IDE_GENERIC=y
+-# 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=y
+-# CONFIG_BLK_DEV_OFFBOARD is not set
+-CONFIG_BLK_DEV_GENERIC=y
+-# 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 is not set
+-# 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_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=y
+-# 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_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=y
+-
+-#
+-# 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=y
+-CONFIG_BLK_DEV_SR_VENDOR=y
+-CONFIG_CHR_DEV_SG=y
+-# CONFIG_CHR_DEV_SCH is not set
+-
+-#
+-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+-#
+-# CONFIG_SCSI_MULTI_LUN is not set
+-CONFIG_SCSI_CONSTANTS=y
+-# CONFIG_SCSI_LOGGING is not set
+-# CONFIG_SCSI_SCAN_ASYNC is not set
+-CONFIG_SCSI_WAIT_SCAN=m
+-
+-#
+-# 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_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_ATA is not set
+-# CONFIG_MD is not set
+-# CONFIG_FUSION is not set
+-
+-#
+-# IEEE 1394 (FireWire) support
+-#
+-
+-#
+-# Enable only one of the two stacks, unless you know what you are doing
+-#
+-# 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=m
+-# CONFIG_EQUALIZER is not set
+-# CONFIG_TUN is not set
+-CONFIG_VETH=m
+-# CONFIG_ARCNET is not set
+-CONFIG_PHYLIB=m
+-
+-#
+-# MII PHY device drivers
+-#
+-CONFIG_MARVELL_PHY=m
+-CONFIG_DAVICOM_PHY=m
+-CONFIG_QSEMI_PHY=m
+-CONFIG_LXT_PHY=m
+-CONFIG_CICADA_PHY=m
+-# CONFIG_VITESSE_PHY is not set
+-# CONFIG_SMSC_PHY is not set
+-# CONFIG_BROADCOM_PHY is not set
+-# CONFIG_ICPLUS_PHY is not set
+-# CONFIG_REALTEK_PHY is not set
+-# CONFIG_MDIO_BITBANG 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_NET_VENDOR_RACAL 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_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_EEPRO100 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 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
+-# CONFIG_SIS900 is not set
+-# CONFIG_EPIC100 is not set
+-# CONFIG_SUNDANCE is not set
+-# CONFIG_TLAN 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_NS83820 is not set
+-# CONFIG_HAMACHI is not set
+-# CONFIG_YELLOWFIN is not set
+-# CONFIG_R8169 is not set
+-# 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_QLA3XXX is not set
+-# CONFIG_ATL1 is not set
+-# CONFIG_ATL1E is not set
+-# CONFIG_JME is not set
+-CONFIG_NETDEV_10000=y
+-# CONFIG_CHELSIO_T1 is not set
+-# CONFIG_CHELSIO_T3 is not set
+-# CONFIG_ENIC is not set
+-# CONFIG_IXGBE is not set
+-# CONFIG_IXGB is not set
+-# CONFIG_S2IO is not set
+-# CONFIG_MYRI10GE is not set
+-# CONFIG_NETXEN_NIC is not set
+-# CONFIG_NIU is not set
+-# CONFIG_MLX4_EN is not set
+-# CONFIG_MLX4_CORE is not set
+-# CONFIG_TEHUTI is not set
+-# CONFIG_BNX2X is not set
+-# CONFIG_QLGE is not set
+-# CONFIG_SFC is not set
+-# CONFIG_TR is not set
+-
+-#
+-# Wireless LAN
+-#
+-# CONFIG_WLAN_PRE80211 is not set
+-# CONFIG_WLAN_80211 is not set
+-# CONFIG_IWLWIFI_LEDS is not set
+-
+-#
+-# 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_WAN is not set
+-# CONFIG_FDDI is not set
+-# CONFIG_HIPPI is not set
+-CONFIG_PPP=m
+-CONFIG_PPP_MULTILINK=y
+-CONFIG_PPP_FILTER=y
+-CONFIG_PPP_ASYNC=m
+-CONFIG_PPP_SYNC_TTY=m
+-CONFIG_PPP_DEFLATE=m
+-CONFIG_PPP_BSDCOMP=m
+-CONFIG_PPP_MPPE=m
+-CONFIG_PPPOE=m
+-CONFIG_PPPOL2TP=m
+-CONFIG_SLIP=m
+-CONFIG_SLIP_COMPRESSED=y
+-CONFIG_SLHC=m
+-CONFIG_SLIP_SMART=y
+-CONFIG_SLIP_MODE_SLIP6=y
+-CONFIG_NET_FC=y
+-# CONFIG_NETCONSOLE is not set
+-# CONFIG_NETPOLL is not set
+-# CONFIG_NET_POLL_CONTROLLER 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
+-
+-#
+-# 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=m
+-# CONFIG_KEYBOARD_SUNKBD is not set
+-# CONFIG_KEYBOARD_LKKBD is not set
+-# CONFIG_KEYBOARD_XTKBD is not set
+-# CONFIG_KEYBOARD_NEWTON is not set
+-# CONFIG_KEYBOARD_STOWAWAY is not set
+-CONFIG_INPUT_MOUSE=y
+-CONFIG_MOUSE_PS2=y
+-CONFIG_MOUSE_PS2_ALPS=y
+-CONFIG_MOUSE_PS2_LOGIPS2PP=y
+-CONFIG_MOUSE_PS2_SYNAPTICS=y
+-CONFIG_MOUSE_PS2_LIFEBOOK=y
+-CONFIG_MOUSE_PS2_TRACKPOINT=y
+-# CONFIG_MOUSE_PS2_ELANTECH is not set
+-# CONFIG_MOUSE_PS2_TOUCHKIT is not set
+-CONFIG_MOUSE_SERIAL=y
+-# 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=y
+-# CONFIG_SERIO_PCIPS2 is not set
+-CONFIG_SERIO_LIBPS2=y
+-# CONFIG_SERIO_RAW 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=y
+-# 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=y
+-CONFIG_SERIAL_8250_NR_UARTS=2
+-CONFIG_SERIAL_8250_RUNTIME_UARTS=2
+-# 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_UNIX98_PTYS=y
+-CONFIG_LEGACY_PTYS=y
+-CONFIG_LEGACY_PTY_COUNT=256
+-# CONFIG_IPMI_HANDLER is not set
+-CONFIG_HW_RANDOM=y
+-# 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=m
+-CONFIG_I2C_BOARDINFO=y
+-CONFIG_I2C_CHARDEV=m
+-CONFIG_I2C_HELPER_AUTO=y
+-
+-#
+-# I2C Hardware Bus support
+-#
+-
+-#
+-# PC SMBus host controller drivers
+-#
+-# CONFIG_I2C_ALI1535 is not set
+-# CONFIG_I2C_ALI1563 is not set
+-# CONFIG_I2C_ALI15X3 is not set
+-# CONFIG_I2C_AMD756 is not set
+-# CONFIG_I2C_AMD8111 is not set
+-# CONFIG_I2C_I801 is not set
+-# CONFIG_I2C_ISCH is not set
+-# CONFIG_I2C_PIIX4 is not set
+-# CONFIG_I2C_NFORCE2 is not set
+-# CONFIG_I2C_SIS5595 is not set
+-# CONFIG_I2C_SIS630 is not set
+-# CONFIG_I2C_SIS96X is not set
+-# CONFIG_I2C_VIA is not set
+-CONFIG_I2C_VIAPRO=m
+-
+-#
+-# I2C system bus drivers (mostly embedded / system-on-chip)
+-#
+-# CONFIG_I2C_OCORES is not set
+-# CONFIG_I2C_SIMTEC is not set
+-
+-#
+-# External I2C/SMBus adapter drivers
+-#
+-# CONFIG_I2C_PARPORT_LIGHT is not set
+-# CONFIG_I2C_TAOS_EVM is not set
+-# CONFIG_I2C_TINY_USB is not set
+-
+-#
+-# Graphics adapter I2C/DDC channel drivers
+-#
+-# CONFIG_I2C_VOODOO3 is not set
+-
+-#
+-# Other I2C/SMBus bus drivers
+-#
+-# CONFIG_I2C_ELEKTOR is not set
+-# CONFIG_I2C_PCA_ISA is not set
+-# CONFIG_I2C_PCA_PLATFORM is not set
+-# CONFIG_I2C_STUB is not set
+-
+-#
+-# Miscellaneous I2C Chip support
+-#
+-# CONFIG_DS1682 is not set
+-# CONFIG_EEPROM_AT24 is not set
+-# CONFIG_EEPROM_LEGACY is not set
+-# CONFIG_SENSORS_PCF8574 is not set
+-# CONFIG_PCF8575 is not set
+-# CONFIG_SENSORS_PCA9539 is not set
+-# CONFIG_SENSORS_PCF8591 is not set
+-# CONFIG_SENSORS_MAX6875 is not set
+-# CONFIG_SENSORS_TSL2550 is not set
+-# CONFIG_I2C_DEBUG_CORE is not set
+-# CONFIG_I2C_DEBUG_ALGO is not set
+-# CONFIG_I2C_DEBUG_BUS is not set
+-# CONFIG_I2C_DEBUG_CHIP is not set
+-# CONFIG_SPI is not set
+-# CONFIG_W1 is not set
+-# CONFIG_POWER_SUPPLY is not set
+-# CONFIG_HWMON is not set
+-# CONFIG_THERMAL is not set
+-# CONFIG_THERMAL_HWMON 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_MFD_WM8400 is not set
+-# CONFIG_MFD_WM8350_I2C is not set
+-# CONFIG_REGULATOR is not set
+-
+-#
+-# Multimedia devices
+-#
+-
+-#
+-# Multimedia core support
+-#
+-CONFIG_VIDEO_DEV=m
+-CONFIG_VIDEO_V4L2_COMMON=m
+-CONFIG_VIDEO_ALLOW_V4L1=y
+-CONFIG_VIDEO_V4L1_COMPAT=y
+-# CONFIG_DVB_CORE is not set
+-CONFIG_VIDEO_MEDIA=m
+-
+-#
+-# Multimedia drivers
+-#
+-CONFIG_MEDIA_ATTACH=y
+-CONFIG_MEDIA_TUNER=m
+-CONFIG_MEDIA_TUNER_CUSTOMIZE=y
+-CONFIG_MEDIA_TUNER_SIMPLE=m
+-CONFIG_MEDIA_TUNER_TDA8290=m
+-CONFIG_MEDIA_TUNER_TDA827X=m
+-CONFIG_MEDIA_TUNER_TDA18271=m
+-CONFIG_MEDIA_TUNER_TDA9887=m
+-CONFIG_MEDIA_TUNER_TEA5761=m
+-CONFIG_MEDIA_TUNER_TEA5767=m
+-CONFIG_MEDIA_TUNER_MT20XX=m
+-CONFIG_MEDIA_TUNER_MT2060=m
+-CONFIG_MEDIA_TUNER_MT2266=m
+-CONFIG_MEDIA_TUNER_MT2131=m
+-CONFIG_MEDIA_TUNER_QT1010=m
+-CONFIG_MEDIA_TUNER_XC2028=m
+-CONFIG_MEDIA_TUNER_XC5000=m
+-CONFIG_MEDIA_TUNER_MXL5005S=m
+-CONFIG_MEDIA_TUNER_MXL5007T=m
+-CONFIG_VIDEO_V4L2=m
+-CONFIG_VIDEO_V4L1=m
+-CONFIG_VIDEOBUF_GEN=m
+-CONFIG_VIDEOBUF_VMALLOC=m
+-CONFIG_VIDEOBUF_DMA_CONTIG=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_BT848 is not set
+-# CONFIG_VIDEO_PMS is not set
+-# CONFIG_VIDEO_CPIA is not set
+-# CONFIG_VIDEO_CPIA2 is not set
+-# CONFIG_VIDEO_SAA5246A is not set
+-# CONFIG_VIDEO_SAA5249 is not set
+-# CONFIG_VIDEO_STRADIS is not set
+-# CONFIG_VIDEO_SAA7134 is not set
+-# CONFIG_VIDEO_MXB is not set
+-# CONFIG_VIDEO_HEXIUM_ORION is not set
+-# CONFIG_VIDEO_HEXIUM_GEMINI is not set
+-# CONFIG_VIDEO_CX88 is not set
+-# CONFIG_VIDEO_IVTV is not set
+-# CONFIG_VIDEO_CAFE_CCIC is not set
+-CONFIG_SOC_CAMERA=m
+-CONFIG_SOC_CAMERA_MT9M001=m
+-CONFIG_SOC_CAMERA_MT9M111=m
+-CONFIG_SOC_CAMERA_MT9V022=m
+-CONFIG_SOC_CAMERA_PLATFORM=m
+-CONFIG_VIDEO_SH_MOBILE_CEU=m
+-CONFIG_V4L_USB_DRIVERS=y
+-CONFIG_USB_VIDEO_CLASS=m
+-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
+-CONFIG_USB_GSPCA=m
+-CONFIG_USB_M5602=m
+-CONFIG_USB_GSPCA_CONEX=m
+-CONFIG_USB_GSPCA_ETOMS=m
+-CONFIG_USB_GSPCA_FINEPIX=m
+-CONFIG_USB_GSPCA_MARS=m
+-CONFIG_USB_GSPCA_OV519=m
+-CONFIG_USB_GSPCA_PAC207=m
+-CONFIG_USB_GSPCA_PAC7311=m
+-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_STK014=m
+-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_PVRUSB2 is not set
+-# CONFIG_VIDEO_EM28XX is not set
+-# CONFIG_VIDEO_USBVISION is not set
+-CONFIG_VIDEO_USBVIDEO=m
+-CONFIG_USB_VICAM=m
+-CONFIG_USB_IBMCAM=m
+-CONFIG_USB_KONICAWC=m
+-CONFIG_USB_QUICKCAM_MESSENGER=m
+-CONFIG_USB_ET61X251=m
+-# CONFIG_VIDEO_OVCAMCHIP is not set
+-CONFIG_USB_OV511=m
+-CONFIG_USB_SE401=m
+-CONFIG_USB_SN9C102=m
+-CONFIG_USB_STV680=m
+-CONFIG_USB_ZC0301=m
+-CONFIG_USB_PWC=m
+-# CONFIG_USB_PWC_DEBUG is not set
+-# CONFIG_USB_ZR364XX is not set
+-CONFIG_USB_STKWEBCAM=m
+-CONFIG_USB_S2255=m
+-CONFIG_RADIO_ADAPTERS=y
+-# CONFIG_RADIO_CADET is not set
+-# CONFIG_RADIO_RTRACK is not set
+-# CONFIG_RADIO_RTRACK2 is not set
+-# CONFIG_RADIO_AZTECH is not set
+-# CONFIG_RADIO_GEMTEK is not set
+-# CONFIG_RADIO_GEMTEK_PCI is not set
+-# CONFIG_RADIO_MAXIRADIO is not set
+-# CONFIG_RADIO_MAESTRO is not set
+-# CONFIG_RADIO_SF16FMI is not set
+-# CONFIG_RADIO_SF16FMR2 is not set
+-# CONFIG_RADIO_TERRATEC is not set
+-# CONFIG_RADIO_TRUST is not set
+-# CONFIG_RADIO_TYPHOON is not set
+-# CONFIG_RADIO_ZOLTRIX is not set
+-# CONFIG_USB_DSBR is not set
+-CONFIG_USB_SI470X=m
+-CONFIG_USB_MR800=m
+-CONFIG_DAB=y
+-# CONFIG_USB_DABUSB is not set
+-
+-#
+-# Graphics support
+-#
+-# CONFIG_DRM is not set
+-# CONFIG_VGASTATE is not set
+-CONFIG_VIDEO_OUTPUT_CONTROL=m
+-CONFIG_FB=y
+-# CONFIG_FIRMWARE_EDID is not set
+-# CONFIG_FB_DDC is not set
+-# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+-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=y
+-CONFIG_FB_MODE_HELPERS=y
+-# CONFIG_FB_TILEBLITTING is not set
+-
+-#
+-# 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=y
+-# CONFIG_FB_RADEON_I2C is not set
+-CONFIG_FB_RADEON_BACKLIGHT=y
+-# CONFIG_FB_RADEON_DEBUG 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 is not set
+-# 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_BACKLIGHT_LCD_SUPPORT=y
+-CONFIG_LCD_CLASS_DEVICE=m
+-# CONFIG_LCD_ILI9320 is not set
+-# CONFIG_LCD_PLATFORM is not set
+-CONFIG_BACKLIGHT_CLASS_DEVICE=y
+-# CONFIG_BACKLIGHT_CORGI is not set
+-
+-#
+-# 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 is not set
+-# CONFIG_FONTS is not set
+-CONFIG_FONT_8x8=y
+-CONFIG_FONT_8x16=y
+-# CONFIG_LOGO is not set
+-CONFIG_SOUND=y
+-CONFIG_SOUND_OSS_CORE=y
+-CONFIG_SND=m
+-CONFIG_SND_TIMER=m
+-CONFIG_SND_PCM=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_DYNAMIC_MINORS 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_MPU401_UART=m
+-CONFIG_SND_AC97_CODEC=m
+-CONFIG_SND_DRIVERS=y
+-# CONFIG_SND_DUMMY is not set
+-# CONFIG_SND_VIRMIDI is not set
+-# CONFIG_SND_MTPAV is not set
+-# CONFIG_SND_SERIAL_U16550 is not set
+-# CONFIG_SND_MPU401 is not set
+-# CONFIG_SND_AC97_POWER_SAVE is not set
+-CONFIG_SND_PCI=y
+-# CONFIG_SND_AD1889 is not set
+-# CONFIG_SND_ALS300 is not set
+-# CONFIG_SND_ALI5451 is not set
+-# CONFIG_SND_ATIIXP is not set
+-# CONFIG_SND_ATIIXP_MODEM is not set
+-# CONFIG_SND_AU8810 is not set
+-# CONFIG_SND_AU8820 is not set
+-# CONFIG_SND_AU8830 is not set
+-# CONFIG_SND_AW2 is not set
+-# CONFIG_SND_AZT3328 is not set
+-# CONFIG_SND_BT87X is not set
+-# CONFIG_SND_CA0106 is not set
+-# CONFIG_SND_CMIPCI is not set
+-# CONFIG_SND_OXYGEN is not set
+-# CONFIG_SND_CS4281 is not set
+-# CONFIG_SND_CS46XX is not set
+-# CONFIG_SND_DARLA20 is not set
+-# CONFIG_SND_GINA20 is not set
+-# CONFIG_SND_LAYLA20 is not set
+-# CONFIG_SND_DARLA24 is not set
+-# CONFIG_SND_GINA24 is not set
+-# CONFIG_SND_LAYLA24 is not set
+-# CONFIG_SND_MONA is not set
+-# CONFIG_SND_MIA is not set
+-# CONFIG_SND_ECHO3G is not set
+-# CONFIG_SND_INDIGO is not set
+-# CONFIG_SND_INDIGOIO is not set
+-# CONFIG_SND_INDIGODJ is not set
+-# CONFIG_SND_EMU10K1 is not set
+-# CONFIG_SND_EMU10K1X is not set
+-# CONFIG_SND_ENS1370 is not set
+-# CONFIG_SND_ENS1371 is not set
+-# CONFIG_SND_ES1938 is not set
+-# CONFIG_SND_ES1968 is not set
+-# CONFIG_SND_FM801 is not set
+-# CONFIG_SND_HDA_INTEL is not set
+-# CONFIG_SND_HDSP is not set
+-# CONFIG_SND_HDSPM is not set
+-# CONFIG_SND_HIFIER is not set
+-# CONFIG_SND_ICE1712 is not set
+-# CONFIG_SND_ICE1724 is not set
+-# CONFIG_SND_INTEL8X0 is not set
+-# CONFIG_SND_INTEL8X0M is not set
+-# CONFIG_SND_KORG1212 is not set
+-# CONFIG_SND_MAESTRO3 is not set
+-# CONFIG_SND_MIXART is not set
+-# CONFIG_SND_NM256 is not set
+-# CONFIG_SND_PCXHR is not set
+-# CONFIG_SND_RIPTIDE is not set
+-# CONFIG_SND_RME32 is not set
+-# CONFIG_SND_RME96 is not set
+-# CONFIG_SND_RME9652 is not set
+-# CONFIG_SND_SONICVIBES is not set
+-# CONFIG_SND_TRIDENT is not set
+-CONFIG_SND_VIA82XX=m
+-# CONFIG_SND_VIA82XX_MODEM is not set
+-# CONFIG_SND_VIRTUOSO is not set
+-# CONFIG_SND_VX222 is not set
+-# CONFIG_SND_YMFPCI is not set
+-CONFIG_SND_MIPS=y
+-CONFIG_SND_USB=y
+-# CONFIG_SND_USB_AUDIO is not set
+-# CONFIG_SND_USB_CAIAQ is not set
+-# CONFIG_SND_SOC is not set
+-# CONFIG_SOUND_PRIME is not set
+-CONFIG_AC97_BUS=m
+-CONFIG_HID_SUPPORT=y
+-CONFIG_HID=y
+-# CONFIG_HID_DEBUG is not set
+-CONFIG_HIDRAW=y
+-
+-#
+-# USB Input Devices
+-#
+-CONFIG_USB_HID=m
+-CONFIG_HID_PID=y
+-CONFIG_USB_HIDDEV=y
+-
+-#
+-# USB HID Boot Protocol drivers
+-#
+-# CONFIG_USB_KBD is not set
+-# CONFIG_USB_MOUSE is not set
+-
+-#
+-# Special HID drivers
+-#
+-CONFIG_HID_COMPAT=y
+-CONFIG_HID_A4TECH=m
+-CONFIG_HID_APPLE=m
+-CONFIG_HID_BELKIN=m
+-CONFIG_HID_BRIGHT=m
+-CONFIG_HID_CHERRY=m
+-CONFIG_HID_CHICONY=m
+-CONFIG_HID_CYPRESS=m
+-CONFIG_HID_DELL=m
+-CONFIG_HID_EZKEY=m
+-CONFIG_HID_GYRATION=m
+-CONFIG_HID_LOGITECH=m
+-CONFIG_LOGITECH_FF=y
+-CONFIG_LOGIRUMBLEPAD2_FF=y
+-CONFIG_HID_MICROSOFT=m
+-CONFIG_HID_MONTEREY=m
+-CONFIG_HID_PANTHERLORD=m
+-# CONFIG_PANTHERLORD_FF is not set
+-CONFIG_HID_PETALYNX=m
+-CONFIG_HID_SAMSUNG=m
+-CONFIG_HID_SONY=m
+-CONFIG_HID_SUNPLUS=m
+-# CONFIG_THRUSTMASTER_FF is not set
+-CONFIG_ZEROPLUS_FF=m
+-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=y
+-
+-#
+-# Miscellaneous USB options
+-#
+-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
+-# CONFIG_USB_MON is not set
+-# CONFIG_USB_WUSB is not set
+-CONFIG_USB_WUSB_CBAF=m
+-# CONFIG_USB_WUSB_CBAF_DEBUG is not set
+-
+-#
+-# USB Host Controller Drivers
+-#
+-CONFIG_USB_C67X00_HCD=m
+-CONFIG_USB_EHCI_HCD=y
+-CONFIG_USB_EHCI_ROOT_HUB_TT=y
+-CONFIG_USB_EHCI_TT_NEWSCHED=y
+-# CONFIG_USB_ISP116X_HCD is not set
+-CONFIG_USB_ISP1760_HCD=m
+-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=m
+-# CONFIG_USB_SL811_HCD is not set
+-CONFIG_USB_R8A66597_HCD=m
+-# CONFIG_USB_WHCI_HCD is not set
+-# CONFIG_USB_HWA_HCD is not set
+-
+-#
+-# USB Device Class drivers
+-#
+-CONFIG_USB_ACM=y
+-CONFIG_USB_PRINTER=y
+-CONFIG_USB_WDM=m
+-CONFIG_USB_TMC=m
+-
+-#
+-# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
+-#
+-
+-#
+-# see USB_STORAGE Help for more information
+-#
+-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_DPCM 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=y
+-# CONFIG_USB_STORAGE_KARMA is not set
+-CONFIG_USB_STORAGE_CYPRESS_ATACB=y
+-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=m
+-# 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
+-# CONFIG_USB_PHIDGET 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=m
+-CONFIG_USB_VST=m
+-# CONFIG_USB_GADGET 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=m
+-
+-#
+-# RTC interfaces
+-#
+-CONFIG_RTC_INTF_SYSFS=y
+-CONFIG_RTC_INTF_PROC=y
+-CONFIG_RTC_INTF_DEV=y
+-CONFIG_RTC_INTF_DEV_UIE_EMUL=y
+-# CONFIG_RTC_DRV_TEST is not set
+-
+-#
+-# I2C RTC drivers
+-#
+-# CONFIG_RTC_DRV_DS1307 is not set
+-# CONFIG_RTC_DRV_DS1374 is not set
+-# CONFIG_RTC_DRV_DS1672 is not set
+-# CONFIG_RTC_DRV_MAX6900 is not set
+-# CONFIG_RTC_DRV_RS5C372 is not set
+-# CONFIG_RTC_DRV_ISL1208 is not set
+-# CONFIG_RTC_DRV_X1205 is not set
+-# CONFIG_RTC_DRV_PCF8563 is not set
+-# CONFIG_RTC_DRV_PCF8583 is not set
+-# CONFIG_RTC_DRV_M41T80 is not set
+-# CONFIG_RTC_DRV_S35390A is not set
+-# CONFIG_RTC_DRV_FM3130 is not set
+-# CONFIG_RTC_DRV_RX8581 is not set
+-
+-#
+-# SPI RTC drivers
+-#
+-
+-#
+-# Platform RTC drivers
+-#
+-CONFIG_RTC_DRV_CMOS=m
+-# 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_BQ4802 is not set
+-# CONFIG_RTC_DRV_V3020 is not set
+-
+-#
+-# on-CPU RTC drivers
+-#
+-# CONFIG_DMADEVICES is not set
+-CONFIG_UIO=m
+-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_SERCOS3 is not set
+-# CONFIG_STAGING is not set
+-CONFIG_STAGING_EXCLUDE_BUILD=y
+-
+-#
+-# File systems
+-#
+-CONFIG_EXT2_FS=y
+-# CONFIG_EXT2_FS_XATTR is not set
+-CONFIG_EXT2_FS_XIP=y
+-CONFIG_EXT3_FS=y
+-# CONFIG_EXT3_FS_XATTR is not set
+-CONFIG_EXT4_FS=m
+-CONFIG_EXT4DEV_COMPAT=y
+-CONFIG_EXT4_FS_XATTR=y
+-CONFIG_EXT4_FS_POSIX_ACL=y
+-CONFIG_EXT4_FS_SECURITY=y
+-CONFIG_FS_XIP=y
+-CONFIG_JBD=y
+-CONFIG_JBD2=m
+-CONFIG_FS_MBCACHE=m
+-CONFIG_REISERFS_FS=m
+-# CONFIG_REISERFS_CHECK is not set
+-# CONFIG_REISERFS_PROC_INFO is not set
+-# CONFIG_REISERFS_FS_XATTR is not set
+-# CONFIG_JFS_FS is not set
+-CONFIG_FS_POSIX_ACL=y
+-CONFIG_FILE_LOCKING=y
+-# CONFIG_XFS_FS is not set
+-# CONFIG_GFS2_FS is not set
+-# CONFIG_OCFS2_FS is not set
+-CONFIG_DNOTIFY=y
+-CONFIG_INOTIFY=y
+-CONFIG_INOTIFY_USER=y
+-# CONFIG_QUOTA is not set
+-CONFIG_AUTOFS_FS=y
+-CONFIG_AUTOFS4_FS=y
+-CONFIG_FUSE_FS=y
+-
+-#
+-# CD-ROM/DVD Filesystems
+-#
+-CONFIG_ISO9660_FS=m
+-CONFIG_JOLIET=y
+-CONFIG_ZISOFS=y
+-CONFIG_UDF_FS=m
+-CONFIG_UDF_NLS=y
+-
+-#
+-# DOS/FAT/NT Filesystems
+-#
+-CONFIG_FAT_FS=m
+-CONFIG_MSDOS_FS=m
+-CONFIG_VFAT_FS=m
+-CONFIG_FAT_DEFAULT_CODEPAGE=936
+-CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
+-CONFIG_NTFS_FS=m
+-# CONFIG_NTFS_DEBUG is not set
+-CONFIG_NTFS_RW=y
+-
+-#
+-# 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
+-
+-#
+-# Miscellaneous filesystems
+-#
+-# CONFIG_ADFS_FS is not set
+-# CONFIG_AFFS_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_JFFS2_FS is not set
+-# CONFIG_CRAMFS is not set
+-# CONFIG_VXFS_FS is not set
+-# CONFIG_MINIX_FS is not set
+-CONFIG_OMFS_FS=m
+-# CONFIG_HPFS_FS is not set
+-# CONFIG_QNX4FS_FS is not set
+-# CONFIG_ROMFS_FS is not set
+-# 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=y
+-CONFIG_NFSD=m
+-CONFIG_NFSD_V2_ACL=y
+-CONFIG_NFSD_V3=y
+-CONFIG_NFSD_V3_ACL=y
+-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_SUNRPC_GSS=m
+-# CONFIG_SUNRPC_REGISTER_V4 is not set
+-CONFIG_RPCSEC_GSS_KRB5=m
+-# CONFIG_RPCSEC_GSS_SPKM3 is not set
+-CONFIG_SMB_FS=m
+-CONFIG_SMB_NLS_DEFAULT=y
+-CONFIG_SMB_NLS_REMOTE="cp936"
+-CONFIG_CIFS=m
+-CONFIG_CIFS_STATS=y
+-CONFIG_CIFS_STATS2=y
+-CONFIG_CIFS_WEAK_PW_HASH=y
+-CONFIG_CIFS_XATTR=y
+-CONFIG_CIFS_POSIX=y
+-CONFIG_CIFS_DEBUG2=y
+-CONFIG_CIFS_EXPERIMENTAL=y
+-# CONFIG_NCP_FS is not set
+-# CONFIG_CODA_FS is not set
+-# CONFIG_AFS_FS is not set
+-# CONFIG_9P_FS is not set
+-
+-#
+-# Partition Types
+-#
+-CONFIG_PARTITION_ADVANCED=y
+-# CONFIG_ACORN_PARTITION is not set
+-# CONFIG_OSF_PARTITION is not set
+-# CONFIG_AMIGA_PARTITION is not set
+-# CONFIG_ATARI_PARTITION is not set
+-# CONFIG_MAC_PARTITION is not set
+-CONFIG_MSDOS_PARTITION=y
+-# CONFIG_BSD_DISKLABEL is not set
+-# CONFIG_MINIX_SUBPARTITION is not set
+-# CONFIG_SOLARIS_X86_PARTITION is not set
+-# CONFIG_UNIXWARE_DISKLABEL is not set
+-# CONFIG_LDM_PARTITION is not set
+-# CONFIG_SGI_PARTITION is not set
+-# CONFIG_ULTRIX_PARTITION is not set
+-# CONFIG_SUN_PARTITION is not set
+-# CONFIG_KARMA_PARTITION is not set
+-# CONFIG_EFI_PARTITION is not set
+-# CONFIG_SYSV68_PARTITION is not set
+-CONFIG_NLS=y
+-CONFIG_NLS_DEFAULT="utf8"
+-# 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=y
+-# 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=y
+-# 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 is not set
+-CONFIG_ENABLE_WARN_DEPRECATED=y
+-# CONFIG_ENABLE_MUST_CHECK is not set
+-CONFIG_FRAME_WARN=2048
+-# CONFIG_MAGIC_SYSRQ is not set
+-# 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_DEBUG_MEMORY_INIT is not set
+-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+-CONFIG_SYSCTL_SYSCALL_CHECK=y
+-
+-#
+-# Tracers
+-#
+-CONFIG_DYNAMIC_PRINTK_DEBUG=y
+-# CONFIG_SAMPLES is not set
+-CONFIG_HAVE_ARCH_KGDB=y
+-CONFIG_CMDLINE=""
+-
+-#
+-# Security options
+-#
+-# CONFIG_KEYS is not set
+-# CONFIG_SECURITY is not set
+-# CONFIG_SECURITYFS is not set
+-CONFIG_SECURITY_FILE_CAPABILITIES=y
+-CONFIG_CRYPTO=y
+-
+-#
+-# Crypto core or helper
+-#
+-CONFIG_CRYPTO_FIPS=y
+-CONFIG_CRYPTO_ALGAPI=y
+-CONFIG_CRYPTO_AEAD=y
+-CONFIG_CRYPTO_BLKCIPHER=y
+-CONFIG_CRYPTO_HASH=y
+-CONFIG_CRYPTO_RNG=y
+-CONFIG_CRYPTO_MANAGER=y
+-CONFIG_CRYPTO_GF128MUL=m
+-# CONFIG_CRYPTO_NULL is not set
+-# CONFIG_CRYPTO_CRYPTD is not set
+-CONFIG_CRYPTO_AUTHENC=m
+-# CONFIG_CRYPTO_TEST is not set
+-
+-#
+-# Authenticated Encryption with Associated Data
+-#
+-CONFIG_CRYPTO_CCM=m
+-CONFIG_CRYPTO_GCM=m
+-CONFIG_CRYPTO_SEQIV=m
+-
+-#
+-# Block modes
+-#
+-CONFIG_CRYPTO_CBC=m
+-CONFIG_CRYPTO_CTR=m
+-CONFIG_CRYPTO_CTS=m
+-CONFIG_CRYPTO_ECB=m
+-# CONFIG_CRYPTO_LRW is not set
+-CONFIG_CRYPTO_PCBC=m
+-CONFIG_CRYPTO_XTS=m
+-
+-#
+-# Hash modes
+-#
+-CONFIG_CRYPTO_HMAC=y
+-# CONFIG_CRYPTO_XCBC is not set
+-
+-#
+-# Digest
+-#
+-# CONFIG_CRYPTO_CRC32C is not set
+-# CONFIG_CRYPTO_MD4 is not set
+-CONFIG_CRYPTO_MD5=m
+-# CONFIG_CRYPTO_MICHAEL_MIC is not set
+-CONFIG_CRYPTO_RMD128=m
+-CONFIG_CRYPTO_RMD160=m
+-CONFIG_CRYPTO_RMD256=m
+-CONFIG_CRYPTO_RMD320=m
+-CONFIG_CRYPTO_SHA1=m
+-# CONFIG_CRYPTO_SHA256 is not set
+-# CONFIG_CRYPTO_SHA512 is not set
+-# CONFIG_CRYPTO_TGR192 is not set
+-# CONFIG_CRYPTO_WP512 is not set
+-
+-#
+-# Ciphers
+-#
+-CONFIG_CRYPTO_AES=m
+-# CONFIG_CRYPTO_ANUBIS is not set
+-CONFIG_CRYPTO_ARC4=m
+-# 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=m
+-# CONFIG_CRYPTO_FCRYPT is not set
+-# CONFIG_CRYPTO_KHAZAD is not set
+-CONFIG_CRYPTO_SALSA20=m
+-CONFIG_CRYPTO_SEED=m
+-# CONFIG_CRYPTO_SERPENT is not set
+-# CONFIG_CRYPTO_TEA is not set
+-# CONFIG_CRYPTO_TWOFISH is not set
+-
+-#
+-# Compression
+-#
+-CONFIG_CRYPTO_DEFLATE=m
+-CONFIG_CRYPTO_LZO=m
+-
+-#
+-# Random Number Generation
+-#
+-CONFIG_CRYPTO_ANSI_CPRNG=m
+-# CONFIG_CRYPTO_HW is not set
+-
+-#
+-# Library routines
+-#
+-CONFIG_BITREVERSE=y
+-CONFIG_CRC_CCITT=y
+-CONFIG_CRC16=m
+-# CONFIG_CRC_T10DIF is not set
+-CONFIG_CRC_ITU_T=m
+-CONFIG_CRC32=y
+-CONFIG_CRC7=m
+-# CONFIG_LIBCRC32C is not set
+-CONFIG_ZLIB_INFLATE=m
+-CONFIG_ZLIB_DEFLATE=m
+-CONFIG_LZO_COMPRESS=m
+-CONFIG_LZO_DECOMPRESS=m
+-CONFIG_TEXTSEARCH=y
+-CONFIG_TEXTSEARCH_KMP=m
+-CONFIG_TEXTSEARCH_BM=m
+-CONFIG_TEXTSEARCH_FSM=m
+-CONFIG_PLIST=y
+-CONFIG_HAS_IOMEM=y
+-CONFIG_HAS_IOPORT=y
+-CONFIG_HAS_DMA=y
+diff -Nur linux-2.6.30/arch/mips/configs/fuloong2e_defconfig rt4ls/arch/mips/configs/fuloong2e_defconfig
+--- linux-2.6.30/arch/mips/configs/fuloong2e_defconfig 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/configs/fuloong2e_defconfig 2009-06-12 16:27:08.246405134 +0200
+@@ -0,0 +1,2018 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.30-rc8
++# Thu Jun 11 01:50:35 2009
++#
++CONFIG_MIPS=y
++
++#
++# Machine selection
++#
++# CONFIG_MACH_ALCHEMY is not set
++# CONFIG_BASLER_EXCITE is not set
++# CONFIG_BCM47XX 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_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_ARCH_SPARSEMEM_ENABLE=y
++CONFIG_LEMOTE_FULOONG2E=y
++# CONFIG_LEMOTE_FULOONG2F is not set
++# CONFIG_LEMOTE_YEELOONG2F is not set
++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_DMA_NEED_PCI_MAP_STATE=y
++CONFIG_EARLY_PRINTK=y
++CONFIG_SYS_HAS_EARLY_PRINTK=y
++# CONFIG_HOTPLUG_CPU is not set
++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=y
++# CONFIG_CPU_LOONGSON2F is not set
++# CONFIG_CPU_MIPS32_R1 is not set
++# CONFIG_CPU_MIPS32_R2 is not set
++# CONFIG_CPU_MIPS64_R1 is not set
++# 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_CPU_LOONGSON2=y
++CONFIG_SYS_HAS_CPU_LOONGSON2E=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
++
++#
++# 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_CPU_HAS_WB=y
++CONFIG_CPU_HAS_SYNC=y
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_CPU_SUPPORTS_HIGHMEM=y
++CONFIG_SYS_SUPPORTS_HIGHMEM=y
++CONFIG_ARCH_FLATMEM_ENABLE=y
++CONFIG_ARCH_POPULATES_NODE_MAP=y
++CONFIG_SELECT_MEMORY_MODEL=y
++CONFIG_FLATMEM_MANUAL=y
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++# CONFIG_SPARSEMEM_MANUAL is not set
++CONFIG_FLATMEM=y
++CONFIG_FLAT_NODE_MEM_MAP=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_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=y
++CONFIG_TICK_ONESHOT=y
++CONFIG_NO_HZ=y
++CONFIG_HIGH_RES_TIMERS=y
++CONFIG_GENERIC_CLOCKEVENTS_BUILD=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=y
++# CONFIG_PREEMPT is not set
++# CONFIG_KEXEC is not set
++CONFIG_SECCOMP=y
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION="-loongson2e"
++# CONFIG_LOCALVERSION_AUTO is not set
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++CONFIG_POSIX_MQUEUE=y
++CONFIG_POSIX_MQUEUE_SYSCTL=y
++CONFIG_BSD_PROCESS_ACCT=y
++# CONFIG_BSD_PROCESS_ACCT_V3 is not set
++# CONFIG_TASKSTATS is not set
++# CONFIG_AUDIT is not set
++
++#
++# RCU Subsystem
++#
++CONFIG_CLASSIC_RCU=y
++# CONFIG_TREE_RCU is not set
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=14
++# CONFIG_GROUP_SCHED is not set
++# CONFIG_CGROUPS is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++CONFIG_NAMESPACES=y
++# CONFIG_UTS_NS is not set
++# CONFIG_IPC_NS is not set
++CONFIG_USER_NS=y
++CONFIG_PID_NS=y
++# CONFIG_NET_NS is not set
++# CONFIG_BLK_DEV_INITRD is not set
++# 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_STRIP_ASM_SYMS is not set
++CONFIG_HOTPLUG=y
++CONFIG_PRINTK=y
++CONFIG_BUG=y
++CONFIG_ELF_CORE=y
++# CONFIG_PCSPKR_PLATFORM is not set
++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
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_PCI_QUIRKS=y
++# CONFIG_COMPAT_BRK is not set
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++CONFIG_PROFILING=y
++CONFIG_TRACEPOINTS=y
++# CONFIG_MARKERS is not set
++CONFIG_OPROFILE=m
++CONFIG_HAVE_OPROFILE=y
++CONFIG_HAVE_SYSCALL_WRAPPERS=y
++# CONFIG_SLOW_WORK is not set
++# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++# CONFIG_MODVERSIONS is not set
++# CONFIG_MODULE_SRCVERSION_ALL is not set
++CONFIG_BLOCK=y
++CONFIG_BLK_DEV_BSG=y
++# CONFIG_BLK_DEV_INTEGRITY is not set
++CONFIG_BLOCK_COMPAT=y
++
++#
++# IO Schedulers
++#
++CONFIG_IOSCHED_NOOP=y
++CONFIG_IOSCHED_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
++# CONFIG_DEFAULT_AS is not set
++# CONFIG_DEFAULT_DEADLINE is not set
++CONFIG_DEFAULT_CFQ=y
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="cfq"
++CONFIG_FREEZER=y
++
++#
++# 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_LEGACY=y
++# 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=y
++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=y
++# CONFIG_PM_DEBUG is not set
++CONFIG_PM_SLEEP=y
++CONFIG_SUSPEND=y
++CONFIG_SUSPEND_FREEZER=y
++CONFIG_HIBERNATION=y
++CONFIG_PM_STD_PARTITION=""
++
++#
++# CPU Frequency scaling
++#
++# CONFIG_CPU_FREQ is not set
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++# 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_INET=y
++CONFIG_IP_MULTICAST=y
++# CONFIG_IP_ADVANCED_ROUTER is not set
++CONFIG_IP_FIB_HASH=y
++CONFIG_IP_PNP=y
++# CONFIG_IP_PNP_DHCP is not set
++CONFIG_IP_PNP_BOOTP=y
++# CONFIG_IP_PNP_RARP is not set
++CONFIG_NET_IPIP=m
++CONFIG_NET_IPGRE=m
++CONFIG_NET_IPGRE_BROADCAST=y
++# CONFIG_IP_MROUTE 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=m
++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
++# CONFIG_INET_XFRM_MODE_TUNNEL is not set
++CONFIG_INET_XFRM_MODE_BEET=y
++# 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=y
++# CONFIG_NETFILTER_DEBUG is not set
++CONFIG_NETFILTER_ADVANCED=y
++
++#
++# Core Netfilter Configuration
++#
++CONFIG_NETFILTER_NETLINK=m
++CONFIG_NETFILTER_NETLINK_QUEUE=m
++CONFIG_NETFILTER_NETLINK_LOG=m
++# CONFIG_NF_CONNTRACK is not set
++# CONFIG_NETFILTER_TPROXY is not set
++CONFIG_NETFILTER_XTABLES=m
++CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
++# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
++CONFIG_NETFILTER_XT_TARGET_HL=m
++CONFIG_NETFILTER_XT_TARGET_MARK=m
++# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
++CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
++CONFIG_NETFILTER_XT_TARGET_RATEEST=m
++CONFIG_NETFILTER_XT_TARGET_TRACE=m
++# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
++CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
++CONFIG_NETFILTER_XT_MATCH_COMMENT=m
++CONFIG_NETFILTER_XT_MATCH_DCCP=m
++# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
++CONFIG_NETFILTER_XT_MATCH_ESP=m
++# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
++CONFIG_NETFILTER_XT_MATCH_HL=m
++CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
++CONFIG_NETFILTER_XT_MATCH_LENGTH=m
++CONFIG_NETFILTER_XT_MATCH_LIMIT=m
++CONFIG_NETFILTER_XT_MATCH_MAC=m
++CONFIG_NETFILTER_XT_MATCH_MARK=m
++CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
++CONFIG_NETFILTER_XT_MATCH_OWNER=m
++# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
++CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
++CONFIG_NETFILTER_XT_MATCH_QUOTA=m
++CONFIG_NETFILTER_XT_MATCH_RATEEST=m
++CONFIG_NETFILTER_XT_MATCH_REALM=m
++CONFIG_NETFILTER_XT_MATCH_RECENT=m
++# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set
++CONFIG_NETFILTER_XT_MATCH_SCTP=m
++CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
++CONFIG_NETFILTER_XT_MATCH_STRING=m
++CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
++CONFIG_NETFILTER_XT_MATCH_TIME=m
++CONFIG_NETFILTER_XT_MATCH_U32=m
++# CONFIG_IP_VS is not set
++
++#
++# IP: Netfilter Configuration
++#
++# CONFIG_NF_DEFRAG_IPV4 is not set
++CONFIG_IP_NF_QUEUE=m
++CONFIG_IP_NF_IPTABLES=m
++CONFIG_IP_NF_MATCH_ADDRTYPE=m
++CONFIG_IP_NF_MATCH_AH=m
++CONFIG_IP_NF_MATCH_ECN=m
++CONFIG_IP_NF_MATCH_TTL=m
++CONFIG_IP_NF_FILTER=m
++CONFIG_IP_NF_TARGET_REJECT=m
++CONFIG_IP_NF_TARGET_LOG=m
++CONFIG_IP_NF_TARGET_ULOG=m
++CONFIG_IP_NF_MANGLE=m
++CONFIG_IP_NF_TARGET_ECN=m
++CONFIG_IP_NF_TARGET_TTL=m
++CONFIG_IP_NF_RAW=m
++CONFIG_IP_NF_ARPTABLES=m
++CONFIG_IP_NF_ARPFILTER=m
++CONFIG_IP_NF_ARP_MANGLE=m
++# CONFIG_IP_DCCP is not set
++# CONFIG_IP_SCTP 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=m
++# CONFIG_NET_SCHED is not set
++CONFIG_NET_CLS_ROUTE=y
++# CONFIG_DCB is not set
++
++#
++# 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
++# CONFIG_BT is not set
++# CONFIG_AF_RXRPC is not set
++CONFIG_WIRELESS=y
++# CONFIG_CFG80211 is not set
++CONFIG_WIRELESS_OLD_REGULATORY=y
++CONFIG_WIRELESS_EXT=y
++CONFIG_WIRELESS_EXT_SYSFS=y
++# CONFIG_LIB80211 is not set
++# CONFIG_MAC80211 is not set
++# CONFIG_WIMAX is not set
++# CONFIG_RFKILL is not set
++CONFIG_NET_9P=m
++# CONFIG_NET_9P_DEBUG is not set
++
++#
++# Device Drivers
++#
++
++#
++# Generic Driver Options
++#
++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
++CONFIG_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=m
++CONFIG_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
++# CONFIG_SYS_HYPERVISOR is not set
++# CONFIG_CONNECTOR is not set
++CONFIG_MTD=m
++# CONFIG_MTD_DEBUG is not set
++# CONFIG_MTD_CONCAT is not set
++# CONFIG_MTD_PARTITIONS is not set
++# CONFIG_MTD_TESTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=m
++CONFIG_MTD_BLKDEVS=m
++CONFIG_MTD_BLOCK=m
++# CONFIG_MTD_BLOCK_RO is not set
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# CONFIG_MTD_OOPS is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++CONFIG_MTD_CFI=m
++CONFIG_MTD_JEDECPROBE=m
++CONFIG_MTD_GEN_PROBE=m
++CONFIG_MTD_CFI_ADV_OPTIONS=y
++CONFIG_MTD_CFI_NOSWAP=y
++# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
++# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
++# CONFIG_MTD_CFI_GEOMETRY is not set
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++CONFIG_MTD_MAP_BANK_WIDTH_2=y
++CONFIG_MTD_MAP_BANK_WIDTH_4=y
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++CONFIG_MTD_CFI_I2=y
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++# CONFIG_MTD_OTP is not set
++# CONFIG_MTD_CFI_INTELEXT is not set
++CONFIG_MTD_CFI_AMDSTD=m
++CONFIG_MTD_CFI_STAA=m
++CONFIG_MTD_CFI_UTIL=m
++# CONFIG_MTD_RAM is not set
++# CONFIG_MTD_ROM is not set
++# CONFIG_MTD_ABSENT is not set
++
++#
++# Mapping drivers for chip access
++#
++# CONFIG_MTD_COMPLEX_MAPPINGS is not set
++CONFIG_MTD_PHYSMAP=m
++# CONFIG_MTD_PHYSMAP_COMPAT is not set
++# CONFIG_MTD_INTEL_VR_NOR is not set
++# CONFIG_MTD_PLATRAM is not set
++
++#
++# Self-contained MTD device drivers
++#
++# CONFIG_MTD_PMC551 is not set
++# CONFIG_MTD_SLRAM is not set
++# CONFIG_MTD_PHRAM is not set
++# CONFIG_MTD_MTDRAM is not set
++# CONFIG_MTD_BLOCK2MTD is not set
++
++#
++# Disk-On-Chip Device Drivers
++#
++# CONFIG_MTD_DOC2000 is not set
++# CONFIG_MTD_DOC2001 is not set
++# CONFIG_MTD_DOC2001PLUS is not set
++# CONFIG_MTD_NAND is not set
++# CONFIG_MTD_ONENAND is not set
++
++#
++# LPDDR flash memory drivers
++#
++# CONFIG_MTD_LPDDR is not set
++
++#
++# UBI - Unsorted block images
++#
++# CONFIG_MTD_UBI 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=m
++# 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=m
++CONFIG_BLK_DEV_RAM_COUNT=16
++CONFIG_BLK_DEV_RAM_SIZE=4096
++# CONFIG_BLK_DEV_XIP is not set
++CONFIG_CDROM_PKTCDVD=m
++CONFIG_CDROM_PKTCDVD_BUFFERS=8
++# CONFIG_CDROM_PKTCDVD_WCACHE is not set
++CONFIG_ATA_OVER_ETH=m
++# 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_IDE_ATAPI=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=y
++CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
++# CONFIG_BLK_DEV_IDETAPE is not set
++CONFIG_IDE_TASK_IOCTL=y
++CONFIG_IDE_PROC_FS=y
++
++#
++# IDE chipset support/bugfixes
++#
++CONFIG_IDE_GENERIC=y
++# 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=y
++# CONFIG_BLK_DEV_OFFBOARD is not set
++CONFIG_BLK_DEV_GENERIC=y
++# 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 is not set
++# 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=y
++# 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_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=y
++
++#
++# 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=y
++CONFIG_BLK_DEV_SR_VENDOR=y
++CONFIG_CHR_DEV_SG=y
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++# CONFIG_SCSI_MULTI_LUN is not set
++CONFIG_SCSI_CONSTANTS=y
++# CONFIG_SCSI_LOGGING is not set
++# CONFIG_SCSI_SCAN_ASYNC is not set
++CONFIG_SCSI_WAIT_SCAN=m
++
++#
++# 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_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
++#
++
++#
++# Enable only one of the two stacks, unless you know what you are doing
++#
++# CONFIG_FIREWIRE is not set
++# CONFIG_IEEE1394 is not set
++# CONFIG_I2O is not set
++CONFIG_NETDEVICES=y
++CONFIG_COMPAT_NET_DEV_OPS=y
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++CONFIG_MACVLAN=m
++# CONFIG_EQUALIZER is not set
++# CONFIG_TUN is not set
++CONFIG_VETH=m
++# CONFIG_ARCNET is not set
++CONFIG_PHYLIB=m
++
++#
++# MII PHY device drivers
++#
++CONFIG_MARVELL_PHY=m
++CONFIG_DAVICOM_PHY=m
++CONFIG_QSEMI_PHY=m
++CONFIG_LXT_PHY=m
++CONFIG_CICADA_PHY=m
++# CONFIG_VITESSE_PHY is not set
++# CONFIG_SMSC_PHY is not set
++# CONFIG_BROADCOM_PHY is not set
++# CONFIG_ICPLUS_PHY is not set
++# CONFIG_REALTEK_PHY is not set
++# CONFIG_NATIONAL_PHY is not set
++# CONFIG_STE10XP is not set
++# CONFIG_LSI_ET1011C_PHY is not set
++# CONFIG_MDIO_BITBANG 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_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_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 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
++# 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_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 is not set
++# 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_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=y
++# CONFIG_CHELSIO_T1 is not set
++CONFIG_CHELSIO_T3_DEPENDS=y
++# CONFIG_CHELSIO_T3 is not set
++# CONFIG_ENIC is not set
++# CONFIG_IXGBE is not set
++# CONFIG_IXGB is not set
++# CONFIG_S2IO is not set
++# CONFIG_VXGE is not set
++# CONFIG_MYRI10GE is not set
++# CONFIG_NETXEN_NIC is not set
++# CONFIG_NIU is not set
++# CONFIG_MLX4_EN is not set
++# CONFIG_MLX4_CORE is not set
++# CONFIG_TEHUTI is not set
++# CONFIG_BNX2X is not set
++# CONFIG_QLGE is not set
++# CONFIG_SFC is not set
++# CONFIG_BE2NET is not set
++# CONFIG_TR is not set
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 is not set
++# CONFIG_WLAN_80211 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_WAN is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++CONFIG_PPP=m
++CONFIG_PPP_MULTILINK=y
++CONFIG_PPP_FILTER=y
++CONFIG_PPP_ASYNC=m
++CONFIG_PPP_SYNC_TTY=m
++CONFIG_PPP_DEFLATE=m
++CONFIG_PPP_BSDCOMP=m
++CONFIG_PPP_MPPE=m
++CONFIG_PPPOE=m
++CONFIG_PPPOL2TP=m
++CONFIG_SLIP=m
++CONFIG_SLIP_COMPRESSED=y
++CONFIG_SLHC=m
++CONFIG_SLIP_SMART=y
++CONFIG_SLIP_MODE_SLIP6=y
++CONFIG_NET_FC=y
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER 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
++
++#
++# 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=m
++# CONFIG_KEYBOARD_SUNKBD is not set
++# CONFIG_KEYBOARD_LKKBD is not set
++# CONFIG_KEYBOARD_XTKBD is not set
++# CONFIG_KEYBOARD_NEWTON is not set
++# CONFIG_KEYBOARD_STOWAWAY is not set
++CONFIG_INPUT_MOUSE=y
++CONFIG_MOUSE_PS2=y
++CONFIG_MOUSE_PS2_ALPS=y
++CONFIG_MOUSE_PS2_LOGIPS2PP=y
++CONFIG_MOUSE_PS2_SYNAPTICS=y
++CONFIG_MOUSE_PS2_TRACKPOINT=y
++# CONFIG_MOUSE_PS2_ELANTECH is not set
++# CONFIG_MOUSE_PS2_TOUCHKIT is not set
++CONFIG_MOUSE_SERIAL=y
++# 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=y
++# CONFIG_SERIO_PCIPS2 is not set
++CONFIG_SERIO_LIBPS2=y
++# CONFIG_SERIO_RAW 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=y
++# 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=y
++CONFIG_SERIAL_8250_NR_UARTS=2
++CONFIG_SERIAL_8250_RUNTIME_UARTS=2
++# 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_UNIX98_PTYS=y
++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=256
++# CONFIG_IPMI_HANDLER is not set
++CONFIG_HW_RANDOM=y
++# CONFIG_HW_RANDOM_TIMERIOMEM 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=m
++CONFIG_I2C_BOARDINFO=y
++CONFIG_I2C_CHARDEV=m
++CONFIG_I2C_HELPER_AUTO=y
++
++#
++# I2C Hardware Bus support
++#
++
++#
++# PC SMBus host controller drivers
++#
++# CONFIG_I2C_ALI1535 is not set
++# CONFIG_I2C_ALI1563 is not set
++# CONFIG_I2C_ALI15X3 is not set
++# CONFIG_I2C_AMD756 is not set
++# CONFIG_I2C_AMD8111 is not set
++# CONFIG_I2C_I801 is not set
++# CONFIG_I2C_ISCH is not set
++# CONFIG_I2C_PIIX4 is not set
++# CONFIG_I2C_NFORCE2 is not set
++# CONFIG_I2C_SIS5595 is not set
++# CONFIG_I2C_SIS630 is not set
++# CONFIG_I2C_SIS96X is not set
++# CONFIG_I2C_VIA is not set
++CONFIG_I2C_VIAPRO=m
++
++#
++# I2C system bus drivers (mostly embedded / system-on-chip)
++#
++# CONFIG_I2C_OCORES is not set
++# CONFIG_I2C_SIMTEC is not set
++
++#
++# External I2C/SMBus adapter drivers
++#
++# CONFIG_I2C_PARPORT_LIGHT is not set
++# CONFIG_I2C_TAOS_EVM is not set
++# CONFIG_I2C_TINY_USB is not set
++
++#
++# Graphics adapter I2C/DDC channel drivers
++#
++# CONFIG_I2C_VOODOO3 is not set
++
++#
++# Other I2C/SMBus bus drivers
++#
++# CONFIG_I2C_ELEKTOR is not set
++# CONFIG_I2C_PCA_ISA is not set
++# CONFIG_I2C_PCA_PLATFORM is not set
++# CONFIG_I2C_STUB is not set
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_DS1682 is not set
++# CONFIG_SENSORS_PCF8574 is not set
++# CONFIG_PCF8575 is not set
++# CONFIG_SENSORS_PCA9539 is not set
++# CONFIG_SENSORS_MAX6875 is not set
++# CONFIG_SENSORS_TSL2550 is not set
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
++# CONFIG_SPI is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON 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_MFD_WM8400 is not set
++# CONFIG_MFD_WM8350_I2C is not set
++# CONFIG_MFD_PCF50633 is not set
++# CONFIG_REGULATOR is not set
++
++#
++# Multimedia devices
++#
++
++#
++# Multimedia core support
++#
++CONFIG_VIDEO_DEV=m
++CONFIG_VIDEO_V4L2_COMMON=m
++CONFIG_VIDEO_ALLOW_V4L1=y
++CONFIG_VIDEO_V4L1_COMPAT=y
++# CONFIG_DVB_CORE is not set
++CONFIG_VIDEO_MEDIA=m
++
++#
++# Multimedia drivers
++#
++CONFIG_MEDIA_ATTACH=y
++CONFIG_MEDIA_TUNER=m
++# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
++CONFIG_MEDIA_TUNER_SIMPLE=m
++CONFIG_MEDIA_TUNER_TDA8290=m
++CONFIG_MEDIA_TUNER_TDA9887=m
++CONFIG_MEDIA_TUNER_TEA5761=m
++CONFIG_MEDIA_TUNER_TEA5767=m
++CONFIG_MEDIA_TUNER_MT20XX=m
++CONFIG_MEDIA_TUNER_XC2028=m
++CONFIG_MEDIA_TUNER_XC5000=m
++CONFIG_MEDIA_TUNER_MC44S803=m
++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_BT848 is not set
++# CONFIG_VIDEO_PMS is not set
++# CONFIG_VIDEO_CPIA is not set
++# CONFIG_VIDEO_CPIA2 is not set
++# CONFIG_VIDEO_SAA5246A is not set
++# CONFIG_VIDEO_SAA5249 is not set
++# CONFIG_VIDEO_STRADIS is not set
++# CONFIG_VIDEO_SAA7134 is not set
++# CONFIG_VIDEO_MXB is not set
++# CONFIG_VIDEO_HEXIUM_ORION is not set
++# CONFIG_VIDEO_HEXIUM_GEMINI is not set
++# CONFIG_VIDEO_CX88 is not set
++# CONFIG_VIDEO_IVTV is not set
++# CONFIG_VIDEO_CAFE_CCIC is not set
++CONFIG_SOC_CAMERA=m
++CONFIG_SOC_CAMERA_MT9M001=m
++CONFIG_SOC_CAMERA_MT9M111=m
++# CONFIG_SOC_CAMERA_MT9T031 is not set
++CONFIG_SOC_CAMERA_MT9V022=m
++# CONFIG_SOC_CAMERA_TW9910 is not set
++CONFIG_SOC_CAMERA_PLATFORM=m
++# CONFIG_SOC_CAMERA_OV772X is not set
++CONFIG_V4L_USB_DRIVERS=y
++CONFIG_USB_VIDEO_CLASS=m
++CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
++CONFIG_USB_GSPCA=m
++CONFIG_USB_M5602=m
++# CONFIG_USB_STV06XX is not set
++CONFIG_USB_GSPCA_CONEX=m
++CONFIG_USB_GSPCA_ETOMS=m
++CONFIG_USB_GSPCA_FINEPIX=m
++CONFIG_USB_GSPCA_MARS=m
++# CONFIG_USB_GSPCA_MR97310A is not set
++CONFIG_USB_GSPCA_OV519=m
++# CONFIG_USB_GSPCA_OV534 is not set
++CONFIG_USB_GSPCA_PAC207=m
++CONFIG_USB_GSPCA_PAC7311=m
++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 is not set
++# CONFIG_USB_GSPCA_SQ905C is not set
++CONFIG_USB_GSPCA_STK014=m
++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_PVRUSB2 is not set
++# CONFIG_VIDEO_HDPVR is not set
++# CONFIG_VIDEO_EM28XX is not set
++# CONFIG_VIDEO_CX231XX is not set
++# CONFIG_VIDEO_USBVISION is not set
++CONFIG_VIDEO_USBVIDEO=m
++CONFIG_USB_VICAM=m
++CONFIG_USB_IBMCAM=m
++CONFIG_USB_KONICAWC=m
++CONFIG_USB_QUICKCAM_MESSENGER=m
++CONFIG_USB_ET61X251=m
++# CONFIG_VIDEO_OVCAMCHIP is not set
++CONFIG_USB_OV511=m
++CONFIG_USB_SE401=m
++CONFIG_USB_SN9C102=m
++CONFIG_USB_STV680=m
++CONFIG_USB_ZC0301=m
++CONFIG_USB_PWC=m
++# CONFIG_USB_PWC_DEBUG is not set
++CONFIG_USB_PWC_INPUT_EVDEV=y
++# CONFIG_USB_ZR364XX is not set
++CONFIG_USB_STKWEBCAM=m
++CONFIG_USB_S2255=m
++CONFIG_RADIO_ADAPTERS=y
++# CONFIG_RADIO_CADET is not set
++# CONFIG_RADIO_RTRACK is not set
++# CONFIG_RADIO_RTRACK2 is not set
++# CONFIG_RADIO_AZTECH is not set
++# CONFIG_RADIO_GEMTEK is not set
++# CONFIG_RADIO_GEMTEK_PCI is not set
++# CONFIG_RADIO_MAXIRADIO is not set
++# CONFIG_RADIO_MAESTRO is not set
++# CONFIG_RADIO_SF16FMI is not set
++# CONFIG_RADIO_SF16FMR2 is not set
++# CONFIG_RADIO_TERRATEC is not set
++# CONFIG_RADIO_TRUST is not set
++# CONFIG_RADIO_TYPHOON is not set
++# CONFIG_RADIO_ZOLTRIX is not set
++# CONFIG_USB_DSBR is not set
++CONFIG_USB_SI470X=m
++CONFIG_USB_MR800=m
++# CONFIG_RADIO_TEA5764 is not set
++CONFIG_DAB=y
++# CONFIG_USB_DABUSB is not set
++
++#
++# Graphics support
++#
++# CONFIG_DRM is not set
++# CONFIG_VGASTATE is not set
++CONFIG_VIDEO_OUTPUT_CONTROL=m
++CONFIG_FB=y
++# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_FB_DDC is not set
++# CONFIG_FB_BOOT_VESA_SUPPORT is not set
++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=y
++CONFIG_FB_MODE_HELPERS=y
++# CONFIG_FB_TILEBLITTING is not set
++
++#
++# 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=y
++# CONFIG_FB_RADEON_I2C is not set
++CONFIG_FB_RADEON_BACKLIGHT=y
++# CONFIG_FB_RADEON_DEBUG 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 is not set
++# 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_SM7XX 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=m
++# CONFIG_LCD_ILI9320 is not set
++# CONFIG_LCD_PLATFORM 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 is not set
++# CONFIG_FONTS is not set
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++# CONFIG_LOGO is not set
++CONFIG_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++CONFIG_SND=m
++CONFIG_SND_TIMER=m
++CONFIG_SND_PCM=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 is not set
++# CONFIG_SND_DYNAMIC_MINORS 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_MPU401_UART=m
++CONFIG_SND_AC97_CODEC=m
++CONFIG_SND_DRIVERS=y
++# CONFIG_SND_DUMMY is not set
++# CONFIG_SND_VIRMIDI is not set
++# CONFIG_SND_MTPAV is not set
++# CONFIG_SND_SERIAL_U16550 is not set
++# CONFIG_SND_MPU401 is not set
++# CONFIG_SND_AC97_POWER_SAVE is not set
++CONFIG_SND_PCI=y
++# CONFIG_SND_AD1889 is not set
++# CONFIG_SND_ALS300 is not set
++# CONFIG_SND_ALI5451 is not set
++# CONFIG_SND_ATIIXP is not set
++# CONFIG_SND_ATIIXP_MODEM is not set
++# CONFIG_SND_AU8810 is not set
++# CONFIG_SND_AU8820 is not set
++# CONFIG_SND_AU8830 is not set
++# CONFIG_SND_AW2 is not set
++# CONFIG_SND_AZT3328 is not set
++# CONFIG_SND_BT87X is not set
++# CONFIG_SND_CA0106 is not set
++# CONFIG_SND_CMIPCI is not set
++# CONFIG_SND_OXYGEN is not set
++# CONFIG_SND_CS4281 is not set
++# CONFIG_SND_CS46XX is not set
++# CONFIG_SND_CS5535AUDIO is not set
++# CONFIG_SND_DARLA20 is not set
++# CONFIG_SND_GINA20 is not set
++# CONFIG_SND_LAYLA20 is not set
++# CONFIG_SND_DARLA24 is not set
++# CONFIG_SND_GINA24 is not set
++# CONFIG_SND_LAYLA24 is not set
++# CONFIG_SND_MONA is not set
++# CONFIG_SND_MIA is not set
++# CONFIG_SND_ECHO3G is not set
++# CONFIG_SND_INDIGO is not set
++# CONFIG_SND_INDIGOIO is not set
++# CONFIG_SND_INDIGODJ is not set
++# CONFIG_SND_INDIGOIOX is not set
++# CONFIG_SND_INDIGODJX is not set
++# CONFIG_SND_EMU10K1 is not set
++# CONFIG_SND_EMU10K1X is not set
++# CONFIG_SND_ENS1370 is not set
++# CONFIG_SND_ENS1371 is not set
++# CONFIG_SND_ES1938 is not set
++# CONFIG_SND_ES1968 is not set
++# CONFIG_SND_FM801 is not set
++# CONFIG_SND_HDA_INTEL is not set
++# CONFIG_SND_HDSP is not set
++# CONFIG_SND_HDSPM is not set
++# CONFIG_SND_HIFIER is not set
++# CONFIG_SND_ICE1712 is not set
++# CONFIG_SND_ICE1724 is not set
++# CONFIG_SND_INTEL8X0 is not set
++# CONFIG_SND_INTEL8X0M is not set
++# CONFIG_SND_KORG1212 is not set
++# CONFIG_SND_MAESTRO3 is not set
++# CONFIG_SND_MIXART is not set
++# CONFIG_SND_NM256 is not set
++# CONFIG_SND_PCXHR is not set
++# CONFIG_SND_RIPTIDE is not set
++# CONFIG_SND_RME32 is not set
++# CONFIG_SND_RME96 is not set
++# CONFIG_SND_RME9652 is not set
++# CONFIG_SND_SONICVIBES is not set
++# CONFIG_SND_TRIDENT is not set
++CONFIG_SND_VIA82XX=m
++# CONFIG_SND_VIA82XX_MODEM is not set
++# CONFIG_SND_VIRTUOSO is not set
++# CONFIG_SND_VX222 is not set
++# CONFIG_SND_YMFPCI is not set
++CONFIG_SND_MIPS=y
++CONFIG_SND_USB=y
++# CONFIG_SND_USB_AUDIO is not set
++# CONFIG_SND_USB_CAIAQ is not set
++# CONFIG_SND_SOC is not set
++# CONFIG_SOUND_PRIME is not set
++CONFIG_AC97_BUS=m
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++CONFIG_HIDRAW=y
++
++#
++# USB Input Devices
++#
++CONFIG_USB_HID=m
++CONFIG_HID_PID=y
++CONFIG_USB_HIDDEV=y
++
++#
++# USB HID Boot Protocol drivers
++#
++# CONFIG_USB_KBD is not set
++# CONFIG_USB_MOUSE is not set
++
++#
++# Special HID drivers
++#
++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_DRAGONRISE_FF is not set
++CONFIG_HID_EZKEY=m
++# CONFIG_HID_KYE is not set
++CONFIG_HID_GYRATION=m
++# CONFIG_HID_KENSINGTON is not set
++CONFIG_HID_LOGITECH=m
++CONFIG_LOGITECH_FF=y
++CONFIG_LOGIRUMBLEPAD2_FF=y
++CONFIG_HID_MICROSOFT=m
++CONFIG_HID_MONTEREY=m
++# CONFIG_HID_NTRIG is not set
++CONFIG_HID_PANTHERLORD=m
++# CONFIG_PANTHERLORD_FF is not set
++CONFIG_HID_PETALYNX=m
++CONFIG_HID_SAMSUNG=m
++CONFIG_HID_SONY=m
++CONFIG_HID_SUNPLUS=m
++# CONFIG_GREENASIA_FF is not set
++# CONFIG_HID_TOPSEED is not set
++# CONFIG_THRUSTMASTER_FF is not set
++CONFIG_ZEROPLUS_FF=m
++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=y
++
++#
++# Miscellaneous USB options
++#
++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
++# CONFIG_USB_MON is not set
++# CONFIG_USB_WUSB is not set
++CONFIG_USB_WUSB_CBAF=m
++# CONFIG_USB_WUSB_CBAF_DEBUG is not set
++
++#
++# USB Host Controller Drivers
++#
++CONFIG_USB_C67X00_HCD=m
++CONFIG_USB_EHCI_HCD=y
++CONFIG_USB_EHCI_ROOT_HUB_TT=y
++CONFIG_USB_EHCI_TT_NEWSCHED=y
++# CONFIG_USB_OXU210HP_HCD is not set
++# CONFIG_USB_ISP116X_HCD is not set
++CONFIG_USB_ISP1760_HCD=m
++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=m
++# CONFIG_USB_SL811_HCD is not set
++CONFIG_USB_R8A66597_HCD=m
++# CONFIG_USB_WHCI_HCD is not set
++# CONFIG_USB_HWA_HCD is not set
++
++#
++# USB Device Class drivers
++#
++CONFIG_USB_ACM=y
++CONFIG_USB_PRINTER=y
++CONFIG_USB_WDM=m
++CONFIG_USB_TMC=m
++
++#
++# 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=y
++# CONFIG_USB_STORAGE_KARMA is not set
++CONFIG_USB_STORAGE_CYPRESS_ATACB=y
++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=m
++# 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
++# 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=m
++CONFIG_USB_VST=m
++# 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
++
++#
++# I2C RTC drivers
++#
++# CONFIG_RTC_DRV_DS1307 is not set
++# CONFIG_RTC_DRV_DS1374 is not set
++# CONFIG_RTC_DRV_DS1672 is not set
++# CONFIG_RTC_DRV_MAX6900 is not set
++# CONFIG_RTC_DRV_RS5C372 is not set
++# CONFIG_RTC_DRV_ISL1208 is not set
++# CONFIG_RTC_DRV_X1205 is not set
++# CONFIG_RTC_DRV_PCF8563 is not set
++# CONFIG_RTC_DRV_PCF8583 is not set
++# CONFIG_RTC_DRV_M41T80 is not set
++# CONFIG_RTC_DRV_S35390A is not set
++# CONFIG_RTC_DRV_FM3130 is not set
++# CONFIG_RTC_DRV_RX8581 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_BQ4802 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=m
++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_STAGING is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++# CONFIG_EXT2_FS_XATTR is not set
++CONFIG_EXT2_FS_XIP=y
++CONFIG_EXT3_FS=y
++# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
++# CONFIG_EXT3_FS_XATTR is not set
++CONFIG_EXT4_FS=m
++CONFIG_EXT4DEV_COMPAT=y
++CONFIG_EXT4_FS_XATTR=y
++CONFIG_EXT4_FS_POSIX_ACL=y
++CONFIG_EXT4_FS_SECURITY=y
++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
++# CONFIG_REISERFS_PROC_INFO is not set
++# CONFIG_REISERFS_FS_XATTR is not set
++# CONFIG_JFS_FS is not set
++CONFIG_FS_POSIX_ACL=y
++CONFIG_FILE_LOCKING=y
++# 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_DNOTIFY=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++# CONFIG_QUOTA is not set
++CONFIG_AUTOFS_FS=y
++CONFIG_AUTOFS4_FS=y
++CONFIG_FUSE_FS=y
++
++#
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++CONFIG_ISO9660_FS=m
++CONFIG_JOLIET=y
++CONFIG_ZISOFS=y
++CONFIG_UDF_FS=m
++CONFIG_UDF_NLS=y
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=m
++CONFIG_MSDOS_FS=m
++CONFIG_VFAT_FS=m
++CONFIG_FAT_DEFAULT_CODEPAGE=936
++CONFIG_FAT_DEFAULT_IOCHARSET="utf8"
++CONFIG_NTFS_FS=m
++# CONFIG_NTFS_DEBUG is not set
++CONFIG_NTFS_RW=y
++
++#
++# 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=y
++# CONFIG_ADFS_FS is not set
++# CONFIG_AFFS_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_JFFS2_FS is not set
++# CONFIG_CRAMFS is not set
++# CONFIG_SQUASHFS is not set
++# CONFIG_VXFS_FS is not set
++# CONFIG_MINIX_FS is not set
++CONFIG_OMFS_FS=m
++# CONFIG_HPFS_FS is not set
++# CONFIG_QNX4FS_FS is not set
++# CONFIG_ROMFS_FS is not set
++# CONFIG_SYSV_FS is not set
++# CONFIG_UFS_FS is not set
++# CONFIG_NILFS2_FS is not set
++CONFIG_NETWORK_FILESYSTEMS=y
++CONFIG_NFS_FS=m
++CONFIG_NFS_V3=y
++CONFIG_NFS_V3_ACL=y
++CONFIG_NFS_V4=y
++CONFIG_NFSD=m
++CONFIG_NFSD_V2_ACL=y
++CONFIG_NFSD_V3=y
++CONFIG_NFSD_V3_ACL=y
++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_SUNRPC_GSS=m
++CONFIG_RPCSEC_GSS_KRB5=m
++# CONFIG_RPCSEC_GSS_SPKM3 is not set
++CONFIG_SMB_FS=m
++CONFIG_SMB_NLS_DEFAULT=y
++CONFIG_SMB_NLS_REMOTE="cp936"
++CONFIG_CIFS=m
++CONFIG_CIFS_STATS=y
++CONFIG_CIFS_STATS2=y
++CONFIG_CIFS_WEAK_PW_HASH=y
++CONFIG_CIFS_XATTR=y
++CONFIG_CIFS_POSIX=y
++CONFIG_CIFS_DEBUG2=y
++CONFIG_CIFS_EXPERIMENTAL=y
++# CONFIG_NCP_FS is not set
++# CONFIG_CODA_FS is not set
++# CONFIG_AFS_FS is not set
++# CONFIG_9P_FS is not set
++
++#
++# Partition Types
++#
++CONFIG_PARTITION_ADVANCED=y
++# CONFIG_ACORN_PARTITION is not set
++# CONFIG_OSF_PARTITION is not set
++# CONFIG_AMIGA_PARTITION is not set
++# CONFIG_ATARI_PARTITION is not set
++# CONFIG_MAC_PARTITION is not set
++CONFIG_MSDOS_PARTITION=y
++# CONFIG_BSD_DISKLABEL is not set
++# CONFIG_MINIX_SUBPARTITION is not set
++# CONFIG_SOLARIS_X86_PARTITION is not set
++# CONFIG_UNIXWARE_DISKLABEL is not set
++# CONFIG_LDM_PARTITION is not set
++# CONFIG_SGI_PARTITION is not set
++# CONFIG_ULTRIX_PARTITION is not set
++# CONFIG_SUN_PARTITION is not set
++# CONFIG_KARMA_PARTITION is not set
++# CONFIG_EFI_PARTITION is not set
++# CONFIG_SYSV68_PARTITION is not set
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="utf8"
++# 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=y
++# 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=y
++# 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 is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++# CONFIG_ENABLE_MUST_CHECK is not set
++CONFIG_FRAME_WARN=2048
++# CONFIG_MAGIC_SYSRQ is not set
++# CONFIG_UNUSED_SYMBOLS is not set
++CONFIG_DEBUG_FS=y
++# 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_RING_BUFFER=y
++CONFIG_TRACING=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_FTRACE_STARTUP_TEST is not set
++# CONFIG_DYNAMIC_DEBUG is not set
++# CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++CONFIG_CMDLINE=""
++
++#
++# Security options
++#
++# CONFIG_KEYS is not set
++# CONFIG_SECURITY is not set
++# CONFIG_SECURITYFS is not set
++CONFIG_SECURITY_FILE_CAPABILITIES=y
++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=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_MANAGER2=y
++CONFIG_CRYPTO_GF128MUL=m
++# CONFIG_CRYPTO_NULL is not set
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++CONFIG_CRYPTO_AUTHENC=m
++# CONFIG_CRYPTO_TEST is not set
++
++#
++# Authenticated Encryption with Associated Data
++#
++CONFIG_CRYPTO_CCM=m
++CONFIG_CRYPTO_GCM=m
++CONFIG_CRYPTO_SEQIV=m
++
++#
++# Block modes
++#
++CONFIG_CRYPTO_CBC=m
++CONFIG_CRYPTO_CTR=m
++CONFIG_CRYPTO_CTS=m
++CONFIG_CRYPTO_ECB=m
++# CONFIG_CRYPTO_LRW is not set
++CONFIG_CRYPTO_PCBC=m
++CONFIG_CRYPTO_XTS=m
++
++#
++# Hash modes
++#
++CONFIG_CRYPTO_HMAC=y
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++# CONFIG_CRYPTO_CRC32C is not set
++# CONFIG_CRYPTO_MD4 is not set
++CONFIG_CRYPTO_MD5=m
++# CONFIG_CRYPTO_MICHAEL_MIC is not set
++CONFIG_CRYPTO_RMD128=m
++CONFIG_CRYPTO_RMD160=m
++CONFIG_CRYPTO_RMD256=m
++CONFIG_CRYPTO_RMD320=m
++CONFIG_CRYPTO_SHA1=m
++# CONFIG_CRYPTO_SHA256 is not set
++# CONFIG_CRYPTO_SHA512 is not set
++# CONFIG_CRYPTO_TGR192 is not set
++# CONFIG_CRYPTO_WP512 is not set
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=m
++# CONFIG_CRYPTO_ANUBIS is not set
++CONFIG_CRYPTO_ARC4=m
++# 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=m
++# CONFIG_CRYPTO_FCRYPT is not set
++# CONFIG_CRYPTO_KHAZAD is not set
++CONFIG_CRYPTO_SALSA20=m
++CONFIG_CRYPTO_SEED=m
++# CONFIG_CRYPTO_SERPENT is not set
++# CONFIG_CRYPTO_TEA is not set
++# CONFIG_CRYPTO_TWOFISH is not set
++
++#
++# Compression
++#
++CONFIG_CRYPTO_DEFLATE=m
++# CONFIG_CRYPTO_ZLIB is not set
++CONFIG_CRYPTO_LZO=m
++
++#
++# Random Number Generation
++#
++CONFIG_CRYPTO_ANSI_CPRNG=m
++# CONFIG_CRYPTO_HW is not set
++CONFIG_BINARY_PRINTF=y
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
++CONFIG_CRC_CCITT=y
++CONFIG_CRC16=m
++# CONFIG_CRC_T10DIF is not set
++CONFIG_CRC_ITU_T=m
++CONFIG_CRC32=y
++CONFIG_CRC7=m
++# CONFIG_LIBCRC32C is not set
++CONFIG_ZLIB_INFLATE=m
++CONFIG_ZLIB_DEFLATE=m
++CONFIG_LZO_COMPRESS=m
++CONFIG_LZO_DECOMPRESS=m
++CONFIG_TEXTSEARCH=y
++CONFIG_TEXTSEARCH_KMP=m
++CONFIG_TEXTSEARCH_BM=m
++CONFIG_TEXTSEARCH_FSM=m
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
+diff -Nur linux-2.6.30/arch/mips/configs/fuloong2f_defconfig rt4ls/arch/mips/configs/fuloong2f_defconfig
+--- linux-2.6.30/arch/mips/configs/fuloong2f_defconfig 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/configs/fuloong2f_defconfig 2009-06-12 16:27:08.246405134 +0200
+@@ -0,0 +1,2637 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.30-rc8
++# Wed Jun 10 22:20:53 2009
++#
++CONFIG_MIPS=y
++
++#
++# Machine selection
++#
++# CONFIG_MACH_ALCHEMY is not set
++# CONFIG_BASLER_EXCITE is not set
++# CONFIG_BCM47XX 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_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_ARCH_SPARSEMEM_ENABLE=y
++# CONFIG_LEMOTE_FULOONG2E is not set
++CONFIG_LEMOTE_FULOONG2F=y
++# CONFIG_LEMOTE_YEELOONG2F is not set
++CONFIG_CS5536=y
++CONFIG_CS5536_MFGPT=y
++CONFIG_UCA_SIZE=0x2000000
++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_DMA_NONCOHERENT=y
++CONFIG_DMA_NEED_PCI_MAP_STATE=y
++CONFIG_EARLY_PRINTK=y
++CONFIG_SYS_HAS_EARLY_PRINTK=y
++# CONFIG_HOTPLUG_CPU is not set
++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_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
++
++#
++# 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_CPU_HAS_WB=y
++CONFIG_CPU_HAS_SYNC=y
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_CPU_SUPPORTS_HIGHMEM=y
++CONFIG_SYS_SUPPORTS_HIGHMEM=y
++CONFIG_ARCH_FLATMEM_ENABLE=y
++CONFIG_ARCH_POPULATES_NODE_MAP=y
++CONFIG_SELECT_MEMORY_MODEL=y
++# CONFIG_FLATMEM_MANUAL is not set
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++CONFIG_SPARSEMEM_MANUAL=y
++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_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=y
++CONFIG_TICK_ONESHOT=y
++CONFIG_NO_HZ=y
++CONFIG_HIGH_RES_TIMERS=y
++CONFIG_GENERIC_CLOCKEVENTS_BUILD=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=y
++# CONFIG_PREEMPT is not set
++CONFIG_KEXEC=y
++# CONFIG_SECCOMP is not set
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION=""
++# CONFIG_LOCALVERSION_AUTO is not set
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++CONFIG_POSIX_MQUEUE=y
++CONFIG_POSIX_MQUEUE_SYSCTL=y
++CONFIG_BSD_PROCESS_ACCT=y
++CONFIG_BSD_PROCESS_ACCT_V3=y
++# CONFIG_TASKSTATS is not set
++CONFIG_AUDIT=y
++
++#
++# RCU Subsystem
++#
++CONFIG_CLASSIC_RCU=y
++# CONFIG_TREE_RCU is not set
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=15
++# CONFIG_GROUP_SCHED is not set
++# CONFIG_CGROUPS is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++# CONFIG_NAMESPACES is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_RD_GZIP=y
++# CONFIG_RD_BZIP2 is not set
++# CONFIG_RD_LZMA is not set
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++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_STRIP_ASM_SYMS 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
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_PCI_QUIRKS=y
++CONFIG_COMPAT_BRK=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++CONFIG_PROFILING=y
++# CONFIG_MARKERS is not set
++# CONFIG_OPROFILE is not set
++CONFIG_HAVE_OPROFILE=y
++CONFIG_HAVE_SYSCALL_WRAPPERS=y
++# CONFIG_SLOW_WORK is not set
++# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++CONFIG_MODVERSIONS=y
++# CONFIG_MODULE_SRCVERSION_ALL 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_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
++# CONFIG_DEFAULT_AS is not set
++# CONFIG_DEFAULT_DEADLINE is not set
++CONFIG_DEFAULT_CFQ=y
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="cfq"
++# CONFIG_PROBE_INITRD_HEADER is not set
++CONFIG_FREEZER=y
++
++#
++# 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_LEGACY=y
++# CONFIG_PCI_STUB is not set
++# CONFIG_PCI_IOV is not set
++CONFIG_ISA=y
++CONFIG_MMU=y
++CONFIG_PCCARD=m
++# CONFIG_PCMCIA_DEBUG is not set
++CONFIG_PCMCIA=m
++CONFIG_PCMCIA_LOAD_CIS=y
++CONFIG_PCMCIA_IOCTL=y
++CONFIG_CARDBUS=y
++
++#
++# PC-card bridges
++#
++CONFIG_YENTA=m
++CONFIG_YENTA_O2=y
++CONFIG_YENTA_RICOH=y
++CONFIG_YENTA_TI=y
++CONFIG_YENTA_ENE_TUNE=y
++CONFIG_YENTA_TOSHIBA=y
++CONFIG_PD6729=m
++CONFIG_I82092=m
++CONFIG_I82365=m
++CONFIG_TCIC=m
++CONFIG_PCMCIA_PROBE=y
++CONFIG_PCCARD_NONSTATIC=m
++CONFIG_HOTPLUG_PCI=m
++CONFIG_HOTPLUG_PCI_FAKE=m
++CONFIG_HOTPLUG_PCI_CPCI=y
++CONFIG_HOTPLUG_PCI_SHPC=m
++
++#
++# 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=m
++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=y
++# CONFIG_PM_DEBUG is not set
++CONFIG_PM_SLEEP=y
++CONFIG_SUSPEND=y
++CONFIG_SUSPEND_FREEZER=y
++CONFIG_HIBERNATION=y
++CONFIG_PM_STD_PARTITION="/dev/hda3"
++
++#
++# CPU Frequency scaling
++#
++CONFIG_CPU_FREQ=y
++CONFIG_CPU_FREQ_TABLE=y
++# CONFIG_CPU_FREQ_DEBUG is not set
++CONFIG_CPU_FREQ_STAT=y
++# CONFIG_CPU_FREQ_STAT_DETAILS is not set
++# 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 is not set
++CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y
++CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
++CONFIG_CPU_FREQ_GOV_POWERSAVE=y
++CONFIG_CPU_FREQ_GOV_USERSPACE=y
++CONFIG_CPU_FREQ_GOV_ONDEMAND=y
++CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
++CONFIG_LOONGSON2F_CPU_FREQ=y
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++CONFIG_XFRM_USER=m
++# CONFIG_XFRM_SUB_POLICY is not set
++# CONFIG_XFRM_MIGRATE is not set
++# CONFIG_XFRM_STATISTICS is not set
++CONFIG_XFRM_IPCOMP=m
++CONFIG_NET_KEY=m
++# CONFIG_NET_KEY_MIGRATE is not set
++CONFIG_INET=y
++CONFIG_IP_MULTICAST=y
++CONFIG_IP_ADVANCED_ROUTER=y
++CONFIG_ASK_IP_FIB_HASH=y
++# CONFIG_IP_FIB_TRIE is not set
++CONFIG_IP_FIB_HASH=y
++CONFIG_IP_MULTIPLE_TABLES=y
++CONFIG_IP_ROUTE_MULTIPATH=y
++CONFIG_IP_ROUTE_VERBOSE=y
++# CONFIG_IP_PNP is not set
++CONFIG_NET_IPIP=m
++CONFIG_NET_IPGRE=m
++CONFIG_NET_IPGRE_BROADCAST=y
++CONFIG_IP_MROUTE=y
++CONFIG_IP_PIMSM_V1=y
++CONFIG_IP_PIMSM_V2=y
++# CONFIG_ARPD is not set
++CONFIG_SYN_COOKIES=y
++CONFIG_INET_AH=m
++CONFIG_INET_ESP=m
++CONFIG_INET_IPCOMP=m
++CONFIG_INET_XFRM_TUNNEL=m
++CONFIG_INET_TUNNEL=m
++CONFIG_INET_XFRM_MODE_TRANSPORT=m
++CONFIG_INET_XFRM_MODE_TUNNEL=m
++CONFIG_INET_XFRM_MODE_BEET=y
++CONFIG_INET_LRO=y
++CONFIG_INET_DIAG=m
++CONFIG_INET_TCP_DIAG=m
++CONFIG_TCP_CONG_ADVANCED=y
++CONFIG_TCP_CONG_BIC=y
++CONFIG_TCP_CONG_CUBIC=m
++CONFIG_TCP_CONG_WESTWOOD=m
++CONFIG_TCP_CONG_HTCP=m
++CONFIG_TCP_CONG_HSTCP=m
++CONFIG_TCP_CONG_HYBLA=m
++CONFIG_TCP_CONG_VEGAS=m
++CONFIG_TCP_CONG_SCALABLE=m
++CONFIG_TCP_CONG_LP=m
++CONFIG_TCP_CONG_VENO=m
++# CONFIG_TCP_CONG_YEAH is not set
++# CONFIG_TCP_CONG_ILLINOIS is not set
++CONFIG_DEFAULT_BIC=y
++# CONFIG_DEFAULT_CUBIC is not set
++# CONFIG_DEFAULT_HTCP is not set
++# CONFIG_DEFAULT_VEGAS is not set
++# CONFIG_DEFAULT_WESTWOOD is not set
++# CONFIG_DEFAULT_RENO is not set
++CONFIG_DEFAULT_TCP_CONG="bic"
++# CONFIG_TCP_MD5SIG is not set
++CONFIG_IPV6=m
++CONFIG_IPV6_PRIVACY=y
++# CONFIG_IPV6_ROUTER_PREF is not set
++# CONFIG_IPV6_OPTIMISTIC_DAD is not set
++CONFIG_INET6_AH=m
++CONFIG_INET6_ESP=m
++CONFIG_INET6_IPCOMP=m
++# CONFIG_IPV6_MIP6 is not set
++CONFIG_INET6_XFRM_TUNNEL=m
++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_NDISC_NODETYPE=y
++CONFIG_IPV6_TUNNEL=m
++# CONFIG_IPV6_MULTIPLE_TABLES is not set
++# CONFIG_IPV6_MROUTE is not set
++# CONFIG_NETLABEL is not set
++CONFIG_NETWORK_SECMARK=y
++CONFIG_NETFILTER=y
++# CONFIG_NETFILTER_DEBUG is not set
++CONFIG_NETFILTER_ADVANCED=y
++CONFIG_BRIDGE_NETFILTER=y
++
++#
++# Core Netfilter Configuration
++#
++CONFIG_NETFILTER_NETLINK=m
++CONFIG_NETFILTER_NETLINK_QUEUE=m
++CONFIG_NETFILTER_NETLINK_LOG=m
++# CONFIG_NF_CONNTRACK is not set
++# CONFIG_NETFILTER_TPROXY is not set
++CONFIG_NETFILTER_XTABLES=m
++CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
++# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
++CONFIG_NETFILTER_XT_TARGET_HL=m
++CONFIG_NETFILTER_XT_TARGET_MARK=m
++# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
++CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
++# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
++# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
++CONFIG_NETFILTER_XT_TARGET_SECMARK=m
++# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
++# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
++CONFIG_NETFILTER_XT_MATCH_COMMENT=m
++CONFIG_NETFILTER_XT_MATCH_DCCP=m
++# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
++CONFIG_NETFILTER_XT_MATCH_ESP=m
++# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
++CONFIG_NETFILTER_XT_MATCH_HL=m
++# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
++CONFIG_NETFILTER_XT_MATCH_LENGTH=m
++CONFIG_NETFILTER_XT_MATCH_LIMIT=m
++CONFIG_NETFILTER_XT_MATCH_MAC=m
++CONFIG_NETFILTER_XT_MATCH_MARK=m
++CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
++# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
++CONFIG_NETFILTER_XT_MATCH_POLICY=m
++CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
++CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
++CONFIG_NETFILTER_XT_MATCH_QUOTA=m
++# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
++CONFIG_NETFILTER_XT_MATCH_REALM=m
++# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
++CONFIG_NETFILTER_XT_MATCH_SCTP=m
++CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
++CONFIG_NETFILTER_XT_MATCH_STRING=m
++CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
++# CONFIG_NETFILTER_XT_MATCH_TIME is not set
++# CONFIG_NETFILTER_XT_MATCH_U32 is not set
++CONFIG_IP_VS=m
++# CONFIG_IP_VS_IPV6 is not set
++# CONFIG_IP_VS_DEBUG is not set
++CONFIG_IP_VS_TAB_BITS=12
++
++#
++# IPVS transport protocol load balancing support
++#
++CONFIG_IP_VS_PROTO_TCP=y
++CONFIG_IP_VS_PROTO_UDP=y
++CONFIG_IP_VS_PROTO_AH_ESP=y
++CONFIG_IP_VS_PROTO_ESP=y
++CONFIG_IP_VS_PROTO_AH=y
++
++#
++# IPVS scheduler
++#
++CONFIG_IP_VS_RR=m
++CONFIG_IP_VS_WRR=m
++CONFIG_IP_VS_LC=m
++CONFIG_IP_VS_WLC=m
++CONFIG_IP_VS_LBLC=m
++CONFIG_IP_VS_LBLCR=m
++CONFIG_IP_VS_DH=m
++CONFIG_IP_VS_SH=m
++CONFIG_IP_VS_SED=m
++CONFIG_IP_VS_NQ=m
++
++#
++# IPVS application helper
++#
++CONFIG_IP_VS_FTP=m
++
++#
++# IP: Netfilter Configuration
++#
++# CONFIG_NF_DEFRAG_IPV4 is not set
++CONFIG_IP_NF_QUEUE=m
++CONFIG_IP_NF_IPTABLES=m
++CONFIG_IP_NF_MATCH_ADDRTYPE=m
++CONFIG_IP_NF_MATCH_AH=m
++CONFIG_IP_NF_MATCH_ECN=m
++CONFIG_IP_NF_MATCH_TTL=m
++CONFIG_IP_NF_FILTER=m
++CONFIG_IP_NF_TARGET_REJECT=m
++CONFIG_IP_NF_TARGET_LOG=m
++CONFIG_IP_NF_TARGET_ULOG=m
++CONFIG_IP_NF_MANGLE=m
++CONFIG_IP_NF_TARGET_ECN=m
++CONFIG_IP_NF_TARGET_TTL=m
++CONFIG_IP_NF_RAW=m
++# CONFIG_IP_NF_SECURITY is not set
++CONFIG_IP_NF_ARPTABLES=m
++CONFIG_IP_NF_ARPFILTER=m
++CONFIG_IP_NF_ARP_MANGLE=m
++
++#
++# IPv6: Netfilter Configuration
++#
++CONFIG_IP6_NF_QUEUE=m
++CONFIG_IP6_NF_IPTABLES=m
++CONFIG_IP6_NF_MATCH_AH=m
++CONFIG_IP6_NF_MATCH_EUI64=m
++CONFIG_IP6_NF_MATCH_FRAG=m
++CONFIG_IP6_NF_MATCH_OPTS=m
++CONFIG_IP6_NF_MATCH_HL=m
++CONFIG_IP6_NF_MATCH_IPV6HEADER=m
++# CONFIG_IP6_NF_MATCH_MH is not set
++CONFIG_IP6_NF_MATCH_RT=m
++CONFIG_IP6_NF_TARGET_HL=m
++CONFIG_IP6_NF_TARGET_LOG=m
++CONFIG_IP6_NF_FILTER=m
++CONFIG_IP6_NF_TARGET_REJECT=m
++CONFIG_IP6_NF_MANGLE=m
++CONFIG_IP6_NF_RAW=m
++# CONFIG_IP6_NF_SECURITY is not set
++
++#
++# DECnet: Netfilter Configuration
++#
++CONFIG_DECNET_NF_GRABULATOR=m
++CONFIG_BRIDGE_NF_EBTABLES=m
++CONFIG_BRIDGE_EBT_BROUTE=m
++CONFIG_BRIDGE_EBT_T_FILTER=m
++CONFIG_BRIDGE_EBT_T_NAT=m
++CONFIG_BRIDGE_EBT_802_3=m
++CONFIG_BRIDGE_EBT_AMONG=m
++CONFIG_BRIDGE_EBT_ARP=m
++CONFIG_BRIDGE_EBT_IP=m
++# CONFIG_BRIDGE_EBT_IP6 is not set
++CONFIG_BRIDGE_EBT_LIMIT=m
++CONFIG_BRIDGE_EBT_MARK=m
++CONFIG_BRIDGE_EBT_PKTTYPE=m
++CONFIG_BRIDGE_EBT_STP=m
++CONFIG_BRIDGE_EBT_VLAN=m
++CONFIG_BRIDGE_EBT_ARPREPLY=m
++CONFIG_BRIDGE_EBT_DNAT=m
++CONFIG_BRIDGE_EBT_MARK_T=m
++CONFIG_BRIDGE_EBT_REDIRECT=m
++CONFIG_BRIDGE_EBT_SNAT=m
++CONFIG_BRIDGE_EBT_LOG=m
++CONFIG_BRIDGE_EBT_ULOG=m
++# CONFIG_BRIDGE_EBT_NFLOG is not set
++CONFIG_IP_DCCP=m
++CONFIG_INET_DCCP_DIAG=m
++
++#
++# DCCP CCIDs Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_DCCP_CCID2_DEBUG is not set
++CONFIG_IP_DCCP_CCID3=y
++# CONFIG_IP_DCCP_CCID3_DEBUG is not set
++CONFIG_IP_DCCP_CCID3_RTO=100
++CONFIG_IP_DCCP_TFRC_LIB=y
++CONFIG_IP_SCTP=m
++# CONFIG_SCTP_DBG_MSG is not set
++# CONFIG_SCTP_DBG_OBJCNT is not set
++# CONFIG_SCTP_HMAC_NONE is not set
++# CONFIG_SCTP_HMAC_SHA1 is not set
++CONFIG_SCTP_HMAC_MD5=y
++CONFIG_TIPC=m
++CONFIG_TIPC_ADVANCED=y
++CONFIG_TIPC_ZONES=3
++CONFIG_TIPC_CLUSTERS=1
++CONFIG_TIPC_NODES=255
++CONFIG_TIPC_SLAVE_NODES=0
++CONFIG_TIPC_PORTS=8191
++CONFIG_TIPC_LOG=0
++# CONFIG_TIPC_DEBUG is not set
++CONFIG_ATM=y
++CONFIG_ATM_CLIP=y
++# CONFIG_ATM_CLIP_NO_ICMP is not set
++CONFIG_ATM_LANE=m
++CONFIG_ATM_MPOA=m
++CONFIG_ATM_BR2684=m
++# CONFIG_ATM_BR2684_IPFILTER is not set
++CONFIG_STP=m
++CONFIG_BRIDGE=m
++# CONFIG_NET_DSA is not set
++CONFIG_VLAN_8021Q=m
++# CONFIG_VLAN_8021Q_GVRP is not set
++CONFIG_DECNET=m
++# CONFIG_DECNET_ROUTER is not set
++CONFIG_LLC=m
++CONFIG_LLC2=m
++CONFIG_IPX=m
++# CONFIG_IPX_INTERN is not set
++CONFIG_ATALK=m
++CONFIG_DEV_APPLETALK=m
++# CONFIG_COPS is not set
++CONFIG_IPDDP=m
++CONFIG_IPDDP_ENCAP=y
++CONFIG_IPDDP_DECAP=y
++CONFIG_X25=m
++CONFIG_LAPB=m
++CONFIG_ECONET=m
++CONFIG_ECONET_AUNUDP=y
++CONFIG_ECONET_NATIVE=y
++CONFIG_WAN_ROUTER=m
++# CONFIG_PHONET is not set
++CONFIG_NET_SCHED=y
++
++#
++# Queueing/Scheduling
++#
++CONFIG_NET_SCH_CBQ=m
++CONFIG_NET_SCH_HTB=m
++CONFIG_NET_SCH_HFSC=m
++CONFIG_NET_SCH_ATM=m
++CONFIG_NET_SCH_PRIO=m
++# CONFIG_NET_SCH_MULTIQ is not set
++CONFIG_NET_SCH_RED=m
++CONFIG_NET_SCH_SFQ=m
++CONFIG_NET_SCH_TEQL=m
++CONFIG_NET_SCH_TBF=m
++CONFIG_NET_SCH_GRED=m
++CONFIG_NET_SCH_DSMARK=m
++CONFIG_NET_SCH_NETEM=m
++# CONFIG_NET_SCH_DRR is not set
++CONFIG_NET_SCH_INGRESS=m
++
++#
++# Classification
++#
++CONFIG_NET_CLS=y
++CONFIG_NET_CLS_BASIC=m
++CONFIG_NET_CLS_TCINDEX=m
++CONFIG_NET_CLS_ROUTE4=m
++CONFIG_NET_CLS_ROUTE=y
++CONFIG_NET_CLS_FW=m
++CONFIG_NET_CLS_U32=m
++CONFIG_CLS_U32_PERF=y
++CONFIG_CLS_U32_MARK=y
++CONFIG_NET_CLS_RSVP=m
++CONFIG_NET_CLS_RSVP6=m
++# CONFIG_NET_CLS_FLOW is not set
++CONFIG_NET_EMATCH=y
++CONFIG_NET_EMATCH_STACK=32
++CONFIG_NET_EMATCH_CMP=m
++CONFIG_NET_EMATCH_NBYTE=m
++CONFIG_NET_EMATCH_U32=m
++CONFIG_NET_EMATCH_META=m
++CONFIG_NET_EMATCH_TEXT=m
++CONFIG_NET_CLS_ACT=y
++CONFIG_NET_ACT_POLICE=m
++CONFIG_NET_ACT_GACT=m
++CONFIG_GACT_PROB=y
++CONFIG_NET_ACT_MIRRED=m
++CONFIG_NET_ACT_IPT=m
++# CONFIG_NET_ACT_NAT is not set
++CONFIG_NET_ACT_PEDIT=m
++CONFIG_NET_ACT_SIMP=m
++# CONFIG_NET_ACT_SKBEDIT is not set
++CONFIG_NET_CLS_IND=y
++CONFIG_NET_SCH_FIFO=y
++# CONFIG_DCB is not set
++
++#
++# Network testing
++#
++CONFIG_NET_PKTGEN=m
++CONFIG_HAMRADIO=y
++
++#
++# Packet Radio protocols
++#
++CONFIG_AX25=m
++# CONFIG_AX25_DAMA_SLAVE is not set
++CONFIG_NETROM=m
++CONFIG_ROSE=m
++
++#
++# AX.25 network device drivers
++#
++CONFIG_MKISS=m
++CONFIG_6PACK=m
++CONFIG_BPQETHER=m
++CONFIG_BAYCOM_SER_FDX=m
++CONFIG_BAYCOM_SER_HDX=m
++CONFIG_YAM=m
++# CONFIG_CAN is not set
++# CONFIG_IRDA is not set
++# CONFIG_BT is not set
++CONFIG_AF_RXRPC=y
++# CONFIG_AF_RXRPC_DEBUG is not set
++# CONFIG_RXKAD is not set
++CONFIG_FIB_RULES=y
++# 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_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=m
++CONFIG_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
++# CONFIG_SYS_HYPERVISOR is not set
++CONFIG_CONNECTOR=m
++# CONFIG_MTD is not set
++# CONFIG_PARPORT is not set
++CONFIG_PNP=y
++CONFIG_PNP_DEBUG_MESSAGES=y
++
++#
++# Protocols
++#
++CONFIG_ISAPNP=y
++# CONFIG_PNPACPI 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=y
++CONFIG_BLK_DEV_NBD=m
++# 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=m
++CONFIG_CDROM_PKTCDVD_BUFFERS=8
++# CONFIG_CDROM_PKTCDVD_WCACHE is not set
++CONFIG_ATA_OVER_ETH=m
++# 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_ICS932S401 is not set
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_HP_ILO is not set
++# CONFIG_ISL29003 is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_AT24 is not set
++# CONFIG_EEPROM_LEGACY is not set
++# CONFIG_EEPROM_93CX6 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_IDE_ATAPI=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_IDECS is not set
++# CONFIG_BLK_DEV_DELKIN is not set
++CONFIG_BLK_DEV_IDECD=m
++CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
++# CONFIG_BLK_DEV_IDETAPE is not set
++CONFIG_IDE_TASK_IOCTL=y
++CONFIG_IDE_PROC_FS=y
++
++#
++# IDE chipset support/bugfixes
++#
++# CONFIG_IDE_GENERIC is not set
++# CONFIG_BLK_DEV_PLATFORM is not set
++# CONFIG_BLK_DEV_IDEPNP 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_OFFBOARD is not set
++CONFIG_BLK_DEV_GENERIC=y
++# 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_RAID_ATTRS is not set
++CONFIG_SCSI=y
++CONFIG_SCSI_DMA=y
++# CONFIG_SCSI_TGT is not set
++CONFIG_SCSI_NETLINK=y
++CONFIG_SCSI_PROC_FS=y
++
++#
++# 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=m
++CONFIG_BLK_DEV_SR_VENDOR=y
++CONFIG_CHR_DEV_SG=m
++CONFIG_CHR_DEV_SCH=m
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++CONFIG_SCSI_MULTI_LUN=y
++CONFIG_SCSI_CONSTANTS=y
++CONFIG_SCSI_LOGGING=y
++# CONFIG_SCSI_SCAN_ASYNC is not set
++CONFIG_SCSI_WAIT_SCAN=m
++
++#
++# SCSI Transports
++#
++CONFIG_SCSI_SPI_ATTRS=m
++CONFIG_SCSI_FC_ATTRS=m
++CONFIG_SCSI_ISCSI_ATTRS=m
++CONFIG_SCSI_SAS_ATTRS=m
++# CONFIG_SCSI_SAS_LIBSAS is not set
++CONFIG_SCSI_SRP_ATTRS=m
++CONFIG_SCSI_LOWLEVEL=y
++CONFIG_ISCSI_TCP=m
++# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
++# CONFIG_SCSI_3W_9XXX is not set
++# CONFIG_SCSI_ACARD is not set
++# CONFIG_SCSI_AACRAID is not set
++# CONFIG_SCSI_AIC7XXX is not set
++# CONFIG_SCSI_AIC7XXX_OLD is not set
++# CONFIG_SCSI_AIC79XX is not set
++# CONFIG_SCSI_AIC94XX is not set
++# CONFIG_SCSI_DPT_I2O is not set
++# CONFIG_SCSI_ADVANSYS is not set
++# CONFIG_SCSI_IN2000 is not set
++# CONFIG_SCSI_ARCMSR is not set
++# CONFIG_MEGARAID_NEWGEN is not set
++# CONFIG_MEGARAID_LEGACY is not set
++# CONFIG_MEGARAID_SAS is not set
++# CONFIG_SCSI_MPT2SAS is not set
++# CONFIG_SCSI_HPTIOP is not set
++# CONFIG_LIBFC is not set
++# CONFIG_LIBFCOE is not set
++# CONFIG_FCOE is not set
++# CONFIG_SCSI_DMX3191D is not set
++# CONFIG_SCSI_DTC3280 is not set
++# CONFIG_SCSI_FUTURE_DOMAIN is not set
++# CONFIG_SCSI_GENERIC_NCR5380 is not set
++# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
++# CONFIG_SCSI_IPS is not set
++# CONFIG_SCSI_INITIO is not set
++# CONFIG_SCSI_INIA100 is not set
++# CONFIG_SCSI_MVSAS is not set
++# CONFIG_SCSI_NCR53C406A is not set
++# CONFIG_SCSI_STEX is not set
++# CONFIG_SCSI_SYM53C8XX_2 is not set
++# CONFIG_SCSI_PAS16 is not set
++# CONFIG_SCSI_QLOGIC_FAS is not set
++# CONFIG_SCSI_QLOGIC_1280 is not set
++# CONFIG_SCSI_QLA_FC is not set
++# CONFIG_SCSI_QLA_ISCSI is not set
++# CONFIG_SCSI_LPFC is not set
++# CONFIG_SCSI_SYM53C416 is not set
++# CONFIG_SCSI_DC395x is not set
++# CONFIG_SCSI_DC390T is not set
++# CONFIG_SCSI_T128 is not set
++# CONFIG_SCSI_DEBUG is not set
++# CONFIG_SCSI_SRP is not set
++# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
++# CONFIG_SCSI_DH is not set
++# CONFIG_SCSI_OSD_INITIATOR is not set
++# CONFIG_ATA 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_MD_MULTIPATH=m
++CONFIG_MD_FAULTY=m
++CONFIG_BLK_DEV_DM=m
++# CONFIG_DM_DEBUG is not set
++CONFIG_DM_CRYPT=m
++CONFIG_DM_SNAPSHOT=m
++CONFIG_DM_MIRROR=m
++CONFIG_DM_ZERO=m
++CONFIG_DM_MULTIPATH=m
++# CONFIG_DM_DELAY is not set
++# CONFIG_DM_UEVENT is not set
++CONFIG_FUSION=y
++CONFIG_FUSION_SPI=m
++CONFIG_FUSION_FC=m
++CONFIG_FUSION_SAS=m
++CONFIG_FUSION_MAX_SGE=40
++CONFIG_FUSION_CTL=m
++# CONFIG_FUSION_LOGGING is not set
++
++#
++# IEEE 1394 (FireWire) support
++#
++
++#
++# Enable only one of the two stacks, unless you know what you are doing
++#
++# CONFIG_FIREWIRE is not set
++# CONFIG_IEEE1394 is not set
++# CONFIG_I2O is not set
++CONFIG_NETDEVICES=y
++CONFIG_COMPAT_NET_DEV_OPS=y
++# CONFIG_IFB is not set
++# CONFIG_DUMMY is not set
++# CONFIG_BONDING is not set
++# CONFIG_MACVLAN is not set
++# CONFIG_EQUALIZER is not set
++CONFIG_TUN=m
++CONFIG_VETH=m
++CONFIG_NET_SB1000=m
++# CONFIG_ARCNET is not set
++CONFIG_PHYLIB=y
++
++#
++# MII PHY device drivers
++#
++CONFIG_MARVELL_PHY=m
++CONFIG_DAVICOM_PHY=m
++CONFIG_QSEMI_PHY=m
++CONFIG_LXT_PHY=m
++CONFIG_CICADA_PHY=m
++CONFIG_VITESSE_PHY=m
++CONFIG_SMSC_PHY=m
++# CONFIG_BROADCOM_PHY is not set
++# CONFIG_ICPLUS_PHY is not set
++CONFIG_REALTEK_PHY=m
++# CONFIG_NATIONAL_PHY is not set
++# CONFIG_STE10XP is not set
++# CONFIG_LSI_ET1011C_PHY is not set
++# CONFIG_FIXED_PHY is not set
++# CONFIG_MDIO_BITBANG 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_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 is not set
++# CONFIG_B44 is not set
++# CONFIG_CS89x0 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_R8169_VLAN=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_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
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 is not set
++# CONFIG_WLAN_80211 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_NET_PCMCIA is not set
++# CONFIG_WAN is not set
++# CONFIG_ATM_DRIVERS is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++CONFIG_PPP=m
++CONFIG_PPP_MULTILINK=y
++CONFIG_PPP_FILTER=y
++CONFIG_PPP_ASYNC=m
++CONFIG_PPP_SYNC_TTY=m
++CONFIG_PPP_DEFLATE=m
++CONFIG_PPP_BSDCOMP=m
++CONFIG_PPP_MPPE=m
++CONFIG_PPPOE=m
++CONFIG_PPPOATM=m
++# CONFIG_PPPOL2TP is not set
++# CONFIG_SLIP is not set
++CONFIG_SLHC=m
++# CONFIG_NET_FC is not set
++# CONFIG_NETCONSOLE is not set
++# CONFIG_NETPOLL is not set
++# CONFIG_NET_POLL_CONTROLLER is not set
++# CONFIG_ISDN is not set
++# CONFIG_PHONE is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++# CONFIG_INPUT_POLLDEV 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=m
++CONFIG_INPUT_EVDEV=m
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++CONFIG_INPUT_KEYBOARD=y
++CONFIG_KEYBOARD_ATKBD=y
++CONFIG_KEYBOARD_SUNKBD=m
++CONFIG_KEYBOARD_LKKBD=m
++CONFIG_KEYBOARD_XTKBD=m
++CONFIG_KEYBOARD_NEWTON=m
++# CONFIG_KEYBOARD_STOWAWAY is not set
++CONFIG_INPUT_MOUSE=y
++CONFIG_MOUSE_PS2=y
++CONFIG_MOUSE_PS2_ALPS=y
++CONFIG_MOUSE_PS2_LOGIPS2PP=y
++CONFIG_MOUSE_PS2_SYNAPTICS=y
++CONFIG_MOUSE_PS2_TRACKPOINT=y
++# CONFIG_MOUSE_PS2_ELANTECH is not set
++# CONFIG_MOUSE_PS2_TOUCHKIT is not set
++CONFIG_MOUSE_SERIAL=m
++# CONFIG_MOUSE_APPLETOUCH is not set
++# CONFIG_MOUSE_BCM5974 is not set
++CONFIG_MOUSE_INPORT=m
++# CONFIG_MOUSE_ATIXL is not set
++CONFIG_MOUSE_LOGIBM=m
++CONFIG_MOUSE_PC110PAD=m
++CONFIG_MOUSE_VSXXXAA=m
++CONFIG_INPUT_JOYSTICK=y
++CONFIG_JOYSTICK_ANALOG=m
++CONFIG_JOYSTICK_A3D=m
++CONFIG_JOYSTICK_ADI=m
++CONFIG_JOYSTICK_COBRA=m
++CONFIG_JOYSTICK_GF2K=m
++CONFIG_JOYSTICK_GRIP=m
++CONFIG_JOYSTICK_GRIP_MP=m
++CONFIG_JOYSTICK_GUILLEMOT=m
++CONFIG_JOYSTICK_INTERACT=m
++CONFIG_JOYSTICK_SIDEWINDER=m
++CONFIG_JOYSTICK_TMDC=m
++CONFIG_JOYSTICK_IFORCE=m
++CONFIG_JOYSTICK_IFORCE_USB=y
++CONFIG_JOYSTICK_IFORCE_232=y
++CONFIG_JOYSTICK_WARRIOR=m
++CONFIG_JOYSTICK_MAGELLAN=m
++CONFIG_JOYSTICK_SPACEORB=m
++CONFIG_JOYSTICK_SPACEBALL=m
++CONFIG_JOYSTICK_STINGER=m
++CONFIG_JOYSTICK_TWIDJOY=m
++# CONFIG_JOYSTICK_ZHENHUA is not set
++CONFIG_JOYSTICK_JOYDUMP=m
++# CONFIG_JOYSTICK_XPAD is not set
++# CONFIG_INPUT_TABLET is not set
++CONFIG_INPUT_TOUCHSCREEN=y
++# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
++# CONFIG_TOUCHSCREEN_AD7879 is not set
++# CONFIG_TOUCHSCREEN_FUJITSU is not set
++CONFIG_TOUCHSCREEN_GUNZE=m
++CONFIG_TOUCHSCREEN_ELO=m
++# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
++CONFIG_TOUCHSCREEN_MTOUCH=m
++# CONFIG_TOUCHSCREEN_INEXIO is not set
++CONFIG_TOUCHSCREEN_MK712=m
++# CONFIG_TOUCHSCREEN_HTCPEN is not set
++# CONFIG_TOUCHSCREEN_PENMOUNT is not set
++# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
++# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
++# CONFIG_TOUCHSCREEN_WM97XX is not set
++# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
++# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
++# CONFIG_TOUCHSCREEN_TSC2007 is not set
++CONFIG_INPUT_MISC=y
++CONFIG_INPUT_PCSPKR=m
++# CONFIG_INPUT_ATI_REMOTE is not set
++# CONFIG_INPUT_ATI_REMOTE2 is not set
++# CONFIG_INPUT_KEYSPAN_REMOTE is not set
++# CONFIG_INPUT_POWERMATE is not set
++# CONFIG_INPUT_YEALINK is not set
++# CONFIG_INPUT_CM109 is not set
++CONFIG_INPUT_UINPUT=m
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++# CONFIG_SERIO_I8042 is not set
++CONFIG_SERIO_SERPORT=m
++CONFIG_SERIO_PCIPS2=m
++CONFIG_SERIO_LIBPS2=y
++CONFIG_SERIO_RAW=m
++CONFIG_GAMEPORT=m
++CONFIG_GAMEPORT_NS558=m
++CONFIG_GAMEPORT_L4=m
++CONFIG_GAMEPORT_EMU10K1=m
++CONFIG_GAMEPORT_FM801=m
++
++#
++# 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=y
++CONFIG_SERIAL_NONSTANDARD=y
++# CONFIG_COMPUTONE is not set
++# CONFIG_ROCKETPORT is not set
++# CONFIG_CYCLADES is not set
++# CONFIG_DIGIEPCA is not set
++# CONFIG_MOXA_INTELLIO is not set
++# CONFIG_MOXA_SMARTIO is not set
++# CONFIG_ISI is not set
++# CONFIG_SYNCLINKMP is not set
++# CONFIG_SYNCLINK_GT is not set
++# CONFIG_N_HDLC is not set
++# CONFIG_RISCOM8 is not set
++# CONFIG_SPECIALIX is not set
++# CONFIG_SX is not set
++# CONFIG_RIO is not set
++# CONFIG_STALDRV 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_PNP is not set
++CONFIG_SERIAL_8250_CS=m
++CONFIG_SERIAL_8250_NR_UARTS=16
++CONFIG_SERIAL_8250_RUNTIME_UARTS=4
++CONFIG_SERIAL_8250_EXTENDED=y
++CONFIG_SERIAL_8250_MANY_PORTS=y
++CONFIG_SERIAL_8250_FOURPORT=y
++# CONFIG_SERIAL_8250_ACCENT is not set
++# CONFIG_SERIAL_8250_BOCA is not set
++# CONFIG_SERIAL_8250_EXAR_ST16C554 is not set
++CONFIG_SERIAL_8250_HUB6=m
++CONFIG_SERIAL_8250_SHARE_IRQ=y
++# CONFIG_SERIAL_8250_DETECT_IRQ is not set
++CONFIG_SERIAL_8250_RSA=y
++
++#
++# Non-8250 serial port support
++#
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++# CONFIG_SERIAL_JSM is not set
++CONFIG_UNIX98_PTYS=y
++CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
++CONFIG_LEGACY_PTYS=y
++CONFIG_LEGACY_PTY_COUNT=16
++# CONFIG_IPMI_HANDLER is not set
++CONFIG_HW_RANDOM=y
++# CONFIG_HW_RANDOM_TIMERIOMEM is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++
++#
++# PCMCIA character devices
++#
++# CONFIG_SYNCLINK_CS is not set
++# CONFIG_CARDMAN_4000 is not set
++# CONFIG_CARDMAN_4040 is not set
++# CONFIG_IPWIRELESS is not set
++# CONFIG_RAW_DRIVER is not set
++# CONFIG_TCG_TPM is not set
++CONFIG_DEVPORT=y
++CONFIG_I2C=m
++CONFIG_I2C_BOARDINFO=y
++CONFIG_I2C_CHARDEV=m
++CONFIG_I2C_HELPER_AUTO=y
++CONFIG_I2C_ALGOBIT=m
++CONFIG_I2C_ALGOPCA=m
++
++#
++# I2C Hardware Bus support
++#
++
++#
++# PC SMBus host controller drivers
++#
++CONFIG_I2C_ALI1535=m
++CONFIG_I2C_ALI1563=m
++CONFIG_I2C_ALI15X3=m
++CONFIG_I2C_AMD756=m
++CONFIG_I2C_AMD8111=m
++CONFIG_I2C_I801=m
++# CONFIG_I2C_ISCH is not set
++CONFIG_I2C_PIIX4=m
++CONFIG_I2C_NFORCE2=m
++CONFIG_I2C_SIS5595=m
++CONFIG_I2C_SIS630=m
++CONFIG_I2C_SIS96X=m
++CONFIG_I2C_VIA=m
++CONFIG_I2C_VIAPRO=m
++
++#
++# I2C system bus drivers (mostly embedded / system-on-chip)
++#
++CONFIG_I2C_OCORES=m
++# CONFIG_I2C_SIMTEC is not set
++
++#
++# External I2C/SMBus adapter drivers
++#
++CONFIG_I2C_PARPORT_LIGHT=m
++# CONFIG_I2C_TAOS_EVM is not set
++# CONFIG_I2C_TINY_USB is not set
++
++#
++# Graphics adapter I2C/DDC channel drivers
++#
++CONFIG_I2C_VOODOO3=m
++
++#
++# Other I2C/SMBus bus drivers
++#
++# CONFIG_I2C_ELEKTOR is not set
++CONFIG_I2C_PCA_ISA=m
++# CONFIG_I2C_PCA_PLATFORM is not set
++CONFIG_I2C_STUB=m
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_DS1682 is not set
++CONFIG_SENSORS_PCF8574=m
++# CONFIG_PCF8575 is not set
++# CONFIG_SENSORS_PCA9539 is not set
++CONFIG_SENSORS_MAX6875=m
++# CONFIG_SENSORS_TSL2550 is not set
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
++# CONFIG_SPI is not set
++# CONFIG_W1 is not set
++# CONFIG_POWER_SUPPLY is not set
++# CONFIG_HWMON is not set
++# CONFIG_THERMAL is not set
++# CONFIG_THERMAL_HWMON is not set
++CONFIG_WATCHDOG=y
++# CONFIG_WATCHDOG_NOWAYOUT is not set
++
++#
++# Watchdog Device Drivers
++#
++CONFIG_SOFT_WATCHDOG=m
++# CONFIG_ALIM7101_WDT is not set
++
++#
++# ISA-based Watchdog Cards
++#
++CONFIG_PCWATCHDOG=m
++CONFIG_MIXCOMWD=m
++CONFIG_WDT=m
++
++#
++# PCI-based Watchdog Cards
++#
++CONFIG_PCIPCWATCHDOG=m
++CONFIG_WDTPCI=m
++CONFIG_WDT_501_PCI=y
++
++#
++# USB-based Watchdog Cards
++#
++CONFIG_USBPCWATCHDOG=m
++CONFIG_SSB_POSSIBLE=y
++
++#
++# Sonics Silicon Backplane
++#
++CONFIG_SSB=m
++CONFIG_SSB_SPROM=y
++CONFIG_SSB_PCIHOST_POSSIBLE=y
++CONFIG_SSB_PCIHOST=y
++# CONFIG_SSB_B43_PCI_BRIDGE is not set
++CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
++# CONFIG_SSB_PCMCIAHOST is not set
++# CONFIG_SSB_SILENT is not set
++# CONFIG_SSB_DEBUG is not set
++CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
++CONFIG_SSB_DRIVER_PCICORE=y
++# CONFIG_SSB_DRIVER_MIPS 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_MFD_WM8400 is not set
++# CONFIG_MFD_WM8350_I2C is not set
++# CONFIG_MFD_PCF50633 is not set
++# CONFIG_REGULATOR is not set
++
++#
++# Multimedia devices
++#
++
++#
++# Multimedia core support
++#
++CONFIG_VIDEO_DEV=m
++CONFIG_VIDEO_V4L2_COMMON=m
++CONFIG_VIDEO_ALLOW_V4L1=y
++CONFIG_VIDEO_V4L1_COMPAT=y
++CONFIG_DVB_CORE=m
++CONFIG_VIDEO_MEDIA=m
++
++#
++# Multimedia drivers
++#
++CONFIG_VIDEO_SAA7146=m
++CONFIG_VIDEO_SAA7146_VV=m
++# CONFIG_MEDIA_ATTACH is not set
++CONFIG_MEDIA_TUNER=m
++# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
++CONFIG_MEDIA_TUNER_SIMPLE=m
++CONFIG_MEDIA_TUNER_TDA8290=m
++CONFIG_MEDIA_TUNER_TDA827X=m
++CONFIG_MEDIA_TUNER_TDA18271=m
++CONFIG_MEDIA_TUNER_TDA9887=m
++CONFIG_MEDIA_TUNER_TEA5761=m
++CONFIG_MEDIA_TUNER_TEA5767=m
++CONFIG_MEDIA_TUNER_MT20XX=m
++CONFIG_MEDIA_TUNER_MT2060=m
++CONFIG_MEDIA_TUNER_XC2028=m
++CONFIG_MEDIA_TUNER_XC5000=m
++CONFIG_MEDIA_TUNER_MXL5005S=m
++CONFIG_MEDIA_TUNER_MC44S803=m
++CONFIG_VIDEO_V4L2=m
++CONFIG_VIDEO_V4L1=m
++CONFIG_VIDEOBUF_GEN=m
++CONFIG_VIDEOBUF_DMA_SG=m
++CONFIG_VIDEOBUF_VMALLOC=m
++CONFIG_VIDEOBUF_DVB=m
++CONFIG_VIDEO_BTCX=m
++CONFIG_VIDEO_IR=m
++CONFIG_VIDEO_TVEEPROM=m
++CONFIG_VIDEO_TUNER=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_IR_I2C=m
++CONFIG_VIDEO_TVAUDIO=m
++CONFIG_VIDEO_TDA7432=m
++CONFIG_VIDEO_TDA9840=m
++CONFIG_VIDEO_TEA6415C=m
++CONFIG_VIDEO_TEA6420=m
++CONFIG_VIDEO_MSP3400=m
++CONFIG_VIDEO_CS53L32A=m
++CONFIG_VIDEO_WM8775=m
++CONFIG_VIDEO_SAA6588=m
++CONFIG_VIDEO_BT819=m
++CONFIG_VIDEO_BT856=m
++CONFIG_VIDEO_BT866=m
++CONFIG_VIDEO_KS0127=m
++CONFIG_VIDEO_SAA7110=m
++CONFIG_VIDEO_SAA711X=m
++CONFIG_VIDEO_TVP5150=m
++CONFIG_VIDEO_VPX3220=m
++CONFIG_VIDEO_CX25840=m
++CONFIG_VIDEO_CX2341X=m
++CONFIG_VIDEO_SAA7185=m
++CONFIG_VIDEO_ADV7170=m
++CONFIG_VIDEO_ADV7175=m
++CONFIG_VIDEO_VIVI=m
++CONFIG_VIDEO_BT848=m
++CONFIG_VIDEO_BT848_DVB=y
++CONFIG_VIDEO_PMS=m
++CONFIG_VIDEO_CPIA=m
++CONFIG_VIDEO_CPIA_USB=m
++CONFIG_VIDEO_CPIA2=m
++CONFIG_VIDEO_SAA5246A=m
++CONFIG_VIDEO_SAA5249=m
++CONFIG_VIDEO_STRADIS=m
++CONFIG_VIDEO_ZORAN=m
++CONFIG_VIDEO_ZORAN_DC30=m
++CONFIG_VIDEO_ZORAN_ZR36060=m
++CONFIG_VIDEO_ZORAN_BUZ=m
++CONFIG_VIDEO_ZORAN_DC10=m
++CONFIG_VIDEO_ZORAN_LML33=m
++CONFIG_VIDEO_ZORAN_LML33R10=m
++CONFIG_VIDEO_ZORAN_AVS6EYES=m
++CONFIG_VIDEO_SAA7134=m
++CONFIG_VIDEO_SAA7134_ALSA=m
++CONFIG_VIDEO_SAA7134_DVB=m
++CONFIG_VIDEO_MXB=m
++CONFIG_VIDEO_HEXIUM_ORION=m
++CONFIG_VIDEO_HEXIUM_GEMINI=m
++CONFIG_VIDEO_CX88=m
++CONFIG_VIDEO_CX88_ALSA=m
++CONFIG_VIDEO_CX88_BLACKBIRD=m
++CONFIG_VIDEO_CX88_DVB=m
++CONFIG_VIDEO_CX88_MPEG=m
++CONFIG_VIDEO_CX88_VP3054=m
++# CONFIG_VIDEO_CX23885 is not set
++# CONFIG_VIDEO_AU0828 is not set
++# CONFIG_VIDEO_IVTV is not set
++# CONFIG_VIDEO_CX18 is not set
++# CONFIG_VIDEO_CAFE_CCIC is not set
++# CONFIG_SOC_CAMERA is not set
++CONFIG_V4L_USB_DRIVERS=y
++# CONFIG_USB_VIDEO_CLASS is not set
++CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
++# CONFIG_USB_GSPCA is not set
++CONFIG_VIDEO_PVRUSB2=m
++CONFIG_VIDEO_PVRUSB2_SYSFS=y
++CONFIG_VIDEO_PVRUSB2_DVB=y
++# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
++# CONFIG_VIDEO_HDPVR is not set
++CONFIG_VIDEO_EM28XX=m
++# CONFIG_VIDEO_EM28XX_ALSA is not set
++# CONFIG_VIDEO_EM28XX_DVB is not set
++# CONFIG_VIDEO_CX231XX is not set
++# CONFIG_VIDEO_USBVISION is not set
++CONFIG_VIDEO_USBVIDEO=m
++CONFIG_USB_VICAM=m
++CONFIG_USB_IBMCAM=m
++CONFIG_USB_KONICAWC=m
++CONFIG_USB_QUICKCAM_MESSENGER=m
++CONFIG_USB_ET61X251=m
++CONFIG_VIDEO_OVCAMCHIP=m
++# CONFIG_USB_W9968CF is not set
++CONFIG_USB_OV511=m
++CONFIG_USB_SE401=m
++CONFIG_USB_SN9C102=m
++CONFIG_USB_STV680=m
++CONFIG_USB_ZC0301=m
++CONFIG_USB_PWC=m
++# CONFIG_USB_PWC_DEBUG 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_RADIO_ADAPTERS=y
++CONFIG_RADIO_CADET=m
++CONFIG_RADIO_RTRACK=m
++CONFIG_RADIO_RTRACK2=m
++CONFIG_RADIO_AZTECH=m
++CONFIG_RADIO_GEMTEK=m
++CONFIG_RADIO_GEMTEK_PCI=m
++CONFIG_RADIO_MAXIRADIO=m
++CONFIG_RADIO_MAESTRO=m
++CONFIG_RADIO_SF16FMI=m
++CONFIG_RADIO_SF16FMR2=m
++CONFIG_RADIO_TERRATEC=m
++CONFIG_RADIO_TRUST=m
++CONFIG_RADIO_TYPHOON=m
++CONFIG_RADIO_TYPHOON_PROC_FS=y
++CONFIG_RADIO_ZOLTRIX=m
++CONFIG_USB_DSBR=m
++# CONFIG_USB_SI470X is not set
++# CONFIG_USB_MR800 is not set
++# CONFIG_RADIO_TEA5764 is not set
++# CONFIG_DVB_DYNAMIC_MINORS is not set
++CONFIG_DVB_CAPTURE_DRIVERS=y
++
++#
++# Supported SAA7146 based PCI Adapters
++#
++CONFIG_TTPCI_EEPROM=m
++CONFIG_DVB_AV7110=m
++CONFIG_DVB_AV7110_OSD=y
++# CONFIG_DVB_BUDGET_CORE is not set
++
++#
++# Supported USB Adapters
++#
++CONFIG_DVB_USB=m
++# CONFIG_DVB_USB_DEBUG is not set
++CONFIG_DVB_USB_A800=m
++CONFIG_DVB_USB_DIBUSB_MB=m
++CONFIG_DVB_USB_DIBUSB_MB_FAULTY=y
++CONFIG_DVB_USB_DIBUSB_MC=m
++# CONFIG_DVB_USB_DIB0700 is not set
++CONFIG_DVB_USB_UMT_010=m
++CONFIG_DVB_USB_CXUSB=m
++# CONFIG_DVB_USB_M920X is not set
++# CONFIG_DVB_USB_GL861 is not set
++# CONFIG_DVB_USB_AU6610 is not set
++CONFIG_DVB_USB_DIGITV=m
++CONFIG_DVB_USB_VP7045=m
++CONFIG_DVB_USB_VP702X=m
++CONFIG_DVB_USB_GP8PSK=m
++CONFIG_DVB_USB_NOVA_T_USB2=m
++# CONFIG_DVB_USB_TTUSB2 is not set
++CONFIG_DVB_USB_DTT200U=m
++# CONFIG_DVB_USB_OPERA1 is not set
++# CONFIG_DVB_USB_AF9005 is not set
++# CONFIG_DVB_USB_DW2102 is not set
++# CONFIG_DVB_USB_CINERGY_T2 is not set
++# CONFIG_DVB_USB_ANYSEE is not set
++# CONFIG_DVB_USB_DTV5100 is not set
++# CONFIG_DVB_USB_AF9015 is not set
++# CONFIG_DVB_USB_CE6230 is not set
++CONFIG_DVB_TTUSB_BUDGET=m
++CONFIG_DVB_TTUSB_DEC=m
++# CONFIG_DVB_SIANO_SMS1XXX is not set
++
++#
++# Supported FlexCopII (B2C2) Adapters
++#
++CONFIG_DVB_B2C2_FLEXCOP=m
++CONFIG_DVB_B2C2_FLEXCOP_PCI=m
++CONFIG_DVB_B2C2_FLEXCOP_USB=m
++# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
++
++#
++# Supported BT878 Adapters
++#
++CONFIG_DVB_BT8XX=m
++
++#
++# Supported Pluto2 Adapters
++#
++CONFIG_DVB_PLUTO2=m
++
++#
++# Supported SDMC DM1105 Adapters
++#
++# CONFIG_DVB_DM1105 is not set
++
++#
++# Supported DVB Frontends
++#
++# CONFIG_DVB_FE_CUSTOMISE is not set
++CONFIG_DVB_CX24110=m
++CONFIG_DVB_CX24123=m
++CONFIG_DVB_MT312=m
++CONFIG_DVB_ZL10036=m
++CONFIG_DVB_S5H1420=m
++CONFIG_DVB_STV0288=m
++CONFIG_DVB_STB6000=m
++CONFIG_DVB_STV0299=m
++CONFIG_DVB_TDA8083=m
++CONFIG_DVB_TDA10086=m
++CONFIG_DVB_VES1X93=m
++CONFIG_DVB_TUNER_ITD1000=m
++CONFIG_DVB_TUNER_CX24113=m
++CONFIG_DVB_TDA826X=m
++CONFIG_DVB_CX24116=m
++CONFIG_DVB_SP8870=m
++CONFIG_DVB_SP887X=m
++CONFIG_DVB_CX22700=m
++CONFIG_DVB_CX22702=m
++CONFIG_DVB_L64781=m
++CONFIG_DVB_TDA1004X=m
++CONFIG_DVB_NXT6000=m
++CONFIG_DVB_MT352=m
++CONFIG_DVB_ZL10353=m
++CONFIG_DVB_DIB3000MB=m
++CONFIG_DVB_DIB3000MC=m
++CONFIG_DVB_DIB7000P=m
++CONFIG_DVB_TDA10048=m
++CONFIG_DVB_VES1820=m
++CONFIG_DVB_STV0297=m
++CONFIG_DVB_NXT200X=m
++CONFIG_DVB_OR51211=m
++CONFIG_DVB_OR51132=m
++CONFIG_DVB_BCM3510=m
++CONFIG_DVB_LGDT330X=m
++CONFIG_DVB_LGDT3305=m
++CONFIG_DVB_S5H1409=m
++CONFIG_DVB_S5H1411=m
++CONFIG_DVB_PLL=m
++CONFIG_DVB_TUNER_DIB0070=m
++CONFIG_DVB_LNBP21=m
++CONFIG_DVB_ISL6405=m
++CONFIG_DVB_ISL6421=m
++CONFIG_DVB_LGS8GL5=m
++# CONFIG_DAB is not set
++
++#
++# Graphics support
++#
++CONFIG_DRM=m
++CONFIG_DRM_TDFX=m
++CONFIG_DRM_R128=m
++CONFIG_DRM_RADEON=m
++CONFIG_DRM_MGA=m
++CONFIG_DRM_VIA=m
++CONFIG_DRM_SAVAGE=m
++CONFIG_VGASTATE=m
++# CONFIG_VIDEO_OUTPUT_CONTROL is not set
++CONFIG_FB=y
++CONFIG_FIRMWARE_EDID=y
++CONFIG_FB_DDC=m
++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=m
++CONFIG_FB_SYS_COPYAREA=m
++CONFIG_FB_SYS_IMAGEBLIT=m
++# CONFIG_FB_FOREIGN_ENDIAN is not set
++CONFIG_FB_SYS_FOPS=m
++# CONFIG_FB_SVGALIB is not set
++# CONFIG_FB_MACMODES is not set
++CONFIG_FB_BACKLIGHT=y
++CONFIG_FB_MODE_HELPERS=y
++CONFIG_FB_TILEBLITTING=y
++
++#
++# Frame buffer hardware drivers
++#
++CONFIG_FB_CIRRUS=m
++CONFIG_FB_PM2=m
++CONFIG_FB_PM2_FIFO_DISCONNECT=y
++CONFIG_FB_CYBER2000=m
++# CONFIG_FB_ASILIANT is not set
++# CONFIG_FB_IMSTT is not set
++# CONFIG_FB_UVESA is not set
++CONFIG_FB_S1D13XXX=m
++CONFIG_FB_NVIDIA=m
++CONFIG_FB_NVIDIA_I2C=y
++# CONFIG_FB_NVIDIA_DEBUG is not set
++CONFIG_FB_NVIDIA_BACKLIGHT=y
++# CONFIG_FB_RIVA is not set
++CONFIG_FB_MATROX=m
++CONFIG_FB_MATROX_MILLENIUM=y
++CONFIG_FB_MATROX_MYSTIQUE=y
++CONFIG_FB_MATROX_G=y
++CONFIG_FB_MATROX_I2C=m
++CONFIG_FB_MATROX_MAVEN=m
++CONFIG_FB_MATROX_MULTIHEAD=y
++CONFIG_FB_RADEON=m
++CONFIG_FB_RADEON_I2C=y
++CONFIG_FB_RADEON_BACKLIGHT=y
++# CONFIG_FB_RADEON_DEBUG is not set
++CONFIG_FB_ATY128=m
++CONFIG_FB_ATY128_BACKLIGHT=y
++CONFIG_FB_ATY=m
++CONFIG_FB_ATY_CT=y
++CONFIG_FB_ATY_GENERIC_LCD=y
++CONFIG_FB_ATY_GX=y
++CONFIG_FB_ATY_BACKLIGHT=y
++# CONFIG_FB_S3 is not set
++CONFIG_FB_SAVAGE=m
++CONFIG_FB_SAVAGE_I2C=y
++# CONFIG_FB_SAVAGE_ACCEL 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=m
++CONFIG_FB_KYRO=m
++CONFIG_FB_3DFX=m
++# CONFIG_FB_3DFX_ACCEL is not set
++CONFIG_FB_3DFX_I2C=y
++CONFIG_FB_VOODOO1=m
++# CONFIG_FB_VT8623 is not set
++CONFIG_FB_TRIDENT=m
++# CONFIG_FB_ARK is not set
++# CONFIG_FB_PM3 is not set
++# CONFIG_FB_CARMINE is not set
++# CONFIG_FB_SM7XX is not set
++CONFIG_FB_VIRTUAL=m
++# 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 is not set
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++# CONFIG_LOGO is not set
++CONFIG_SOUND=m
++CONFIG_SOUND_OSS_CORE=y
++CONFIG_SND=m
++CONFIG_SND_TIMER=m
++CONFIG_SND_PCM=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 is not set
++# CONFIG_SND_DYNAMIC_MINORS 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_AC97_CODEC=m
++# CONFIG_SND_DRIVERS is not set
++CONFIG_SND_PCI=y
++# CONFIG_SND_AD1889 is not set
++# CONFIG_SND_ALS300 is not set
++# CONFIG_SND_ALI5451 is not set
++# CONFIG_SND_ATIIXP is not set
++# CONFIG_SND_ATIIXP_MODEM is not set
++# CONFIG_SND_AU8810 is not set
++# CONFIG_SND_AU8820 is not set
++# CONFIG_SND_AU8830 is not set
++# CONFIG_SND_AW2 is not set
++# CONFIG_SND_AZT3328 is not set
++# CONFIG_SND_BT87X is not set
++# CONFIG_SND_CA0106 is not set
++# CONFIG_SND_CMIPCI is not set
++# CONFIG_SND_OXYGEN is not set
++# CONFIG_SND_CS4281 is not set
++# CONFIG_SND_CS46XX is not set
++CONFIG_SND_CS5535AUDIO=m
++# CONFIG_SND_DARLA20 is not set
++# CONFIG_SND_GINA20 is not set
++# CONFIG_SND_LAYLA20 is not set
++# CONFIG_SND_DARLA24 is not set
++# CONFIG_SND_GINA24 is not set
++# CONFIG_SND_LAYLA24 is not set
++# CONFIG_SND_MONA is not set
++# CONFIG_SND_MIA is not set
++# CONFIG_SND_ECHO3G is not set
++# CONFIG_SND_INDIGO is not set
++# CONFIG_SND_INDIGOIO is not set
++# CONFIG_SND_INDIGODJ is not set
++# CONFIG_SND_INDIGOIOX is not set
++# CONFIG_SND_INDIGODJX is not set
++# CONFIG_SND_EMU10K1 is not set
++# CONFIG_SND_EMU10K1X is not set
++# CONFIG_SND_ENS1370 is not set
++# CONFIG_SND_ENS1371 is not set
++# CONFIG_SND_ES1938 is not set
++# CONFIG_SND_ES1968 is not set
++# CONFIG_SND_FM801 is not set
++# CONFIG_SND_HDA_INTEL is not set
++# CONFIG_SND_HDSP is not set
++# CONFIG_SND_HDSPM is not set
++# CONFIG_SND_HIFIER is not set
++# CONFIG_SND_ICE1712 is not set
++# CONFIG_SND_ICE1724 is not set
++# CONFIG_SND_INTEL8X0 is not set
++# CONFIG_SND_INTEL8X0M is not set
++# CONFIG_SND_KORG1212 is not set
++# CONFIG_SND_MAESTRO3 is not set
++# CONFIG_SND_MIXART is not set
++# CONFIG_SND_NM256 is not set
++# CONFIG_SND_PCXHR is not set
++# CONFIG_SND_RIPTIDE is not set
++# CONFIG_SND_RME32 is not set
++# CONFIG_SND_RME96 is not set
++# CONFIG_SND_RME9652 is not set
++# CONFIG_SND_SONICVIBES is not set
++# CONFIG_SND_TRIDENT is not set
++# CONFIG_SND_VIA82XX is not set
++# CONFIG_SND_VIA82XX_MODEM is not set
++# CONFIG_SND_VIRTUOSO is not set
++# CONFIG_SND_VX222 is not set
++# CONFIG_SND_YMFPCI is not set
++# CONFIG_SND_MIPS is not set
++# CONFIG_SND_USB is not set
++# CONFIG_SND_PCMCIA is not set
++# CONFIG_SND_SOC is not set
++# CONFIG_SOUND_PRIME is not set
++CONFIG_AC97_BUS=m
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++# CONFIG_HIDRAW is not set
++
++#
++# USB Input Devices
++#
++CONFIG_USB_HID=y
++# CONFIG_HID_PID is not set
++CONFIG_USB_HIDDEV=y
++
++#
++# 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_DRAGONRISE_FF is not set
++# CONFIG_HID_EZKEY is not set
++# CONFIG_HID_KYE is not set
++# CONFIG_HID_GYRATION 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_GREENASIA_FF is not set
++# CONFIG_HID_TOPSEED is not set
++# CONFIG_THRUSTMASTER_FF is not set
++# CONFIG_ZEROPLUS_FF is not set
++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=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 is not set
++# 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_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_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=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
++
++#
++# USB Device Class drivers
++#
++CONFIG_USB_ACM=m
++CONFIG_USB_PRINTER=m
++# 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=y
++CONFIG_USB_STORAGE_FREECOM=y
++CONFIG_USB_STORAGE_ISD200=y
++CONFIG_USB_STORAGE_USBAT=y
++CONFIG_USB_STORAGE_SDDR09=y
++CONFIG_USB_STORAGE_SDDR55=y
++CONFIG_USB_STORAGE_JUMPSHOT=y
++CONFIG_USB_STORAGE_ALAUDA=y
++# 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
++
++#
++# USB Imaging devices
++#
++CONFIG_USB_MDC800=m
++# CONFIG_USB_MICROTEK is not set
++
++#
++# USB port drivers
++#
++CONFIG_USB_SERIAL=m
++CONFIG_USB_EZUSB=y
++CONFIG_USB_SERIAL_GENERIC=y
++# CONFIG_USB_SERIAL_AIRCABLE is not set
++CONFIG_USB_SERIAL_ARK3116=m
++CONFIG_USB_SERIAL_BELKIN=m
++# CONFIG_USB_SERIAL_CH341 is not set
++# CONFIG_USB_SERIAL_WHITEHEAT is not set
++CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
++# CONFIG_USB_SERIAL_CP210X is not set
++CONFIG_USB_SERIAL_CYPRESS_M8=m
++CONFIG_USB_SERIAL_EMPEG=m
++CONFIG_USB_SERIAL_FTDI_SIO=m
++CONFIG_USB_SERIAL_FUNSOFT=m
++CONFIG_USB_SERIAL_VISOR=m
++CONFIG_USB_SERIAL_IPAQ=m
++CONFIG_USB_SERIAL_IR=m
++CONFIG_USB_SERIAL_EDGEPORT=m
++CONFIG_USB_SERIAL_EDGEPORT_TI=m
++CONFIG_USB_SERIAL_GARMIN=m
++CONFIG_USB_SERIAL_IPW=m
++# CONFIG_USB_SERIAL_IUU is not set
++CONFIG_USB_SERIAL_KEYSPAN_PDA=m
++# CONFIG_USB_SERIAL_KEYSPAN is not set
++CONFIG_USB_SERIAL_KLSI=m
++CONFIG_USB_SERIAL_KOBIL_SCT=m
++CONFIG_USB_SERIAL_MCT_U232=m
++# CONFIG_USB_SERIAL_MOS7720 is not set
++# CONFIG_USB_SERIAL_MOS7840 is not set
++# CONFIG_USB_SERIAL_MOTOROLA is not set
++CONFIG_USB_SERIAL_NAVMAN=m
++CONFIG_USB_SERIAL_PL2303=m
++# CONFIG_USB_SERIAL_OTI6858 is not set
++# CONFIG_USB_SERIAL_QUALCOMM is not set
++# CONFIG_USB_SERIAL_SPCP8X5 is not set
++CONFIG_USB_SERIAL_HP4X=m
++CONFIG_USB_SERIAL_SAFE=m
++# CONFIG_USB_SERIAL_SAFE_PADDED is not set
++# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
++CONFIG_USB_SERIAL_SIERRAWIRELESS=m
++# CONFIG_USB_SERIAL_SYMBOL is not set
++CONFIG_USB_SERIAL_TI=m
++CONFIG_USB_SERIAL_CYBERJACK=m
++CONFIG_USB_SERIAL_XIRCOM=m
++CONFIG_USB_SERIAL_OPTION=m
++CONFIG_USB_SERIAL_OMNINET=m
++# CONFIG_USB_SERIAL_OPTICON is not set
++# CONFIG_USB_SERIAL_DEBUG 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_BERRY_CHARGE 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_VST is not set
++# CONFIG_USB_ATM 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="rtc"
++# 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
++
++#
++# I2C RTC drivers
++#
++# CONFIG_RTC_DRV_DS1307 is not set
++# CONFIG_RTC_DRV_DS1374 is not set
++# CONFIG_RTC_DRV_DS1672 is not set
++# CONFIG_RTC_DRV_MAX6900 is not set
++# CONFIG_RTC_DRV_RS5C372 is not set
++# CONFIG_RTC_DRV_ISL1208 is not set
++# CONFIG_RTC_DRV_X1205 is not set
++# CONFIG_RTC_DRV_PCF8563 is not set
++# CONFIG_RTC_DRV_PCF8583 is not set
++# CONFIG_RTC_DRV_M41T80 is not set
++# CONFIG_RTC_DRV_S35390A is not set
++# CONFIG_RTC_DRV_FM3130 is not set
++# CONFIG_RTC_DRV_RX8581 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_BQ4802 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
++# CONFIG_STAGING is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++CONFIG_EXT2_FS_XATTR=y
++CONFIG_EXT2_FS_POSIX_ACL=y
++CONFIG_EXT2_FS_SECURITY=y
++# 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_JBD=y
++# CONFIG_JBD_DEBUG is not set
++CONFIG_JBD2=m
++# CONFIG_JBD2_DEBUG is not set
++CONFIG_FS_MBCACHE=y
++CONFIG_REISERFS_FS=m
++# CONFIG_REISERFS_CHECK is not set
++# CONFIG_REISERFS_PROC_INFO is not set
++CONFIG_REISERFS_FS_XATTR=y
++CONFIG_REISERFS_FS_POSIX_ACL=y
++CONFIG_REISERFS_FS_SECURITY=y
++CONFIG_JFS_FS=m
++CONFIG_JFS_POSIX_ACL=y
++CONFIG_JFS_SECURITY=y
++# CONFIG_JFS_DEBUG is not set
++# CONFIG_JFS_STATISTICS is not set
++CONFIG_FS_POSIX_ACL=y
++CONFIG_FILE_LOCKING=y
++CONFIG_XFS_FS=m
++CONFIG_XFS_QUOTA=y
++CONFIG_XFS_POSIX_ACL=y
++CONFIG_XFS_RT=y
++# CONFIG_XFS_DEBUG is not set
++# CONFIG_GFS2_FS is not set
++CONFIG_OCFS2_FS=m
++CONFIG_OCFS2_FS_O2CB=m
++CONFIG_OCFS2_FS_STATS=y
++CONFIG_OCFS2_DEBUG_MASKLOG=y
++# CONFIG_OCFS2_DEBUG_FS is not set
++# CONFIG_OCFS2_FS_POSIX_ACL is not set
++# CONFIG_BTRFS_FS is not set
++CONFIG_DNOTIFY=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++CONFIG_QUOTA=y
++# CONFIG_QUOTA_NETLINK_INTERFACE is not set
++CONFIG_PRINT_QUOTA_WARNING=y
++CONFIG_QUOTA_TREE=m
++CONFIG_QFMT_V1=m
++CONFIG_QFMT_V2=m
++CONFIG_QUOTACTL=y
++CONFIG_AUTOFS_FS=m
++CONFIG_AUTOFS4_FS=m
++CONFIG_FUSE_FS=m
++
++#
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++CONFIG_ISO9660_FS=m
++CONFIG_JOLIET=y
++CONFIG_ZISOFS=y
++CONFIG_UDF_FS=m
++CONFIG_UDF_NLS=y
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=m
++CONFIG_MSDOS_FS=m
++CONFIG_VFAT_FS=m
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++CONFIG_NTFS_FS=m
++# CONFIG_NTFS_DEBUG is not set
++CONFIG_NTFS_RW=y
++
++#
++# 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=m
++CONFIG_MISC_FILESYSTEMS=y
++CONFIG_ADFS_FS=m
++# CONFIG_ADFS_FS_RW is not set
++CONFIG_AFFS_FS=m
++# CONFIG_ECRYPT_FS is not set
++CONFIG_HFS_FS=m
++CONFIG_HFSPLUS_FS=m
++CONFIG_BEFS_FS=m
++# CONFIG_BEFS_DEBUG is not set
++CONFIG_BFS_FS=m
++CONFIG_EFS_FS=m
++CONFIG_CRAMFS=y
++# CONFIG_SQUASHFS is not set
++CONFIG_VXFS_FS=m
++CONFIG_MINIX_FS=m
++# CONFIG_OMFS_FS is not set
++CONFIG_HPFS_FS=m
++CONFIG_QNX4FS_FS=m
++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=m
++CONFIG_UFS_FS=m
++# CONFIG_UFS_FS_WRITE is not set
++# CONFIG_UFS_DEBUG is not set
++# CONFIG_NILFS2_FS is not set
++CONFIG_NETWORK_FILESYSTEMS=y
++CONFIG_NFS_FS=m
++CONFIG_NFS_V3=y
++CONFIG_NFS_V3_ACL=y
++CONFIG_NFS_V4=y
++CONFIG_NFSD=m
++CONFIG_NFSD_V2_ACL=y
++CONFIG_NFSD_V3=y
++CONFIG_NFSD_V3_ACL=y
++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_SUNRPC_GSS=m
++CONFIG_RPCSEC_GSS_KRB5=m
++CONFIG_RPCSEC_GSS_SPKM3=m
++CONFIG_SMB_FS=m
++# CONFIG_SMB_NLS_DEFAULT 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=m
++CONFIG_NCPFS_PACKET_SIGNING=y
++CONFIG_NCPFS_IOCTL_LOCKING=y
++CONFIG_NCPFS_STRONG=y
++CONFIG_NCPFS_NFS_NS=y
++CONFIG_NCPFS_OS2_NS=y
++# CONFIG_NCPFS_SMALLDOS is not set
++CONFIG_NCPFS_NLS=y
++CONFIG_NCPFS_EXTRAS=y
++CONFIG_CODA_FS=m
++CONFIG_AFS_FS=m
++# CONFIG_AFS_DEBUG is not set
++
++#
++# Partition Types
++#
++CONFIG_PARTITION_ADVANCED=y
++CONFIG_ACORN_PARTITION=y
++# CONFIG_ACORN_PARTITION_CUMANA is not set
++# CONFIG_ACORN_PARTITION_EESOX is not set
++CONFIG_ACORN_PARTITION_ICS=y
++# CONFIG_ACORN_PARTITION_ADFS is not set
++# CONFIG_ACORN_PARTITION_POWERTEC is not set
++CONFIG_ACORN_PARTITION_RISCIX=y
++CONFIG_OSF_PARTITION=y
++CONFIG_AMIGA_PARTITION=y
++CONFIG_ATARI_PARTITION=y
++CONFIG_MAC_PARTITION=y
++CONFIG_MSDOS_PARTITION=y
++CONFIG_BSD_DISKLABEL=y
++CONFIG_MINIX_SUBPARTITION=y
++CONFIG_SOLARIS_X86_PARTITION=y
++CONFIG_UNIXWARE_DISKLABEL=y
++CONFIG_LDM_PARTITION=y
++# CONFIG_LDM_DEBUG is not set
++CONFIG_SGI_PARTITION=y
++CONFIG_ULTRIX_PARTITION=y
++CONFIG_SUN_PARTITION=y
++CONFIG_KARMA_PARTITION=y
++CONFIG_EFI_PARTITION=y
++# CONFIG_SYSV68_PARTITION is not set
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="iso8859-1"
++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=m
++# CONFIG_DLM is not set
++
++#
++# Kernel hacking
++#
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
++CONFIG_MAGIC_SYSRQ=y
++CONFIG_UNUSED_SYMBOLS=y
++CONFIG_DEBUG_FS=y
++# CONFIG_HEADERS_CHECK is not set
++# CONFIG_DEBUG_KERNEL is not set
++# CONFIG_DEBUG_MEMORY_INIT is not set
++# CONFIG_RCU_CPU_STALL_DETECTOR is not set
++CONFIG_SYSCTL_SYSCALL_CHECK=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_DYNAMIC_DEBUG is not set
++# CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++CONFIG_CMDLINE=""
++
++#
++# Security options
++#
++CONFIG_KEYS=y
++# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
++CONFIG_SECURITY=y
++# CONFIG_SECURITYFS is not set
++CONFIG_SECURITY_NETWORK=y
++CONFIG_SECURITY_NETWORK_XFRM=y
++# CONFIG_SECURITY_PATH is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++# CONFIG_SECURITY_ROOTPLUG is not set
++CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
++CONFIG_SECURITY_SELINUX=y
++CONFIG_SECURITY_SELINUX_BOOTPARAM=y
++CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
++CONFIG_SECURITY_SELINUX_DISABLE=y
++CONFIG_SECURITY_SELINUX_DEVELOP=y
++CONFIG_SECURITY_SELINUX_AVC_STATS=y
++CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
++# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
++# CONFIG_SECURITY_TOMOYO is not set
++CONFIG_XOR_BLOCKS=m
++CONFIG_ASYNC_CORE=m
++CONFIG_ASYNC_MEMCPY=m
++CONFIG_ASYNC_XOR=m
++CONFIG_CRYPTO=y
++
++#
++# Crypto core or helper
++#
++# CONFIG_CRYPTO_FIPS is not set
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_ALGAPI2=y
++CONFIG_CRYPTO_AEAD=m
++CONFIG_CRYPTO_AEAD2=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_BLKCIPHER2=y
++CONFIG_CRYPTO_HASH=y
++CONFIG_CRYPTO_HASH2=y
++CONFIG_CRYPTO_RNG2=y
++CONFIG_CRYPTO_PCOMP=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_MANAGER2=y
++# CONFIG_CRYPTO_GF128MUL is not set
++CONFIG_CRYPTO_NULL=m
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++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
++
++#
++# Block modes
++#
++CONFIG_CRYPTO_CBC=y
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_CTS is not set
++CONFIG_CRYPTO_ECB=m
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_XTS is not set
++
++#
++# Hash modes
++#
++CONFIG_CRYPTO_HMAC=y
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++CONFIG_CRYPTO_CRC32C=m
++CONFIG_CRYPTO_MD4=m
++CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_MICHAEL_MIC=m
++# 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=m
++CONFIG_CRYPTO_SHA256=m
++CONFIG_CRYPTO_SHA512=m
++CONFIG_CRYPTO_TGR192=m
++CONFIG_CRYPTO_WP512=m
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=m
++CONFIG_CRYPTO_ANUBIS=m
++CONFIG_CRYPTO_ARC4=m
++CONFIG_CRYPTO_BLOWFISH=m
++# CONFIG_CRYPTO_CAMELLIA is not set
++CONFIG_CRYPTO_CAST5=m
++CONFIG_CRYPTO_CAST6=m
++CONFIG_CRYPTO_DES=m
++# CONFIG_CRYPTO_FCRYPT is not set
++CONFIG_CRYPTO_KHAZAD=m
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_SEED is not set
++CONFIG_CRYPTO_SERPENT=m
++CONFIG_CRYPTO_TEA=m
++CONFIG_CRYPTO_TWOFISH=m
++CONFIG_CRYPTO_TWOFISH_COMMON=m
++
++#
++# Compression
++#
++CONFIG_CRYPTO_DEFLATE=m
++# CONFIG_CRYPTO_ZLIB is not set
++# CONFIG_CRYPTO_LZO is not set
++
++#
++# Random Number Generation
++#
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++CONFIG_CRYPTO_HW=y
++# CONFIG_CRYPTO_DEV_HIFN_795X is not set
++# CONFIG_BINARY_PRINTF is not set
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
++CONFIG_CRC_CCITT=m
++CONFIG_CRC16=m
++# CONFIG_CRC_T10DIF is not set
++CONFIG_CRC_ITU_T=m
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++CONFIG_LIBCRC32C=m
++CONFIG_AUDIT_GENERIC=y
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=m
++CONFIG_DECOMPRESS_GZIP=y
++CONFIG_TEXTSEARCH=y
++CONFIG_TEXTSEARCH_KMP=m
++CONFIG_TEXTSEARCH_BM=m
++CONFIG_TEXTSEARCH_FSM=m
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
+diff -Nur linux-2.6.30/arch/mips/configs/yeeloong2f_defconfig rt4ls/arch/mips/configs/yeeloong2f_defconfig
+--- linux-2.6.30/arch/mips/configs/yeeloong2f_defconfig 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/configs/yeeloong2f_defconfig 2009-06-12 16:27:08.290407950 +0200
+@@ -0,0 +1,2711 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.30-rc8
++# Wed Jun 10 22:18:32 2009
++#
++CONFIG_MIPS=y
++
++#
++# Machine selection
++#
++# CONFIG_MACH_ALCHEMY is not set
++# CONFIG_BASLER_EXCITE is not set
++# CONFIG_BCM47XX 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_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_ARCH_SPARSEMEM_ENABLE=y
++# CONFIG_LEMOTE_FULOONG2E is not set
++# CONFIG_LEMOTE_FULOONG2F is not set
++CONFIG_LEMOTE_YEELOONG2F=y
++CONFIG_CS5536=y
++CONFIG_SYS_HAS_MACH_PROM_INIT_CMDLINE=y
++CONFIG_CS5536_MFGPT=y
++CONFIG_UCA_SIZE=0x400000
++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_DMA_NONCOHERENT=y
++CONFIG_DMA_NEED_PCI_MAP_STATE=y
++CONFIG_EARLY_PRINTK=y
++CONFIG_SYS_HAS_EARLY_PRINTK=y
++# CONFIG_HOTPLUG_CPU is not set
++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_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
++
++#
++# 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_CPU_HAS_WB=y
++CONFIG_CPU_HAS_SYNC=y
++CONFIG_GENERIC_HARDIRQS=y
++CONFIG_GENERIC_IRQ_PROBE=y
++CONFIG_CPU_SUPPORTS_HIGHMEM=y
++CONFIG_SYS_SUPPORTS_HIGHMEM=y
++CONFIG_ARCH_FLATMEM_ENABLE=y
++CONFIG_ARCH_POPULATES_NODE_MAP=y
++CONFIG_SELECT_MEMORY_MODEL=y
++# CONFIG_FLATMEM_MANUAL is not set
++# CONFIG_DISCONTIGMEM_MANUAL is not set
++CONFIG_SPARSEMEM_MANUAL=y
++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_UNEVICTABLE_LRU=y
++CONFIG_HAVE_MLOCK=y
++CONFIG_HAVE_MLOCKED_PAGE_BIT=y
++CONFIG_TICK_ONESHOT=y
++CONFIG_NO_HZ=y
++CONFIG_HIGH_RES_TIMERS=y
++CONFIG_GENERIC_CLOCKEVENTS_BUILD=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=y
++# CONFIG_PREEMPT is not set
++CONFIG_KEXEC=y
++# CONFIG_SECCOMP is not set
++CONFIG_LOCKDEP_SUPPORT=y
++CONFIG_STACKTRACE_SUPPORT=y
++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
++
++#
++# General setup
++#
++CONFIG_EXPERIMENTAL=y
++CONFIG_BROKEN_ON_SMP=y
++CONFIG_INIT_ENV_ARG_LIMIT=32
++CONFIG_LOCALVERSION=""
++# CONFIG_LOCALVERSION_AUTO is not set
++CONFIG_SWAP=y
++CONFIG_SYSVIPC=y
++CONFIG_SYSVIPC_SYSCTL=y
++CONFIG_POSIX_MQUEUE=y
++CONFIG_POSIX_MQUEUE_SYSCTL=y
++CONFIG_BSD_PROCESS_ACCT=y
++CONFIG_BSD_PROCESS_ACCT_V3=y
++# CONFIG_TASKSTATS is not set
++CONFIG_AUDIT=y
++
++#
++# RCU Subsystem
++#
++CONFIG_CLASSIC_RCU=y
++# CONFIG_TREE_RCU is not set
++# CONFIG_PREEMPT_RCU is not set
++# CONFIG_TREE_RCU_TRACE is not set
++# CONFIG_PREEMPT_RCU_TRACE is not set
++CONFIG_IKCONFIG=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_LOG_BUF_SHIFT=15
++# CONFIG_GROUP_SCHED is not set
++# CONFIG_CGROUPS is not set
++CONFIG_SYSFS_DEPRECATED=y
++CONFIG_SYSFS_DEPRECATED_V2=y
++# CONFIG_RELAY is not set
++# CONFIG_NAMESPACES is not set
++CONFIG_BLK_DEV_INITRD=y
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_RD_GZIP=y
++# CONFIG_RD_BZIP2 is not set
++# CONFIG_RD_LZMA is not set
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++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_STRIP_ASM_SYMS 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
++CONFIG_VM_EVENT_COUNTERS=y
++CONFIG_PCI_QUIRKS=y
++CONFIG_COMPAT_BRK=y
++CONFIG_SLAB=y
++# CONFIG_SLUB is not set
++# CONFIG_SLOB is not set
++CONFIG_PROFILING=y
++CONFIG_TRACEPOINTS=y
++# CONFIG_MARKERS is not set
++CONFIG_OPROFILE=m
++CONFIG_HAVE_OPROFILE=y
++CONFIG_HAVE_SYSCALL_WRAPPERS=y
++# CONFIG_SLOW_WORK is not set
++# CONFIG_HAVE_GENERIC_DMA_COHERENT is not set
++CONFIG_SLABINFO=y
++CONFIG_RT_MUTEXES=y
++CONFIG_BASE_SMALL=0
++CONFIG_MODULES=y
++# CONFIG_MODULE_FORCE_LOAD is not set
++CONFIG_MODULE_UNLOAD=y
++CONFIG_MODULE_FORCE_UNLOAD=y
++CONFIG_MODVERSIONS=y
++# CONFIG_MODULE_SRCVERSION_ALL 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_AS=y
++CONFIG_IOSCHED_DEADLINE=y
++CONFIG_IOSCHED_CFQ=y
++# CONFIG_DEFAULT_AS is not set
++# CONFIG_DEFAULT_DEADLINE is not set
++CONFIG_DEFAULT_CFQ=y
++# CONFIG_DEFAULT_NOOP is not set
++CONFIG_DEFAULT_IOSCHED="cfq"
++# CONFIG_PROBE_INITRD_HEADER is not set
++CONFIG_FREEZER=y
++
++#
++# 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_LEGACY=y
++# 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=m
++CONFIG_HOTPLUG_PCI_FAKE=m
++CONFIG_HOTPLUG_PCI_CPCI=y
++CONFIG_HOTPLUG_PCI_SHPC=m
++
++#
++# 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=m
++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=y
++# CONFIG_PM_DEBUG is not set
++CONFIG_PM_SLEEP=y
++CONFIG_SUSPEND=y
++CONFIG_SUSPEND_FREEZER=y
++CONFIG_HIBERNATION=y
++CONFIG_PM_STD_PARTITION=""
++
++#
++# CPU Frequency scaling
++#
++CONFIG_CPU_FREQ=y
++CONFIG_CPU_FREQ_TABLE=y
++# CONFIG_CPU_FREQ_DEBUG is not set
++CONFIG_CPU_FREQ_STAT=y
++# CONFIG_CPU_FREQ_STAT_DETAILS is not set
++# 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 is not set
++CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE=y
++CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
++# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
++# CONFIG_CPU_FREQ_GOV_USERSPACE is not set
++# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
++CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
++CONFIG_LOONGSON2F_CPU_FREQ=y
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++CONFIG_XFRM_USER=m
++# CONFIG_XFRM_SUB_POLICY is not set
++# CONFIG_XFRM_MIGRATE is not set
++# CONFIG_XFRM_STATISTICS is not set
++CONFIG_XFRM_IPCOMP=m
++CONFIG_NET_KEY=m
++# CONFIG_NET_KEY_MIGRATE is not set
++CONFIG_INET=y
++CONFIG_IP_MULTICAST=y
++CONFIG_IP_ADVANCED_ROUTER=y
++CONFIG_ASK_IP_FIB_HASH=y
++# CONFIG_IP_FIB_TRIE is not set
++CONFIG_IP_FIB_HASH=y
++CONFIG_IP_MULTIPLE_TABLES=y
++CONFIG_IP_ROUTE_MULTIPATH=y
++CONFIG_IP_ROUTE_VERBOSE=y
++# CONFIG_IP_PNP is not set
++CONFIG_NET_IPIP=m
++CONFIG_NET_IPGRE=m
++CONFIG_NET_IPGRE_BROADCAST=y
++CONFIG_IP_MROUTE=y
++CONFIG_IP_PIMSM_V1=y
++CONFIG_IP_PIMSM_V2=y
++# CONFIG_ARPD is not set
++CONFIG_SYN_COOKIES=y
++CONFIG_INET_AH=m
++CONFIG_INET_ESP=m
++CONFIG_INET_IPCOMP=m
++CONFIG_INET_XFRM_TUNNEL=m
++CONFIG_INET_TUNNEL=m
++CONFIG_INET_XFRM_MODE_TRANSPORT=m
++CONFIG_INET_XFRM_MODE_TUNNEL=m
++CONFIG_INET_XFRM_MODE_BEET=y
++CONFIG_INET_LRO=y
++CONFIG_INET_DIAG=m
++CONFIG_INET_TCP_DIAG=m
++CONFIG_TCP_CONG_ADVANCED=y
++CONFIG_TCP_CONG_BIC=y
++CONFIG_TCP_CONG_CUBIC=m
++CONFIG_TCP_CONG_WESTWOOD=m
++CONFIG_TCP_CONG_HTCP=m
++CONFIG_TCP_CONG_HSTCP=m
++CONFIG_TCP_CONG_HYBLA=m
++CONFIG_TCP_CONG_VEGAS=m
++CONFIG_TCP_CONG_SCALABLE=m
++CONFIG_TCP_CONG_LP=m
++CONFIG_TCP_CONG_VENO=m
++# CONFIG_TCP_CONG_YEAH is not set
++# CONFIG_TCP_CONG_ILLINOIS is not set
++CONFIG_DEFAULT_BIC=y
++# CONFIG_DEFAULT_CUBIC is not set
++# CONFIG_DEFAULT_HTCP is not set
++# CONFIG_DEFAULT_VEGAS is not set
++# CONFIG_DEFAULT_WESTWOOD is not set
++# CONFIG_DEFAULT_RENO is not set
++CONFIG_DEFAULT_TCP_CONG="bic"
++# CONFIG_TCP_MD5SIG is not set
++CONFIG_IPV6=m
++CONFIG_IPV6_PRIVACY=y
++# CONFIG_IPV6_ROUTER_PREF is not set
++# CONFIG_IPV6_OPTIMISTIC_DAD is not set
++CONFIG_INET6_AH=m
++CONFIG_INET6_ESP=m
++CONFIG_INET6_IPCOMP=m
++# CONFIG_IPV6_MIP6 is not set
++CONFIG_INET6_XFRM_TUNNEL=m
++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_NDISC_NODETYPE=y
++CONFIG_IPV6_TUNNEL=m
++# CONFIG_IPV6_MULTIPLE_TABLES is not set
++# CONFIG_IPV6_MROUTE is not set
++# CONFIG_NETLABEL is not set
++CONFIG_NETWORK_SECMARK=y
++CONFIG_NETFILTER=y
++# CONFIG_NETFILTER_DEBUG is not set
++CONFIG_NETFILTER_ADVANCED=y
++CONFIG_BRIDGE_NETFILTER=y
++
++#
++# Core Netfilter Configuration
++#
++CONFIG_NETFILTER_NETLINK=m
++CONFIG_NETFILTER_NETLINK_QUEUE=m
++CONFIG_NETFILTER_NETLINK_LOG=m
++# CONFIG_NF_CONNTRACK is not set
++# CONFIG_NETFILTER_TPROXY is not set
++CONFIG_NETFILTER_XTABLES=m
++CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
++# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
++CONFIG_NETFILTER_XT_TARGET_HL=m
++# CONFIG_NETFILTER_XT_TARGET_LED is not set
++CONFIG_NETFILTER_XT_TARGET_MARK=m
++# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
++CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
++# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
++# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
++CONFIG_NETFILTER_XT_TARGET_SECMARK=m
++# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
++# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
++CONFIG_NETFILTER_XT_MATCH_COMMENT=m
++CONFIG_NETFILTER_XT_MATCH_DCCP=m
++# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
++CONFIG_NETFILTER_XT_MATCH_ESP=m
++# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
++CONFIG_NETFILTER_XT_MATCH_HL=m
++# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
++CONFIG_NETFILTER_XT_MATCH_LENGTH=m
++CONFIG_NETFILTER_XT_MATCH_LIMIT=m
++CONFIG_NETFILTER_XT_MATCH_MAC=m
++CONFIG_NETFILTER_XT_MATCH_MARK=m
++CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
++# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
++CONFIG_NETFILTER_XT_MATCH_POLICY=m
++CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
++CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
++CONFIG_NETFILTER_XT_MATCH_QUOTA=m
++# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
++CONFIG_NETFILTER_XT_MATCH_REALM=m
++# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
++CONFIG_NETFILTER_XT_MATCH_SCTP=m
++CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
++CONFIG_NETFILTER_XT_MATCH_STRING=m
++CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
++# CONFIG_NETFILTER_XT_MATCH_TIME is not set
++# CONFIG_NETFILTER_XT_MATCH_U32 is not set
++CONFIG_IP_VS=m
++# CONFIG_IP_VS_IPV6 is not set
++# CONFIG_IP_VS_DEBUG is not set
++CONFIG_IP_VS_TAB_BITS=12
++
++#
++# IPVS transport protocol load balancing support
++#
++CONFIG_IP_VS_PROTO_TCP=y
++CONFIG_IP_VS_PROTO_UDP=y
++CONFIG_IP_VS_PROTO_AH_ESP=y
++CONFIG_IP_VS_PROTO_ESP=y
++CONFIG_IP_VS_PROTO_AH=y
++
++#
++# IPVS scheduler
++#
++CONFIG_IP_VS_RR=m
++CONFIG_IP_VS_WRR=m
++CONFIG_IP_VS_LC=m
++CONFIG_IP_VS_WLC=m
++CONFIG_IP_VS_LBLC=m
++CONFIG_IP_VS_LBLCR=m
++CONFIG_IP_VS_DH=m
++CONFIG_IP_VS_SH=m
++CONFIG_IP_VS_SED=m
++CONFIG_IP_VS_NQ=m
++
++#
++# IPVS application helper
++#
++CONFIG_IP_VS_FTP=m
++
++#
++# IP: Netfilter Configuration
++#
++# CONFIG_NF_DEFRAG_IPV4 is not set
++CONFIG_IP_NF_QUEUE=m
++CONFIG_IP_NF_IPTABLES=m
++CONFIG_IP_NF_MATCH_ADDRTYPE=m
++CONFIG_IP_NF_MATCH_AH=m
++CONFIG_IP_NF_MATCH_ECN=m
++CONFIG_IP_NF_MATCH_TTL=m
++CONFIG_IP_NF_FILTER=m
++CONFIG_IP_NF_TARGET_REJECT=m
++CONFIG_IP_NF_TARGET_LOG=m
++CONFIG_IP_NF_TARGET_ULOG=m
++CONFIG_IP_NF_MANGLE=m
++CONFIG_IP_NF_TARGET_ECN=m
++CONFIG_IP_NF_TARGET_TTL=m
++CONFIG_IP_NF_RAW=m
++# CONFIG_IP_NF_SECURITY is not set
++CONFIG_IP_NF_ARPTABLES=m
++CONFIG_IP_NF_ARPFILTER=m
++CONFIG_IP_NF_ARP_MANGLE=m
++
++#
++# IPv6: Netfilter Configuration
++#
++CONFIG_IP6_NF_QUEUE=m
++CONFIG_IP6_NF_IPTABLES=m
++CONFIG_IP6_NF_MATCH_AH=m
++CONFIG_IP6_NF_MATCH_EUI64=m
++CONFIG_IP6_NF_MATCH_FRAG=m
++CONFIG_IP6_NF_MATCH_OPTS=m
++CONFIG_IP6_NF_MATCH_HL=m
++CONFIG_IP6_NF_MATCH_IPV6HEADER=m
++# CONFIG_IP6_NF_MATCH_MH is not set
++CONFIG_IP6_NF_MATCH_RT=m
++CONFIG_IP6_NF_TARGET_HL=m
++CONFIG_IP6_NF_TARGET_LOG=m
++CONFIG_IP6_NF_FILTER=m
++CONFIG_IP6_NF_TARGET_REJECT=m
++CONFIG_IP6_NF_MANGLE=m
++CONFIG_IP6_NF_RAW=m
++# CONFIG_IP6_NF_SECURITY is not set
++
++#
++# DECnet: Netfilter Configuration
++#
++CONFIG_DECNET_NF_GRABULATOR=m
++CONFIG_BRIDGE_NF_EBTABLES=m
++CONFIG_BRIDGE_EBT_BROUTE=m
++CONFIG_BRIDGE_EBT_T_FILTER=m
++CONFIG_BRIDGE_EBT_T_NAT=m
++CONFIG_BRIDGE_EBT_802_3=m
++CONFIG_BRIDGE_EBT_AMONG=m
++CONFIG_BRIDGE_EBT_ARP=m
++CONFIG_BRIDGE_EBT_IP=m
++# CONFIG_BRIDGE_EBT_IP6 is not set
++CONFIG_BRIDGE_EBT_LIMIT=m
++CONFIG_BRIDGE_EBT_MARK=m
++CONFIG_BRIDGE_EBT_PKTTYPE=m
++CONFIG_BRIDGE_EBT_STP=m
++CONFIG_BRIDGE_EBT_VLAN=m
++CONFIG_BRIDGE_EBT_ARPREPLY=m
++CONFIG_BRIDGE_EBT_DNAT=m
++CONFIG_BRIDGE_EBT_MARK_T=m
++CONFIG_BRIDGE_EBT_REDIRECT=m
++CONFIG_BRIDGE_EBT_SNAT=m
++CONFIG_BRIDGE_EBT_LOG=m
++CONFIG_BRIDGE_EBT_ULOG=m
++# CONFIG_BRIDGE_EBT_NFLOG is not set
++CONFIG_IP_DCCP=m
++CONFIG_INET_DCCP_DIAG=m
++
++#
++# DCCP CCIDs Configuration (EXPERIMENTAL)
++#
++# CONFIG_IP_DCCP_CCID2_DEBUG is not set
++CONFIG_IP_DCCP_CCID3=y
++# CONFIG_IP_DCCP_CCID3_DEBUG is not set
++CONFIG_IP_DCCP_CCID3_RTO=100
++CONFIG_IP_DCCP_TFRC_LIB=y
++CONFIG_IP_SCTP=m
++# CONFIG_SCTP_DBG_MSG is not set
++# CONFIG_SCTP_DBG_OBJCNT is not set
++# CONFIG_SCTP_HMAC_NONE is not set
++# CONFIG_SCTP_HMAC_SHA1 is not set
++CONFIG_SCTP_HMAC_MD5=y
++CONFIG_TIPC=m
++CONFIG_TIPC_ADVANCED=y
++CONFIG_TIPC_ZONES=3
++CONFIG_TIPC_CLUSTERS=1
++CONFIG_TIPC_NODES=255
++CONFIG_TIPC_SLAVE_NODES=0
++CONFIG_TIPC_PORTS=8191
++CONFIG_TIPC_LOG=0
++# CONFIG_TIPC_DEBUG is not set
++CONFIG_ATM=y
++CONFIG_ATM_CLIP=y
++# CONFIG_ATM_CLIP_NO_ICMP is not set
++CONFIG_ATM_LANE=m
++CONFIG_ATM_MPOA=m
++CONFIG_ATM_BR2684=m
++# CONFIG_ATM_BR2684_IPFILTER is not set
++CONFIG_STP=m
++CONFIG_BRIDGE=m
++# CONFIG_NET_DSA is not set
++CONFIG_VLAN_8021Q=m
++# CONFIG_VLAN_8021Q_GVRP is not set
++CONFIG_DECNET=m
++# CONFIG_DECNET_ROUTER is not set
++CONFIG_LLC=m
++CONFIG_LLC2=m
++CONFIG_IPX=m
++# CONFIG_IPX_INTERN is not set
++CONFIG_ATALK=m
++CONFIG_DEV_APPLETALK=m
++# CONFIG_COPS is not set
++CONFIG_IPDDP=m
++CONFIG_IPDDP_ENCAP=y
++CONFIG_IPDDP_DECAP=y
++CONFIG_X25=m
++CONFIG_LAPB=m
++CONFIG_ECONET=m
++CONFIG_ECONET_AUNUDP=y
++CONFIG_ECONET_NATIVE=y
++CONFIG_WAN_ROUTER=m
++# CONFIG_PHONET is not set
++CONFIG_NET_SCHED=y
++
++#
++# Queueing/Scheduling
++#
++CONFIG_NET_SCH_CBQ=m
++CONFIG_NET_SCH_HTB=m
++CONFIG_NET_SCH_HFSC=m
++CONFIG_NET_SCH_ATM=m
++CONFIG_NET_SCH_PRIO=m
++# CONFIG_NET_SCH_MULTIQ is not set
++CONFIG_NET_SCH_RED=m
++CONFIG_NET_SCH_SFQ=m
++CONFIG_NET_SCH_TEQL=m
++CONFIG_NET_SCH_TBF=m
++CONFIG_NET_SCH_GRED=m
++CONFIG_NET_SCH_DSMARK=m
++CONFIG_NET_SCH_NETEM=m
++# CONFIG_NET_SCH_DRR is not set
++CONFIG_NET_SCH_INGRESS=m
++
++#
++# Classification
++#
++CONFIG_NET_CLS=y
++CONFIG_NET_CLS_BASIC=m
++CONFIG_NET_CLS_TCINDEX=m
++CONFIG_NET_CLS_ROUTE4=m
++CONFIG_NET_CLS_ROUTE=y
++CONFIG_NET_CLS_FW=m
++CONFIG_NET_CLS_U32=m
++CONFIG_CLS_U32_PERF=y
++CONFIG_CLS_U32_MARK=y
++CONFIG_NET_CLS_RSVP=m
++CONFIG_NET_CLS_RSVP6=m
++# CONFIG_NET_CLS_FLOW is not set
++CONFIG_NET_EMATCH=y
++CONFIG_NET_EMATCH_STACK=32
++CONFIG_NET_EMATCH_CMP=m
++CONFIG_NET_EMATCH_NBYTE=m
++CONFIG_NET_EMATCH_U32=m
++CONFIG_NET_EMATCH_META=m
++CONFIG_NET_EMATCH_TEXT=m
++CONFIG_NET_CLS_ACT=y
++CONFIG_NET_ACT_POLICE=m
++CONFIG_NET_ACT_GACT=m
++CONFIG_GACT_PROB=y
++CONFIG_NET_ACT_MIRRED=m
++CONFIG_NET_ACT_IPT=m
++# CONFIG_NET_ACT_NAT is not set
++CONFIG_NET_ACT_PEDIT=m
++CONFIG_NET_ACT_SIMP=m
++# CONFIG_NET_ACT_SKBEDIT is not set
++CONFIG_NET_CLS_IND=y
++CONFIG_NET_SCH_FIFO=y
++# CONFIG_DCB is not set
++
++#
++# Network testing
++#
++CONFIG_NET_PKTGEN=m
++# CONFIG_NET_DROP_MONITOR is not set
++CONFIG_HAMRADIO=y
++
++#
++# Packet Radio protocols
++#
++CONFIG_AX25=m
++# CONFIG_AX25_DAMA_SLAVE is not set
++CONFIG_NETROM=m
++CONFIG_ROSE=m
++
++#
++# AX.25 network device drivers
++#
++CONFIG_MKISS=m
++CONFIG_6PACK=m
++CONFIG_BPQETHER=m
++CONFIG_BAYCOM_SER_FDX=m
++CONFIG_BAYCOM_SER_HDX=m
++CONFIG_YAM=m
++# CONFIG_CAN is not set
++CONFIG_IRDA=m
++
++#
++# IrDA protocols
++#
++CONFIG_IRLAN=m
++CONFIG_IRNET=m
++CONFIG_IRCOMM=m
++# CONFIG_IRDA_ULTRA is not set
++
++#
++# IrDA options
++#
++CONFIG_IRDA_CACHE_LAST_LSAP=y
++CONFIG_IRDA_FAST_RR=y
++CONFIG_IRDA_DEBUG=y
++
++#
++# Infrared-port device drivers
++#
++
++#
++# SIR device drivers
++#
++CONFIG_IRTTY_SIR=m
++
++#
++# Dongle support
++#
++CONFIG_DONGLE=y
++CONFIG_ESI_DONGLE=m
++CONFIG_ACTISYS_DONGLE=m
++CONFIG_TEKRAM_DONGLE=m
++CONFIG_TOIM3232_DONGLE=m
++CONFIG_LITELINK_DONGLE=m
++CONFIG_MA600_DONGLE=m
++CONFIG_GIRBIL_DONGLE=m
++CONFIG_MCP2120_DONGLE=m
++CONFIG_OLD_BELKIN_DONGLE=m
++CONFIG_ACT200L_DONGLE=m
++# CONFIG_KINGSUN_DONGLE is not set
++# CONFIG_KSDAZZLE_DONGLE is not set
++# CONFIG_KS959_DONGLE is not set
++
++#
++# FIR device drivers
++#
++CONFIG_USB_IRDA=m
++CONFIG_SIGMATEL_FIR=m
++CONFIG_VLSI_FIR=m
++CONFIG_MCS_FIR=m
++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 is not set
++# CONFIG_BT_HCIBTSDIO is not set
++CONFIG_BT_HCIUART=m
++CONFIG_BT_HCIUART_H4=y
++CONFIG_BT_HCIUART_BCSP=y
++# CONFIG_BT_HCIUART_LL is not set
++CONFIG_BT_HCIBCM203X=m
++CONFIG_BT_HCIBPA10X=m
++CONFIG_BT_HCIBFUSB=m
++CONFIG_BT_HCIVHCI=m
++CONFIG_AF_RXRPC=m
++# CONFIG_AF_RXRPC_DEBUG is not set
++# CONFIG_RXKAD is not set
++CONFIG_FIB_RULES=y
++CONFIG_WIRELESS=y
++CONFIG_CFG80211=y
++# CONFIG_CFG80211_REG_DEBUG is not set
++CONFIG_WIRELESS_OLD_REGULATORY=y
++CONFIG_WIRELESS_EXT=y
++CONFIG_WIRELESS_EXT_SYSFS=y
++# CONFIG_LIB80211 is not set
++CONFIG_MAC80211=y
++
++#
++# Rate control algorithm selection
++#
++CONFIG_MAC80211_RC_PID=y
++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 is not set
++# CONFIG_MAC80211_DEBUGFS is not set
++# CONFIG_MAC80211_DEBUG_MENU 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_STANDALONE=y
++CONFIG_PREVENT_FIRMWARE_BUILD=y
++CONFIG_FW_LOADER=m
++CONFIG_FIRMWARE_IN_KERNEL=y
++CONFIG_EXTRA_FIRMWARE=""
++# CONFIG_SYS_HYPERVISOR is not set
++CONFIG_CONNECTOR=m
++CONFIG_MTD=m
++# CONFIG_MTD_DEBUG is not set
++CONFIG_MTD_CONCAT=m
++CONFIG_MTD_PARTITIONS=y
++# CONFIG_MTD_TESTS is not set
++# CONFIG_MTD_REDBOOT_PARTS is not set
++# CONFIG_MTD_AR7_PARTS is not set
++
++#
++# User Modules And Translation Layers
++#
++CONFIG_MTD_CHAR=m
++CONFIG_MTD_BLKDEVS=m
++CONFIG_MTD_BLOCK=m
++# CONFIG_MTD_BLOCK_RO is not set
++# CONFIG_FTL is not set
++# CONFIG_NFTL is not set
++# CONFIG_INFTL is not set
++# CONFIG_RFD_FTL is not set
++# CONFIG_SSFDC is not set
++# CONFIG_MTD_OOPS is not set
++
++#
++# RAM/ROM/Flash chip drivers
++#
++CONFIG_MTD_CFI=m
++CONFIG_MTD_JEDECPROBE=m
++CONFIG_MTD_GEN_PROBE=m
++# CONFIG_MTD_CFI_ADV_OPTIONS is not set
++CONFIG_MTD_MAP_BANK_WIDTH_1=y
++CONFIG_MTD_MAP_BANK_WIDTH_2=y
++CONFIG_MTD_MAP_BANK_WIDTH_4=y
++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
++CONFIG_MTD_CFI_I1=y
++CONFIG_MTD_CFI_I2=y
++# CONFIG_MTD_CFI_I4 is not set
++# CONFIG_MTD_CFI_I8 is not set
++CONFIG_MTD_CFI_INTELEXT=m
++CONFIG_MTD_CFI_AMDSTD=m
++CONFIG_MTD_CFI_STAA=m
++CONFIG_MTD_CFI_UTIL=m
++CONFIG_MTD_RAM=m
++CONFIG_MTD_ROM=m
++CONFIG_MTD_ABSENT=m
++
++#
++# Mapping drivers for chip access
++#
++CONFIG_MTD_COMPLEX_MAPPINGS=y
++CONFIG_MTD_PHYSMAP=m
++CONFIG_MTD_PHYSMAP_COMPAT=y
++CONFIG_MTD_PHYSMAP_START=0x8000000
++CONFIG_MTD_PHYSMAP_LEN=0
++CONFIG_MTD_PHYSMAP_BANKWIDTH=2
++CONFIG_MTD_PCI=m
++# CONFIG_MTD_INTEL_VR_NOR is not set
++CONFIG_MTD_PLATRAM=m
++
++#
++# Self-contained MTD device drivers
++#
++CONFIG_MTD_PMC551=m
++# CONFIG_MTD_PMC551_BUGFIX is not set
++# CONFIG_MTD_PMC551_DEBUG is not set
++CONFIG_MTD_DATAFLASH=m
++# CONFIG_MTD_DATAFLASH_WRITE_VERIFY is not set
++# CONFIG_MTD_DATAFLASH_OTP is not set
++CONFIG_MTD_M25P80=m
++CONFIG_M25PXX_USE_FAST_READ=y
++CONFIG_MTD_SLRAM=m
++CONFIG_MTD_PHRAM=m
++CONFIG_MTD_MTDRAM=m
++CONFIG_MTDRAM_TOTAL_SIZE=4096
++CONFIG_MTDRAM_ERASE_SIZE=128
++CONFIG_MTD_BLOCK2MTD=m
++
++#
++# Disk-On-Chip Device Drivers
++#
++CONFIG_MTD_DOC2000=m
++CONFIG_MTD_DOC2001=m
++CONFIG_MTD_DOC2001PLUS=m
++CONFIG_MTD_DOCPROBE=m
++CONFIG_MTD_DOCECC=m
++# CONFIG_MTD_DOCPROBE_ADVANCED is not set
++CONFIG_MTD_DOCPROBE_ADDRESS=0
++# CONFIG_MTD_NAND is not set
++CONFIG_MTD_NAND_IDS=m
++# CONFIG_MTD_ONENAND is not set
++
++#
++# LPDDR flash memory drivers
++#
++# CONFIG_MTD_LPDDR is not set
++
++#
++# UBI - Unsorted block images
++#
++# CONFIG_MTD_UBI is not set
++# CONFIG_PARPORT is not set
++CONFIG_PNP=y
++CONFIG_PNP_DEBUG_MESSAGES=y
++
++#
++# Protocols
++#
++CONFIG_ISAPNP=y
++# CONFIG_PNPACPI 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=m
++CONFIG_BLK_DEV_NBD=m
++# 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=m
++CONFIG_CDROM_PKTCDVD_BUFFERS=8
++# CONFIG_CDROM_PKTCDVD_WCACHE is not set
++CONFIG_ATA_OVER_ETH=m
++# 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_ICS932S401 is not set
++# CONFIG_ENCLOSURE_SERVICES is not set
++# CONFIG_HP_ILO is not set
++# CONFIG_ISL29003 is not set
++# CONFIG_C2PORT is not set
++
++#
++# EEPROM support
++#
++# CONFIG_EEPROM_AT24 is not set
++# CONFIG_EEPROM_AT25 is not set
++# CONFIG_EEPROM_LEGACY is not set
++CONFIG_EEPROM_93CX6=y
++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_IDE_ATAPI=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=m
++CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
++# CONFIG_BLK_DEV_IDETAPE is not set
++CONFIG_IDE_TASK_IOCTL=y
++CONFIG_IDE_PROC_FS=y
++
++#
++# IDE chipset support/bugfixes
++#
++# CONFIG_IDE_GENERIC is not set
++# CONFIG_BLK_DEV_PLATFORM is not set
++# CONFIG_BLK_DEV_IDEPNP 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_OFFBOARD is not set
++CONFIG_BLK_DEV_GENERIC=y
++# 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_RAID_ATTRS=m
++CONFIG_SCSI=y
++CONFIG_SCSI_DMA=y
++# CONFIG_SCSI_TGT is not set
++CONFIG_SCSI_NETLINK=y
++CONFIG_SCSI_PROC_FS=y
++
++#
++# 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=m
++CONFIG_BLK_DEV_SR_VENDOR=y
++CONFIG_CHR_DEV_SG=m
++# CONFIG_CHR_DEV_SCH is not set
++
++#
++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
++#
++CONFIG_SCSI_MULTI_LUN=y
++CONFIG_SCSI_CONSTANTS=y
++CONFIG_SCSI_LOGGING=y
++# CONFIG_SCSI_SCAN_ASYNC is not set
++CONFIG_SCSI_WAIT_SCAN=m
++
++#
++# SCSI Transports
++#
++CONFIG_SCSI_SPI_ATTRS=m
++CONFIG_SCSI_FC_ATTRS=m
++CONFIG_SCSI_ISCSI_ATTRS=m
++# CONFIG_SCSI_SAS_LIBSAS is not set
++CONFIG_SCSI_SRP_ATTRS=m
++# 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=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_MD_MULTIPATH=m
++CONFIG_MD_FAULTY=m
++CONFIG_BLK_DEV_DM=m
++# CONFIG_DM_DEBUG is not set
++CONFIG_DM_CRYPT=m
++CONFIG_DM_SNAPSHOT=m
++CONFIG_DM_MIRROR=m
++CONFIG_DM_ZERO=m
++CONFIG_DM_MULTIPATH=m
++# CONFIG_DM_DELAY is not set
++# CONFIG_DM_UEVENT is not set
++# CONFIG_FUSION is not set
++
++#
++# IEEE 1394 (FireWire) support
++#
++
++#
++# Enable only one of the two stacks, unless you know what you are doing
++#
++# CONFIG_FIREWIRE is not set
++# CONFIG_IEEE1394 is not set
++# CONFIG_I2O is not set
++CONFIG_NETDEVICES=y
++CONFIG_COMPAT_NET_DEV_OPS=y
++CONFIG_IFB=m
++CONFIG_DUMMY=m
++# CONFIG_BONDING is not set
++CONFIG_MACVLAN=m
++# CONFIG_EQUALIZER is not set
++CONFIG_TUN=m
++CONFIG_VETH=m
++# CONFIG_NET_SB1000 is not set
++# CONFIG_ARCNET is not set
++CONFIG_PHYLIB=m
++
++#
++# MII PHY device drivers
++#
++CONFIG_MARVELL_PHY=m
++CONFIG_DAVICOM_PHY=m
++CONFIG_QSEMI_PHY=m
++CONFIG_LXT_PHY=m
++CONFIG_CICADA_PHY=m
++CONFIG_VITESSE_PHY=m
++CONFIG_SMSC_PHY=m
++# CONFIG_BROADCOM_PHY is not set
++# CONFIG_ICPLUS_PHY is not set
++CONFIG_REALTEK_PHY=m
++# CONFIG_NATIONAL_PHY is not set
++# CONFIG_STE10XP is not set
++# CONFIG_LSI_ET1011C_PHY is not set
++# CONFIG_MDIO_BITBANG 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_ENC28J60 is not set
++# CONFIG_ETHOC 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_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=m
++CONFIG_8139TOO=y
++# CONFIG_8139TOO_PIO is not set
++CONFIG_8139TOO_TUNE_TWISTER=y
++# 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_VIA_RHINE is not set
++# CONFIG_SC92031 is not set
++# CONFIG_ATL2 is not set
++# CONFIG_NETDEV_1000 is not set
++# CONFIG_NETDEV_10000 is not set
++# CONFIG_TR is not set
++
++#
++# Wireless LAN
++#
++# CONFIG_WLAN_PRE80211 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
++# CONFIG_USB_ZD1201 is not set
++# CONFIG_USB_NET_RNDIS_WLAN is not set
++# CONFIG_RTL8180 is not set
++CONFIG_RTL8187=y
++# CONFIG_ADM8211 is not set
++# CONFIG_MAC80211_HWSIM is not set
++# CONFIG_MWL8K is not set
++# CONFIG_P54_COMMON is not set
++# CONFIG_ATH5K is not set
++# CONFIG_ATH9K is not set
++# CONFIG_AR9170_USB is not set
++# CONFIG_IPW2100 is not set
++# CONFIG_IPW2200 is not set
++# CONFIG_IWLWIFI is not set
++# CONFIG_HOSTAP is not set
++# CONFIG_B43 is not set
++# CONFIG_B43LEGACY is not set
++# CONFIG_ZD1211RW is not set
++# CONFIG_RT2X00 is not set
++# CONFIG_HERMES is not set
++
++#
++# Enable WiMAX (Networking options) to see the WiMAX drivers
++#
++
++#
++# USB Network Adapters
++#
++CONFIG_USB_CATC=m
++CONFIG_USB_KAWETH=m
++CONFIG_USB_PEGASUS=m
++CONFIG_USB_RTL8150=m
++CONFIG_USB_USBNET=m
++CONFIG_USB_NET_AX8817X=m
++CONFIG_USB_NET_CDCETHER=m
++# CONFIG_USB_NET_CDC_EEM is not set
++# CONFIG_USB_NET_DM9601 is not set
++# CONFIG_USB_NET_SMSC95XX is not set
++CONFIG_USB_NET_GL620A=m
++CONFIG_USB_NET_NET1080=m
++CONFIG_USB_NET_PLUSB=m
++# CONFIG_USB_NET_MCS7830 is not set
++CONFIG_USB_NET_RNDIS_HOST=m
++CONFIG_USB_NET_CDC_SUBSET=m
++CONFIG_USB_ALI_M5632=y
++CONFIG_USB_AN2720=y
++CONFIG_USB_BELKIN=y
++CONFIG_USB_ARMLINUX=y
++CONFIG_USB_EPSON2888=y
++# CONFIG_USB_KC2190 is not set
++CONFIG_USB_NET_ZAURUS=m
++# CONFIG_WAN is not set
++# CONFIG_ATM_DRIVERS is not set
++# CONFIG_FDDI is not set
++# CONFIG_HIPPI is not set
++CONFIG_PPP=m
++CONFIG_PPP_MULTILINK=y
++CONFIG_PPP_FILTER=y
++CONFIG_PPP_ASYNC=m
++CONFIG_PPP_SYNC_TTY=m
++CONFIG_PPP_DEFLATE=m
++CONFIG_PPP_BSDCOMP=m
++CONFIG_PPP_MPPE=m
++CONFIG_PPPOE=m
++CONFIG_PPPOATM=m
++# CONFIG_PPPOL2TP is not set
++# CONFIG_SLIP is not set
++CONFIG_SLHC=m
++# CONFIG_NET_FC is not set
++CONFIG_NETCONSOLE=y
++# CONFIG_NETCONSOLE_DYNAMIC is not set
++CONFIG_NETPOLL=y
++# CONFIG_NETPOLL_TRAP is not set
++CONFIG_NET_POLL_CONTROLLER=y
++# CONFIG_ISDN is not set
++# CONFIG_PHONE is not set
++
++#
++# Input device support
++#
++CONFIG_INPUT=y
++# CONFIG_INPUT_FF_MEMLESS is not set
++# CONFIG_INPUT_POLLDEV 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=m
++CONFIG_INPUT_EVDEV=m
++# CONFIG_INPUT_EVBUG is not set
++
++#
++# Input Device Drivers
++#
++CONFIG_INPUT_KEYBOARD=y
++CONFIG_KEYBOARD_ATKBD=y
++CONFIG_KEYBOARD_SUNKBD=m
++CONFIG_KEYBOARD_LKKBD=m
++CONFIG_KEYBOARD_XTKBD=m
++CONFIG_KEYBOARD_NEWTON=m
++# CONFIG_KEYBOARD_STOWAWAY is not set
++CONFIG_INPUT_MOUSE=y
++CONFIG_MOUSE_PS2=y
++CONFIG_MOUSE_PS2_ALPS=y
++CONFIG_MOUSE_PS2_LOGIPS2PP=y
++CONFIG_MOUSE_PS2_SYNAPTICS=y
++CONFIG_MOUSE_PS2_TRACKPOINT=y
++# CONFIG_MOUSE_PS2_ELANTECH is not set
++# CONFIG_MOUSE_PS2_TOUCHKIT is not set
++CONFIG_MOUSE_SERIAL=m
++# CONFIG_MOUSE_APPLETOUCH is not set
++# CONFIG_MOUSE_BCM5974 is not set
++CONFIG_MOUSE_INPORT=m
++# CONFIG_MOUSE_ATIXL is not set
++CONFIG_MOUSE_LOGIBM=m
++CONFIG_MOUSE_PC110PAD=m
++CONFIG_MOUSE_VSXXXAA=m
++# CONFIG_INPUT_JOYSTICK is not set
++# CONFIG_INPUT_TABLET is not set
++# CONFIG_INPUT_TOUCHSCREEN is not set
++CONFIG_INPUT_MISC=y
++CONFIG_INPUT_PCSPKR=m
++# CONFIG_INPUT_ATI_REMOTE is not set
++# CONFIG_INPUT_ATI_REMOTE2 is not set
++# CONFIG_INPUT_KEYSPAN_REMOTE is not set
++# CONFIG_INPUT_POWERMATE is not set
++# CONFIG_INPUT_YEALINK is not set
++# CONFIG_INPUT_CM109 is not set
++CONFIG_INPUT_UINPUT=m
++
++#
++# Hardware I/O ports
++#
++CONFIG_SERIO=y
++CONFIG_SERIO_I8042=y
++CONFIG_SERIO_SERPORT=m
++CONFIG_SERIO_PCIPS2=m
++CONFIG_SERIO_LIBPS2=y
++CONFIG_SERIO_RAW=m
++CONFIG_GAMEPORT=m
++CONFIG_GAMEPORT_NS558=m
++CONFIG_GAMEPORT_L4=m
++CONFIG_GAMEPORT_EMU10K1=m
++CONFIG_GAMEPORT_FM801=m
++
++#
++# 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=y
++CONFIG_SERIAL_NONSTANDARD=y
++# CONFIG_COMPUTONE is not set
++# CONFIG_ROCKETPORT is not set
++# CONFIG_CYCLADES is not set
++# CONFIG_DIGIEPCA is not set
++# CONFIG_MOXA_INTELLIO is not set
++# CONFIG_MOXA_SMARTIO is not set
++# CONFIG_ISI is not set
++# CONFIG_SYNCLINKMP is not set
++# CONFIG_SYNCLINK_GT is not set
++# CONFIG_N_HDLC is not set
++# CONFIG_RISCOM8 is not set
++# CONFIG_SPECIALIX is not set
++# CONFIG_SX is not set
++# CONFIG_RIO is not set
++CONFIG_STALDRV=y
++# CONFIG_STALLION is not set
++# CONFIG_ISTALLION 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_PNP is not set
++CONFIG_SERIAL_8250_NR_UARTS=16
++CONFIG_SERIAL_8250_RUNTIME_UARTS=4
++CONFIG_SERIAL_8250_EXTENDED=y
++CONFIG_SERIAL_8250_MANY_PORTS=y
++CONFIG_SERIAL_8250_FOURPORT=y
++# CONFIG_SERIAL_8250_ACCENT is not set
++# CONFIG_SERIAL_8250_BOCA is not set
++# CONFIG_SERIAL_8250_EXAR_ST16C554 is not set
++CONFIG_SERIAL_8250_HUB6=m
++CONFIG_SERIAL_8250_SHARE_IRQ=y
++# CONFIG_SERIAL_8250_DETECT_IRQ is not set
++CONFIG_SERIAL_8250_RSA=y
++
++#
++# Non-8250 serial port support
++#
++# CONFIG_SERIAL_MAX3100 is not set
++CONFIG_SERIAL_CORE=y
++CONFIG_SERIAL_CORE_CONSOLE=y
++# CONFIG_SERIAL_JSM 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=m
++# CONFIG_IPMI_PANIC_EVENT is not set
++CONFIG_IPMI_DEVICE_INTERFACE=m
++CONFIG_IPMI_SI=m
++CONFIG_IPMI_WATCHDOG=m
++CONFIG_IPMI_POWEROFF=m
++CONFIG_HW_RANDOM=y
++# CONFIG_HW_RANDOM_TIMERIOMEM is not set
++# CONFIG_DTLK is not set
++# CONFIG_R3964 is not set
++# CONFIG_APPLICOM is not set
++CONFIG_RAW_DRIVER=m
++CONFIG_MAX_RAW_DEVS=256
++# CONFIG_TCG_TPM is not set
++CONFIG_DEVPORT=y
++CONFIG_I2C=m
++CONFIG_I2C_BOARDINFO=y
++CONFIG_I2C_CHARDEV=m
++CONFIG_I2C_HELPER_AUTO=y
++CONFIG_I2C_ALGOBIT=m
++CONFIG_I2C_ALGOPCA=m
++
++#
++# I2C Hardware Bus support
++#
++
++#
++# PC SMBus host controller drivers
++#
++CONFIG_I2C_ALI1535=m
++CONFIG_I2C_ALI1563=m
++CONFIG_I2C_ALI15X3=m
++CONFIG_I2C_AMD756=m
++CONFIG_I2C_AMD8111=m
++CONFIG_I2C_I801=m
++# CONFIG_I2C_ISCH is not set
++CONFIG_I2C_PIIX4=m
++CONFIG_I2C_NFORCE2=m
++CONFIG_I2C_SIS5595=m
++CONFIG_I2C_SIS630=m
++CONFIG_I2C_SIS96X=m
++CONFIG_I2C_VIA=m
++CONFIG_I2C_VIAPRO=m
++
++#
++# I2C system bus drivers (mostly embedded / system-on-chip)
++#
++CONFIG_I2C_OCORES=m
++# CONFIG_I2C_SIMTEC is not set
++
++#
++# External I2C/SMBus adapter drivers
++#
++CONFIG_I2C_PARPORT_LIGHT=m
++# CONFIG_I2C_TAOS_EVM is not set
++# CONFIG_I2C_TINY_USB is not set
++
++#
++# Graphics adapter I2C/DDC channel drivers
++#
++CONFIG_I2C_VOODOO3=m
++
++#
++# Other I2C/SMBus bus drivers
++#
++# CONFIG_I2C_ELEKTOR is not set
++CONFIG_I2C_PCA_ISA=m
++# CONFIG_I2C_PCA_PLATFORM is not set
++CONFIG_I2C_STUB=m
++
++#
++# Miscellaneous I2C Chip support
++#
++# CONFIG_DS1682 is not set
++CONFIG_SENSORS_PCF8574=m
++# CONFIG_PCF8575 is not set
++# CONFIG_SENSORS_PCA9539 is not set
++CONFIG_SENSORS_MAX6875=m
++# CONFIG_SENSORS_TSL2550 is not set
++# CONFIG_I2C_DEBUG_CORE is not set
++# CONFIG_I2C_DEBUG_ALGO is not set
++# CONFIG_I2C_DEBUG_BUS is not set
++# CONFIG_I2C_DEBUG_CHIP is not set
++CONFIG_SPI=y
++CONFIG_SPI_MASTER=y
++
++#
++# SPI Master Controller Drivers
++#
++CONFIG_SPI_BITBANG=m
++
++#
++# SPI Protocol Masters
++#
++# CONFIG_SPI_SPIDEV is not set
++# CONFIG_SPI_TLE62X0 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_THERMAL_HWMON is not set
++CONFIG_WATCHDOG=y
++# CONFIG_WATCHDOG_NOWAYOUT is not set
++
++#
++# Watchdog Device Drivers
++#
++CONFIG_SOFT_WATCHDOG=m
++# CONFIG_ALIM7101_WDT is not set
++
++#
++# ISA-based Watchdog Cards
++#
++# CONFIG_PCWATCHDOG is not set
++# CONFIG_MIXCOMWD is not set
++# CONFIG_WDT is not set
++
++#
++# PCI-based Watchdog Cards
++#
++# CONFIG_PCIPCWATCHDOG is not set
++# CONFIG_WDTPCI is not set
++
++#
++# USB-based Watchdog Cards
++#
++# CONFIG_USBPCWATCHDOG 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_MFD_WM8400 is not set
++# CONFIG_MFD_WM8350_I2C is not set
++# CONFIG_MFD_PCF50633 is not set
++# CONFIG_REGULATOR is not set
++
++#
++# Multimedia devices
++#
++
++#
++# Multimedia core support
++#
++CONFIG_VIDEO_DEV=m
++CONFIG_VIDEO_V4L2_COMMON=m
++CONFIG_VIDEO_ALLOW_V4L1=y
++CONFIG_VIDEO_V4L1_COMPAT=y
++# CONFIG_DVB_CORE is not set
++CONFIG_VIDEO_MEDIA=m
++
++#
++# Multimedia drivers
++#
++CONFIG_MEDIA_ATTACH=y
++CONFIG_MEDIA_TUNER=m
++# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
++CONFIG_MEDIA_TUNER_SIMPLE=m
++CONFIG_MEDIA_TUNER_TDA8290=m
++CONFIG_MEDIA_TUNER_TDA9887=m
++CONFIG_MEDIA_TUNER_TEA5761=m
++CONFIG_MEDIA_TUNER_TEA5767=m
++CONFIG_MEDIA_TUNER_MT20XX=m
++CONFIG_MEDIA_TUNER_XC2028=m
++CONFIG_MEDIA_TUNER_XC5000=m
++CONFIG_MEDIA_TUNER_MC44S803=m
++CONFIG_VIDEO_V4L2=m
++CONFIG_VIDEO_V4L1=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 is not set
++
++#
++# Encoders/decoders and other helper chips
++#
++
++#
++# Audio decoders
++#
++# CONFIG_VIDEO_TVAUDIO is not set
++# CONFIG_VIDEO_TDA7432 is not set
++# CONFIG_VIDEO_TDA9840 is not set
++# CONFIG_VIDEO_TDA9875 is not set
++# CONFIG_VIDEO_TEA6415C is not set
++# CONFIG_VIDEO_TEA6420 is not set
++# CONFIG_VIDEO_MSP3400 is not set
++# CONFIG_VIDEO_CS5345 is not set
++# CONFIG_VIDEO_CS53L32A is not set
++# CONFIG_VIDEO_M52790 is not set
++# CONFIG_VIDEO_TLV320AIC23B is not set
++# CONFIG_VIDEO_WM8775 is not set
++# CONFIG_VIDEO_WM8739 is not set
++# CONFIG_VIDEO_VP27SMPX is not set
++
++#
++# RDS decoders
++#
++# CONFIG_VIDEO_SAA6588 is not set
++
++#
++# Video decoders
++#
++# CONFIG_VIDEO_BT819 is not set
++# CONFIG_VIDEO_BT856 is not set
++# CONFIG_VIDEO_BT866 is not set
++# CONFIG_VIDEO_KS0127 is not set
++# CONFIG_VIDEO_OV7670 is not set
++# CONFIG_VIDEO_TCM825X is not set
++# CONFIG_VIDEO_SAA7110 is not set
++# CONFIG_VIDEO_SAA711X is not set
++# CONFIG_VIDEO_SAA717X is not set
++# CONFIG_VIDEO_SAA7191 is not set
++# CONFIG_VIDEO_TVP514X is not set
++# CONFIG_VIDEO_TVP5150 is not set
++# CONFIG_VIDEO_VPX3220 is not set
++
++#
++# Video and audio decoders
++#
++# CONFIG_VIDEO_CX25840 is not set
++
++#
++# MPEG video encoders
++#
++# CONFIG_VIDEO_CX2341X is not set
++
++#
++# Video encoders
++#
++# CONFIG_VIDEO_SAA7127 is not set
++# CONFIG_VIDEO_SAA7185 is not set
++# CONFIG_VIDEO_ADV7170 is not set
++# CONFIG_VIDEO_ADV7175 is not set
++
++#
++# Video improvement chips
++#
++# CONFIG_VIDEO_UPD64031A is not set
++# CONFIG_VIDEO_UPD64083 is not set
++# CONFIG_VIDEO_VIVI is not set
++# CONFIG_VIDEO_BT848 is not set
++# CONFIG_VIDEO_PMS is not set
++# CONFIG_VIDEO_CPIA is not set
++# CONFIG_VIDEO_CPIA2 is not set
++# CONFIG_VIDEO_SAA5246A is not set
++# CONFIG_VIDEO_SAA5249 is not set
++# CONFIG_VIDEO_STRADIS is not set
++# CONFIG_VIDEO_ZORAN is not set
++# CONFIG_VIDEO_SAA7134 is not set
++# CONFIG_VIDEO_MXB is not set
++# CONFIG_VIDEO_HEXIUM_ORION is not set
++# CONFIG_VIDEO_HEXIUM_GEMINI is not set
++# CONFIG_VIDEO_CX88 is not set
++# CONFIG_VIDEO_IVTV is not set
++# CONFIG_VIDEO_CAFE_CCIC is not set
++# CONFIG_SOC_CAMERA is not set
++CONFIG_V4L_USB_DRIVERS=y
++CONFIG_USB_VIDEO_CLASS=m
++CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
++# CONFIG_USB_GSPCA is not set
++# CONFIG_VIDEO_PVRUSB2 is not set
++# CONFIG_VIDEO_HDPVR is not set
++# CONFIG_VIDEO_EM28XX is not set
++# CONFIG_VIDEO_CX231XX is not set
++# CONFIG_VIDEO_USBVISION 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_VIDEO_OVCAMCHIP is not set
++# CONFIG_USB_OV511 is not set
++# CONFIG_USB_SE401 is not set
++# CONFIG_USB_SN9C102 is not set
++# CONFIG_USB_STV680 is not set
++# CONFIG_USB_ZC0301 is not set
++# 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_RADIO_ADAPTERS=y
++CONFIG_RADIO_CADET=m
++CONFIG_RADIO_RTRACK=m
++CONFIG_RADIO_RTRACK2=m
++CONFIG_RADIO_AZTECH=m
++CONFIG_RADIO_GEMTEK=m
++CONFIG_RADIO_GEMTEK_PCI=m
++CONFIG_RADIO_MAXIRADIO=m
++CONFIG_RADIO_MAESTRO=m
++CONFIG_RADIO_SF16FMI=m
++CONFIG_RADIO_SF16FMR2=m
++CONFIG_RADIO_TERRATEC=m
++CONFIG_RADIO_TRUST=m
++CONFIG_RADIO_TYPHOON=m
++CONFIG_RADIO_TYPHOON_PROC_FS=y
++CONFIG_RADIO_ZOLTRIX=m
++CONFIG_USB_DSBR=m
++# CONFIG_USB_SI470X is not set
++# CONFIG_USB_MR800 is not set
++# CONFIG_RADIO_TEA5764 is not set
++# CONFIG_DAB is not set
++
++#
++# Graphics support
++#
++CONFIG_DRM=m
++CONFIG_DRM_TDFX=m
++CONFIG_DRM_R128=m
++CONFIG_DRM_RADEON=m
++CONFIG_DRM_MGA=m
++CONFIG_DRM_VIA=m
++CONFIG_DRM_SAVAGE=m
++# CONFIG_VGASTATE is not set
++# CONFIG_VIDEO_OUTPUT_CONTROL is not set
++CONFIG_FB=y
++CONFIG_FIRMWARE_EDID=y
++# CONFIG_FB_DDC is not set
++# CONFIG_FB_BOOT_VESA_SUPPORT is not set
++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=m
++CONFIG_FB_SYS_COPYAREA=m
++CONFIG_FB_SYS_IMAGEBLIT=m
++# CONFIG_FB_FOREIGN_ENDIAN is not set
++CONFIG_FB_SYS_FOPS=m
++# 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_UVESA 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 is not set
++# 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_SM7XX=y
++CONFIG_FB_SM7XX_ACCEL=y
++# CONFIG_FB_SM7XX_DUALHEAD is not set
++CONFIG_FB_VIRTUAL=m
++# 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 is not set
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++# CONFIG_LOGO is not set
++CONFIG_SOUND=y
++CONFIG_SOUND_OSS_CORE=y
++CONFIG_SND=y
++CONFIG_SND_TIMER=y
++CONFIG_SND_PCM=y
++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 is not set
++# CONFIG_SND_DYNAMIC_MINORS 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_AC97_CODEC=y
++CONFIG_SND_DRIVERS=y
++CONFIG_SND_DUMMY=m
++# CONFIG_SND_VIRMIDI is not set
++CONFIG_SND_MTPAV=m
++# CONFIG_SND_SERIAL_U16550 is not set
++# CONFIG_SND_MPU401 is not set
++# CONFIG_SND_AC97_POWER_SAVE is not set
++CONFIG_SND_PCI=y
++# CONFIG_SND_AD1889 is not set
++# CONFIG_SND_ALS300 is not set
++# CONFIG_SND_ALI5451 is not set
++# CONFIG_SND_ATIIXP is not set
++# CONFIG_SND_ATIIXP_MODEM is not set
++# CONFIG_SND_AU8810 is not set
++# CONFIG_SND_AU8820 is not set
++# CONFIG_SND_AU8830 is not set
++# CONFIG_SND_AW2 is not set
++# CONFIG_SND_AZT3328 is not set
++# CONFIG_SND_BT87X is not set
++# CONFIG_SND_CA0106 is not set
++# CONFIG_SND_CMIPCI is not set
++# CONFIG_SND_OXYGEN is not set
++# CONFIG_SND_CS4281 is not set
++# CONFIG_SND_CS46XX is not set
++CONFIG_SND_CS5535AUDIO=y
++# CONFIG_SND_DARLA20 is not set
++# CONFIG_SND_GINA20 is not set
++# CONFIG_SND_LAYLA20 is not set
++# CONFIG_SND_DARLA24 is not set
++# CONFIG_SND_GINA24 is not set
++# CONFIG_SND_LAYLA24 is not set
++# CONFIG_SND_MONA is not set
++# CONFIG_SND_MIA is not set
++# CONFIG_SND_ECHO3G is not set
++# CONFIG_SND_INDIGO is not set
++# CONFIG_SND_INDIGOIO is not set
++# CONFIG_SND_INDIGODJ is not set
++# CONFIG_SND_INDIGOIOX is not set
++# CONFIG_SND_INDIGODJX is not set
++# CONFIG_SND_EMU10K1 is not set
++# CONFIG_SND_EMU10K1X is not set
++# CONFIG_SND_ENS1370 is not set
++# CONFIG_SND_ENS1371 is not set
++# CONFIG_SND_ES1938 is not set
++# CONFIG_SND_ES1968 is not set
++# CONFIG_SND_FM801 is not set
++# CONFIG_SND_HDA_INTEL is not set
++# CONFIG_SND_HDSP is not set
++# CONFIG_SND_HDSPM is not set
++# CONFIG_SND_HIFIER is not set
++# CONFIG_SND_ICE1712 is not set
++# CONFIG_SND_ICE1724 is not set
++# CONFIG_SND_INTEL8X0 is not set
++# CONFIG_SND_INTEL8X0M is not set
++# CONFIG_SND_KORG1212 is not set
++# CONFIG_SND_MAESTRO3 is not set
++# CONFIG_SND_MIXART is not set
++# CONFIG_SND_NM256 is not set
++# CONFIG_SND_PCXHR is not set
++# CONFIG_SND_RIPTIDE is not set
++# CONFIG_SND_RME32 is not set
++# CONFIG_SND_RME96 is not set
++# CONFIG_SND_RME9652 is not set
++# CONFIG_SND_SONICVIBES is not set
++# CONFIG_SND_TRIDENT is not set
++# CONFIG_SND_VIA82XX is not set
++# CONFIG_SND_VIA82XX_MODEM is not set
++# CONFIG_SND_VIRTUOSO is not set
++# CONFIG_SND_VX222 is not set
++# CONFIG_SND_YMFPCI is not set
++# CONFIG_SND_SPI is not set
++# CONFIG_SND_MIPS is not set
++# CONFIG_SND_USB is not set
++# CONFIG_SND_SOC is not set
++# CONFIG_SOUND_PRIME is not set
++CONFIG_AC97_BUS=y
++CONFIG_HID_SUPPORT=y
++CONFIG_HID=y
++# CONFIG_HID_DEBUG is not set
++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_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_DRAGONRISE_FF is not set
++# CONFIG_HID_EZKEY is not set
++# CONFIG_HID_KYE is not set
++# CONFIG_HID_GYRATION 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_GREENASIA_FF is not set
++# CONFIG_HID_TOPSEED is not set
++# CONFIG_THRUSTMASTER_FF is not set
++# CONFIG_ZEROPLUS_FF is not set
++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=y
++CONFIG_USB_DEVICE_CLASS=y
++CONFIG_USB_DYNAMIC_MINORS=y
++# CONFIG_USB_SUSPEND is not set
++# CONFIG_USB_OTG is not set
++# CONFIG_USB_OTG_WHITELIST is not set
++# CONFIG_USB_OTG_BLACKLIST_HUB is not set
++CONFIG_USB_MON=m
++# 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_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_OHCI_HCD=m
++# 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=m
++# CONFIG_USB_SL811_HCD is not set
++CONFIG_USB_R8A66597_HCD=y
++# CONFIG_USB_WHCI_HCD is not set
++# CONFIG_USB_HWA_HCD is not set
++
++#
++# USB Device Class drivers
++#
++CONFIG_USB_ACM=m
++CONFIG_USB_PRINTER=m
++# 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=y
++CONFIG_USB_STORAGE_FREECOM=y
++CONFIG_USB_STORAGE_ISD200=y
++CONFIG_USB_STORAGE_USBAT=y
++CONFIG_USB_STORAGE_SDDR09=y
++CONFIG_USB_STORAGE_SDDR55=y
++CONFIG_USB_STORAGE_JUMPSHOT=y
++CONFIG_USB_STORAGE_ALAUDA=y
++CONFIG_USB_STORAGE_ONETOUCH=y
++CONFIG_USB_STORAGE_KARMA=y
++CONFIG_USB_STORAGE_CYPRESS_ATACB=y
++# CONFIG_USB_LIBUSUAL is not set
++
++#
++# USB Imaging devices
++#
++CONFIG_USB_MDC800=m
++CONFIG_USB_MICROTEK=m
++
++#
++# USB port drivers
++#
++CONFIG_USB_SERIAL=m
++CONFIG_USB_EZUSB=y
++CONFIG_USB_SERIAL_GENERIC=y
++# CONFIG_USB_SERIAL_AIRCABLE is not set
++CONFIG_USB_SERIAL_ARK3116=m
++CONFIG_USB_SERIAL_BELKIN=m
++# CONFIG_USB_SERIAL_CH341 is not set
++# CONFIG_USB_SERIAL_WHITEHEAT is not set
++CONFIG_USB_SERIAL_DIGI_ACCELEPORT=m
++# CONFIG_USB_SERIAL_CP210X is not set
++CONFIG_USB_SERIAL_CYPRESS_M8=m
++CONFIG_USB_SERIAL_EMPEG=m
++CONFIG_USB_SERIAL_FTDI_SIO=m
++CONFIG_USB_SERIAL_FUNSOFT=m
++CONFIG_USB_SERIAL_VISOR=m
++CONFIG_USB_SERIAL_IPAQ=m
++CONFIG_USB_SERIAL_IR=m
++CONFIG_USB_SERIAL_EDGEPORT=m
++CONFIG_USB_SERIAL_EDGEPORT_TI=m
++CONFIG_USB_SERIAL_GARMIN=m
++CONFIG_USB_SERIAL_IPW=m
++# CONFIG_USB_SERIAL_IUU is not set
++CONFIG_USB_SERIAL_KEYSPAN_PDA=m
++# CONFIG_USB_SERIAL_KEYSPAN is not set
++CONFIG_USB_SERIAL_KLSI=m
++CONFIG_USB_SERIAL_KOBIL_SCT=m
++CONFIG_USB_SERIAL_MCT_U232=m
++# CONFIG_USB_SERIAL_MOS7720 is not set
++# CONFIG_USB_SERIAL_MOS7840 is not set
++# CONFIG_USB_SERIAL_MOTOROLA is not set
++CONFIG_USB_SERIAL_NAVMAN=m
++CONFIG_USB_SERIAL_PL2303=m
++# CONFIG_USB_SERIAL_OTI6858 is not set
++# CONFIG_USB_SERIAL_QUALCOMM is not set
++# CONFIG_USB_SERIAL_SPCP8X5 is not set
++CONFIG_USB_SERIAL_HP4X=m
++CONFIG_USB_SERIAL_SAFE=m
++# CONFIG_USB_SERIAL_SAFE_PADDED is not set
++# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
++CONFIG_USB_SERIAL_SIERRAWIRELESS=m
++# CONFIG_USB_SERIAL_SYMBOL is not set
++CONFIG_USB_SERIAL_TI=m
++CONFIG_USB_SERIAL_CYBERJACK=m
++CONFIG_USB_SERIAL_XIRCOM=m
++CONFIG_USB_SERIAL_OPTION=m
++CONFIG_USB_SERIAL_OMNINET=m
++# CONFIG_USB_SERIAL_OPTICON is not set
++# CONFIG_USB_SERIAL_DEBUG 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=m
++# 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
++CONFIG_USB_IDMOUSE=m
++# CONFIG_USB_FTDI_ELAN is not set
++CONFIG_USB_APPLEDISPLAY=m
++CONFIG_USB_SISUSBVGA=m
++CONFIG_USB_SISUSBVGA_CON=y
++CONFIG_USB_LD=m
++# CONFIG_USB_TRANCEVIBRATOR is not set
++# CONFIG_USB_IOWARRIOR is not set
++CONFIG_USB_TEST=m
++# CONFIG_USB_ISIGHTFW is not set
++# CONFIG_USB_VST is not set
++CONFIG_USB_ATM=m
++CONFIG_USB_SPEEDTOUCH=m
++CONFIG_USB_CXACRU=m
++CONFIG_USB_UEAGLEATM=m
++CONFIG_USB_XUSBATM=m
++# CONFIG_USB_GADGET is not set
++
++#
++# OTG and related infrastructure
++#
++# CONFIG_NOP_USB_XCEIV is not set
++# CONFIG_UWB 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 is not set
++# 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_TIFM_SD is not set
++# CONFIG_MMC_SPI is not set
++# CONFIG_MEMSTICK is not set
++CONFIG_NEW_LEDS=y
++CONFIG_LEDS_CLASS=m
++
++#
++# LED drivers
++#
++# CONFIG_LEDS_PCA9532 is not set
++# CONFIG_LEDS_LP5521 is not set
++# CONFIG_LEDS_PCA955X is not set
++# CONFIG_LEDS_DAC124S085 is not set
++# CONFIG_LEDS_BD2802 is not set
++
++#
++# LED Triggers
++#
++CONFIG_LEDS_TRIGGERS=y
++CONFIG_LEDS_TRIGGER_TIMER=m
++# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
++CONFIG_LEDS_TRIGGER_HEARTBEAT=m
++# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
++# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
++
++#
++# iptables trigger is under Netfilter config (LED target)
++#
++# 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
++
++#
++# I2C RTC drivers
++#
++# CONFIG_RTC_DRV_DS1307 is not set
++# CONFIG_RTC_DRV_DS1374 is not set
++# CONFIG_RTC_DRV_DS1672 is not set
++# CONFIG_RTC_DRV_MAX6900 is not set
++# CONFIG_RTC_DRV_RS5C372 is not set
++# CONFIG_RTC_DRV_ISL1208 is not set
++# CONFIG_RTC_DRV_X1205 is not set
++# CONFIG_RTC_DRV_PCF8563 is not set
++# CONFIG_RTC_DRV_PCF8583 is not set
++# CONFIG_RTC_DRV_M41T80 is not set
++# CONFIG_RTC_DRV_S35390A is not set
++# CONFIG_RTC_DRV_FM3130 is not set
++# CONFIG_RTC_DRV_RX8581 is not set
++
++#
++# SPI RTC drivers
++#
++# CONFIG_RTC_DRV_M41T94 is not set
++# CONFIG_RTC_DRV_DS1305 is not set
++# CONFIG_RTC_DRV_DS1390 is not set
++# CONFIG_RTC_DRV_MAX6902 is not set
++# CONFIG_RTC_DRV_R9701 is not set
++# CONFIG_RTC_DRV_RS5C348 is not set
++# CONFIG_RTC_DRV_DS3234 is not set
++
++#
++# 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_BQ4802 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
++# CONFIG_STAGING is not set
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++CONFIG_EXT2_FS_XATTR=y
++CONFIG_EXT2_FS_POSIX_ACL=y
++CONFIG_EXT2_FS_SECURITY=y
++# 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=m
++CONFIG_EXT4DEV_COMPAT=y
++CONFIG_EXT4_FS_XATTR=y
++CONFIG_EXT4_FS_POSIX_ACL=y
++CONFIG_EXT4_FS_SECURITY=y
++CONFIG_JBD=y
++# CONFIG_JBD_DEBUG is not set
++CONFIG_JBD2=m
++# CONFIG_JBD2_DEBUG is not set
++CONFIG_FS_MBCACHE=y
++CONFIG_REISERFS_FS=m
++# CONFIG_REISERFS_CHECK is not set
++# CONFIG_REISERFS_PROC_INFO is not set
++CONFIG_REISERFS_FS_XATTR=y
++CONFIG_REISERFS_FS_POSIX_ACL=y
++CONFIG_REISERFS_FS_SECURITY=y
++CONFIG_JFS_FS=m
++CONFIG_JFS_POSIX_ACL=y
++CONFIG_JFS_SECURITY=y
++# CONFIG_JFS_DEBUG is not set
++# CONFIG_JFS_STATISTICS is not set
++CONFIG_FS_POSIX_ACL=y
++CONFIG_FILE_LOCKING=y
++CONFIG_XFS_FS=m
++CONFIG_XFS_QUOTA=y
++CONFIG_XFS_POSIX_ACL=y
++CONFIG_XFS_RT=y
++# CONFIG_XFS_DEBUG is not set
++# CONFIG_GFS2_FS is not set
++CONFIG_OCFS2_FS=m
++CONFIG_OCFS2_FS_O2CB=m
++CONFIG_OCFS2_FS_STATS=y
++CONFIG_OCFS2_DEBUG_MASKLOG=y
++# CONFIG_OCFS2_DEBUG_FS is not set
++# CONFIG_OCFS2_FS_POSIX_ACL is not set
++# CONFIG_BTRFS_FS is not set
++CONFIG_DNOTIFY=y
++CONFIG_INOTIFY=y
++CONFIG_INOTIFY_USER=y
++CONFIG_QUOTA=y
++# CONFIG_QUOTA_NETLINK_INTERFACE is not set
++CONFIG_PRINT_QUOTA_WARNING=y
++CONFIG_QUOTA_TREE=m
++CONFIG_QFMT_V1=m
++CONFIG_QFMT_V2=m
++CONFIG_QUOTACTL=y
++CONFIG_AUTOFS_FS=m
++CONFIG_AUTOFS4_FS=m
++CONFIG_FUSE_FS=m
++
++#
++# Caches
++#
++# CONFIG_FSCACHE is not set
++
++#
++# CD-ROM/DVD Filesystems
++#
++CONFIG_ISO9660_FS=m
++CONFIG_JOLIET=y
++CONFIG_ZISOFS=y
++CONFIG_UDF_FS=m
++CONFIG_UDF_NLS=y
++
++#
++# DOS/FAT/NT Filesystems
++#
++CONFIG_FAT_FS=m
++CONFIG_MSDOS_FS=m
++CONFIG_VFAT_FS=m
++CONFIG_FAT_DEFAULT_CODEPAGE=437
++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
++CONFIG_NTFS_FS=m
++# CONFIG_NTFS_DEBUG is not set
++CONFIG_NTFS_RW=y
++
++#
++# 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=m
++CONFIG_MISC_FILESYSTEMS=y
++CONFIG_ADFS_FS=m
++# CONFIG_ADFS_FS_RW is not set
++CONFIG_AFFS_FS=m
++# CONFIG_ECRYPT_FS is not set
++CONFIG_HFS_FS=m
++CONFIG_HFSPLUS_FS=m
++CONFIG_BEFS_FS=m
++# CONFIG_BEFS_DEBUG is not set
++CONFIG_BFS_FS=m
++CONFIG_EFS_FS=m
++CONFIG_JFFS2_FS=m
++CONFIG_JFFS2_FS_DEBUG=0
++CONFIG_JFFS2_FS_WRITEBUFFER=y
++# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
++# CONFIG_JFFS2_SUMMARY is not set
++CONFIG_JFFS2_FS_XATTR=y
++CONFIG_JFFS2_FS_POSIX_ACL=y
++CONFIG_JFFS2_FS_SECURITY=y
++# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
++CONFIG_JFFS2_ZLIB=y
++# CONFIG_JFFS2_LZO is not set
++CONFIG_JFFS2_RTIME=y
++# CONFIG_JFFS2_RUBIN is not set
++CONFIG_CRAMFS=y
++# CONFIG_SQUASHFS is not set
++CONFIG_VXFS_FS=m
++CONFIG_MINIX_FS=m
++# CONFIG_OMFS_FS is not set
++CONFIG_HPFS_FS=m
++CONFIG_QNX4FS_FS=m
++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=m
++CONFIG_UFS_FS=m
++# CONFIG_UFS_FS_WRITE is not set
++# CONFIG_UFS_DEBUG is not set
++# CONFIG_NILFS2_FS is not set
++CONFIG_NETWORK_FILESYSTEMS=y
++CONFIG_NFS_FS=m
++CONFIG_NFS_V3=y
++CONFIG_NFS_V3_ACL=y
++CONFIG_NFS_V4=y
++CONFIG_NFSD=m
++CONFIG_NFSD_V2_ACL=y
++CONFIG_NFSD_V3=y
++CONFIG_NFSD_V3_ACL=y
++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_SUNRPC_GSS=m
++CONFIG_RPCSEC_GSS_KRB5=m
++CONFIG_RPCSEC_GSS_SPKM3=m
++CONFIG_SMB_FS=m
++# CONFIG_SMB_NLS_DEFAULT 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=m
++CONFIG_NCPFS_PACKET_SIGNING=y
++CONFIG_NCPFS_IOCTL_LOCKING=y
++CONFIG_NCPFS_STRONG=y
++CONFIG_NCPFS_NFS_NS=y
++CONFIG_NCPFS_OS2_NS=y
++# CONFIG_NCPFS_SMALLDOS is not set
++CONFIG_NCPFS_NLS=y
++CONFIG_NCPFS_EXTRAS=y
++CONFIG_CODA_FS=m
++CONFIG_AFS_FS=m
++# CONFIG_AFS_DEBUG is not set
++
++#
++# Partition Types
++#
++CONFIG_PARTITION_ADVANCED=y
++CONFIG_ACORN_PARTITION=y
++# CONFIG_ACORN_PARTITION_CUMANA is not set
++# CONFIG_ACORN_PARTITION_EESOX is not set
++CONFIG_ACORN_PARTITION_ICS=y
++# CONFIG_ACORN_PARTITION_ADFS is not set
++# CONFIG_ACORN_PARTITION_POWERTEC is not set
++CONFIG_ACORN_PARTITION_RISCIX=y
++CONFIG_OSF_PARTITION=y
++CONFIG_AMIGA_PARTITION=y
++CONFIG_ATARI_PARTITION=y
++CONFIG_MAC_PARTITION=y
++CONFIG_MSDOS_PARTITION=y
++CONFIG_BSD_DISKLABEL=y
++CONFIG_MINIX_SUBPARTITION=y
++CONFIG_SOLARIS_X86_PARTITION=y
++CONFIG_UNIXWARE_DISKLABEL=y
++CONFIG_LDM_PARTITION=y
++# CONFIG_LDM_DEBUG is not set
++CONFIG_SGI_PARTITION=y
++CONFIG_ULTRIX_PARTITION=y
++CONFIG_SUN_PARTITION=y
++CONFIG_KARMA_PARTITION=y
++CONFIG_EFI_PARTITION=y
++# CONFIG_SYSV68_PARTITION is not set
++CONFIG_NLS=y
++CONFIG_NLS_DEFAULT="utf-8"
++CONFIG_NLS_CODEPAGE_437=m
++# CONFIG_NLS_CODEPAGE_737 is not set
++# CONFIG_NLS_CODEPAGE_775 is not set
++CONFIG_NLS_CODEPAGE_850=m
++# 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=m
++CONFIG_NLS_CODEPAGE_950=m
++CONFIG_NLS_CODEPAGE_932=m
++CONFIG_NLS_CODEPAGE_949=m
++# CONFIG_NLS_CODEPAGE_874 is not set
++# CONFIG_NLS_ISO8859_8 is not set
++CONFIG_NLS_CODEPAGE_1250=m
++CONFIG_NLS_CODEPAGE_1251=m
++CONFIG_NLS_ASCII=m
++# 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=m
++CONFIG_NLS_KOI8_U=m
++CONFIG_NLS_UTF8=m
++# CONFIG_DLM is not set
++
++#
++# Kernel hacking
++#
++CONFIG_TRACE_IRQFLAGS_SUPPORT=y
++# CONFIG_PRINTK_TIME is not set
++CONFIG_ENABLE_WARN_DEPRECATED=y
++CONFIG_ENABLE_MUST_CHECK=y
++CONFIG_FRAME_WARN=1024
++CONFIG_MAGIC_SYSRQ=y
++CONFIG_UNUSED_SYMBOLS=y
++CONFIG_DEBUG_FS=y
++# 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_RING_BUFFER=y
++CONFIG_TRACING=y
++CONFIG_TRACING_SUPPORT=y
++
++#
++# Tracers
++#
++# CONFIG_IRQSOFF_TRACER is not set
++# CONFIG_SCHED_TRACER is not set
++# CONFIG_CONTEXT_SWITCH_TRACER is not set
++# CONFIG_EVENT_TRACER is not set
++# CONFIG_BOOT_TRACER is not set
++# CONFIG_TRACE_BRANCH_PROFILING is not set
++# CONFIG_KMEMTRACE is not set
++# CONFIG_WORKQUEUE_TRACER is not set
++# CONFIG_BLK_DEV_IO_TRACE is not set
++# CONFIG_FTRACE_STARTUP_TEST is not set
++# CONFIG_DYNAMIC_DEBUG is not set
++# CONFIG_SAMPLES is not set
++CONFIG_HAVE_ARCH_KGDB=y
++CONFIG_CMDLINE=""
++
++#
++# Security options
++#
++CONFIG_KEYS=y
++# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
++CONFIG_SECURITY=y
++# CONFIG_SECURITYFS is not set
++CONFIG_SECURITY_NETWORK=y
++CONFIG_SECURITY_NETWORK_XFRM=y
++# CONFIG_SECURITY_PATH is not set
++# CONFIG_SECURITY_FILE_CAPABILITIES is not set
++# CONFIG_SECURITY_ROOTPLUG is not set
++CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
++CONFIG_SECURITY_SELINUX=y
++CONFIG_SECURITY_SELINUX_BOOTPARAM=y
++CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=0
++CONFIG_SECURITY_SELINUX_DISABLE=y
++CONFIG_SECURITY_SELINUX_DEVELOP=y
++CONFIG_SECURITY_SELINUX_AVC_STATS=y
++CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1
++# CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set
++# CONFIG_SECURITY_TOMOYO is not set
++CONFIG_XOR_BLOCKS=m
++CONFIG_ASYNC_CORE=m
++CONFIG_ASYNC_MEMCPY=m
++CONFIG_ASYNC_XOR=m
++CONFIG_CRYPTO=y
++
++#
++# Crypto core or helper
++#
++# CONFIG_CRYPTO_FIPS is not set
++CONFIG_CRYPTO_ALGAPI=y
++CONFIG_CRYPTO_ALGAPI2=y
++CONFIG_CRYPTO_AEAD=m
++CONFIG_CRYPTO_AEAD2=y
++CONFIG_CRYPTO_BLKCIPHER=y
++CONFIG_CRYPTO_BLKCIPHER2=y
++CONFIG_CRYPTO_HASH=y
++CONFIG_CRYPTO_HASH2=y
++CONFIG_CRYPTO_RNG2=y
++CONFIG_CRYPTO_PCOMP=y
++CONFIG_CRYPTO_MANAGER=y
++CONFIG_CRYPTO_MANAGER2=y
++# CONFIG_CRYPTO_GF128MUL is not set
++CONFIG_CRYPTO_NULL=m
++CONFIG_CRYPTO_WORKQUEUE=y
++# CONFIG_CRYPTO_CRYPTD is not set
++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
++
++#
++# Block modes
++#
++CONFIG_CRYPTO_CBC=m
++# CONFIG_CRYPTO_CTR is not set
++# CONFIG_CRYPTO_CTS is not set
++CONFIG_CRYPTO_ECB=y
++# CONFIG_CRYPTO_LRW is not set
++# CONFIG_CRYPTO_PCBC is not set
++# CONFIG_CRYPTO_XTS is not set
++
++#
++# Hash modes
++#
++CONFIG_CRYPTO_HMAC=y
++# CONFIG_CRYPTO_XCBC is not set
++
++#
++# Digest
++#
++CONFIG_CRYPTO_CRC32C=m
++CONFIG_CRYPTO_MD4=m
++CONFIG_CRYPTO_MD5=y
++CONFIG_CRYPTO_MICHAEL_MIC=m
++# 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=m
++CONFIG_CRYPTO_SHA256=m
++CONFIG_CRYPTO_SHA512=m
++CONFIG_CRYPTO_TGR192=m
++CONFIG_CRYPTO_WP512=m
++
++#
++# Ciphers
++#
++CONFIG_CRYPTO_AES=y
++CONFIG_CRYPTO_ANUBIS=m
++CONFIG_CRYPTO_ARC4=y
++CONFIG_CRYPTO_BLOWFISH=m
++# CONFIG_CRYPTO_CAMELLIA is not set
++CONFIG_CRYPTO_CAST5=m
++CONFIG_CRYPTO_CAST6=m
++CONFIG_CRYPTO_DES=m
++# CONFIG_CRYPTO_FCRYPT is not set
++CONFIG_CRYPTO_KHAZAD=m
++# CONFIG_CRYPTO_SALSA20 is not set
++# CONFIG_CRYPTO_SEED is not set
++CONFIG_CRYPTO_SERPENT=m
++CONFIG_CRYPTO_TEA=m
++CONFIG_CRYPTO_TWOFISH=m
++CONFIG_CRYPTO_TWOFISH_COMMON=m
++
++#
++# Compression
++#
++CONFIG_CRYPTO_DEFLATE=m
++# CONFIG_CRYPTO_ZLIB is not set
++# CONFIG_CRYPTO_LZO is not set
++
++#
++# Random Number Generation
++#
++# CONFIG_CRYPTO_ANSI_CPRNG is not set
++CONFIG_CRYPTO_HW=y
++# CONFIG_CRYPTO_DEV_HIFN_795X is not set
++CONFIG_BINARY_PRINTF=y
++
++#
++# Library routines
++#
++CONFIG_BITREVERSE=y
++CONFIG_GENERIC_FIND_LAST_BIT=y
++CONFIG_CRC_CCITT=m
++CONFIG_CRC16=m
++# CONFIG_CRC_T10DIF is not set
++CONFIG_CRC_ITU_T=m
++CONFIG_CRC32=y
++# CONFIG_CRC7 is not set
++CONFIG_LIBCRC32C=m
++CONFIG_AUDIT_GENERIC=y
++CONFIG_ZLIB_INFLATE=y
++CONFIG_ZLIB_DEFLATE=m
++CONFIG_DECOMPRESS_GZIP=y
++CONFIG_TEXTSEARCH=y
++CONFIG_TEXTSEARCH_KMP=m
++CONFIG_TEXTSEARCH_BM=m
++CONFIG_TEXTSEARCH_FSM=m
++CONFIG_HAS_IOMEM=y
++CONFIG_HAS_IOPORT=y
++CONFIG_HAS_DMA=y
++CONFIG_NLATTR=y
+diff -Nur linux-2.6.30/arch/mips/include/asm/bootinfo.h rt4ls/arch/mips/include/asm/bootinfo.h
+--- linux-2.6.30/arch/mips/include/asm/bootinfo.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/bootinfo.h 2009-06-12 16:27:08.306407755 +0200
+@@ -7,6 +7,7 @@
+ * Copyright (C) 1995, 1996 Andreas Busse
+ * Copyright (C) 1995, 1996 Stoned Elipot
+ * Copyright (C) 1995, 1996 Paul M. Antoine.
++ * Copyright (C) 2009 Zhang Le
+ */
+ #ifndef _ASM_BOOTINFO_H
+ #define _ASM_BOOTINFO_H
+@@ -57,6 +58,16 @@
+ #define MACH_MIKROTIK_RB532 0 /* Mikrotik RouterBoard 532 */
+ #define MACH_MIKROTIK_RB532A 1 /* Mikrotik RouterBoard 532A */
+
++/*
++ * Valid machtype for group Loongson
++ */
++#define MACH_LOONGSON_UNKNOWN 0
++#define MACH_LEMOTE_FL2E 1
++#define MACH_LEMOTE_FL2F 2
++#define MACH_LEMOTE_YL2F89 3
++#define MACH_LEMOTE_YL2F7 4
++#define MACH_LOONGSON_END 5
++
+ #define CL_SIZE COMMAND_LINE_SIZE
+
+ extern char *system_type;
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-lemote/cpu-feature-overrides.h rt4ls/arch/mips/include/asm/mach-lemote/cpu-feature-overrides.h
+--- linux-2.6.30/arch/mips/include/asm/mach-lemote/cpu-feature-overrides.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/mach-lemote/cpu-feature-overrides.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,59 +0,0 @@
+-/*
+- * 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.
+- *
+- * Copyright (C) 2009 Wu Zhangjin <wuzj@lemote.com>
+- * Copyright (C) 2009 Philippe Vachon <philippe@cowpig.ca>
+- * Copyright (C) 2009 Zhang Le <r0bertz@gentoo.org>
+- *
+- * reference: /proc/cpuinfo,
+- * arch/mips/kernel/cpu-probe.c(cpu_probe_legacy),
+- * arch/mips/kernel/proc.c(show_cpuinfo),
+- * loongson2f user manual.
+- */
+-
+-#ifndef __ASM_MACH_LEMOTE_CPU_FEATURE_OVERRIDES_H
+-#define __ASM_MACH_LEMOTE_CPU_FEATURE_OVERRIDES_H
+-
+-#define cpu_dcache_line_size() 32
+-#define cpu_icache_line_size() 32
+-#define cpu_scache_line_size() 32
+-
+-
+-#define cpu_has_32fpr 1
+-#define cpu_has_3k_cache 0
+-#define cpu_has_4k_cache 1
+-#define cpu_has_4kex 1
+-#define cpu_has_64bits 1
+-#define cpu_has_cache_cdex_p 0
+-#define cpu_has_cache_cdex_s 0
+-#define cpu_has_counter 1
+-#define cpu_has_dc_aliases 1
+-#define cpu_has_divec 0
+-#define cpu_has_dsp 0
+-#define cpu_has_ejtag 0
+-#define cpu_has_fpu 1
+-#define cpu_has_ic_fills_f_dc 0
+-#define cpu_has_inclusive_pcaches 1
+-#define cpu_has_llsc 1
+-#define cpu_has_mcheck 0
+-#define cpu_has_mdmx 0
+-#define cpu_has_mips16 0
+-#define cpu_has_mips32r1 0
+-#define cpu_has_mips32r2 0
+-#define cpu_has_mips3d 0
+-#define cpu_has_mips64r1 0
+-#define cpu_has_mips64r2 0
+-#define cpu_has_mipsmt 0
+-#define cpu_has_prefetch 0
+-#define cpu_has_smartmips 0
+-#define cpu_has_tlb 1
+-#define cpu_has_tx39_cache 0
+-#define cpu_has_userlocal 0
+-#define cpu_has_vce 0
+-#define cpu_has_vtag_icache 0
+-#define cpu_has_watch 1
+-#define cpu_icache_snoops_remote_store 1
+-
+-#endif /* __ASM_MACH_LEMOTE_CPU_FEATURE_OVERRIDES_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-lemote/dma-coherence.h rt4ls/arch/mips/include/asm/mach-lemote/dma-coherence.h
+--- linux-2.6.30/arch/mips/include/asm/mach-lemote/dma-coherence.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/mach-lemote/dma-coherence.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,66 +0,0 @@
+-/*
+- * 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.
+- *
+- * Copyright (C) 2006, 07 Ralf Baechle <ralf@linux-mips.org>
+- * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
+- * Author: Fuxin Zhang, zhangfx@lemote.com
+- *
+- */
+-#ifndef __ASM_MACH_LEMOTE_DMA_COHERENCE_H
+-#define __ASM_MACH_LEMOTE_DMA_COHERENCE_H
+-
+-struct device;
+-
+-static inline dma_addr_t plat_map_dma_mem(struct device *dev, void *addr,
+- size_t size)
+-{
+- return virt_to_phys(addr) | 0x80000000;
+-}
+-
+-static inline dma_addr_t plat_map_dma_mem_page(struct device *dev,
+- struct page *page)
+-{
+- return page_to_phys(page) | 0x80000000;
+-}
+-
+-static inline unsigned long plat_dma_addr_to_phys(dma_addr_t dma_addr)
+-{
+- return dma_addr & 0x7fffffff;
+-}
+-
+-static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr)
+-{
+-}
+-
+-static inline int plat_dma_supported(struct device *dev, u64 mask)
+-{
+- /*
+- * we fall back to GFP_DMA when the mask isn't all 1s,
+- * so we can't guarantee allocations that must be
+- * within a tighter range than GFP_DMA..
+- */
+- if (mask < DMA_BIT_MASK(24))
+- return 0;
+-
+- return 1;
+-}
+-
+-static inline void plat_extra_sync_for_device(struct device *dev)
+-{
+- return;
+-}
+-
+-static inline int plat_dma_mapping_error(struct device *dev,
+- dma_addr_t dma_addr)
+-{
+- return 0;
+-}
+-
+-static inline int plat_device_is_coherent(struct device *dev)
+-{
+- return 0;
+-}
+-
+-#endif /* __ASM_MACH_LEMOTE_DMA_COHERENCE_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-lemote/mc146818rtc.h rt4ls/arch/mips/include/asm/mach-lemote/mc146818rtc.h
+--- linux-2.6.30/arch/mips/include/asm/mach-lemote/mc146818rtc.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/mach-lemote/mc146818rtc.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,36 +0,0 @@
+-/*
+- * 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.
+- *
+- * Copyright (C) 1998, 2001, 03, 07 by Ralf Baechle (ralf@linux-mips.org)
+- *
+- * RTC routines for PC style attached Dallas chip.
+- */
+-#ifndef __ASM_MACH_LEMOTE_MC146818RTC_H
+-#define __ASM_MACH_LEMOTE_MC146818RTC_H
+-
+-#include <linux/io.h>
+-
+-#define RTC_PORT(x) (0x70 + (x))
+-#define RTC_IRQ 8
+-
+-static inline unsigned char CMOS_READ(unsigned long addr)
+-{
+- outb_p(addr, RTC_PORT(0));
+- return inb_p(RTC_PORT(1));
+-}
+-
+-static inline void CMOS_WRITE(unsigned char data, unsigned long addr)
+-{
+- outb_p(addr, RTC_PORT(0));
+- outb_p(data, RTC_PORT(1));
+-}
+-
+-#define RTC_ALWAYS_BCD 0
+-
+-#ifndef mc146818_decode_year
+-#define mc146818_decode_year(year) ((year) < 70 ? (year) + 2000 : (year) + 1970)
+-#endif
+-
+-#endif /* __ASM_MACH_LEMOTE_MC146818RTC_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-lemote/pci.h rt4ls/arch/mips/include/asm/mach-lemote/pci.h
+--- linux-2.6.30/arch/mips/include/asm/mach-lemote/pci.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/mach-lemote/pci.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,30 +0,0 @@
+-/*
+- * Copyright (c) 2008 Zhang Le <r0bertz@gentoo.org>
+- *
+- * 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 _LEMOTE_PCI_H_
+-#define _LEMOTE_PCI_H_
+-
+-#define LOONGSON2E_PCI_MEM_START 0x14000000UL
+-#define LOONGSON2E_PCI_MEM_END 0x1fffffffUL
+-#define LOONGSON2E_PCI_IO_START 0x00004000UL
+-#define LOONGSON2E_IO_PORT_BASE 0x1fd00000UL
+-
+-#endif /* !_LEMOTE_PCI_H_ */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-lemote/war.h rt4ls/arch/mips/include/asm/mach-lemote/war.h
+--- linux-2.6.30/arch/mips/include/asm/mach-lemote/war.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/mach-lemote/war.h 1970-01-01 01:00:00.000000000 +0100
+@@ -1,25 +0,0 @@
+-/*
+- * 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.
+- *
+- * Copyright (C) 2002, 2004, 2007 by Ralf Baechle <ralf@linux-mips.org>
+- */
+-#ifndef __ASM_MIPS_MACH_LEMOTE_WAR_H
+-#define __ASM_MIPS_MACH_LEMOTE_WAR_H
+-
+-#define R4600_V1_INDEX_ICACHEOP_WAR 0
+-#define R4600_V1_HIT_CACHEOP_WAR 0
+-#define R4600_V2_HIT_CACHEOP_WAR 0
+-#define R5432_CP0_INTERRUPT_WAR 0
+-#define BCM1250_M3_WAR 0
+-#define SIBYTE_1956_WAR 0
+-#define MIPS4K_ICACHE_REFILL_WAR 0
+-#define MIPS_CACHE_SYNC_WAR 0
+-#define TX49XX_ICACHE_INDEX_INV_WAR 0
+-#define RM9000_CDEX_SMP_WAR 0
+-#define ICACHE_REFILLS_WORKAROUND_WAR 0
+-#define R10000_LLSC_WAR 0
+-#define MIPS34K_MISSED_ITLB_WAR 0
+-
+-#endif /* __ASM_MIPS_MACH_LEMOTE_WAR_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/clock.h rt4ls/arch/mips/include/asm/mach-loongson/clock.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/clock.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/clock.h 2009-06-12 16:27:08.506427365 +0200
+@@ -0,0 +1,64 @@
++#ifndef __ASM_MIPS_CLOCK_H
++#define __ASM_MIPS_CLOCK_H
++
++#include <linux/kref.h>
++#include <linux/list.h>
++#include <linux/seq_file.h>
++#include <linux/clk.h>
++
++extern void (*cpu_wait) (void);
++
++struct clk;
++
++struct clk_ops {
++ void (*init) (struct clk *clk);
++ void (*enable) (struct clk *clk);
++ void (*disable) (struct clk *clk);
++ void (*recalc) (struct clk *clk);
++ int (*set_rate) (struct clk *clk, unsigned long rate, int algo_id);
++ long (*round_rate) (struct clk *clk, unsigned long rate);
++};
++
++struct clk {
++ struct list_head node;
++ const char *name;
++ int id;
++ struct module *owner;
++
++ struct clk *parent;
++ struct clk_ops *ops;
++
++ struct kref kref;
++
++ unsigned long rate;
++ unsigned long flags;
++};
++
++#define CLK_ALWAYS_ENABLED (1 << 0)
++#define CLK_RATE_PROPAGATES (1 << 1)
++
++/* Should be defined by processor-specific code */
++void arch_init_clk_ops(struct clk_ops **, int type);
++
++int clk_init(void);
++
++int __clk_enable(struct clk *);
++void __clk_disable(struct clk *);
++
++void clk_recalc_rate(struct clk *);
++
++int clk_register(struct clk *);
++void clk_unregister(struct clk *);
++
++/* the exported API, in addition to clk_set_rate */
++/**
++ * clk_set_rate_ex - set the clock rate for a clock source, with additional parameter
++ * @clk: clock source
++ * @rate: desired clock rate in Hz
++ * @algo_id: algorithm id to be passed down to ops->set_rate
++ *
++ * Returns success (0) or negative errno.
++ */
++int clk_set_rate_ex(struct clk *clk, unsigned long rate, int algo_id);
++
++#endif /* __ASM_MIPS_CLOCK_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/cmdline.h rt4ls/arch/mips/include/asm/mach-loongson/cmdline.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/cmdline.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/cmdline.h 2009-06-12 16:27:08.510427596 +0200
+@@ -0,0 +1,9 @@
++/* machine-specific command line initialization */
++#ifdef CONFIG_SYS_HAS_MACH_PROM_INIT_CMDLINE
++extern void __init mach_prom_init_cmdline(void);
++#else
++void __init mach_prom_init_cmdline(void)
++{
++}
++#endif
++
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h rt4ls/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h 2009-06-12 16:27:08.510427596 +0200
+@@ -0,0 +1,59 @@
++/*
++ * 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.
++ *
++ * Copyright (C) 2009 Wu Zhangjin <wuzj@lemote.com>
++ * Copyright (C) 2009 Philippe Vachon <philippe@cowpig.ca>
++ * Copyright (C) 2009 Zhang Le <r0bertz@gentoo.org>
++ *
++ * reference: /proc/cpuinfo,
++ * arch/mips/kernel/cpu-probe.c(cpu_probe_legacy),
++ * arch/mips/kernel/proc.c(show_cpuinfo),
++ * loongson2f user manual.
++ */
++
++#ifndef __ASM_MACH_LEMOTE_CPU_FEATURE_OVERRIDES_H
++#define __ASM_MACH_LEMOTE_CPU_FEATURE_OVERRIDES_H
++
++#define cpu_dcache_line_size() 32
++#define cpu_icache_line_size() 32
++#define cpu_scache_line_size() 32
++
++
++#define cpu_has_32fpr 1
++#define cpu_has_3k_cache 0
++#define cpu_has_4k_cache 1
++#define cpu_has_4kex 1
++#define cpu_has_64bits 1
++#define cpu_has_cache_cdex_p 0
++#define cpu_has_cache_cdex_s 0
++#define cpu_has_counter 1
++#define cpu_has_dc_aliases 1
++#define cpu_has_divec 0
++#define cpu_has_dsp 0
++#define cpu_has_ejtag 0
++#define cpu_has_fpu 1
++#define cpu_has_ic_fills_f_dc 0
++#define cpu_has_inclusive_pcaches 1
++#define cpu_has_llsc 1
++#define cpu_has_mcheck 0
++#define cpu_has_mdmx 0
++#define cpu_has_mips16 0
++#define cpu_has_mips32r1 0
++#define cpu_has_mips32r2 0
++#define cpu_has_mips3d 0
++#define cpu_has_mips64r1 0
++#define cpu_has_mips64r2 0
++#define cpu_has_mipsmt 0
++#define cpu_has_prefetch 0
++#define cpu_has_smartmips 0
++#define cpu_has_tlb 1
++#define cpu_has_tx39_cache 0
++#define cpu_has_userlocal 0
++#define cpu_has_vce 0
++#define cpu_has_vtag_icache 0
++#define cpu_has_watch 1
++#define cpu_icache_snoops_remote_store 1
++
++#endif /* __ASM_MACH_LEMOTE_CPU_FEATURE_OVERRIDES_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h rt4ls/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h 2009-06-12 16:27:08.510427596 +0200
+@@ -0,0 +1,382 @@
++/*
++ * The header file of cs5536 sourth bridge.
++ *
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author : jlliu <liujl@lemote.com>
++ */
++
++#ifndef _CS5536_H
++#define _CS5536_H
++
++#include <linux/types.h>
++
++extern void _rdmsr(u32 msr, u32 *hi, u32 *lo);
++extern void _wrmsr(u32 msr, u32 hi, u32 lo);
++
++/*
++ * MSR module base
++ */
++#define CS5536_SB_MSR_BASE (0x00000000)
++#define CS5536_GLIU_MSR_BASE (0x10000000)
++#define CS5536_ILLEGAL_MSR_BASE (0x20000000)
++#define CS5536_USB_MSR_BASE (0x40000000)
++#define CS5536_IDE_MSR_BASE (0x60000000)
++#define CS5536_DIVIL_MSR_BASE (0x80000000)
++#define CS5536_ACC_MSR_BASE (0xa0000000)
++#define CS5536_UNUSED_MSR_BASE (0xc0000000)
++#define CS5536_GLCP_MSR_BASE (0xe0000000)
++
++#define SB_MSR_REG(offset) (CS5536_SB_MSR_BASE | (offset))
++#define GLIU_MSR_REG(offset) (CS5536_GLIU_MSR_BASE | (offset))
++#define ILLEGAL_MSR_REG(offset) (CS5536_ILLEGAL_MSR_BASE | (offset))
++#define USB_MSR_REG(offset) (CS5536_USB_MSR_BASE | (offset))
++#define IDE_MSR_REG(offset) (CS5536_IDE_MSR_BASE | (offset))
++#define DIVIL_MSR_REG(offset) (CS5536_DIVIL_MSR_BASE | (offset))
++#define ACC_MSR_REG(offset) (CS5536_ACC_MSR_BASE | (offset))
++#define UNUSED_MSR_REG(offset) (CS5536_UNUSED_MSR_BASE | (offset))
++#define GLCP_MSR_REG(offset) (CS5536_GLCP_MSR_BASE | (offset))
++
++/*
++ * BAR SPACE OF VIRTUAL PCI :
++ * range for pci probe use, length is the actual size.
++ */
++/* IO space for all DIVIL modules */
++#define CS5536_IRQ_RANGE 0xffffffe0 /* USERD FOR PCI PROBE */
++#define CS5536_IRQ_LENGTH 0x20 /* THE REGS ACTUAL LENGTH */
++#define CS5536_SMB_RANGE 0xfffffff8
++#define CS5536_SMB_LENGTH 0x08
++#define CS5536_GPIO_RANGE 0xffffff00
++#define CS5536_GPIO_LENGTH 0x100
++#define CS5536_MFGPT_RANGE 0xffffffc0
++#define CS5536_MFGPT_LENGTH 0x40
++#define CS5536_ACPI_RANGE 0xffffffe0
++#define CS5536_ACPI_LENGTH 0x20
++#define CS5536_PMS_RANGE 0xffffff80
++#define CS5536_PMS_LENGTH 0x80
++/* MEM space for 4KB nand flash; IO space for 16B nor flash. */
++#ifdef CS5536_NOR_FLASH
++#define CS5536_FLSH_LENGTH 0x10
++#define CS5536_FLSH_RANGE 0xfffffff0
++#else
++#define CS5536_FLSH_RANGE 0xfffff000
++#define CS5536_FLSH_LENGTH 0x1000
++#endif
++/* IO space for IDE */
++#define CS5536_IDE_RANGE 0xfffffff0
++#define CS5536_IDE_LENGTH 0x10
++/* IO space for ACC */
++#define CS5536_ACC_RANGE 0xffffff80
++#define CS5536_ACC_LENGTH 0x80
++/* MEM space for ALL USB modules */
++#define CS5536_OHCI_RANGE 0xfffff000
++#define CS5536_OHCI_LENGTH 0x1000
++#define CS5536_EHCI_RANGE 0xfffff000
++#define CS5536_EHCI_LENGTH 0x1000
++#define CS5536_UDC_RANGE 0xffffe000
++#define CS5536_UDC_LENGTH 0x2000
++#define CS5536_OTG_RANGE 0xfffff000
++#define CS5536_OTG_LENGTH 0x1000
++
++/*
++ * PCI MSR ACCESS
++ */
++#define PCI_MSR_CTRL 0xF0
++#define PCI_MSR_ADDR 0xF4
++#define PCI_MSR_DATA_LO 0xF8
++#define PCI_MSR_DATA_HI 0xFC
++
++/**************** MSR *****************************/
++
++/*
++ * GLIU STANDARD MSR
++ */
++#define GLIU_CAP 0x00
++#define GLIU_CONFIG 0x01
++#define GLIU_SMI 0x02
++#define GLIU_ERROR 0x03
++#define GLIU_PM 0x04
++#define GLIU_DIAG 0x05
++
++/*
++ * GLIU SPEC. MSR
++ */
++#define GLIU_P2D_BM0 0x20
++#define GLIU_P2D_BM1 0x21
++#define GLIU_P2D_BM2 0x22
++#define GLIU_P2D_BMK0 0x23
++#define GLIU_P2D_BMK1 0x24
++#define GLIU_P2D_BM3 0x25
++#define GLIU_P2D_BM4 0x26
++#define GLIU_COH 0x80
++#define GLIU_PAE 0x81
++#define GLIU_ARB 0x82
++#define GLIU_ASMI 0x83
++#define GLIU_AERR 0x84
++#define GLIU_DEBUG 0x85
++#define GLIU_PHY_CAP 0x86
++#define GLIU_NOUT_RESP 0x87
++#define GLIU_NOUT_WDATA 0x88
++#define GLIU_WHOAMI 0x8B
++#define GLIU_SLV_DIS 0x8C
++#define GLIU_IOD_BM0 0xE0
++#define GLIU_IOD_BM1 0xE1
++#define GLIU_IOD_BM2 0xE2
++#define GLIU_IOD_BM3 0xE3
++#define GLIU_IOD_BM4 0xE4
++#define GLIU_IOD_BM5 0xE5
++#define GLIU_IOD_BM6 0xE6
++#define GLIU_IOD_BM7 0xE7
++#define GLIU_IOD_BM8 0xE8
++#define GLIU_IOD_BM9 0xE9
++#define GLIU_IOD_SC0 0xEA
++#define GLIU_IOD_SC1 0xEB
++#define GLIU_IOD_SC2 0xEC
++#define GLIU_IOD_SC3 0xED
++#define GLIU_IOD_SC4 0xEE
++#define GLIU_IOD_SC5 0xEF
++#define GLIU_IOD_SC6 0xF0
++#define GLIU_IOD_SC7 0xF1
++
++/*
++ * SB STANDARD
++ */
++#define SB_CAP 0x00
++#define SB_CONFIG 0x01
++#define SB_SMI 0x02
++#define SB_ERROR 0x03
++#define SB_MAR_ERR_EN 0x00000001
++#define SB_TAR_ERR_EN 0x00000002
++#define SB_RSVD_BIT1 0x00000004
++#define SB_EXCEP_ERR_EN 0x00000008
++#define SB_SYSE_ERR_EN 0x00000010
++#define SB_PARE_ERR_EN 0x00000020
++#define SB_TAS_ERR_EN 0x00000040
++#define SB_MAR_ERR_FLAG 0x00010000
++#define SB_TAR_ERR_FLAG 0x00020000
++#define SB_RSVD_BIT2 0x00040000
++#define SB_EXCEP_ERR_FLAG 0x00080000
++#define SB_SYSE_ERR_FLAG 0x00100000
++#define SB_PARE_ERR_FLAG 0x00200000
++#define SB_TAS_ERR_FLAG 0x00400000
++#define SB_PM 0x04
++#define SB_DIAG 0x05
++
++/*
++ * SB SPEC.
++ */
++#define SB_CTRL 0x10
++#define SB_R0 0x20
++#define SB_R1 0x21
++#define SB_R2 0x22
++#define SB_R3 0x23
++#define SB_R4 0x24
++#define SB_R5 0x25
++#define SB_R6 0x26
++#define SB_R7 0x27
++#define SB_R8 0x28
++#define SB_R9 0x29
++#define SB_R10 0x2A
++#define SB_R11 0x2B
++#define SB_R12 0x2C
++#define SB_R13 0x2D
++#define SB_R14 0x2E
++#define SB_R15 0x2F
++
++/*
++ * GLCP STANDARD
++ */
++#define GLCP_CAP 0x00
++#define GLCP_CONFIG 0x01
++#define GLCP_SMI 0x02
++#define GLCP_ERROR 0x03
++#define GLCP_PM 0x04
++#define GLCP_DIAG 0x05
++
++/*
++ * GLCP SPEC.
++ */
++#define GLCP_CLK_DIS_DELAY 0x08
++#define GLCP_PM_CLK_DISABLE 0x09
++#define GLCP_GLB_PM 0x0B
++#define GLCP_DBG_OUT 0x0C
++#define GLCP_RSVD1 0x0D
++#define GLCP_SOFT_COM 0x0E
++#define SOFT_BAR_SMB_FLAG 0x00000001
++#define SOFT_BAR_GPIO_FLAG 0x00000002
++#define SOFT_BAR_MFGPT_FLAG 0x00000004
++#define SOFT_BAR_IRQ_FLAG 0x00000008
++#define SOFT_BAR_PMS_FLAG 0x00000010
++#define SOFT_BAR_ACPI_FLAG 0x00000020
++#define SOFT_BAR_FLSH0_FLAG 0x00000040
++#define SOFT_BAR_FLSH1_FLAG 0x00000080
++#define SOFT_BAR_FLSH2_FLAG 0x00000100
++#define SOFT_BAR_FLSH3_FLAG 0x00000200
++#define SOFT_BAR_IDE_FLAG 0x00000400
++#define SOFT_BAR_ACC_FLAG 0x00000800
++#define SOFT_BAR_OHCI_FLAG 0x00001000
++#define SOFT_BAR_EHCI_FLAG 0x00002000
++#define SOFT_BAR_UDC_FLAG 0x00004000
++#define SOFT_BAR_OTG_FLAG 0x00008000
++#define GLCP_RSVD2 0x0F
++#define GLCP_CLK_OFF 0x10
++#define GLCP_CLK_ACTIVE 0x11
++#define GLCP_CLK_DISABLE 0x12
++#define GLCP_CLK4ACK 0x13
++#define GLCP_SYS_RST 0x14
++#define GLCP_RSVD3 0x15
++#define GLCP_DBG_CLK_CTRL 0x16
++#define GLCP_CHIP_REV_ID 0x17
++
++/*
++ * DIVIL STANDARD
++ */
++#define DIVIL_CAP 0x00
++#define DIVIL_CONFIG 0x01
++#define DIVIL_SMI 0x02
++#define DIVIL_ERROR 0x03
++#define DIVIL_PM 0x04
++#define DIVIL_DIAG 0x05
++
++/*
++ * DIVIL SPEC.
++ */
++#define DIVIL_LBAR_IRQ 0x08
++#define DIVIL_LBAR_KEL 0x09
++#define DIVIL_LBAR_SMB 0x0B
++#define DIVIL_LBAR_GPIO 0x0C
++#define DIVIL_LBAR_MFGPT 0x0D
++#define DIVIL_LBAR_ACPI 0x0E
++#define DIVIL_LBAR_PMS 0x0F
++#define DIVIL_LBAR_FLSH0 0x10
++#define DIVIL_LBAR_FLSH1 0x11
++#define DIVIL_LBAR_FLSH2 0x12
++#define DIVIL_LBAR_FLSH3 0x13
++#define DIVIL_LEG_IO 0x14
++#define DIVIL_BALL_OPTS 0x15
++#define DIVIL_SOFT_IRQ 0x16
++#define DIVIL_SOFT_RESET 0x17
++/* NOR FLASH */
++#define NORF_CTRL 0x18
++#define NORF_T01 0x19
++#define NORF_T23 0x1A
++/* NAND FLASH */
++#define NANDF_DATA 0x1B
++#define NANDF_CTRL 0x1C
++#define NANDF_RSVD 0x1D
++/* KEL Keyboard Emulation Logic */
++#define KEL_CTRL 0x1F
++/* PIC */
++#define PIC_YSEL_LOW 0x20
++#define PIC_YSEL_LOW_USB_SHIFT 8
++#define PIC_YSEL_LOW_ACC_SHIFT 16
++#define PIC_YSEL_LOW_FLASH_SHIFT 24
++#define PIC_YSEL_HIGH 0x21
++#define PIC_ZSEL_LOW 0x22
++#define PIC_ZSEL_HIGH 0x23
++#define PIC_IRQM_PRIM 0x24
++#define PIC_IRQM_LPC 0x25
++#define PIC_XIRR_STS_LOW 0x26
++#define PIC_XIRR_STS_HIGH 0x27
++#define PCI_SHDW 0x34
++/* MFGPT */
++#define MFGPT_IRQ 0x28
++#define MFGPT_NR 0x29
++#define MFGPT_RSVD 0x2A
++#define MFGPT_SETUP 0x2B
++/* FLOPPY */
++#define FLPY_3F2_SHDW 0x30
++#define FLPY_3F7_SHDW 0x31
++#define FLPY_372_SHDW 0x32
++#define FLPY_377_SHDW 0x33
++/* PIT */
++#define PIT_SHDW 0x36
++#define PIT_CNTRL 0x37
++/* UART */
++#define UART1_MOD 0x38
++#define UART1_DONG 0x39
++#define UART1_CONF 0x3A
++#define UART1_RSVD 0x3B
++#define UART2_MOD 0x3C
++#define UART2_DONG 0x3D
++#define UART2_CONF 0x3E
++#define UART2_RSVD 0x3F
++/* DMA */
++#define DIVIL_AC_DMA 0x1E
++#define DMA_MAP 0x40
++#define DMA_SHDW_CH0 0x41
++#define DMA_SHDW_CH1 0x42
++#define DMA_SHDW_CH2 0x43
++#define DMA_SHDW_CH3 0x44
++#define DMA_SHDW_CH4 0x45
++#define DMA_SHDW_CH5 0x46
++#define DMA_SHDW_CH6 0x47
++#define DMA_SHDW_CH7 0x48
++#define DMA_MSK_SHDW 0x49
++/* LPC */
++#define LPC_EADDR 0x4C
++#define LPC_ESTAT 0x4D
++#define LPC_SIRQ 0x4E
++#define LPC_RSVD 0x4F
++/* PMC */
++#define PMC_LTMR 0x50
++#define PMC_RSVD 0x51
++/* RTC */
++#define RTC_RAM_LOCK 0x54
++#define RTC_DOMA_OFFSET 0x55
++#define RTC_MONA_OFFSET 0x56
++#define RTC_CEN_OFFSET 0x57
++
++/*
++ * 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
++
++/*
++ * ACC STANDARD
++ */
++#define ACC_CAP 0x00
++#define ACC_CONFIG 0x01
++#define ACC_SMI 0x02
++#define ACC_ERROR 0x03
++#define ACC_PM 0x04
++#define ACC_DIAG 0x05
++
++/*
++ * USB STANDARD
++ */
++#define USB_CAP 0x00
++#define USB_CONFIG 0x01
++#define USB_SMI 0x02
++#define USB_ERROR 0x03
++#define USB_PM 0x04
++#define USB_DIAG 0x05
++
++/*
++ * USB SPEC.
++ */
++#define USB_OHCI 0x08
++#define USB_EHCI 0x09
++#define USB_UDC 0x0A
++#define USB_OTG 0x0B
++
++/****************** NATIVE ***************************/
++/* GPIO : I/O SPACE; REG : 32BITS */
++#define GPIOL_OUT_VAL 0x00
++#define GPIOL_OUT_EN 0x04
++
++#endif /* _CS5536_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h rt4ls/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h 2009-06-12 16:27:08.510427596 +0200
+@@ -0,0 +1,26 @@
++/*
++ * cs5536 mfgpt header file
++ */
++
++#ifndef _CS5536_MFGPT_H
++#define _CS5536_MFGPT_H
++
++#include <cs5536/cs5536.h>
++
++extern void setup_mfgpt_timer(void);
++
++#if 1
++#define MFGPT_TICK_RATE 14318000
++#else
++#define MFGPT_TICK_RATE (14318180 / 8)
++#endif
++#define COMPARE ((MFGPT_TICK_RATE + HZ/2) / HZ)
++
++#define CS5536_MFGPT_INTR 5
++
++#define MFGPT_BASE mfgpt_base
++#define MFGPT0_CMP2 (MFGPT_BASE + 2)
++#define MFGPT0_CNT (MFGPT_BASE + 4)
++#define MFGPT0_SETUP (MFGPT_BASE + 6)
++
++#endif /*!_CS5536_MFGPT_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h rt4ls/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/cs5536/cs5536_pci.h 2009-06-12 16:27:08.510427596 +0200
+@@ -0,0 +1,174 @@
++/*
++ * the definition file of cs5536 Virtual Support Module(VSM).
++ * pci configuration space can be accessed through the VSM, so
++ * there is no need of the MSR read/write now, except the spec.
++ * MSR registers which are not implemented yet.
++ *
++ * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
++ * Author : jlliu, liujl@lemote.com
++ */
++
++#ifndef _CS5536_PCI_H
++#define _CS5536_PCI_H
++
++#include <linux/types.h>
++#include <linux/pci_regs.h>
++
++extern void cs5536_pci_conf_write4(int function, int reg, u32 value);
++extern u32 cs5536_pci_conf_read4(int function, int reg);
++
++#define CS5536_FLASH_INTR 6
++#define CS5536_ACC_INTR 9
++#define CS5536_IDE_INTR 14
++#define CS5536_USB_INTR 11
++#define CS5536_UART1_INTR 4
++#define CS5536_UART2_INTR 3
++
++/************** PCI BUS DEVICE FUNCTION ***************/
++
++/*
++ * PCI bus device function
++ */
++#define PCI_BUS_CS5536 0
++#define PCI_IDSEL_CS5536 14
++
++/********** STANDARD PCI-2.2 EXPANSION ****************/
++
++/*
++ * PCI configuration space
++ * we have to virtualize the PCI configure space head, so we should
++ * define the necessary IDs and some others.
++ */
++
++/* CONFIG of PCI VENDOR ID*/
++#define CFG_PCI_VENDOR_ID(mod_dev_id, sys_vendor_id) \
++ (((mod_dev_id) << 16) | (sys_vendor_id))
++
++/* VENDOR ID */
++#define CS5536_VENDOR_ID 0x1022
++
++/* DEVICE ID */
++#define CS5536_ISA_DEVICE_ID 0x2090
++#define CS5536_FLASH_DEVICE_ID 0x2091
++#define CS5536_IDE_DEVICE_ID 0x209a
++#define CS5536_ACC_DEVICE_ID 0x2093
++#define CS5536_OHCI_DEVICE_ID 0x2094
++#define CS5536_EHCI_DEVICE_ID 0x2095
++#define CS5536_UDC_DEVICE_ID 0x2096
++#define CS5536_OTG_DEVICE_ID 0x2097
++
++/* CLASS CODE : CLASS SUB-CLASS INTERFACE */
++#define CS5536_ISA_CLASS_CODE 0x060100
++#define CS5536_FLASH_CLASS_CODE 0x050100
++#define CS5536_IDE_CLASS_CODE 0x010180
++#define CS5536_ACC_CLASS_CODE 0x040100
++#define CS5536_OHCI_CLASS_CODE 0x0C0310
++#define CS5536_EHCI_CLASS_CODE 0x0C0320
++#define CS5536_UDC_CLASS_CODE 0x0C03FE
++#define CS5536_OTG_CLASS_CODE 0x0C0380
++
++/* BHLC : BIST HEADER-TYPE LATENCY-TIMER CACHE-LINE-SIZE */
++
++#define CFG_PCI_CACHE_LINE_SIZE(header_type, latency_timer) \
++ ((PCI_NONE_BIST << 24) | ((header_type) << 16) \
++ | ((latency_timer) << 8) | PCI_NORMAL_CACHE_LINE_SIZE);
++
++#define PCI_NONE_BIST 0x00 /* RO not implemented yet. */
++#define PCI_BRIDGE_HEADER_TYPE 0x80 /* RO */
++#define PCI_NORMAL_HEADER_TYPE 0x00
++#define PCI_NORMAL_LATENCY_TIMER 0x00
++#define PCI_NORMAL_CACHE_LINE_SIZE 0x08 /* RW */
++
++/* BAR */
++#define PCI_BAR0_REG 0x10
++#define PCI_BAR1_REG 0x14
++#define PCI_BAR2_REG 0x18
++#define PCI_BAR3_REG 0x1c
++#define PCI_BAR4_REG 0x20
++#define PCI_BAR5_REG 0x24
++#define PCI_BAR_COUNT 6
++#define PCI_BAR_RANGE_MASK 0xFFFFFFFF
++
++/* CARDBUS CIS POINTER */
++#define PCI_CARDBUS_CIS_POINTER 0x00000000
++
++/* SUBSYSTEM VENDOR ID */
++#define CS5536_SUB_VENDOR_ID CS5536_VENDOR_ID
++
++/* SUBSYSTEM ID */
++#define CS5536_ISA_SUB_ID CS5536_ISA_DEVICE_ID
++#define CS5536_FLASH_SUB_ID CS5536_FLASH_DEVICE_ID
++#define CS5536_IDE_SUB_ID CS5536_IDE_DEVICE_ID
++#define CS5536_ACC_SUB_ID CS5536_ACC_DEVICE_ID
++#define CS5536_OHCI_SUB_ID CS5536_OHCI_DEVICE_ID
++#define CS5536_EHCI_SUB_ID CS5536_EHCI_DEVICE_ID
++#define CS5536_UDC_SUB_ID CS5536_UDC_DEVICE_ID
++#define CS5536_OTG_SUB_ID CS5536_OTG_DEVICE_ID
++
++/* EXPANSION ROM BAR */
++#define PCI_EXPANSION_ROM_BAR 0x00000000
++
++/* CAPABILITIES POINTER */
++#define PCI_CAPLIST_POINTER 0x00000000
++#define PCI_CAPLIST_USB_POINTER 0x40
++/* INTERRUPT */
++
++#define CFG_PCI_INTERRUPT_LINE(pin, mod_intr) \
++ ((PCI_MAX_LATENCY << 24) | (PCI_MIN_GRANT << 16) | \
++ ((pin) << 8) | (mod_intr))
++
++#define PCI_MAX_LATENCY 0x40
++#define PCI_MIN_GRANT 0x00
++#define PCI_DEFAULT_PIN 0x01
++
++/*********** EXPANSION PCI REG ************************/
++
++/*
++ * ISA EXPANSION
++ */
++#define PCI_UART1_INT_REG 0x50
++#define PCI_UART2_INT_REG 0x54
++#define PCI_ISA_FIXUP_REG 0x58
++
++/*
++ * FLASH EXPANSION
++ */
++#define PCI_FLASH_INT_REG 0x50
++#define PCI_NOR_FLASH_CTRL_REG 0x40
++#define PCI_NOR_FLASH_T01_REG 0x44
++#define PCI_NOR_FLASH_T23_REG 0x48
++#define PCI_NAND_FLASH_TDATA_REG 0x60
++#define PCI_NAND_FLASH_TCTRL_REG 0x64
++#define PCI_NAND_FLASH_RSVD_REG 0x68
++#define PCI_FLASH_SELECT_REG 0x70
++
++/*
++ * IDE EXPANSION
++ */
++#define PCI_IDE_CFG_REG 0x40
++#define CS5536_IDE_FLASH_SIGNATURE 0xDEADBEEF
++#define PCI_IDE_DTC_REG 0x48
++#define PCI_IDE_CAST_REG 0x4C
++#define PCI_IDE_ETC_REG 0x50
++#define PCI_IDE_PM_REG 0x54
++#define PCI_IDE_INT_REG 0x60
++
++/*
++ * ACC EXPANSION
++ */
++#define PCI_ACC_INT_REG 0x50
++
++/*
++ * OHCI EXPANSION : INTTERUPT IS IMPLEMENTED BY THE OHCI
++ */
++#define PCI_OHCI_PM_REG 0x40
++#define PCI_OHCI_INT_REG 0x50
++
++/*
++ * EHCI EXPANSION
++ */
++#define PCI_EHCI_LEGSMIEN_REG 0x50
++#define PCI_EHCI_LEGSMISTS_REG 0x54
++#define PCI_EHCI_FLADJ_REG 0x60
++
++#endif /* _CS5536_PCI_H_ */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h rt4ls/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h 2009-06-12 16:27:08.510427596 +0200
+@@ -0,0 +1,59 @@
++/*
++ * the Virtual Support Module(VSM) read/write interfaces
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * Author: Wu Zhangjin <wuzj@lemote.com>
++ */
++
++#ifndef _CS5536_VSM_H
++#define _CS5536_VSM_H
++
++#include <linux/types.h>
++
++#define DECLARE_CS5536_MODULE(name) \
++extern void pci_##name##_write_reg(int reg, u32 value); \
++extern u32 pci_##name##_read_reg(int reg);
++
++#define DEFINE_CS5536_MODULE(name) \
++void pci_##name##_write_reg(int reg, u32 value)\
++{ \
++ return; \
++} \
++u32 pci_##name##_read_reg(int reg) \
++{ \
++ return 0xffffffff; \
++} \
++
++/* core modules of cs5536 */
++
++/* ide module */
++DECLARE_CS5536_MODULE(ide)
++/* acc module */
++DECLARE_CS5536_MODULE(acc)
++/* ohci module */
++DECLARE_CS5536_MODULE(ohci)
++/* isa module */
++DECLARE_CS5536_MODULE(isa)
++/* ehci module */
++DECLARE_CS5536_MODULE(ehci)
++
++/* selective modules of cs5536 */
++/* flash(nor or nand flash) module */
++#ifdef CONFIG_CS5536_FLASH
++ DECLARE_CS5536_MODULE(flash)
++#else
++ DEFINE_CS5536_MODULE(flash)
++#endif
++/* otg module */
++#ifdef CONFIG_CS5536_OTG
++ DECLARE_CS5536_MODULE(otg)
++#else
++ DEFINE_CS5536_MODULE(otg)
++#endif
++/* udc module */
++#ifdef CONFIG_CS5536_UDC
++ DECLARE_CS5536_MODULE(udc)
++#else
++ DEFINE_CS5536_MODULE(udc)
++#endif
++#endif /* _CS5536_VSM_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/dma-coherence.h rt4ls/arch/mips/include/asm/mach-loongson/dma-coherence.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/dma-coherence.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/dma-coherence.h 2009-06-12 16:27:08.510427596 +0200
+@@ -0,0 +1,70 @@
++/*
++ * 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.
++ *
++ * Copyright (C) 2006, 07 Ralf Baechle <ralf@linux-mips.org>
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author: Fuxin Zhang, zhangfx@lemote.com
++ *
++ */
++#ifndef __ASM_MACH_LOONGSON_DMA_COHERENCE_H
++#define __ASM_MACH_LOONGSON_DMA_COHERENCE_H
++
++struct device;
++
++static inline dma_addr_t plat_map_dma_mem(struct device *dev, void *addr,
++ size_t size)
++{
++ return virt_to_phys(addr) | 0x80000000;
++}
++
++static inline dma_addr_t plat_map_dma_mem_page(struct device *dev,
++ struct page *page)
++{
++ return page_to_phys(page) | 0x80000000;
++}
++
++static inline unsigned long plat_dma_addr_to_phys(dma_addr_t dma_addr)
++{
++#if defined(CONFIG_CPU_LOONGSON2F) & defined(CONFIG_64BIT)
++ return (dma_addr > 0x8fffffff) ? dma_addr : (dma_addr & 0x0fffffff);
++#else
++ return dma_addr & 0x7fffffff;
++#endif
++}
++
++static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr)
++{
++}
++
++static inline int plat_dma_supported(struct device *dev, u64 mask)
++{
++ /*
++ * we fall back to GFP_DMA when the mask isn't all 1s,
++ * so we can't guarantee allocations that must be
++ * within a tighter range than GFP_DMA..
++ */
++ if (mask < DMA_BIT_MASK(24))
++ return 0;
++
++ return 1;
++}
++
++static inline void plat_extra_sync_for_device(struct device *dev)
++{
++ return;
++}
++
++static inline int plat_dma_mapping_error(struct device *dev,
++ dma_addr_t dma_addr)
++{
++ return 0;
++}
++
++static inline int plat_device_is_coherent(struct device *dev)
++{
++ return 0;
++}
++
++#endif /* __ASM_MACH_LOONGSON_DMA_COHERENCE_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/loongson.h rt4ls/arch/mips/include/asm/mach-loongson/loongson.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/loongson.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/loongson.h 2009-06-12 16:27:08.510427596 +0200
+@@ -0,0 +1,319 @@
++/*
++ * Copyright (c) 2009 Philippe Vachon <philippe@cowpig.ca>
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * Author: Wu Zhangjin <wuzj@lemote.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ */
++
++#ifndef __LOONGSON_H
++#define __LOONGSON_H
++
++#include <linux/io.h>
++#include <linux/init.h>
++
++/* loongson internal northbridge initialization */
++extern void bonito_irq_init(void);
++
++/* environment arguments from bootloader */
++extern unsigned long bus_clock, cpu_clock_freq;
++extern unsigned long memsize, highmemsize;
++
++/* loongson-based machines specific reboot setup */
++extern void loongson_reboot_setup(void);
++
++/* loongson-specific command line, env and memory initialization */
++extern void __init prom_init_memory(void);
++extern void __init prom_init_cmdline(void);
++extern void __init prom_init_env(void);
++
++/* irq operation functions */
++extern void bonito_irqdispatch(void);
++extern void i8259_irqdispatch(void);
++extern void __init bonito_irq_init(void);
++extern void __init set_irq_trigger_mode(void);
++extern int mach_i8259_irq(void);
++extern void mach_irq_dispatch(unsigned int pending);
++
++/* machine-specific reboot/halt operation */
++extern void mach_prepare_reboot(void);
++extern void mach_prepare_shutdown(void);
++
++/* We need this in some places... */
++#define delay() ({ \
++ int x; \
++ for (x = 0; x < 100000; x++) \
++ __asm__ __volatile__(""); \
++})
++
++/* loongson-specific cpu frequency relative stuff */
++#ifdef CONFIG_LOONGSON2F_CPU_FREQ
++#include <linux/cpufreq.h>
++extern void loongson2f_cpu_wait(void);
++extern struct cpufreq_frequency_table loongson2f_clockmod_table[];
++#endif
++
++#define LOONGSON_REG(x) \
++ (*(u32 *)((char *)CKSEG1ADDR(LOONGSON_REG_BASE) + (x)))
++
++#define LOONGSON_IRQ_BASE 32
++#define LOONGSON_PERFCNT_IRQ (MIPS_CPU_IRQ_BASE + 6) /* cpu perf counter */
++
++#define LOONGSON_FLASH_BASE 0x1c000000
++#define LOONGSON_FLASH_SIZE 0x02000000 /* 32M */
++#define LOONGSON_FLASH_TOP (LOONGSON_FLASH_BASE+LOONGSON_FLASH_SIZE-1)
++
++#define LOONGSON_LIO0_BASE 0x1e000000
++#define LOONGSON_LIO0_SIZE 0x01C00000 /* 28M */
++#define LOONGSON_LIO0_TOP (LOONGSON_LIO0_BASE+LOONGSON_LIO0_SIZE-1)
++
++#define LOONGSON_BOOT_BASE 0x1fc00000
++#define LOONGSON_BOOT_SIZE 0x00100000 /* 1M */
++#define LOONGSON_BOOT_TOP (LOONGSON_BOOT_BASE+LOONGSON_BOOT_SIZE-1)
++#define LOONGSON_REG_BASE 0x1fe00000
++#define LOONGSON_REG_SIZE 0x00100000 /* 256Bytes + 256Bytes + ??? */
++#define LOONGSON_REG_TOP (LOONGSON_REG_BASE+LOONGSON_REG_SIZE-1)
++
++#define LOONGSON_LIO1_BASE 0x1ff00000
++#define LOONGSON_LIO1_SIZE 0x00100000 /* 1M */
++#define LOONGSON_LIO1_TOP (LOONGSON_LIO1_BASE+LOONGSON_LIO1_SIZE-1)
++
++#define LOONGSON_PCILO0_BASE 0x10000000
++#define LOONGSON_PCILO1_BASE 0x14000000
++#define LOONGSON_PCILO2_BASE 0x18000000
++#define LOONGSON_PCILO_BASE LOONGSON_PCILO0_BASE
++#define LOONGSON_PCILO_SIZE 0x0c000000 /* 64M * 3 */
++#define LOONGSON_PCILO_TOP (LOONGSON_PCILO0_BASE+LOONGSON_PCILO_SIZE-1)
++
++#define LOONGSON_PCICFG_BASE 0x1fe80000
++#define LOONGSON_PCICFG_SIZE 0x00000800 /* 2K */
++#define LOONGSON_PCICFG_TOP (LOONGSON_PCICFG_BASE+LOONGSON_PCICFG_SIZE-1)
++#define LOONGSON_PCIIO_BASE 0x1fd00000
++#define LOONGSON_PCIIO_SIZE 0x00100000 /* 1M */
++#define LOONGSON_PCIIO_TOP (LOONGSON_PCIIO_BASE+LOONGSON_PCIIO_SIZE-1)
++
++/* Loongson Register Bases */
++
++#define LOONGSON_PCICONFIGBASE 0x00
++#define LOONGSON_REGBASE 0x100
++
++/* PCI Configuration Registers */
++
++#define LOONGSON_PCI_REG(x) LOONGSON_REG(LOONGSON_PCICONFIGBASE + (x))
++#define LOONGSON_PCIDID LOONGSON_PCI_REG(0x00)
++#define LOONGSON_PCICMD LOONGSON_PCI_REG(0x04)
++#define LOONGSON_PCICLASS LOONGSON_PCI_REG(0x08)
++#define LOONGSON_PCILTIMER LOONGSON_PCI_REG(0x0c)
++#define LOONGSON_PCIBASE0 LOONGSON_PCI_REG(0x10)
++#define LOONGSON_PCIBASE1 LOONGSON_PCI_REG(0x14)
++#define LOONGSON_PCIBASE2 LOONGSON_PCI_REG(0x18)
++#define LOONGSON_PCIBASE3 LOONGSON_PCI_REG(0x1c)
++#define LOONGSON_PCIBASE4 LOONGSON_PCI_REG(0x20)
++#define LOONGSON_PCIEXPRBASE LOONGSON_PCI_REG(0x30)
++#define LOONGSON_PCIINT LOONGSON_PCI_REG(0x3c)
++
++#define LOONGSON_PCI_ISR4C LOONGSON_PCI_REG(0x4c)
++
++#define LOONGSON_PCICMD_PERR_CLR 0x80000000
++#define LOONGSON_PCICMD_SERR_CLR 0x40000000
++#define LOONGSON_PCICMD_MABORT_CLR 0x20000000
++#define LOONGSON_PCICMD_MTABORT_CLR 0x10000000
++#define LOONGSON_PCICMD_TABORT_CLR 0x08000000
++#define LOONGSON_PCICMD_MPERR_CLR 0x01000000
++#define LOONGSON_PCICMD_PERRRESPEN 0x00000040
++#define LOONGSON_PCICMD_ASTEPEN 0x00000080
++#define LOONGSON_PCICMD_SERREN 0x00000100
++#define LOONGSON_PCILTIMER_BUSLATENCY 0x0000ff00
++#define LOONGSON_PCILTIMER_BUSLATENCY_SHIFT 8
++
++/* Loongson h/w Configuration */
++
++#define LOONGSON_GENCFG_OFFSET 0x4
++#define LOONGSON_GENCFG LOONGSON_REG(LOONGSON_REGBASE + LOONGSON_GENCFG_OFFSET)
++
++#define LOONGSON_GENCFG_DEBUGMODE 0x00000001
++#define LOONGSON_GENCFG_SNOOPEN 0x00000002
++#define LOONGSON_GENCFG_CPUSELFRESET 0x00000004
++
++#define LOONGSON_GENCFG_FORCE_IRQA 0x00000008
++#define LOONGSON_GENCFG_IRQA_ISOUT 0x00000010
++#define LOONGSON_GENCFG_IRQA_FROM_INT1 0x00000020
++#define LOONGSON_GENCFG_BYTESWAP 0x00000040
++
++#define LOONGSON_GENCFG_UNCACHED 0x00000080
++#define LOONGSON_GENCFG_PREFETCHEN 0x00000100
++#define LOONGSON_GENCFG_WBEHINDEN 0x00000200
++#define LOONGSON_GENCFG_CACHEALG 0x00000c00
++#define LOONGSON_GENCFG_CACHEALG_SHIFT 10
++#define LOONGSON_GENCFG_PCIQUEUE 0x00001000
++#define LOONGSON_GENCFG_CACHESTOP 0x00002000
++#define LOONGSON_GENCFG_MSTRBYTESWAP 0x00004000
++#define LOONGSON_GENCFG_BUSERREN 0x00008000
++#define LOONGSON_GENCFG_NORETRYTIMEOUT 0x00010000
++#define LOONGSON_GENCFG_SHORTCOPYTIMEOUT 0x00020000
++
++/* PCI address map control */
++
++#define LOONGSON_PCIMAP LOONGSON_REG(LOONGSON_REGBASE + 0x10)
++#define LOONGSON_PCIMEMBASECFG LOONGSON_REG(LOONGSON_REGBASE + 0x14)
++#define LOONGSON_PCIMAP_CFG LOONGSON_REG(LOONGSON_REGBASE + 0x18)
++
++/* GPIO Regs - r/w */
++
++#define LOONGSON_GPIODATA LOONGSON_REG(LOONGSON_REGBASE + 0x1c)
++#define LOONGSON_GPIOIE LOONGSON_REG(LOONGSON_REGBASE + 0x20)
++
++/* ICU Configuration Regs - r/w */
++
++#define LOONGSON_INTEDGE LOONGSON_REG(LOONGSON_REGBASE + 0x24)
++#define LOONGSON_INTSTEER LOONGSON_REG(LOONGSON_REGBASE + 0x28)
++#define LOONGSON_INTPOL LOONGSON_REG(LOONGSON_REGBASE + 0x2c)
++
++/* ICU Enable Regs - IntEn & IntISR are r/o. */
++
++#define LOONGSON_INTENSET LOONGSON_REG(LOONGSON_REGBASE + 0x30)
++#define LOONGSON_INTENCLR LOONGSON_REG(LOONGSON_REGBASE + 0x34)
++#define LOONGSON_INTEN LOONGSON_REG(LOONGSON_REGBASE + 0x38)
++#define LOONGSON_INTISR LOONGSON_REG(LOONGSON_REGBASE + 0x3c)
++
++/* ICU */
++#define LOONGSON_ICU_MBOXES 0x0000000f
++#define LOONGSON_ICU_MBOXES_SHIFT 0
++#define LOONGSON_ICU_DMARDY 0x00000010
++#define LOONGSON_ICU_DMAEMPTY 0x00000020
++#define LOONGSON_ICU_COPYRDY 0x00000040
++#define LOONGSON_ICU_COPYEMPTY 0x00000080
++#define LOONGSON_ICU_COPYERR 0x00000100
++#define LOONGSON_ICU_PCIIRQ 0x00000200
++#define LOONGSON_ICU_MASTERERR 0x00000400
++#define LOONGSON_ICU_SYSTEMERR 0x00000800
++#define LOONGSON_ICU_DRAMPERR 0x00001000
++#define LOONGSON_ICU_RETRYERR 0x00002000
++#define LOONGSON_ICU_GPIOS 0x01ff0000
++#define LOONGSON_ICU_GPIOS_SHIFT 16
++#define LOONGSON_ICU_GPINS 0x7e000000
++#define LOONGSON_ICU_GPINS_SHIFT 25
++#define LOONGSON_ICU_MBOX(N) (1<<(LOONGSON_ICU_MBOXES_SHIFT+(N)))
++#define LOONGSON_ICU_GPIO(N) (1<<(LOONGSON_ICU_GPIOS_SHIFT+(N)))
++#define LOONGSON_ICU_GPIN(N) (1<<(LOONGSON_ICU_GPINS_SHIFT+(N)))
++
++/* PCI prefetch window base & mask */
++
++#define LOONGSON_MEM_WIN_BASE_L LOONGSON_REG(LOONGSON_REGBASE + 0x40)
++#define LOONGSON_MEM_WIN_BASE_H LOONGSON_REG(LOONGSON_REGBASE + 0x44)
++#define LOONGSON_MEM_WIN_MASK_L LOONGSON_REG(LOONGSON_REGBASE + 0x48)
++#define LOONGSON_MEM_WIN_MASK_H LOONGSON_REG(LOONGSON_REGBASE + 0x4c)
++
++/* PCI_Hit*_Sel_* */
++
++#define LOONGSON_PCI_HIT0_SEL_L LOONGSON_REG(LOONGSON_REGBASE + 0x50)
++#define LOONGSON_PCI_HIT0_SEL_H LOONGSON_REG(LOONGSON_REGBASE + 0x54)
++#define LOONGSON_PCI_HIT1_SEL_L LOONGSON_REG(LOONGSON_REGBASE + 0x58)
++#define LOONGSON_PCI_HIT1_SEL_H LOONGSON_REG(LOONGSON_REGBASE + 0x5c)
++#define LOONGSON_PCI_HIT2_SEL_L LOONGSON_REG(LOONGSON_REGBASE + 0x60)
++#define LOONGSON_PCI_HIT2_SEL_H LOONGSON_REG(LOONGSON_REGBASE + 0x64)
++
++/* PXArb Config & Status */
++
++#define LOONGSON_PXARB_CFG LOONGSON_REG(LOONGSON_REGBASE + 0x68)
++#define LOONGSON_PXARB_STATUS LOONGSON_REG(LOONGSON_REGBASE + 0x6c)
++
++/* Chip Config */
++#define LOONGSON_CHIPCFG0 LOONGSON_REG(LOONGSON_REGBASE + 0x80)
++
++/* pcimap */
++
++#define LOONGSON_PCIMAP_PCIMAP_LO0 0x0000003f
++#define LOONGSON_PCIMAP_PCIMAP_LO0_SHIFT 0
++#define LOONGSON_PCIMAP_PCIMAP_LO1 0x00000fc0
++#define LOONGSON_PCIMAP_PCIMAP_LO1_SHIFT 6
++#define LOONGSON_PCIMAP_PCIMAP_LO2 0x0003f000
++#define LOONGSON_PCIMAP_PCIMAP_LO2_SHIFT 12
++#define LOONGSON_PCIMAP_PCIMAP_2 0x00040000
++#define LOONGSON_PCIMAP_WIN(WIN, ADDR) \
++ ((((ADDR)>>26) & LOONGSON_PCIMAP_PCIMAP_LO0) << ((WIN)*6))
++
++/*
++ * address windows configuration module
++ *
++ * loongson2e do not have this module
++ */
++#if defined(CONFIG_CPU_LOONGSON2F) && defined(CONFIG_64BIT)
++
++/* address window config module base address */
++#define LOONGSON_ADDRWINCFG_BASE 0x3ff00000ul
++#define LOONGSON_ADDRWINCFG_SIZE 0x180
++
++extern unsigned long _loongson_addrwincfg_base;
++#define LOONGSON_ADDRWINCFG(offset) \
++ (*(u64 *)(_loongson_addrwincfg_base + (offset)))
++
++#define CPU_WIN0_BASE LOONGSON_ADDRWINCFG(0x00)
++#define CPU_WIN1_BASE LOONGSON_ADDRWINCFG(0x08)
++#define CPU_WIN2_BASE LOONGSON_ADDRWINCFG(0x10)
++#define CPU_WIN3_BASE LOONGSON_ADDRWINCFG(0x18)
++
++#define CPU_WIN0_MASK LOONGSON_ADDRWINCFG(0x20)
++#define CPU_WIN1_MASK LOONGSON_ADDRWINCFG(0x28)
++#define CPU_WIN2_MASK LOONGSON_ADDRWINCFG(0x30)
++#define CPU_WIN3_MASK LOONGSON_ADDRWINCFG(0x38)
++
++#define CPU_WIN0_MMAP LOONGSON_ADDRWINCFG(0x40)
++#define CPU_WIN1_MMAP LOONGSON_ADDRWINCFG(0x48)
++#define CPU_WIN2_MMAP LOONGSON_ADDRWINCFG(0x50)
++#define CPU_WIN3_MMAP LOONGSON_ADDRWINCFG(0x58)
++
++#define PCIDMA_WIN0_BASE LOONGSON_ADDRWINCFG(0x60)
++#define PCIDMA_WIN1_BASE LOONGSON_ADDRWINCFG(0x68)
++#define PCIDMA_WIN2_BASE LOONGSON_ADDRWINCFG(0x70)
++#define PCIDMA_WIN3_BASE LOONGSON_ADDRWINCFG(0x78)
++
++#define PCIDMA_WIN0_MASK LOONGSON_ADDRWINCFG(0x80)
++#define PCIDMA_WIN1_MASK LOONGSON_ADDRWINCFG(0x88)
++#define PCIDMA_WIN2_MASK LOONGSON_ADDRWINCFG(0x90)
++#define PCIDMA_WIN3_MASK LOONGSON_ADDRWINCFG(0x98)
++
++#define PCIDMA_WIN0_MMAP LOONGSON_ADDRWINCFG(0xa0)
++#define PCIDMA_WIN1_MMAP LOONGSON_ADDRWINCFG(0xa8)
++#define PCIDMA_WIN2_MMAP LOONGSON_ADDRWINCFG(0xb0)
++#define PCIDMA_WIN3_MMAP LOONGSON_ADDRWINCFG(0xb8)
++
++#define ADDRWIN_WIN0 0
++#define ADDRWIN_WIN1 1
++#define ADDRWIN_WIN2 2
++#define ADDRWIN_WIN3 3
++
++#define ADDRWIN_MAP_DST_DDR 0
++#define ADDRWIN_MAP_DST_PCI 1
++#define ADDRWIN_MAP_DST_LIO 1
++
++/*
++ * s: CPU, PCIDMA
++ * d: DDR, PCI, LIO
++ * win: 0, 1, 2, 3
++ * src: map source
++ * dst: map destination
++ * size: ~mask + 1
++ */
++#define LOONGSON_ADDRWIN_CFG(s, d, w, src, dst, size) do {\
++ s##_WIN##w##_BASE = (src); \
++ s##_WIN##w##_MMAP = (src) | ADDRWIN_MAP_DST_##d; \
++ s##_WIN##w##_MASK = ~(size-1); \
++} while (0)
++
++#define LOONGSON_ADDRWIN_CPUTOPCI(win, src, dst, size) \
++ LOONGSON_ADDRWIN_CFG(CPU, PCI, win, src, dst, size)
++#define LOONGSON_ADDRWIN_CPUTODDR(win, src, dst, size) \
++ LOONGSON_ADDRWIN_CFG(CPU, DDR, win, src, dst, size)
++#define LOONGSON_ADDRWIN_PCITODDR(win, src, dst, size) \
++ LOONGSON_ADDRWIN_CFG(PCIDMA, DDR, win, src, dst, size)
++
++#endif /* ! CONFIG_CPU_LOONGSON2F && CONFIG_64BIT */
++
++#endif /* __LOONGSON_H */
++
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/machine.h rt4ls/arch/mips/include/asm/mach-loongson/machine.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/machine.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/machine.h 2009-06-12 16:27:08.510427596 +0200
+@@ -0,0 +1,76 @@
++/*
++ * board-specific header file
++ *
++ * Copyright (c) 2009 Wu Zhangjin <wuzj@lemote.com>
++ *
++ * Copyright (C) 2009 Zhang Le
++ *
++ * 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 __MACHINE_H
++#define __MACHINE_H
++
++#ifdef CONFIG_LEMOTE_FULOONG2E
++
++#define MACHTYPE MACH_LEMOTE_FL2E
++
++#define LOONGSON_UART_BASE (LOONGSON_PCIIO_BASE + 0x3f8)
++#define LOONGSON_UART_BAUD 1843200
++#define LOONGSON_UART_IOTYPE UPIO_PORT
++
++#define LOONGSON_NORTH_BRIDGE_IRQ (MIPS_CPU_IRQ_BASE + 2)
++#define LOONGSON_UART_IRQ (MIPS_CPU_IRQ_BASE + 4)
++#define LOONGSON_SOUTH_BRIDGE_IRQ (MIPS_CPU_IRQ_BASE + 5)
++#define LOONGSON_TIMER_IRQ (MIPS_CPU_IRQ_BASE + 7)
++#define LOONGSON_DMATIMEOUT_IRQ (LOONGSON_IRQ_BASE + 10)
++
++#elif defined(CONFIG_LEMOTE_FULOONG2F)
++
++#define MACHTYPE MACH_LEMOTE_FL2F
++
++#define LOONGSON_UART_BASE (LOONGSON_PCIIO_BASE + 0x2f8)
++#define LOONGSON_UART_BAUD 1843200
++#define LOONGSON_UART_IOTYPE UPIO_PORT
++
++#else /* CONFIG_CPU_YEELOONG2F */
++
++#define MACHTYPE MACH_LEMOTE_YL2F89
++
++/* yeeloong use the CPU serial port of Loongson2F */
++#define LOONGSON_UART_BASE (LOONGSON_LIO1_BASE + 0x3f8)
++#define LOONGSON_UART_BAUD 3686400
++#define LOONGSON_UART_IOTYPE UPIO_MEM
++
++#endif /* !CONFIG_LEMOTE_FULOONG2E */
++
++/* fuloong2f and yeeloong2f have the same IRQ control interface */
++#if defined(CONFIG_LEMOTE_FULOONG2F) || defined(CONFIG_LEMOTE_YEELOONG2F)
++
++#define LOONGSON_TIMER_IRQ (MIPS_CPU_IRQ_BASE + 7) /* cpu timer */
++#define LOONGSON_NORTH_BRIDGE_IRQ (MIPS_CPU_IRQ_BASE + 6) /* bonito */
++#define LOONGSON_UART_IRQ (MIPS_CPU_IRQ_BASE + 3) /* cpu serial port */
++#define LOONGSON_SOUTH_BRIDGE_IRQ (MIPS_CPU_IRQ_BASE + 2) /* i8259 */
++
++#define LOONGSON_INT_BIT_GPIO1 (1 << 1)
++#define LOONGSON_INT_BIT_GPIO2 (1 << 2)
++#define LOONGSON_INT_BIT_GPIO3 (1 << 3)
++#define LOONGSON_INT_BIT_PCI_INTA (1 << 4)
++#define LOONGSON_INT_BIT_PCI_INTB (1 << 5)
++#define LOONGSON_INT_BIT_PCI_INTC (1 << 6)
++#define LOONGSON_INT_BIT_PCI_INTD (1 << 7)
++#define LOONGSON_INT_BIT_PCI_PERR (1 << 8)
++#define LOONGSON_INT_BIT_PCI_SERR (1 << 9)
++#define LOONGSON_INT_BIT_DDR (1 << 10)
++#define LOONGSON_INT_BIT_INT0 (1 << 11)
++#define LOONGSON_INT_BIT_INT1 (1 << 12)
++#define LOONGSON_INT_BIT_INT2 (1 << 13)
++#define LOONGSON_INT_BIT_INT3 (1 << 14)
++
++#endif
++
++#endif /* ! __MACHINE_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/mc146818rtc.h rt4ls/arch/mips/include/asm/mach-loongson/mc146818rtc.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/mc146818rtc.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/mc146818rtc.h 2009-06-12 16:27:08.510427596 +0200
+@@ -0,0 +1,36 @@
++/*
++ * 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.
++ *
++ * Copyright (C) 1998, 2001, 03, 07 by Ralf Baechle (ralf@linux-mips.org)
++ *
++ * RTC routines for PC style attached Dallas chip.
++ */
++#ifndef __ASM_MACH_LOONGSON_MC146818RTC_H
++#define __ASM_MACH_LOONGSON_MC146818RTC_H
++
++#include <linux/io.h>
++
++#define RTC_PORT(x) (0x70 + (x))
++#define RTC_IRQ 8
++
++static inline unsigned char CMOS_READ(unsigned long addr)
++{
++ outb_p(addr, RTC_PORT(0));
++ return inb_p(RTC_PORT(1));
++}
++
++static inline void CMOS_WRITE(unsigned char data, unsigned long addr)
++{
++ outb_p(addr, RTC_PORT(0));
++ outb_p(data, RTC_PORT(1));
++}
++
++#define RTC_ALWAYS_BCD 0
++
++#ifndef mc146818_decode_year
++#define mc146818_decode_year(year) ((year) < 70 ? (year) + 2000 : (year) + 1970)
++#endif
++
++#endif /* __ASM_MACH_LOONGSON_MC146818RTC_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/mem.h rt4ls/arch/mips/include/asm/mach-loongson/mem.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/mem.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/mem.h 2009-06-12 16:27:08.510427596 +0200
+@@ -0,0 +1,31 @@
++#ifndef __MEM_H
++#define __MEM_H
++
++/*
++ * high memory space
++ *
++ * in loongson2e, starts from 512M
++ * in loongson2f, starts from 2G + 256M
++ */
++#ifdef CONFIG_CPU_LOONGSON2E
++#define LOONGSON_HIGHMEM_START 0x20000000
++#else
++#define LOONGSON_HIGHMEM_START 0x90000000
++#endif
++
++/*
++ * the peripheral registers(MMIO):
++ *
++ * On the Lemote Loongson 2e system, reside between 0x1000:0000 and 0x2000:0000.
++ * On the Lemote Loongson 2f system, reside between 0x1000:0000 and 0x8000:0000.
++ */
++
++#define LOONGSON_MMIO_MEM_START 0x10000000
++
++#ifdef CONFIG_CPU_LOONGSON2E
++#define LOONGSON_MMIO_MEM_END 0x20000000
++#else
++#define LOONGSON_MMIO_MEM_END 0x80000000
++#endif
++
++#endif /* !__MEM_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/pci.h rt4ls/arch/mips/include/asm/mach-loongson/pci.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/pci.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/pci.h 2009-06-12 16:27:08.514429781 +0200
+@@ -0,0 +1,59 @@
++/*
++ * Copyright (c) 2008 Zhang Le <r0bertz@gentoo.org>
++ * Copyright (c) 2009 Wu Zhangjin <wuzj@lemote.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., 675 Mass Ave, Cambridge, MA
++ * 02139, USA.
++ */
++
++#ifndef _LOONGSON_PCI_H_
++#define _LOONGSON_PCI_H_
++
++extern struct pci_ops loongson_pci_ops;
++
++/* this is an offset from mips_io_port_base */
++#define LOONGSON_PCI_IO_START 0x00004000UL
++
++#if defined(CONFIG_CPU_LOONGSON2F) && defined(CONFIG_64BIT)
++
++/*
++ * we use address window2 to map cpu address space to pci space
++ * window2: cpu [1G, 2G] -> pci [1G, 2G]
++ * why not use window 0 & 1? because they are used by cpu when booting.
++ * window0: cpu [0, 256M] -> ddr [0, 256M]
++ * window1: cpu [256M, 512M] -> pci [256M, 512M]
++ */
++
++/* the smallest LOONGSON_CPU_MEM_SRC can be 512M */
++#define LOONGSON_CPU_MEM_SRC 0x40000000ul /* 1G */
++#define LOONGSON_PCI_MEM_DST LOONGSON_CPU_MEM_SRC
++
++#define LOONGSON_PCI_MEM_START LOONGSON_PCI_MEM_DST
++#define LOONGSON_PCI_MEM_END (0x80000000ul-1) /* 2G */
++
++#define MMAP_CPUTOPCI_SIZE (LOONGSON_PCI_MEM_END - \
++ LOONGSON_PCI_MEM_START + 1)
++
++#else /* loongson2f/32bit & loongson2e */
++
++#define LOONGSON_PCI_MEM_START 0x14000000UL
++#define LOONGSON_PCI_MEM_END 0x1fffffffUL
++
++#endif /* !(defined(CONFIG_CPU_LOONGSON2F) && defined(CONFIG_64BIT))*/
++
++
++#endif /* !_LOONGSON_PCI_H_ */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mach-loongson/war.h rt4ls/arch/mips/include/asm/mach-loongson/war.h
+--- linux-2.6.30/arch/mips/include/asm/mach-loongson/war.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/include/asm/mach-loongson/war.h 2009-06-12 16:27:08.514429781 +0200
+@@ -0,0 +1,25 @@
++/*
++ * 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.
++ *
++ * Copyright (C) 2002, 2004, 2007 by Ralf Baechle <ralf@linux-mips.org>
++ */
++#ifndef __ASM_MIPS_MACH_LOONGSON_WAR_H
++#define __ASM_MIPS_MACH_LOONGSON_WAR_H
++
++#define R4600_V1_INDEX_ICACHEOP_WAR 0
++#define R4600_V1_HIT_CACHEOP_WAR 0
++#define R4600_V2_HIT_CACHEOP_WAR 0
++#define R5432_CP0_INTERRUPT_WAR 0
++#define BCM1250_M3_WAR 0
++#define SIBYTE_1956_WAR 0
++#define MIPS4K_ICACHE_REFILL_WAR 0
++#define MIPS_CACHE_SYNC_WAR 0
++#define TX49XX_ICACHE_INDEX_INV_WAR 0
++#define RM9000_CDEX_SMP_WAR 0
++#define ICACHE_REFILLS_WORKAROUND_WAR 0
++#define R10000_LLSC_WAR 0
++#define MIPS34K_MISSED_ITLB_WAR 0
++
++#endif /* __ASM_MIPS_MACH_LOONGSON_WAR_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/mips-boards/bonito64.h rt4ls/arch/mips/include/asm/mips-boards/bonito64.h
+--- linux-2.6.30/arch/mips/include/asm/mips-boards/bonito64.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/mips-boards/bonito64.h 2009-06-12 16:27:08.574431556 +0200
+@@ -26,11 +26,6 @@
+ /* offsets from base register */
+ #define BONITO(x) (x)
+
+-#elif defined(CONFIG_LEMOTE_FULONG)
+-
+-#define BONITO(x) (*(volatile u32 *)((char *)CKSEG1ADDR(BONITO_REG_BASE) + (x)))
+-#define BONITO_IRQ_BASE 32
+-
+ #else
+
+ /*
+diff -Nur linux-2.6.30/arch/mips/include/asm/page.h rt4ls/arch/mips/include/asm/page.h
+--- linux-2.6.30/arch/mips/include/asm/page.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/page.h 2009-06-12 16:27:08.602426182 +0200
+@@ -179,8 +179,9 @@
+
+ #endif
+
+-#define virt_to_page(kaddr) pfn_to_page(PFN_DOWN(virt_to_phys(kaddr)))
+-#define virt_addr_valid(kaddr) pfn_valid(PFN_DOWN(virt_to_phys(kaddr)))
++#define virt_to_page(kaddr) \
++ pfn_to_page(PFN_DOWN(virt_to_phys((void *)kaddr)))
++#define virt_addr_valid(kaddr) pfn_valid(PFN_DOWN(virt_to_phys((void *)kaddr)))
+
+ #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \
+ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
+diff -Nur linux-2.6.30/arch/mips/include/asm/pci.h rt4ls/arch/mips/include/asm/pci.h
+--- linux-2.6.30/arch/mips/include/asm/pci.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/pci.h 2009-06-12 16:27:08.606433396 +0200
+@@ -56,7 +56,7 @@
+ /*
+ * board supplied pci irq fixup routine
+ */
+-extern int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin);
++extern int pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin);
+
+
+ /* Can be used to override the logic in pci_scan_bus for skipping
+diff -Nur linux-2.6.30/arch/mips/include/asm/pgtable.h rt4ls/arch/mips/include/asm/pgtable.h
+--- linux-2.6.30/arch/mips/include/asm/pgtable.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/pgtable.h 2009-06-12 16:27:08.610435582 +0200
+@@ -370,6 +370,19 @@
+ #include <asm-generic/pgtable.h>
+
+ /*
++ * uncache accelerate for video memory access
++ */
++#ifdef CONFIG_LOONGSON2F
++#define __HAVE_PHYS_MEM_ACCESS_PROT
++
++struct file;
++pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
++ unsigned long size, pgprot_t vma_prot);
++int phys_mem_access_prot_allowed(struct file *file, unsigned long pfn,
++ unsigned long size, pgprot_t *vma_prot);
++#endif
++
++/*
+ * We provide our own get_unmapped area to cope with the virtual aliasing
+ * constraints placed on us by the cache architecture.
+ */
+diff -Nur linux-2.6.30/arch/mips/include/asm/stackframe.h rt4ls/arch/mips/include/asm/stackframe.h
+--- linux-2.6.30/arch/mips/include/asm/stackframe.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/stackframe.h 2009-06-12 16:27:08.674441225 +0200
+@@ -117,6 +117,20 @@
+ .endm
+ #else
+ .macro get_saved_sp /* Uniprocessor variation */
++#ifdef CONFIG_CPU_LOONGSON2
++ move k0, ra
++ jal 2008f
++ nop
++2008 : jal 2008f
++ nop
++2008 : jal 2008f
++ nop
++2008 : jal 2008f
++ nop
++2008 : 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.30/arch/mips/include/asm/suspend.h rt4ls/arch/mips/include/asm/suspend.h
+--- linux-2.6.30/arch/mips/include/asm/suspend.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/suspend.h 2009-06-12 16:27:08.678439779 +0200
+@@ -1,6 +1,9 @@
+ #ifndef __ASM_SUSPEND_H
+ #define __ASM_SUSPEND_H
+
+-/* Somewhen... Maybe :-) */
++static inline int arch_prepare_suspend(void) { return 0; }
++
++/* References to section boundaries */
++extern const void __nosave_begin, __nosave_end;
+
+ #endif /* __ASM_SUSPEND_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/txx9/generic.h rt4ls/arch/mips/include/asm/txx9/generic.h
+--- linux-2.6.30/arch/mips/include/asm/txx9/generic.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/txx9/generic.h 2009-06-12 16:27:08.686439682 +0200
+@@ -37,7 +37,7 @@
+ void (*arch_init)(void);
+ void (*device_init)(void);
+ #ifdef CONFIG_PCI
+- int (*pci_map_irq)(const struct pci_dev *dev, u8 slot, u8 pin);
++ int (*pci_map_irq)(struct pci_dev *dev, u8 slot, u8 pin);
+ #endif
+ };
+ extern struct txx9_board_vec *txx9_board_vec;
+diff -Nur linux-2.6.30/arch/mips/include/asm/txx9/jmr3927.h rt4ls/arch/mips/include/asm/txx9/jmr3927.h
+--- linux-2.6.30/arch/mips/include/asm/txx9/jmr3927.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/txx9/jmr3927.h 2009-06-12 16:27:08.686439682 +0200
+@@ -175,6 +175,6 @@
+ void jmr3927_prom_init(void);
+ void jmr3927_irq_setup(void);
+ struct pci_dev;
+-int jmr3927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin);
++int jmr3927_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin);
+
+ #endif /* __ASM_TXX9_JMR3927_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/txx9/rbtx4927.h rt4ls/arch/mips/include/asm/txx9/rbtx4927.h
+--- linux-2.6.30/arch/mips/include/asm/txx9/rbtx4927.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/txx9/rbtx4927.h 2009-06-12 16:27:08.690440751 +0200
+@@ -87,6 +87,6 @@
+ void rbtx4927_prom_init(void);
+ void rbtx4927_irq_setup(void);
+ struct pci_dev;
+-int rbtx4927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin);
++int rbtx4927_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin);
+
+ #endif /* __ASM_TXX9_RBTX4927_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/txx9/rbtx4938.h rt4ls/arch/mips/include/asm/txx9/rbtx4938.h
+--- linux-2.6.30/arch/mips/include/asm/txx9/rbtx4938.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/txx9/rbtx4938.h 2009-06-12 16:27:08.690440751 +0200
+@@ -140,6 +140,6 @@
+ void rbtx4938_prom_init(void);
+ void rbtx4938_irq_setup(void);
+ struct pci_dev;
+-int rbtx4938_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin);
++int rbtx4938_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin);
+
+ #endif /* __ASM_TXX9_RBTX4938_H */
+diff -Nur linux-2.6.30/arch/mips/include/asm/txx9/tx4938.h rt4ls/arch/mips/include/asm/txx9/tx4938.h
+--- linux-2.6.30/arch/mips/include/asm/txx9/tx4938.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/txx9/tx4938.h 2009-06-12 16:27:08.690440751 +0200
+@@ -287,7 +287,7 @@
+ void tx4938_report_pci1clk(void);
+ int tx4938_pciclk66_setup(void);
+ struct pci_dev;
+-int tx4938_pcic1_map_irq(const struct pci_dev *dev, u8 slot);
++int tx4938_pcic1_map_irq(struct pci_dev *dev, u8 slot);
+ void tx4938_setup_pcierr_irq(void);
+ void tx4938_irq_init(void);
+ void tx4938_mtd_init(int ch);
+diff -Nur linux-2.6.30/arch/mips/include/asm/txx9/tx4939.h rt4ls/arch/mips/include/asm/txx9/tx4939.h
+--- linux-2.6.30/arch/mips/include/asm/txx9/tx4939.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/include/asm/txx9/tx4939.h 2009-06-12 16:27:08.694430645 +0200
+@@ -534,8 +534,8 @@
+ int tx4939_report_pciclk(void);
+ void tx4939_report_pci1clk(void);
+ struct pci_dev;
+-int tx4939_pcic1_map_irq(const struct pci_dev *dev, u8 slot);
+-int tx4939_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin);
++int tx4939_pcic1_map_irq(struct pci_dev *dev, u8 slot);
++int tx4939_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin);
+ void tx4939_setup_pcierr_irq(void);
+ void tx4939_irq_init(void);
+ int tx4939_irq(void);
+diff -Nur linux-2.6.30/arch/mips/kernel/Makefile rt4ls/arch/mips/kernel/Makefile
+--- linux-2.6.30/arch/mips/kernel/Makefile 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/kernel/Makefile 2009-06-12 16:27:08.710440787 +0200
+@@ -73,6 +73,7 @@
+ obj-$(CONFIG_MIPS32_COMPAT) += linux32.o ptrace32.o signal32.o
+ obj-$(CONFIG_MIPS32_N32) += binfmt_elfn32.o scall64-n32.o signal_n32.o
+ obj-$(CONFIG_MIPS32_O32) += binfmt_elfo32.o scall64-o32.o
++obj-$(CONFIG_LOONGSON2F_CPU_FREQ) += loongson2f_freq.o
+
+ obj-$(CONFIG_KGDB) += kgdb.o
+ obj-$(CONFIG_PROC_FS) += proc.o
+diff -Nur linux-2.6.30/arch/mips/kernel/asm-offsets.c rt4ls/arch/mips/kernel/asm-offsets.c
+--- linux-2.6.30/arch/mips/kernel/asm-offsets.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/kernel/asm-offsets.c 2009-06-12 16:27:08.710440787 +0200
+@@ -14,6 +14,7 @@
+ #include <linux/mm.h>
+ #include <linux/interrupt.h>
+ #include <linux/kbuild.h>
++#include <linux/suspend.h>
+ #include <asm/ptrace.h>
+ #include <asm/processor.h>
+
+@@ -326,3 +327,15 @@
+ BLANK();
+ }
+ #endif
++
++#ifdef CONFIG_HIBERNATION
++void output_pbe_defines(void)
++{
++ COMMENT(" Linux struct pbe offsets. ");
++ OFFSET(PBE_ADDRESS, pbe, address);
++ OFFSET(PBE_ORIG_ADDRESS, pbe, orig_address);
++ OFFSET(PBE_NEXT, pbe, next);
++ DEFINE(PBE_SIZE, sizeof(struct pbe));
++ BLANK();
++}
++#endif
+diff -Nur linux-2.6.30/arch/mips/kernel/i8259.c rt4ls/arch/mips/kernel/i8259.c
+--- linux-2.6.30/arch/mips/kernel/i8259.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/kernel/i8259.c 2009-06-12 16:27:08.722442317 +0200
+@@ -177,10 +177,12 @@
+ outb(cached_slave_mask, PIC_SLAVE_IMR);
+ outb(0x60+(irq&7), PIC_SLAVE_CMD);/* 'Specific EOI' to slave */
+ outb(0x60+PIC_CASCADE_IR, PIC_MASTER_CMD); /* 'Specific EOI' to master-IRQ2 */
++ inb(PIC_MASTER_CMD); /* flush posted write */
+ } else {
+ inb(PIC_MASTER_IMR); /* DUMMY - (do we need this?) */
+ outb(cached_master_mask, PIC_MASTER_IMR);
+ outb(0x60+irq, PIC_MASTER_CMD); /* 'Specific EOI to master */
++ inb(PIC_MASTER_CMD); /* flush posted write */
+ }
+ smtc_im_ack_irq(irq);
+ spin_unlock_irqrestore(&i8259A_lock, flags);
+diff -Nur linux-2.6.30/arch/mips/kernel/loongson2f_freq.c rt4ls/arch/mips/kernel/loongson2f_freq.c
+--- linux-2.6.30/arch/mips/kernel/loongson2f_freq.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/kernel/loongson2f_freq.c 2009-06-12 16:27:08.726441989 +0200
+@@ -0,0 +1,216 @@
++/*
++ * arch/mips/kernel/cpufreq.c
++ *
++ * cpufreq driver for the loongson-2f processors.
++ *
++ * Copyright (C) 2006 - 2008 Lemote Inc. & Insititute of Computing Technology
++ * Author: Yanhua, yanh@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.
++ */
++#include <linux/types.h>
++#include <linux/cpufreq.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/err.h>
++#include <linux/cpumask.h>
++#include <linux/smp.h>
++#include <linux/sched.h> /* set_cpus_allowed() */
++#include <linux/clk.h>
++#include <linux/delay.h>
++
++#include <loongson.h>
++#include <clock.h>
++
++static uint nowait;
++
++static struct clk *cpuclk;
++
++static void (*saved_cpu_wait) (void);
++
++static int loongson2f_cpu_freq_notifier(struct notifier_block *nb,
++ unsigned long val, void *data);
++
++static struct notifier_block loongson2f_cpufreq_notifier_block = {
++ .notifier_call = loongson2f_cpu_freq_notifier
++};
++
++static int loongson2f_cpu_freq_notifier(struct notifier_block *nb,
++ unsigned long val, void *data)
++{
++ if (val == CPUFREQ_POSTCHANGE)
++ current_cpu_data.udelay_val = loops_per_jiffy;
++
++ return 0;
++}
++
++static unsigned int loongson2f_cpufreq_get(unsigned int cpu)
++{
++ return clk_get_rate(cpuclk);
++}
++
++/*
++ * Here we notify other drivers of the proposed change and the final change.
++ */
++static int loongson2f_cpufreq_target(struct cpufreq_policy *policy,
++ unsigned int target_freq,
++ unsigned int relation)
++{
++ unsigned int cpu = policy->cpu;
++ unsigned int newstate = 0;
++ cpumask_t cpus_allowed;
++ struct cpufreq_freqs freqs;
++ long freq;
++
++ if (!cpu_online(cpu))
++ return -ENODEV;
++
++ cpus_allowed = current->cpus_allowed;
++ set_cpus_allowed(current, cpumask_of_cpu(cpu));
++
++#ifdef CONFIG_SMP
++ BUG_ON(smp_processor_id() != cpu);
++#endif
++
++ if (cpufreq_frequency_table_target
++ (policy, &loongson2f_clockmod_table[0], target_freq, relation,
++ &newstate))
++ return -EINVAL;
++
++ freq =
++ cpu_clock_freq / 1000 * loongson2f_clockmod_table[newstate].index /
++ 8;
++ if (freq < policy->min || freq > policy->max)
++ return -EINVAL;
++
++ pr_debug("cpufreq: requested frequency %u Hz\n", target_freq * 1000);
++
++ freqs.cpu = cpu;
++ freqs.old = loongson2f_cpufreq_get(cpu);
++ freqs.new = freq;
++ freqs.flags = 0;
++
++ if (freqs.new == freqs.old)
++ return 0;
++
++ /* notifiers */
++ cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
++
++ set_cpus_allowed(current, cpus_allowed);
++
++ /* setting the cpu frequency */
++ clk_set_rate(cpuclk, freq);
++
++ /* notifiers */
++ cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
++
++ pr_debug("cpufreq: set frequency %lu kHz\n", freq);
++
++ return 0;
++}
++
++static int loongson2f_cpufreq_cpu_init(struct cpufreq_policy *policy)
++{
++ int i;
++ int result;
++
++ if (!cpu_online(policy->cpu))
++ return -ENODEV;
++
++ cpuclk = clk_get(NULL, "cpu_clk");
++ if (IS_ERR(cpuclk)) {
++ printk(KERN_ERR "cpufreq: couldn't get CPU clk\n");
++ return PTR_ERR(cpuclk);
++ }
++
++ cpuclk->rate = cpu_clock_freq / 1000;
++ if (!cpuclk->rate)
++ return -EINVAL;
++
++ /* clock table init */
++ for (i = 2;
++ (loongson2f_clockmod_table[i].frequency != CPUFREQ_TABLE_END);
++ i++) {
++ loongson2f_clockmod_table[i].frequency = (cpuclk->rate * i) / 8;
++ }
++
++ policy->cur = loongson2f_cpufreq_get(policy->cpu);
++
++ cpufreq_frequency_table_get_attr(&loongson2f_clockmod_table[0],
++ policy->cpu);
++
++ result =
++ cpufreq_frequency_table_cpuinfo(policy,
++ &loongson2f_clockmod_table[0]);
++ if (result)
++ return result;
++
++ return 0;
++}
++
++static int loongson2f_cpufreq_verify(struct cpufreq_policy *policy)
++{
++ return cpufreq_frequency_table_verify(policy,
++ &loongson2f_clockmod_table[0]);
++}
++
++static int loongson2f_cpufreq_exit(struct cpufreq_policy *policy)
++{
++ clk_put(cpuclk);
++ return 0;
++}
++
++static struct freq_attr *loongson2f_table_attr[] = {
++ &cpufreq_freq_attr_scaling_available_freqs,
++ NULL,
++};
++
++static struct cpufreq_driver loongson2f_cpufreq_driver = {
++ .owner = THIS_MODULE,
++ .name = "loongson2f",
++ .init = loongson2f_cpufreq_cpu_init,
++ .verify = loongson2f_cpufreq_verify,
++ .target = loongson2f_cpufreq_target,
++ .get = loongson2f_cpufreq_get,
++ .exit = loongson2f_cpufreq_exit,
++ .attr = loongson2f_table_attr,
++};
++
++static int __init loongson2f_cpufreq_module_init(void)
++{
++ int result;
++
++ printk(KERN_INFO "cpufreq: Loongson-2F CPU frequency driver.\n");
++ result = cpufreq_register_driver(&loongson2f_cpufreq_driver);
++
++ if (!result && !nowait) {
++ saved_cpu_wait = cpu_wait;
++ cpu_wait = loongson2f_cpu_wait;
++ }
++
++ cpufreq_register_notifier(&loongson2f_cpufreq_notifier_block,
++ CPUFREQ_TRANSITION_NOTIFIER);
++ return result;
++}
++
++static void __exit loongson2f_cpufreq_module_exit(void)
++{
++ if (!nowait && saved_cpu_wait)
++ cpu_wait = saved_cpu_wait;
++ cpufreq_unregister_driver(&loongson2f_cpufreq_driver);
++ cpufreq_unregister_notifier(&loongson2f_cpufreq_notifier_block,
++ CPUFREQ_TRANSITION_NOTIFIER);
++}
++
++module_init(loongson2f_cpufreq_module_init);
++module_exit(loongson2f_cpufreq_module_exit);
++
++module_param(nowait, uint, 0644);
++MODULE_PARM_DESC(nowait, "Disable Loongson-2F specific wait");
++
++MODULE_AUTHOR("Yanhua <yanh@lemote.com>");
++MODULE_DESCRIPTION("cpufreq driver for Loongson2F");
++MODULE_LICENSE("GPL");
+diff -Nur linux-2.6.30/arch/mips/kernel/smtc.c rt4ls/arch/mips/kernel/smtc.c
+--- linux-2.6.30/arch/mips/kernel/smtc.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/kernel/smtc.c 2009-06-12 16:27:08.746436158 +0200
+@@ -924,6 +924,7 @@
+ int irq = MIPS_CPU_IRQ_BASE + 1;
+
+ smtc_ipi_nq(&freeIPIq, pipi);
++
+ switch (type_copy) {
+ case SMTC_CLOCK_TICK:
+ irq_enter();
+diff -Nur linux-2.6.30/arch/mips/lemote/lm2e/Makefile rt4ls/arch/mips/lemote/lm2e/Makefile
+--- linux-2.6.30/arch/mips/lemote/lm2e/Makefile 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/lemote/lm2e/Makefile 1970-01-01 01:00:00.000000000 +0100
+@@ -1,7 +0,0 @@
+-#
+-# Makefile for Lemote Fulong mini-PC board.
+-#
+-
+-obj-y += setup.o prom.o reset.o irq.o pci.o bonito-irq.o dbg_io.o mem.o
+-
+-EXTRA_CFLAGS += -Werror
+diff -Nur linux-2.6.30/arch/mips/lemote/lm2e/bonito-irq.c rt4ls/arch/mips/lemote/lm2e/bonito-irq.c
+--- linux-2.6.30/arch/mips/lemote/lm2e/bonito-irq.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/lemote/lm2e/bonito-irq.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,74 +0,0 @@
+-/*
+- * Copyright 2001 MontaVista Software Inc.
+- * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
+- * Copyright (C) 2000, 2001 Ralf Baechle (ralf@gnu.org)
+- *
+- * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
+- * Author: Fuxin Zhang, zhangfx@lemote.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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+- * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+- *
+- * 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.
+- *
+- */
+-#include <linux/errno.h>
+-#include <linux/init.h>
+-#include <linux/io.h>
+-#include <linux/types.h>
+-#include <linux/interrupt.h>
+-#include <linux/irq.h>
+-
+-#include <asm/mips-boards/bonito64.h>
+-
+-
+-static inline void bonito_irq_enable(unsigned int irq)
+-{
+- BONITO_INTENSET = (1 << (irq - BONITO_IRQ_BASE));
+- mmiowb();
+-}
+-
+-static inline void bonito_irq_disable(unsigned int irq)
+-{
+- BONITO_INTENCLR = (1 << (irq - BONITO_IRQ_BASE));
+- mmiowb();
+-}
+-
+-static struct irq_chip bonito_irq_type = {
+- .name = "bonito_irq",
+- .ack = bonito_irq_disable,
+- .mask = bonito_irq_disable,
+- .mask_ack = bonito_irq_disable,
+- .unmask = bonito_irq_enable,
+-};
+-
+-static struct irqaction dma_timeout_irqaction = {
+- .handler = no_action,
+- .name = "dma_timeout",
+-};
+-
+-void bonito_irq_init(void)
+-{
+- u32 i;
+-
+- for (i = BONITO_IRQ_BASE; i < BONITO_IRQ_BASE + 32; i++) {
+- set_irq_chip_and_handler(i, &bonito_irq_type, handle_level_irq);
+- }
+-
+- setup_irq(BONITO_IRQ_BASE + 10, &dma_timeout_irqaction);
+-}
+diff -Nur linux-2.6.30/arch/mips/lemote/lm2e/dbg_io.c rt4ls/arch/mips/lemote/lm2e/dbg_io.c
+--- linux-2.6.30/arch/mips/lemote/lm2e/dbg_io.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/lemote/lm2e/dbg_io.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,146 +0,0 @@
+-/*
+- * Copyright 2001 MontaVista Software Inc.
+- * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
+- * Copyright (C) 2000, 2001 Ralf Baechle (ralf@gnu.org)
+- *
+- * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
+- * Author: Fuxin Zhang, zhangfx@lemote.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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+- * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+- *
+- * 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.
+- *
+- */
+-
+-#include <linux/io.h>
+-#include <linux/init.h>
+-#include <linux/types.h>
+-
+-#include <asm/serial.h>
+-
+-#define UART16550_BAUD_2400 2400
+-#define UART16550_BAUD_4800 4800
+-#define UART16550_BAUD_9600 9600
+-#define UART16550_BAUD_19200 19200
+-#define UART16550_BAUD_38400 38400
+-#define UART16550_BAUD_57600 57600
+-#define UART16550_BAUD_115200 115200
+-
+-#define UART16550_PARITY_NONE 0
+-#define UART16550_PARITY_ODD 0x08
+-#define UART16550_PARITY_EVEN 0x18
+-#define UART16550_PARITY_MARK 0x28
+-#define UART16550_PARITY_SPACE 0x38
+-
+-#define UART16550_DATA_5BIT 0x0
+-#define UART16550_DATA_6BIT 0x1
+-#define UART16550_DATA_7BIT 0x2
+-#define UART16550_DATA_8BIT 0x3
+-
+-#define UART16550_STOP_1BIT 0x0
+-#define UART16550_STOP_2BIT 0x4
+-
+-/* ----------------------------------------------------- */
+-
+-/* === CONFIG === */
+-#ifdef CONFIG_64BIT
+-#define BASE (0xffffffffbfd003f8)
+-#else
+-#define BASE (0xbfd003f8)
+-#endif
+-
+-#define MAX_BAUD BASE_BAUD
+-/* === END OF CONFIG === */
+-
+-#define REG_OFFSET 1
+-
+-/* register offset */
+-#define OFS_RCV_BUFFER 0
+-#define OFS_TRANS_HOLD 0
+-#define OFS_SEND_BUFFER 0
+-#define OFS_INTR_ENABLE (1*REG_OFFSET)
+-#define OFS_INTR_ID (2*REG_OFFSET)
+-#define OFS_DATA_FORMAT (3*REG_OFFSET)
+-#define OFS_LINE_CONTROL (3*REG_OFFSET)
+-#define OFS_MODEM_CONTROL (4*REG_OFFSET)
+-#define OFS_RS232_OUTPUT (4*REG_OFFSET)
+-#define OFS_LINE_STATUS (5*REG_OFFSET)
+-#define OFS_MODEM_STATUS (6*REG_OFFSET)
+-#define OFS_RS232_INPUT (6*REG_OFFSET)
+-#define OFS_SCRATCH_PAD (7*REG_OFFSET)
+-
+-#define OFS_DIVISOR_LSB (0*REG_OFFSET)
+-#define OFS_DIVISOR_MSB (1*REG_OFFSET)
+-
+-/* memory-mapped read/write of the port */
+-#define UART16550_READ(y) readb((char *)BASE + (y))
+-#define UART16550_WRITE(y, z) writeb(z, (char *)BASE + (y))
+-
+-void debugInit(u32 baud, u8 data, u8 parity, u8 stop)
+-{
+- u32 divisor;
+-
+- /* disable interrupts */
+- UART16550_WRITE(OFS_INTR_ENABLE, 0);
+-
+- /* set up buad rate */
+- /* set DIAB bit */
+- UART16550_WRITE(OFS_LINE_CONTROL, 0x80);
+-
+- /* set divisor */
+- divisor = MAX_BAUD / baud;
+- UART16550_WRITE(OFS_DIVISOR_LSB, divisor & 0xff);
+- UART16550_WRITE(OFS_DIVISOR_MSB, (divisor & 0xff00) >> 8);
+-
+- /* clear DIAB bit */
+- UART16550_WRITE(OFS_LINE_CONTROL, 0x0);
+-
+- /* set data format */
+- UART16550_WRITE(OFS_DATA_FORMAT, data | parity | stop);
+-}
+-
+-static int remoteDebugInitialized;
+-
+-u8 getDebugChar(void)
+-{
+- if (!remoteDebugInitialized) {
+- remoteDebugInitialized = 1;
+- debugInit(UART16550_BAUD_115200,
+- UART16550_DATA_8BIT,
+- UART16550_PARITY_NONE, UART16550_STOP_1BIT);
+- }
+-
+- while ((UART16550_READ(OFS_LINE_STATUS) & 0x1) == 0) ;
+- return UART16550_READ(OFS_RCV_BUFFER);
+-}
+-
+-int putDebugChar(u8 byte)
+-{
+- if (!remoteDebugInitialized) {
+- remoteDebugInitialized = 1;
+- /*
+- debugInit(UART16550_BAUD_115200,
+- UART16550_DATA_8BIT,
+- UART16550_PARITY_NONE, UART16550_STOP_1BIT); */
+- }
+-
+- while ((UART16550_READ(OFS_LINE_STATUS) & 0x20) == 0) ;
+- UART16550_WRITE(OFS_SEND_BUFFER, byte);
+- return 1;
+-}
+diff -Nur linux-2.6.30/arch/mips/lemote/lm2e/irq.c rt4ls/arch/mips/lemote/lm2e/irq.c
+--- linux-2.6.30/arch/mips/lemote/lm2e/irq.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/lemote/lm2e/irq.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,143 +0,0 @@
+-/*
+- * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
+- * Author: Fuxin Zhang, zhangfx@lemote.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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+- * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+- *
+- * 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.
+- *
+- */
+-#include <linux/delay.h>
+-#include <linux/io.h>
+-#include <linux/init.h>
+-#include <linux/interrupt.h>
+-#include <linux/irq.h>
+-
+-#include <asm/irq_cpu.h>
+-#include <asm/i8259.h>
+-#include <asm/mipsregs.h>
+-#include <asm/mips-boards/bonito64.h>
+-
+-
+-/*
+- * the first level int-handler will jump here if it is a bonito irq
+- */
+-static void bonito_irqdispatch(void)
+-{
+- u32 int_status;
+- int i;
+-
+- /* workaround the IO dma problem: let cpu looping to allow DMA finish */
+- int_status = BONITO_INTISR;
+- if (int_status & (1 << 10)) {
+- while (int_status & (1 << 10)) {
+- udelay(1);
+- int_status = BONITO_INTISR;
+- }
+- }
+-
+- /* Get pending sources, masked by current enables */
+- int_status = BONITO_INTISR & BONITO_INTEN;
+-
+- if (int_status != 0) {
+- i = __ffs(int_status);
+- int_status &= ~(1 << i);
+- do_IRQ(BONITO_IRQ_BASE + i);
+- }
+-}
+-
+-static void i8259_irqdispatch(void)
+-{
+- int irq;
+-
+- irq = i8259_irq();
+- if (irq >= 0) {
+- do_IRQ(irq);
+- } else {
+- spurious_interrupt();
+- }
+-
+-}
+-
+-asmlinkage void plat_irq_dispatch(void)
+-{
+- unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM;
+-
+- if (pending & CAUSEF_IP7) {
+- do_IRQ(MIPS_CPU_IRQ_BASE + 7);
+- } else if (pending & CAUSEF_IP5) {
+- i8259_irqdispatch();
+- } else if (pending & CAUSEF_IP2) {
+- bonito_irqdispatch();
+- } else {
+- spurious_interrupt();
+- }
+-}
+-
+-static struct irqaction cascade_irqaction = {
+- .handler = no_action,
+- .name = "cascade",
+-};
+-
+-void __init arch_init_irq(void)
+-{
+- extern void bonito_irq_init(void);
+-
+- /*
+- * Clear all of the interrupts while we change the able around a bit.
+- * int-handler is not on bootstrap
+- */
+- clear_c0_status(ST0_IM | ST0_BEV);
+- local_irq_disable();
+-
+- /* most bonito irq should be level triggered */
+- BONITO_INTEDGE = BONITO_ICU_SYSTEMERR | BONITO_ICU_MASTERERR |
+- BONITO_ICU_RETRYERR | BONITO_ICU_MBOXES;
+- BONITO_INTSTEER = 0;
+-
+- /*
+- * Mask out all interrupt by writing "1" to all bit position in
+- * the interrupt reset reg.
+- */
+- BONITO_INTENCLR = ~0;
+-
+- /* init all controller
+- * 0-15 ------> i8259 interrupt
+- * 16-23 ------> mips cpu interrupt
+- * 32-63 ------> bonito irq
+- */
+-
+- /* Sets the first-level interrupt dispatcher. */
+- mips_cpu_irq_init();
+- init_i8259_irqs();
+- bonito_irq_init();
+-
+- /*
+- printk("GPIODATA=%x, GPIOIE=%x\n", BONITO_GPIODATA, BONITO_GPIOIE);
+- printk("INTEN=%x, INTSET=%x, INTCLR=%x, INTISR=%x\n",
+- BONITO_INTEN, BONITO_INTENSET,
+- BONITO_INTENCLR, BONITO_INTISR);
+- */
+-
+- /* bonito irq at IP2 */
+- setup_irq(MIPS_CPU_IRQ_BASE + 2, &cascade_irqaction);
+- /* 8259 irq at IP5 */
+- setup_irq(MIPS_CPU_IRQ_BASE + 5, &cascade_irqaction);
+-
+-}
+diff -Nur linux-2.6.30/arch/mips/lemote/lm2e/mem.c rt4ls/arch/mips/lemote/lm2e/mem.c
+--- linux-2.6.30/arch/mips/lemote/lm2e/mem.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/lemote/lm2e/mem.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,23 +0,0 @@
+-/*
+- * This program is free software; you can redistribute it and/or modify it
+- * under the terms of the GNU General Public License as published by the
+- * Free Software Foundation; either version 2 of the License, or (at your
+- * option) any later version.
+- */
+-#include <linux/fs.h>
+-#include <linux/fcntl.h>
+-#include <linux/mm.h>
+-
+-/* override of arch/mips/mm/cache.c: __uncached_access */
+-int __uncached_access(struct file *file, unsigned long addr)
+-{
+- if (file->f_flags & O_SYNC)
+- return 1;
+-
+- /*
+- * On the Lemote Loongson 2e system, the peripheral registers
+- * reside between 0x1000:0000 and 0x2000:0000.
+- */
+- return addr >= __pa(high_memory) ||
+- ((addr >= 0x10000000) && (addr < 0x20000000));
+-}
+diff -Nur linux-2.6.30/arch/mips/lemote/lm2e/pci.c rt4ls/arch/mips/lemote/lm2e/pci.c
+--- linux-2.6.30/arch/mips/lemote/lm2e/pci.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/lemote/lm2e/pci.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,97 +0,0 @@
+-/*
+- * pci.c
+- *
+- * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
+- * Author: Fuxin Zhang, zhangfx@lemote.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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+- * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+- *
+- * 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.
+- *
+- */
+-#include <linux/types.h>
+-#include <linux/pci.h>
+-#include <linux/kernel.h>
+-#include <linux/init.h>
+-#include <asm/mips-boards/bonito64.h>
+-#include <asm/mach-lemote/pci.h>
+-
+-extern struct pci_ops bonito64_pci_ops;
+-
+-static struct resource loongson2e_pci_mem_resource = {
+- .name = "LOONGSON2E PCI MEM",
+- .start = LOONGSON2E_PCI_MEM_START,
+- .end = LOONGSON2E_PCI_MEM_END,
+- .flags = IORESOURCE_MEM,
+-};
+-
+-static struct resource loongson2e_pci_io_resource = {
+- .name = "LOONGSON2E PCI IO MEM",
+- .start = LOONGSON2E_PCI_IO_START,
+- .end = IO_SPACE_LIMIT,
+- .flags = IORESOURCE_IO,
+-};
+-
+-static struct pci_controller loongson2e_pci_controller = {
+- .pci_ops = &bonito64_pci_ops,
+- .io_resource = &loongson2e_pci_io_resource,
+- .mem_resource = &loongson2e_pci_mem_resource,
+- .mem_offset = 0x00000000UL,
+- .io_offset = 0x00000000UL,
+-};
+-
+-static void __init ict_pcimap(void)
+-{
+- /*
+- * local to PCI mapping: [256M,512M] -> [256M,512M]; differ from PMON
+- *
+- * CPU address space [256M,448M] is window for accessing pci space
+- * we set pcimap_lo[0,1,2] to map it to pci space [256M,448M]
+- * pcimap: bit18,pcimap_2; bit[17-12],lo2;bit[11-6],lo1;bit[5-0],lo0
+- */
+- /* 1,00 0110 ,0001 01,00 0000 */
+- BONITO_PCIMAP = 0x46140;
+-
+- /* 1, 00 0010, 0000,01, 00 0000 */
+- /* BONITO_PCIMAP = 0x42040; */
+-
+- /*
+- * PCI to local mapping: [2G,2G+256M] -> [0,256M]
+- */
+- BONITO_PCIBASE0 = 0x80000000;
+- BONITO_PCIBASE1 = 0x00800000;
+- BONITO_PCIBASE2 = 0x90000000;
+-
+-}
+-
+-static int __init pcibios_init(void)
+-{
+- ict_pcimap();
+-
+- loongson2e_pci_controller.io_map_base =
+- (unsigned long) ioremap(LOONGSON2E_IO_PORT_BASE,
+- loongson2e_pci_io_resource.end -
+- loongson2e_pci_io_resource.start + 1);
+-
+- register_pci_controller(&loongson2e_pci_controller);
+-
+- return 0;
+-}
+-
+-arch_initcall(pcibios_init);
+diff -Nur linux-2.6.30/arch/mips/lemote/lm2e/prom.c rt4ls/arch/mips/lemote/lm2e/prom.c
+--- linux-2.6.30/arch/mips/lemote/lm2e/prom.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/lemote/lm2e/prom.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,97 +0,0 @@
+-/*
+- * Based on Ocelot Linux port, which is
+- * Copyright 2001 MontaVista Software Inc.
+- * Author: jsun@mvista.com or jsun@junsun.net
+- *
+- * Copyright 2003 ICT CAS
+- * Author: Michael Guo <guoyi@ict.ac.cn>
+- *
+- * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
+- * Author: Fuxin Zhang, zhangfx@lemote.com
+- *
+- * This program is free software; you can redistribute it and/or modify it
+- * under the terms of the GNU General Public License as published by the
+- * Free Software Foundation; either version 2 of the License, or (at your
+- * option) any later version.
+- */
+-#include <linux/init.h>
+-#include <linux/bootmem.h>
+-#include <asm/bootinfo.h>
+-
+-extern unsigned long bus_clock;
+-extern unsigned long cpu_clock_freq;
+-extern unsigned int memsize, highmemsize;
+-extern int putDebugChar(unsigned char byte);
+-
+-static int argc;
+-/* pmon passes arguments in 32bit pointers */
+-static int *arg;
+-static int *env;
+-
+-const char *get_system_type(void)
+-{
+- return "lemote-fulong";
+-}
+-
+-void __init prom_init_cmdline(void)
+-{
+- int i;
+- long l;
+-
+- /* arg[0] is "g", the rest is boot parameters */
+- arcs_cmdline[0] = '\0';
+- for (i = 1; i < argc; i++) {
+- l = (long)arg[i];
+- if (strlen(arcs_cmdline) + strlen(((char *)l) + 1)
+- >= sizeof(arcs_cmdline))
+- break;
+- strcat(arcs_cmdline, ((char *)l));
+- strcat(arcs_cmdline, " ");
+- }
+-}
+-
+-void __init prom_init(void)
+-{
+- long l;
+- argc = fw_arg0;
+- arg = (int *)fw_arg1;
+- env = (int *)fw_arg2;
+-
+- prom_init_cmdline();
+-
+- if ((strstr(arcs_cmdline, "console=")) == NULL)
+- strcat(arcs_cmdline, " console=ttyS0,115200");
+- if ((strstr(arcs_cmdline, "root=")) == NULL)
+- strcat(arcs_cmdline, " root=/dev/hda1");
+-
+-#define parse_even_earlier(res, option, p) \
+-do { \
+- if (strncmp(option, (char *)p, strlen(option)) == 0) \
+- res = simple_strtol((char *)p + strlen(option"="), \
+- NULL, 10); \
+-} while (0)
+-
+- l = (long)*env;
+- while (l != 0) {
+- parse_even_earlier(bus_clock, "busclock", l);
+- parse_even_earlier(cpu_clock_freq, "cpuclock", l);
+- parse_even_earlier(memsize, "memsize", l);
+- parse_even_earlier(highmemsize, "highmemsize", l);
+- env++;
+- l = (long)*env;
+- }
+- if (memsize == 0)
+- memsize = 256;
+-
+- pr_info("busclock=%ld, cpuclock=%ld,memsize=%d,highmemsize=%d\n",
+- bus_clock, cpu_clock_freq, memsize, highmemsize);
+-}
+-
+-void __init prom_free_prom_memory(void)
+-{
+-}
+-
+-void prom_putchar(char c)
+-{
+- putDebugChar(c);
+-}
+diff -Nur linux-2.6.30/arch/mips/lemote/lm2e/reset.c rt4ls/arch/mips/lemote/lm2e/reset.c
+--- linux-2.6.30/arch/mips/lemote/lm2e/reset.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/lemote/lm2e/reset.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,41 +0,0 @@
+-/*
+- * 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.
+- *
+- * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
+- * Author: Fuxin Zhang, zhangfx@lemote.com
+- */
+-#include <linux/pm.h>
+-
+-#include <asm/reboot.h>
+-
+-static void loongson2e_restart(char *command)
+-{
+-#ifdef CONFIG_32BIT
+- *(unsigned long *)0xbfe00104 &= ~(1 << 2);
+- *(unsigned long *)0xbfe00104 |= (1 << 2);
+-#else
+- *(unsigned long *)0xffffffffbfe00104 &= ~(1 << 2);
+- *(unsigned long *)0xffffffffbfe00104 |= (1 << 2);
+-#endif
+- __asm__ __volatile__("jr\t%0"::"r"(0xbfc00000));
+-}
+-
+-static void loongson2e_halt(void)
+-{
+- while (1) ;
+-}
+-
+-static void loongson2e_power_off(void)
+-{
+- loongson2e_halt();
+-}
+-
+-void mips_reboot_setup(void)
+-{
+- _machine_restart = loongson2e_restart;
+- _machine_halt = loongson2e_halt;
+- pm_power_off = loongson2e_power_off;
+-}
+diff -Nur linux-2.6.30/arch/mips/lemote/lm2e/setup.c rt4ls/arch/mips/lemote/lm2e/setup.c
+--- linux-2.6.30/arch/mips/lemote/lm2e/setup.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/lemote/lm2e/setup.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,111 +0,0 @@
+-/*
+- * BRIEF MODULE DESCRIPTION
+- * setup.c - board dependent boot routines
+- *
+- * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
+- * Author: Fuxin Zhang, zhangfx@lemote.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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+- * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+- *
+- * 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.
+- *
+- */
+-#include <linux/bootmem.h>
+-#include <linux/init.h>
+-#include <linux/irq.h>
+-
+-#include <asm/bootinfo.h>
+-#include <asm/mc146818-time.h>
+-#include <asm/time.h>
+-#include <asm/wbflush.h>
+-#include <asm/mach-lemote/pci.h>
+-
+-#ifdef CONFIG_VT
+-#include <linux/console.h>
+-#include <linux/screen_info.h>
+-#endif
+-
+-extern void mips_reboot_setup(void);
+-
+-unsigned long cpu_clock_freq;
+-unsigned long bus_clock;
+-unsigned int memsize;
+-unsigned int highmemsize = 0;
+-
+-void __init plat_time_init(void)
+-{
+- /* setup mips r4k timer */
+- mips_hpt_frequency = cpu_clock_freq / 2;
+-}
+-
+-unsigned long read_persistent_clock(void)
+-{
+- return mc146818_get_cmos_time();
+-}
+-
+-void (*__wbflush)(void);
+-EXPORT_SYMBOL(__wbflush);
+-
+-static void wbflush_loongson2e(void)
+-{
+- asm(".set\tpush\n\t"
+- ".set\tnoreorder\n\t"
+- ".set mips3\n\t"
+- "sync\n\t"
+- "nop\n\t"
+- ".set\tpop\n\t"
+- ".set mips0\n\t");
+-}
+-
+-void __init plat_mem_setup(void)
+-{
+- set_io_port_base((unsigned long)ioremap(LOONGSON2E_IO_PORT_BASE,
+- IO_SPACE_LIMIT - LOONGSON2E_PCI_IO_START + 1));
+- mips_reboot_setup();
+-
+- __wbflush = wbflush_loongson2e;
+-
+- add_memory_region(0x0, (memsize << 20), BOOT_MEM_RAM);
+-#ifdef CONFIG_64BIT
+- if (highmemsize > 0) {
+- add_memory_region(0x20000000, highmemsize << 20, BOOT_MEM_RAM);
+- }
+-#endif
+-
+-#ifdef CONFIG_VT
+-#if defined(CONFIG_VGA_CONSOLE)
+- conswitchp = &vga_con;
+-
+- screen_info = (struct screen_info) {
+- 0, 25, /* orig-x, orig-y */
+- 0, /* unused */
+- 0, /* orig-video-page */
+- 0, /* orig-video-mode */
+- 80, /* orig-video-cols */
+- 0, 0, 0, /* ega_ax, ega_bx, ega_cx */
+- 25, /* orig-video-lines */
+- VIDEO_TYPE_VGAC, /* orig-video-isVGA */
+- 16 /* orig-video-points */
+- };
+-#elif defined(CONFIG_DUMMY_CONSOLE)
+- conswitchp = &dummy_con;
+-#endif
+-#endif
+-
+-}
+diff -Nur linux-2.6.30/arch/mips/lib/delay.c rt4ls/arch/mips/lib/delay.c
+--- linux-2.6.30/arch/mips/lib/delay.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/lib/delay.c 2009-06-12 16:27:08.762444064 +0200
+@@ -43,7 +43,7 @@
+ {
+ unsigned int lpj = current_cpu_data.udelay_val;
+
+- __delay((us * 0x000010c7 * HZ * lpj) >> 32);
++ __delay((us * 0x000010c7ull * HZ * lpj) >> 32);
+ }
+ EXPORT_SYMBOL(__udelay);
+
+@@ -51,6 +51,6 @@
+ {
+ unsigned int lpj = current_cpu_data.udelay_val;
+
+- __delay((us * 0x00000005 * HZ * lpj) >> 32);
++ __delay((ns * 0x00000005ull * HZ * lpj) >> 32);
+ }
+ EXPORT_SYMBOL(__ndelay);
+diff -Nur linux-2.6.30/arch/mips/loongson/Kconfig rt4ls/arch/mips/loongson/Kconfig
+--- linux-2.6.30/arch/mips/loongson/Kconfig 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/Kconfig 2009-06-12 16:27:08.770446201 +0200
+@@ -0,0 +1,135 @@
++choice
++ prompt "Machine Type"
++ depends on MACH_LOONGSON
++
++config LEMOTE_FULOONG2E
++ bool "Lemote Fuloong(2e) mini-PC"
++ select ARCH_SPARSEMEM_ENABLE
++ select CEVT_R4K
++ select CSRC_R4K
++ select SYS_HAS_CPU_LOONGSON2E
++ select DMA_NONCOHERENT
++ select BOOT_ELF32
++ select BOARD_SCACHE
++ select HW_HAS_PCI
++ select I8259
++ select ISA
++ select IRQ_CPU
++ select SYS_SUPPORTS_32BIT_KERNEL
++ select SYS_SUPPORTS_64BIT_KERNEL
++ select SYS_SUPPORTS_LITTLE_ENDIAN
++ select SYS_SUPPORTS_HIGHMEM
++ select SYS_HAS_EARLY_PRINTK
++ select GENERIC_HARDIRQS_NO__DO_IRQ
++ select GENERIC_ISA_DMA_SUPPORT_BROKEN
++ select CPU_HAS_WB
++ help
++ Lemote Fuloong(2e) mini-PC board based on the Chinese Loongson-2E CPU and
++ an FPGA northbridge
++
++ Lemote Fuloong(2e) mini PC have a VIA686B south bridge.
++
++config LEMOTE_FULOONG2F
++ bool "Lemote Fuloong(2f) mini-PC"
++ select ARCH_SPARSEMEM_ENABLE
++ select CEVT_R4K if !CS5536_MFGPT
++ select CSRC_R4K if !CS5536_MFGPT
++ select SYS_HAS_CPU_LOONGSON2F
++ select DMA_NONCOHERENT
++ select BOOT_ELF32
++ select BOARD_SCACHE
++ select HW_HAS_PCI
++ select I8259
++ select ISA
++ select IRQ_CPU
++ select SYS_SUPPORTS_32BIT_KERNEL
++ select SYS_SUPPORTS_64BIT_KERNEL
++ select SYS_SUPPORTS_LITTLE_ENDIAN
++ select SYS_SUPPORTS_HIGHMEM
++ select SYS_HAS_EARLY_PRINTK
++ select GENERIC_HARDIRQS_NO__DO_IRQ
++ select GENERIC_ISA_DMA_SUPPORT_BROKEN
++ select CPU_HAS_WB
++ select CS5536
++ help
++ Lemote Fuloong(2f) mini-PC board based on the Chinese Loongson-2F
++ CPU, which has an internal DDR and PCIX controller. the PCIX
++ controller have the similiar programming interface of the FPGA north
++ bridge of LOONGSON2E.
++
++ Lemote Fuloong(2f) mini PC have an AMD CS5536 south bridge.
++
++config LEMOTE_YEELOONG2F
++ bool "Lemote Yeeloong(2f) mini Notebook"
++ select ARCH_SPARSEMEM_ENABLE
++ select CEVT_R4K if !CS5536_MFGPT
++ select CSRC_R4K if !CS5536_MFGPT
++ select SYS_HAS_CPU_LOONGSON2F
++ select DMA_NONCOHERENT
++ select BOOT_ELF32
++ select BOARD_SCACHE
++ select HW_HAS_PCI
++ select I8259
++ select ISA
++ select IRQ_CPU
++ select SYS_SUPPORTS_32BIT_KERNEL
++ select SYS_SUPPORTS_64BIT_KERNEL
++ select SYS_SUPPORTS_LITTLE_ENDIAN
++ select SYS_SUPPORTS_HIGHMEM
++ select SYS_HAS_EARLY_PRINTK
++ select SYS_HAS_MACH_PROM_INIT_CMDLINE
++ select GENERIC_HARDIRQS_NO__DO_IRQ
++ select GENERIC_ISA_DMA_SUPPORT_BROKEN
++ select CPU_HAS_WB
++ select CS5536
++ help
++ Lemote Laptop based on the Chinese Loongson-2F CPU, which has an
++ internal DDR and PCIX controller. the PCIX controller have the
++ similiar programming interface of the FPGA north bridge of
++ LOONGSON2E.
++
++ Lemote Yeeloong(2f) laptop have an AMD CS5536 south bridge and an EC
++ controller.
++
++endchoice
++
++config CS5536
++ bool
++
++config CS5536_FLASH
++ bool
++ depends on CS5536
++
++config CS5536_NOR_FLASH
++ bool
++ depends on CS5536_FLASH
++
++config CS5536_OTG
++ bool
++ depends on CS5536
++
++config CS5536_UDC
++ bool
++ depends on CS5536
++
++config SYS_HAS_MACH_PROM_INIT_CMDLINE
++ bool
++
++config CS5536_MFGPT
++ bool "Using cs5536's MFGPT as system clock"
++ depends on CS5536
++ help
++ This is needed if cpufreq and oprofile is enabled in Loongson2(F)
++ machines
++
++config UCA_SIZE
++ hex "Uncache Accelerated Region size"
++ depends on CPU_LOONGSON2F
++ default 0x400000 if LEMOTE_YEELOONG2F
++ default 0x2000000 if LEMOTE_FULOONG2F
++ help
++ Uncached Acceleration(UCA) can greatly improve video performance.
++ Normally the Video memory can be accessed in Uncached Accelerated mode,
++ other peripheral spaces not.
++
++ Specify a zeroed size to disable this feature.
+diff -Nur linux-2.6.30/arch/mips/loongson/Makefile rt4ls/arch/mips/loongson/Makefile
+--- linux-2.6.30/arch/mips/loongson/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/Makefile 2009-06-12 16:27:08.770446201 +0200
+@@ -0,0 +1,23 @@
++#
++# Common code for all Loongson based systems
++#
++
++obj-$(CONFIG_MACH_LOONGSON) += common/
++
++#
++# Lemote Fuloong mini-PC (Loongson 2E-based)
++#
++
++obj-$(CONFIG_LEMOTE_FULOONG2E) += fuloong-2e/
++
++#
++# Lemote Fuloong mini-PC (Loongson 2F-based)
++#
++
++obj-$(CONFIG_LEMOTE_FULOONG2F) += fuloong-2f/
++
++#
++# Lemote Yeeloong mini-PC (Loongson 2F-based)
++#
++
++obj-$(CONFIG_LEMOTE_YEELOONG2F) += yeeloong-2f/
+diff -Nur linux-2.6.30/arch/mips/loongson/common/Makefile rt4ls/arch/mips/loongson/common/Makefile
+--- linux-2.6.30/arch/mips/loongson/common/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/Makefile 2009-06-12 16:27:08.774444476 +0200
+@@ -0,0 +1,37 @@
++#
++# Makefile for loongson based machines.
++#
++
++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
++
++#
++# Early printk support
++#
++obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
++
++#
++# Enable RTC Class support
++#
++# please enable CONFIG_RTC_DRV_CMOS
++#
++obj-$(CONFIG_RTC_DRV_CMOS) += rtc.o
++
++#
++# Enable CS5536 Virtual Support Module(VSM) for virtulize the PCI configure
++# space
++#
++obj-$(CONFIG_CS5536) += cs5536/
++
++#
++# Enable fuloong(2f) and yeeloong(2f) cpu frequency scaling support
++# This is based on CS5536 mfgpt timer
++#
++obj-$(CONFIG_LOONGSON2F_CPU_FREQ) += clock.o
++
++#
++# Enable serial port
++#
++obj-$(CONFIG_SERIAL_8250) += serial.o
++
++EXTRA_CFLAGS += -Werror
+diff -Nur linux-2.6.30/arch/mips/loongson/common/bonito-irq.c rt4ls/arch/mips/loongson/common/bonito-irq.c
+--- linux-2.6.30/arch/mips/loongson/common/bonito-irq.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/bonito-irq.c 2009-06-12 16:27:08.774444476 +0200
+@@ -0,0 +1,78 @@
++/*
++ * Copyright 2001 MontaVista Software Inc.
++ * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
++ * Copyright (C) 2000, 2001 Ralf Baechle (ralf@gnu.org)
++ *
++ * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
++ * Author: Fuxin Zhang, zhangfx@lemote.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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
++ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
++ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
++ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
++ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * 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.
++ *
++ */
++
++#include <linux/interrupt.h>
++
++#include <loongson.h>
++#include <machine.h>
++
++static inline void bonito_irq_enable(unsigned int irq)
++{
++ LOONGSON_INTENSET = (1 << (irq - LOONGSON_IRQ_BASE));
++ /* flush posted write */
++ (void)LOONGSON_INTENSET;
++ mmiowb();
++}
++
++static inline void bonito_irq_disable(unsigned int irq)
++{
++ LOONGSON_INTENCLR = (1 << (irq - LOONGSON_IRQ_BASE));
++ /* flush posted write */
++ (void)LOONGSON_INTENCLR;
++ mmiowb();
++}
++
++static struct irq_chip bonito_irq_type = {
++ .name = "bonito_irq",
++ .ack = bonito_irq_disable,
++ .mask = bonito_irq_disable,
++ .mask_ack = bonito_irq_disable,
++ .unmask = bonito_irq_enable,
++};
++
++/* there is no need to handle dma timeout in loongson-2f based machines */
++#ifdef CONFIG_CPU_LOONGSON2E
++static struct irqaction dma_timeout_irqaction = {
++ .handler = no_action,
++ .name = "dma_timeout",
++};
++#endif
++
++void bonito_irq_init(void)
++{
++ u32 i;
++
++ for (i = LOONGSON_IRQ_BASE; i < LOONGSON_IRQ_BASE + 32; i++)
++ set_irq_chip_and_handler(i, &bonito_irq_type, handle_level_irq);
++
++#ifdef CONFIG_CPU_LOONGSON2E
++ setup_irq(LOONGSON_DMATIMEOUT_IRQ, &dma_timeout_irqaction);
++#endif
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/clock.c rt4ls/arch/mips/loongson/common/clock.c
+--- linux-2.6.30/arch/mips/loongson/common/clock.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/clock.c 2009-06-12 16:27:08.774444476 +0200
+@@ -0,0 +1,166 @@
++/*
++ * arch/mips/loongson/common/clock.c
++ *
++ * Copyright (C) 2006 - 2008 Lemote Inc. & Insititute of Computing Technology
++ * Author: Yanhua, yanh@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.
++ */
++
++#include <linux/cpufreq.h>
++#include <linux/platform_device.h>
++
++#include <loongson.h>
++#include <clock.h>
++
++static LIST_HEAD(clock_list);
++static DEFINE_SPINLOCK(clock_lock);
++static DEFINE_MUTEX(clock_list_sem);
++
++/* Minimum CLK support */
++enum {
++ DC_ZERO, DC_25PT = 2, DC_37PT, DC_50PT, DC_62PT, DC_75PT,
++ DC_87PT, DC_DISABLE, DC_RESV
++};
++
++struct cpufreq_frequency_table loongson2f_clockmod_table[] = {
++ {DC_RESV, CPUFREQ_ENTRY_INVALID},
++ {DC_ZERO, CPUFREQ_ENTRY_INVALID},
++ {DC_25PT, 0},
++ {DC_37PT, 0},
++ {DC_50PT, 0},
++ {DC_62PT, 0},
++ {DC_75PT, 0},
++ {DC_87PT, 0},
++ {DC_DISABLE, 0},
++ {DC_RESV, CPUFREQ_TABLE_END},
++};
++EXPORT_SYMBOL_GPL(loongson2f_clockmod_table);
++
++static struct clk cpu_clk = {
++ .name = "cpu_clk",
++ .flags = CLK_ALWAYS_ENABLED | CLK_RATE_PROPAGATES,
++ .rate = 800000000,
++};
++
++struct clk *clk_get(struct device *dev, const char *id)
++{
++ return &cpu_clk;
++}
++EXPORT_SYMBOL(clk_get);
++
++static void propagate_rate(struct clk *clk)
++{
++ struct clk *clkp;
++
++ list_for_each_entry(clkp, &clock_list, node) {
++ if (likely(clkp->parent != clk))
++ continue;
++ if (likely(clkp->ops && clkp->ops->recalc))
++ clkp->ops->recalc(clkp);
++ if (unlikely(clkp->flags & CLK_RATE_PROPAGATES))
++ propagate_rate(clkp);
++ }
++}
++
++int clk_enable(struct clk *clk)
++{
++ return 0;
++}
++EXPORT_SYMBOL(clk_enable);
++
++void clk_disable(struct clk *clk)
++{
++}
++EXPORT_SYMBOL(clk_disable);
++
++unsigned long clk_get_rate(struct clk *clk)
++{
++ return (unsigned long)clk->rate;
++}
++EXPORT_SYMBOL(clk_get_rate);
++
++void clk_put(struct clk *clk)
++{
++}
++EXPORT_SYMBOL(clk_put);
++
++int clk_set_rate(struct clk *clk, unsigned long rate)
++{
++ return clk_set_rate_ex(clk, rate, 0);
++}
++EXPORT_SYMBOL_GPL(clk_set_rate);
++
++int clk_set_rate_ex(struct clk *clk, unsigned long rate, int algo_id)
++{
++ int ret = 0;
++ int regval;
++ int i;
++
++ if (likely(clk->ops && clk->ops->set_rate)) {
++ unsigned long flags;
++
++ spin_lock_irqsave(&clock_lock, flags);
++ ret = clk->ops->set_rate(clk, rate, algo_id);
++ spin_unlock_irqrestore(&clock_lock, flags);
++ }
++
++ if (unlikely(clk->flags & CLK_RATE_PROPAGATES))
++ propagate_rate(clk);
++
++ for (i = 0; loongson2f_clockmod_table[i].frequency != CPUFREQ_TABLE_END;
++ i++) {
++ if (loongson2f_clockmod_table[i].frequency ==
++ CPUFREQ_ENTRY_INVALID)
++ continue;
++ if (rate == loongson2f_clockmod_table[i].frequency)
++ break;
++ }
++ if (rate != loongson2f_clockmod_table[i].frequency)
++ return -ENOTSUPP;
++
++ clk->rate = rate;
++
++ regval = LOONGSON_CHIPCFG0;
++ regval = (regval & ~0x7) | (loongson2f_clockmod_table[i].index - 1);
++ LOONGSON_CHIPCFG0 = regval;
++
++ return ret;
++}
++EXPORT_SYMBOL_GPL(clk_set_rate_ex);
++
++long clk_round_rate(struct clk *clk, unsigned long rate)
++{
++ if (likely(clk->ops && clk->ops->round_rate)) {
++ unsigned long flags, rounded;
++
++ spin_lock_irqsave(&clock_lock, flags);
++ rounded = clk->ops->round_rate(clk, rate);
++ spin_unlock_irqrestore(&clock_lock, flags);
++
++ return rounded;
++ }
++
++ return rate;
++}
++EXPORT_SYMBOL_GPL(clk_round_rate);
++
++/*
++ * This is the simple version of Loongson-2F wait
++ * Maybe we need do this in interrupt disabled content
++ */
++DEFINE_SPINLOCK(loongson2f_wait_lock);
++void loongson2f_cpu_wait(void)
++{
++ u32 cpu_freq;
++ unsigned long flags;
++
++ spin_lock_irqsave(&loongson2f_wait_lock, flags);
++ cpu_freq = LOONGSON_CHIPCFG0;
++ LOONGSON_CHIPCFG0 &= ~0x7; /* Put CPU into wait mode */
++ LOONGSON_CHIPCFG0 = cpu_freq; /* Restore CPU state */
++ spin_unlock_irqrestore(&loongson2f_wait_lock, flags);
++}
++EXPORT_SYMBOL_GPL(loongson2f_cpu_wait);
+diff -Nur linux-2.6.30/arch/mips/loongson/common/cmdline.c rt4ls/arch/mips/loongson/common/cmdline.c
+--- linux-2.6.30/arch/mips/loongson/common/cmdline.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/cmdline.c 2009-06-12 16:27:08.774444476 +0200
+@@ -0,0 +1,57 @@
++/*
++ * Based on Ocelot Linux port, which is
++ * Copyright 2001 MontaVista Software Inc.
++ * Author: jsun@mvista.com or jsun@junsun.net
++ *
++ * Copyright 2003 ICT CAS
++ * Author: Michael Guo <guoyi@ict.ac.cn>
++ *
++ * 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
++ *
++ * 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 <asm/bootinfo.h>
++
++#include <loongson.h>
++#include <cmdline.h>
++
++int prom_argc;
++/* pmon passes arguments in 32bit pointers */
++int *_prom_argv;
++
++void __init prom_init_cmdline(void)
++{
++ int i;
++ long l;
++
++ /* firmware arguments are initialized in head.S */
++ prom_argc = fw_arg0;
++ _prom_argv = (int *)fw_arg1;
++
++ /* arg[0] is "g", the rest is boot parameters */
++ arcs_cmdline[0] = '\0';
++ for (i = 1; i < prom_argc; i++) {
++ l = (long)_prom_argv[i];
++ if (strlen(arcs_cmdline) + strlen(((char *)l) + 1)
++ >= sizeof(arcs_cmdline))
++ break;
++ strcat(arcs_cmdline, ((char *)l));
++ strcat(arcs_cmdline, " ");
++ }
++
++ /* machine specific prom_init_cmdline */
++ mach_prom_init_cmdline();
++
++ if ((strstr(arcs_cmdline, "console=")) == NULL)
++ strcat(arcs_cmdline, " console=ttyS0,115200");
++ if ((strstr(arcs_cmdline, "root=")) == NULL)
++ strcat(arcs_cmdline, " root=/dev/hda1");
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/cs5536/Makefile rt4ls/arch/mips/loongson/common/cs5536/Makefile
+--- linux-2.6.30/arch/mips/loongson/common/cs5536/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/cs5536/Makefile 2009-06-12 16:27:08.774444476 +0200
+@@ -0,0 +1,25 @@
++#
++# Makefile for CS5536 support.
++#
++
++#
++# core modules
++#
++obj-$(CONFIG_CS5536) += cs5536_pci.o cs5536_ide.o cs5536_acc.o cs5536_ohci.o \
++ cs5536_isa.o cs5536_ehci.o
++#
++# selective modules
++#
++# add a CS5536_[MODULE] to your board in arch/mips/loongson/Kconfig
++#
++obj-$(CONFIG_CS5536_FLASH) += cs5536_flash.o
++obj-$(CONFIG_CS5536_NOR_FLASH) += cs5536_flash.o
++obj-$(CONFIG_CS5536_OTG) += cs5536_otg.o
++obj-$(CONFIG_CS5536_UDC) += cs5536_udc.o
++
++#
++# Enable cs5536 mfgpt Timer
++#
++obj-$(CONFIG_CS5536_MFGPT) += cs5536_mfgpt.o
++
++EXTRA_CFLAGS += -Werror
+diff -Nur linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_acc.c rt4ls/arch/mips/loongson/common/cs5536/cs5536_acc.c
+--- linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_acc.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/cs5536/cs5536_acc.c 2009-06-12 16:27:08.774444476 +0200
+@@ -0,0 +1,156 @@
++/*
++ * the ACC Virtual Support Module of AMD CS5536
++ *
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author : jlliu, liujl@lemote.com
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * Author: Wu Zhangjin, wuzj@lemote.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 <cs5536/cs5536.h>
++#include <cs5536/cs5536_pci.h>
++
++/*
++ * acc_write: acc write transfering
++ */
++
++void pci_acc_write_reg(int reg, u32 value)
++{
++ u32 hi = 0, lo = value;
++
++ switch (reg) {
++ case PCI_COMMAND:
++ _rdmsr(GLIU_MSR_REG(GLIU_PAE), &hi, &lo);
++ if (value & PCI_COMMAND_MASTER)
++ lo |= (0x03 << 8);
++ else
++ lo &= ~(0x03 << 8);
++ _wrmsr(GLIU_MSR_REG(GLIU_PAE), hi, lo);
++ break;
++ case PCI_STATUS:
++ if (value & PCI_STATUS_PARITY) {
++ _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo);
++ if (lo & SB_PARE_ERR_FLAG) {
++ lo = (lo & 0x0000ffff) | SB_PARE_ERR_FLAG;
++ _wrmsr(SB_MSR_REG(SB_ERROR), hi, lo);
++ }
++ }
++ break;
++ case PCI_BAR0_REG:
++ if (value == PCI_BAR_RANGE_MASK) {
++ _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo);
++ lo |= SOFT_BAR_ACC_FLAG;
++ _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
++ } else if (value & 0x01) {
++ value &= 0xfffffffc;
++ hi = 0xA0000000 | ((value & 0x000ff000) >> 12);
++ lo = 0x000fff80 | ((value & 0x00000fff) << 20);
++ _wrmsr(GLIU_MSR_REG(GLIU_IOD_BM1), hi, lo);
++ }
++ break;
++ case PCI_ACC_INT_REG:
++ _rdmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), &hi, &lo);
++ /* disable all the usb interrupt in PIC */
++ lo &= ~(0xf << PIC_YSEL_LOW_ACC_SHIFT);
++ if (value) /* enable all the acc interrupt in PIC */
++ lo |= (CS5536_ACC_INTR << PIC_YSEL_LOW_ACC_SHIFT);
++ _wrmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), hi, lo);
++ break;
++ default:
++ break;
++ }
++
++ return;
++}
++
++/*
++ * acc_read: acc read transfering
++ */
++
++u32 pci_acc_read_reg(int reg)
++{
++ u32 hi, lo;
++ u32 conf_data = 0;
++
++ switch (reg) {
++ case PCI_VENDOR_ID:
++ conf_data =
++ 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;
++ _rdmsr(GLIU_MSR_REG(GLIU_PAE), &hi, &lo);
++ if ((lo & 0x300) == 0x300)
++ conf_data |= PCI_COMMAND_MASTER;
++ break;
++ case PCI_STATUS:
++ conf_data |= PCI_STATUS_66MHZ;
++ conf_data |= 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;
++ break;
++ case PCI_CLASS_REVISION:
++ _rdmsr(ACC_MSR_REG(ACC_CAP), &hi, &lo);
++ conf_data = lo & 0x000000ff;
++ conf_data |= (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);
++ 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 |
++ 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;
++ }
++ break;
++ case PCI_BAR1_REG:
++ case PCI_BAR2_REG:
++ case PCI_BAR3_REG:
++ case PCI_BAR4_REG:
++ case PCI_BAR5_REG:
++ break;
++ case PCI_CARDBUS_CIS:
++ conf_data = PCI_CARDBUS_CIS_POINTER;
++ break;
++ case PCI_SUBSYSTEM_VENDOR_ID:
++ conf_data =
++ CFG_PCI_VENDOR_ID(CS5536_ACC_SUB_ID, CS5536_SUB_VENDOR_ID);
++ break;
++ case PCI_ROM_ADDRESS:
++ conf_data = PCI_EXPANSION_ROM_BAR;
++ break;
++ case PCI_CAPABILITY_LIST:
++ conf_data = PCI_CAPLIST_USB_POINTER;
++ break;
++ case PCI_INTERRUPT_LINE:
++ conf_data =
++ CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_ACC_INTR);
++ break;
++ default:
++ break;
++ }
++
++ return conf_data;
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_ehci.c rt4ls/arch/mips/loongson/common/cs5536/cs5536_ehci.c
+--- linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_ehci.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/cs5536/cs5536_ehci.c 2009-06-12 16:27:08.774444476 +0200
+@@ -0,0 +1,166 @@
++/*
++ * the EHCI Virtual Support Module of AMD CS5536
++ *
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author : jlliu, liujl@lemote.com
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * Author: Wu Zhangjin, wuzj@lemote.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 <cs5536/cs5536.h>
++#include <cs5536/cs5536_pci.h>
++
++void pci_ehci_write_reg(int reg, u32 value)
++{
++ u32 hi = 0, lo = value;
++
++ switch (reg) {
++ case PCI_COMMAND:
++ _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo);
++ if (value & PCI_COMMAND_MASTER)
++ hi |= PCI_COMMAND_MASTER;
++ else
++ hi &= ~PCI_COMMAND_MASTER;
++
++ if (value & PCI_COMMAND_MEMORY)
++ hi |= PCI_COMMAND_MEMORY;
++ else
++ hi &= ~PCI_COMMAND_MEMORY;
++ _wrmsr(USB_MSR_REG(USB_EHCI), hi, lo);
++ break;
++ case PCI_STATUS:
++ if (value & PCI_STATUS_PARITY) {
++ _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo);
++ if (lo & SB_PARE_ERR_FLAG) {
++ lo = (lo & 0x0000ffff) | SB_PARE_ERR_FLAG;
++ _wrmsr(SB_MSR_REG(SB_ERROR), hi, lo);
++ }
++ }
++ break;
++ case PCI_BAR0_REG:
++ if (value == PCI_BAR_RANGE_MASK) {
++ _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo);
++ lo |= SOFT_BAR_EHCI_FLAG;
++ _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
++ } else if ((value & 0x01) == 0x00) {
++ _wrmsr(USB_MSR_REG(USB_EHCI), hi, lo);
++
++ value &= 0xfffffff0;
++ hi = 0x40000000 | ((value & 0xff000000) >> 24);
++ lo = 0x000fffff | ((value & 0x00fff000) << 8);
++ _wrmsr(GLIU_MSR_REG(GLIU_P2D_BM4), hi, lo);
++ }
++ break;
++ case PCI_EHCI_LEGSMIEN_REG:
++ _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo);
++ hi &= 0x003f0000;
++ hi |= (value & 0x3f) << 16;
++ _wrmsr(USB_MSR_REG(USB_EHCI), hi, lo);
++ break;
++ case PCI_EHCI_FLADJ_REG:
++ _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo);
++ hi &= ~0x00003f00;
++ hi |= value & 0x00003f00;
++ _wrmsr(USB_MSR_REG(USB_EHCI), hi, lo);
++ break;
++ default:
++ break;
++ }
++
++ return;
++}
++
++u32 pci_ehci_read_reg(int reg)
++{
++ u32 conf_data = 0;
++ u32 hi, lo;
++
++ switch (reg) {
++ case PCI_VENDOR_ID:
++ conf_data =
++ 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;
++ if (hi & PCI_COMMAND_MEMORY)
++ conf_data |= PCI_COMMAND_MEMORY;
++ break;
++ case PCI_STATUS:
++ conf_data |= PCI_STATUS_66MHZ;
++ conf_data |= 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;
++ break;
++ case PCI_CLASS_REVISION:
++ _rdmsr(USB_MSR_REG(USB_CAP), &hi, &lo);
++ conf_data = lo & 0x000000ff;
++ conf_data |= (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);
++ 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 |
++ 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;
++ }
++ break;
++ case PCI_BAR1_REG:
++ case PCI_BAR2_REG:
++ case PCI_BAR3_REG:
++ case PCI_BAR4_REG:
++ case PCI_BAR5_REG:
++ break;
++ case PCI_CARDBUS_CIS:
++ conf_data = PCI_CARDBUS_CIS_POINTER;
++ break;
++ case PCI_SUBSYSTEM_VENDOR_ID:
++ conf_data =
++ CFG_PCI_VENDOR_ID(CS5536_EHCI_SUB_ID, CS5536_SUB_VENDOR_ID);
++ break;
++ case PCI_ROM_ADDRESS:
++ conf_data = PCI_EXPANSION_ROM_BAR;
++ break;
++ case PCI_CAPABILITY_LIST:
++ conf_data = PCI_CAPLIST_USB_POINTER;
++ break;
++ case PCI_INTERRUPT_LINE:
++ conf_data =
++ 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;
++ break;
++ case PCI_EHCI_LEGSMISTS_REG:
++ _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo);
++ conf_data = (hi & 0x3f000000) >> 24;
++ break;
++ case PCI_EHCI_FLADJ_REG:
++ _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo);
++ conf_data = hi & 0x00003f00;
++ break;
++ default:
++ break;
++ }
++
++ return conf_data;
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_flash.c rt4ls/arch/mips/loongson/common/cs5536/cs5536_flash.c
+--- linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_flash.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/cs5536/cs5536_flash.c 2009-06-12 16:27:08.774444476 +0200
+@@ -0,0 +1,452 @@
++/*
++ * the FLASH Virtual Support Module of AMD CS5536
++ *
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author : jlliu, liujl@lemote.com
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * Author: Wu Zhangjin, wuzj@lemote.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 <cs5536/cs5536.h>
++#include <cs5536/cs5536_pci.h>
++
++/*
++ * enable the region of flashs(NOR or NAND)
++ *
++ * the same as the DIVIL other modules above, two groups of regs should be
++ * modified here to control the region. DIVIL flash LBAR and the
++ * RCONFx(6~9 reserved).
++ */
++static void flash_lbar_enable(void)
++{
++ u32 hi, lo;
++ int offset;
++
++ for (offset = DIVIL_LBAR_FLSH0; offset <= DIVIL_LBAR_FLSH3; offset++) {
++ _rdmsr(DIVIL_MSR_REG(offset), &hi, &lo);
++ hi |= 0x1;
++ _wrmsr(DIVIL_MSR_REG(offset), hi, lo);
++ }
++
++ for (offset = SB_R6; offset <= SB_R9; offset++) {
++ _rdmsr(SB_MSR_REG(offset), &hi, &lo);
++ lo |= 0x1;
++ _wrmsr(SB_MSR_REG(offset), hi, lo);
++ }
++
++ return;
++}
++
++/*
++ * disable the region of flashs(NOR or NAND)
++ */
++static void flash_lbar_disable(void)
++{
++ u32 hi, lo;
++ int offset;
++
++ for (offset = DIVIL_LBAR_FLSH0; offset <= DIVIL_LBAR_FLSH3; offset++) {
++ _rdmsr(DIVIL_MSR_REG(offset), &hi, &lo);
++ hi &= ~0x01;
++ _wrmsr(DIVIL_MSR_REG(offset), hi, lo);
++ }
++ for (offset = SB_R6; offset <= SB_R9; offset++) {
++ _rdmsr(SB_MSR_REG(offset), &hi, &lo);
++ lo &= ~0x01;
++ _wrmsr(SB_MSR_REG(offset), hi, lo);
++ }
++
++ return;
++}
++
++#ifndef CONFIG_CS5536_NOR_FLASH /* for nand flash */
++
++void pci_flash_write_bar(int n, u32 value)
++{
++ u32 hi = 0, lo = value;
++
++ if (value == PCI_BAR_RANGE_MASK) {
++ /* make the flag for reading the bar length. */
++ _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo);
++ lo |= (SOFT_BAR_FLSH0_FLAG << n);
++ _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
++ } else if ((value & 0x01) == 0x00) {
++ /* mem space nand flash native reg base addr */
++ hi = 0xfffff007;
++ lo &= CS5536_FLSH_RANGE;
++ _wrmsr(DIVIL_MSR_REG(DIVIL_LBAR_FLSH0 + n), hi, lo);
++
++ /* RCONFx is 4KB in units for mem space. */
++ hi = ((value & 0xfffff000) << 12) |
++ ((CS5536_FLSH_LENGTH & 0xfffff000) - (1 << 12)) | 0x00;
++ lo = ((value & 0xfffff000) << 12) | 0x01;
++ _wrmsr(SB_MSR_REG(SB_R6 + n), hi, lo);
++ }
++ return;
++}
++
++void pci_flash_write_reg(int reg, u32 value)
++{
++ u32 hi = 0, lo = value;
++
++ switch (reg) {
++ case PCI_COMMAND:
++ if (value & PCI_COMMAND_MEMORY)
++ flash_lbar_enable();
++ else
++ flash_lbar_disable();
++ break;
++ case PCI_STATUS:
++ if (value & PCI_STATUS_PARITY) {
++ _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo);
++ if (lo & SB_PARE_ERR_FLAG) {
++ lo = (lo & 0x0000ffff) | SB_PARE_ERR_FLAG;
++ _wrmsr(SB_MSR_REG(SB_ERROR), hi, lo);
++ }
++ }
++ break;
++ case PCI_BAR0_REG:
++ pci_flash_write_bar(0, value);
++ break;
++ case PCI_BAR1_REG:
++ pci_flash_write_bar(1, value);
++ break;
++ case PCI_BAR2_REG:
++ pci_flash_write_bar(2, value);
++ break;
++ case PCI_BAR3_REG:
++ pci_flash_write_bar(3, value);
++ break;
++ case PCI_FLASH_INT_REG:
++ _rdmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), &hi, &lo);
++ /* disable all the flash interrupt in PIC */
++ lo &= ~(0xf << PIC_YSEL_LOW_FLASH_SHIFT);
++ if (value) /* enable all the flash interrupt in PIC */
++ lo |= (CS5536_FLASH_INTR << PIC_YSEL_LOW_FLASH_SHIFT);
++ _wrmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), hi, lo);
++ break;
++ case PCI_NAND_FLASH_TDATA_REG:
++ _wrmsr(DIVIL_MSR_REG(NANDF_DATA), hi, lo);
++ break;
++ case PCI_NAND_FLASH_TCTRL_REG:
++ lo &= 0x00000fff;
++ _wrmsr(DIVIL_MSR_REG(NANDF_CTRL), hi, lo);
++ break;
++ case PCI_NAND_FLASH_RSVD_REG:
++ _wrmsr(DIVIL_MSR_REG(NANDF_RSVD), hi, lo);
++ break;
++ case PCI_FLASH_SELECT_REG:
++ if (value == CS5536_IDE_FLASH_SIGNATURE) {
++ _rdmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), &hi, &lo);
++ lo &= ~0x01;
++ _wrmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), hi, lo);
++ }
++ break;
++ default:
++ break;
++ }
++
++ return;
++}
++
++u32 pci_flash_read_bar(int n)
++{
++ u32 hi, lo;
++ u32 conf_data = 0;
++
++ _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo);
++ if (lo & (SOFT_BAR_FLSH0_FLAG << n)) {
++ conf_data = CS5536_FLSH_RANGE | PCI_BASE_ADDRESS_SPACE_MEMORY;
++ lo &= ~(SOFT_BAR_FLSH0_FLAG << n);
++ _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
++ } else {
++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_FLSH0 + n), &hi, &lo);
++ conf_data = lo;
++ conf_data &= ~0x0f;
++ }
++
++ return conf_data;
++}
++
++u32 pci_flash_read_reg(int reg)
++{
++ u32 conf_data = 0;
++ u32 hi, lo;
++
++ switch (reg) {
++ case PCI_VENDOR_ID:
++ conf_data =
++ CFG_PCI_VENDOR_ID(CS5536_FLASH_DEVICE_ID, CS5536_VENDOR_ID);
++ break;
++ case PCI_COMMAND:
++ /* we just read one lbar for returning. */
++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_FLSH0), &hi, &lo);
++ if (hi & 0x1)
++ conf_data |= PCI_COMMAND_MEMORY;
++ break;
++ case PCI_STATUS:
++ conf_data |= PCI_STATUS_66MHZ;
++ conf_data |= 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;
++ break;
++ case PCI_CLASS_REVISION:
++ _rdmsr(DIVIL_MSR_REG(DIVIL_CAP), &hi, &lo);
++ conf_data = lo & 0x000000ff;
++ conf_data |= (CS5536_FLASH_CLASS_CODE << 8);
++ break;
++ case PCI_CACHE_LINE_SIZE:
++ conf_data =
++ CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE,
++ PCI_NORMAL_LATENCY_TIMER);
++ break;
++ case PCI_BAR0_REG:
++ return pci_flash_read_bar(0);
++ break;
++ case PCI_BAR1_REG:
++ return pci_flash_read_bar(1);
++ break;
++ case PCI_BAR2_REG:
++ return pci_flash_read_bar(2);
++ break;
++ case PCI_BAR3_REG:
++ return pci_flash_read_bar(3);
++ break;
++ case PCI_CARDBUS_CIS:
++ conf_data = PCI_CARDBUS_CIS_POINTER;
++ break;
++ case PCI_SUBSYSTEM_VENDOR_ID:
++ conf_data =
++ CFG_PCI_VENDOR_ID(CS5536_FLASH_SUB_ID,
++ CS5536_SUB_VENDOR_ID);
++ break;
++ case PCI_ROM_ADDRESS:
++ conf_data = PCI_EXPANSION_ROM_BAR;
++ break;
++ case PCI_CAPABILITY_LIST:
++ conf_data = PCI_CAPLIST_POINTER;
++ break;
++ case PCI_INTERRUPT_LINE:
++ conf_data =
++ CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_FLASH_INTR);
++ break;
++ case PCI_NAND_FLASH_TDATA_REG:
++ _rdmsr(DIVIL_MSR_REG(NANDF_DATA), &hi, &lo);
++ conf_data = lo;
++ break;
++ case PCI_NAND_FLASH_TCTRL_REG:
++ _rdmsr(DIVIL_MSR_REG(NANDF_CTRL), &hi, &lo);
++ conf_data = lo & 0x00000fff;
++ break;
++ case PCI_NAND_FLASH_RSVD_REG:
++ _rdmsr(DIVIL_MSR_REG(NANDF_RSVD), &hi, &lo);
++ conf_data = lo;
++ break;
++ case PCI_FLASH_SELECT_REG:
++ _rdmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), &hi, &lo);
++ conf_data = lo & 0x01;
++ break;
++ default:
++ break;
++ }
++ return 0;
++}
++
++#else /* CONFIG_CS5536_NOR_FLASH */
++
++void pci_flash_write_bar(int n, u32 value)
++{
++ u32 hi = 0, lo = value;
++
++ if (value == PCI_BAR_RANGE_MASK) {
++ _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo);
++ lo |= (SOFT_BAR_FLSH0_FLAG << n);
++ _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
++ } else if (value & 0x01) {
++ /* IO space of 16bytes nor flash */
++ hi = 0x0000fff1;
++ lo &= CS5536_FLSH_RANGE;
++ _wrmsr(DIVIL_MSR_REG(DIVIL_LBAR_FLSH0 + n), hi, lo);
++
++ /* RCONFx used for 16bytes reserved. */
++ hi = ((value & 0x000ffffc) << 12) | ((CS5536_FLSH_LENGTH - 4)
++ << 12) | 0x01;
++ lo = ((value & 0x000ffffc) << 12) | 0x01;
++ _wrmsr(SB_MSR_REG(SB_R6 + n), hi, lo);
++ }
++ return;
++}
++
++void pci_flash_write_reg(int reg, u32 value)
++{
++ u32 hi = 0, lo = value;
++
++ switch (reg) {
++ case PCI_COMMAND:
++ if (value & PCI_COMMAND_IO)
++ flash_lbar_enable();
++ else
++ flash_lbar_disable();
++ break;
++ case PCI_STATUS:
++ if (value & PCI_STATUS_PARITY) {
++ _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo);
++ if (lo & SB_PARE_ERR_FLAG) {
++ lo = (lo & 0x0000ffff) | SB_PARE_ERR_FLAG;
++ _wrmsr(SB_MSR_REG(SB_ERROR), hi, lo);
++ }
++ }
++ break;
++ case PCI_BAR0_REG:
++ pci_flash_write_bar(0, value);
++ break;
++ case PCI_BAR1_REG:
++ pci_flash_write_bar(1, value);
++ break;
++ case PCI_BAR2_REG:
++ pci_flash_write_bar(2, value);
++ break;
++ case PCI_BAR3_REG:
++ pci_flash_write_bar(3, value);
++ break;
++ case PCI_FLASH_INT_REG:
++ _rdmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), &hi, &lo);
++ /* disable all the flash interrupt in PIC */
++ lo &= ~(0xf << PIC_YSEL_LOW_FLASH_SHIFT);
++ if (value) /* enable all the flash interrupt in PIC */
++ lo |= (CS5536_FLASH_INTR << PIC_YSEL_LOW_FLASH_SHIFT);
++ _wrmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), hi, lo);
++ break;
++ case PCI_NOR_FLASH_CTRL_REG:
++ lo &= 0x000000ff;
++ _wrmsr(DIVIL_MSR_REG(NORF_CTRL), hi, lo);
++ break;
++ case PCI_NOR_FLASH_T01_REG:
++ _wrmsr(DIVIL_MSR_REG(NORF_T01), hi, lo);
++ break;
++ case PCI_NOR_FLASH_T23_REG:
++ _wrmsr(DIVIL_MSR_REG(NORF_T23), hi, lo);
++ break;
++ case PCI_FLASH_SELECT_REG:
++ if (value == CS5536_IDE_FLASH_SIGNATURE) {
++ _rdmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), &hi, &lo);
++ lo &= ~0x01;
++ _wrmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), hi, lo);
++ }
++ break;
++ default:
++ break;
++ }
++ return;
++}
++
++u32 pci_flash_read_bar(int n)
++{
++ u32 hi, lo;
++ u32 conf_data = 0;
++
++ _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo);
++ if (lo & (SOFT_BAR_FLSH0_FLAG << n)) {
++ conf_data = CS5536_FLSH_RANGE | PCI_BASE_ADDRESS_SPACE_IO;
++ lo &= ~(SOFT_BAR_FLSH0_FLAG << n);
++ _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
++ } else {
++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_FLSH0 + n), &hi, &lo);
++ conf_data = lo & 0x0000ffff;
++ conf_data |= 0x01;
++ conf_data &= ~0x02;
++ }
++
++ return conf_data;
++}
++
++u32 pci_flash_read_reg(int reg)
++{
++ u32 conf_data = 0;
++ u32 hi, lo;
++
++ switch (reg) {
++ case PCI_VENDOR_ID:
++ conf_data =
++ CFG_PCI_VENDOR_ID(CS5536_FLASH_DEVICE_ID, CS5536_VENDOR_ID);
++ break;
++ case PCI_COMMAND:
++ /* we just check one flash bar for returning. */
++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_FLSH0), &hi, &lo);
++ if (hi & PCI_COMMAND_IO)
++ conf_data |= PCI_COMMAND_IO;
++ break;
++ case PCI_STATUS:
++ conf_data |= PCI_STATUS_66MHZ;
++ conf_data |= 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;
++ break;
++ case PCI_CLASS_REVISION:
++ _rdmsr(DIVIL_MSR_REG(DIVIL_CAP), &hi, &lo);
++ conf_data = lo & 0x000000ff;
++ conf_data |= (CS5536_FLASH_CLASS_CODE << 8);
++ break;
++ case PCI_CACHE_LINE_SIZE:
++ conf_data =
++ CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE,
++ PCI_NORMAL_LATENCY_TIMER);
++ break;
++ case PCI_BAR0_REG:
++ return pci_flash_read_bar(0);
++ break;
++ case PCI_BAR1_REG:
++ return pci_flash_read_bar(1);
++ break;
++ case PCI_BAR2_REG:
++ return pci_flash_read_bar(2);
++ break;
++ case PCI_BAR3_REG:
++ return pci_flash_read_bar(3);
++ break;
++ case PCI_CARDBUS_CIS:
++ conf_data = PCI_CARDBUS_CIS_POINTER;
++ break;
++ case PCI_SUBSYSTEM_VENDOR_ID:
++ conf_data =
++ CFG_PCI_VENDOR_ID(CS5536_FLASH_SUB_ID,
++ CS5536_SUB_VENDOR_ID);
++ break;
++ case PCI_ROM_ADDRESS:
++ conf_data = PCI_EXPANSION_ROM_BAR;
++ break;
++ case PCI_CAPABILITY_LIST:
++ conf_data = PCI_CAPLIST_POINTER;
++ break;
++ case PCI_INTERRUPT_LINE:
++ conf_data =
++ CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_FLASH_INTR);
++ break;
++ case PCI_NOR_FLASH_CTRL_REG:
++ _rdmsr(DIVIL_MSR_REG(NORF_CTRL), &hi, &lo);
++ conf_data = lo & 0x000000ff;
++ break;
++ case PCI_NOR_FLASH_T01_REG:
++ _rdmsr(DIVIL_MSR_REG(NORF_T01), &hi, &lo);
++ conf_data = lo;
++ break;
++ case PCI_NOR_FLASH_T23_REG:
++ _rdmsr(DIVIL_MSR_REG(NORF_T23), &hi, &lo);
++ conf_data = lo;
++ break;
++ default:
++ break;
++ }
++ return conf_data;
++}
++#endif /* CONFIG_CS5536_NOR_FLASH */
+diff -Nur linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_ide.c rt4ls/arch/mips/loongson/common/cs5536/cs5536_ide.c
+--- linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_ide.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/cs5536/cs5536_ide.c 2009-06-12 16:27:08.774444476 +0200
+@@ -0,0 +1,194 @@
++/*
++ * the IDE Virtual Support Module of AMD CS5536
++ *
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author : jlliu, liujl@lemote.com
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * Author: Wu Zhangjin, wuzj@lemote.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 <cs5536/cs5536.h>
++#include <cs5536/cs5536_pci.h>
++
++/*
++ * ide_write : ide write transfering
++ */
++void pci_ide_write_reg(int reg, u32 value)
++{
++ u32 hi = 0, lo = value;
++
++ switch (reg) {
++ case PCI_COMMAND:
++ _rdmsr(GLIU_MSR_REG(GLIU_PAE), &hi, &lo);
++ if (value & PCI_COMMAND_MASTER)
++ lo |= (0x03 << 4);
++ else
++ lo &= ~(0x03 << 4);
++ _wrmsr(GLIU_MSR_REG(GLIU_PAE), hi, lo);
++ break;
++ case PCI_STATUS:
++ if (value & PCI_STATUS_PARITY) {
++ _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo);
++ if (lo & SB_PARE_ERR_FLAG) {
++ lo = (lo & 0x0000ffff) | SB_PARE_ERR_FLAG;
++ _wrmsr(SB_MSR_REG(SB_ERROR), hi, lo);
++ }
++ }
++ break;
++ case PCI_CACHE_LINE_SIZE:
++ value &= 0x0000ff00;
++ _rdmsr(SB_MSR_REG(SB_CTRL), &hi, &lo);
++ hi &= 0xffffff00;
++ hi |= (value >> 8);
++ _wrmsr(SB_MSR_REG(SB_CTRL), hi, lo);
++ break;
++ case PCI_BAR4_REG:
++ if (value == PCI_BAR_RANGE_MASK) {
++ _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo);
++ lo |= SOFT_BAR_IDE_FLAG;
++ _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
++ } else if (value & 0x01) {
++ lo = (value & 0xfffffff0) | 0x1;
++ _wrmsr(IDE_MSR_REG(IDE_IO_BAR), hi, lo);
++
++ value &= 0xfffffffc;
++ hi = 0x60000000 | ((value & 0x000ff000) >> 12);
++ lo = 0x000ffff0 | ((value & 0x00000fff) << 20);
++ _wrmsr(GLIU_MSR_REG(GLIU_IOD_BM2), hi, lo);
++ }
++ break;
++ case PCI_IDE_CFG_REG:
++ if (value == CS5536_IDE_FLASH_SIGNATURE) {
++ _rdmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), &hi, &lo);
++ lo |= 0x01;
++ _wrmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), hi, lo);
++ } else
++ _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;
++ default:
++ break;
++ }
++
++ return;
++}
++
++/*
++ * ide_read : ide read tranfering.
++ */
++u32 pci_ide_read_reg(int reg)
++{
++ u32 conf_data = 0;
++ u32 hi, lo;
++
++ switch (reg) {
++ case PCI_VENDOR_ID:
++ conf_data =
++ 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;
++ _rdmsr(GLIU_MSR_REG(GLIU_PAE), &hi, &lo);
++ if ((lo & 0x30) == 0x30)
++ conf_data |= PCI_COMMAND_MASTER;
++ break;
++ case PCI_STATUS:
++ conf_data |= PCI_STATUS_66MHZ;
++ conf_data |= 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;
++ break;
++ case PCI_CLASS_REVISION:
++ _rdmsr(IDE_MSR_REG(IDE_CAP), &hi, &lo);
++ conf_data = lo & 0x000000ff;
++ conf_data |= (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);
++ break;
++ case PCI_BAR0_REG:
++ case PCI_BAR1_REG:
++ case PCI_BAR2_REG:
++ case PCI_BAR3_REG:
++ 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 |
++ 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;
++ }
++ break;
++ case PCI_BAR5_REG:
++ break;
++ case PCI_CARDBUS_CIS:
++ conf_data = PCI_CARDBUS_CIS_POINTER;
++ break;
++ case PCI_SUBSYSTEM_VENDOR_ID:
++ conf_data =
++ CFG_PCI_VENDOR_ID(CS5536_IDE_SUB_ID, CS5536_SUB_VENDOR_ID);
++ break;
++ case PCI_ROM_ADDRESS:
++ conf_data = PCI_EXPANSION_ROM_BAR;
++ break;
++ case PCI_CAPABILITY_LIST:
++ conf_data = 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;
++ break;
++ default:
++ break;
++ }
++
++ return conf_data;
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_isa.c rt4ls/arch/mips/loongson/common/cs5536/cs5536_isa.c
+--- linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_isa.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/cs5536/cs5536_isa.c 2009-06-12 16:27:08.774444476 +0200
+@@ -0,0 +1,376 @@
++/*
++ * the ISA Virtual Support Module of AMD CS5536
++ *
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author : jlliu, liujl@lemote.com
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * Author: Wu Zhangjin, wuzj@lemote.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 <cs5536/cs5536.h>
++#include <cs5536/cs5536_pci.h>
++
++/* common variables for PCI_ISA_READ/WRITE_BAR */
++static const u32 divil_msr_reg[6] = {
++ DIVIL_MSR_REG(DIVIL_LBAR_SMB), DIVIL_MSR_REG(DIVIL_LBAR_GPIO),
++ DIVIL_MSR_REG(DIVIL_LBAR_MFGPT), DIVIL_MSR_REG(DIVIL_LBAR_IRQ),
++ DIVIL_MSR_REG(DIVIL_LBAR_PMS), DIVIL_MSR_REG(DIVIL_LBAR_ACPI),
++};
++
++static const u32 soft_bar_flag[6] = {
++ SOFT_BAR_SMB_FLAG, SOFT_BAR_GPIO_FLAG, SOFT_BAR_MFGPT_FLAG,
++ SOFT_BAR_IRQ_FLAG, SOFT_BAR_PMS_FLAG, SOFT_BAR_ACPI_FLAG,
++};
++
++static const u32 sb_msr_reg[6] = {
++ SB_MSR_REG(SB_R0), SB_MSR_REG(SB_R1), SB_MSR_REG(SB_R2),
++ SB_MSR_REG(SB_R3), SB_MSR_REG(SB_R4), SB_MSR_REG(SB_R5),
++};
++
++static const u32 bar_space_range[6] = {
++ CS5536_SMB_RANGE, CS5536_GPIO_RANGE, CS5536_MFGPT_RANGE,
++ CS5536_IRQ_RANGE, CS5536_PMS_RANGE, CS5536_ACPI_RANGE,
++};
++
++static const int bar_space_len[6] = {
++ CS5536_SMB_LENGTH, CS5536_GPIO_LENGTH, CS5536_MFGPT_LENGTH,
++ CS5536_IRQ_LENGTH, CS5536_PMS_LENGTH, CS5536_ACPI_LENGTH,
++};
++
++/*
++ * enable the divil module bar space.
++ *
++ * For all the DIVIL module LBAR, you should control the DIVIL LBAR reg
++ * and the RCONFx(0~5) reg to use the modules.
++ */
++static void divil_lbar_enable(void)
++{
++ u32 hi, lo;
++ int offset;
++
++ /*
++ * The DIVIL IRQ is not used yet. and make the RCONF0 reserved.
++ */
++
++ 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);
++ }
++ return;
++}
++
++/*
++ * disable the divil module bar space.
++ */
++static void divil_lbar_disable(void)
++{
++ u32 hi, lo;
++ int offset;
++
++ 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);
++ }
++ return;
++}
++
++/*
++ * BAR write: write value to the n BAR
++ */
++
++void pci_isa_write_bar(int n, u32 value)
++{
++ u32 hi = 0, lo = value;
++
++ if (value == PCI_BAR_RANGE_MASK) {
++ _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo);
++ lo |= soft_bar_flag[n];
++ _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
++ } else if (value & 0x01) {
++ /* NATIVE reg */
++ hi = 0x0000f001;
++ lo &= bar_space_range[n];
++ _wrmsr(divil_msr_reg[n], hi, lo);
++
++ /* RCONFx is 4bytes in units for I/O space */
++ hi = ((value & 0x000ffffc) << 12) |
++ ((bar_space_len[n] - 4) << 12) | 0x01;
++ lo = ((value & 0x000ffffc) << 12) | 0x01;
++ _wrmsr(sb_msr_reg[n], hi, lo);
++ }
++
++ return;
++}
++
++/*
++ * BAR read: read the n BAR
++ */
++
++u32 pci_isa_read_bar(int n)
++{
++ u32 conf_data = 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;
++ 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;
++ }
++ return conf_data;
++}
++
++/*
++ * isa_write : isa write transfering.
++ * WE assume that the ISA is not the BUS MASTER.!!!
++ */
++/* FAST BACK TO BACK '1' for BUS MASTER '0' for BUS SALVE */
++/* COMMAND :
++ * bit0 : IO SPACE ENABLE
++ * bit1 : MEMORY SPACE ENABLE(ignore)
++ * bit2 : BUS MASTER ENABLE(ignore)
++ * bit3 : SPECIAL CYCLE(ignore)? default is ignored.
++ * bit4 : MEMORY WRITE and INVALIDATE(ignore)
++ * bit5 : VGA PALETTE(ignore)
++ * bit6 : PARITY ERROR(ignore)? : default is ignored.
++ * bit7 : WAIT CYCLE CONTROL(ignore)
++ * bit8 : SYSTEM ERROR(ignore)
++ * bit9 : FAST BACK TO BACK(ignore)
++ * bit10-bit15 : RESERVED
++ * STATUS :
++ * bit0-bit3 : RESERVED
++ * bit4 : CAPABILITY LIST(ignore)
++ * bit5 : 66MHZ CAPABLE
++ * bit6 : RESERVED
++ * bit7 : FAST BACK TO BACK(ignore)
++ * bit8 : DATA PARITY ERROR DETECED(ignore)
++ * bit9-bit10 : DEVSEL TIMING(ALL MEDIUM)
++ * bit11: SIGNALED TARGET ABORT
++ * bit12: RECEIVED TARGET ABORT
++ * bit13: RECEIVED MASTER ABORT
++ * bit14: SIGNALED SYSTEM ERROR
++ * bit15: DETECTED PARITY ERROR
++ */
++
++void pci_isa_write_reg(int reg, u32 value)
++{
++ u32 hi = 0, lo = value;
++ u32 temp;
++
++ switch (reg) {
++ case PCI_COMMAND:
++ if (value & PCI_COMMAND_IO)
++ divil_lbar_enable();
++ else
++ divil_lbar_disable();
++ break;
++ case PCI_STATUS:
++ _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo);
++ temp = lo & 0x0000ffff;
++ if ((value & PCI_STATUS_SIG_TARGET_ABORT) &&
++ (lo & SB_TAS_ERR_EN))
++ temp |= SB_TAS_ERR_FLAG;
++
++ if ((value & PCI_STATUS_REC_TARGET_ABORT) &&
++ (lo & SB_TAR_ERR_EN))
++ temp |= SB_TAR_ERR_FLAG;
++
++ if ((value & PCI_STATUS_REC_MASTER_ABORT)
++ && (lo & SB_MAR_ERR_EN))
++ temp |= SB_MAR_ERR_FLAG;
++
++ if ((value & PCI_STATUS_DETECTED_PARITY)
++ && (lo & SB_PARE_ERR_EN))
++ temp |= SB_PARE_ERR_FLAG;
++
++ lo = temp;
++ _wrmsr(SB_MSR_REG(SB_ERROR), hi, lo);
++ break;
++ case PCI_CACHE_LINE_SIZE:
++ value &= 0x0000ff00;
++ _rdmsr(SB_MSR_REG(SB_CTRL), &hi, &lo);
++ hi &= 0xffffff00;
++ hi |= (value >> 8);
++ _wrmsr(SB_MSR_REG(SB_CTRL), hi, lo);
++ break;
++ case PCI_BAR0_REG:
++ pci_isa_write_bar(0, value);
++ break;
++ case PCI_BAR1_REG:
++ pci_isa_write_bar(1, value);
++ break;
++ case PCI_BAR2_REG:
++ pci_isa_write_bar(2, value);
++ break;
++ case PCI_BAR3_REG:
++ pci_isa_write_bar(3, value);
++ break;
++ case PCI_BAR4_REG:
++ pci_isa_write_bar(4, value);
++ break;
++ case PCI_BAR5_REG:
++ pci_isa_write_bar(5, value);
++ break;
++ case PCI_UART1_INT_REG:
++ _rdmsr(DIVIL_MSR_REG(PIC_YSEL_HIGH), &hi, &lo);
++ /* disable uart1 interrupt in PIC */
++ lo &= ~(0xf << 24);
++ if (value) /* enable uart1 interrupt in PIC */
++ lo |= (CS5536_UART1_INTR << 24);
++ _wrmsr(DIVIL_MSR_REG(PIC_YSEL_HIGH), hi, lo);
++ break;
++ case PCI_UART2_INT_REG:
++ _rdmsr(DIVIL_MSR_REG(PIC_YSEL_HIGH), &hi, &lo);
++ /* disable uart2 interrupt in PIC */
++ lo &= ~(0xf << 28);
++ if (value) /* enable uart2 interrupt in PIC */
++ lo |= (CS5536_UART2_INTR << 28);
++ _wrmsr(DIVIL_MSR_REG(PIC_YSEL_HIGH), hi, lo);
++ break;
++ case PCI_ISA_FIXUP_REG:
++ if (value) {
++ /* enable the TARGET ABORT/MASTER ABORT etc. */
++ _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo);
++ lo |= 0x00000063;
++ _wrmsr(SB_MSR_REG(SB_ERROR), hi, lo);
++ }
++
++ default:
++ /* ALL OTHER PCI CONFIG SPACE HEADER IS NOT IMPLEMENTED. */
++ break;
++ }
++
++ return;
++}
++
++/*
++ * isa_read : isa read transfering.
++ * we assume that the ISA is not the BUS MASTER.
++ */
++
++ /* COMMAND :
++ * bit0 : IO SPACE ENABLE
++ * bit1 : MEMORY SPACE ENABLE(ignore)
++ * bit2 : BUS MASTER ENABLE(ignore)
++ * bit3 : SPECIAL CYCLE(ignore)? default is ignored.
++ * bit4 : MEMORY WRITE and INVALIDATE(ignore)
++ * bit5 : VGA PALETTE(ignore)
++ * bit6 : PARITY ERROR(ignore)? : default is ignored.
++ * bit7 : WAIT CYCLE CONTROL(ignore)
++ * bit8 : SYSTEM ERROR(ignore)
++ * bit9 : FAST BACK TO BACK(ignore)
++ * bit10-bit15 : RESERVED
++ * STATUS :
++ * bit0-bit3 : RESERVED
++ * bit4 : CAPABILITY LIST(ignore)
++ * bit5 : 66MHZ CAPABLE
++ * bit6 : RESERVED
++ * bit7 : FAST BACK TO BACK(ignore)
++ * bit8 : DATA PARITY ERROR DETECED(ignore)?
++ * bit9-bit10 : DEVSEL TIMING(ALL MEDIUM)
++ * bit11: SIGNALED TARGET ABORT
++ * bit12: RECEIVED TARGET ABORT
++ * bit13: RECEIVED MASTER ABORT
++ * bit14: SIGNALED SYSTEM ERROR
++ * bit15: DETECTED PARITY ERROR(?)
++ */
++
++u32 pci_isa_read_reg(int reg)
++{
++ u32 conf_data = 0;
++ u32 hi, lo;
++
++ switch (reg) {
++ case PCI_VENDOR_ID:
++ conf_data =
++ 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;
++ break;
++ case PCI_STATUS:
++ conf_data |= PCI_STATUS_66MHZ;
++ conf_data |= PCI_STATUS_DEVSEL_MEDIUM;
++ conf_data |= 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;
++ if (lo & SB_TAR_ERR_FLAG)
++ conf_data |= PCI_STATUS_REC_TARGET_ABORT;
++ if (lo & SB_MAR_ERR_FLAG)
++ conf_data |= PCI_STATUS_REC_MASTER_ABORT;
++ if (lo & SB_PARE_ERR_FLAG)
++ conf_data |= 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);
++ 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);
++ break;
++ /*
++ * we only use the LBAR of DIVIL, no RCONF used.
++ * all of them are IO space.
++ */
++ case PCI_BAR0_REG:
++ return pci_isa_read_bar(0);
++ break;
++ case PCI_BAR1_REG:
++ return pci_isa_read_bar(1);
++ break;
++ case PCI_BAR2_REG:
++ return pci_isa_read_bar(2);
++ break;
++ case PCI_BAR3_REG:
++ break;
++ case PCI_BAR4_REG:
++ return pci_isa_read_bar(4);
++ break;
++ case PCI_BAR5_REG:
++ return pci_isa_read_bar(5);
++ break;
++ case PCI_CARDBUS_CIS:
++ conf_data = PCI_CARDBUS_CIS_POINTER;
++ break;
++ case PCI_SUBSYSTEM_VENDOR_ID:
++ conf_data =
++ CFG_PCI_VENDOR_ID(CS5536_ISA_SUB_ID, CS5536_SUB_VENDOR_ID);
++ break;
++ case PCI_ROM_ADDRESS:
++ conf_data = PCI_EXPANSION_ROM_BAR;
++ break;
++ case PCI_CAPABILITY_LIST:
++ conf_data = PCI_CAPLIST_POINTER;
++ break;
++ case PCI_INTERRUPT_LINE:
++ /* no interrupt used here */
++ conf_data = CFG_PCI_INTERRUPT_LINE(0x00, 0x00);
++ break;
++ default:
++ break;
++ }
++
++ return conf_data;
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c rt4ls/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c
+--- linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c 2009-06-12 16:27:08.774444476 +0200
+@@ -0,0 +1,257 @@
++/*
++ * CS5536 General timer functions
++ *
++ * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
++ * Author: Yanhua, yanh@lemote.com
++ *
++ * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
++ * Author: Wu zhangjin, wuzj@lemote.com
++ *
++ * Reference: 'AMD Geode(TM) CS5536 Companion Device Data Book'
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/io.h>
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/jiffies.h>
++#include <linux/spinlock.h>
++#include <linux/interrupt.h>
++#include <linux/clockchips.h>
++
++#include <asm/time.h>
++
++#include <cs5536/cs5536_mfgpt.h>
++
++DEFINE_SPINLOCK(mfgpt_lock);
++EXPORT_SYMBOL(mfgpt_lock);
++
++static u32 mfgpt_base;
++
++/*
++ * Initialize the MFGPT timer.
++ *
++ * This is also called after resume to bring the MFGPT into operation again.
++ */
++/* setup register bit fields:
++ * 15: counter enable
++ * 14: compare2 output status, write 1 to clear when in event mode
++ * 13: compare1 output status
++ * 12: setup(ro)
++ * 11: stop enable, stop on sleep
++ * 10: external enable
++ * 9:8 compare2 mode; 00: disable, 01: compare on equal; 10: compare on GE,
++ * 11 event: GE + irq
++ * 7:6 compare1 mode
++ * 5: reverse enable, bit reverse of the counter
++ * 4: clock select. 0: 32KHz, 1: 14.318MHz
++ * 3:0 counter prescaler scale factor.
++ * select the input clock divide-by value. 2^n
++ * bit 11:0 is write once
++ */
++
++static void init_mfgpt_timer(enum clock_event_mode mode,
++ struct clock_event_device *evt)
++{
++ spin_lock(&mfgpt_lock);
++
++ switch (mode) {
++ case CLOCK_EVT_MODE_PERIODIC:
++ outw(COMPARE, MFGPT0_CMP2); /* set comparator2 */
++ outw(0, MFGPT0_CNT); /* set counter to 0 */
++ /* enable counter, comparator2 to event mode, 14.318MHz clock */
++ outw(0xe310, MFGPT0_SETUP);
++ break;
++
++ case CLOCK_EVT_MODE_SHUTDOWN:
++ case CLOCK_EVT_MODE_UNUSED:
++ if (evt->mode == CLOCK_EVT_MODE_PERIODIC ||
++ evt->mode == CLOCK_EVT_MODE_ONESHOT) {
++ /* disable counter */
++ outw(inw(MFGPT0_SETUP) & 0x7fff, MFGPT0_SETUP);
++ }
++ break;
++
++ case CLOCK_EVT_MODE_ONESHOT:
++ /* One shot setup */
++ outw(0xe300, MFGPT0_SETUP);
++ break;
++
++ case CLOCK_EVT_MODE_RESUME:
++ /* Nothing to do here */
++ break;
++ }
++ spin_unlock(&mfgpt_lock);
++}
++
++/*
++ * Program the next event in oneshot mode
++ *
++ * Delta is given in MFGPT ticks
++ */
++static int mfgpt_next_event(unsigned long delta, struct clock_event_device *evt)
++{
++ spin_lock(&mfgpt_lock);
++ outw(delta & 0xffff, MFGPT0_CMP2); /* set comparator2 */
++ outw(0, MFGPT0_CNT); /* set counter to 0 */
++ spin_unlock(&mfgpt_lock);
++
++ return 0;
++}
++
++static struct clock_event_device mfgpt_clockevent = {
++ .name = "mfgpt",
++ .features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_MODE_ONESHOT,
++ .set_mode = init_mfgpt_timer,
++ .set_next_event = mfgpt_next_event,
++ .irq = CS5536_MFGPT_INTR,
++};
++
++static irqreturn_t timer_interrupt(int irq, void *dev_id)
++{
++ u32 basehi;
++
++ /*
++ * get MFGPT base address
++ *
++ * NOTE: do not remove me, it's need for the value of mfgpt_base is
++ * variable
++ */
++ _rdmsr(CS5536_DIVIL_MSR_BASE + DIVIL_LBAR_MFGPT, &basehi, &mfgpt_base);
++
++ /* ack */
++ outw(inw(MFGPT0_SETUP) | 0x4000, MFGPT0_SETUP);
++
++ mfgpt_clockevent.event_handler(&mfgpt_clockevent);
++
++ return IRQ_HANDLED;
++}
++
++static struct irqaction irq5 = {
++ .handler = timer_interrupt,
++ .flags = IRQF_DISABLED | IRQF_NOBALANCING,
++ .name = "timer"
++};
++
++/*
++ * Initialize the conversion factor and the min/max deltas of the clock event
++ * structure and register the clock event source with the framework.
++ */
++void __init setup_mfgpt_timer(void)
++{
++ u32 basehi;
++ struct clock_event_device *cd = &mfgpt_clockevent;
++ unsigned int cpu = smp_processor_id();
++
++ cd->cpumask = cpumask_of(cpu);
++ clockevent_set_clock(cd, MFGPT_TICK_RATE);
++ cd->max_delta_ns = clockevent_delta2ns(0xffff, cd);
++ cd->min_delta_ns = clockevent_delta2ns(0xf, cd);
++
++ /* Enable MFGPT0 Comparator 2 Output to the Interrupt Mapper */
++ _wrmsr(CS5536_DIVIL_MSR_BASE + MFGPT_IRQ, 0, 0x100);
++
++ /* Enable Interrupt Gate 5 */
++ _wrmsr(CS5536_DIVIL_MSR_BASE + PIC_ZSEL_LOW, 0, 0x50000);
++
++ /* get MFGPT base address */
++ _rdmsr(CS5536_DIVIL_MSR_BASE + DIVIL_LBAR_MFGPT, &basehi, &mfgpt_base);
++
++ irq5.mask = cpumask_of_cpu(cpu);
++
++ clockevents_register_device(cd);
++
++ setup_irq(CS5536_MFGPT_INTR, &irq5);
++}
++
++/*
++ * Since the MFGPT overflows every tick, its not very useful
++ * to just read by itself. So use jiffies to emulate a free
++ * running counter:
++ */
++static cycle_t mfgpt_read(struct clocksource *cs)
++{
++ unsigned long flags;
++ int count;
++ u32 jifs;
++ static int old_count;
++ static u32 old_jifs;
++
++ spin_lock_irqsave(&mfgpt_lock, flags);
++ /*
++ * Although our caller may have the read side of xtime_lock,
++ * this is now a seqlock, and we are cheating in this routine
++ * by having side effects on state that we cannot undo if
++ * there is a collision on the seqlock and our caller has to
++ * retry. (Namely, old_jifs and old_count.) So we must treat
++ * jiffies as volatile despite the lock. We read jiffies
++ * before latching the timer count to guarantee that although
++ * the jiffies value might be older than the count (that is,
++ * the counter may underflow between the last point where
++ * jiffies was incremented and the point where we latch the
++ * count), it cannot be newer.
++ */
++ jifs = jiffies;
++ /* latch the counter */
++ outw(inw(MFGPT0_SETUP) | 0x0200, MFGPT0_SETUP);
++ /* read the latched count */
++ count = inw(MFGPT0_CNT);
++ /* restart the counter */
++ outw(inw(MFGPT0_SETUP) & 0xfdff, MFGPT0_SETUP);
++
++ /* reset the latch if count > max + 1 */
++ if (count > COMPARE) {
++ /* set comparator2 */
++ outw(COMPARE, MFGPT0_CMP2);
++ /* set counter to 0 */
++ outw(0, MFGPT0_CNT);
++ /* enable counter, comparator2 to event mode, 14.318MHz clock */
++ outw(0xe310, MFGPT0_SETUP);
++
++ count = COMPARE - 1;
++ }
++
++ /*
++ * It's possible for count to appear to go the wrong way for this
++ * reason:
++ *
++ * The timer counter underflows, but we haven't handled the resulting
++ * interrupt and incremented jiffies yet.
++ *
++ * Previous attempts to handle these cases intelligently were buggy, so
++ * we just do the simple thing now.
++ */
++ if (count > old_count && jifs == old_jifs)
++ count = old_count;
++
++ old_count = count;
++ old_jifs = jifs;
++
++ spin_unlock_irqrestore(&mfgpt_lock, flags);
++
++ return (cycle_t) (jifs * COMPARE) + count;
++}
++
++static struct clocksource clocksource_mfgpt = {
++ .name = "mfgpt",
++ .rating = 120, /* Functional for real use, but not desired */
++ .read = mfgpt_read,
++ .mask = CLOCKSOURCE_MASK(32),
++ .mult = 0,
++ .shift = 22,
++};
++
++int __init init_mfgpt_clocksource(void)
++{
++ if (num_possible_cpus() > 1) /* MFGPT does not scale! */
++ return 0;
++
++ clocksource_mfgpt.mult = clocksource_hz2mult(MFGPT_TICK_RATE, 22);
++ return clocksource_register(&clocksource_mfgpt);
++}
++
++arch_initcall(init_mfgpt_clocksource);
+diff -Nur linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_ohci.c rt4ls/arch/mips/loongson/common/cs5536/cs5536_ohci.c
+--- linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_ohci.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/cs5536/cs5536_ohci.c 2009-06-12 16:27:08.778446663 +0200
+@@ -0,0 +1,168 @@
++/*
++ * the OHCI Virtual Support Module of AMD CS5536
++ *
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author : jlliu, liujl@lemote.com
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * Author: Wu Zhangjin, wuzj@lemote.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 <cs5536/cs5536.h>
++#include <cs5536/cs5536_pci.h>
++
++/*
++ * ohci_write : ohci write transfering.
++ */
++void pci_ohci_write_reg(int reg, u32 value)
++{
++ u32 hi = 0, lo = value;
++
++ switch (reg) {
++ case PCI_COMMAND:
++ _rdmsr(USB_MSR_REG(USB_OHCI), &hi, &lo);
++ if (value & PCI_COMMAND_MASTER)
++ hi |= PCI_COMMAND_MASTER;
++ else
++ hi &= ~PCI_COMMAND_MASTER;
++
++ if (value & PCI_COMMAND_MEMORY)
++ hi |= PCI_COMMAND_MEMORY;
++ else
++ hi &= ~PCI_COMMAND_MEMORY;
++ _wrmsr(USB_MSR_REG(USB_OHCI), hi, lo);
++ break;
++ case PCI_STATUS:
++ if (value & PCI_STATUS_PARITY) {
++ _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo);
++ if (lo & SB_PARE_ERR_FLAG) {
++ lo = (lo & 0x0000ffff) | SB_PARE_ERR_FLAG;
++ _wrmsr(SB_MSR_REG(SB_ERROR), hi, lo);
++ }
++ }
++ break;
++ case PCI_BAR0_REG:
++ if (value == PCI_BAR_RANGE_MASK) {
++ _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo);
++ lo |= SOFT_BAR_OHCI_FLAG;
++ _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
++ } else if ((value & 0x01) == 0x00) {
++ _wrmsr(USB_MSR_REG(USB_OHCI), hi, lo);
++
++ value &= 0xfffffff0;
++ hi = 0x40000000 | ((value & 0xff000000) >> 24);
++ lo = 0x000fffff | ((value & 0x00fff000) << 8);
++ _wrmsr(GLIU_MSR_REG(GLIU_P2D_BM3), hi, lo);
++ }
++ break;
++ case PCI_INTERRUPT_LINE:
++ value &= 0x000000ff;
++ break;
++ case PCI_OHCI_PM_REG:
++ break;
++ case PCI_OHCI_INT_REG:
++ _rdmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), &hi, &lo);
++ lo &= ~(0xf << PIC_YSEL_LOW_USB_SHIFT);
++ if (value) /* enable all the usb interrupt in PIC */
++ lo |= (CS5536_USB_INTR << PIC_YSEL_LOW_USB_SHIFT);
++ _wrmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), hi, lo);
++ break;
++ default:
++ break;
++ }
++
++ return;
++}
++
++/*
++ * ohci_read : ohci read transfering.
++ */
++u32 pci_ohci_read_reg(int reg)
++{
++ u32 conf_data = 0;
++ u32 hi, lo;
++
++ switch (reg) {
++ case PCI_VENDOR_ID:
++ conf_data =
++ 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;
++ if (hi & PCI_COMMAND_MEMORY)
++ conf_data |= PCI_COMMAND_MEMORY;
++ break;
++ case PCI_STATUS:
++ conf_data |= PCI_STATUS_66MHZ;
++ conf_data |= 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;
++ break;
++ case PCI_CLASS_REVISION:
++ _rdmsr(USB_MSR_REG(USB_CAP), &hi, &lo);
++ conf_data = lo & 0x000000ff;
++ conf_data |= (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);
++ 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 |
++ 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 */
++ }
++ break;
++ case PCI_BAR1_REG:
++ case PCI_BAR2_REG:
++ case PCI_BAR3_REG:
++ case PCI_BAR4_REG:
++ case PCI_BAR5_REG:
++ break;
++ case PCI_CARDBUS_CIS:
++ conf_data = PCI_CARDBUS_CIS_POINTER;
++ break;
++ case PCI_SUBSYSTEM_VENDOR_ID:
++ conf_data =
++ CFG_PCI_VENDOR_ID(CS5536_OHCI_SUB_ID, CS5536_SUB_VENDOR_ID);
++ break;
++ case PCI_ROM_ADDRESS:
++ conf_data = PCI_EXPANSION_ROM_BAR;
++ break;
++ case PCI_CAPABILITY_LIST:
++ conf_data = PCI_CAPLIST_USB_POINTER;
++ break;
++ case PCI_INTERRUPT_LINE:
++ conf_data =
++ CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR);
++ break;
++ case PCI_OHCI_PM_REG:
++ break;
++ case PCI_OHCI_INT_REG:
++ _rdmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), &hi, &lo);
++ if ((lo & 0x00000f00) == CS5536_USB_INTR)
++ conf_data = 1;
++ break;
++ default:
++ break;
++ }
++
++ return conf_data;
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_otg.c rt4ls/arch/mips/loongson/common/cs5536/cs5536_otg.c
+--- linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_otg.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/cs5536/cs5536_otg.c 2009-06-12 16:27:08.778446663 +0200
+@@ -0,0 +1,138 @@
++/*
++ * the OTG Virtual Support Module of AMD CS5536
++ *
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author : jlliu, liujl@lemote.com
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * Author: Wu Zhangjin, wuzj@lemote.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 <cs5536/cs5536.h>
++#include <cs5536/cs5536_pci.h>
++
++void pci_otg_write_reg(int reg, u32 value)
++{
++ u32 hi = 0, lo = value;
++
++ switch (reg) {
++ case PCI_COMMAND:
++ _rdmsr(USB_MSR_REG(USB_OTG), &hi, &lo);
++ if (value & PCI_COMMAND_MEMORY)
++ hi |= PCI_COMMAND_MEMORY;
++ else
++ hi &= ~PCI_COMMAND_MEMORY;
++ _wrmsr(USB_MSR_REG(USB_OTG), hi, lo);
++ break;
++ case PCI_STATUS:
++ if (value & PCI_STATUS_PARITY) {
++ _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo);
++ if (lo & SB_PARE_ERR_FLAG) {
++ lo = (lo & 0x0000ffff) | SB_PARE_ERR_FLAG;
++ _wrmsr(SB_MSR_REG(SB_ERROR), hi, lo);
++ }
++ }
++ break;
++ case PCI_BAR0_REG:
++ if (value == PCI_BAR_RANGE_MASK) {
++ _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo);
++ lo |= SOFT_BAR_OTG_FLAG;
++ _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
++ } else if ((value & 0x01) == 0x00) {
++ _rdmsr(USB_MSR_REG(USB_OTG), &hi, &lo);
++ lo &= 0xffffff00;
++ _wrmsr(USB_MSR_REG(USB_OTG), hi, lo);
++
++ value &= 0xfffffff0;
++ hi = 0x40000000 | ((value & 0xff000000) >> 24);
++ lo = 0x000fffff | ((value & 0x00fff000) << 8);
++ _wrmsr(GLIU_MSR_REG(GLIU_P2D_BM1), hi, lo);
++ }
++ break;
++ default:
++ break;
++ }
++
++ return;
++}
++
++u32 pci_otg_read_reg(int reg)
++{
++ u32 conf_data = 0;
++ u32 hi, lo;
++
++ switch (reg) {
++ case PCI_VENDOR_ID:
++ conf_data =
++ CFG_PCI_VENDOR_ID(CS5536_OTG_DEVICE_ID, CS5536_VENDOR_ID);
++ break;
++ case PCI_COMMAND:
++ _rdmsr(USB_MSR_REG(USB_OTG), &hi, &lo);
++ if (hi & PCI_COMMAND_MEMORY)
++ conf_data |= PCI_COMMAND_MEMORY;
++ break;
++ case PCI_STATUS:
++ conf_data |= PCI_STATUS_66MHZ;
++ conf_data |= 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;
++ break;
++ case PCI_CLASS_REVISION:
++ _rdmsr(USB_MSR_REG(USB_CAP), &hi, &lo);
++ conf_data = lo & 0x000000ff;
++ conf_data |= (CS5536_OTG_CLASS_CODE << 8);
++ break;
++ case PCI_CACHE_LINE_SIZE:
++ conf_data =
++ 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_OTG_FLAG) {
++ conf_data = CS5536_OTG_RANGE |
++ PCI_BASE_ADDRESS_SPACE_MEMORY;
++ lo &= ~SOFT_BAR_OTG_FLAG;
++ _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
++ } else {
++ _rdmsr(USB_MSR_REG(USB_OTG), &hi, &lo);
++ conf_data = lo & 0xffffff00;
++ conf_data &= ~0x0000000f;
++ }
++ break;
++ case PCI_BAR1_REG:
++ case PCI_BAR2_REG:
++ case PCI_BAR3_REG:
++ case PCI_BAR4_REG:
++ case PCI_BAR5_REG:
++ break;
++ case PCI_CARDBUS_CIS:
++ conf_data = PCI_CARDBUS_CIS_POINTER;
++ break;
++ case PCI_SUBSYSTEM_VENDOR_ID:
++ conf_data =
++ CFG_PCI_VENDOR_ID(CS5536_OTG_SUB_ID, CS5536_SUB_VENDOR_ID);
++ break;
++ case PCI_ROM_ADDRESS:
++ conf_data = PCI_EXPANSION_ROM_BAR;
++ break;
++ case PCI_CAPABILITY_LIST:
++ conf_data = PCI_CAPLIST_USB_POINTER;
++ break;
++ case PCI_INTERRUPT_LINE:
++ conf_data =
++ CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR);
++ break;
++ default:
++ break;
++ }
++
++ return conf_data;
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_pci.c rt4ls/arch/mips/loongson/common/cs5536/cs5536_pci.c
+--- linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_pci.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/cs5536/cs5536_pci.c 2009-06-12 16:27:08.778446663 +0200
+@@ -0,0 +1,126 @@
++/*
++ * read/write operation to the PCI config space of CS5536
++ *
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author : jlliu, liujl@lemote.com
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * Author: Wu Zhangjin, wuzj@lemote.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.
++ *
++ * the Virtual Support Module(VSM) for virtulizing the PCI
++ * configure space are defined in cs5536_modulename.c respectively,
++ * so you can select modules which have been used in his/her board.
++ * to archive this, you just need to add a "select CS5536_[MODULE]"
++ * option in your board in arch/mips/loongson/Kconfig
++ *
++ * after this virtulizing, user can access the PCI configure space
++ * directly as a normal multi-function PCI device which following
++ * the PCI-2.2 spec.
++ */
++
++#include <linux/types.h>
++#include <cs5536/cs5536_vsm.h>
++
++enum {
++ CS5536_FUNC_START = -1,
++ CS5536_ISA_FUNC,
++ CS5536_FLASH_FUNC,
++ CS5536_IDE_FUNC,
++ CS5536_ACC_FUNC,
++ CS5536_OHCI_FUNC,
++ CS5536_EHCI_FUNC,
++ CS5536_UDC_FUNC,
++ CS5536_OTG_FUNC,
++ CS5536_FUNC_END,
++};
++
++/*
++ * write to PCI config space and transfer it to MSR write.
++ */
++void cs5536_pci_conf_write4(int function, int reg, u32 value)
++{
++ if ((function <= CS5536_FUNC_START) || (function >= CS5536_FUNC_END))
++ return;
++ if ((reg < 0) || (reg > 0x100) || ((reg & 0x03) != 0))
++ return;
++
++ switch (function) {
++ case CS5536_ISA_FUNC:
++ pci_isa_write_reg(reg, value);
++ break;
++ case CS5536_FLASH_FUNC:
++ pci_flash_write_reg(reg, value);
++ break;
++ case CS5536_IDE_FUNC:
++ pci_ide_write_reg(reg, value);
++ break;
++ case CS5536_ACC_FUNC:
++ pci_acc_write_reg(reg, value);
++ break;
++ case CS5536_OHCI_FUNC:
++ pci_ohci_write_reg(reg, value);
++ break;
++ case CS5536_EHCI_FUNC:
++ pci_ehci_write_reg(reg, value);
++ break;
++ case CS5536_UDC_FUNC:
++ pci_udc_write_reg(reg, value);
++ break;
++ case CS5536_OTG_FUNC:
++ pci_otg_write_reg(reg, value);
++ break;
++ default:
++ break;
++ }
++ return;
++}
++
++/*
++ * read PCI config space and transfer it to MSR access.
++ */
++u32 cs5536_pci_conf_read4(int function, int reg)
++{
++ u32 data = 0;
++
++ if ((function <= CS5536_FUNC_START) || (function >= CS5536_FUNC_END))
++ return 0;
++ if ((reg < 0) || ((reg & 0x03) != 0))
++ return 0;
++ if (reg > 0x100)
++ return 0xffffffff;
++
++ switch (function) {
++ case CS5536_ISA_FUNC:
++ data = pci_isa_read_reg(reg);
++ break;
++ case CS5536_FLASH_FUNC:
++ data = pci_flash_read_reg(reg);
++ break;
++ case CS5536_IDE_FUNC:
++ data = pci_ide_read_reg(reg);
++ break;
++ case CS5536_ACC_FUNC:
++ data = pci_acc_read_reg(reg);
++ break;
++ case CS5536_OHCI_FUNC:
++ data = pci_ohci_read_reg(reg);
++ break;
++ case CS5536_EHCI_FUNC:
++ data = pci_ehci_read_reg(reg);
++ break;
++ case CS5536_UDC_FUNC:
++ data = pci_udc_read_reg(reg);
++ break;
++ case CS5536_OTG_FUNC:
++ data = pci_otg_read_reg(reg);
++ break;
++ default:
++ break;
++ }
++ return data;
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_udc.c rt4ls/arch/mips/loongson/common/cs5536/cs5536_udc.c
+--- linux-2.6.30/arch/mips/loongson/common/cs5536/cs5536_udc.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/cs5536/cs5536_udc.c 2009-06-12 16:27:08.778446663 +0200
+@@ -0,0 +1,143 @@
++/*
++ * the UDC Virtual Support Module of AMD CS5536
++ *
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author : jlliu, liujl@lemote.com
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * Author: Wu Zhangjin, wuzj@lemote.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 <cs5536/cs5536.h>
++#include <cs5536/cs5536_pci.h>
++
++void pci_udc_write_reg(int reg, u32 value)
++{
++ u32 hi = 0, lo = value;
++
++ switch (reg) {
++ case PCI_COMMAND:
++ _rdmsr(USB_MSR_REG(USB_UDC), &hi, &lo);
++ if (value & PCI_COMMAND_MASTER)
++ hi |= PCI_COMMAND_MASTER;
++ else
++ hi &= ~PCI_COMMAND_MASTER;
++
++ if (value & PCI_COMMAND_MEMORY)
++ hi |= PCI_COMMAND_MEMORY;
++ else
++ hi &= ~PCI_COMMAND_MEMORY;
++ _wrmsr(USB_MSR_REG(USB_UDC), hi, lo);
++ break;
++ case PCI_STATUS:
++ if (value & PCI_STATUS_PARITY) {
++ _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo);
++ if (lo & SB_PARE_ERR_FLAG) {
++ lo = (lo & 0x0000ffff) | SB_PARE_ERR_FLAG;
++ _wrmsr(SB_MSR_REG(SB_ERROR), hi, lo);
++ }
++ }
++ break;
++ case PCI_BAR0_REG:
++ if (value == PCI_BAR_RANGE_MASK) {
++ _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo);
++ lo |= SOFT_BAR_UDC_FLAG;
++ _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
++ } else if ((value & 0x01) == 0x00) {
++ _wrmsr(USB_MSR_REG(USB_UDC), hi, lo);
++
++ value &= 0xfffffff0;
++ hi = 0x40000000 | ((value & 0xff000000) >> 24);
++ lo = 0x000fffff | ((value & 0x00fff000) << 8);
++ _wrmsr(GLIU_MSR_REG(GLIU_P2D_BM0), hi, lo);
++ }
++ break;
++ default:
++ break;
++ }
++
++ return;
++}
++
++u32 pci_udc_read_reg(int reg)
++{
++ u32 conf_data = 0;
++ u32 hi, lo;
++
++ switch (reg) {
++ case PCI_VENDOR_ID:
++ conf_data =
++ CFG_PCI_VENDOR_ID(CS5536_UDC_DEVICE_ID, CS5536_VENDOR_ID);
++ break;
++ case PCI_COMMAND:
++ _rdmsr(USB_MSR_REG(USB_UDC), &hi, &lo);
++ if (hi & PCI_COMMAND_MASTER)
++ conf_data |= PCI_COMMAND_MASTER;
++ if (hi & PCI_COMMAND_MEMORY)
++ conf_data |= PCI_COMMAND_MEMORY;
++ break;
++ case PCI_STATUS:
++ conf_data |= PCI_STATUS_66MHZ;
++ conf_data |= 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;
++ break;
++ case PCI_CLASS_REVISION:
++ _rdmsr(USB_MSR_REG(USB_CAP), &hi, &lo);
++ conf_data = lo & 0x000000ff;
++ conf_data |= (CS5536_UDC_CLASS_CODE << 8);
++ break;
++ case PCI_CACHE_LINE_SIZE:
++ conf_data =
++ 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_UDC_FLAG) {
++ conf_data = CS5536_UDC_RANGE |
++ PCI_BASE_ADDRESS_SPACE_MEMORY;
++ lo &= ~SOFT_BAR_UDC_FLAG;
++ _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo);
++ } else {
++ _rdmsr(USB_MSR_REG(USB_UDC), &hi, &lo);
++ conf_data = lo & 0xfffff000;
++ conf_data &= ~0x0000000f; /* 32bit mem */
++ }
++ break;
++ case PCI_BAR1_REG:
++ case PCI_BAR2_REG:
++ case PCI_BAR3_REG:
++ case PCI_BAR4_REG:
++ case PCI_BAR5_REG:
++ break;
++ case PCI_CARDBUS_CIS:
++ conf_data = PCI_CARDBUS_CIS_POINTER;
++ break;
++ case PCI_SUBSYSTEM_VENDOR_ID:
++ conf_data =
++ CFG_PCI_VENDOR_ID(CS5536_UDC_SUB_ID, CS5536_SUB_VENDOR_ID);
++ break;
++ case PCI_ROM_ADDRESS:
++ conf_data = PCI_EXPANSION_ROM_BAR;
++ break;
++ case PCI_CAPABILITY_LIST:
++ conf_data = PCI_CAPLIST_USB_POINTER;
++ break;
++ case PCI_INTERRUPT_LINE:
++ conf_data =
++ CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR);
++ break;
++ default:
++ break;
++ }
++
++ return conf_data;
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/early_printk.c rt4ls/arch/mips/loongson/common/early_printk.c
+--- linux-2.6.30/arch/mips/loongson/common/early_printk.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/early_printk.c 2009-06-12 16:27:08.778446663 +0200
+@@ -0,0 +1,28 @@
++/* early printk support
++ *
++ * Copyright (c) 2009 Philippe Vachon <philippe@cowpig.ca>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/types.h>
++#include <linux/serial_reg.h>
++
++#include <loongson.h>
++#include <machine.h>
++
++void prom_putchar(char c)
++{
++ int timeout;
++ phys_addr_t uart_base =
++ (phys_addr_t) ioremap_nocache(LOONGSON_UART_BASE, 8);
++ char reg = readb((u8 *) (uart_base + UART_LSR)) & UART_LSR_THRE;
++
++ for (timeout = 1024; reg == 0 && timeout > 0; timeout--)
++ reg = readb((u8 *) (uart_base + UART_LSR)) & UART_LSR_THRE;
++
++ writeb(c, (u8 *) (uart_base + UART_TX));
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/env.c rt4ls/arch/mips/loongson/common/env.c
+--- linux-2.6.30/arch/mips/loongson/common/env.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/env.c 2009-06-12 16:27:08.778446663 +0200
+@@ -0,0 +1,59 @@
++/*
++ * Based on Ocelot Linux port, which is
++ * Copyright 2001 MontaVista Software Inc.
++ * Author: jsun@mvista.com or jsun@junsun.net
++ *
++ * Copyright 2003 ICT CAS
++ * Author: Michael Guo <guoyi@ict.ac.cn>
++ *
++ * 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
++ *
++ * 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 <asm/bootinfo.h>
++
++#include <loongson.h>
++
++unsigned long bus_clock, cpu_clock_freq;
++unsigned long memsize, highmemsize;
++
++/* 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) \
++ strict_strtol((char *)p + strlen(option"="), \
++ 10, &res); \
++} while (0)
++
++void __init prom_init_env(void)
++{
++ long l;
++
++ /* firmware arguments are initialized in head.S */
++ _prom_envp = (int *)fw_arg2;
++
++ l = (long)*_prom_envp;
++ while (l != 0) {
++ parse_even_earlier(bus_clock, "busclock", l);
++ parse_even_earlier(cpu_clock_freq, "cpuclock", l);
++ parse_even_earlier(memsize, "memsize", l);
++ parse_even_earlier(highmemsize, "highmemsize", l);
++ _prom_envp++;
++ l = (long)*_prom_envp;
++ }
++ if (memsize == 0)
++ memsize = 256;
++
++ pr_info("busclock=%ld, cpuclock=%ld, memsize=%ld, highmemsize=%ld\n",
++ bus_clock, cpu_clock_freq, memsize, highmemsize);
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/init.c rt4ls/arch/mips/loongson/common/init.c
+--- linux-2.6.30/arch/mips/loongson/common/init.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/init.c 2009-06-12 16:27:08.778446663 +0200
+@@ -0,0 +1,54 @@
++/*
++ * Based on Ocelot Linux port, which is
++ * Copyright 2001 MontaVista Software Inc.
++ * Author: jsun@mvista.com or jsun@junsun.net
++ *
++ * Copyright 2003 ICT CAS
++ * Author: Michael Guo <guoyi@ict.ac.cn>
++ *
++ * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
++ * Author: Fuxin Zhang, zhangfx@lemote.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/bootmem.h>
++
++#include <asm/bootinfo.h>
++
++#include <loongson.h>
++
++#if defined(CONFIG_CPU_LOONGSON2F) && defined(CONFIG_64BIT)
++unsigned long _loongson_addrwincfg_base;
++
++/* Loongson CPU address windows config space base address */
++static inline void set_loongson_addrwincfg_base(unsigned long base)
++{
++ *(unsigned long *)&_loongson_addrwincfg_base = base;
++ barrier();
++}
++#endif
++
++void __init prom_init(void)
++{
++ /* init several base address */
++ set_io_port_base((unsigned long)
++ ioremap(LOONGSON_PCIIO_BASE, LOONGSON_PCIIO_SIZE));
++
++#if defined(CONFIG_CPU_LOONGSON2F) && defined(CONFIG_64BIT)
++ set_loongson_addrwincfg_base((unsigned long)
++ ioremap(LOONGSON_ADDRWINCFG_BASE,
++ LOONGSON_ADDRWINCFG_SIZE));
++#endif
++
++ prom_init_cmdline();
++ prom_init_env();
++ prom_init_memory();
++}
++
++void __init prom_free_prom_memory(void)
++{
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/irq.c rt4ls/arch/mips/loongson/common/irq.c
+--- linux-2.6.30/arch/mips/loongson/common/irq.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/irq.c 2009-06-12 16:27:08.778446663 +0200
+@@ -0,0 +1,132 @@
++/*
++ * Copyright 2001 MontaVista Software Inc.
++ * Author: Jun Sun, jsun@mvista.com or jsun@junsun.net
++ * Copyright (C) 2000, 2001 Ralf Baechle (ralf@gnu.org)
++ *
++ * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
++ * Author: Fuxin Zhang, zhangfx@lemote.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/delay.h>
++#include <linux/interrupt.h>
++
++#include <asm/irq_cpu.h>
++#include <asm/i8259.h>
++
++#include <loongson.h>
++#include <machine.h>
++
++/*
++ * the first level int-handler will jump here if it is a loongson irq
++ */
++void bonito_irqdispatch(void)
++{
++ u32 int_status;
++ int i;
++
++ /* workaround the IO dma problem: let cpu looping to allow DMA finish */
++ int_status = LOONGSON_INTISR;
++ while (int_status & (1 << 10)) {
++ udelay(1);
++ int_status = LOONGSON_INTISR;
++ }
++
++ /* Get pending sources, masked by current enables */
++ int_status = LOONGSON_INTISR & LOONGSON_INTEN;
++
++ if (int_status != 0) {
++ i = __ffs(int_status);
++ int_status &= ~(1 << i);
++ do_IRQ(LOONGSON_IRQ_BASE + i);
++ }
++}
++
++void i8259_irqdispatch(void)
++{
++ int irq;
++
++ irq = mach_i8259_irq();
++ if (irq < 0)
++ spurious_interrupt();
++ else
++ do_IRQ(irq);
++}
++
++asmlinkage void plat_irq_dispatch(void)
++{
++ unsigned int pending = read_c0_cause() & read_c0_status() & ST0_IM;
++
++ mach_irq_dispatch(pending);
++}
++
++
++static struct irqaction cascade_irqaction = {
++ .handler = no_action,
++ .name = "cascade",
++};
++
++/*
++ * fuloong2f and yeeloong2f share the cpu perf counter interrupt and the north
++ * bridge interrupt in IP6, so, the ip6_irqaction should be sharable.
++ * otherwise, we will can not request the perf counter irq(setup the perf
++ * counter irq handler) in op_model_loongson2.c.
++ */
++
++#if defined(CONFIG_OPROFILE) && \
++ (defined(CONFIG_LEMOTE_FULOONG2F) || defined(CONFIG_LEMOTE_YEELOONG2F))
++irqreturn_t ip6_action(int cpl, void *dev_id)
++{
++ return IRQ_HANDLED;
++}
++
++static struct irqaction ip6_irqaction = {
++ .handler = ip6_action,
++ .name = "cascade",
++ .flags = IRQF_SHARED,
++};
++#else
++#define ip6_irqaction cascade_irqaction
++#endif
++
++void __init arch_init_irq(void)
++{
++ /*
++ * Clear all of the interrupts while we change the able around a bit.
++ * int-handler is not on bootstrap
++ */
++ clear_c0_status(ST0_IM | ST0_BEV);
++ local_irq_disable();
++
++ /* setting irq trigger mode */
++ set_irq_trigger_mode();
++
++ /* no steer */
++ LOONGSON_INTSTEER = 0;
++
++ /*
++ * Mask out all interrupt by writing "1" to all bit position in
++ * the interrupt reset reg.
++ */
++ LOONGSON_INTENCLR = ~0;
++
++ /* init all controller
++ * 0-15 ------> i8259 interrupt
++ * 16-23 ------> mips cpu interrupt
++ * 32-63 ------> bonito irq
++ */
++
++ /* Sets the first-level interrupt dispatcher. */
++ mips_cpu_irq_init();
++ init_i8259_irqs();
++ bonito_irq_init();
++
++ /* setup north bridge irq (bonito) */
++ setup_irq(LOONGSON_NORTH_BRIDGE_IRQ, &ip6_irqaction);
++ /* setup source bridge irq (i8259) */
++ setup_irq(LOONGSON_SOUTH_BRIDGE_IRQ, &cascade_irqaction);
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/machtype.c rt4ls/arch/mips/loongson/common/machtype.c
+--- linux-2.6.30/arch/mips/loongson/common/machtype.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/machtype.c 2009-06-12 16:27:08.782445496 +0200
+@@ -0,0 +1,50 @@
++/*
++ * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
++ * Author: Wu Zhangjin, wuzj@lemote.com
++ *
++ * Copyright (c) 2009 Zhang Le <r0bertz@gentoo.org>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/errno.h>
++#include <asm/bootinfo.h>
++
++#include <loongson.h>
++#include <machine.h>
++
++static const char *system_types[] = {
++ [MACH_LOONGSON_UNKNOWN] "unknown loongson machine",
++ [MACH_LEMOTE_FL2E] "lemote-fuloong-2e-box",
++ [MACH_LEMOTE_FL2F] "lemote-fuloong-2f-box",
++ [MACH_LEMOTE_YL2F89] "lemote-yeeloong-2f-8.9inches",
++ [MACH_LEMOTE_YL2F7] "lemote-yeeloong-2f-7inches",
++ [MACH_LOONGSON_END] NULL,
++};
++
++const char *get_system_type(void)
++{
++ if (mips_machtype == MACH_UNKNOWN)
++ mips_machtype = MACHTYPE;
++
++ return system_types[mips_machtype];
++}
++
++static __init int machtype_setup(char *str)
++{
++ int machtype = MACH_LEMOTE_FL2E;
++
++ if (!str)
++ return -EINVAL;
++
++ for (; system_types[machtype]; machtype++)
++ if (strstr(system_types[machtype], str)) {
++ mips_machtype = machtype;
++ break;
++ }
++ return 0;
++}
++__setup("machtype=", machtype_setup);
+diff -Nur linux-2.6.30/arch/mips/loongson/common/mem.c rt4ls/arch/mips/loongson/common/mem.c
+--- linux-2.6.30/arch/mips/loongson/common/mem.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/mem.c 2009-06-12 16:27:08.782445496 +0200
+@@ -0,0 +1,116 @@
++/*
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/fs.h>
++#include <linux/mm.h>
++
++#include <asm/bootinfo.h>
++
++#include <loongson.h>
++#include <mem.h>
++
++void __init prom_init_memory(void)
++{
++ add_memory_region(0x0, (memsize << 20), BOOT_MEM_RAM);
++#ifdef CONFIG_64BIT
++#ifdef CONFIG_CPU_LOONGSON2F
++ {
++ int bit;
++
++ bit = fls(memsize + highmemsize);
++ if (bit != ffs(memsize + highmemsize))
++ bit += 20;
++ else
++ bit = bit + 20 - 1;
++
++ /* set cpu window3 to map CPU to DDR: 2G -> 2G */
++ LOONGSON_ADDRWIN_CPUTODDR(ADDRWIN_WIN3, 0x80000000ul,
++ 0x80000000ul, (1 << bit));
++ mmiowb();
++ }
++#endif /* CONFIG_CPU_LOONGSON2F */
++
++ if (highmemsize > 0) {
++ add_memory_region(LOONGSON_HIGHMEM_START,
++ highmemsize << 20, BOOT_MEM_RAM);
++ }
++#endif /* CONFIG_64BIT */
++}
++
++/* override of arch/mips/mm/cache.c: __uncached_access */
++int __uncached_access(struct file *file, unsigned long addr)
++{
++ if (file->f_flags & O_SYNC)
++ return 1;
++
++ return addr >= __pa(high_memory) ||
++ ((addr >= LOONGSON_MMIO_MEM_START) && \
++ (addr < LOONGSON_MMIO_MEM_END));
++}
++
++#if defined(CONFIG_CPU_LOONGSON2F)
++
++#include <linux/pci.h>
++#include <linux/sched.h>
++#include <asm/current.h>
++
++static unsigned long uca_start;
++static unsigned long uca_size = CONFIG_UCA_SIZE;
++
++pgprot_t phys_mem_access_prot(struct file *file, unsigned long pfn,
++ unsigned long size, pgprot_t vma_prot)
++{
++ unsigned long offset = pfn << PAGE_SHIFT;
++ unsigned long end = offset + size;
++
++ if (__uncached_access(file, offset)) {
++ if (((uca_start && offset) >= uca_start) && \
++ (end <= (uca_start + uca_size)))
++ return __pgprot((pgprot_val(vma_prot) & \
++ ~_CACHE_MASK) | \
++ _CACHE_UNCACHED_ACCELERATED);
++ else
++ return pgprot_noncached(vma_prot);
++ }
++ return vma_prot;
++}
++
++static int __init find_vga_mem_init(void)
++{
++ struct pci_dev *dev = 0;
++ struct resource *r;
++ int idx;
++
++ if (uca_start)
++ return 0;
++
++ for_each_pci_dev(dev) {
++ if ((dev->class >> 8) == PCI_CLASS_DISPLAY_VGA) {
++ for (idx = 0; idx < PCI_NUM_RESOURCES; idx++) {
++ r = &dev->resource[idx];
++ if (!r->start && r->end)
++ continue;
++ if (r->flags & IORESOURCE_IO)
++ continue;
++ if (r->flags & IORESOURCE_MEM) {
++ uca_start = r->start;
++
++ printk(KERN_INFO
++ "find the frame buffer:start=%lx\n",
++ uca_start);
++
++ return 0;
++ }
++ }
++
++ }
++ }
++ return 0;
++}
++
++late_initcall(find_vga_mem_init);
++#endif /* !CONFIG_CPU_LOONGSON2F */
+diff -Nur linux-2.6.30/arch/mips/loongson/common/pci.c rt4ls/arch/mips/loongson/common/pci.c
+--- linux-2.6.30/arch/mips/loongson/common/pci.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/pci.c 2009-06-12 16:27:08.782445496 +0200
+@@ -0,0 +1,109 @@
++/*
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author: Fuxin Zhang, zhangfx@lemote.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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
++ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
++ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
++ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
++ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * 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.
++ *
++ */
++
++#include <linux/pci.h>
++
++#include <loongson.h>
++#include <pci.h>
++
++static struct resource loongson_pci_mem_resource = {
++ .name = "pci memory space",
++ .start = LOONGSON_PCI_MEM_START,
++ .end = LOONGSON_PCI_MEM_END,
++ .flags = IORESOURCE_MEM,
++};
++
++static struct resource loongson_pci_io_resource = {
++ .name = "pci io space",
++ .start = LOONGSON_PCI_IO_START, /* reserve regacy I/O space */
++ .end = IO_SPACE_LIMIT,
++ .flags = IORESOURCE_IO,
++};
++
++static struct pci_controller loongson_pci_controller = {
++ .pci_ops = &loongson_pci_ops,
++ .io_resource = &loongson_pci_io_resource,
++ .mem_resource = &loongson_pci_mem_resource,
++ .mem_offset = 0x00000000UL,
++ .io_offset = 0x00000000UL,
++};
++
++static void __init ict_pcimap(void)
++{
++ /*
++ * local to PCI mapping for CPU accessing PCI space
++ *
++ * CPU address space [256M,448M] is window for accessing pci space
++ * we set pcimap_lo[0,1,2] to map it to pci space[0M,64M], [320M,448M]
++ *
++ * pcimap: PCI_MAP2 PCI_Mem_Lo2 PCI_Mem_Lo1 PCI_Mem_Lo0
++ * [<2G] [384M,448M] [320M,384M] [0M,64M]
++ */
++ LOONGSON_PCIMAP = LOONGSON_PCIMAP_PCIMAP_2 |
++ LOONGSON_PCIMAP_WIN(2, 0x18000000) |
++ LOONGSON_PCIMAP_WIN(1, 0x14000000) |
++ LOONGSON_PCIMAP_WIN(0, 0);
++
++ /*
++ * PCI-DMA to local mapping: [2G,2G+256M] -> [0M,256M]
++ */
++ LOONGSON_PCIBASE0 = 0x80000000ul; /* base: 2G -> mmap: 0M */
++ /* size: 256M, burst transmission, pre-fetch enable, 64bit */
++ LOONGSON_PCI_HIT0_SEL_L = 0xc000000cul;
++ LOONGSON_PCI_HIT0_SEL_H = 0xfffffffful;
++ LOONGSON_PCI_HIT1_SEL_L = 0x00000006ul; /* set this BAR as invalid */
++ LOONGSON_PCI_HIT1_SEL_H = 0x00000000ul;
++ LOONGSON_PCI_HIT2_SEL_L = 0x00000006ul; /* set this BAR as invalid */
++ LOONGSON_PCI_HIT2_SEL_H = 0x00000000ul;
++
++ /* avoid deadlock of PCI reading/writing lock operation */
++ LOONGSON_PCI_ISR4C = 0xd2000001ul;
++
++ /* can not change gnt to break pci transfer when device's gnt not
++ deassert for some broken device */
++ LOONGSON_PXARB_CFG = 0x00fe0105ul;
++
++#if defined(CONFIG_CPU_LOONGSON2F) && defined(CONFIG_64BIT)
++ /*
++ * set cpu addr window2 to map CPU address space to PCI address space
++ */
++ LOONGSON_ADDRWIN_CPUTOPCI(ADDRWIN_WIN2, LOONGSON_CPU_MEM_SRC,
++ LOONGSON_PCI_MEM_DST, MMAP_CPUTOPCI_SIZE);
++#endif
++}
++
++static int __init pcibios_init(void)
++{
++ ict_pcimap();
++
++ loongson_pci_controller.io_map_base = mips_io_port_base;
++
++ register_pci_controller(&loongson_pci_controller);
++
++ return 0;
++}
++
++arch_initcall(pcibios_init);
+diff -Nur linux-2.6.30/arch/mips/loongson/common/reset.c rt4ls/arch/mips/loongson/common/reset.c
+--- linux-2.6.30/arch/mips/loongson/common/reset.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/reset.c 2009-06-12 16:27:08.782445496 +0200
+@@ -0,0 +1,38 @@
++/*
++ * 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.
++ *
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author: Fuxin Zhang, zhangfx@lemote.com
++ */
++
++#include <linux/pm.h>
++
++#include <asm/reboot.h>
++
++#include <loongson.h>
++
++static void loongson_restart(char *command)
++{
++ /* perform board-specific pre-reboot operations */
++ mach_prepare_reboot();
++
++ /* reboot via jumping to 0xbfc00000 */
++ ((void (*)(void))ioremap_nocache(LOONGSON_BOOT_BASE, 4)) ();
++}
++
++static void loongson_halt(void)
++{
++ mach_prepare_shutdown();
++ while (1)
++ ;
++}
++
++void __init loongson_reboot_setup(void)
++{
++ _machine_restart = loongson_restart;
++ _machine_halt = loongson_halt;
++ pm_power_off = loongson_halt;
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/rtc.c rt4ls/arch/mips/loongson/common/rtc.c
+--- linux-2.6.30/arch/mips/loongson/common/rtc.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/rtc.c 2009-06-12 16:27:08.782445496 +0200
+@@ -0,0 +1,54 @@
++/*
++ * Registration of Cobalt RTC platform device.
++ *
++ * Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
++ * Copyright (C) 2009 Wu Zhangjin <wuzj@lemote.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., 51 Franklin Street, Fifth Floor, Boston,
++ * MA 02110-1301 USA
++ */
++
++#include <linux/ioport.h>
++#include <linux/mc146818rtc.h>
++#include <linux/platform_device.h>
++
++static struct resource rtc_cmos_resource[] = {
++ {
++ .start = RTC_PORT(0),
++ .end = RTC_PORT(1),
++ .flags = IORESOURCE_IO,
++ },
++ {
++ .start = RTC_IRQ,
++ .end = RTC_IRQ,
++ .flags = IORESOURCE_IRQ,
++ },
++};
++
++static struct platform_device rtc_cmos_device = {
++ .name = "rtc_cmos",
++ .id = -1,
++ .num_resources = ARRAY_SIZE(rtc_cmos_resource),
++ .resource = rtc_cmos_resource
++};
++
++static __init int rtc_cmos_init(void)
++{
++ platform_device_register(&rtc_cmos_device);
++
++ return 0;
++}
++
++device_initcall(rtc_cmos_init);
+diff -Nur linux-2.6.30/arch/mips/loongson/common/serial.c rt4ls/arch/mips/loongson/common/serial.c
+--- linux-2.6.30/arch/mips/loongson/common/serial.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/serial.c 2009-06-12 16:27:08.782445496 +0200
+@@ -0,0 +1,66 @@
++/*
++ * 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.
++ *
++ * Copyright (C) 2007 Ralf Baechle (ralf@linux-mips.org)
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * Author: yanhua (yanhua@lemote.com)
++ * Author: Wu Zhangjin (wuzj@lemote.com)
++ */
++
++#include <linux/io.h>
++#include <linux/init.h>
++#include <linux/serial_8250.h>
++
++#include <loongson.h>
++#include <machine.h>
++
++#define PORT(int, base_baud, io_type) \
++{ \
++ .irq = int, \
++ .uartclk = base_baud, \
++ .iotype = io_type, \
++ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, \
++ .regshift = 0, \
++}
++
++static struct plat_serial8250_port uart8250_data[] = {
++ PORT(LOONGSON_UART_IRQ, LOONGSON_UART_BAUD, LOONGSON_UART_IOTYPE),
++ {},
++};
++
++static struct platform_device uart8250_device = {
++ .name = "serial8250",
++ .id = PLAT8250_DEV_PLATFORM,
++ .dev = {
++ .platform_data = uart8250_data,
++ },
++};
++
++static inline void uart8250_init(void)
++{
++#if (LOONGSON_UART_IOTYPE == UPIO_MEM)
++ uart8250_data[0].membase =
++ ioremap_nocache(LOONGSON_UART_BASE, 8);
++#elif (LOONGSON_UART_IOTYPE == UPIO_PORT)
++ uart8250_data[0].iobase =
++ LOONGSON_UART_BASE - LOONGSON_PCIIO_BASE;
++ uart8250_data[0].irq -= MIPS_CPU_IRQ_BASE;
++#else
++#warning currently, no such iotype of uart used in loongson-based machines
++
++#endif
++}
++
++static int __init serial_init(void)
++{
++ uart8250_init();
++
++ platform_device_register(&uart8250_device);
++
++ return 0;
++}
++
++device_initcall(serial_init);
+diff -Nur linux-2.6.30/arch/mips/loongson/common/setup.c rt4ls/arch/mips/loongson/common/setup.c
+--- linux-2.6.30/arch/mips/loongson/common/setup.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/setup.c 2009-06-12 16:27:08.782445496 +0200
+@@ -0,0 +1,74 @@
++/*
++ * board dependent setup routines
++ *
++ * 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
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/module.h>
++
++#include <asm/wbflush.h>
++
++#include <loongson.h>
++
++void (*__wbflush) (void);
++EXPORT_SYMBOL(__wbflush);
++
++static void loongson_wbflush(void)
++{
++ asm(".set\tpush\n\t"
++ ".set\tnoreorder\n\t"
++ ".set mips3\n\t"
++ "sync\n\t"
++ "nop\n\t"
++ ".set\tpop\n\t"
++ ".set mips0\n\t");
++}
++
++void __init loongson_wbflush_setup(void)
++{
++ __wbflush = loongson_wbflush;
++}
++
++#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
++#include <linux/screen_info.h>
++
++void __init loongson_screeninfo_setup(void)
++{
++ screen_info = (struct screen_info) {
++ 0, /* orig-x */
++ 25, /* orig-y */
++ 0, /* unused */
++ 0, /* orig-video-page */
++ 0, /* orig-video-mode */
++ 80, /* orig-video-cols */
++ 0, /* ega_ax */
++ 0, /* ega_bx */
++ 0, /* ega_cx */
++ 25, /* orig-video-lines */
++ VIDEO_TYPE_VGAC, /* orig-video-isVGA */
++ 16 /* orig-video-points */
++ };
++}
++#else
++void __init loongson_screeninfo_setup(void)
++{
++}
++#endif
++
++void __init plat_mem_setup(void)
++{
++ loongson_reboot_setup();
++
++ loongson_wbflush_setup();
++
++ loongson_screeninfo_setup();
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/common/time.c rt4ls/arch/mips/loongson/common/time.c
+--- linux-2.6.30/arch/mips/loongson/common/time.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/common/time.c 2009-06-12 16:27:08.782445496 +0200
+@@ -0,0 +1,34 @@
++/*
++ * board dependent boot routines
++ *
++ * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
++ * Author: Fuxin Zhang, zhangfx@lemote.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 <asm/mc146818-time.h>
++#include <asm/time.h>
++
++#include <loongson.h>
++#ifdef CONFIG_CS5536_MFGPT
++#include <cs5536/cs5536_mfgpt.h>
++#endif
++
++unsigned long read_persistent_clock(void)
++{
++ return mc146818_get_cmos_time();
++}
++
++void __init plat_time_init(void)
++{
++ /* setup mips r4k timer */
++ mips_hpt_frequency = cpu_clock_freq / 2;
++
++#ifdef CONFIG_CS5536_MFGPT
++ setup_mfgpt_timer();
++#endif
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/fuloong-2e/Makefile rt4ls/arch/mips/loongson/fuloong-2e/Makefile
+--- linux-2.6.30/arch/mips/loongson/fuloong-2e/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/fuloong-2e/Makefile 2009-06-12 16:27:08.782445496 +0200
+@@ -0,0 +1,7 @@
++#
++# Makefile for fuloong-2e
++#
++
++obj-y += irq.o reset.o
++
++EXTRA_CFLAGS += -Werror
+diff -Nur linux-2.6.30/arch/mips/loongson/fuloong-2e/irq.c rt4ls/arch/mips/loongson/fuloong-2e/irq.c
+--- linux-2.6.30/arch/mips/loongson/fuloong-2e/irq.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/fuloong-2e/irq.c 2009-06-12 16:27:08.782445496 +0200
+@@ -0,0 +1,58 @@
++/*
++ * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
++ * Author: Fuxin Zhang, zhangfx@lemote.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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
++ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
++ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
++ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
++ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * 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.
++ *
++ */
++
++#include <linux/interrupt.h>
++
++#include <asm/i8259.h>
++
++#include <loongson.h>
++#include <machine.h>
++
++int mach_i8259_irq(void)
++{
++ return i8259_irq();
++}
++
++void mach_irq_dispatch(unsigned int pending)
++{
++ if (pending & CAUSEF_IP7)
++ do_IRQ(LOONGSON_TIMER_IRQ);
++ else if (pending & CAUSEF_IP6) /* perf counter loverflow */
++ do_IRQ(LOONGSON_PERFCNT_IRQ);
++ else if (pending & CAUSEF_IP5)
++ i8259_irqdispatch();
++ else if (pending & CAUSEF_IP2)
++ bonito_irqdispatch();
++ else
++ spurious_interrupt();
++}
++
++void __init set_irq_trigger_mode(void)
++{
++ /* most bonito irq should be level triggered */
++ LOONGSON_INTEDGE = LOONGSON_ICU_SYSTEMERR | LOONGSON_ICU_MASTERERR |
++ LOONGSON_ICU_RETRYERR | LOONGSON_ICU_MBOXES;
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/fuloong-2e/reset.c rt4ls/arch/mips/loongson/fuloong-2e/reset.c
+--- linux-2.6.30/arch/mips/loongson/fuloong-2e/reset.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/fuloong-2e/reset.c 2009-06-12 16:27:08.786446844 +0200
+@@ -0,0 +1,26 @@
++/* Board-specific reboot/shutdown routines
++ * Copyright (c) 2009 Philippe Vachon <philippe@cowpig.ca>
++ *
++ * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
++ * Author: Wu Zhangjin, wuzj@lemote.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/delay.h>
++#include <linux/types.h>
++
++#include <loongson.h>
++
++void mach_prepare_reboot(void)
++{
++ LOONGSON_GENCFG &= ~LOONGSON_GENCFG_CPUSELFRESET;
++ LOONGSON_GENCFG |= LOONGSON_GENCFG_CPUSELFRESET;
++}
++
++void mach_prepare_shutdown(void)
++{
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/fuloong-2f/Makefile rt4ls/arch/mips/loongson/fuloong-2f/Makefile
+--- linux-2.6.30/arch/mips/loongson/fuloong-2f/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/fuloong-2f/Makefile 2009-06-12 16:27:08.786446844 +0200
+@@ -0,0 +1,5 @@
++#
++# Makefile for fuloong-2f
++#
++
++obj-y += irq.o reset.o
+diff -Nur linux-2.6.30/arch/mips/loongson/fuloong-2f/irq.c rt4ls/arch/mips/loongson/fuloong-2f/irq.c
+--- linux-2.6.30/arch/mips/loongson/fuloong-2f/irq.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/fuloong-2f/irq.c 2009-06-12 16:27:08.786446844 +0200
+@@ -0,0 +1,53 @@
++/*
++ * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
++ * Author: Fuxin Zhang, zhangfx@lemote.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/interrupt.h>
++
++#include <loongson.h>
++#include <machine.h>
++
++int mach_i8259_irq(void)
++{
++ int irq, isr, imr;
++
++ irq = -1;
++
++ if ((LOONGSON_INTISR & LOONGSON_INTEN) & LOONGSON_INT_BIT_INT0) {
++ imr = inb(0x21) | (inb(0xa1) << 8);
++ isr = inb(0x20) | (inb(0xa0) << 8);
++ isr &= ~0x4; /* irq2 for cascade */
++ isr &= ~imr;
++ irq = ffs(isr) - 1;
++ }
++
++ return irq;
++}
++
++void mach_irq_dispatch(unsigned int pending)
++{
++ if (pending & CAUSEF_IP7)
++ do_IRQ(LOONGSON_TIMER_IRQ);
++ else if (pending & CAUSEF_IP6) {
++ do_IRQ(LOONGSON_PERFCNT_IRQ); /* Perf counter overflow */
++ bonito_irqdispatch(); /* North Bridge */
++ } else if (pending & CAUSEF_IP3) /* CPU UART */
++ do_IRQ(LOONGSON_UART_IRQ);
++ else if (pending & CAUSEF_IP2) /* South Bridge */
++ i8259_irqdispatch();
++ else
++ spurious_interrupt();
++}
++
++void __init set_irq_trigger_mode(void)
++{
++ /* setup cs5536 as high level trigger */
++ LOONGSON_INTPOL = LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1;
++ LOONGSON_INTEDGE &= ~(LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1);
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/fuloong-2f/reset.c rt4ls/arch/mips/loongson/fuloong-2f/reset.c
+--- linux-2.6.30/arch/mips/loongson/fuloong-2f/reset.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/fuloong-2f/reset.c 2009-06-12 16:27:08.786446844 +0200
+@@ -0,0 +1,65 @@
++/* Board-specific reboot/shutdown routines
++ *
++ * Copyright (c) 2009 Philippe Vachon <philippe@cowpig.ca>
++ *
++ * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
++ * Author: Wu Zhangjin, wuzj@lemote.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/io.h>
++#include <linux/delay.h>
++#include <linux/types.h>
++
++#include <loongson.h>
++
++/* cs5536 is the south bridge used by fuloong2f mini PC */
++#include <cs5536/cs5536.h>
++
++void mach_prepare_reboot(void)
++{
++ /*
++ * reset cpu to full speed, this is needed when enabling cpu frequency
++ * scalling
++ */
++ LOONGSON_CHIPCFG0 |= 0x7;
++
++ /* send a reset signal to south bridge.
++ *
++ * NOTE: if enable "Power Management" in kernel, rtl8169 will not reset
++ * normally with this reset operation and it will not work in PMON, but
++ * you can type halt command and then reboot, seems the hardware reset
++ * logic not work normally.
++ */
++ {
++ u32 hi, lo;
++ _rdmsr(DIVIL_MSR_REG(DIVIL_SOFT_RESET), &hi, &lo);
++ lo |= 0x00000001;
++ _wrmsr(DIVIL_MSR_REG(DIVIL_SOFT_RESET), hi, lo);
++ }
++}
++
++void mach_prepare_shutdown(void)
++{
++ u32 hi, lo, val;
++ phys_addr_t gpio_base;
++
++ _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &lo);
++
++ gpio_base = mips_io_port_base | (lo & 0xff00);
++
++ /* make cs5536 gpio13 output enable */
++ val = (readl((u32 *) (gpio_base + GPIOL_OUT_EN)) & ~(1 << (16 + 13)))
++ | (1 << 13);
++ writel(val, (u32 *) (gpio_base + GPIOL_OUT_EN));
++ mmiowb();
++ /* make cs5536 gpio13 output low level voltage. */
++ val = (readl((u32 *) (gpio_base + GPIOL_OUT_VAL)) & ~(1 << (13)))
++ | (1 << (16 + 13));
++ writel(val, (u32 *) (gpio_base + GPIOL_OUT_VAL));
++ mmiowb();
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/yeeloong-2f/Makefile rt4ls/arch/mips/loongson/yeeloong-2f/Makefile
+--- linux-2.6.30/arch/mips/loongson/yeeloong-2f/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/yeeloong-2f/Makefile 2009-06-12 16:27:08.786446844 +0200
+@@ -0,0 +1,5 @@
++#
++# Makefile for fuloong-2f
++#
++
++obj-y += init.o irq.o reset.o
+diff -Nur linux-2.6.30/arch/mips/loongson/yeeloong-2f/init.c rt4ls/arch/mips/loongson/yeeloong-2f/init.c
+--- linux-2.6.30/arch/mips/loongson/yeeloong-2f/init.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/yeeloong-2f/init.c 2009-06-12 16:27:08.786446844 +0200
+@@ -0,0 +1,81 @@
++/*
++ * board specific init routines
++ *
++ * 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
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/bootmem.h>
++
++#include <asm/bootinfo.h>
++
++#include <cs5536/cs5536.h>
++
++void __init mach_prom_init_cmdline(void)
++{
++ /* set lpc irq to quiet mode */
++ _wrmsr(DIVIL_MSR_REG(DIVIL_LEG_IO), 0x00, 0x16000003);
++
++ /*Emulate post for usb */
++ _wrmsr(USB_MSR_REG(USB_CONFIG), 0x4, 0xBF000);
++
++ if (strstr(arcs_cmdline, "no_auto_cmd") == NULL) {
++ unsigned char default_root[50] = "/dev/hda1";
++ char *pmon_ver, *ec_ver, *p, version[60], ec_version[64];
++
++ p = arcs_cmdline;
++
++ pmon_ver = strstr(arcs_cmdline, "PMON_VER");
++ if (pmon_ver) {
++ p = strstr(pmon_ver, " ");
++ if (p)
++ *p++ = '\0';
++ strncpy(version, pmon_ver, 60);
++ } else
++ strncpy(version, "PMON_VER=Unknown", 60);
++
++ ec_ver = strstr(p, "EC_VER");
++ if (ec_ver) {
++ p = strstr(ec_ver, " ");
++ if (p)
++ *p = '\0';
++ strncpy(ec_version, ec_ver, 64);
++ } else
++ strncpy(ec_version, "EC_VER=Unknown", 64);
++
++ p = strstr(arcs_cmdline, "root=");
++ if (p) {
++ strncpy(default_root, p, sizeof(default_root));
++ p = strstr(default_root, " ");
++ if (p)
++ *p = '\0';
++ }
++
++ memset(arcs_cmdline, 0, sizeof(arcs_cmdline));
++ strcat(arcs_cmdline, version);
++ strcat(arcs_cmdline, " ");
++ strcat(arcs_cmdline, ec_version);
++ strcat(arcs_cmdline, " ");
++ strcat(arcs_cmdline, default_root);
++ strcat(arcs_cmdline, " console=tty2");
++ strcat(arcs_cmdline, " quiet");
++ }
++
++ /*
++ * automatically pass the vga argument via machtype argument if
++ * vga is not passed: yeeloong-7inch's vga mode is 800x480x24
++ */
++
++ if ((strstr(arcs_cmdline, "vga") == NULL)
++ && (strstr(arcs_cmdline, "machtype") != NULL)
++ && (strstr(arcs_cmdline, "7inch") != NULL))
++ strcat(arcs_cmdline, " vga=800x480x16");
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/yeeloong-2f/irq.c rt4ls/arch/mips/loongson/yeeloong-2f/irq.c
+--- linux-2.6.30/arch/mips/loongson/yeeloong-2f/irq.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/yeeloong-2f/irq.c 2009-06-12 16:27:08.786446844 +0200
+@@ -0,0 +1,53 @@
++/*
++ * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology
++ * Author: Fuxin Zhang, zhangfx@lemote.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/interrupt.h>
++
++#include <loongson.h>
++#include <machine.h>
++
++int mach_i8259_irq(void)
++{
++ int irq, isr, imr;
++
++ irq = -1;
++
++ if ((LOONGSON_INTISR & LOONGSON_INTEN) & LOONGSON_INT_BIT_INT0) {
++ imr = inb(0x21) | (inb(0xa1) << 8);
++ isr = inb(0x20) | (inb(0xa0) << 8);
++ isr &= ~0x4; /* irq2 for cascade */
++ isr &= ~imr;
++ irq = ffs(isr) - 1;
++ }
++
++ return irq;
++}
++
++void mach_irq_dispatch(unsigned int pending)
++{
++ if (pending & CAUSEF_IP7)
++ do_IRQ(LOONGSON_TIMER_IRQ);
++ else if (pending & CAUSEF_IP6) {
++ do_IRQ(LOONGSON_PERFCNT_IRQ); /* Perf counter overflow */
++ bonito_irqdispatch(); /* North Bridge */
++ } else if (pending & CAUSEF_IP3) /* CPU UART */
++ do_IRQ(LOONGSON_UART_IRQ);
++ else if (pending & CAUSEF_IP2) /* South Bridge */
++ i8259_irqdispatch();
++ else
++ spurious_interrupt();
++}
++
++void __init set_irq_trigger_mode(void)
++{
++ /* setup cs5536 as high level trigger */
++ LOONGSON_INTPOL = LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1;
++ LOONGSON_INTEDGE &= ~(LOONGSON_INT_BIT_INT0 | LOONGSON_INT_BIT_INT1);
++}
+diff -Nur linux-2.6.30/arch/mips/loongson/yeeloong-2f/reset.c rt4ls/arch/mips/loongson/yeeloong-2f/reset.c
+--- linux-2.6.30/arch/mips/loongson/yeeloong-2f/reset.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/loongson/yeeloong-2f/reset.c 2009-06-12 16:27:08.786446844 +0200
+@@ -0,0 +1,91 @@
++/* Board-specific reboot/shutdown routines
++ * Copyright (c) 2009 Philippe Vachon <philippe@cowpig.ca>
++ *
++ * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
++ * Author: Wu Zhangjin, wuzj@lemote.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++
++#include <linux/types.h>
++#include <asm/bootinfo.h>
++
++#include <loongson.h>
++#include <machine.h>
++
++/*
++ * 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_RESET_IO_PORT_HIGH 0x0381
++#define EC_RESET_IO_PORT_LOW 0x0382
++#define EC_RESET_IO_PORT_DATA 0x0383
++#define REG_RESET_HIGH 0xF4 /* reset the machine auto-clear : rd/wr */
++#define REG_RESET_LOW 0xEC
++#define BIT_RESET_ON (1 << 0)
++
++/* 7inch yeeloong have the different shutdown hardware logic from 8.9inch */
++#define EC_SHUTDOWN_IO_PORT_HIGH 0xff2d
++#define EC_SHUTDOWN_IO_PORT_LOW 0xff2e
++#define EC_SHUTDOWN_IO_PORT_DATA 0xff2f
++#define REG_SHUTDOWN_HIGH 0xFC
++#define REG_SHUTDOWN_LOW 0x29
++#define BIT_SHUTDOWN_ON (1 << 1)
++
++void mach_prepare_reboot(void)
++{
++ /*
++ * reset cpu to full speed, this is needed when enabling cpu frequency
++ * scalling
++ */
++ LOONGSON_CHIPCFG0 |= 0x7;
++
++ /* sending an reset signal to EC(embedded controller) */
++ writeb(REG_RESET_HIGH,
++ (u8 *) (mips_io_port_base + EC_RESET_IO_PORT_HIGH));
++ writeb(REG_RESET_LOW,
++ (u8 *) (mips_io_port_base + EC_RESET_IO_PORT_LOW));
++ mmiowb();
++ writeb(BIT_RESET_ON,
++ (u8 *) (mips_io_port_base + EC_RESET_IO_PORT_DATA));
++ mmiowb();
++}
++
++void mach_prepare_shutdown(void)
++{
++ const char *system_type = get_system_type();
++
++ if (strstr(system_type, "8.9inch") != NULL) {
++ /* cpu-gpio0 output low */
++ LOONGSON_GPIODATA &= ~0x00000001;
++ /* cpu-gpio0 as output */
++ LOONGSON_GPIOIE &= ~0x00000001;
++ } else if (strstr(system_type, "7inch") != NULL) {
++ u8 val;
++ u64 i;
++
++ writeb(REG_SHUTDOWN_HIGH,
++ (u8 *) (mips_io_port_base + EC_SHUTDOWN_IO_PORT_HIGH));
++ writeb(REG_SHUTDOWN_LOW,
++ (u8 *) (mips_io_port_base + EC_SHUTDOWN_IO_PORT_LOW));
++ mmiowb();
++ val =
++ readb((u8 *) (mips_io_port_base +
++ EC_SHUTDOWN_IO_PORT_DATA));
++ writeb(val & (~BIT_SHUTDOWN_ON),
++ (u8 *) (mips_io_port_base + EC_SHUTDOWN_IO_PORT_DATA));
++ mmiowb();
++ /* need enough wait here... how many microseconds needs? */
++ for (i = 0; i < 0x10000; i++)
++ delay();
++ writeb(val | BIT_SHUTDOWN_ON,
++ (u8 *) (mips_io_port_base + EC_SHUTDOWN_IO_PORT_DATA));
++ mmiowb();
++ } else
++ printk(KERN_INFO "you can shutdown the power safely now!\n");
++}
+diff -Nur linux-2.6.30/arch/mips/oprofile/Makefile rt4ls/arch/mips/oprofile/Makefile
+--- linux-2.6.30/arch/mips/oprofile/Makefile 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/oprofile/Makefile 2009-06-12 16:27:08.846439406 +0200
+@@ -15,3 +15,4 @@
+ oprofile-$(CONFIG_CPU_R10000) += op_model_mipsxx.o
+ oprofile-$(CONFIG_CPU_SB1) += op_model_mipsxx.o
+ oprofile-$(CONFIG_CPU_RM9000) += op_model_rm9000.o
++oprofile-$(CONFIG_CPU_LOONGSON2) += op_model_loongson2.o
+diff -Nur linux-2.6.30/arch/mips/oprofile/common.c rt4ls/arch/mips/oprofile/common.c
+--- linux-2.6.30/arch/mips/oprofile/common.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/oprofile/common.c 2009-06-12 16:27:08.846439406 +0200
+@@ -16,6 +16,7 @@
+
+ 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));
+
+ static struct op_mips_model *model;
+
+@@ -93,6 +94,10 @@
+ case CPU_RM9000:
+ lmodel = &op_model_rm9000_ops;
+ break;
++
++ case CPU_LOONGSON2:
++ lmodel = &op_model_loongson2_ops;
++ break;
+ };
+
+ if (!lmodel)
+diff -Nur linux-2.6.30/arch/mips/oprofile/op_model_loongson2.c rt4ls/arch/mips/oprofile/op_model_loongson2.c
+--- linux-2.6.30/arch/mips/oprofile/op_model_loongson2.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/oprofile/op_model_loongson2.c 2009-06-12 16:27:08.846439406 +0200
+@@ -0,0 +1,186 @@
++/*
++ * Loongson2 performance counter driver for oprofile
++ *
++ * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
++ * Author: Yanhua <yanh@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.
++ *
++ */
++#include <linux/init.h>
++#include <linux/oprofile.h>
++#include <linux/interrupt.h>
++#include <linux/smp.h>
++#include <linux/spinlock.h>
++#include <linux/proc_fs.h>
++#include <linux/uaccess.h>
++
++#include <irq.h>
++#include <loongson.h> /* LOONGSON_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 LOONGSON_CPU_TYPE "mips/loongson2"
++
++#define LOONGSON_COUNTER1_EVENT(event) ((event & 0x0f) << 5)
++#define LOONGSON_COUNTER2_EVENT(event) ((event & 0x0f) << 9)
++
++#define LOONGSON_PERFCNT_EXL (1UL << 0)
++#define LOONGSON_PERFCNT_KERNEL (1UL << 1)
++#define LOONGSON_PERFCNT_SUPERVISOR (1UL << 2)
++#define LOONGSON_PERFCNT_USER (1UL << 3)
++#define LOONGSON_PERFCNT_INT_EN (1UL << 4)
++#define LOONGSON_PERFCNT_OVERFLOW (1ULL << 31)
++
++/* Loongson2 performance counter register */
++#define read_c0_perflo() __read_64bit_c0_register($24, 0)
++#define write_c0_perflo(val) __write_64bit_c0_register($24, 0, val)
++#define read_c0_perfhi() __read_64bit_c0_register($25, 0)
++#define write_c0_perfhi(val) __write_64bit_c0_register($25, 0, val)
++
++static struct loongson2_register_config {
++ unsigned int ctrl;
++ unsigned long long reset_counter1;
++ unsigned long long reset_counter2;
++ int cnt1_enable, cnt2_enable;
++} reg;
++
++DEFINE_SPINLOCK(sample_lock);
++
++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 loongson2_reg_setup(struct op_counter_config *cfg)
++{
++ unsigned int ctrl = 0;
++
++ reg.reset_counter1 = 0;
++ reg.reset_counter2 = 0;
++ /* Compute the performance counter ctrl word. */
++ /* For now count kernel and user mode */
++ if (cfg[0].enabled) {
++ ctrl |= LOONGSON_COUNTER1_EVENT(cfg[0].event) |
++ LOONGSON_PERFCNT_INT_EN;
++ if (cfg[0].kernel)
++ ctrl |= LOONGSON_PERFCNT_KERNEL;
++ if (cfg[0].user)
++ ctrl |= LOONGSON_PERFCNT_USER;
++ reg.reset_counter1 = 0x80000000ULL - cfg[0].count;
++ }
++
++ if (cfg[1].enabled) {
++ ctrl |= LOONGSON_COUNTER2_EVENT(cfg[1].event) |
++ LOONGSON_PERFCNT_INT_EN;
++ if (cfg[1].kernel)
++ ctrl |= LOONGSON_PERFCNT_KERNEL;
++ if (cfg[1].user)
++ ctrl |= LOONGSON_PERFCNT_USER;
++ reg.reset_counter2 = (0x80000000ULL - cfg[1].count);
++ }
++
++ if (cfg[0].enabled || cfg[1].enabled)
++ ctrl |= LOONGSON_PERFCNT_EXL;
++
++ reg.ctrl = ctrl;
++
++ reg.cnt1_enable = cfg[0].enabled;
++ reg.cnt2_enable = 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_perfhi(perfcount);
++}
++
++static void loongson2_cpu_start(void *args)
++{
++ /* Start all counters on current CPU */
++ if (reg.cnt1_enable || reg.cnt2_enable)
++ write_c0_perflo(reg.ctrl);
++}
++
++static void loongson2_cpu_stop(void *args)
++{
++ /* Stop all counters on current CPU */
++ write_c0_perflo(0);
++ memset(&reg, 0, sizeof(reg));
++}
++
++static irqreturn_t loongson2_perfcount_handler(int irq, void *dev_id)
++{
++ uint64_t counter, counter1, counter2;
++ struct pt_regs *regs = get_irq_regs();
++ int enabled;
++ unsigned long flags;
++
++ /*
++ * 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 = reg.cnt1_enable | reg.cnt2_enable;
++ if (!enabled)
++ return IRQ_NONE;
++
++ counter = read_c0_perfhi();
++ counter1 = counter & 0xffffffff;
++ counter2 = counter >> 32;
++
++ spin_lock_irqsave(&sample_lock, flags);
++
++ if (counter1 & LOONGSON_PERFCNT_OVERFLOW) {
++ if (reg.cnt1_enable)
++ oprofile_add_sample(regs, 0);
++ counter1 = reg.reset_counter1;
++ }
++ if (counter2 & LOONGSON_PERFCNT_OVERFLOW) {
++ if (reg.cnt2_enable)
++ oprofile_add_sample(regs, 1);
++ counter2 = reg.reset_counter2;
++ }
++
++ spin_unlock_irqrestore(&sample_lock, flags);
++
++ write_c0_perfhi((counter2 << 32) | counter1);
++
++ return IRQ_HANDLED;
++}
++
++static int __init loongson2_init(void)
++{
++ return request_irq(LOONGSON_PERFCNT_IRQ, loongson2_perfcount_handler,
++ IRQF_SHARED, "Perfcounter", oprofid);
++}
++
++static void loongson2_exit(void)
++{
++ write_c0_perflo(0);
++ free_irq(LOONGSON_PERFCNT_IRQ, oprofid);
++}
++
++struct op_mips_model op_model_loongson2_ops = {
++ .reg_setup = loongson2_reg_setup,
++ .cpu_setup = loongson2_cpu_setup,
++ .init = loongson2_init,
++ .exit = loongson2_exit,
++ .cpu_start = loongson2_cpu_start,
++ .cpu_stop = loongson2_cpu_stop,
++ .cpu_type = LOONGSON_CPU_TYPE,
++ .num_counters = 2
++};
+diff -Nur linux-2.6.30/arch/mips/pci/Makefile rt4ls/arch/mips/pci/Makefile
+--- linux-2.6.30/arch/mips/pci/Makefile 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/Makefile 2009-06-12 16:27:08.846439406 +0200
+@@ -26,7 +26,9 @@
+ obj-$(CONFIG_SOC_AU1500) += fixup-au1000.o ops-au1000.o
+ obj-$(CONFIG_SOC_AU1550) += fixup-au1000.o ops-au1000.o
+ obj-$(CONFIG_SOC_PNX8550) += fixup-pnx8550.o ops-pnx8550.o
+-obj-$(CONFIG_LEMOTE_FULONG) += fixup-lm2e.o ops-bonito64.o
++obj-$(CONFIG_LEMOTE_FULOONG2E) += fixup-fuloong2e.o ops-loongson2.o
++obj-$(CONFIG_LEMOTE_FULOONG2F) += fixup-lemote2f.o ops-loongson2.o
++obj-$(CONFIG_LEMOTE_YEELOONG2F) += fixup-lemote2f.o ops-loongson2.o
+ obj-$(CONFIG_MIPS_MALTA) += fixup-malta.o
+ obj-$(CONFIG_PMC_MSP7120_GW) += fixup-pmcmsp.o ops-pmcmsp.o
+ obj-$(CONFIG_PMC_MSP7120_EVAL) += fixup-pmcmsp.o ops-pmcmsp.o
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-au1000.c rt4ls/arch/mips/pci/fixup-au1000.c
+--- linux-2.6.30/arch/mips/pci/fixup-au1000.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-au1000.c 2009-06-12 16:27:08.846439406 +0200
+@@ -31,7 +31,7 @@
+
+ extern char irq_tab_alchemy[][5];
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ return irq_tab_alchemy[slot][pin];
+ }
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-capcella.c rt4ls/arch/mips/pci/fixup-capcella.c
+--- linux-2.6.30/arch/mips/pci/fixup-capcella.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-capcella.c 2009-06-12 16:27:08.846439406 +0200
+@@ -38,7 +38,7 @@
+ [14] = { -1, INTA, INTB, INTC, INTD }
+ };
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ return irq_tab_capcella[slot][pin];
+ }
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-cobalt.c rt4ls/arch/mips/pci/fixup-cobalt.c
+--- linux-2.6.30/arch/mips/pci/fixup-cobalt.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-cobalt.c 2009-06-12 16:27:08.846439406 +0200
+@@ -175,7 +175,7 @@
+ [COBALT_PCICONF_ETH1] = ETH1_IRQ
+ };
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ if (cobalt_board_id <= COBALT_BRD_ID_QUBE1)
+ return irq_tab_qube1[slot];
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-emma2rh.c rt4ls/arch/mips/pci/fixup-emma2rh.c
+--- linux-2.6.30/arch/mips/pci/fixup-emma2rh.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-emma2rh.c 2009-06-12 16:27:08.846439406 +0200
+@@ -88,7 +88,7 @@
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_EMMA2RH,
+ emma2rh_pci_host_fixup);
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ return irq_map[slot][pin];
+ }
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-excite.c rt4ls/arch/mips/pci/fixup-excite.c
+--- linux-2.6.30/arch/mips/pci/fixup-excite.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-excite.c 2009-06-12 16:27:08.846439406 +0200
+@@ -21,7 +21,7 @@
+ #include <linux/pci.h>
+ #include <excite.h>
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ if (pin == 0)
+ return -1;
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-fuloong2e.c rt4ls/arch/mips/pci/fixup-fuloong2e.c
+--- linux-2.6.30/arch/mips/pci/fixup-fuloong2e.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/pci/fixup-fuloong2e.c 2009-06-12 16:27:08.846439406 +0200
+@@ -0,0 +1,243 @@
++/*
++ * fixup-fuloong2e.c
++ *
++ * Copyright (C) 2004 ICT CAS
++ * Author: Li xiaoyu, ICT CAS
++ * lixy@ict.ac.cn
++ *
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author: Fuxin Zhang, zhangfx@lemote.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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
++ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
++ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
++ * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
++ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
++ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
++ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
++ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
++ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
++ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++ *
++ * 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.
++ *
++ */
++#include <linux/init.h>
++#include <linux/pci.h>
++
++#include <loongson.h>
++
++/* South bridge slot number is set by the pci probe process */
++static u8 sb_slot = 5;
++
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
++{
++ int irq = 0;
++
++ if (slot == sb_slot) {
++ switch (PCI_FUNC(dev->devfn)) {
++ case 2:
++ irq = 10;
++ break;
++ case 3:
++ irq = 11;
++ break;
++ case 5:
++ irq = 9;
++ break;
++ }
++ } else {
++ irq = LOONGSON_IRQ_BASE + 25 + pin;
++ }
++ return irq;
++
++}
++
++/* Do platform specific device initialization at pci_enable_device() time */
++int pcibios_plat_dev_init(struct pci_dev *dev)
++{
++ return 0;
++}
++
++static void __init fuloong2e_nec_fixup(struct pci_dev *pdev)
++{
++ unsigned int val;
++
++ /* Configues port 1, 2, 3, 4 to be validate*/
++ pci_read_config_dword(pdev, 0xe0, &val);
++ pci_write_config_dword(pdev, 0xe0, (val & ~7) | 0x4);
++
++ /* System clock is 48-MHz Oscillator. */
++ pci_write_config_dword(pdev, 0xe4, 1 << 5);
++}
++
++static void __init fuloong2e_686b_func0_fixup(struct pci_dev *pdev)
++{
++ unsigned char c;
++
++ sb_slot = PCI_SLOT(pdev->devfn);
++
++ printk(KERN_INFO "via686b fix: ISA bridge\n");
++
++ /* Enable I/O Recovery time */
++ pci_write_config_byte(pdev, 0x40, 0x08);
++
++ /* Enable ISA refresh */
++ pci_write_config_byte(pdev, 0x41, 0x01);
++
++ /* disable ISA line buffer */
++ pci_write_config_byte(pdev, 0x45, 0x00);
++
++ /* Gate INTR, and flush line buffer */
++ pci_write_config_byte(pdev, 0x46, 0xe0);
++
++ /* Disable PCI Delay Transaction, Enable EISA ports 4D0/4D1. */
++ /* pci_write_config_byte(pdev, 0x47, 0x20); */
++
++ /*
++ * enable PCI Delay Transaction, Enable EISA ports 4D0/4D1.
++ * enable time-out timer
++ */
++ pci_write_config_byte(pdev, 0x47, 0xe6);
++
++ /*
++ * enable level trigger on pci irqs: 9,10,11,13
++ * important! without this PCI interrupts won't work
++ */
++ outb(0x2e, 0x4d1);
++
++ /* 512 K PCI Decode */
++ pci_write_config_byte(pdev, 0x48, 0x01);
++
++ /* Wait for PGNT before grant to ISA Master/DMA */
++ pci_write_config_byte(pdev, 0x4a, 0x84);
++
++ /*
++ * Plug'n'Play
++ *
++ * Parallel DRQ 3, Floppy DRQ 2 (default)
++ */
++ pci_write_config_byte(pdev, 0x50, 0x0e);
++
++ /*
++ * IRQ Routing for Floppy and Parallel port
++ *
++ * IRQ 6 for floppy, IRQ 7 for parallel port
++ */
++ pci_write_config_byte(pdev, 0x51, 0x76);
++
++ /* IRQ Routing for serial ports (take IRQ 3 and 4) */
++ pci_write_config_byte(pdev, 0x52, 0x34);
++
++ /* All IRQ's level triggered. */
++ pci_write_config_byte(pdev, 0x54, 0x00);
++
++ /* route PIRQA-D irq */
++ pci_write_config_byte(pdev, 0x55, 0x90); /* bit 7-4, PIRQA */
++ pci_write_config_byte(pdev, 0x56, 0xba); /* bit 7-4, PIRQC; */
++ /* 3-0, PIRQB */
++ pci_write_config_byte(pdev, 0x57, 0xd0); /* bit 7-4, PIRQD */
++
++ /* enable function 5/6, audio/modem */
++ pci_read_config_byte(pdev, 0x85, &c);
++ c &= ~(0x3 << 2);
++ pci_write_config_byte(pdev, 0x85, c);
++
++ printk(KERN_INFO"via686b fix: ISA bridge done\n");
++}
++
++static void __init fuloong2e_686b_func1_fixup(struct pci_dev *pdev)
++{
++ printk(KERN_INFO"via686b fix: IDE\n");
++
++ /* Modify IDE controller setup */
++ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 48);
++ pci_write_config_byte(pdev, PCI_COMMAND,
++ PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER);
++ pci_write_config_byte(pdev, 0x40, 0x0b);
++ /* legacy mode */
++ pci_write_config_byte(pdev, 0x42, 0x09);
++
++#if 1/* play safe, otherwise we may see notebook's usb keyboard lockup */
++ /* disable read prefetch/write post buffers */
++ pci_write_config_byte(pdev, 0x41, 0x02);
++
++ /* use 3/4 as fifo thresh hold */
++ pci_write_config_byte(pdev, 0x43, 0x0a);
++ pci_write_config_byte(pdev, 0x44, 0x00);
++
++ pci_write_config_byte(pdev, 0x45, 0x00);
++#else
++ pci_write_config_byte(pdev, 0x41, 0xc2);
++ pci_write_config_byte(pdev, 0x43, 0x35);
++ pci_write_config_byte(pdev, 0x44, 0x1c);
++
++ pci_write_config_byte(pdev, 0x45, 0x10);
++#endif
++
++ printk(KERN_INFO"via686b fix: IDE done\n");
++}
++
++static void __init fuloong2e_686b_func2_fixup(struct pci_dev *pdev)
++{
++ /* irq routing */
++ pci_write_config_byte(pdev, PCI_INTERRUPT_LINE, 10);
++}
++
++static void __init fuloong2e_686b_func3_fixup(struct pci_dev *pdev)
++{
++ /* irq routing */
++ pci_write_config_byte(pdev, PCI_INTERRUPT_LINE, 11);
++}
++
++static void __init fuloong2e_686b_func5_fixup(struct pci_dev *pdev)
++{
++ unsigned int val;
++ unsigned char c;
++
++ /* enable IO */
++ pci_write_config_byte(pdev, PCI_COMMAND,
++ PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
++ PCI_COMMAND_MASTER);
++ pci_read_config_dword(pdev, 0x4, &val);
++ pci_write_config_dword(pdev, 0x4, val | 1);
++
++ /* route ac97 IRQ */
++ pci_write_config_byte(pdev, 0x3c, 9);
++
++ pci_read_config_byte(pdev, 0x8, &c);
++
++ /* link control: enable link & SGD PCM output */
++ pci_write_config_byte(pdev, 0x41, 0xcc);
++
++ /* disable game port, FM, midi, sb, enable write to reg2c-2f */
++ pci_write_config_byte(pdev, 0x42, 0x20);
++
++ /* we are using Avance logic codec */
++ pci_write_config_word(pdev, 0x2c, 0x1005);
++ pci_write_config_word(pdev, 0x2e, 0x4710);
++ pci_read_config_dword(pdev, 0x2c, &val);
++
++ pci_write_config_byte(pdev, 0x42, 0x0);
++}
++
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686,
++ fuloong2e_686b_func0_fixup);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1,
++ fuloong2e_686b_func1_fixup);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_2,
++ fuloong2e_686b_func2_fixup);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3,
++ fuloong2e_686b_func3_fixup);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5,
++ fuloong2e_686b_func5_fixup);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_USB,
++ fuloong2e_nec_fixup);
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-ip32.c rt4ls/arch/mips/pci/fixup-ip32.c
+--- linux-2.6.30/arch/mips/pci/fixup-ip32.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-ip32.c 2009-06-12 16:27:08.850451649 +0200
+@@ -39,7 +39,7 @@
+ * irqs. I suppose a device without a pin A will thank us for doing it
+ * right if there exists such a broken piece of crap.
+ */
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ return irq_tab_mace[slot][pin];
+ }
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-jmr3927.c rt4ls/arch/mips/pci/fixup-jmr3927.c
+--- linux-2.6.30/arch/mips/pci/fixup-jmr3927.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-jmr3927.c 2009-06-12 16:27:08.850451649 +0200
+@@ -31,7 +31,7 @@
+ #include <asm/txx9/pci.h>
+ #include <asm/txx9/jmr3927.h>
+
+-int __init jmr3927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init jmr3927_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ unsigned char irq = pin;
+
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-lemote2f.c rt4ls/arch/mips/pci/fixup-lemote2f.c
+--- linux-2.6.30/arch/mips/pci/fixup-lemote2f.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/pci/fixup-lemote2f.c 2009-06-12 16:27:08.850451649 +0200
+@@ -0,0 +1,171 @@
++/*
++ * Copyright (C) 2008 Lemote Technology
++ * Copyright (C) 2004 ICT CAS
++ * Author: Li xiaoyu, lixy@ict.ac.cn
++ *
++ * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
++ * Author: Fuxin Zhang, zhangfx@lemote.com
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ */
++#include <linux/init.h>
++#include <linux/pci.h>
++
++#include <loongson.h>
++#include <cs5536/cs5536.h>
++#include <cs5536/cs5536_pci.h>
++
++/* PCI interrupt pins
++ *
++ * These should not be changed, or you should consider loongson2f interrupt
++ * register and your pci card dispatch
++ */
++
++#define PCIA 4
++#define PCIB 5
++#define PCIC 6
++#define PCID 7
++
++/* all the pci device has the PCIA pin, check the datasheet. */
++static char irq_tab[][5] __initdata = {
++ /* INTA INTB INTC INTD */
++ {0, 0, 0, 0, 0}, /* 11: Unused */
++ {0, 0, 0, 0, 0}, /* 12: Unused */
++ {0, 0, 0, 0, 0}, /* 13: Unused */
++ {0, 0, 0, 0, 0}, /* 14: Unused */
++ {0, 0, 0, 0, 0}, /* 15: Unused */
++ {0, 0, 0, 0, 0}, /* 16: Unused */
++ {0, PCIA, 0, 0, 0}, /* 17: RTL8110-0 */
++ {0, PCIB, 0, 0, 0}, /* 18: RTL8110-1 */
++ {0, PCIC, 0, 0, 0}, /* 19: SiI3114 */
++ {0, PCID, 0, 0, 0}, /* 20: 3-ports nec usb */
++ {0, PCIA, PCIB, PCIC, PCID}, /* 21: PCI-SLOT */
++ {0, 0, 0, 0, 0}, /* 22: Unused */
++ {0, 0, 0, 0, 0}, /* 23: Unused */
++ {0, 0, 0, 0, 0}, /* 24: Unused */
++ {0, 0, 0, 0, 0}, /* 25: Unused */
++ {0, 0, 0, 0, 0}, /* 26: Unused */
++ {0, 0, 0, 0, 0}, /* 27: Unused */
++};
++
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
++{
++ int virq;
++
++ if ((PCI_SLOT(dev->devfn) != PCI_IDSEL_CS5536)
++ && (PCI_SLOT(dev->devfn) < 32)) {
++ virq = irq_tab[slot][pin];
++ printk(KERN_INFO "slot: %d, pin: %d, irq: %d\n", slot, pin,
++ virq + LOONGSON_IRQ_BASE);
++ if (virq != 0)
++ return LOONGSON_IRQ_BASE + virq;
++ else
++ return 0;
++ } else if (PCI_SLOT(dev->devfn) == PCI_IDSEL_CS5536) { /* cs5536 */
++ switch (PCI_FUNC(dev->devfn)) {
++ case 2:
++ pci_write_config_byte(dev, PCI_INTERRUPT_LINE,
++ CS5536_IDE_INTR);
++ return 14; /* for IDE */
++ case 3:
++ pci_write_config_byte(dev, PCI_INTERRUPT_LINE,
++ CS5536_ACC_INTR);
++ return 9; /* for AUDIO */
++ case 4: /* for OHCI */
++ case 5: /* for EHCI */
++ case 6: /* for UDC */
++ case 7: /* for OTG */
++ pci_write_config_byte(dev, PCI_INTERRUPT_LINE,
++ CS5536_USB_INTR);
++ return 11;
++ }
++ return dev->irq;
++ } else {
++ printk(KERN_INFO " strange pci slot number.\n");
++ return 0;
++ }
++}
++
++/* Do platform specific device initialization at pci_enable_device() time */
++int pcibios_plat_dev_init(struct pci_dev *dev)
++{
++ return 0;
++}
++
++/* CS5536 SPEC. fixup */
++static void __init loongson_cs5536_isa_fixup(struct pci_dev *pdev)
++{
++ /* the uart1 and uart2 interrupt in PIC is enabled as default */
++ pci_write_config_dword(pdev, PCI_UART1_INT_REG, 1);
++ pci_write_config_dword(pdev, PCI_UART2_INT_REG, 1);
++ return;
++}
++
++static void __init loongson_cs5536_ide_fixup(struct pci_dev *pdev)
++{
++ /* setting the mutex pin as IDE function */
++ pci_write_config_dword(pdev, PCI_IDE_CFG_REG,
++ CS5536_IDE_FLASH_SIGNATURE);
++ return;
++}
++
++static void __init loongson_cs5536_acc_fixup(struct pci_dev *pdev)
++{
++ u8 val;
++
++ /* enable the AUDIO interrupt in PIC */
++ pci_write_config_dword(pdev, PCI_ACC_INT_REG, 1);
++
++#if 1
++ pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &val);
++ printk(KERN_INFO "cs5536 acc latency 0x%x\n", val);
++ pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0xc0);
++#endif
++ return;
++}
++
++static void __init loongson_cs5536_ohci_fixup(struct pci_dev *pdev)
++{
++ /* enable the OHCI interrupt in PIC */
++ /* THE OHCI, EHCI, UDC, OTG are shared with interrupt in PIC */
++ pci_write_config_dword(pdev, PCI_OHCI_INT_REG, 1);
++ return;
++}
++
++static void __init loongson_cs5536_ehci_fixup(struct pci_dev *pdev)
++{
++ u32 hi, lo;
++
++ /* 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);
++
++ /* setting the USB2.0 micro frame length */
++ pci_write_config_dword(pdev, PCI_EHCI_FLADJ_REG, 0x2000);
++ return;
++}
++
++static void __init loongson_nec_fixup(struct pci_dev *pdev)
++{
++ unsigned int val;
++
++ pci_read_config_dword(pdev, 0xe0, &val);
++ /* Only 2 port be used */
++ pci_write_config_dword(pdev, 0xe0, (val & ~3) | 0x2);
++}
++
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_ISA,
++ loongson_cs5536_isa_fixup);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_OHC,
++ loongson_cs5536_ohci_fixup);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_EHC,
++ loongson_cs5536_ehci_fixup);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_AUDIO,
++ loongson_cs5536_acc_fixup);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_CS5536_IDE,
++ loongson_cs5536_ide_fixup);
++DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_USB,
++ loongson_nec_fixup);
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-lm2e.c rt4ls/arch/mips/pci/fixup-lm2e.c
+--- linux-2.6.30/arch/mips/pci/fixup-lm2e.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-lm2e.c 1970-01-01 01:00:00.000000000 +0100
+@@ -1,242 +0,0 @@
+-/*
+- * fixup-lm2e.c
+- *
+- * Copyright (C) 2004 ICT CAS
+- * Author: Li xiaoyu, ICT CAS
+- * lixy@ict.ac.cn
+- *
+- * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology
+- * Author: Fuxin Zhang, zhangfx@lemote.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 SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
+- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+- * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+- * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+- *
+- * 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.
+- *
+- */
+-#include <linux/init.h>
+-#include <linux/pci.h>
+-#include <asm/mips-boards/bonito64.h>
+-
+-/* South bridge slot number is set by the pci probe process */
+-static u8 sb_slot = 5;
+-
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
+-{
+- int irq = 0;
+-
+- if (slot == sb_slot) {
+- switch (PCI_FUNC(dev->devfn)) {
+- case 2:
+- irq = 10;
+- break;
+- case 3:
+- irq = 11;
+- break;
+- case 5:
+- irq = 9;
+- break;
+- }
+- } else {
+- irq = BONITO_IRQ_BASE + 25 + pin;
+- }
+- return irq;
+-
+-}
+-
+-/* Do platform specific device initialization at pci_enable_device() time */
+-int pcibios_plat_dev_init(struct pci_dev *dev)
+-{
+- return 0;
+-}
+-
+-static void __init loongson2e_nec_fixup(struct pci_dev *pdev)
+-{
+- unsigned int val;
+-
+- /* Configues port 1, 2, 3, 4 to be validate*/
+- pci_read_config_dword(pdev, 0xe0, &val);
+- pci_write_config_dword(pdev, 0xe0, (val & ~7) | 0x4);
+-
+- /* System clock is 48-MHz Oscillator. */
+- pci_write_config_dword(pdev, 0xe4, 1 << 5);
+-}
+-
+-static void __init loongson2e_686b_func0_fixup(struct pci_dev *pdev)
+-{
+- unsigned char c;
+-
+- sb_slot = PCI_SLOT(pdev->devfn);
+-
+- printk(KERN_INFO "via686b fix: ISA bridge\n");
+-
+- /* Enable I/O Recovery time */
+- pci_write_config_byte(pdev, 0x40, 0x08);
+-
+- /* Enable ISA refresh */
+- pci_write_config_byte(pdev, 0x41, 0x01);
+-
+- /* disable ISA line buffer */
+- pci_write_config_byte(pdev, 0x45, 0x00);
+-
+- /* Gate INTR, and flush line buffer */
+- pci_write_config_byte(pdev, 0x46, 0xe0);
+-
+- /* Disable PCI Delay Transaction, Enable EISA ports 4D0/4D1. */
+- /* pci_write_config_byte(pdev, 0x47, 0x20); */
+-
+- /*
+- * enable PCI Delay Transaction, Enable EISA ports 4D0/4D1.
+- * enable time-out timer
+- */
+- pci_write_config_byte(pdev, 0x47, 0xe6);
+-
+- /*
+- * enable level trigger on pci irqs: 9,10,11,13
+- * important! without this PCI interrupts won't work
+- */
+- outb(0x2e, 0x4d1);
+-
+- /* 512 K PCI Decode */
+- pci_write_config_byte(pdev, 0x48, 0x01);
+-
+- /* Wait for PGNT before grant to ISA Master/DMA */
+- pci_write_config_byte(pdev, 0x4a, 0x84);
+-
+- /*
+- * Plug'n'Play
+- *
+- * Parallel DRQ 3, Floppy DRQ 2 (default)
+- */
+- pci_write_config_byte(pdev, 0x50, 0x0e);
+-
+- /*
+- * IRQ Routing for Floppy and Parallel port
+- *
+- * IRQ 6 for floppy, IRQ 7 for parallel port
+- */
+- pci_write_config_byte(pdev, 0x51, 0x76);
+-
+- /* IRQ Routing for serial ports (take IRQ 3 and 4) */
+- pci_write_config_byte(pdev, 0x52, 0x34);
+-
+- /* All IRQ's level triggered. */
+- pci_write_config_byte(pdev, 0x54, 0x00);
+-
+- /* route PIRQA-D irq */
+- pci_write_config_byte(pdev, 0x55, 0x90); /* bit 7-4, PIRQA */
+- pci_write_config_byte(pdev, 0x56, 0xba); /* bit 7-4, PIRQC; */
+- /* 3-0, PIRQB */
+- pci_write_config_byte(pdev, 0x57, 0xd0); /* bit 7-4, PIRQD */
+-
+- /* enable function 5/6, audio/modem */
+- pci_read_config_byte(pdev, 0x85, &c);
+- c &= ~(0x3 << 2);
+- pci_write_config_byte(pdev, 0x85, c);
+-
+- printk(KERN_INFO"via686b fix: ISA bridge done\n");
+-}
+-
+-static void __init loongson2e_686b_func1_fixup(struct pci_dev *pdev)
+-{
+- printk(KERN_INFO"via686b fix: IDE\n");
+-
+- /* Modify IDE controller setup */
+- pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 48);
+- pci_write_config_byte(pdev, PCI_COMMAND,
+- PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
+- PCI_COMMAND_MASTER);
+- pci_write_config_byte(pdev, 0x40, 0x0b);
+- /* legacy mode */
+- pci_write_config_byte(pdev, 0x42, 0x09);
+-
+-#if 1/* play safe, otherwise we may see notebook's usb keyboard lockup */
+- /* disable read prefetch/write post buffers */
+- pci_write_config_byte(pdev, 0x41, 0x02);
+-
+- /* use 3/4 as fifo thresh hold */
+- pci_write_config_byte(pdev, 0x43, 0x0a);
+- pci_write_config_byte(pdev, 0x44, 0x00);
+-
+- pci_write_config_byte(pdev, 0x45, 0x00);
+-#else
+- pci_write_config_byte(pdev, 0x41, 0xc2);
+- pci_write_config_byte(pdev, 0x43, 0x35);
+- pci_write_config_byte(pdev, 0x44, 0x1c);
+-
+- pci_write_config_byte(pdev, 0x45, 0x10);
+-#endif
+-
+- printk(KERN_INFO"via686b fix: IDE done\n");
+-}
+-
+-static void __init loongson2e_686b_func2_fixup(struct pci_dev *pdev)
+-{
+- /* irq routing */
+- pci_write_config_byte(pdev, PCI_INTERRUPT_LINE, 10);
+-}
+-
+-static void __init loongson2e_686b_func3_fixup(struct pci_dev *pdev)
+-{
+- /* irq routing */
+- pci_write_config_byte(pdev, PCI_INTERRUPT_LINE, 11);
+-}
+-
+-static void __init loongson2e_686b_func5_fixup(struct pci_dev *pdev)
+-{
+- unsigned int val;
+- unsigned char c;
+-
+- /* enable IO */
+- pci_write_config_byte(pdev, PCI_COMMAND,
+- PCI_COMMAND_IO | PCI_COMMAND_MEMORY |
+- PCI_COMMAND_MASTER);
+- pci_read_config_dword(pdev, 0x4, &val);
+- pci_write_config_dword(pdev, 0x4, val | 1);
+-
+- /* route ac97 IRQ */
+- pci_write_config_byte(pdev, 0x3c, 9);
+-
+- pci_read_config_byte(pdev, 0x8, &c);
+-
+- /* link control: enable link & SGD PCM output */
+- pci_write_config_byte(pdev, 0x41, 0xcc);
+-
+- /* disable game port, FM, midi, sb, enable write to reg2c-2f */
+- pci_write_config_byte(pdev, 0x42, 0x20);
+-
+- /* we are using Avance logic codec */
+- pci_write_config_word(pdev, 0x2c, 0x1005);
+- pci_write_config_word(pdev, 0x2e, 0x4710);
+- pci_read_config_dword(pdev, 0x2c, &val);
+-
+- pci_write_config_byte(pdev, 0x42, 0x0);
+-}
+-
+-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686,
+- loongson2e_686b_func0_fixup);
+-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_1,
+- loongson2e_686b_func1_fixup);
+-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_2,
+- loongson2e_686b_func2_fixup);
+-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C586_3,
+- loongson2e_686b_func3_fixup);
+-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5,
+- loongson2e_686b_func5_fixup);
+-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NEC, PCI_DEVICE_ID_NEC_USB,
+- loongson2e_nec_fixup);
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-malta.c rt4ls/arch/mips/pci/fixup-malta.c
+--- linux-2.6.30/arch/mips/pci/fixup-malta.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-malta.c 2009-06-12 16:27:08.850451649 +0200
+@@ -36,7 +36,7 @@
+ {0, PCID, PCIA, PCIB, PCIC } /* 21: PCI Slot 4 */
+ };
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ int virq;
+ virq = irq_tab[slot][pin];
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-mpc30x.c rt4ls/arch/mips/pci/fixup-mpc30x.c
+--- linux-2.6.30/arch/mips/pci/fixup-mpc30x.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-mpc30x.c 2009-06-12 16:27:08.850451649 +0200
+@@ -34,7 +34,7 @@
+ [29] = MQ200_IRQ,
+ };
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ if (slot == 30)
+ return internal_func_irqs[PCI_FUNC(dev->devfn)];
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-pmcmsp.c rt4ls/arch/mips/pci/fixup-pmcmsp.c
+--- linux-2.6.30/arch/mips/pci/fixup-pmcmsp.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-pmcmsp.c 2009-06-12 16:27:08.850451649 +0200
+@@ -202,7 +202,7 @@
+ * RETURNS: IRQ number
+ *
+ ****************************************************************************/
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ #if !defined(CONFIG_PMC_MSP7120_GW) && !defined(CONFIG_PMC_MSP7120_EVAL)
+ printk(KERN_WARNING "PCI: unknown board, no PCI IRQs assigned.\n");
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-pnx8550.c rt4ls/arch/mips/pci/fixup-pnx8550.c
+--- linux-2.6.30/arch/mips/pci/fixup-pnx8550.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-pnx8550.c 2009-06-12 16:27:08.850451649 +0200
+@@ -45,7 +45,7 @@
+ /* nothing to do here */
+ }
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ return pnx8550_irq_tab[slot][pin];
+ }
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-rbtx4927.c rt4ls/arch/mips/pci/fixup-rbtx4927.c
+--- linux-2.6.30/arch/mips/pci/fixup-rbtx4927.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-rbtx4927.c 2009-06-12 16:27:08.850451649 +0200
+@@ -36,7 +36,7 @@
+ #include <asm/txx9/pci.h>
+ #include <asm/txx9/rbtx4927.h>
+
+-int __init rbtx4927_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init rbtx4927_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ unsigned char irq = pin;
+
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-rbtx4938.c rt4ls/arch/mips/pci/fixup-rbtx4938.c
+--- linux-2.6.30/arch/mips/pci/fixup-rbtx4938.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-rbtx4938.c 2009-06-12 16:27:08.854451321 +0200
+@@ -13,7 +13,7 @@
+ #include <asm/txx9/pci.h>
+ #include <asm/txx9/rbtx4938.h>
+
+-int __init rbtx4938_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init rbtx4938_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ int irq = tx4938_pcic1_map_irq(dev, slot);
+
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-rc32434.c rt4ls/arch/mips/pci/fixup-rc32434.c
+--- linux-2.6.30/arch/mips/pci/fixup-rc32434.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-rc32434.c 2009-06-12 16:27:08.854451321 +0200
+@@ -37,7 +37,7 @@
+ {0, 0, 1, 3, 0, 2, 1, 3, 0, 2, 1, 3}
+ };
+
+-int __devinit pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __devinit pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ int irq = 0;
+
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-sni.c rt4ls/arch/mips/pci/fixup-sni.c
+--- linux-2.6.30/arch/mips/pci/fixup-sni.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-sni.c 2009-06-12 16:27:08.854451321 +0200
+@@ -130,7 +130,7 @@
+ return (csmsr & 0xa0) == 0x20;
+ }
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ switch (sni_brd_type) {
+ case SNI_BRD_PCI_TOWER_CPLUS:
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-tb0219.c rt4ls/arch/mips/pci/fixup-tb0219.c
+--- linux-2.6.30/arch/mips/pci/fixup-tb0219.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-tb0219.c 2009-06-12 16:27:08.854451321 +0200
+@@ -23,7 +23,7 @@
+
+ #include <asm/vr41xx/tb0219.h>
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ int irq = -1;
+
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-tb0226.c rt4ls/arch/mips/pci/fixup-tb0226.c
+--- linux-2.6.30/arch/mips/pci/fixup-tb0226.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-tb0226.c 2009-06-12 16:27:08.854451321 +0200
+@@ -23,7 +23,7 @@
+ #include <asm/vr41xx/giu.h>
+ #include <asm/vr41xx/tb0226.h>
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ int irq = -1;
+
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-tb0287.c rt4ls/arch/mips/pci/fixup-tb0287.c
+--- linux-2.6.30/arch/mips/pci/fixup-tb0287.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-tb0287.c 2009-06-12 16:27:08.854451321 +0200
+@@ -22,7 +22,7 @@
+
+ #include <asm/vr41xx/tb0287.h>
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ unsigned char bus;
+ int irq = -1;
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-wrppmc.c rt4ls/arch/mips/pci/fixup-wrppmc.c
+--- linux-2.6.30/arch/mips/pci/fixup-wrppmc.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-wrppmc.c 2009-06-12 16:27:08.854451321 +0200
+@@ -25,7 +25,7 @@
+ [6] = {0, WRPPMC_PCI_INTA_IRQ, 0, 0, 0},
+ };
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ return pci_irq_tab[slot][pin];
+ }
+diff -Nur linux-2.6.30/arch/mips/pci/fixup-yosemite.c rt4ls/arch/mips/pci/fixup-yosemite.c
+--- linux-2.6.30/arch/mips/pci/fixup-yosemite.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/fixup-yosemite.c 2009-06-12 16:27:08.886440592 +0200
+@@ -26,7 +26,7 @@
+ #include <linux/init.h>
+ #include <linux/pci.h>
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ if (pin == 0)
+ return -1;
+diff -Nur linux-2.6.30/arch/mips/pci/ops-bonito64.c rt4ls/arch/mips/pci/ops-bonito64.c
+--- linux-2.6.30/arch/mips/pci/ops-bonito64.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/ops-bonito64.c 2009-06-12 16:27:08.890441660 +0200
+@@ -29,20 +29,16 @@
+ #define PCI_ACCESS_READ 0
+ #define PCI_ACCESS_WRITE 1
+
+-#ifdef CONFIG_LEMOTE_FULONG
+-#define CFG_SPACE_REG(offset) (void *)CKSEG1ADDR(BONITO_PCICFG_BASE | (offset))
+-#define ID_SEL_BEGIN 11
+-#else
+-#define CFG_SPACE_REG(offset) (void *)CKSEG1ADDR(_pcictrl_bonito_pcicfg + (offset))
++#define CFG_SPACE_REG(offset) \
++ (void *)CKSEG1ADDR(_pcictrl_bonito_pcicfg + (offset))
+ #define ID_SEL_BEGIN 10
+-#endif
+ #define MAX_DEV_NUM (31 - ID_SEL_BEGIN)
+
+
+ static int bonito64_pcibios_config_access(unsigned char access_type,
+ struct pci_bus *bus,
+ unsigned int devfn, int where,
+- u32 * data)
++ u32 *data)
+ {
+ u32 busnum = bus->number;
+ u32 addr, type;
+@@ -77,10 +73,9 @@
+ addrp = CFG_SPACE_REG(addr & 0xffff);
+ if (access_type == PCI_ACCESS_WRITE) {
+ writel(cpu_to_le32(*data), addrp);
+-#ifndef CONFIG_LEMOTE_FULONG
+ /* Wait till done */
+- while (BONITO_PCIMSTAT & 0xF);
+-#endif
++ while (BONITO_PCIMSTAT & 0xF)
++ ;
+ } else {
+ *data = le32_to_cpu(readl(addrp));
+ }
+@@ -107,7 +102,7 @@
+ * read/write a 32bit word and mask/modify the data we actually want.
+ */
+ static int bonito64_pcibios_read(struct pci_bus *bus, unsigned int devfn,
+- int where, int size, u32 * val)
++ int where, int size, u32 *val)
+ {
+ u32 data = 0;
+
+@@ -144,7 +139,7 @@
+ data = val;
+ else {
+ if (bonito64_pcibios_config_access(PCI_ACCESS_READ, bus, devfn,
+- where, &data))
++ where, &data))
+ return -1;
+
+ if (size == 1)
+diff -Nur linux-2.6.30/arch/mips/pci/ops-loongson2.c rt4ls/arch/mips/pci/ops-loongson2.c
+--- linux-2.6.30/arch/mips/pci/ops-loongson2.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/pci/ops-loongson2.c 2009-06-12 16:27:08.890441660 +0200
+@@ -0,0 +1,213 @@
++/*
++ * Copyright (C) 1999, 2000, 2004 MIPS Technologies, Inc.
++ * All rights reserved.
++ * Authors: Carsten Langgaard <carstenl@mips.com>
++ * Maciej W. Rozycki <macro@mips.com>
++ *
++ * 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
++ * published by the Free Software Foundation.
++ *
++ * This program is distributed in the hope 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.
++ *
++ * MIPS boards specific PCI support.
++ */
++#include <linux/types.h>
++#include <linux/pci.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++
++#include <loongson.h>
++
++#ifdef CONFIG_CS5536
++#include <cs5536/cs5536_pci.h>
++#include <cs5536/cs5536.h>
++#endif
++
++#define PCI_ACCESS_READ 0
++#define PCI_ACCESS_WRITE 1
++
++#define CFG_SPACE_REG(offset) \
++ (void *)CKSEG1ADDR(LOONGSON_PCICFG_BASE | (offset))
++#define ID_SEL_BEGIN 11
++#define MAX_DEV_NUM (31 - ID_SEL_BEGIN)
++
++
++static int loongson_pcibios_config_access(unsigned char access_type,
++ struct pci_bus *bus,
++ unsigned int devfn, int where,
++ u32 *data)
++{
++ u32 busnum = bus->number;
++ u32 addr, type;
++ u32 dummy;
++ void *addrp;
++ int device = PCI_SLOT(devfn);
++ int function = PCI_FUNC(devfn);
++ int reg = where & ~3;
++
++ if (busnum == 0) {
++ /* board-specific part,currently,only fuloong2f,yeeloong2f
++ * use CS5536, fuloong2e use via686b, gdium has no
++ * south bridge
++ */
++#ifdef CONFIG_CS5536
++ /* cs5536_pci_conf_read4/write4() will call _rdmsr/_wrmsr()
++ * to access the regsters 0xf4,0xf8,0xfc, which is bigger than
++ * 0xf0, so, it will not go this branch, but the others. so,
++ * no calling dead loop here.
++ */
++ if ((PCI_IDSEL_CS5536 == device) && (reg < 0xF0)) {
++ switch (access_type) {
++ case PCI_ACCESS_READ:
++ *data = cs5536_pci_conf_read4(function, reg);
++ break;
++ case PCI_ACCESS_WRITE:
++ cs5536_pci_conf_write4(function, reg, *data);
++ break;
++ }
++ return 0;
++ }
++#endif
++ /* Type 0 configuration for onboard PCI bus */
++ if (device > MAX_DEV_NUM)
++ return -1;
++
++ addr = (1 << (device + ID_SEL_BEGIN)) | (function << 8) | reg;
++ type = 0;
++ } else {
++ /* Type 1 configuration for offboard PCI bus */
++ addr = (busnum << 16) | (device << 11) | (function << 8) | reg;
++ type = 0x10000;
++ }
++
++ /* Clear aborts */
++ LOONGSON_PCICMD |= LOONGSON_PCICMD_MABORT_CLR | \
++ LOONGSON_PCICMD_MTABORT_CLR;
++
++ LOONGSON_PCIMAP_CFG = (addr >> 16) | type;
++
++ /* Flush Bonito register block */
++ dummy = LOONGSON_PCIMAP_CFG;
++ mmiowb();
++
++ addrp = CFG_SPACE_REG(addr & 0xffff);
++ if (access_type == PCI_ACCESS_WRITE)
++ writel(cpu_to_le32(*data), addrp);
++ else
++ *data = le32_to_cpu(readl(addrp));
++
++ /* Detect Master/Target abort */
++ if (LOONGSON_PCICMD & (LOONGSON_PCICMD_MABORT_CLR |
++ LOONGSON_PCICMD_MTABORT_CLR)) {
++ /* Error occurred */
++
++ /* Clear bits */
++ LOONGSON_PCICMD |= (LOONGSON_PCICMD_MABORT_CLR |
++ LOONGSON_PCICMD_MTABORT_CLR);
++
++ return -1;
++ }
++
++ return 0;
++
++}
++
++
++/*
++ * We can't address 8 and 16 bit words directly. Instead we have to
++ * read/write a 32bit word and mask/modify the data we actually want.
++ */
++static int loongson_pcibios_read(struct pci_bus *bus, unsigned int devfn,
++ int where, int size, u32 *val)
++{
++ u32 data = 0;
++
++ if ((size == 2) && (where & 1))
++ return PCIBIOS_BAD_REGISTER_NUMBER;
++ else if ((size == 4) && (where & 3))
++ return PCIBIOS_BAD_REGISTER_NUMBER;
++
++ if (loongson_pcibios_config_access(PCI_ACCESS_READ, bus, devfn, where,
++ &data))
++ return -1;
++
++ if (size == 1)
++ *val = (data >> ((where & 3) << 3)) & 0xff;
++ else if (size == 2)
++ *val = (data >> ((where & 3) << 3)) & 0xffff;
++ else
++ *val = data;
++
++ return PCIBIOS_SUCCESSFUL;
++}
++
++static int loongson_pcibios_write(struct pci_bus *bus, unsigned int devfn,
++ int where, int size, u32 val)
++{
++ u32 data = 0;
++
++ if ((size == 2) && (where & 1))
++ return PCIBIOS_BAD_REGISTER_NUMBER;
++ else if ((size == 4) && (where & 3))
++ return PCIBIOS_BAD_REGISTER_NUMBER;
++
++ if (size == 4)
++ data = val;
++ else {
++ if (loongson_pcibios_config_access(PCI_ACCESS_READ, bus, devfn,
++ where, &data))
++ return -1;
++
++ if (size == 1)
++ data = (data & ~(0xff << ((where & 3) << 3))) |
++ (val << ((where & 3) << 3));
++ else if (size == 2)
++ data = (data & ~(0xffff << ((where & 3) << 3))) |
++ (val << ((where & 3) << 3));
++ }
++
++ if (loongson_pcibios_config_access(PCI_ACCESS_WRITE, bus, devfn, where,
++ &data))
++ return -1;
++
++ return PCIBIOS_SUCCESSFUL;
++}
++
++struct pci_ops loongson_pci_ops = {
++ .read = loongson_pcibios_read,
++ .write = loongson_pcibios_write
++};
++
++#ifdef CONFIG_CS5536
++void _rdmsr(u32 msr, u32 *hi, u32 *lo)
++{
++ struct pci_bus bus = {
++ .number = PCI_BUS_CS5536
++ };
++ u32 devfn = PCI_DEVFN(PCI_IDSEL_CS5536, 0);
++ loongson_pcibios_write(&bus, devfn, PCI_MSR_ADDR, 4, msr);
++ loongson_pcibios_read(&bus, devfn, PCI_MSR_DATA_LO, 4, lo);
++ loongson_pcibios_read(&bus, devfn, PCI_MSR_DATA_HI, 4, hi);
++}
++EXPORT_SYMBOL(_rdmsr);
++
++void _wrmsr(u32 msr, u32 hi, u32 lo)
++{
++ struct pci_bus bus = {
++ .number = PCI_BUS_CS5536
++ };
++ u32 devfn = PCI_DEVFN(PCI_IDSEL_CS5536, 0);
++ loongson_pcibios_write(&bus, devfn, PCI_MSR_ADDR, 4, msr);
++ loongson_pcibios_write(&bus, devfn, PCI_MSR_DATA_LO, 4, lo);
++ loongson_pcibios_write(&bus, devfn, PCI_MSR_DATA_HI, 4, hi);
++}
++EXPORT_SYMBOL(_wrmsr);
++#endif
+diff -Nur linux-2.6.30/arch/mips/pci/pci-bcm1480.c rt4ls/arch/mips/pci/pci-bcm1480.c
+--- linux-2.6.30/arch/mips/pci/pci-bcm1480.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/pci-bcm1480.c 2009-06-12 16:27:09.146457490 +0200
+@@ -74,7 +74,7 @@
+ *(u32 *)(cfg_space + (addr & ~3)) = data;
+ }
+
+-int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ if (pin == 0)
+ return -1;
+diff -Nur linux-2.6.30/arch/mips/pci/pci-bcm47xx.c rt4ls/arch/mips/pci/pci-bcm47xx.c
+--- linux-2.6.30/arch/mips/pci/pci-bcm47xx.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/pci-bcm47xx.c 2009-06-12 16:27:09.146457490 +0200
+@@ -26,7 +26,7 @@
+ #include <linux/pci.h>
+ #include <linux/ssb/ssb.h>
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ return 0;
+ }
+diff -Nur linux-2.6.30/arch/mips/pci/pci-ip27.c rt4ls/arch/mips/pci/pci-ip27.c
+--- linux-2.6.30/arch/mips/pci/pci-ip27.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/pci-ip27.c 2009-06-12 16:27:09.150468058 +0200
+@@ -141,7 +141,7 @@
+ * A given PCI device, in general, should be able to intr any of the cpus
+ * on any one of the hubs connected to its xbow.
+ */
+-int __devinit pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __devinit pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ return 0;
+ }
+diff -Nur linux-2.6.30/arch/mips/pci/pci-lasat.c rt4ls/arch/mips/pci/pci-lasat.c
+--- linux-2.6.30/arch/mips/pci/pci-lasat.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/pci-lasat.c 2009-06-12 16:27:09.150468058 +0200
+@@ -61,7 +61,7 @@
+ #define LASAT_IRQ_PCIC (LASAT_IRQ_BASE + 7)
+ #define LASAT_IRQ_PCID (LASAT_IRQ_BASE + 8)
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ switch (slot) {
+ case 1:
+diff -Nur linux-2.6.30/arch/mips/pci/pci-sb1250.c rt4ls/arch/mips/pci/pci-sb1250.c
+--- linux-2.6.30/arch/mips/pci/pci-sb1250.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/pci-sb1250.c 2009-06-12 16:27:09.150468058 +0200
+@@ -84,7 +84,7 @@
+ *(u32 *) (cfg_space + (addr & ~3)) = data;
+ }
+
+-int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ return dev->irq;
+ }
+diff -Nur linux-2.6.30/arch/mips/pci/pci-tx4938.c rt4ls/arch/mips/pci/pci-tx4938.c
+--- linux-2.6.30/arch/mips/pci/pci-tx4938.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/pci-tx4938.c 2009-06-12 16:27:09.154469127 +0200
+@@ -114,7 +114,7 @@
+ return pciclk;
+ }
+
+-int __init tx4938_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
++int __init tx4938_pcic1_map_irq(struct pci_dev *dev, u8 slot)
+ {
+ if (get_tx4927_pcicptr(dev->bus->sysdata) == tx4938_pcic1ptr) {
+ switch (slot) {
+diff -Nur linux-2.6.30/arch/mips/pci/pci-tx4939.c rt4ls/arch/mips/pci/pci-tx4939.c
+--- linux-2.6.30/arch/mips/pci/pci-tx4939.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/pci/pci-tx4939.c 2009-06-12 16:27:09.154469127 +0200
+@@ -50,7 +50,7 @@
+ ((pciclk + 50000) / 100000) % 10);
+ }
+
+-int __init tx4939_pcic1_map_irq(const struct pci_dev *dev, u8 slot)
++int __init tx4939_pcic1_map_irq(struct pci_dev *dev, u8 slot)
+ {
+ if (get_tx4927_pcicptr(dev->bus->sysdata) == tx4939_pcic1ptr) {
+ switch (slot) {
+@@ -70,7 +70,7 @@
+ return -1;
+ }
+
+-int __init tx4939_pci_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init tx4939_pci_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ int irq = tx4939_pcic1_map_irq(dev, slot);
+
+diff -Nur linux-2.6.30/arch/mips/power/Makefile rt4ls/arch/mips/power/Makefile
+--- linux-2.6.30/arch/mips/power/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/power/Makefile 2009-06-12 16:27:09.166460321 +0200
+@@ -0,0 +1 @@
++obj-$(CONFIG_HIBERNATION) += cpu.o hibernate.o
+diff -Nur linux-2.6.30/arch/mips/power/cpu.c rt4ls/arch/mips/power/cpu.c
+--- linux-2.6.30/arch/mips/power/cpu.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/power/cpu.c 2009-06-12 16:27:09.170469770 +0200
+@@ -0,0 +1,43 @@
++/*
++ * Suspend support for mips.
++ *
++ * Distributed under GPLv2
++ *
++ * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
++ * Author: Hu Hongbing <huhb@lemote.com>
++ * Wu Zhangjin <wuzj@lemote.com>
++ */
++#include <asm/suspend.h>
++#include <asm/fpu.h>
++#include <asm/dsp.h>
++
++static u32 saved_status;
++struct pt_regs saved_regs;
++
++void save_processor_state(void)
++{
++ saved_status = read_c0_status();
++
++ if (is_fpu_owner())
++ save_fp(current);
++ if (cpu_has_dsp)
++ save_dsp(current);
++}
++
++void restore_processor_state(void)
++{
++ write_c0_status(saved_status);
++
++ if (is_fpu_owner())
++ restore_fp(current);
++ if (cpu_has_dsp)
++ restore_dsp(current);
++}
++
++int pfn_is_nosave(unsigned long pfn)
++{
++ unsigned long nosave_begin_pfn = PFN_DOWN(__pa(&__nosave_begin));
++ unsigned long nosave_end_pfn = PFN_UP(__pa(&__nosave_end));
++
++ return (pfn >= nosave_begin_pfn) && (pfn < nosave_end_pfn);
++}
+diff -Nur linux-2.6.30/arch/mips/power/hibernate.S rt4ls/arch/mips/power/hibernate.S
+--- linux-2.6.30/arch/mips/power/hibernate.S 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/arch/mips/power/hibernate.S 2009-06-12 16:27:09.170469770 +0200
+@@ -0,0 +1,70 @@
++/*
++ * Hibernation support for mips - temporary page tables
++ *
++ * Distributed under GPLv2
++ *
++ * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology
++ * Author: Hu Hongbing <huhb@lemote.com>
++ * Wu Zhangjin <wuzj@lemote.com>
++ */
++#include <asm/asm-offsets.h>
++#include <asm/regdef.h>
++#include <asm/asm.h>
++
++.text
++LEAF(swsusp_arch_suspend)
++ PTR_LA t0, saved_regs
++ PTR_S ra, PT_R31(t0)
++ PTR_S sp, PT_R29(t0)
++ PTR_S fp, PT_R30(t0)
++ PTR_S gp, PT_R28(t0)
++ PTR_S s0, PT_R16(t0)
++ PTR_S s1, PT_R17(t0)
++ PTR_S s2, PT_R18(t0)
++ PTR_S s3, PT_R19(t0)
++ PTR_S s4, PT_R20(t0)
++ PTR_S s5, PT_R21(t0)
++ PTR_S s6, PT_R22(t0)
++ PTR_S s7, PT_R23(t0)
++ j swsusp_save
++END(swsusp_arch_suspend)
++
++LEAF(swsusp_arch_resume)
++ PTR_L t0, restore_pblist
++0:
++ PTR_L t1, PBE_ADDRESS(t0) /* source */
++ PTR_L t2, PBE_ORIG_ADDRESS(t0) /* destination */
++ PTR_ADDIU t3, t1, _PAGE_SIZE
++1:
++ REG_L t8, (t1)
++ REG_S t8, (t2)
++ PTR_ADDIU t1, t1, SZREG
++ PTR_ADDIU t2, t2, SZREG
++ bne t1, t3, 1b
++ PTR_L t0, PBE_NEXT(t0)
++ bnez t0, 0b
++ /* flush caches to make sure context is in memory */
++ PTR_L t0, __flush_cache_all
++ jalr t0
++ /* flush tlb entries */
++#ifdef CONFIG_SMP
++ jal flush_tlb_all
++#else
++ jal local_flush_tlb_all
++#endif
++ PTR_LA t0, saved_regs
++ PTR_L ra, PT_R31(t0)
++ PTR_L sp, PT_R29(t0)
++ PTR_L fp, PT_R30(t0)
++ PTR_L gp, PT_R28(t0)
++ PTR_L s0, PT_R16(t0)
++ PTR_L s1, PT_R17(t0)
++ PTR_L s2, PT_R18(t0)
++ PTR_L s3, PT_R19(t0)
++ PTR_L s4, PT_R20(t0)
++ PTR_L s5, PT_R21(t0)
++ PTR_L s6, PT_R22(t0)
++ PTR_L s7, PT_R23(t0)
++ PTR_LI v0, 0x0
++ jr ra
++END(swsusp_arch_resume)
+diff -Nur linux-2.6.30/arch/mips/sibyte/bcm1480/irq.c rt4ls/arch/mips/sibyte/bcm1480/irq.c
+--- linux-2.6.30/arch/mips/sibyte/bcm1480/irq.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/sibyte/bcm1480/irq.c 2009-06-12 16:27:09.190461705 +0200
+@@ -116,10 +116,6 @@
+ unsigned long flags;
+ unsigned int irq_dirty;
+
+- if (cpumask_weight(mask) != 1) {
+- printk("attempted to set irq affinity for irq %d to multiple CPUs\n", irq);
+- return;
+- }
+ i = cpumask_first(mask);
+
+ /* Convert logical CPU to physical CPU */
+diff -Nur linux-2.6.30/arch/mips/sibyte/sb1250/irq.c rt4ls/arch/mips/sibyte/sb1250/irq.c
+--- linux-2.6.30/arch/mips/sibyte/sb1250/irq.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/sibyte/sb1250/irq.c 2009-06-12 16:27:09.194461656 +0200
+@@ -111,11 +111,6 @@
+
+ i = cpumask_first(mask);
+
+- if (cpumask_weight(mask) > 1) {
+- printk("attempted to set irq affinity for irq %d to multiple CPUs\n", irq);
+- return;
+- }
+-
+ /* Convert logical CPU to physical CPU */
+ cpu = cpu_logical_map(i);
+
+diff -Nur linux-2.6.30/arch/mips/txx9/generic/pci.c rt4ls/arch/mips/txx9/generic/pci.c
+--- linux-2.6.30/arch/mips/txx9/generic/pci.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/mips/txx9/generic/pci.c 2009-06-12 16:27:09.214461413 +0200
+@@ -382,7 +382,7 @@
+ return 0;
+ }
+
+-int __init pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
++int __init pcibios_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
+ {
+ return txx9_board_vec->pci_map_irq(dev, slot, pin);
+ }
+diff -Nur linux-2.6.30/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c rt4ls/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
+--- linux-2.6.30/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c 2009-06-12 16:27:12.750683917 +0200
+@@ -550,7 +550,7 @@
+ return -ENOMEM;
+ }
+ for_each_possible_cpu(i) {
+- if (!zalloc_cpumask_var_node(
++ if (!alloc_cpumask_var_node(
+ &per_cpu_ptr(acpi_perf_data, i)->shared_cpu_map,
+ GFP_KERNEL, cpu_to_node(i))) {
+
+diff -Nur linux-2.6.30/arch/x86/kernel/cpu/cpufreq/powernow-k7.c rt4ls/arch/x86/kernel/cpu/cpufreq/powernow-k7.c
+--- linux-2.6.30/arch/x86/kernel/cpu/cpufreq/powernow-k7.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/x86/kernel/cpu/cpufreq/powernow-k7.c 2009-06-12 16:27:12.758683819 +0200
+@@ -322,7 +322,7 @@
+ goto err0;
+ }
+
+- if (!zalloc_cpumask_var(&acpi_processor_perf->shared_cpu_map,
++ if (!alloc_cpumask_var(&acpi_processor_perf->shared_cpu_map,
+ GFP_KERNEL)) {
+ retval = -ENOMEM;
+ goto err05;
+diff -Nur linux-2.6.30/arch/x86/kernel/cpu/cpufreq/powernow-k8.c rt4ls/arch/x86/kernel/cpu/cpufreq/powernow-k8.c
+--- linux-2.6.30/arch/x86/kernel/cpu/cpufreq/powernow-k8.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/x86/kernel/cpu/cpufreq/powernow-k8.c 2009-06-12 16:27:12.758683819 +0200
+@@ -887,7 +887,7 @@
+ /* notify BIOS that we exist */
+ acpi_processor_notify_smm(THIS_MODULE);
+
+- if (!zalloc_cpumask_var(&data->acpi_data.shared_cpu_map, GFP_KERNEL)) {
++ if (!alloc_cpumask_var(&data->acpi_data.shared_cpu_map, GFP_KERNEL)) {
+ printk(KERN_ERR PFX
+ "unable to alloc powernow_k8_data cpumask\n");
+ ret_val = -ENOMEM;
+diff -Nur linux-2.6.30/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c rt4ls/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c
+--- linux-2.6.30/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/x86/kernel/cpu/cpufreq/speedstep-centrino.c 2009-06-12 16:27:12.758683819 +0200
+@@ -471,7 +471,7 @@
+
+ if (unlikely(!alloc_cpumask_var(&saved_mask, GFP_KERNEL)))
+ return -ENOMEM;
+- if (unlikely(!zalloc_cpumask_var(&covered_cpus, GFP_KERNEL))) {
++ if (unlikely(!alloc_cpumask_var(&covered_cpus, GFP_KERNEL))) {
+ free_cpumask_var(saved_mask);
+ return -ENOMEM;
+ }
+diff -Nur linux-2.6.30/arch/x86/kernel/cpu/mcheck/mce_64.c rt4ls/arch/x86/kernel/cpu/mcheck/mce_64.c
+--- linux-2.6.30/arch/x86/kernel/cpu/mcheck/mce_64.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/x86/kernel/cpu/mcheck/mce_64.c 2009-06-12 16:27:12.766685398 +0200
+@@ -1163,7 +1163,7 @@
+ if (!mce_available(&boot_cpu_data))
+ return -EIO;
+
+- zalloc_cpumask_var(&mce_device_initialized, GFP_KERNEL);
++ alloc_cpumask_var(&mce_device_initialized, GFP_KERNEL);
+
+ err = mce_init_banks();
+ if (err)
+diff -Nur linux-2.6.30/arch/x86/kernel/tlb_uv.c rt4ls/arch/x86/kernel/tlb_uv.c
+--- linux-2.6.30/arch/x86/kernel/tlb_uv.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/arch/x86/kernel/tlb_uv.c 2009-06-12 16:27:13.002711263 +0200
+@@ -832,7 +832,7 @@
+ return 0;
+
+ for_each_possible_cpu(cur_cpu)
+- zalloc_cpumask_var_node(&per_cpu(uv_flush_tlb_mask, cur_cpu),
++ alloc_cpumask_var_node(&per_cpu(uv_flush_tlb_mask, cur_cpu),
+ GFP_KERNEL, cpu_to_node(cur_cpu));
+
+ uv_bau_retry_limit = 1;
+diff -Nur linux-2.6.30/block/bsg.c rt4ls/block/bsg.c
+--- linux-2.6.30/block/bsg.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/block/bsg.c 2009-06-12 16:27:13.226714938 +0200
+@@ -315,7 +315,6 @@
+ blk_put_request(rq);
+ if (next_rq) {
+ blk_rq_unmap_user(next_rq->bio);
+- next_rq->bio = NULL;
+ blk_put_request(next_rq);
+ }
+ return ERR_PTR(ret);
+@@ -449,7 +448,6 @@
+ hdr->dout_resid = rq->data_len;
+ hdr->din_resid = rq->next_rq->data_len;
+ blk_rq_unmap_user(bidi_bio);
+- rq->next_rq->bio = NULL;
+ blk_put_request(rq->next_rq);
+ } else if (rq_data_dir(rq) == READ)
+ hdr->din_resid = rq->data_len;
+@@ -468,7 +466,6 @@
+ blk_rq_unmap_user(bio);
+ if (rq->cmd != rq->__cmd)
+ kfree(rq->cmd);
+- rq->bio = NULL;
+ blk_put_request(rq);
+
+ return ret;
+diff -Nur linux-2.6.30/drivers/acpi/processor_core.c rt4ls/drivers/acpi/processor_core.c
+--- linux-2.6.30/drivers/acpi/processor_core.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/drivers/acpi/processor_core.c 2009-06-12 16:27:13.558736838 +0200
+@@ -844,7 +844,7 @@
+ if (!pr)
+ return -ENOMEM;
+
+- if (!zalloc_cpumask_var(&pr->throttling.shared_cpu_map, GFP_KERNEL)) {
++ if (!alloc_cpumask_var(&pr->throttling.shared_cpu_map, GFP_KERNEL)) {
+ kfree(pr);
+ return -ENOMEM;
+ }
+diff -Nur linux-2.6.30/drivers/char/mxser.c rt4ls/drivers/char/mxser.c
+--- linux-2.6.30/drivers/char/mxser.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/drivers/char/mxser.c 2009-06-12 16:27:13.878756104 +0200
+@@ -2711,7 +2711,7 @@
+ continue;
+
+ brd = &mxser_boards[m];
+- retval = mxser_get_ISA_conf(ioaddr[b], brd);
++ retval = mxser_get_ISA_conf(!ioaddr[b], brd);
+ if (retval <= 0) {
+ brd->info = NULL;
+ continue;
+diff -Nur linux-2.6.30/drivers/cpufreq/cpufreq.c rt4ls/drivers/cpufreq/cpufreq.c
+--- linux-2.6.30/drivers/cpufreq/cpufreq.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/drivers/cpufreq/cpufreq.c 2009-06-12 16:27:23.183344589 +0200
+@@ -808,7 +808,7 @@
+ ret = -ENOMEM;
+ goto nomem_out;
+ }
+- if (!zalloc_cpumask_var(&policy->related_cpus, GFP_KERNEL)) {
++ if (!alloc_cpumask_var(&policy->related_cpus, GFP_KERNEL)) {
+ free_cpumask_var(policy->cpus);
+ kfree(policy);
+ ret = -ENOMEM;
+diff -Nur linux-2.6.30/drivers/ide/amd74xx.c rt4ls/drivers/ide/amd74xx.c
+--- linux-2.6.30/drivers/ide/amd74xx.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/drivers/ide/amd74xx.c 2009-06-12 16:27:31.515864613 +0200
+@@ -23,6 +23,11 @@
+
+ #define DRV_NAME "amd74xx"
+
++static const char *am74xx_quirk_drives[] = {
++ "FUJITSU MHZ2160BH G2",
++ NULL
++};
++
+ enum {
+ AMD_IDE_CONFIG = 0x41,
+ AMD_CABLE_DETECT = 0x42,
+@@ -112,6 +117,19 @@
+ amd_set_drive(drive, XFER_PIO_0 + pio);
+ }
+
++static void amd_quirkproc(ide_drive_t *drive)
++{
++ const char **list, *m = (char *)&drive->id[ATA_ID_PROD];
++
++ for (list = am74xx_quirk_drives; *list != NULL; list++)
++ if (strstr(m, *list) != NULL) {
++ drive->quirk_list = 2;
++ return;
++ }
++
++ drive->quirk_list = 0;
++}
++
+ static void amd7409_cable_detect(struct pci_dev *dev)
+ {
+ /* no host side cable detection */
+@@ -186,6 +204,7 @@
+ static const struct ide_port_ops amd_port_ops = {
+ .set_pio_mode = amd_set_pio_mode,
+ .set_dma_mode = amd_set_drive,
++ .quirkproc = amd_quirkproc,
+ .cable_detect = amd_cable_detect,
+ };
+
+diff -Nur linux-2.6.30/drivers/md/raid5.c rt4ls/drivers/md/raid5.c
+--- linux-2.6.30/drivers/md/raid5.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/drivers/md/raid5.c 2009-06-12 16:27:48.380919207 +0200
+@@ -362,7 +362,7 @@
+
+ static struct stripe_head *
+ get_active_stripe(raid5_conf_t *conf, sector_t sector,
+- int previous, int noblock, int noquiesce)
++ int previous, int noblock)
+ {
+ struct stripe_head *sh;
+
+@@ -372,7 +372,7 @@
+
+ do {
+ wait_event_lock_irq(conf->wait_for_stripe,
+- conf->quiesce == 0 || noquiesce,
++ conf->quiesce == 0,
+ conf->device_lock, /* nothing */);
+ sh = __find_stripe(conf, sector, conf->generation - previous);
+ if (!sh) {
+@@ -2671,7 +2671,7 @@
+ sector_t bn = compute_blocknr(sh, i, 1);
+ sector_t s = raid5_compute_sector(conf, bn, 0,
+ &dd_idx, NULL);
+- sh2 = get_active_stripe(conf, s, 0, 1, 1);
++ sh2 = get_active_stripe(conf, s, 0, 1);
+ if (sh2 == NULL)
+ /* so far only the early blocks of this stripe
+ * have been requested. When later blocks
+@@ -2944,7 +2944,7 @@
+ /* Finish reconstruct operations initiated by the expansion process */
+ if (sh->reconstruct_state == reconstruct_state_result) {
+ struct stripe_head *sh2
+- = get_active_stripe(conf, sh->sector, 1, 1, 1);
++ = get_active_stripe(conf, sh->sector, 1, 1);
+ if (sh2 && test_bit(STRIPE_EXPAND_SOURCE, &sh2->state)) {
+ /* sh cannot be written until sh2 has been read.
+ * so arrange for sh to be delayed a little
+@@ -3189,7 +3189,7 @@
+
+ if (s.expanded && test_bit(STRIPE_EXPANDING, &sh->state)) {
+ struct stripe_head *sh2
+- = get_active_stripe(conf, sh->sector, 1, 1, 1);
++ = get_active_stripe(conf, sh->sector, 1, 1);
+ if (sh2 && test_bit(STRIPE_EXPAND_SOURCE, &sh2->state)) {
+ /* sh cannot be written until sh2 has been read.
+ * so arrange for sh to be delayed a little
+@@ -3288,7 +3288,7 @@
+ int i;
+
+ rcu_read_lock();
+- for (i = 0; i < conf->raid_disks; i++) {
++ for (i=0; i<mddev->raid_disks; i++) {
+ mdk_rdev_t *rdev = rcu_dereference(conf->disks[i].rdev);
+ if (rdev && !test_bit(Faulty, &rdev->flags) && atomic_read(&rdev->nr_pending)) {
+ struct request_queue *r_queue = bdev_get_queue(rdev->bdev);
+@@ -3675,7 +3675,7 @@
+ (unsigned long long)logical_sector);
+
+ sh = get_active_stripe(conf, new_sector, previous,
+- (bi->bi_rw&RWA_MASK), 0);
++ (bi->bi_rw&RWA_MASK));
+ if (sh) {
+ if (unlikely(previous)) {
+ /* expansion might have moved on while waiting for a
+@@ -3873,7 +3873,7 @@
+ for (i = 0; i < reshape_sectors; i += STRIPE_SECTORS) {
+ int j;
+ int skipped = 0;
+- sh = get_active_stripe(conf, stripe_addr+i, 0, 0, 1);
++ sh = get_active_stripe(conf, stripe_addr+i, 0, 0);
+ set_bit(STRIPE_EXPANDING, &sh->state);
+ atomic_inc(&conf->reshape_stripes);
+ /* If any of this stripe is beyond the end of the old
+@@ -3916,13 +3916,13 @@
+ raid5_compute_sector(conf, stripe_addr*(new_data_disks),
+ 1, &dd_idx, NULL);
+ last_sector =
+- raid5_compute_sector(conf, ((stripe_addr+reshape_sectors)
++ raid5_compute_sector(conf, ((stripe_addr+conf->chunk_size/512)
+ *(new_data_disks) - 1),
+ 1, &dd_idx, NULL);
+ if (last_sector >= mddev->dev_sectors)
+ last_sector = mddev->dev_sectors - 1;
+ while (first_sector <= last_sector) {
+- sh = get_active_stripe(conf, first_sector, 1, 0, 1);
++ sh = get_active_stripe(conf, first_sector, 1, 0);
+ set_bit(STRIPE_EXPAND_SOURCE, &sh->state);
+ set_bit(STRIPE_HANDLE, &sh->state);
+ release_stripe(sh);
+@@ -4022,9 +4022,9 @@
+
+ bitmap_cond_end_sync(mddev->bitmap, sector_nr);
+
+- sh = get_active_stripe(conf, sector_nr, 0, 1, 0);
++ sh = get_active_stripe(conf, sector_nr, 0, 1);
+ if (sh == NULL) {
+- sh = get_active_stripe(conf, sector_nr, 0, 0, 0);
++ sh = get_active_stripe(conf, sector_nr, 0, 0);
+ /* make sure we don't swamp the stripe cache if someone else
+ * is trying to get access
+ */
+@@ -4034,7 +4034,7 @@
+ * We don't need to check the 'failed' flag as when that gets set,
+ * recovery aborts.
+ */
+- for (i = 0; i < conf->raid_disks; i++)
++ for (i=0; i<mddev->raid_disks; i++)
+ if (conf->disks[i].rdev == NULL)
+ still_degraded = 1;
+
+@@ -4086,7 +4086,7 @@
+ /* already done this stripe */
+ continue;
+
+- sh = get_active_stripe(conf, sector, 0, 1, 0);
++ sh = get_active_stripe(conf, sector, 0, 1);
+
+ if (!sh) {
+ /* failed to get a stripe - must wait */
+diff -Nur linux-2.6.30/drivers/net/Kconfig rt4ls/drivers/net/Kconfig
+--- linux-2.6.30/drivers/net/Kconfig 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/drivers/net/Kconfig 2009-06-12 16:28:08.898195438 +0200
+@@ -2362,6 +2362,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 QLA3XXX
+ tristate "QLogic QLA3XXX Network Driver Support"
+ depends on PCI
+diff -Nur linux-2.6.30/drivers/net/Makefile rt4ls/drivers/net/Makefile
+--- linux-2.6.30/drivers/net/Makefile 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/drivers/net/Makefile 2009-06-12 16:28:08.910193335 +0200
+@@ -137,6 +137,8 @@
+ obj-$(CONFIG_QLA3XXX) += qla3xxx.o
+ 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.30/drivers/net/r8169.c rt4ls/drivers/net/r8169.c
+--- linux-2.6.30/drivers/net/r8169.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/drivers/net/r8169.c 2009-06-12 16:28:14.650663877 +0200
+@@ -66,6 +66,7 @@
+ #define RX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */
+ #define TX_DMA_BURST 6 /* Maximum PCI burst, '6' is 1024 */
+ #define EarlyTxThld 0x3F /* 0x3F means NO early transmit */
++#define RxPacketMaxSize 0x3FE8 /* 16K - 1 - ETH_HLEN - VLAN - CRC... */
+ #define SafeMtu 0x1c20 /* ... actually life sucks beyond ~7k */
+ #define InterFrameGap 0x03 /* 3 means InterFrameGap = the shortest one */
+
+@@ -2356,10 +2357,10 @@
+ return cmd;
+ }
+
+-static void rtl_set_rx_max_size(void __iomem *ioaddr, unsigned int rx_buf_sz)
++static void rtl_set_rx_max_size(void __iomem *ioaddr)
+ {
+ /* Low hurts. Let's disable the filtering. */
+- RTL_W16(RxMaxSize, rx_buf_sz);
++ RTL_W16(RxMaxSize, 16383);
+ }
+
+ static void rtl8169_set_magic_reg(void __iomem *ioaddr, unsigned mac_version)
+@@ -2406,7 +2407,7 @@
+
+ RTL_W8(EarlyTxThres, EarlyTxThld);
+
+- rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
++ rtl_set_rx_max_size(ioaddr);
+
+ if ((tp->mac_version == RTL_GIGA_MAC_VER_01) ||
+ (tp->mac_version == RTL_GIGA_MAC_VER_02) ||
+@@ -2667,7 +2668,7 @@
+
+ RTL_W8(EarlyTxThres, EarlyTxThld);
+
+- rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
++ rtl_set_rx_max_size(ioaddr);
+
+ tp->cp_cmd |= RTL_R16(CPlusCmd) | PktCntrDisable | INTT_1;
+
+@@ -2845,7 +2846,7 @@
+
+ RTL_W8(EarlyTxThres, EarlyTxThld);
+
+- rtl_set_rx_max_size(ioaddr, tp->rx_buf_sz);
++ rtl_set_rx_max_size(ioaddr);
+
+ tp->cp_cmd |= rtl_rw_cpluscmd(ioaddr) | PCIMulRW;
+
+diff -Nur linux-2.6.30/drivers/net/titan_ge.c rt4ls/drivers/net/titan_ge.c
+--- linux-2.6.30/drivers/net/titan_ge.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/drivers/net/titan_ge.c 2009-06-12 16:28:16.835950077 +0200
+@@ -0,0 +1,2069 @@
++/*
++ * drivers/net/titan_ge.c - Driver for Titan ethernet ports
++ *
++ * Copyright (C) 2003 PMC-Sierra Inc.
++ * Author : Manish Lachwani (lachwani@pmc-sierra.com)
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2
++ * of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ */
++
++/*
++ * The MAC unit of the Titan consists of the following:
++ *
++ * -> XDMA Engine to move data to from the memory to the MAC packet FIFO
++ * -> FIFO is where the incoming and outgoing data is placed
++ * -> TRTG is the unit that pulls the data from the FIFO for Tx and pushes
++ * the data into the FIFO for Rx
++ * -> TMAC is the outgoing MAC interface and RMAC is the incoming.
++ * -> AFX is the address filtering block
++ * -> GMII block to communicate with the PHY
++ *
++ * Rx will look like the following:
++ * GMII --> RMAC --> AFX --> TRTG --> Rx FIFO --> XDMA --> CPU memory
++ *
++ * Tx will look like the following:
++ * CPU memory --> XDMA --> Tx FIFO --> TRTG --> TMAC --> GMII
++ *
++ * The Titan driver has support for the following performance features:
++ * -> Rx side checksumming
++ * -> Jumbo Frames
++ * -> Interrupt Coalscing
++ * -> Rx NAPI
++ * -> SKB Recycling
++ * -> Transmit/Receive descriptors in SRAM
++ * -> Fast routing for IP forwarding
++ */
++
++#include <linux/dma-mapping.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/sched.h>
++#include <linux/ioport.h>
++#include <linux/interrupt.h>
++#include <linux/slab.h>
++#include <linux/string.h>
++#include <linux/errno.h>
++#include <linux/ip.h>
++#include <linux/init.h>
++#include <linux/in.h>
++#include <linux/platform_device.h>
++#include <linux/netdevice.h>
++#include <linux/etherdevice.h>
++#include <linux/skbuff.h>
++#include <linux/mii.h>
++#include <linux/delay.h>
++#include <linux/skbuff.h>
++#include <linux/prefetch.h>
++
++/* For MII specifc registers, titan_mdio.h should be included */
++#include <net/ip.h>
++
++#include <asm/bitops.h>
++#include <asm/io.h>
++#include <asm/types.h>
++#include <asm/pgtable.h>
++#include <asm/system.h>
++#include <asm/titan_dep.h>
++
++#include "titan_ge.h"
++#include "titan_mdio.h"
++
++/* Static Function Declarations */
++static int titan_ge_eth_open(struct net_device *);
++static void titan_ge_eth_stop(struct net_device *);
++static struct net_device_stats *titan_ge_get_stats(struct net_device *);
++static int titan_ge_init_rx_desc_ring(titan_ge_port_info *, int, int,
++ unsigned long, unsigned long,
++ unsigned long);
++static int titan_ge_init_tx_desc_ring(titan_ge_port_info *, int,
++ unsigned long, unsigned long);
++
++static int titan_ge_open(struct net_device *);
++static int titan_ge_start_xmit(struct sk_buff *, struct net_device *);
++static int titan_ge_stop(struct net_device *);
++
++static unsigned long titan_ge_tx_coal(unsigned long, int);
++
++static void titan_ge_port_reset(unsigned int);
++static int titan_ge_free_tx_queue(titan_ge_port_info *);
++static int titan_ge_rx_task(struct net_device *, titan_ge_port_info *);
++static int titan_ge_port_start(struct net_device *, titan_ge_port_info *);
++
++static int titan_ge_return_tx_desc(titan_ge_port_info *, int);
++
++/*
++ * Some configuration for the FIFO and the XDMA channel needs
++ * to be done only once for all the ports. This flag controls
++ * that
++ */
++static unsigned long config_done;
++
++/*
++ * One time out of memory flag
++ */
++static unsigned int oom_flag;
++
++static int titan_ge_poll(struct net_device *netdev, int *budget);
++
++static int titan_ge_receive_queue(struct net_device *, unsigned int);
++
++static struct platform_device *titan_ge_device[3];
++
++/* MAC Address */
++extern unsigned char titan_ge_mac_addr_base[6];
++
++unsigned long titan_ge_base;
++static unsigned long titan_ge_sram;
++
++static char titan_string[] = "titan";
++
++/*
++ * The Titan GE has two alignment requirements:
++ * -> skb->data to be cacheline aligned (32 byte)
++ * -> IP header alignment to 16 bytes
++ *
++ * The latter is not implemented. So, that results in an extra copy on
++ * the Rx. This is a big performance hog. For the former case, the
++ * dev_alloc_skb() has been replaced with titan_ge_alloc_skb(). The size
++ * requested is calculated:
++ *
++ * Ethernet Frame Size : 1518
++ * Ethernet Header : 14
++ * Future Titan change for IP header alignment : 2
++ *
++ * Hence, we allocate (1518 + 14 + 2+ 64) = 1580 bytes. For IP header
++ * alignment, we use skb_reserve().
++ */
++
++#define ALIGNED_RX_SKB_ADDR(addr) \
++ ((((unsigned long)(addr) + (64UL - 1UL)) \
++ & ~(64UL - 1UL)) - (unsigned long)(addr))
++
++#define titan_ge_alloc_skb(__length, __gfp_flags) \
++({ struct sk_buff *__skb; \
++ __skb = alloc_skb((__length) + 64, (__gfp_flags)); \
++ if(__skb) { \
++ int __offset = (int) ALIGNED_RX_SKB_ADDR(__skb->data); \
++ if(__offset) \
++ skb_reserve(__skb, __offset); \
++ } \
++ __skb; \
++})
++
++/*
++ * Configure the GMII block of the Titan based on what the PHY tells us
++ */
++static void titan_ge_gmii_config(int port_num)
++{
++ unsigned int reg_data = 0, phy_reg;
++ int err;
++
++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg);
++
++ if (err == TITAN_GE_MDIO_ERROR) {
++ printk(KERN_ERR
++ "Could not read PHY control register 0x11 \n");
++ printk(KERN_ERR
++ "Setting speed to 1000 Mbps and Duplex to Full \n");
++
++ return;
++ }
++
++ err = titan_ge_mdio_write(port_num, TITAN_GE_MDIO_PHY_IE, 0);
++
++ if (phy_reg & 0x8000) {
++ if (phy_reg & 0x2000) {
++ /* Full Duplex and 1000 Mbps */
++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE +
++ (port_num << 12)), 0x201);
++ } else {
++ /* Half Duplex and 1000 Mbps */
++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE +
++ (port_num << 12)), 0x2201);
++ }
++ }
++ if (phy_reg & 0x4000) {
++ if (phy_reg & 0x2000) {
++ /* Full Duplex and 100 Mbps */
++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE +
++ (port_num << 12)), 0x100);
++ } else {
++ /* Half Duplex and 100 Mbps */
++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE +
++ (port_num << 12)), 0x2100);
++ }
++ }
++ reg_data = TITAN_GE_READ(TITAN_GE_GMII_CONFIG_GENERAL +
++ (port_num << 12));
++ reg_data |= 0x3;
++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_GENERAL +
++ (port_num << 12)), reg_data);
++}
++
++/*
++ * Enable the TMAC if it is not
++ */
++static void titan_ge_enable_tx(unsigned int port_num)
++{
++ unsigned long reg_data;
++
++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12));
++ if (!(reg_data & 0x8000)) {
++ printk("TMAC disabled for port %d!! \n", port_num);
++
++ reg_data |= 0x0001; /* Enable TMAC */
++ reg_data |= 0x4000; /* CRC Check Enable */
++ reg_data |= 0x2000; /* Padding enable */
++ reg_data |= 0x0800; /* CRC Add enable */
++ reg_data |= 0x0080; /* PAUSE frame */
++
++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 +
++ (port_num << 12)), reg_data);
++ }
++}
++
++/*
++ * Tx Timeout function
++ */
++static void titan_ge_tx_timeout(struct net_device *netdev)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++
++ printk(KERN_INFO "%s: TX timeout ", netdev->name);
++ printk(KERN_INFO "Resetting card \n");
++
++ /* Do the reset outside of interrupt context */
++ schedule_work(&titan_ge_eth->tx_timeout_task);
++}
++
++/*
++ * Update the AFX tables for UC and MC for slice 0 only
++ */
++static void titan_ge_update_afx(titan_ge_port_info * titan_ge_eth)
++{
++ int port = titan_ge_eth->port_num;
++ unsigned int i;
++ volatile unsigned long reg_data = 0;
++ u8 p_addr[6];
++
++ memcpy(p_addr, titan_ge_eth->port_mac_addr, 6);
++
++ /* Set the MAC address here for TMAC and RMAC */
++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port << 12)),
++ ((p_addr[5] << 8) | p_addr[4]));
++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port << 12)),
++ ((p_addr[3] << 8) | p_addr[2]));
++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port << 12)),
++ ((p_addr[1] << 8) | p_addr[0]));
++
++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port << 12)),
++ ((p_addr[5] << 8) | p_addr[4]));
++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port << 12)),
++ ((p_addr[3] << 8) | p_addr[2]));
++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port << 12)),
++ ((p_addr[1] << 8) | p_addr[0]));
++
++ TITAN_GE_WRITE((0x112c | (port << 12)), 0x1);
++ /* Configure the eight address filters */
++ for (i = 0; i < 8; i++) {
++ /* Select each of the eight filters */
++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 +
++ (port << 12)), i);
++
++ /* Configure the match */
++ reg_data = 0x9; /* Forward Enable Bit */
++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 +
++ (port << 12)), reg_data);
++
++ /* Finally, AFX Exact Match Address Registers */
++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_LOW + (port << 12)),
++ ((p_addr[1] << 8) | p_addr[0]));
++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_MID + (port << 12)),
++ ((p_addr[3] << 8) | p_addr[2]));
++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_HIGH + (port << 12)),
++ ((p_addr[5] << 8) | p_addr[4]));
++
++ /* VLAN id set to 0 */
++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_VID +
++ (port << 12)), 0);
++ }
++}
++
++/*
++ * Actual Routine to reset the adapter when the timeout occurred
++ */
++static void titan_ge_tx_timeout_task(struct net_device *netdev)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++ int port = titan_ge_eth->port_num;
++
++ printk("Titan GE: Transmit timed out. Resetting ... \n");
++
++ /* Dump debug info */
++ printk(KERN_ERR "TRTG cause : %x \n",
++ TITAN_GE_READ(0x100c + (port << 12)));
++
++ /* Fix this for the other ports */
++ printk(KERN_ERR "FIFO cause : %x \n", TITAN_GE_READ(0x482c));
++ printk(KERN_ERR "IE cause : %x \n", TITAN_GE_READ(0x0040));
++ printk(KERN_ERR "XDMA GDI ERROR : %x \n",
++ TITAN_GE_READ(0x5008 + (port << 8)));
++ printk(KERN_ERR "CHANNEL ERROR: %x \n",
++ TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT
++ + (port << 8)));
++
++ netif_device_detach(netdev);
++ titan_ge_port_reset(titan_ge_eth->port_num);
++ titan_ge_port_start(netdev, titan_ge_eth);
++ netif_device_attach(netdev);
++}
++
++/*
++ * Change the MTU of the Ethernet Device
++ */
++static int titan_ge_change_mtu(struct net_device *netdev, int new_mtu)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++ unsigned long flags;
++
++ if ((new_mtu > 9500) || (new_mtu < 64))
++ return -EINVAL;
++
++ spin_lock_irqsave(&titan_ge_eth->lock, flags);
++
++ netdev->mtu = new_mtu;
++
++ /* Now we have to reopen the interface so that SKBs with the new
++ * size will be allocated */
++
++ if (netif_running(netdev)) {
++ titan_ge_eth_stop(netdev);
++
++ if (titan_ge_eth_open(netdev) != TITAN_OK) {
++ printk(KERN_ERR
++ "%s: Fatal error on opening device\n",
++ netdev->name);
++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
++ return -1;
++ }
++ }
++
++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
++ return 0;
++}
++
++/*
++ * Titan Gbe Interrupt Handler. All the three ports send interrupt to one line
++ * only. Once an interrupt is triggered, figure out the port and then check
++ * the channel.
++ */
++static irqreturn_t titan_ge_int_handler(int irq, void *dev_id)
++{
++ struct net_device *netdev = (struct net_device *) dev_id;
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++ unsigned int port_num = titan_ge_eth->port_num;
++ unsigned int reg_data;
++ unsigned int eth_int_cause_error = 0, is;
++ unsigned long eth_int_cause1;
++ int err = 0;
++#ifdef CONFIG_SMP
++ unsigned long eth_int_cause2;
++#endif
++
++ /* Ack the CPU interrupt */
++ switch (port_num) {
++ case 0:
++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS1);
++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR1, is);
++
++#ifdef CONFIG_SMP
++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS1);
++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR1, is);
++#endif
++ break;
++
++ case 1:
++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS0);
++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR0, is);
++
++#ifdef CONFIG_SMP
++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS0);
++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR0, is);
++#endif
++ break;
++
++ case 2:
++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS4);
++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR4, is);
++
++#ifdef CONFIG_SMP
++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS4);
++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR4, is);
++#endif
++ }
++
++ eth_int_cause1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A);
++#ifdef CONFIG_SMP
++ eth_int_cause2 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_B);
++#endif
++
++ /* Spurious interrupt */
++#ifdef CONFIG_SMP
++ if ( (eth_int_cause1 == 0) && (eth_int_cause2 == 0)) {
++#else
++ if (eth_int_cause1 == 0) {
++#endif
++ eth_int_cause_error = TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT +
++ (port_num << 8));
++
++ if (eth_int_cause_error == 0)
++ return IRQ_NONE;
++ }
++
++ /* Handle Tx first. No need to ack interrupts */
++#ifdef CONFIG_SMP
++ if ( (eth_int_cause1 & 0x20202) ||
++ (eth_int_cause2 & 0x20202) )
++#else
++ if (eth_int_cause1 & 0x20202)
++#endif
++ titan_ge_free_tx_queue(titan_ge_eth);
++
++ /* Handle the Rx next */
++#ifdef CONFIG_SMP
++ if ( (eth_int_cause1 & 0x10101) ||
++ (eth_int_cause2 & 0x10101)) {
++#else
++ if (eth_int_cause1 & 0x10101) {
++#endif
++ if (netif_rx_schedule_prep(netdev)) {
++ unsigned int ack;
++
++ ack = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE);
++ /* Disable Tx and Rx both */
++ if (port_num == 0)
++ ack &= ~(0x3);
++ if (port_num == 1)
++ ack &= ~(0x300);
++
++ if (port_num == 2)
++ ack &= ~(0x30000);
++
++ /* Interrupts have been disabled */
++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, ack);
++
++ __netif_rx_schedule(netdev);
++ }
++ }
++
++ /* Handle error interrupts */
++ if (eth_int_cause_error && (eth_int_cause_error != 0x2)) {
++ printk(KERN_ERR
++ "XDMA Channel Error : %x on port %d\n",
++ eth_int_cause_error, port_num);
++
++ printk(KERN_ERR
++ "XDMA GDI Hardware error : %x on port %d\n",
++ TITAN_GE_READ(0x5008 + (port_num << 8)), port_num);
++
++ printk(KERN_ERR
++ "XDMA currently has %d Rx descriptors \n",
++ TITAN_GE_READ(0x5048 + (port_num << 8)));
++
++ printk(KERN_ERR
++ "XDMA currently has prefetcted %d Rx descriptors \n",
++ TITAN_GE_READ(0x505c + (port_num << 8)));
++
++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT +
++ (port_num << 8)), eth_int_cause_error);
++ }
++
++ /*
++ * PHY interrupt to inform abt the changes. Reading the
++ * PHY Status register will clear the interrupt
++ */
++ if ((!(eth_int_cause1 & 0x30303)) &&
++ (eth_int_cause_error == 0)) {
++ err =
++ titan_ge_mdio_read(port_num,
++ TITAN_GE_MDIO_PHY_IS, &reg_data);
++
++ if (reg_data & 0x0400) {
++ /* Link status change */
++ titan_ge_mdio_read(port_num,
++ TITAN_GE_MDIO_PHY_STATUS, &reg_data);
++ if (!(reg_data & 0x0400)) {
++ /* Link is down */
++ netif_carrier_off(netdev);
++ netif_stop_queue(netdev);
++ } else {
++ /* Link is up */
++ netif_carrier_on(netdev);
++ netif_wake_queue(netdev);
++
++ /* Enable the queue */
++ titan_ge_enable_tx(port_num);
++ }
++ }
++ }
++
++ return IRQ_HANDLED;
++}
++
++/*
++ * Multicast and Promiscuous mode set. The
++ * set_multi entry point is called whenever the
++ * multicast address list or the network interface
++ * flags are updated.
++ */
++static void titan_ge_set_multi(struct net_device *netdev)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++ unsigned int port_num = titan_ge_eth->port_num;
++ unsigned long reg_data;
++
++ reg_data = TITAN_GE_READ(TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 +
++ (port_num << 12));
++
++ if (netdev->flags & IFF_PROMISC) {
++ reg_data |= 0x2;
++ }
++ else if (netdev->flags & IFF_ALLMULTI) {
++ reg_data |= 0x01;
++ reg_data |= 0x400; /* Use the 64-bit Multicast Hash bin */
++ }
++ else {
++ reg_data = 0x2;
++ }
++
++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 +
++ (port_num << 12)), reg_data);
++ if (reg_data & 0x01) {
++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_LOW +
++ (port_num << 12)), 0xffff);
++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDLOW +
++ (port_num << 12)), 0xffff);
++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDHI +
++ (port_num << 12)), 0xffff);
++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_HI +
++ (port_num << 12)), 0xffff);
++ }
++}
++
++/*
++ * Open the network device
++ */
++static int titan_ge_open(struct net_device *netdev)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++ unsigned int port_num = titan_ge_eth->port_num;
++ unsigned int irq = TITAN_ETH_PORT_IRQ - port_num;
++ int retval;
++
++ retval = request_irq(irq, titan_ge_int_handler,
++ SA_INTERRUPT | SA_SAMPLE_RANDOM , netdev->name, netdev);
++
++ if (retval != 0) {
++ printk(KERN_ERR "Cannot assign IRQ number to TITAN GE \n");
++ return -1;
++ }
++
++ netdev->irq = irq;
++ printk(KERN_INFO "Assigned IRQ %d to port %d\n", irq, port_num);
++
++ spin_lock_irq(&(titan_ge_eth->lock));
++
++ if (titan_ge_eth_open(netdev) != TITAN_OK) {
++ spin_unlock_irq(&(titan_ge_eth->lock));
++ printk("%s: Error opening interface \n", netdev->name);
++ free_irq(netdev->irq, netdev);
++ return -EBUSY;
++ }
++
++ spin_unlock_irq(&(titan_ge_eth->lock));
++
++ return 0;
++}
++
++/*
++ * Allocate the SKBs for the Rx ring. Also used
++ * for refilling the queue
++ */
++static int titan_ge_rx_task(struct net_device *netdev,
++ titan_ge_port_info *titan_ge_port)
++{
++ struct device *device = &titan_ge_device[titan_ge_port->port_num]->dev;
++ volatile titan_ge_rx_desc *rx_desc;
++ struct sk_buff *skb;
++ int rx_used_desc;
++ int count = 0;
++
++ while (titan_ge_port->rx_ring_skbs < titan_ge_port->rx_ring_size) {
++
++ /* First try to get the skb from the recycler */
++#ifdef TITAN_GE_JUMBO_FRAMES
++ skb = titan_ge_alloc_skb(TITAN_GE_JUMBO_BUFSIZE, GFP_ATOMIC);
++#else
++ skb = titan_ge_alloc_skb(TITAN_GE_STD_BUFSIZE, GFP_ATOMIC);
++#endif
++ if (unlikely(!skb)) {
++ /* OOM, set the flag */
++ printk("OOM \n");
++ oom_flag = 1;
++ break;
++ }
++ count++;
++ skb->dev = netdev;
++
++ titan_ge_port->rx_ring_skbs++;
++
++ rx_used_desc = titan_ge_port->rx_used_desc_q;
++ rx_desc = &(titan_ge_port->rx_desc_area[rx_used_desc]);
++
++#ifdef TITAN_GE_JUMBO_FRAMES
++ rx_desc->buffer_addr = dma_map_single(device, skb->data,
++ TITAN_GE_JUMBO_BUFSIZE - 2, DMA_FROM_DEVICE);
++#else
++ rx_desc->buffer_addr = dma_map_single(device, skb->data,
++ TITAN_GE_STD_BUFSIZE - 2, DMA_FROM_DEVICE);
++#endif
++
++ titan_ge_port->rx_skb[rx_used_desc] = skb;
++ rx_desc->cmd_sts = TITAN_GE_RX_BUFFER_OWNED;
++
++ titan_ge_port->rx_used_desc_q =
++ (rx_used_desc + 1) % TITAN_GE_RX_QUEUE;
++ }
++
++ return count;
++}
++
++/*
++ * Actual init of the Tital GE port. There is one register for
++ * the channel configuration
++ */
++static void titan_port_init(struct net_device *netdev,
++ titan_ge_port_info * titan_ge_eth)
++{
++ unsigned long reg_data;
++
++ titan_ge_port_reset(titan_ge_eth->port_num);
++
++ /* First reset the TMAC */
++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG);
++ reg_data |= 0x80000000;
++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data);
++
++ udelay(30);
++
++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG);
++ reg_data &= ~(0xc0000000);
++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data);
++
++ /* Now reset the RMAC */
++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG);
++ reg_data |= 0x00080000;
++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data);
++
++ udelay(30);
++
++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG);
++ reg_data &= ~(0x000c0000);
++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data);
++}
++
++/*
++ * Start the port. All the hardware specific configuration
++ * for the XDMA, Tx FIFO, Rx FIFO, TMAC, RMAC, TRTG and AFX
++ * go here
++ */
++static int titan_ge_port_start(struct net_device *netdev,
++ titan_ge_port_info * titan_port)
++{
++ volatile unsigned long reg_data, reg_data1;
++ int port_num = titan_port->port_num;
++ int count = 0;
++ unsigned long reg_data_1;
++
++ if (config_done == 0) {
++ reg_data = TITAN_GE_READ(0x0004);
++ reg_data |= 0x100;
++ TITAN_GE_WRITE(0x0004, reg_data);
++
++ reg_data &= ~(0x100);
++ TITAN_GE_WRITE(0x0004, reg_data);
++
++ /* Turn on GMII/MII mode and turn off TBI mode */
++ reg_data = TITAN_GE_READ(TITAN_GE_TSB_CTRL_1);
++ reg_data |= 0x00000700;
++ reg_data &= ~(0x00800000); /* Fencing */
++
++ TITAN_GE_WRITE(0x000c, 0x00001100);
++
++ TITAN_GE_WRITE(TITAN_GE_TSB_CTRL_1, reg_data);
++
++ /* Set the CPU Resource Limit register */
++ TITAN_GE_WRITE(0x00f8, 0x8);
++
++ /* Be conservative when using the BIU buffers */
++ TITAN_GE_WRITE(0x0068, 0x4);
++ }
++
++ titan_port->tx_threshold = 0;
++ titan_port->rx_threshold = 0;
++
++ /* We need to write the descriptors for Tx and Rx */
++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_TX_DESC + (port_num << 8)),
++ (unsigned long) titan_port->tx_dma);
++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_RX_DESC + (port_num << 8)),
++ (unsigned long) titan_port->rx_dma);
++
++ if (config_done == 0) {
++ /* Step 1: XDMA config */
++ reg_data = TITAN_GE_READ(TITAN_GE_XDMA_CONFIG);
++ reg_data &= ~(0x80000000); /* clear reset */
++ reg_data |= 0x1 << 29; /* sparse tx descriptor spacing */
++ reg_data |= 0x1 << 28; /* sparse rx descriptor spacing */
++ reg_data |= (0x1 << 23) | (0x1 << 24); /* Descriptor Coherency */
++ reg_data |= (0x1 << 21) | (0x1 << 22); /* Data Coherency */
++ TITAN_GE_WRITE(TITAN_GE_XDMA_CONFIG, reg_data);
++ }
++
++ /* IR register for the XDMA */
++ reg_data = TITAN_GE_READ(TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8));
++ reg_data |= 0x80068000; /* No Rx_OOD */
++ TITAN_GE_WRITE((TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)), reg_data);
++
++ /* Start the Tx and Rx XDMA controller */
++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + (port_num << 8));
++ reg_data &= 0x4fffffff; /* Clear tx reset */
++ reg_data &= 0xfff4ffff; /* Clear rx reset */
++
++#ifdef TITAN_GE_JUMBO_FRAMES
++ reg_data |= 0xa0 | 0x30030000;
++#else
++ reg_data |= 0x40 | 0x20030000;
++#endif
++
++#ifndef CONFIG_SMP
++ reg_data &= ~(0x10);
++ reg_data |= 0x0f; /* All of the packet */
++#endif
++
++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)), reg_data);
++
++ /* Rx desc count */
++ count = titan_ge_rx_task(netdev, titan_port);
++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), count);
++ count = TITAN_GE_READ(0x5048 + (port_num << 8));
++
++ udelay(30);
++
++ /*
++ * Step 2: Configure the SDQPF, i.e. FIFO
++ */
++ if (config_done == 0) {
++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL);
++ reg_data = 0x1;
++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data);
++ reg_data &= ~(0x1);
++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data);
++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL);
++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data);
++
++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL);
++ reg_data = 0x1;
++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data);
++ reg_data &= ~(0x1);
++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data);
++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL);
++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data);
++ }
++ /*
++ * Enable RX FIFO 0, 4 and 8
++ */
++ if (port_num == 0) {
++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_0);
++
++ reg_data |= 0x100000;
++ reg_data |= (0xff << 10);
++
++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data);
++ /*
++ * BAV2,BAV and DAV settings for the Rx FIFO
++ */
++ reg_data1 = TITAN_GE_READ(0x4844);
++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1);
++ TITAN_GE_WRITE(0x4844, reg_data1);
++
++ reg_data &= ~(0x00100000);
++ reg_data |= 0x200000;
++
++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data);
++
++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_0);
++ reg_data |= 0x100000;
++
++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data);
++
++ reg_data |= (0xff << 10);
++
++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data);
++
++ /*
++ * BAV2, BAV and DAV settings for the Tx FIFO
++ */
++ reg_data1 = TITAN_GE_READ(0x4944);
++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10);
++
++ TITAN_GE_WRITE(0x4944, reg_data1);
++
++ reg_data &= ~(0x00100000);
++ reg_data |= 0x200000;
++
++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data);
++
++ }
++
++ if (port_num == 1) {
++ reg_data = TITAN_GE_READ(0x4870);
++
++ reg_data |= 0x100000;
++ reg_data |= (0xff << 10) | (0xff + 1);
++
++ TITAN_GE_WRITE(0x4870, reg_data);
++ /*
++ * BAV2,BAV and DAV settings for the Rx FIFO
++ */
++ reg_data1 = TITAN_GE_READ(0x4874);
++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1);
++ TITAN_GE_WRITE(0x4874, reg_data1);
++
++ reg_data &= ~(0x00100000);
++ reg_data |= 0x200000;
++
++ TITAN_GE_WRITE(0x4870, reg_data);
++
++ reg_data = TITAN_GE_READ(0x494c);
++ reg_data |= 0x100000;
++
++ TITAN_GE_WRITE(0x494c, reg_data);
++ reg_data |= (0xff << 10) | (0xff + 1);
++ TITAN_GE_WRITE(0x494c, reg_data);
++
++ /*
++ * BAV2, BAV and DAV settings for the Tx FIFO
++ */
++ reg_data1 = TITAN_GE_READ(0x4950);
++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10);
++
++ TITAN_GE_WRITE(0x4950, reg_data1);
++
++ reg_data &= ~(0x00100000);
++ reg_data |= 0x200000;
++
++ TITAN_GE_WRITE(0x494c, reg_data);
++ }
++
++ /*
++ * Titan 1.2 revision does support port #2
++ */
++ if (port_num == 2) {
++ /*
++ * Put the descriptors in the SRAM
++ */
++ reg_data = TITAN_GE_READ(0x48a0);
++
++ reg_data |= 0x100000;
++ reg_data |= (0xff << 10) | (2*(0xff + 1));
++
++ TITAN_GE_WRITE(0x48a0, reg_data);
++ /*
++ * BAV2,BAV and DAV settings for the Rx FIFO
++ */
++ reg_data1 = TITAN_GE_READ(0x48a4);
++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1);
++ TITAN_GE_WRITE(0x48a4, reg_data1);
++
++ reg_data &= ~(0x00100000);
++ reg_data |= 0x200000;
++
++ TITAN_GE_WRITE(0x48a0, reg_data);
++
++ reg_data = TITAN_GE_READ(0x4958);
++ reg_data |= 0x100000;
++
++ TITAN_GE_WRITE(0x4958, reg_data);
++ reg_data |= (0xff << 10) | (2*(0xff + 1));
++ TITAN_GE_WRITE(0x4958, reg_data);
++
++ /*
++ * BAV2, BAV and DAV settings for the Tx FIFO
++ */
++ reg_data1 = TITAN_GE_READ(0x495c);
++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10);
++
++ TITAN_GE_WRITE(0x495c, reg_data1);
++
++ reg_data &= ~(0x00100000);
++ reg_data |= 0x200000;
++
++ TITAN_GE_WRITE(0x4958, reg_data);
++ }
++
++ if (port_num == 2) {
++ reg_data = TITAN_GE_READ(0x48a0);
++
++ reg_data |= 0x100000;
++ reg_data |= (0xff << 10) | (2*(0xff + 1));
++
++ TITAN_GE_WRITE(0x48a0, reg_data);
++ /*
++ * BAV2,BAV and DAV settings for the Rx FIFO
++ */
++ reg_data1 = TITAN_GE_READ(0x48a4);
++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1);
++ TITAN_GE_WRITE(0x48a4, reg_data1);
++
++ reg_data &= ~(0x00100000);
++ reg_data |= 0x200000;
++
++ TITAN_GE_WRITE(0x48a0, reg_data);
++
++ reg_data = TITAN_GE_READ(0x4958);
++ reg_data |= 0x100000;
++
++ TITAN_GE_WRITE(0x4958, reg_data);
++ reg_data |= (0xff << 10) | (2*(0xff + 1));
++ TITAN_GE_WRITE(0x4958, reg_data);
++
++ /*
++ * BAV2, BAV and DAV settings for the Tx FIFO
++ */
++ reg_data1 = TITAN_GE_READ(0x495c);
++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10);
++
++ TITAN_GE_WRITE(0x495c, reg_data1);
++
++ reg_data &= ~(0x00100000);
++ reg_data |= 0x200000;
++
++ TITAN_GE_WRITE(0x4958, reg_data);
++ }
++
++ /*
++ * Step 3: TRTG block enable
++ */
++ reg_data = TITAN_GE_READ(TITAN_GE_TRTG_CONFIG + (port_num << 12));
++
++ /*
++ * This is the 1.2 revision of the chip. It has fix for the
++ * IP header alignment. Now, the IP header begins at an
++ * aligned address and this wont need an extra copy in the
++ * driver. This performance drawback existed in the previous
++ * versions of the silicon
++ */
++ reg_data_1 = TITAN_GE_READ(0x103c + (port_num << 12));
++ reg_data_1 |= 0x40000000;
++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1);
++
++ reg_data_1 |= 0x04000000;
++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1);
++
++ mdelay(5);
++
++ reg_data_1 &= ~(0x04000000);
++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1);
++
++ mdelay(5);
++
++ reg_data |= 0x0001;
++ TITAN_GE_WRITE((TITAN_GE_TRTG_CONFIG + (port_num << 12)), reg_data);
++
++ /*
++ * Step 4: Start the Tx activity
++ */
++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_2 + (port_num << 12)), 0xe197);
++#ifdef TITAN_GE_JUMBO_FRAMES
++ TITAN_GE_WRITE((0x1258 + (port_num << 12)), 0x4000);
++#endif
++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12));
++ reg_data |= 0x0001; /* Enable TMAC */
++ reg_data |= 0x6c70; /* PAUSE also set */
++
++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)), reg_data);
++
++ udelay(30);
++
++ /* Destination Address drop bit */
++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_2 + (port_num << 12));
++ reg_data |= 0x218; /* DA_DROP bit and pause */
++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)), reg_data);
++
++ TITAN_GE_WRITE((0x1218 + (port_num << 12)), 0x3);
++
++#ifdef TITAN_GE_JUMBO_FRAMES
++ TITAN_GE_WRITE((0x1208 + (port_num << 12)), 0x4000);
++#endif
++ /* Start the Rx activity */
++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12));
++ reg_data |= 0x0001; /* RMAC Enable */
++ reg_data |= 0x0010; /* CRC Check enable */
++ reg_data |= 0x0040; /* Min Frame check enable */
++ reg_data |= 0x4400; /* Max Frame check enable */
++
++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data);
++
++ udelay(30);
++
++ /*
++ * Enable the Interrupts for Tx and Rx
++ */
++ reg_data1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE);
++
++ if (port_num == 0) {
++ reg_data1 |= 0x3;
++#ifdef CONFIG_SMP
++ TITAN_GE_WRITE(0x0038, 0x003);
++#else
++ TITAN_GE_WRITE(0x0038, 0x303);
++#endif
++ }
++
++ if (port_num == 1) {
++ reg_data1 |= 0x300;
++ }
++
++ if (port_num == 2)
++ reg_data1 |= 0x30000;
++
++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data1);
++ TITAN_GE_WRITE(0x003c, 0x300);
++
++ if (config_done == 0) {
++ TITAN_GE_WRITE(0x0024, 0x04000024); /* IRQ vector */
++ TITAN_GE_WRITE(0x0020, 0x000fb000); /* INTMSG base */
++ }
++
++ /* Priority */
++ reg_data = TITAN_GE_READ(0x1038 + (port_num << 12));
++ reg_data &= ~(0x00f00000);
++ TITAN_GE_WRITE((0x1038 + (port_num << 12)), reg_data);
++
++ /* Step 5: GMII config */
++ titan_ge_gmii_config(port_num);
++
++ if (config_done == 0) {
++ TITAN_GE_WRITE(0x1a80, 0);
++ config_done = 1;
++ }
++
++ return TITAN_OK;
++}
++
++/*
++ * Function to queue the packet for the Ethernet device
++ */
++static void titan_ge_tx_queue(titan_ge_port_info * titan_ge_eth,
++ struct sk_buff * skb)
++{
++ struct device *device = &titan_ge_device[titan_ge_eth->port_num]->dev;
++ unsigned int curr_desc = titan_ge_eth->tx_curr_desc_q;
++ volatile titan_ge_tx_desc *tx_curr;
++ int port_num = titan_ge_eth->port_num;
++
++ tx_curr = &(titan_ge_eth->tx_desc_area[curr_desc]);
++ tx_curr->buffer_addr =
++ dma_map_single(device, skb->data, skb_headlen(skb),
++ DMA_TO_DEVICE);
++
++ titan_ge_eth->tx_skb[curr_desc] = (struct sk_buff *) skb;
++ tx_curr->buffer_len = skb_headlen(skb);
++
++ /* Last descriptor enables interrupt and changes ownership */
++ tx_curr->cmd_sts = 0x1 | (1 << 15) | (1 << 5);
++
++ /* Kick the XDMA to start the transfer from memory to the FIFO */
++ TITAN_GE_WRITE((0x5044 + (port_num << 8)), 0x1);
++
++ /* Current descriptor updated */
++ titan_ge_eth->tx_curr_desc_q = (curr_desc + 1) % TITAN_GE_TX_QUEUE;
++
++ /* Prefetch the next descriptor */
++ prefetch((const void *)
++ &titan_ge_eth->tx_desc_area[titan_ge_eth->tx_curr_desc_q]);
++}
++
++/*
++ * Actually does the open of the Ethernet device
++ */
++static int titan_ge_eth_open(struct net_device *netdev)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++ unsigned int port_num = titan_ge_eth->port_num;
++ struct device *device = &titan_ge_device[port_num]->dev;
++ unsigned long reg_data;
++ unsigned int phy_reg;
++ int err = 0;
++
++ /* Stop the Rx activity */
++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12));
++ reg_data &= ~(0x00000001);
++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data);
++
++ /* Clear the port interrupts */
++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + (port_num << 8)), 0x0);
++
++ if (config_done == 0) {
++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0);
++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_B, 0);
++ }
++
++ /* Set the MAC Address */
++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6);
++
++ if (config_done == 0)
++ titan_port_init(netdev, titan_ge_eth);
++
++ titan_ge_update_afx(titan_ge_eth);
++
++ /* Allocate the Tx ring now */
++ titan_ge_eth->tx_ring_skbs = 0;
++ titan_ge_eth->tx_ring_size = TITAN_GE_TX_QUEUE;
++
++ /* Allocate space in the SRAM for the descriptors */
++ titan_ge_eth->tx_desc_area = (titan_ge_tx_desc *)
++ (titan_ge_sram + TITAN_TX_RING_BYTES * port_num);
++ titan_ge_eth->tx_dma = TITAN_SRAM_BASE + TITAN_TX_RING_BYTES * port_num;
++
++ if (!titan_ge_eth->tx_desc_area) {
++ printk(KERN_ERR
++ "%s: Cannot allocate Tx Ring (size %d bytes) for port %d\n",
++ netdev->name, TITAN_TX_RING_BYTES, port_num);
++ return -ENOMEM;
++ }
++
++ memset(titan_ge_eth->tx_desc_area, 0, titan_ge_eth->tx_desc_area_size);
++
++ /* Now initialize the Tx descriptor ring */
++ titan_ge_init_tx_desc_ring(titan_ge_eth,
++ titan_ge_eth->tx_ring_size,
++ (unsigned long) titan_ge_eth->tx_desc_area,
++ (unsigned long) titan_ge_eth->tx_dma);
++
++ /* Allocate the Rx ring now */
++ titan_ge_eth->rx_ring_size = TITAN_GE_RX_QUEUE;
++ titan_ge_eth->rx_ring_skbs = 0;
++
++ titan_ge_eth->rx_desc_area =
++ (titan_ge_rx_desc *)(titan_ge_sram + 0x1000 + TITAN_RX_RING_BYTES * port_num);
++
++ titan_ge_eth->rx_dma = TITAN_SRAM_BASE + 0x1000 + TITAN_RX_RING_BYTES * port_num;
++
++ if (!titan_ge_eth->rx_desc_area) {
++ printk(KERN_ERR "%s: Cannot allocate Rx Ring (size %d bytes)\n",
++ netdev->name, TITAN_RX_RING_BYTES);
++
++ printk(KERN_ERR "%s: Freeing previously allocated TX queues...",
++ netdev->name);
++
++ dma_free_coherent(device, titan_ge_eth->tx_desc_area_size,
++ (void *) titan_ge_eth->tx_desc_area,
++ titan_ge_eth->tx_dma);
++
++ return -ENOMEM;
++ }
++
++ memset(titan_ge_eth->rx_desc_area, 0, titan_ge_eth->rx_desc_area_size);
++
++ /* Now initialize the Rx ring */
++#ifdef TITAN_GE_JUMBO_FRAMES
++ if ((titan_ge_init_rx_desc_ring
++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_JUMBO_BUFSIZE,
++ (unsigned long) titan_ge_eth->rx_desc_area, 0,
++ (unsigned long) titan_ge_eth->rx_dma)) == 0)
++#else
++ if ((titan_ge_init_rx_desc_ring
++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_STD_BUFSIZE,
++ (unsigned long) titan_ge_eth->rx_desc_area, 0,
++ (unsigned long) titan_ge_eth->rx_dma)) == 0)
++#endif
++ panic("%s: Error initializing RX Ring\n", netdev->name);
++
++ /* Fill the Rx ring with the SKBs */
++ titan_ge_port_start(netdev, titan_ge_eth);
++
++ /*
++ * Check if Interrupt Coalscing needs to be turned on. The
++ * values specified in the register is multiplied by
++ * (8 x 64 nanoseconds) to determine when an interrupt should
++ * be sent to the CPU.
++ */
++
++ if (TITAN_GE_TX_COAL) {
++ titan_ge_eth->tx_int_coal =
++ titan_ge_tx_coal(TITAN_GE_TX_COAL, port_num);
++ }
++
++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg);
++ if (err == TITAN_GE_MDIO_ERROR) {
++ printk(KERN_ERR
++ "Could not read PHY control register 0x11 \n");
++ return TITAN_ERROR;
++ }
++ if (!(phy_reg & 0x0400)) {
++ netif_carrier_off(netdev);
++ netif_stop_queue(netdev);
++ return TITAN_ERROR;
++ } else {
++ netif_carrier_on(netdev);
++ netif_start_queue(netdev);
++ }
++
++ return TITAN_OK;
++}
++
++/*
++ * Queue the packet for Tx. Currently no support for zero copy,
++ * checksum offload and Scatter Gather. The chip does support
++ * Scatter Gather only. But, that wont help here since zero copy
++ * requires support for Tx checksumming also.
++ */
++int titan_ge_start_xmit(struct sk_buff *skb, struct net_device *netdev)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++ unsigned long flags;
++ struct net_device_stats *stats;
++//printk("titan_ge_start_xmit\n");
++
++ stats = &titan_ge_eth->stats;
++ spin_lock_irqsave(&titan_ge_eth->lock, flags);
++
++ if ((TITAN_GE_TX_QUEUE - titan_ge_eth->tx_ring_skbs) <=
++ (skb_shinfo(skb)->nr_frags + 1)) {
++ netif_stop_queue(netdev);
++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
++ printk(KERN_ERR "Tx OOD \n");
++ return 1;
++ }
++
++ titan_ge_tx_queue(titan_ge_eth, skb);
++ titan_ge_eth->tx_ring_skbs++;
++
++ if (TITAN_GE_TX_QUEUE <= (titan_ge_eth->tx_ring_skbs + 4)) {
++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
++ titan_ge_free_tx_queue(titan_ge_eth);
++ spin_lock_irqsave(&titan_ge_eth->lock, flags);
++ }
++
++ stats->tx_bytes += skb->len;
++ stats->tx_packets++;
++
++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
++
++ netdev->trans_start = jiffies;
++
++ return 0;
++}
++
++/*
++ * Actually does the Rx. Rx side checksumming supported.
++ */
++static int titan_ge_rx(struct net_device *netdev, int port_num,
++ titan_ge_port_info * titan_ge_port,
++ titan_ge_packet * packet)
++{
++ int rx_curr_desc, rx_used_desc;
++ volatile titan_ge_rx_desc *rx_desc;
++
++ rx_curr_desc = titan_ge_port->rx_curr_desc_q;
++ rx_used_desc = titan_ge_port->rx_used_desc_q;
++
++ if (((rx_curr_desc + 1) % TITAN_GE_RX_QUEUE) == rx_used_desc)
++ return TITAN_ERROR;
++
++ rx_desc = &(titan_ge_port->rx_desc_area[rx_curr_desc]);
++
++ if (rx_desc->cmd_sts & TITAN_GE_RX_BUFFER_OWNED)
++ return TITAN_ERROR;
++
++ packet->skb = titan_ge_port->rx_skb[rx_curr_desc];
++ packet->len = (rx_desc->cmd_sts & 0x7fff);
++
++ /*
++ * At this point, we dont know if the checksumming
++ * actually helps relieve CPU. So, keep it for
++ * port 0 only
++ */
++ packet->checksum = ntohs((rx_desc->buffer & 0xffff0000) >> 16);
++ packet->cmd_sts = rx_desc->cmd_sts;
++
++ titan_ge_port->rx_curr_desc_q = (rx_curr_desc + 1) % TITAN_GE_RX_QUEUE;
++
++ /* Prefetch the next descriptor */
++ prefetch((const void *)
++ &titan_ge_port->rx_desc_area[titan_ge_port->rx_curr_desc_q + 1]);
++
++ return TITAN_OK;
++}
++
++/*
++ * Free the Tx queue of the used SKBs
++ */
++static int titan_ge_free_tx_queue(titan_ge_port_info *titan_ge_eth)
++{
++ unsigned long flags;
++
++ /* Take the lock */
++ spin_lock_irqsave(&(titan_ge_eth->lock), flags);
++
++ while (titan_ge_return_tx_desc(titan_ge_eth, titan_ge_eth->port_num) == 0)
++ if (titan_ge_eth->tx_ring_skbs != 1)
++ titan_ge_eth->tx_ring_skbs--;
++
++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
++
++ return TITAN_OK;
++}
++
++/*
++ * Threshold beyond which we do the cleaning of
++ * Tx queue and new allocation for the Rx
++ * queue
++ */
++#define TX_THRESHOLD 4
++#define RX_THRESHOLD 10
++
++/*
++ * Receive the packets and send it to the kernel.
++ */
++static int titan_ge_receive_queue(struct net_device *netdev, unsigned int max)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++ unsigned int port_num = titan_ge_eth->port_num;
++ titan_ge_packet packet;
++ struct net_device_stats *stats;
++ struct sk_buff *skb;
++ unsigned long received_packets = 0;
++ unsigned int ack;
++
++ stats = &titan_ge_eth->stats;
++
++ while ((--max)
++ && (titan_ge_rx(netdev, port_num, titan_ge_eth, &packet) == TITAN_OK)) {
++ skb = (struct sk_buff *) packet.skb;
++
++ titan_ge_eth->rx_ring_skbs--;
++
++ if (--titan_ge_eth->rx_work_limit < 0)
++ break;
++ received_packets++;
++
++ stats->rx_packets++;
++ stats->rx_bytes += packet.len;
++
++ if ((packet.cmd_sts & TITAN_GE_RX_PERR) ||
++ (packet.cmd_sts & TITAN_GE_RX_OVERFLOW_ERROR) ||
++ (packet.cmd_sts & TITAN_GE_RX_TRUNC) ||
++ (packet.cmd_sts & TITAN_GE_RX_CRC_ERROR)) {
++ stats->rx_dropped++;
++ dev_kfree_skb_any(skb);
++
++ continue;
++ }
++ /*
++ * Either support fast path or slow path. Decision
++ * making can really slow down the performance. The
++ * idea is to cut down the number of checks and improve
++ * the fastpath.
++ */
++
++ skb_put(skb, packet.len - 2);
++
++ /*
++ * Increment data pointer by two since thats where
++ * the MAC starts
++ */
++ skb_reserve(skb, 2);
++ skb->protocol = eth_type_trans(skb, netdev);
++ netif_receive_skb(skb);
++
++ if (titan_ge_eth->rx_threshold > RX_THRESHOLD) {
++ ack = titan_ge_rx_task(netdev, titan_ge_eth);
++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), ack);
++ titan_ge_eth->rx_threshold = 0;
++ } else
++ titan_ge_eth->rx_threshold++;
++
++ if (titan_ge_eth->tx_threshold > TX_THRESHOLD) {
++ titan_ge_eth->tx_threshold = 0;
++ titan_ge_free_tx_queue(titan_ge_eth);
++ }
++ else
++ titan_ge_eth->tx_threshold++;
++
++ }
++ return received_packets;
++}
++
++
++/*
++ * Enable the Rx side interrupts
++ */
++static void titan_ge_enable_int(unsigned int port_num,
++ titan_ge_port_info *titan_ge_eth,
++ struct net_device *netdev)
++{
++ unsigned long reg_data = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE);
++
++ if (port_num == 0)
++ reg_data |= 0x3;
++ if (port_num == 1)
++ reg_data |= 0x300;
++ if (port_num == 2)
++ reg_data |= 0x30000;
++
++ /* Re-enable interrupts */
++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data);
++}
++
++/*
++ * Main function to handle the polling for Rx side NAPI.
++ * Receive interrupts have been disabled at this point.
++ * The poll schedules the transmit followed by receive.
++ */
++static int titan_ge_poll(struct net_device *netdev, int *budget)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++ int port_num = titan_ge_eth->port_num;
++ int work_done = 0;
++ unsigned long flags, status;
++
++ titan_ge_eth->rx_work_limit = *budget;
++ if (titan_ge_eth->rx_work_limit > netdev->quota)
++ titan_ge_eth->rx_work_limit = netdev->quota;
++
++ do {
++ /* Do the transmit cleaning work here */
++ titan_ge_free_tx_queue(titan_ge_eth);
++
++ /* Ack the Rx interrupts */
++ if (port_num == 0)
++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x3);
++ if (port_num == 1)
++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x300);
++ if (port_num == 2)
++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x30000);
++
++ work_done += titan_ge_receive_queue(netdev, 0);
++
++ /* Out of quota and there is work to be done */
++ if (titan_ge_eth->rx_work_limit < 0)
++ goto not_done;
++
++ /* Receive alloc_skb could lead to OOM */
++ if (oom_flag == 1) {
++ oom_flag = 0;
++ goto oom;
++ }
++
++ status = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A);
++ } while (status & 0x30300);
++
++ /* If we are here, then no more interrupts to process */
++ goto done;
++
++not_done:
++ *budget -= work_done;
++ netdev->quota -= work_done;
++ return 1;
++
++oom:
++ printk(KERN_ERR "OOM \n");
++ netif_rx_complete(netdev);
++ return 0;
++
++done:
++ /*
++ * No more packets on the poll list. Turn the interrupts
++ * back on and we should be able to catch the new
++ * packets in the interrupt handler
++ */
++ if (!work_done)
++ work_done = 1;
++
++ *budget -= work_done;
++ netdev->quota -= work_done;
++
++ spin_lock_irqsave(&titan_ge_eth->lock, flags);
++
++ /* Remove us from the poll list */
++ netif_rx_complete(netdev);
++
++ /* Re-enable interrupts */
++ titan_ge_enable_int(port_num, titan_ge_eth, netdev);
++
++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags);
++
++ return 0;
++}
++
++/*
++ * Close the network device
++ */
++int titan_ge_stop(struct net_device *netdev)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++
++ spin_lock_irq(&(titan_ge_eth->lock));
++ titan_ge_eth_stop(netdev);
++ free_irq(netdev->irq, netdev);
++ spin_unlock_irq(&titan_ge_eth->lock);
++
++ return TITAN_OK;
++}
++
++/*
++ * Free the Tx ring
++ */
++static void titan_ge_free_tx_rings(struct net_device *netdev)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++ unsigned int port_num = titan_ge_eth->port_num;
++ unsigned int curr;
++ unsigned long reg_data;
++
++ /* Stop the Tx DMA */
++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG +
++ (port_num << 8));
++ reg_data |= 0xc0000000;
++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG +
++ (port_num << 8)), reg_data);
++
++ /* Disable the TMAC */
++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 +
++ (port_num << 12));
++ reg_data &= ~(0x00000001);
++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 +
++ (port_num << 12)), reg_data);
++
++ for (curr = 0;
++ (titan_ge_eth->tx_ring_skbs) && (curr < TITAN_GE_TX_QUEUE);
++ curr++) {
++ if (titan_ge_eth->tx_skb[curr]) {
++ dev_kfree_skb(titan_ge_eth->tx_skb[curr]);
++ titan_ge_eth->tx_ring_skbs--;
++ }
++ }
++
++ if (titan_ge_eth->tx_ring_skbs != 0)
++ printk
++ ("%s: Error on Tx descriptor free - could not free %d"
++ " descriptors\n", netdev->name,
++ titan_ge_eth->tx_ring_skbs);
++
++#ifndef TITAN_RX_RING_IN_SRAM
++ dma_free_coherent(&titan_ge_device[port_num]->dev,
++ titan_ge_eth->tx_desc_area_size,
++ (void *) titan_ge_eth->tx_desc_area,
++ titan_ge_eth->tx_dma);
++#endif
++}
++
++/*
++ * Free the Rx ring
++ */
++static void titan_ge_free_rx_rings(struct net_device *netdev)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++ unsigned int port_num = titan_ge_eth->port_num;
++ unsigned int curr;
++ unsigned long reg_data;
++
++ /* Stop the Rx DMA */
++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG +
++ (port_num << 8));
++ reg_data |= 0x000c0000;
++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG +
++ (port_num << 8)), reg_data);
++
++ /* Disable the RMAC */
++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 +
++ (port_num << 12));
++ reg_data &= ~(0x00000001);
++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 +
++ (port_num << 12)), reg_data);
++
++ for (curr = 0;
++ titan_ge_eth->rx_ring_skbs && (curr < TITAN_GE_RX_QUEUE);
++ curr++) {
++ if (titan_ge_eth->rx_skb[curr]) {
++ dev_kfree_skb(titan_ge_eth->rx_skb[curr]);
++ titan_ge_eth->rx_ring_skbs--;
++ }
++ }
++
++ if (titan_ge_eth->rx_ring_skbs != 0)
++ printk(KERN_ERR
++ "%s: Error in freeing Rx Ring. %d skb's still"
++ " stuck in RX Ring - ignoring them\n", netdev->name,
++ titan_ge_eth->rx_ring_skbs);
++
++#ifndef TITAN_RX_RING_IN_SRAM
++ dma_free_coherent(&titan_ge_device[port_num]->dev,
++ titan_ge_eth->rx_desc_area_size,
++ (void *) titan_ge_eth->rx_desc_area,
++ titan_ge_eth->rx_dma);
++#endif
++}
++
++/*
++ * Actually does the stop of the Ethernet device
++ */
++static void titan_ge_eth_stop(struct net_device *netdev)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++
++ netif_stop_queue(netdev);
++
++ titan_ge_port_reset(titan_ge_eth->port_num);
++
++ titan_ge_free_tx_rings(netdev);
++ titan_ge_free_rx_rings(netdev);
++
++ /* Disable the Tx and Rx Interrupts for all channels */
++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, 0x0);
++}
++
++/*
++ * Update the MAC address. Note that we have to write the
++ * address in three station registers, 16 bits each. And this
++ * has to be done for TMAC and RMAC
++ */
++static void titan_ge_update_mac_address(struct net_device *netdev)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++ unsigned int port_num = titan_ge_eth->port_num;
++ u8 p_addr[6];
++
++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6);
++ memcpy(p_addr, netdev->dev_addr, 6);
++
++ /* Update the Address Filtering Match tables */
++ titan_ge_update_afx(titan_ge_eth);
++
++ printk("Station MAC : %d %d %d %d %d %d \n",
++ p_addr[5], p_addr[4], p_addr[3],
++ p_addr[2], p_addr[1], p_addr[0]);
++
++ /* Set the MAC address here for TMAC and RMAC */
++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port_num << 12)),
++ ((p_addr[5] << 8) | p_addr[4]));
++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port_num << 12)),
++ ((p_addr[3] << 8) | p_addr[2]));
++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port_num << 12)),
++ ((p_addr[1] << 8) | p_addr[0]));
++
++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port_num << 12)),
++ ((p_addr[5] << 8) | p_addr[4]));
++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port_num << 12)),
++ ((p_addr[3] << 8) | p_addr[2]));
++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port_num << 12)),
++ ((p_addr[1] << 8) | p_addr[0]));
++}
++
++/*
++ * Set the MAC address of the Ethernet device
++ */
++static int titan_ge_set_mac_address(struct net_device *dev, void *addr)
++{
++ titan_ge_port_info *tp = netdev_priv(dev);
++ struct sockaddr *sa = addr;
++
++ memcpy(dev->dev_addr, sa->sa_data, dev->addr_len);
++
++ spin_lock_irq(&tp->lock);
++ titan_ge_update_mac_address(dev);
++ spin_unlock_irq(&tp->lock);
++
++ return 0;
++}
++
++/*
++ * Get the Ethernet device stats
++ */
++static struct net_device_stats *titan_ge_get_stats(struct net_device *netdev)
++{
++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev);
++
++ return &titan_ge_eth->stats;
++}
++
++/*
++ * Initialize the Rx descriptor ring for the Titan Ge
++ */
++static int titan_ge_init_rx_desc_ring(titan_ge_port_info * titan_eth_port,
++ int rx_desc_num,
++ int rx_buff_size,
++ unsigned long rx_desc_base_addr,
++ unsigned long rx_buff_base_addr,
++ unsigned long rx_dma)
++{
++ volatile titan_ge_rx_desc *rx_desc;
++ unsigned long buffer_addr;
++ int index;
++ unsigned long titan_ge_rx_desc_bus = rx_dma;
++
++ buffer_addr = rx_buff_base_addr;
++ rx_desc = (titan_ge_rx_desc *) rx_desc_base_addr;
++
++ /* Check alignment */
++ if (rx_buff_base_addr & 0xF)
++ return 0;
++
++ /* Check Rx buffer size */
++ if ((rx_buff_size < 8) || (rx_buff_size > TITAN_GE_MAX_RX_BUFFER))
++ return 0;
++
++ /* 64-bit alignment
++ if ((rx_buff_base_addr + rx_buff_size) & 0x7)
++ return 0; */
++
++ /* Initialize the Rx desc ring */
++ for (index = 0; index < rx_desc_num; index++) {
++ titan_ge_rx_desc_bus += sizeof(titan_ge_rx_desc);
++ rx_desc[index].cmd_sts = 0;
++ rx_desc[index].buffer_addr = buffer_addr;
++ titan_eth_port->rx_skb[index] = NULL;
++ buffer_addr += rx_buff_size;
++ }
++
++ titan_eth_port->rx_curr_desc_q = 0;
++ titan_eth_port->rx_used_desc_q = 0;
++
++ titan_eth_port->rx_desc_area = (titan_ge_rx_desc *) rx_desc_base_addr;
++ titan_eth_port->rx_desc_area_size =
++ rx_desc_num * sizeof(titan_ge_rx_desc);
++
++ titan_eth_port->rx_dma = rx_dma;
++
++ return TITAN_OK;
++}
++
++/*
++ * Initialize the Tx descriptor ring. Descriptors in the SRAM
++ */
++static int titan_ge_init_tx_desc_ring(titan_ge_port_info * titan_ge_port,
++ int tx_desc_num,
++ unsigned long tx_desc_base_addr,
++ unsigned long tx_dma)
++{
++ titan_ge_tx_desc *tx_desc;
++ int index;
++ unsigned long titan_ge_tx_desc_bus = tx_dma;
++
++ if (tx_desc_base_addr & 0xF)
++ return 0;
++
++ tx_desc = (titan_ge_tx_desc *) tx_desc_base_addr;
++
++ for (index = 0; index < tx_desc_num; index++) {
++ titan_ge_port->tx_dma_array[index] =
++ (dma_addr_t) titan_ge_tx_desc_bus;
++ titan_ge_tx_desc_bus += sizeof(titan_ge_tx_desc);
++ tx_desc[index].cmd_sts = 0x0000;
++ tx_desc[index].buffer_len = 0;
++ tx_desc[index].buffer_addr = 0x00000000;
++ titan_ge_port->tx_skb[index] = NULL;
++ }
++
++ titan_ge_port->tx_curr_desc_q = 0;
++ titan_ge_port->tx_used_desc_q = 0;
++
++ titan_ge_port->tx_desc_area = (titan_ge_tx_desc *) tx_desc_base_addr;
++ titan_ge_port->tx_desc_area_size =
++ tx_desc_num * sizeof(titan_ge_tx_desc);
++
++ titan_ge_port->tx_dma = tx_dma;
++ return TITAN_OK;
++}
++
++/*
++ * Initialize the device as an Ethernet device
++ */
++static int __init titan_ge_probe(struct device *device)
++{
++ titan_ge_port_info *titan_ge_eth;
++ struct net_device *netdev;
++ int port = to_platform_device(device)->id;
++ int err;
++
++ netdev = alloc_etherdev(sizeof(titan_ge_port_info));
++ if (!netdev) {
++ err = -ENODEV;
++ goto out;
++ }
++
++ netdev->open = titan_ge_open;
++ netdev->stop = titan_ge_stop;
++ netdev->hard_start_xmit = titan_ge_start_xmit;
++ netdev->get_stats = titan_ge_get_stats;
++ netdev->set_multicast_list = titan_ge_set_multi;
++ netdev->set_mac_address = titan_ge_set_mac_address;
++
++ /* Tx timeout */
++ netdev->tx_timeout = titan_ge_tx_timeout;
++ netdev->watchdog_timeo = 2 * HZ;
++
++ /* Set these to very high values */
++ netdev->poll = titan_ge_poll;
++ netdev->weight = 64;
++
++ netdev->tx_queue_len = TITAN_GE_TX_QUEUE;
++ netif_carrier_off(netdev);
++ netdev->base_addr = 0;
++
++ netdev->change_mtu = titan_ge_change_mtu;
++
++ titan_ge_eth = netdev_priv(netdev);
++ /* Allocation of memory for the driver structures */
++
++ titan_ge_eth->port_num = port;
++
++ /* Configure the Tx timeout handler */
++ INIT_WORK(&titan_ge_eth->tx_timeout_task,
++ (void (*)(void *)) titan_ge_tx_timeout_task, netdev);
++
++ spin_lock_init(&titan_ge_eth->lock);
++
++ /* set MAC addresses */
++ memcpy(netdev->dev_addr, titan_ge_mac_addr_base, 6);
++ netdev->dev_addr[5] += port;
++
++ err = register_netdev(netdev);
++
++ if (err)
++ goto out_free_netdev;
++
++ printk(KERN_NOTICE
++ "%s: port %d with MAC address %02x:%02x:%02x:%02x:%02x:%02x\n",
++ netdev->name, port, netdev->dev_addr[0],
++ netdev->dev_addr[1], netdev->dev_addr[2],
++ netdev->dev_addr[3], netdev->dev_addr[4],
++ netdev->dev_addr[5]);
++
++ printk(KERN_NOTICE "Rx NAPI supported, Tx Coalescing ON \n");
++
++ return 0;
++
++out_free_netdev:
++ kfree(netdev);
++
++out:
++ return err;
++}
++
++static void __devexit titan_device_remove(struct device *device)
++{
++}
++
++/*
++ * Reset the Ethernet port
++ */
++static void titan_ge_port_reset(unsigned int port_num)
++{
++ unsigned int reg_data;
++
++ /* Stop the Tx port activity */
++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 +
++ (port_num << 12));
++ reg_data &= ~(0x0001);
++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 +
++ (port_num << 12)), reg_data);
++
++ /* Stop the Rx port activity */
++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 +
++ (port_num << 12));
++ reg_data &= ~(0x0001);
++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 +
++ (port_num << 12)), reg_data);
++
++ return;
++}
++
++/*
++ * Return the Tx desc after use by the XDMA
++ */
++static int titan_ge_return_tx_desc(titan_ge_port_info * titan_ge_eth, int port)
++{
++ int tx_desc_used;
++ struct sk_buff *skb;
++
++ tx_desc_used = titan_ge_eth->tx_used_desc_q;
++
++ /* return right away */
++ if (tx_desc_used == titan_ge_eth->tx_curr_desc_q)
++ return TITAN_ERROR;
++
++ /* Now the critical stuff */
++ skb = titan_ge_eth->tx_skb[tx_desc_used];
++
++ dev_kfree_skb_any(skb);
++
++ titan_ge_eth->tx_skb[tx_desc_used] = NULL;
++ titan_ge_eth->tx_used_desc_q =
++ (tx_desc_used + 1) % TITAN_GE_TX_QUEUE;
++
++ return 0;
++}
++
++/*
++ * Coalescing for the Tx path
++ */
++static unsigned long titan_ge_tx_coal(unsigned long delay, int port)
++{
++ unsigned long rx_delay;
++
++ rx_delay = TITAN_GE_READ(TITAN_GE_INT_COALESCING);
++ delay = (delay << 16) | rx_delay;
++
++ TITAN_GE_WRITE(TITAN_GE_INT_COALESCING, delay);
++ TITAN_GE_WRITE(0x5038, delay);
++
++ return delay;
++}
++
++static struct device_driver titan_soc_driver = {
++ .name = titan_string,
++ .bus = &platform_bus_type,
++ .probe = titan_ge_probe,
++ .remove = __devexit_p(titan_device_remove),
++};
++
++static void titan_platform_release (struct device *device)
++{
++ struct platform_device *pldev;
++
++ /* free device */
++ pldev = to_platform_device (device);
++ kfree (pldev);
++}
++
++/*
++ * Register the Titan GE with the kernel
++ */
++static int __init titan_ge_init_module(void)
++{
++ struct platform_device *pldev;
++ unsigned int version, device;
++ int i;
++
++ printk(KERN_NOTICE
++ "PMC-Sierra TITAN 10/100/1000 Ethernet Driver \n");
++
++ titan_ge_base = (unsigned long) ioremap(TITAN_GE_BASE, TITAN_GE_SIZE);
++ if (!titan_ge_base) {
++ printk("Mapping Titan GE failed\n");
++ goto out;
++ }
++
++ device = TITAN_GE_READ(TITAN_GE_DEVICE_ID);
++ version = (device & 0x000f0000) >> 16;
++ device &= 0x0000ffff;
++
++ printk(KERN_NOTICE "Device Id : %x, Version : %x \n", device, version);
++
++#ifdef TITAN_RX_RING_IN_SRAM
++ titan_ge_sram = (unsigned long) ioremap(TITAN_SRAM_BASE,
++ TITAN_SRAM_SIZE);
++ if (!titan_ge_sram) {
++ printk("Mapping Titan SRAM failed\n");
++ goto out_unmap_ge;
++ }
++#endif
++
++ if (driver_register(&titan_soc_driver)) {
++ printk(KERN_ERR "Driver registration failed\n");
++ goto out_unmap_sram;
++ }
++
++ for (i = 0; i < 3; i++) {
++ titan_ge_device[i] = NULL;
++
++ if (!(pldev = kmalloc (sizeof (*pldev), GFP_KERNEL)))
++ continue;
++
++ memset (pldev, 0, sizeof (*pldev));
++ pldev->name = titan_string;
++ pldev->id = i;
++ pldev->dev.release = titan_platform_release;
++ titan_ge_device[i] = pldev;
++
++ if (platform_device_register (pldev)) {
++ kfree (pldev);
++ titan_ge_device[i] = NULL;
++ continue;
++ }
++
++ if (!pldev->dev.driver) {
++ /*
++ * The driver was not bound to this device, there was
++ * no hardware at this address. Unregister it, as the
++ * release fuction will take care of freeing the
++ * allocated structure
++ */
++ titan_ge_device[i] = NULL;
++ platform_device_unregister (pldev);
++ }
++ }
++
++ return 0;
++
++out_unmap_sram:
++ iounmap((void *)titan_ge_sram);
++
++out_unmap_ge:
++ iounmap((void *)titan_ge_base);
++
++out:
++ return -ENOMEM;
++}
++
++/*
++ * Unregister the Titan GE from the kernel
++ */
++static void __exit titan_ge_cleanup_module(void)
++{
++ int i;
++
++ driver_unregister(&titan_soc_driver);
++
++ for (i = 0; i < 3; i++) {
++ if (titan_ge_device[i]) {
++ platform_device_unregister (titan_ge_device[i]);
++ titan_ge_device[i] = NULL;
++ }
++ }
++
++ iounmap((void *)titan_ge_sram);
++ iounmap((void *)titan_ge_base);
++}
++
++MODULE_AUTHOR("Manish Lachwani <lachwani@pmc-sierra.com>");
++MODULE_DESCRIPTION("Titan GE Ethernet driver");
++MODULE_LICENSE("GPL");
++
++module_init(titan_ge_init_module);
++module_exit(titan_ge_cleanup_module);
+diff -Nur linux-2.6.30/drivers/net/titan_ge.h rt4ls/drivers/net/titan_ge.h
+--- linux-2.6.30/drivers/net/titan_ge.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/drivers/net/titan_ge.h 2009-06-12 16:28:16.835950077 +0200
+@@ -0,0 +1,415 @@
++#ifndef _TITAN_GE_H_
++#define _TITAN_GE_H_
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/spinlock.h>
++#include <asm/byteorder.h>
++
++/*
++ * These functions should be later moved to a more generic location since there
++ * will be others accessing it also
++ */
++
++/*
++ * This is the way it works: LKB5 Base is at 0x0128. TITAN_BASE is defined in
++ * include/asm/titan_dep.h. TITAN_GE_BASE is the value in the TITAN_GE_LKB5
++ * register.
++ */
++
++#define TITAN_GE_BASE 0xfe000000UL
++#define TITAN_GE_SIZE 0x10000UL
++
++extern unsigned long titan_ge_base;
++
++#define TITAN_GE_WRITE(offset, data) \
++ *(volatile u32 *)(titan_ge_base + (offset)) = (data)
++
++#define TITAN_GE_READ(offset) *(volatile u32 *)(titan_ge_base + (offset))
++
++#ifndef msec_delay
++#define msec_delay(x) do { if(in_interrupt()) { \
++ /* Don't mdelay in interrupt context! */ \
++ BUG(); \
++ } else { \
++ set_current_state(TASK_UNINTERRUPTIBLE); \
++ schedule_timeout((x * HZ)/1000); \
++ } } while(0)
++#endif
++
++#define TITAN_GE_PORT_0
++
++#define TITAN_SRAM_BASE ((OCD_READ(RM9000x2_OCD_LKB13) & ~1) << 4)
++#define TITAN_SRAM_SIZE 0x2000UL
++
++/*
++ * We may need these constants
++ */
++#define TITAN_BIT0 0x00000001
++#define TITAN_BIT1 0x00000002
++#define TITAN_BIT2 0x00000004
++#define TITAN_BIT3 0x00000008
++#define TITAN_BIT4 0x00000010
++#define TITAN_BIT5 0x00000020
++#define TITAN_BIT6 0x00000040
++#define TITAN_BIT7 0x00000080
++#define TITAN_BIT8 0x00000100
++#define TITAN_BIT9 0x00000200
++#define TITAN_BIT10 0x00000400
++#define TITAN_BIT11 0x00000800
++#define TITAN_BIT12 0x00001000
++#define TITAN_BIT13 0x00002000
++#define TITAN_BIT14 0x00004000
++#define TITAN_BIT15 0x00008000
++#define TITAN_BIT16 0x00010000
++#define TITAN_BIT17 0x00020000
++#define TITAN_BIT18 0x00040000
++#define TITAN_BIT19 0x00080000
++#define TITAN_BIT20 0x00100000
++#define TITAN_BIT21 0x00200000
++#define TITAN_BIT22 0x00400000
++#define TITAN_BIT23 0x00800000
++#define TITAN_BIT24 0x01000000
++#define TITAN_BIT25 0x02000000
++#define TITAN_BIT26 0x04000000
++#define TITAN_BIT27 0x08000000
++#define TITAN_BIT28 0x10000000
++#define TITAN_BIT29 0x20000000
++#define TITAN_BIT30 0x40000000
++#define TITAN_BIT31 0x80000000
++
++/* Flow Control */
++#define TITAN_GE_FC_NONE 0x0
++#define TITAN_GE_FC_FULL 0x1
++#define TITAN_GE_FC_TX_PAUSE 0x2
++#define TITAN_GE_FC_RX_PAUSE 0x3
++
++/* Duplex Settings */
++#define TITAN_GE_FULL_DUPLEX 0x1
++#define TITAN_GE_HALF_DUPLEX 0x2
++
++/* Speed settings */
++#define TITAN_GE_SPEED_1000 0x1
++#define TITAN_GE_SPEED_100 0x2
++#define TITAN_GE_SPEED_10 0x3
++
++/* Debugging info only */
++#undef TITAN_DEBUG
++
++/* Keep the rings in the Titan's SSRAM */
++#define TITAN_RX_RING_IN_SRAM
++
++#ifdef CONFIG_64BIT
++#define TITAN_GE_IE_MASK 0xfffffffffb001b64
++#define TITAN_GE_IE_STATUS 0xfffffffffb001b60
++#else
++#define TITAN_GE_IE_MASK 0xfb001b64
++#define TITAN_GE_IE_STATUS 0xfb001b60
++#endif
++
++/* Support for Jumbo Frames */
++#undef TITAN_GE_JUMBO_FRAMES
++
++/* Rx buffer size */
++#ifdef TITAN_GE_JUMBO_FRAMES
++#define TITAN_GE_JUMBO_BUFSIZE 9080
++#else
++#define TITAN_GE_STD_BUFSIZE 1580
++#endif
++
++/*
++ * Tx and Rx Interrupt Coalescing parameter. These values are
++ * for 1 Ghz processor. Rx coalescing can be taken care of
++ * by NAPI. NAPI is adaptive and hence useful. Tx coalescing
++ * is not adaptive. Hence, these values need to be adjusted
++ * based on load, CPU speed etc.
++ */
++#define TITAN_GE_RX_COAL 150
++#define TITAN_GE_TX_COAL 300
++
++#if defined(__BIG_ENDIAN)
++
++/* Define the Rx descriptor */
++typedef struct eth_rx_desc {
++ u32 reserved; /* Unused */
++ u32 buffer_addr; /* CPU buffer address */
++ u32 cmd_sts; /* Command and Status */
++ u32 buffer; /* XDMA buffer address */
++} titan_ge_rx_desc;
++
++/* Define the Tx descriptor */
++typedef struct eth_tx_desc {
++ u16 cmd_sts; /* Command, Status and Buffer count */
++ u16 buffer_len; /* Length of the buffer */
++ u32 buffer_addr; /* Physical address of the buffer */
++} titan_ge_tx_desc;
++
++#elif defined(__LITTLE_ENDIAN)
++
++/* Define the Rx descriptor */
++typedef struct eth_rx_desc {
++ u32 buffer_addr; /* CPU buffer address */
++ u32 reserved; /* Unused */
++ u32 buffer; /* XDMA buffer address */
++ u32 cmd_sts; /* Command and Status */
++} titan_ge_rx_desc;
++
++/* Define the Tx descriptor */
++typedef struct eth_tx_desc {
++ u32 buffer_addr; /* Physical address of the buffer */
++ u16 buffer_len; /* Length of the buffer */
++ u16 cmd_sts; /* Command, Status and Buffer count */
++} titan_ge_tx_desc;
++#endif
++
++/* Default Tx Queue Size */
++#define TITAN_GE_TX_QUEUE 128
++#define TITAN_TX_RING_BYTES (TITAN_GE_TX_QUEUE * sizeof(struct eth_tx_desc))
++
++/* Default Rx Queue Size */
++#define TITAN_GE_RX_QUEUE 64
++#define TITAN_RX_RING_BYTES (TITAN_GE_RX_QUEUE * sizeof(struct eth_rx_desc))
++
++/* Packet Structure */
++typedef struct _pkt_info {
++ unsigned int len;
++ unsigned int cmd_sts;
++ unsigned int buffer;
++ struct sk_buff *skb;
++ unsigned int checksum;
++} titan_ge_packet;
++
++
++#define PHYS_CNT 3
++
++/* Titan Port specific data structure */
++typedef struct _eth_port_ctrl {
++ unsigned int port_num;
++ u8 port_mac_addr[6];
++
++ /* Rx descriptor pointers */
++ int rx_curr_desc_q, rx_used_desc_q;
++
++ /* Tx descriptor pointers */
++ int tx_curr_desc_q, tx_used_desc_q;
++
++ /* Rx descriptor area */
++ volatile titan_ge_rx_desc *rx_desc_area;
++ unsigned int rx_desc_area_size;
++ struct sk_buff* rx_skb[TITAN_GE_RX_QUEUE];
++
++ /* Tx Descriptor area */
++ volatile titan_ge_tx_desc *tx_desc_area;
++ unsigned int tx_desc_area_size;
++ struct sk_buff* tx_skb[TITAN_GE_TX_QUEUE];
++
++ /* Timeout task */
++ struct work_struct tx_timeout_task;
++
++ /* DMA structures and handles */
++ dma_addr_t tx_dma;
++ dma_addr_t rx_dma;
++ dma_addr_t tx_dma_array[TITAN_GE_TX_QUEUE];
++
++ /* Device lock */
++ spinlock_t lock;
++
++ unsigned int tx_ring_skbs;
++ unsigned int rx_ring_size;
++ unsigned int tx_ring_size;
++ unsigned int rx_ring_skbs;
++
++ struct net_device_stats stats;
++
++ /* Tx and Rx coalescing */
++ unsigned long rx_int_coal;
++ unsigned long tx_int_coal;
++
++ /* Threshold for replenishing the Rx and Tx rings */
++ unsigned int tx_threshold;
++ unsigned int rx_threshold;
++
++ /* NAPI work limit */
++ unsigned int rx_work_limit;
++} titan_ge_port_info;
++
++/* Titan specific constants */
++#define TITAN_ETH_PORT_IRQ 3
++
++/* Max Rx buffer */
++#define TITAN_GE_MAX_RX_BUFFER 65536
++
++/* Tx and Rx Error */
++#define TITAN_GE_ERROR
++
++/* Rx Descriptor Command and Status */
++
++#define TITAN_GE_RX_CRC_ERROR TITAN_BIT27 /* crc error */
++#define TITAN_GE_RX_OVERFLOW_ERROR TITAN_BIT15 /* overflow */
++#define TITAN_GE_RX_BUFFER_OWNED TITAN_BIT21 /* buffer ownership */
++#define TITAN_GE_RX_STP TITAN_BIT31 /* start of packet */
++#define TITAN_GE_RX_BAM TITAN_BIT30 /* broadcast address match */
++#define TITAN_GE_RX_PAM TITAN_BIT28 /* physical address match */
++#define TITAN_GE_RX_LAFM TITAN_BIT29 /* logical address filter match */
++#define TITAN_GE_RX_VLAN TITAN_BIT26 /* virtual lans */
++#define TITAN_GE_RX_PERR TITAN_BIT19 /* packet error */
++#define TITAN_GE_RX_TRUNC TITAN_BIT20 /* packet size greater than 32 buffers */
++
++/* Tx Descriptor Command */
++#define TITAN_GE_TX_BUFFER_OWNED TITAN_BIT5 /* buffer ownership */
++#define TITAN_GE_TX_ENABLE_INTERRUPT TITAN_BIT15 /* Interrupt Enable */
++
++/* Return Status */
++#define TITAN_OK 0x1 /* Good Status */
++#define TITAN_ERROR 0x2 /* Error Status */
++
++/* MIB specific register offset */
++#define TITAN_GE_MSTATX_STATS_BASE_LOW 0x0800 /* MSTATX COUNTL[15:0] */
++#define TITAN_GE_MSTATX_STATS_BASE_MID 0x0804 /* MSTATX COUNTM[15:0] */
++#define TITAN_GE_MSTATX_STATS_BASE_HI 0x0808 /* MSTATX COUNTH[7:0] */
++#define TITAN_GE_MSTATX_CONTROL 0x0828 /* MSTATX Control */
++#define TITAN_GE_MSTATX_VARIABLE_SELECT 0x082C /* MSTATX Variable Select */
++
++/* MIB counter offsets, add to the TITAN_GE_MSTATX_STATS_BASE_XXX */
++#define TITAN_GE_MSTATX_RXFRAMESOK 0x0040
++#define TITAN_GE_MSTATX_RXOCTETSOK 0x0050
++#define TITAN_GE_MSTATX_RXFRAMES 0x0060
++#define TITAN_GE_MSTATX_RXOCTETS 0x0070
++#define TITAN_GE_MSTATX_RXUNICASTFRAMESOK 0x0080
++#define TITAN_GE_MSTATX_RXBROADCASTFRAMESOK 0x0090
++#define TITAN_GE_MSTATX_RXMULTICASTFRAMESOK 0x00A0
++#define TITAN_GE_MSTATX_RXTAGGEDFRAMESOK 0x00B0
++#define TITAN_GE_MSTATX_RXMACPAUSECONTROLFRAMESOK 0x00C0
++#define TITAN_GE_MSTATX_RXMACCONTROLFRAMESOK 0x00D0
++#define TITAN_GE_MSTATX_RXFCSERROR 0x00E0
++#define TITAN_GE_MSTATX_RXALIGNMENTERROR 0x00F0
++#define TITAN_GE_MSTATX_RXSYMBOLERROR 0x0100
++#define TITAN_GE_MSTATX_RXLAYER1ERROR 0x0110
++#define TITAN_GE_MSTATX_RXINRANGELENGTHERROR 0x0120
++#define TITAN_GE_MSTATX_RXLONGLENGTHERROR 0x0130
++#define TITAN_GE_MSTATX_RXLONGLENGTHCRCERROR 0x0140
++#define TITAN_GE_MSTATX_RXSHORTLENGTHERROR 0x0150
++#define TITAN_GE_MSTATX_RXSHORTLLENGTHCRCERROR 0x0160
++#define TITAN_GE_MSTATX_RXFRAMES64OCTETS 0x0170
++#define TITAN_GE_MSTATX_RXFRAMES65TO127OCTETS 0x0180
++#define TITAN_GE_MSTATX_RXFRAMES128TO255OCTETS 0x0190
++#define TITAN_GE_MSTATX_RXFRAMES256TO511OCTETS 0x01A0
++#define TITAN_GE_MSTATX_RXFRAMES512TO1023OCTETS 0x01B0
++#define TITAN_GE_MSTATX_RXFRAMES1024TO1518OCTETS 0x01C0
++#define TITAN_GE_MSTATX_RXFRAMES1519TOMAXSIZE 0x01D0
++#define TITAN_GE_MSTATX_RXSTATIONADDRESSFILTERED 0x01E0
++#define TITAN_GE_MSTATX_RXVARIABLE 0x01F0
++#define TITAN_GE_MSTATX_GENERICADDRESSFILTERED 0x0200
++#define TITAN_GE_MSTATX_UNICASTFILTERED 0x0210
++#define TITAN_GE_MSTATX_MULTICASTFILTERED 0x0220
++#define TITAN_GE_MSTATX_BROADCASTFILTERED 0x0230
++#define TITAN_GE_MSTATX_HASHFILTERED 0x0240
++#define TITAN_GE_MSTATX_TXFRAMESOK 0x0250
++#define TITAN_GE_MSTATX_TXOCTETSOK 0x0260
++#define TITAN_GE_MSTATX_TXOCTETS 0x0270
++#define TITAN_GE_MSTATX_TXTAGGEDFRAMESOK 0x0280
++#define TITAN_GE_MSTATX_TXMACPAUSECONTROLFRAMESOK 0x0290
++#define TITAN_GE_MSTATX_TXFCSERROR 0x02A0
++#define TITAN_GE_MSTATX_TXSHORTLENGTHERROR 0x02B0
++#define TITAN_GE_MSTATX_TXLONGLENGTHERROR 0x02C0
++#define TITAN_GE_MSTATX_TXSYSTEMERROR 0x02D0
++#define TITAN_GE_MSTATX_TXMACERROR 0x02E0
++#define TITAN_GE_MSTATX_TXCARRIERSENSEERROR 0x02F0
++#define TITAN_GE_MSTATX_TXSQETESTERROR 0x0300
++#define TITAN_GE_MSTATX_TXUNICASTFRAMESOK 0x0310
++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESOK 0x0320
++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESOK 0x0330
++#define TITAN_GE_MSTATX_TXUNICASTFRAMESATTEMPTED 0x0340
++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESATTEMPTED 0x0350
++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESATTEMPTED 0x0360
++#define TITAN_GE_MSTATX_TXFRAMES64OCTETS 0x0370
++#define TITAN_GE_MSTATX_TXFRAMES65TO127OCTETS 0x0380
++#define TITAN_GE_MSTATX_TXFRAMES128TO255OCTETS 0x0390
++#define TITAN_GE_MSTATX_TXFRAMES256TO511OCTETS 0x03A0
++#define TITAN_GE_MSTATX_TXFRAMES512TO1023OCTETS 0x03B0
++#define TITAN_GE_MSTATX_TXFRAMES1024TO1518OCTETS 0x03C0
++#define TITAN_GE_MSTATX_TXFRAMES1519TOMAXSIZE 0x03D0
++#define TITAN_GE_MSTATX_TXVARIABLE 0x03E0
++#define TITAN_GE_MSTATX_RXSYSTEMERROR 0x03F0
++#define TITAN_GE_MSTATX_SINGLECOLLISION 0x0400
++#define TITAN_GE_MSTATX_MULTIPLECOLLISION 0x0410
++#define TITAN_GE_MSTATX_DEFERREDXMISSIONS 0x0420
++#define TITAN_GE_MSTATX_LATECOLLISIONS 0x0430
++#define TITAN_GE_MSTATX_ABORTEDDUETOXSCOLLS 0x0440
++
++/* Interrupt specific defines */
++#define TITAN_GE_DEVICE_ID 0x0000 /* Device ID */
++#define TITAN_GE_RESET 0x0004 /* Reset reg */
++#define TITAN_GE_TSB_CTRL_0 0x000C /* TSB Control reg 0 */
++#define TITAN_GE_TSB_CTRL_1 0x0010 /* TSB Control reg 1 */
++#define TITAN_GE_INTR_GRP0_STATUS 0x0040 /* General Interrupt Group 0 Status */
++#define TITAN_GE_INTR_XDMA_CORE_A 0x0048 /* XDMA Channel Interrupt Status, Core A*/
++#define TITAN_GE_INTR_XDMA_CORE_B 0x004C /* XDMA Channel Interrupt Status, Core B*/
++#define TITAN_GE_INTR_XDMA_IE 0x0058 /* XDMA Channel Interrupt Enable */
++#define TITAN_GE_SDQPF_ECC_INTR 0x480C /* SDQPF ECC Interrupt Status */
++#define TITAN_GE_SDQPF_RXFIFO_CTL 0x4828 /* SDQPF RxFifo Control and Interrupt Enb*/
++#define TITAN_GE_SDQPF_RXFIFO_INTR 0x482C /* SDQPF RxFifo Interrupt Status */
++#define TITAN_GE_SDQPF_TXFIFO_CTL 0x4928 /* SDQPF TxFifo Control and Interrupt Enb*/
++#define TITAN_GE_SDQPF_TXFIFO_INTR 0x492C /* SDQPF TxFifo Interrupt Status */
++#define TITAN_GE_SDQPF_RXFIFO_0 0x4840 /* SDQPF RxFIFO Enable */
++#define TITAN_GE_SDQPF_TXFIFO_0 0x4940 /* SDQPF TxFIFO Enable */
++#define TITAN_GE_XDMA_CONFIG 0x5000 /* XDMA Global Configuration */
++#define TITAN_GE_XDMA_INTR_SUMMARY 0x5010 /* XDMA Interrupt Summary */
++#define TITAN_GE_XDMA_BUFADDRPRE 0x5018 /* XDMA Buffer Address Prefix */
++#define TITAN_GE_XDMA_DESCADDRPRE 0x501C /* XDMA Descriptor Address Prefix */
++#define TITAN_GE_XDMA_PORTWEIGHT 0x502C /* XDMA Port Weight Configuration */
++
++/* Rx MAC defines */
++#define TITAN_GE_RMAC_CONFIG_1 0x1200 /* RMAC Configuration 1 */
++#define TITAN_GE_RMAC_CONFIG_2 0x1204 /* RMAC Configuration 2 */
++#define TITAN_GE_RMAC_MAX_FRAME_LEN 0x1208 /* RMAC Max Frame Length */
++#define TITAN_GE_RMAC_STATION_HI 0x120C /* Rx Station Address High */
++#define TITAN_GE_RMAC_STATION_MID 0x1210 /* Rx Station Address Middle */
++#define TITAN_GE_RMAC_STATION_LOW 0x1214 /* Rx Station Address Low */
++#define TITAN_GE_RMAC_LINK_CONFIG 0x1218 /* RMAC Link Configuration */
++
++/* Tx MAC defines */
++#define TITAN_GE_TMAC_CONFIG_1 0x1240 /* TMAC Configuration 1 */
++#define TITAN_GE_TMAC_CONFIG_2 0x1244 /* TMAC Configuration 2 */
++#define TITAN_GE_TMAC_IPG 0x1248 /* TMAC Inter-Packet Gap */
++#define TITAN_GE_TMAC_STATION_HI 0x124C /* Tx Station Address High */
++#define TITAN_GE_TMAC_STATION_MID 0x1250 /* Tx Station Address Middle */
++#define TITAN_GE_TMAC_STATION_LOW 0x1254 /* Tx Station Address Low */
++#define TITAN_GE_TMAC_MAX_FRAME_LEN 0x1258 /* TMAC Max Frame Length */
++#define TITAN_GE_TMAC_MIN_FRAME_LEN 0x125C /* TMAC Min Frame Length */
++#define TITAN_GE_TMAC_PAUSE_FRAME_TIME 0x1260 /* TMAC Pause Frame Time */
++#define TITAN_GE_TMAC_PAUSE_FRAME_INTERVAL 0x1264 /* TMAC Pause Frame Interval */
++
++/* GMII register */
++#define TITAN_GE_GMII_INTERRUPT_STATUS 0x1348 /* GMII Interrupt Status */
++#define TITAN_GE_GMII_CONFIG_GENERAL 0x134C /* GMII Configuration General */
++#define TITAN_GE_GMII_CONFIG_MODE 0x1350 /* GMII Configuration Mode */
++
++/* Tx and Rx XDMA defines */
++#define TITAN_GE_INT_COALESCING 0x5030 /* Interrupt Coalescing */
++#define TITAN_GE_CHANNEL0_CONFIG 0x5040 /* Channel 0 XDMA config */
++#define TITAN_GE_CHANNEL0_INTERRUPT 0x504c /* Channel 0 Interrupt Status */
++#define TITAN_GE_GDI_INTERRUPT_ENABLE 0x5050 /* IE for the GDI Errors */
++#define TITAN_GE_CHANNEL0_PACKET 0x5060 /* Channel 0 Packet count */
++#define TITAN_GE_CHANNEL0_BYTE 0x5064 /* Channel 0 Byte count */
++#define TITAN_GE_CHANNEL0_TX_DESC 0x5054 /* Channel 0 Tx first desc */
++#define TITAN_GE_CHANNEL0_RX_DESC 0x5058 /* Channel 0 Rx first desc */
++
++/* AFX (Address Filter Exact) register offsets for Slice 0 */
++#define TITAN_GE_AFX_EXACT_MATCH_LOW 0x1100 /* AFX Exact Match Address Low*/
++#define TITAN_GE_AFX_EXACT_MATCH_MID 0x1104 /* AFX Exact Match Address Mid*/
++#define TITAN_GE_AFX_EXACT_MATCH_HIGH 0x1108 /* AFX Exact Match Address Hi */
++#define TITAN_GE_AFX_EXACT_MATCH_VID 0x110C /* AFX Exact Match VID */
++#define TITAN_GE_AFX_MULTICAST_HASH_LOW 0x1110 /* AFX Multicast HASH Low */
++#define TITAN_GE_AFX_MULTICAST_HASH_MIDLOW 0x1114 /* AFX Multicast HASH MidLow */
++#define TITAN_GE_AFX_MULTICAST_HASH_MIDHI 0x1118 /* AFX Multicast HASH MidHi */
++#define TITAN_GE_AFX_MULTICAST_HASH_HI 0x111C /* AFX Multicast HASH Hi */
++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 0x1120 /* AFX Address Filter Ctrl 0 */
++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 0x1124 /* AFX Address Filter Ctrl 1 */
++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 0x1128 /* AFX Address Filter Ctrl 2 */
++
++/* Traffic Groomer block */
++#define TITAN_GE_TRTG_CONFIG 0x1000 /* TRTG Config */
++
++#endif /* _TITAN_GE_H_ */
++
+diff -Nur linux-2.6.30/drivers/net/titan_mdio.c rt4ls/drivers/net/titan_mdio.c
+--- linux-2.6.30/drivers/net/titan_mdio.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/drivers/net/titan_mdio.c 2009-06-12 16:28:16.835950077 +0200
+@@ -0,0 +1,217 @@
++/*
++ * drivers/net/titan_mdio.c - Driver for Titan ethernet ports
++ *
++ * Copyright (C) 2003 PMC-Sierra Inc.
++ * Author : Manish Lachwani (lachwani@pmc-sierra.com)
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License
++ * as published by the Free Software Foundation; either version 2
++ * of the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * Management Data IO (MDIO) driver for the Titan GMII. Interacts with the Marvel PHY
++ * on the Titan. No support for the TBI as yet.
++ *
++ */
++
++#include "titan_mdio.h"
++
++#define MDIO_DEBUG
++
++/*
++ * Local constants
++ */
++#define MAX_CLKA 1023
++#define MAX_PHY_DEV 31
++#define MAX_PHY_REG 31
++#define WRITEADDRS_OPCODE 0x0
++#define READ_OPCODE 0x2
++#define WRITE_OPCODE 0x1
++#define MAX_MDIO_POLL 100
++
++/*
++ * Titan MDIO and SCMB registers
++ */
++#define TITAN_GE_SCMB_CONTROL 0x01c0 /* SCMB Control */
++#define TITAN_GE_SCMB_CLKA 0x01c4 /* SCMB Clock A */
++#define TITAN_GE_MDIO_COMMAND 0x01d0 /* MDIO Command */
++#define TITAN_GE_MDIO_DEVICE_PORT_ADDRESS 0x01d4 /* MDIO Device and Port addrs */
++#define TITAN_GE_MDIO_DATA 0x01d8 /* MDIO Data */
++#define TITAN_GE_MDIO_INTERRUPTS 0x01dC /* MDIO Interrupts */
++
++/*
++ * Function to poll the MDIO
++ */
++static int titan_ge_mdio_poll(void)
++{
++ int i, val;
++
++ for (i = 0; i < MAX_MDIO_POLL; i++) {
++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND);
++
++ if (!(val & 0x8000))
++ return TITAN_GE_MDIO_GOOD;
++ }
++
++ return TITAN_GE_MDIO_ERROR;
++}
++
++
++/*
++ * Initialize and configure the MDIO
++ */
++int titan_ge_mdio_setup(titan_ge_mdio_config *titan_mdio)
++{
++ unsigned long val;
++
++ /* Reset the SCMB and program into MDIO mode*/
++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x9000);
++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x1000);
++
++ /* CLK A */
++ val = TITAN_GE_MDIO_READ(TITAN_GE_SCMB_CLKA);
++ val = ( (val & ~(0x03ff)) | (titan_mdio->clka & 0x03ff));
++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CLKA, val);
++
++ /* Preamble Suppresion */
++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND);
++ val = ( (val & ~(0x0001)) | (titan_mdio->mdio_spre & 0x0001));
++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val);
++
++ /* MDIO mode */
++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS);
++ val = ( (val & ~(0x4000)) | (titan_mdio->mdio_mode & 0x4000));
++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val);
++
++ return TITAN_GE_MDIO_GOOD;
++}
++
++/*
++ * Set the PHY address in indirect mode
++ */
++int titan_ge_mdio_inaddrs(int dev_addr, int reg_addr)
++{
++ volatile unsigned long val;
++
++ /* Setup the PHY device */
++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS);
++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00));
++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f));
++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val);
++
++ /* Write the new address */
++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND);
++ val = ( (val & ~(0x0300)) | ( (WRITEADDRS_OPCODE << 8) & 0x0300));
++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val);
++
++ return TITAN_GE_MDIO_GOOD;
++}
++
++/*
++ * Read the MDIO register. This is what the individual parametes mean:
++ *
++ * dev_addr : PHY ID
++ * reg_addr : register offset
++ *
++ * See the spec for the Titan MAC. We operate in the Direct Mode.
++ */
++
++#define MAX_RETRIES 2
++
++int titan_ge_mdio_read(int dev_addr, int reg_addr, unsigned int *pdata)
++{
++ volatile unsigned long val;
++ int retries = 0;
++
++ /* Setup the PHY device */
++
++again:
++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS);
++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00));
++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f));
++ val |= 0x4000;
++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val);
++
++ udelay(30);
++
++ /* Issue the read command */
++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND);
++ val = ( (val & ~(0x0300)) | ( (READ_OPCODE << 8) & 0x0300));
++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val);
++
++ udelay(30);
++
++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD)
++ return TITAN_GE_MDIO_ERROR;
++
++ *pdata = (unsigned int)TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DATA);
++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS);
++
++ udelay(30);
++
++ if (val & 0x2) {
++ if (retries == MAX_RETRIES)
++ return TITAN_GE_MDIO_ERROR;
++ else {
++ retries++;
++ goto again;
++ }
++ }
++
++ return TITAN_GE_MDIO_GOOD;
++}
++
++/*
++ * Write to the MDIO register
++ *
++ * dev_addr : PHY ID
++ * reg_addr : register that needs to be written to
++ *
++ */
++int titan_ge_mdio_write(int dev_addr, int reg_addr, unsigned int data)
++{
++ volatile unsigned long val;
++
++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD)
++ return TITAN_GE_MDIO_ERROR;
++
++ /* Setup the PHY device */
++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS);
++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00));
++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f));
++ val |= 0x4000;
++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val);
++
++ udelay(30);
++
++ /* Setup the data to write */
++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DATA, data);
++
++ udelay(30);
++
++ /* Issue the write command */
++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND);
++ val = ( (val & ~(0x0300)) | ( (WRITE_OPCODE << 8) & 0x0300));
++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val);
++
++ udelay(30);
++
++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD)
++ return TITAN_GE_MDIO_ERROR;
++
++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS);
++ if (val & 0x2)
++ return TITAN_GE_MDIO_ERROR;
++
++ return TITAN_GE_MDIO_GOOD;
++}
++
+diff -Nur linux-2.6.30/drivers/net/titan_mdio.h rt4ls/drivers/net/titan_mdio.h
+--- linux-2.6.30/drivers/net/titan_mdio.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/drivers/net/titan_mdio.h 2009-06-12 16:28:16.835950077 +0200
+@@ -0,0 +1,56 @@
++/*
++ * MDIO used to interact with the PHY when using GMII/MII
++ */
++#ifndef _TITAN_MDIO_H
++#define _TITAN_MDIO_H
++
++#include <linux/netdevice.h>
++#include <linux/workqueue.h>
++#include <linux/delay.h>
++#include "titan_ge.h"
++
++
++#define TITAN_GE_MDIO_ERROR (-9000)
++#define TITAN_GE_MDIO_GOOD 0
++
++#define TITAN_GE_MDIO_BASE titan_ge_base
++
++#define TITAN_GE_MDIO_READ(offset) \
++ *(volatile u32 *)(titan_ge_base + (offset))
++
++#define TITAN_GE_MDIO_WRITE(offset, data) \
++ *(volatile u32 *)(titan_ge_base + (offset)) = (data)
++
++
++/* GMII specific registers */
++#define TITAN_GE_MARVEL_PHY_ID 0x00
++#define TITAN_PHY_AUTONEG_ADV 0x04
++#define TITAN_PHY_LP_ABILITY 0x05
++#define TITAN_GE_MDIO_MII_CTRL 0x09
++#define TITAN_GE_MDIO_MII_EXTENDED 0x0f
++#define TITAN_GE_MDIO_PHY_CTRL 0x10
++#define TITAN_GE_MDIO_PHY_STATUS 0x11
++#define TITAN_GE_MDIO_PHY_IE 0x12
++#define TITAN_GE_MDIO_PHY_IS 0x13
++#define TITAN_GE_MDIO_PHY_LED 0x18
++#define TITAN_GE_MDIO_PHY_LED_OVER 0x19
++#define PHY_ANEG_TIME_WAIT 45 /* 45 seconds wait time */
++
++/*
++ * MDIO Config Structure
++ */
++typedef struct {
++ unsigned int clka;
++ int mdio_spre;
++ int mdio_mode;
++} titan_ge_mdio_config;
++
++/*
++ * Function Prototypes
++ */
++int titan_ge_mdio_setup(titan_ge_mdio_config *);
++int titan_ge_mdio_inaddrs(int, int);
++int titan_ge_mdio_read(int, int, unsigned int *);
++int titan_ge_mdio_write(int, int, unsigned int);
++
++#endif /* _TITAN_MDIO_H */
+diff -Nur linux-2.6.30/drivers/rtc/rtc-cmos.c rt4ls/drivers/rtc/rtc-cmos.c
+--- linux-2.6.30/drivers/rtc/rtc-cmos.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/drivers/rtc/rtc-cmos.c 2009-06-12 16:28:34.779818333 +0200
+@@ -691,7 +691,8 @@
+ */
+ #if defined(CONFIG_ATARI)
+ address_space = 64;
+-#elif defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__sparc__)
++#elif defined(__i386__) || defined(__x86_64__) || defined(__arm__) \
++ || defined(__sparc__) || defined(__mips__)
+ address_space = 128;
+ #else
+ #warning Assuming 128 bytes of RTC+NVRAM address space, not 64 bytes.
+@@ -756,9 +757,8 @@
+ /* FIXME teach the alarm code how to handle binary mode;
+ * <asm-generic/rtc.h> doesn't know 12-hour mode either.
+ */
+- if (is_valid_irq(rtc_irq) &&
+- (!(rtc_control & RTC_24H) || (rtc_control & (RTC_DM_BINARY)))) {
+- dev_dbg(dev, "only 24-hr BCD mode supported\n");
++ if (is_valid_irq(rtc_irq) && !(rtc_control & RTC_24H)) {
++ dev_dbg(dev, "only 24-hr supported\n");
+ retval = -ENXIO;
+ goto cleanup1;
+ }
+diff -Nur linux-2.6.30/drivers/video/Kconfig rt4ls/drivers/video/Kconfig
+--- linux-2.6.30/drivers/video/Kconfig 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/drivers/video/Kconfig 2009-06-12 16:28:47.484606170 +0200
+@@ -1930,6 +1930,28 @@
+ Turn on debugging messages. Note that you can set/unset at run time
+ through sysfs
+
++config FB_SM7XX
++ tristate "Silicon Motion SM7XX Frame Buffer Support"
++ depends on FB
++ select FB_CFB_FILLRECT
++ select FB_CFB_COPYAREA
++ 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.
++
++config FB_SM7XX_DUALHEAD
++ bool "Siliconmotion dualhead support (EXPERIMENTAL)"
++ depends on FB_SM7XX && EXPERIMENTAL
++ help
++ This will enable the dualhead support of SM7XX
++
+ config FB_SM501
+ tristate "Silicon Motion SM501 framebuffer support"
+ depends on FB && MFD_SM501
+diff -Nur linux-2.6.30/drivers/video/Makefile rt4ls/drivers/video/Makefile
+--- linux-2.6.30/drivers/video/Makefile 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/drivers/video/Makefile 2009-06-12 16:28:47.484606170 +0200
+@@ -70,6 +70,7 @@
+ obj-$(CONFIG_FB_TCX) += tcx.o sbuslib.o
+ obj-$(CONFIG_FB_LEO) += leo.o sbuslib.o
+ obj-$(CONFIG_FB_SGIVW) += sgivwfb.o
++obj-$(CONFIG_FB_SM7XX) += sm7xx/
+ obj-$(CONFIG_FB_ACORN) += acornfb.o
+ obj-$(CONFIG_FB_ATARI) += atafb.o c2p_iplan2.o atafb_mfb.o \
+ atafb_iplan2p2.o atafb_iplan2p4.o atafb_iplan2p8.o
+diff -Nur linux-2.6.30/drivers/video/sm7xx/Makefile rt4ls/drivers/video/sm7xx/Makefile
+--- linux-2.6.30/drivers/video/sm7xx/Makefile 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/drivers/video/sm7xx/Makefile 2009-06-12 16:28:47.728622169 +0200
+@@ -0,0 +1,3 @@
++obj-$(CONFIG_FB_SM7XX) += sm7xx.o
++
++sm7xx-y := smtcfb.o
+diff -Nur linux-2.6.30/drivers/video/sm7xx/smtc2d.c rt4ls/drivers/video/sm7xx/smtc2d.c
+--- linux-2.6.30/drivers/video/sm7xx/smtc2d.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/drivers/video/sm7xx/smtc2d.c 2009-06-12 16:28:47.728622169 +0200
+@@ -0,0 +1,979 @@
++/*
++ * smtc2d.c -- 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. & Institute of Computing Technology
++ * 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 <boyod.yang@siliconmotion.com.cn>
++ */
++
++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.30/drivers/video/sm7xx/smtc2d.h rt4ls/drivers/video/sm7xx/smtc2d.h
+--- linux-2.6.30/drivers/video/sm7xx/smtc2d.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/drivers/video/sm7xx/smtc2d.h 2009-06-12 16:28:47.728622169 +0200
+@@ -0,0 +1,530 @@
++/*
++ * smtc2d.h -- Silicon Motion SM7xx 2D drawing engine functions.
++ *
++ * Copyright (C) 2006 Silicon Motion Technology Corp.
++ * Author: Ge Wang, gewang@siliconmotion.com
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * 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.30/drivers/video/sm7xx/smtcfb.c rt4ls/drivers/video/sm7xx/smtcfb.c
+--- linux-2.6.30/drivers/video/sm7xx/smtcfb.c 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/drivers/video/sm7xx/smtcfb.c 2009-06-12 16:28:47.728622169 +0200
+@@ -0,0 +1,1135 @@
++/*
++ * smtcfb.c -- Silicon Motion SM7xx frame buffer device
++ *
++ * Copyright (C) 2006 Silicon Motion Technology Corp.
++ * Authors: Ge Wang, gewang@siliconmotion.com
++ * Boyod boyod.yang@siliconmotion.com.cn
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * 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/Big endian support
++ * - Add 2D support for Lynx
++ * - Verified on2.6.19.2 Boyod.yang <boyod.yang@siliconmotion.com.cn>
++ *
++ * Version 0.09.2621.00.01
++ * - Only support Linux Kernel's version 2.6.21.
++ * Boyod.yang <boyod.yang@siliconmotion.com.cn>
++ *
++ * Version 0.09
++ * - Only support Linux Kernel's version 2.6.12.
++ * Boyod.yang <boyod.yang@siliconmotion.com.cn>
++ */
++
++#ifndef __KERNEL__
++#define __KERNEL__
++#endif
++
++#include <linux/io.h>
++#include <linux/fb.h>
++#include <linux/pci.h>
++#include <linux/init.h>
++#include <linux/uaccess.h>
++#include <linux/screen_info.h>
++
++#ifdef CONFIG_PM
++#include <linux/pm.h>
++#endif
++
++struct screen_info smtc_screen_info;
++
++#include "smtcfb.h"
++#include "smtc2d.h"
++
++#ifdef DEBUG
++#define smdbg(format, arg...) printk(KERN_DEBUG format , ## arg)
++#else
++#define smdbg(format, arg...)
++#endif
++
++/*
++* Private structure
++*/
++struct smtcfb_info {
++ /*
++ * The following is a pointer to be passed into the
++ * functions below. The modules outside the main
++ * voyager.c driver have no knowledge as to what
++ * is within this structure.
++ */
++ struct fb_info fb;
++ struct display_switch *dispsw;
++ struct pci_dev *dev;
++ signed int currcon;
++
++ struct {
++ u8 red, green, blue;
++ } palette[NR_RGB];
++
++ u_int palette_size;
++};
++
++struct par_info {
++ /*
++ * Hardware
++ */
++ u16 chipID;
++ unsigned char __iomem *m_pMMIO;
++ char __iomem *m_pLFB;
++ char *m_pDPR;
++ char *m_pVPR;
++ char *m_pCPR;
++
++ u_int width;
++ u_int height;
++ u_int hz;
++ u_long BaseAddressInVRAM;
++ u8 chipRevID;
++};
++
++struct vesa_mode_table {
++ char mode_index[15];
++ u16 lfb_width;
++ u16 lfb_height;
++ u16 lfb_depth;
++};
++
++static struct vesa_mode_table vesa_mode[] = {
++ {"640x480x8", 640, 480, 8},
++ {"800x480x8", 800, 480, 8},
++ {"800x600x8", 800, 600, 8},
++ {"1024x768x8", 1024, 768, 8},
++ {"1280x1024x8", 1280, 1024, 8},
++
++ {"640x480x16", 640, 480, 16},
++ {"800x480x16", 800, 480, 16},
++ {"800x600x16", 800, 600, 16},
++ {"1024x768x16", 1024, 768, 16},
++ {"1280x1024x16", 1280, 1024, 16},
++
++ {"640x480x24", 640, 480, 24},
++ {"800x480x24", 800, 480, 24},
++ {"800x600x24", 800, 600, 24},
++ {"1024x768x24", 1024, 768, 24},
++ {"1280x1024x24", 1280, 1024, 24},
++};
++
++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 */
++
++#if defined(CONFIG_FB_SM7XX_DUALHEAD)
++
++static u32 colreg2[17];
++/* hardware information for second display (CRT) */
++static struct par_info hw2;
++/* fb_info for second display (CRT) */
++struct smtcfb_info smtcfb_info2;
++
++#endif /* CONFIG_FB_SM501_DUALHEAD */
++
++u16 smtc_ChipIDs[] = {
++ 0x710,
++ 0x712,
++ 0x720
++};
++
++int sm712be_flag;
++
++#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)
++{
++ int i = 0, j = 0;
++ u32 m_nScreenStride;
++
++ smdbg("\nppar_info->width = %d ppar_info->height = %d"
++ "sfb->fb.var.bits_per_pixel = %d ppar_info->hz = %d\n",
++ ppar_info->width, ppar_info->height,
++ sfb->fb.var.bits_per_pixel, ppar_info->hz);
++
++ for (j = 0; j < numVGAModes; j++) {
++ if (VGAMode[j].mmSizeX == ppar_info->width &&
++ VGAMode[j].mmSizeY == ppar_info->height &&
++ VGAMode[j].bpp == sfb->fb.var.bits_per_pixel &&
++ VGAMode[j].hz == ppar_info->hz) {
++
++ smdbg("\nVGAMode[j].mmSizeX = %d VGAMode[j].mmSizeY ="
++ "%d VGAMode[j].bpp = %d"
++ "VGAMode[j].hz=%d\n",
++ VGAMode[j].mmSizeX, VGAMode[j].mmSizeY,
++ VGAMode[j].bpp, VGAMode[j].hz);
++
++ smdbg("VGAMode index=%d\n", j);
++
++ smtc_mmiowb(0x0, 0x3c6);
++
++ smtc_seqw(0, 0x1);
++
++ smtc_mmiowb(VGAMode[j].Init_MISC, 0x3c2);
++
++ /* init SEQ register SR00 - SR04 */
++ for (i = 0; i < SIZE_SR00_SR04; i++)
++ smtc_seqw(i, VGAMode[j].Init_SR00_SR04[i]);
++
++ /* init SEQ register SR10 - SR24 */
++ for (i = 0; i < SIZE_SR10_SR24; i++)
++ smtc_seqw(i + 0x10,
++ VGAMode[j].Init_SR10_SR24[i]);
++
++ /* init SEQ register SR30 - SR75 */
++ for (i = 0; i < SIZE_SR30_SR75; i++)
++ if (((i + 0x30) != 0x62) \
++ && ((i + 0x30) != 0x6a) \
++ && ((i + 0x30) != 0x6b))
++ smtc_seqw(i + 0x30,
++ VGAMode[j].Init_SR30_SR75[i]);
++
++ /* init SEQ register SR80 - SR93 */
++ for (i = 0; i < SIZE_SR80_SR93; i++)
++ smtc_seqw(i + 0x80,
++ VGAMode[j].Init_SR80_SR93[i]);
++
++ /* init SEQ register SRA0 - SRAF */
++ for (i = 0; i < SIZE_SRA0_SRAF; i++)
++ smtc_seqw(i + 0xa0,
++ VGAMode[j].Init_SRA0_SRAF[i]);
++
++ /* init Graphic register GR00 - GR08 */
++ for (i = 0; i < SIZE_GR00_GR08; i++)
++ smtc_grphw(i, VGAMode[j].Init_GR00_GR08[i]);
++
++ /* init Attribute register AR00 - AR14 */
++ for (i = 0; i < SIZE_AR00_AR14; i++)
++ smtc_attrw(i, VGAMode[j].Init_AR00_AR14[i]);
++
++ /* init CRTC register CR00 - CR18 */
++ for (i = 0; i < SIZE_CR00_CR18; i++)
++ smtc_crtcw(i, VGAMode[j].Init_CR00_CR18[i]);
++
++ /* init CRTC register CR30 - CR4D */
++ for (i = 0; i < SIZE_CR30_CR4D; i++)
++ smtc_crtcw(i + 0x30,
++ VGAMode[j].Init_CR30_CR4D[i]);
++
++ /* init CRTC register CR90 - CRA7 */
++ for (i = 0; i < SIZE_CR90_CRA7; i++)
++ smtc_crtcw(i + 0x90,
++ VGAMode[j].Init_CR90_CRA7[i]);
++ }
++ }
++ smtc_mmiowb(0x67, 0x3c2);
++
++ /* set VPR registers */
++ writel(0x0, ppar_info->m_pVPR + 0x0C);
++ writel(0x0, ppar_info->m_pVPR + 0x40);
++
++ /* set data width */
++ m_nScreenStride =
++ (ppar_info->width * sfb->fb.var.bits_per_pixel) / 64;
++ switch (sfb->fb.var.bits_per_pixel) {
++ case 8:
++ writel(0x0, ppar_info->m_pVPR + 0x0);
++ break;
++ case 16:
++ writel(0x00020000, ppar_info->m_pVPR + 0x0);
++ break;
++ case 24:
++ writel(0x00040000, ppar_info->m_pVPR + 0x0);
++ break;
++ case 32:
++ writel(0x00030000, ppar_info->m_pVPR + 0x0);
++ break;
++ }
++ writel((u32) (((m_nScreenStride + 2) << 16) | m_nScreenStride),
++ ppar_info->m_pVPR + 0x10);
++
++}
++
++static void sm712_setpalette(int regno, unsigned red, unsigned green,
++ unsigned blue, struct fb_info *info)
++{
++ struct par_info *cur_par = (struct par_info *)info->par;
++
++ if (cur_par->BaseAddressInVRAM)
++ /*
++ * second display palette for dual head. Enable CRT RAM, 6-bit
++ * RAM
++ */
++ smtc_seqw(0x66, (smtc_seqr(0x66) & 0xC3) | 0x20);
++ else
++ /* primary display palette. Enable LCD RAM only, 6-bit RAM */
++ smtc_seqw(0x66, (smtc_seqr(0x66) & 0xC3) | 0x10);
++ smtc_mmiowb(regno, dac_reg);
++ smtc_mmiowb(red >> 10, dac_val);
++ smtc_mmiowb(green >> 10, dac_val);
++ smtc_mmiowb(blue >> 10, dac_val);
++}
++
++static void smtc_set_timing(struct smtcfb_info *sfb, struct par_info
++ *ppar_info)
++{
++ switch (ppar_info->chipID) {
++ case 0x710:
++ case 0x712:
++ case 0x720:
++ sm712_set_timing(sfb, ppar_info);
++ break;
++ }
++}
++
++static struct fb_var_screeninfo smtcfb_var = {
++ .xres = 1024,
++ .yres = 600,
++ .xres_virtual = 1024,
++ .yres_virtual = 600,
++ .bits_per_pixel = 16,
++ .red = {16, 8, 0},
++ .green = {8, 8, 0},
++ .blue = {0, 8, 0},
++ .activate = FB_ACTIVATE_NOW,
++ .height = -1,
++ .width = -1,
++ .vmode = FB_VMODE_NONINTERLACED,
++};
++
++static struct fb_fix_screeninfo smtcfb_fix = {
++ .id = "sm712fb",
++ .type = FB_TYPE_PACKED_PIXELS,
++ .visual = FB_VISUAL_TRUECOLOR,
++ .line_length = 800 * 3,
++ .accel = FB_ACCEL_SMI_LYNX,
++};
++
++/* chan_to_field
++ *
++ * convert a colour value into a field position
++ *
++ * from pxafb.c
++ */
++
++static inline unsigned int chan_to_field(unsigned int chan,
++ struct fb_bitfield *bf)
++{
++ chan &= 0xffff;
++ chan >>= 16 - bf->length;
++ return chan << bf->offset;
++}
++
++static int smtc_setcolreg(unsigned regno, unsigned red, unsigned green,
++ unsigned blue, unsigned trans, struct fb_info *info)
++{
++ struct smtcfb_info *sfb = (struct smtcfb_info *)info;
++ u32 val;
++
++ if (regno > 255)
++ return 1;
++
++ switch (sfb->fb.fix.visual) {
++ case FB_VISUAL_DIRECTCOLOR:
++ case FB_VISUAL_TRUECOLOR:
++ /*
++ * 16/32 bit true-colour, use pseuo-palette for 16 base color
++ */
++ if (regno < 16) {
++ if (sfb->fb.var.bits_per_pixel == 16) {
++ u32 *pal = sfb->fb.pseudo_palette;
++ val = chan_to_field(red, &sfb->fb.var.red);
++ val |= chan_to_field(green, \
++ &sfb->fb.var.green);
++ val |= chan_to_field(blue, &sfb->fb.var.blue);
++#ifdef __BIG_ENDIAN
++ pal[regno] =
++ ((red & 0xf800) >> 8) |
++ ((green & 0xe000) >> 13) |
++ ((green & 0x1c00) << 3) |
++ ((blue & 0xf800) >> 3);
++#else
++ pal[regno] = val;
++#endif
++ } else {
++ u32 *pal = sfb->fb.pseudo_palette;
++ val = chan_to_field(red, &sfb->fb.var.red);
++ val |= chan_to_field(green, \
++ &sfb->fb.var.green);
++ val |= chan_to_field(blue, &sfb->fb.var.blue);
++#ifdef __BIG_ENDIAN
++ val =
++ (val & 0xff00ff00 >> 8) |
++ (val & 0x00ff00ff << 8);
++#endif
++ pal[regno] = val;
++ }
++ }
++ break;
++
++ case FB_VISUAL_PSEUDOCOLOR:
++ /* color depth 8 bit */
++ sm712_setpalette(regno, red, green, blue, info);
++ break;
++
++ default:
++ return 1; /* unknown type */
++ }
++
++ return 0;
++
++}
++
++#ifdef __BIG_ENDIAN
++static ssize_t smtcfb_read(struct fb_info *info, char __user * buf, size_t
++ count, loff_t *ppos)
++{
++ unsigned long p = *ppos;
++
++ u32 *buffer, *dst;
++ u32 __iomem *src;
++ int c, i, cnt = 0, err = 0;
++ unsigned long total_size;
++
++ if (!info || !info->screen_base)
++ return -ENODEV;
++
++ if (info->state != FBINFO_STATE_RUNNING)
++ return -EPERM;
++
++ total_size = info->screen_size;
++
++ if (total_size == 0)
++ total_size = info->fix.smem_len;
++
++ if (p >= total_size)
++ return 0;
++
++ if (count >= total_size)
++ count = total_size;
++
++ if (count + p > total_size)
++ count = total_size - p;
++
++ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
++ if (!buffer)
++ return -ENOMEM;
++
++ src = (u32 __iomem *) (info->screen_base + p);
++
++ if (info->fbops->fb_sync)
++ info->fbops->fb_sync(info);
++
++ while (count) {
++ c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
++ dst = buffer;
++ for (i = c >> 2; i--;) {
++ *dst = fb_readl(src++);
++ *dst =
++ (*dst & 0xff00ff00 >> 8) |
++ (*dst & 0x00ff00ff << 8);
++ dst++;
++ }
++ if (c & 3) {
++ u8 *dst8 = (u8 *) dst;
++ u8 __iomem *src8 = (u8 __iomem *) src;
++
++ for (i = c & 3; i--;) {
++ if (i & 1) {
++ *dst8++ = fb_readb(++src8);
++ } else {
++ *dst8++ = fb_readb(--src8);
++ src8 += 2;
++ }
++ }
++ src = (u32 __iomem *) src8;
++ }
++
++ if (copy_to_user(buf, buffer, c)) {
++ err = -EFAULT;
++ break;
++ }
++ *ppos += c;
++ buf += c;
++ cnt += c;
++ count -= c;
++ }
++
++ kfree(buffer);
++
++ return (err) ? err : cnt;
++}
++
++static ssize_t
++smtcfb_write(struct fb_info *info, const char __user *buf, size_t count,
++ loff_t *ppos)
++{
++ unsigned long p = *ppos;
++
++ u32 *buffer, *src;
++ u32 __iomem *dst;
++ int c, i, cnt = 0, err = 0;
++ unsigned long total_size;
++
++ if (!info || !info->screen_base)
++ return -ENODEV;
++
++ if (info->state != FBINFO_STATE_RUNNING)
++ return -EPERM;
++
++ total_size = info->screen_size;
++
++ if (total_size == 0)
++ total_size = info->fix.smem_len;
++
++ if (p > total_size)
++ return -EFBIG;
++
++ if (count > total_size) {
++ err = -EFBIG;
++ count = total_size;
++ }
++
++ if (count + p > total_size) {
++ if (!err)
++ err = -ENOSPC;
++
++ count = total_size - p;
++ }
++
++ buffer = kmalloc((count > PAGE_SIZE) ? PAGE_SIZE : count, GFP_KERNEL);
++ if (!buffer)
++ return -ENOMEM;
++
++ dst = (u32 __iomem *) (info->screen_base + p);
++
++ if (info->fbops->fb_sync)
++ info->fbops->fb_sync(info);
++
++ while (count) {
++ c = (count > PAGE_SIZE) ? PAGE_SIZE : count;
++ src = buffer;
++
++ if (copy_from_user(src, buf, c)) {
++ err = -EFAULT;
++ break;
++ }
++
++ for (i = c >> 2; i--;) {
++ fb_writel((*src & 0xff00ff00 >> 8) |
++ (*src & 0x00ff00ff << 8), dst++);
++ src++;
++ }
++ if (c & 3) {
++ u8 *src8 = (u8 *) src;
++ u8 __iomem *dst8 = (u8 __iomem *) dst;
++
++ for (i = c & 3; i--;) {
++ if (i & 1) {
++ fb_writeb(*src8++, ++dst8);
++ } else {
++ fb_writeb(*src8++, --dst8);
++ dst8 += 2;
++ }
++ }
++ dst = (u32 __iomem *) dst8;
++ }
++
++ *ppos += c;
++ buf += c;
++ cnt += c;
++ count -= c;
++ }
++
++ kfree(buffer);
++
++ return (cnt) ? cnt : err;
++}
++#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_fillrect = smtcfb_fillrect,
++ .fb_imageblit = smtcfb_imageblit,
++ .fb_copyarea = smtcfb_copyarea,
++#ifdef __BIG_ENDIAN
++ .fb_read = smtcfb_read,
++ .fb_write = smtcfb_write,
++#endif
++
++};
++
++void smtcfb_setmode(struct smtcfb_info *sfb)
++{
++ switch (sfb->fb.var.bits_per_pixel) {
++ case 32:
++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
++ sfb->fb.fix.line_length = sfb->fb.var.xres * 4;
++ sfb->fb.var.red.length = 8;
++ sfb->fb.var.green.length = 8;
++ sfb->fb.var.blue.length = 8;
++ sfb->fb.var.red.offset = 16;
++ sfb->fb.var.green.offset = 8;
++ sfb->fb.var.blue.offset = 0;
++
++ break;
++ case 8:
++ sfb->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR;
++ sfb->fb.fix.line_length = sfb->fb.var.xres;
++ sfb->fb.var.red.offset = 5;
++ sfb->fb.var.red.length = 3;
++ sfb->fb.var.green.offset = 2;
++ sfb->fb.var.green.length = 3;
++ sfb->fb.var.blue.offset = 0;
++ sfb->fb.var.blue.length = 2;
++ break;
++ case 24:
++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
++ sfb->fb.fix.line_length = sfb->fb.var.xres * 3;
++ sfb->fb.var.red.length = 8;
++ sfb->fb.var.green.length = 8;
++ sfb->fb.var.blue.length = 8;
++
++ sfb->fb.var.red.offset = 16;
++ sfb->fb.var.green.offset = 8;
++ sfb->fb.var.blue.offset = 0;
++
++ break;
++ case 16:
++ default:
++ sfb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
++ sfb->fb.fix.line_length = sfb->fb.var.xres * 2;
++
++ sfb->fb.var.red.length = 5;
++ sfb->fb.var.green.length = 6;
++ sfb->fb.var.blue.length = 5;
++
++ sfb->fb.var.red.offset = 11;
++ sfb->fb.var.green.offset = 5;
++ sfb->fb.var.blue.offset = 0;
++
++ break;
++ }
++
++ hw.width = sfb->fb.var.xres;
++ 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);
++ }
++}
++
++#if defined(CONFIG_FB_SM7XX_DUALHEAD)
++void smtc_head2_init(struct smtcfb_info *sfb)
++{
++ smtcfb_info2 = *sfb;
++ smtcfb_info2.fb.pseudo_palette = &colreg2;
++ smtcfb_info2.fb.par = &hw2;
++ sprintf(smtcfb_info2.fb.fix.id, "sm%Xfb2", hw.chipID);
++ hw2.chipID = hw.chipID;
++ hw2.chipRevID = hw.chipRevID;
++ hw2.width = smtcfb_info2.fb.var.xres;
++ hw2.height = smtcfb_info2.fb.var.yres;
++ hw2.hz = 60;
++ hw2.m_pMMIO = smtc_RegBaseAddress;
++
++ /*hard code 2nd head starting from half VRAM size postion */
++ hw2.BaseAddressInVRAM = smtcfb_info2.fb.fix.smem_len / 2;
++
++ hw2.m_pLFB = smtc_VRAMBaseAddress + hw2.BaseAddressInVRAM;
++ smtcfb_info2.fb.screen_base = hw2.m_pLFB;
++
++ writel(hw2.BaseAddressInVRAM >> 3, hw2.m_pVPR + 0x10);
++}
++#endif
++
++/*
++ * Alloc struct smtcfb_info and assign the default value
++ */
++static struct smtcfb_info *__devinit smtc_alloc_fb_info(struct pci_dev *dev,
++ char *name)
++{
++ struct smtcfb_info *sfb;
++
++ sfb = kmalloc(sizeof(struct smtcfb_info), GFP_KERNEL);
++
++ if (!sfb)
++ return NULL;
++
++ memset(sfb, 0, sizeof(struct smtcfb_info));
++
++ sfb->currcon = -1;
++ sfb->dev = dev;
++
++ /*** Init sfb->fb with default value ***/
++ sfb->fb.flags = FBINFO_FLAG_DEFAULT;
++ sfb->fb.fbops = &smtcfb_ops;
++ sfb->fb.var = smtcfb_var;
++ sfb->fb.fix = smtcfb_fix;
++
++ strcpy(sfb->fb.fix.id, name);
++
++ sfb->fb.fix.type = FB_TYPE_PACKED_PIXELS;
++ sfb->fb.fix.type_aux = 0;
++ sfb->fb.fix.xpanstep = 0;
++ sfb->fb.fix.ypanstep = 0;
++ sfb->fb.fix.ywrapstep = 0;
++ sfb->fb.fix.accel = FB_ACCEL_SMI_LYNX;
++
++ sfb->fb.var.nonstd = 0;
++ sfb->fb.var.activate = FB_ACTIVATE_NOW;
++ sfb->fb.var.height = -1;
++ sfb->fb.var.width = -1;
++ /* text mode acceleration */
++ sfb->fb.var.accel_flags = FB_ACCELF_TEXT;
++ sfb->fb.var.vmode = FB_VMODE_NONINTERLACED;
++ sfb->fb.par = &hw;
++ sfb->fb.pseudo_palette = colreg;
++
++ return sfb;
++}
++
++/*
++ * Unmap in the memory mapped IO registers
++ */
++
++static void __devinit smtc_unmap_mmio(struct smtcfb_info *sfb)
++{
++ if (sfb && smtc_RegBaseAddress)
++ smtc_RegBaseAddress = NULL;
++}
++
++/*
++ * Map in the screen memory
++ */
++
++static int __devinit smtc_map_smem(struct smtcfb_info *sfb,
++ struct pci_dev *dev, u_long smem_len)
++{
++ if (sfb->fb.var.bits_per_pixel == 32) {
++#ifdef __BIG_ENDIAN
++ sfb->fb.fix.smem_start = pci_resource_start(dev, 0)
++ + 0x800000;
++#else
++ sfb->fb.fix.smem_start = pci_resource_start(dev, 0);
++#endif
++ } else {
++ sfb->fb.fix.smem_start = pci_resource_start(dev, 0);
++ }
++
++ sfb->fb.fix.smem_len = smem_len;
++
++ sfb->fb.screen_base = smtc_VRAMBaseAddress;
++
++ if (!sfb->fb.screen_base) {
++ printk(KERN_INFO "%s: unable to map screen memory\n",
++ sfb->fb.fix.id);
++ return -ENOMEM;
++ }
++
++ return 0;
++}
++
++/*
++ * Unmap in the screen memory
++ *
++ */
++static void __devinit smtc_unmap_smem(struct smtcfb_info *sfb)
++{
++ if (sfb && sfb->fb.screen_base) {
++ iounmap(sfb->fb.screen_base);
++ sfb->fb.screen_base = NULL;
++ }
++}
++
++/*
++ * We need to wake up the LynxEM+, and make sure its in linear memory mode.
++ */
++static inline void __devinit sm7xx_init_hw(void)
++{
++ outb_p(0x18, 0x3c4);
++ outb_p(0x11, 0x3c5);
++}
++
++static void __devinit smtc_free_fb_info(struct smtcfb_info *sfb)
++{
++ if (sfb) {
++ fb_alloc_cmap(&sfb->fb.cmap, 0, 0);
++ kfree(sfb);
++ }
++}
++
++static int __init smtcfb_init(void)
++{
++ struct smtcfb_info *sfb;
++ u_long smem_size = 0x00800000; /* default 8MB */
++ char name[16];
++ int err, i = 0;
++ unsigned long pFramebufferPhysical;
++ struct pci_dev *pdev = NULL;
++
++ printk(KERN_INFO
++ "Silicon Motion display driver " SMTC_LINUX_FB_VERSION "\n");
++
++ /* init the global variable */
++ smtc_2Dacceleration = 0; /* default no 2D acceleration */
++
++ do {
++ pdev = pci_get_device(0x126f, smtc_ChipIDs[i], pdev);
++ if (pdev == NULL) {
++ i++;
++ } else {
++ hw.chipID = smtc_ChipIDs[i];
++ break;
++ }
++ } while (i < numSMTCchipIDs);
++
++ err = pci_enable_device(pdev); /* enable SMTC chip */
++
++ if (err)
++ return err;
++
++ err = -ENOMEM;
++
++ sprintf(name, "sm%Xfb", hw.chipID);
++
++ sfb = smtc_alloc_fb_info(pdev, name);
++
++ if (!sfb)
++ goto failed;
++
++ sm7xx_init_hw();
++
++ /*get mode parameter from smtc_screen_info */
++ if (smtc_screen_info.lfb_width != 0) {
++ sfb->fb.var.xres = smtc_screen_info.lfb_width;
++ sfb->fb.var.yres = smtc_screen_info.lfb_height;
++ sfb->fb.var.bits_per_pixel = smtc_screen_info.lfb_depth;
++ } else {
++ /* default resolution 1024x600 16bit mode */
++ sfb->fb.var.xres = SCREEN_X_RES;
++ sfb->fb.var.yres = SCREEN_Y_RES;
++ sfb->fb.var.bits_per_pixel = SCREEN_BPP;
++ }
++
++ smdbg("\nsfb->fb.var.bits_per_pixel = %d sm712be_flag = %d\n",
++ sfb->fb.var.bits_per_pixel, sm712be_flag);
++#ifdef __BIG_ENDIAN
++ if (sm712be_flag == 1 && sfb->fb.var.bits_per_pixel == 24)
++ sfb->fb.var.bits_per_pixel = (smtc_screen_info.lfb_depth = 32);
++#endif
++ /* Map address and memory detection */
++ pFramebufferPhysical = pci_resource_start(pdev, 0);
++ pci_read_config_byte(pdev, PCI_REVISION_ID, &hw.chipRevID);
++
++ switch (hw.chipID) {
++ case 0x710:
++ case 0x712:
++ sfb->fb.fix.mmio_start = pFramebufferPhysical + 0x00400000;
++ sfb->fb.fix.mmio_len = 0x00400000;
++ smem_size = SM712_VIDEOMEMORYSIZE;
++#ifdef __BIG_ENDIAN
++ hw.m_pLFB = (smtc_VRAMBaseAddress =
++ ioremap(pFramebufferPhysical, 0x00c00000));
++#else
++ hw.m_pLFB = (smtc_VRAMBaseAddress =
++ ioremap(pFramebufferPhysical, 0x00800000));
++#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_pVPR = hw.m_pLFB + 0x0040c000;
++ if (sfb->fb.var.bits_per_pixel == 32) {
++#ifdef __BIG_ENDIAN
++ smtc_VRAMBaseAddress += 0x800000;
++ hw.m_pLFB += 0x800000;
++ printk(KERN_INFO
++ "\nsmtc_VRAMBaseAddress=%p hw.m_pLFB=%p\n",
++ smtc_VRAMBaseAddress, hw.m_pLFB);
++#endif
++ }
++ if (!smtc_RegBaseAddress) {
++
++ printk(KERN_INFO
++ "%s: unable to map memory mapped IO\n",
++ sfb->fb.fix.id);
++
++ return -ENOMEM;
++ }
++
++ /* set MCLK = 14.31818 * (0x16 / 0x2) */
++ smtc_seqw(0x6a, 0x16);
++ smtc_seqw(0x6b, 0x02);
++ smtc_seqw(0x62, 0x3e);
++ /* enable PCI burst */
++ smtc_seqw(0x17, 0x20);
++ /* enabel word swap */
++ if (sfb->fb.var.bits_per_pixel == 32) {
++#ifdef __BIG_ENDIAN
++ 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_pLFB = (smtc_VRAMBaseAddress =
++ smtc_2DBaseAddress + 0x00200000);
++ hw.m_pMMIO = (smtc_RegBaseAddress =
++ smtc_2DBaseAddress + 0x000c0000);
++ smtc_2Ddataport = smtc_2DBaseAddress + DE_DATA_PORT_722;
++ hw.m_pVPR = smtc_2DBaseAddress + 0x800;
++
++ smtc_seqw(0x62, 0xff);
++ smtc_seqw(0x6a, 0x0d);
++ smtc_seqw(0x6b, 0x02);
++ smtc_2Dacceleration = 0;
++ break;
++ default:
++ printk(KERN_INFO
++ "No valid Silicon Motion display chip was detected!\n");
++
++ smtc_free_fb_info(sfb);
++ return err;
++ }
++
++ /* can support 32 bpp */
++ if (15 == sfb->fb.var.bits_per_pixel)
++ sfb->fb.var.bits_per_pixel = 16;
++
++ sfb->fb.var.xres_virtual = sfb->fb.var.xres;
++
++ sfb->fb.var.yres_virtual = sfb->fb.var.yres;
++ err = smtc_map_smem(sfb, pdev, smem_size);
++ if (err)
++ goto failed;
++
++ smtcfb_setmode(sfb);
++ /* Primary display starting from 0 postion */
++ hw.BaseAddressInVRAM = 0;
++ sfb->fb.par = &hw;
++
++ err = register_framebuffer(&sfb->fb);
++ if (err < 0)
++ goto failed;
++
++ printk(KERN_INFO "Silicon Motion SM%X Rev%X primary display mode"
++ "%dx%d-%d Init Complete.\n", hw.chipID, hw.chipRevID,
++ sfb->fb.var.xres, sfb->fb.var.yres,
++ sfb->fb.var.bits_per_pixel);
++
++#if defined(CONFIG_FB_SM7XX_DUALHEAD)
++ smtc_head2_init(sfb);
++ err = register_framebuffer(&smtcfb_info2.fb);
++
++ /* if second head display fails, also fails the primary display */
++ if (err < 0) {
++ printk(KERN_INFO
++ "Silicon Motion, Inc. second head init fail\n");
++ goto failed;
++ }
++
++ printk(KERN_INFO "Silicon Motion SM%X Rev%X secondary display mode"
++ "%dx%d-%d Init Complete.\n", hw.chipID, hw.chipRevID,
++ hw2.width, hw2.height,
++ smtcfb_info2.fb.var.bits_per_pixel);
++#endif
++
++ return 0;
++
++ failed:
++ printk(KERN_INFO "Silicon Motion, Inc. primary display init fail\n");
++
++ smtc_unmap_smem(sfb);
++ smtc_unmap_mmio(sfb);
++ smtc_free_fb_info(sfb);
++
++ return err;
++}
++
++static void __exit smtcfb_exit(void)
++{
++}
++
++module_init(smtcfb_init);
++module_exit(smtcfb_exit);
++
++/*
++ * sm712be_setup - process command line options
++ * @options: string of options
++ * Returns zero.
++ *
++ */
++static int __init sm712be_setup(char *options)
++{
++ sm712be_flag = 0;
++ if (!options || !*options) {
++ smdbg("\n No sm712be parameter\n");
++ return -EINVAL;
++ }
++ if (strstr(options, "enable") != NULL)
++ sm712be_flag = 1;
++
++ smdbg("\nsm712be_setup = %s sm712be_flag = %d\n", options,
++ sm712be_flag);
++
++ return 0;
++}
++
++__setup("sm712be=", sm712be_setup);
++
++/*
++ * sm712vga_setup - process command line options, get vga parameter
++ * @options: string of options
++ * Returns zero.
++ *
++ */
++static int __init sm712vga_setup(char *options)
++{
++ int index;
++ sm712be_flag = 0;
++
++ if (!options || !*options) {
++ smdbg("\n No vga parameter\n");
++ return -EINVAL;
++ }
++
++ smtc_screen_info.lfb_width = 0;
++ smtc_screen_info.lfb_height = 0;
++ smtc_screen_info.lfb_depth = 0;
++
++ smdbg("\nsm712vga_setup = %s\n", options);
++
++ for (index = 0;
++ index < (sizeof(vesa_mode) / sizeof(struct vesa_mode_table));
++ index++) {
++ if (strstr(options, vesa_mode[index].mode_index)) {
++ smtc_screen_info.lfb_width = vesa_mode[index].lfb_width;
++ smtc_screen_info.lfb_height =
++ vesa_mode[index].lfb_height;
++ smtc_screen_info.lfb_depth = vesa_mode[index].lfb_depth;
++ return 0;
++ }
++ }
++
++ return -1;
++}
++
++__setup("vga=", sm712vga_setup);
++
++MODULE_AUTHOR("Siliconmotion ");
++MODULE_DESCRIPTION("Framebuffer driver for SMI Graphic Cards");
++MODULE_LICENSE("GPL");
+diff -Nur linux-2.6.30/drivers/video/sm7xx/smtcfb.h rt4ls/drivers/video/sm7xx/smtcfb.h
+--- linux-2.6.30/drivers/video/sm7xx/smtcfb.h 1970-01-01 01:00:00.000000000 +0100
++++ rt4ls/drivers/video/sm7xx/smtcfb.h 2009-06-12 16:28:47.728622169 +0200
+@@ -0,0 +1,793 @@
++/*
++ * smtcfb.h -- Silicon Motion SM7xx frame buffer device
++ *
++ * Copyright (C) 2006 Silicon Motion Technology Corp.
++ * Authors: Ge Wang, gewang@siliconmotion.com
++ * Boyod boyod.yang@siliconmotion.com.cn
++ *
++ * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology
++ * 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.
++ */
++
++#define SMTC_LINUX_FB_VERSION "version 0.11.2619.21.01 July 27, 2008"
++
++#define NR_PALETTE 256
++#define NR_RGB 2
++
++#define FB_ACCEL_SMI_LYNX 88
++
++#ifdef __BIG_ENDIAN
++#define PC_VGA 0
++#else
++#define PC_VGA 1
++#endif
++
++#define SCREEN_X_RES 1024
++#define SCREEN_Y_RES 600
++#define SCREEN_BPP 16
++
++#ifndef FIELD_OFFSET
++#define FIELD_OFSFET(type, field) \
++ ((unsigned long) (PUCHAR) & (((type *)0)->field))
++#endif
++
++/*Assume SM712 graphics chip has 4MB VRAM */
++#define SM712_VIDEOMEMORYSIZE 0x00400000
++/*Assume SM722 graphics chip has 8MB VRAM */
++#define SM722_VIDEOMEMORYSIZE 0x00800000
++
++#define dac_reg (0x3c8)
++#define dac_val (0x3c9)
++
++extern char *smtc_RegBaseAddress;
++#define smtc_mmiowb(dat, reg) writeb(dat, smtc_RegBaseAddress + reg)
++#define smtc_mmioww(dat, reg) writew(dat, smtc_RegBaseAddress + reg)
++#define smtc_mmiowl(dat, reg) writel(dat, smtc_RegBaseAddress + reg)
++
++#define smtc_mmiorb(reg) readb(smtc_RegBaseAddress + reg)
++#define smtc_mmiorw(reg) readw(smtc_RegBaseAddress + reg)
++#define smtc_mmiorl(reg) readl(smtc_RegBaseAddress + reg)
++
++#define SIZE_SR00_SR04 (0x04 - 0x00 + 1)
++#define SIZE_SR10_SR24 (0x24 - 0x10 + 1)
++#define SIZE_SR30_SR75 (0x75 - 0x30 + 1)
++#define SIZE_SR80_SR93 (0x93 - 0x80 + 1)
++#define SIZE_SRA0_SRAF (0xAF - 0xA0 + 1)
++#define SIZE_GR00_GR08 (0x08 - 0x00 + 1)
++#define SIZE_AR00_AR14 (0x14 - 0x00 + 1)
++#define SIZE_CR00_CR18 (0x18 - 0x00 + 1)
++#define SIZE_CR30_CR4D (0x4D - 0x30 + 1)
++#define SIZE_CR90_CRA7 (0xA7 - 0x90 + 1)
++#define SIZE_VPR (0x6C + 1)
++#define SIZE_DPR (0x44 + 1)
++
++static inline void smtc_crtcw(int reg, int val)
++{
++ smtc_mmiowb(reg, 0x3d4);
++ smtc_mmiowb(val, 0x3d5);
++}
++
++static inline unsigned int smtc_crtcr(int reg)
++{
++ smtc_mmiowb(reg, 0x3d4);
++ return smtc_mmiorb(0x3d5);
++}
++
++static inline void smtc_grphw(int reg, int val)
++{
++ smtc_mmiowb(reg, 0x3ce);
++ smtc_mmiowb(val, 0x3cf);
++}
++
++static inline unsigned int smtc_grphr(int reg)
++{
++ smtc_mmiowb(reg, 0x3ce);
++ return smtc_mmiorb(0x3cf);
++}
++
++static inline void smtc_attrw(int reg, int val)
++{
++ smtc_mmiorb(0x3da);
++ smtc_mmiowb(reg, 0x3c0);
++ smtc_mmiorb(0x3c1);
++ smtc_mmiowb(val, 0x3c0);
++}
++
++static inline void smtc_seqw(int reg, int val)
++{
++ smtc_mmiowb(reg, 0x3c4);
++ smtc_mmiowb(val, 0x3c5);
++}
++
++static inline unsigned int smtc_seqr(int reg)
++{
++ smtc_mmiowb(reg, 0x3c4);
++ return smtc_mmiorb(0x3c5);
++}
++
++/* The next structure holds all information relevant for a specific video mode.
++ */
++
++struct ModeInit {
++ int mmSizeX;
++ int mmSizeY;
++ int bpp;
++ int hz;
++ unsigned char Init_MISC;
++ unsigned char Init_SR00_SR04[SIZE_SR00_SR04];
++ unsigned char Init_SR10_SR24[SIZE_SR10_SR24];
++ unsigned char Init_SR30_SR75[SIZE_SR30_SR75];
++ unsigned char Init_SR80_SR93[SIZE_SR80_SR93];
++ unsigned char Init_SRA0_SRAF[SIZE_SRA0_SRAF];
++ unsigned char Init_GR00_GR08[SIZE_GR00_GR08];
++ unsigned char Init_AR00_AR14[SIZE_AR00_AR14];
++ unsigned char Init_CR00_CR18[SIZE_CR00_CR18];
++ unsigned char Init_CR30_CR4D[SIZE_CR30_CR4D];
++ unsigned char Init_CR90_CRA7[SIZE_CR90_CRA7];
++};
++
++/**********************************************************************
++ SM712 Mode table.
++ **********************************************************************/
++struct ModeInit VGAMode[] = {
++ {
++ /* mode#0: 640 x 480 16Bpp 60Hz */
++ 640, 480, 16, 60,
++ /* Init_MISC */
++ 0xE3,
++ { /* Init_SR0_SR4 */
++ 0x03, 0x01, 0x0F, 0x00, 0x0E,
++ },
++ { /* Init_SR10_SR24 */
++ 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
++ 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xC4, 0x30, 0x02, 0x01, 0x01,
++ },
++ { /* Init_SR30_SR75 */
++ 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
++ 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
++ 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
++ 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
++ 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
++ 0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
++ },
++ { /* Init_SR80_SR93 */
++ 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
++ 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
++ 0x00, 0x00, 0x00, 0x00,
++ },
++ { /* Init_SRA0_SRAF */
++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
++ },
++ { /* Init_GR00_GR08 */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
++ 0xFF,
++ },
++ { /* Init_AR00_AR14 */
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x41, 0x00, 0x0F, 0x00, 0x00,
++ },
++ { /* Init_CR00_CR18 */
++ 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
++ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
++ 0xFF,
++ },
++ { /* Init_CR30_CR4D */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
++ 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
++ 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
++ },
++ { /* Init_CR90_CRA7 */
++ 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
++ 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
++ 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
++ },
++ },
++ {
++ /* mode#1: 640 x 480 24Bpp 60Hz */
++ 640, 480, 24, 60,
++ /* Init_MISC */
++ 0xE3,
++ { /* Init_SR0_SR4 */
++ 0x03, 0x01, 0x0F, 0x00, 0x0E,
++ },
++ { /* Init_SR10_SR24 */
++ 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
++ 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xC4, 0x30, 0x02, 0x01, 0x01,
++ },
++ { /* Init_SR30_SR75 */
++ 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
++ 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
++ 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
++ 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
++ 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
++ 0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
++ },
++ { /* Init_SR80_SR93 */
++ 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
++ 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
++ 0x00, 0x00, 0x00, 0x00,
++ },
++ { /* Init_SRA0_SRAF */
++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
++ },
++ { /* Init_GR00_GR08 */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
++ 0xFF,
++ },
++ { /* Init_AR00_AR14 */
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x41, 0x00, 0x0F, 0x00, 0x00,
++ },
++ { /* Init_CR00_CR18 */
++ 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
++ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
++ 0xFF,
++ },
++ { /* Init_CR30_CR4D */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
++ 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
++ 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
++ },
++ { /* Init_CR90_CRA7 */
++ 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
++ 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
++ 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
++ },
++ },
++ {
++ /* mode#0: 640 x 480 32Bpp 60Hz */
++ 640, 480, 32, 60,
++ /* Init_MISC */
++ 0xE3,
++ { /* Init_SR0_SR4 */
++ 0x03, 0x01, 0x0F, 0x00, 0x0E,
++ },
++ { /* Init_SR10_SR24 */
++ 0xFF, 0xBE, 0xEF, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
++ 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xC4, 0x30, 0x02, 0x01, 0x01,
++ },
++ { /* Init_SR30_SR75 */
++ 0x32, 0x03, 0xA0, 0x09, 0xC0, 0x32, 0x32, 0x32,
++ 0x32, 0x32, 0x32, 0x32, 0x00, 0x00, 0x03, 0xFF,
++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x32, 0x32, 0x32,
++ 0x04, 0x24, 0x63, 0x4F, 0x52, 0x0B, 0xDF, 0xEA,
++ 0x04, 0x50, 0x19, 0x32, 0x32, 0x00, 0x00, 0x32,
++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
++ 0x50, 0x03, 0x74, 0x14, 0x07, 0x82, 0x07, 0x04,
++ 0x00, 0x45, 0x30, 0x30, 0x40, 0x30,
++ },
++ { /* Init_SR80_SR93 */
++ 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x32,
++ 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x32, 0x32,
++ 0x00, 0x00, 0x00, 0x00,
++ },
++ { /* Init_SRA0_SRAF */
++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xFF, 0xDF,
++ },
++ { /* Init_GR00_GR08 */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
++ 0xFF,
++ },
++ { /* Init_AR00_AR14 */
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x41, 0x00, 0x0F, 0x00, 0x00,
++ },
++ { /* Init_CR00_CR18 */
++ 0x5F, 0x4F, 0x4F, 0x00, 0x53, 0x1F, 0x0B, 0x3E,
++ 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xEA, 0x0C, 0xDF, 0x50, 0x40, 0xDF, 0x00, 0xE3,
++ 0xFF,
++ },
++ { /* Init_CR30_CR4D */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x55, 0x03, 0x20,
++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xFF, 0xFD,
++ 0x5F, 0x4F, 0x00, 0x54, 0x00, 0x0B, 0xDF, 0x00,
++ 0xEA, 0x0C, 0x2E, 0x00, 0x4F, 0xDF,
++ },
++ { /* Init_CR90_CRA7 */
++ 0x56, 0xDD, 0x5E, 0xEA, 0x87, 0x44, 0x8F, 0x55,
++ 0x0A, 0x8F, 0x55, 0x0A, 0x00, 0x00, 0x18, 0x00,
++ 0x11, 0x10, 0x0B, 0x0A, 0x0A, 0x0A, 0x0A, 0x00,
++ },
++ },
++
++ { /* mode#2: 800 x 600 16Bpp 60Hz */
++ 800, 600, 16, 60,
++ /* Init_MISC */
++ 0x2B,
++ { /* Init_SR0_SR4 */
++ 0x03, 0x01, 0x0F, 0x03, 0x0E,
++ },
++ { /* Init_SR10_SR24 */
++ 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
++ 0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xC4, 0x30, 0x02, 0x01, 0x01,
++ },
++ { /* Init_SR30_SR75 */
++ 0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,
++ 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,
++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,
++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,
++ 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
++ 0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,
++ 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
++ 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
++ 0x02, 0x45, 0x30, 0x35, 0x40, 0x20,
++ },
++ { /* Init_SR80_SR93 */
++ 0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,
++ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,
++ 0x00, 0x00, 0x00, 0x00,
++ },
++ { /* Init_SRA0_SRAF */
++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
++ },
++ { /* Init_GR00_GR08 */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
++ 0xFF,
++ },
++ { /* Init_AR00_AR14 */
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x41, 0x00, 0x0F, 0x00, 0x00,
++ },
++ { /* Init_CR00_CR18 */
++ 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
++ 0xFF,
++ },
++ { /* Init_CR30_CR4D */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
++ 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
++ 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
++ },
++ { /* Init_CR90_CRA7 */
++ 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
++ 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
++ 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
++ },
++ },
++ { /* mode#3: 800 x 600 24Bpp 60Hz */
++ 800, 600, 24, 60,
++ 0x2B,
++ { /* Init_SR0_SR4 */
++ 0x03, 0x01, 0x0F, 0x03, 0x0E,
++ },
++ { /* Init_SR10_SR24 */
++ 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
++ 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xC4, 0x30, 0x02, 0x01, 0x01,
++ },
++ { /* Init_SR30_SR75 */
++ 0x36, 0x03, 0x20, 0x09, 0xC0, 0x36, 0x36, 0x36,
++ 0x36, 0x36, 0x36, 0x36, 0x00, 0x00, 0x03, 0xFF,
++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x36, 0x36, 0x36,
++ 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
++ 0x04, 0x55, 0x59, 0x36, 0x36, 0x00, 0x00, 0x36,
++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
++ 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
++ 0x02, 0x45, 0x30, 0x30, 0x40, 0x20,
++ },
++ { /* Init_SR80_SR93 */
++ 0xFF, 0x07, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x36,
++ 0xF7, 0x00, 0x00, 0x00, 0xEF, 0xFF, 0x36, 0x36,
++ 0x00, 0x00, 0x00, 0x00,
++ },
++ { /* Init_SRA0_SRAF */
++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
++ },
++ { /* Init_GR00_GR08 */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
++ 0xFF,
++ },
++ { /* Init_AR00_AR14 */
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x41, 0x00, 0x0F, 0x00, 0x00,
++ },
++ { /* Init_CR00_CR18 */
++ 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
++ 0xFF,
++ },
++ { /* Init_CR30_CR4D */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
++ 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
++ 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
++ },
++ { /* Init_CR90_CRA7 */
++ 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
++ 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
++ 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
++ },
++ },
++ { /* mode#7: 800 x 600 32Bpp 60Hz */
++ 800, 600, 32, 60,
++ /* Init_MISC */
++ 0x2B,
++ { /* Init_SR0_SR4 */
++ 0x03, 0x01, 0x0F, 0x03, 0x0E,
++ },
++ { /* Init_SR10_SR24 */
++ 0xFF, 0xBE, 0xEE, 0xFF, 0x00, 0x0E, 0x17, 0x2C,
++ 0x99, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xC4, 0x30, 0x02, 0x01, 0x01,
++ },
++ { /* Init_SR30_SR75 */
++ 0x34, 0x03, 0x20, 0x09, 0xC0, 0x24, 0x24, 0x24,
++ 0x24, 0x24, 0x24, 0x24, 0x00, 0x00, 0x03, 0xFF,
++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x38, 0x00, 0xFC,
++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x24, 0x24, 0x24,
++ 0x04, 0x48, 0x83, 0x63, 0x68, 0x72, 0x57, 0x58,
++ 0x04, 0x55, 0x59, 0x24, 0x24, 0x00, 0x00, 0x24,
++ 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
++ 0x50, 0x03, 0x74, 0x14, 0x1C, 0x85, 0x35, 0x13,
++ 0x02, 0x45, 0x30, 0x35, 0x40, 0x20,
++ },
++ { /* Init_SR80_SR93 */
++ 0x00, 0x00, 0x00, 0x6F, 0x7F, 0x7F, 0xFF, 0x24,
++ 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x24, 0x24,
++ 0x00, 0x00, 0x00, 0x00,
++ },
++ { /* Init_SRA0_SRAF */
++ 0x00, 0xFF, 0xBF, 0xFF, 0xFF, 0xED, 0xED, 0xED,
++ 0x7B, 0xFF, 0xFF, 0xFF, 0xBF, 0xEF, 0xBF, 0xDF,
++ },
++ { /* Init_GR00_GR08 */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
++ 0xFF,
++ },
++ { /* Init_AR00_AR14 */
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x41, 0x00, 0x0F, 0x00, 0x00,
++ },
++ { /* Init_CR00_CR18 */
++ 0x7F, 0x63, 0x63, 0x00, 0x68, 0x18, 0x72, 0xF0,
++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x58, 0x0C, 0x57, 0x64, 0x40, 0x57, 0x00, 0xE3,
++ 0xFF,
++ },
++ { /* Init_CR30_CR4D */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x03, 0x20,
++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xE7, 0xBF, 0xFD,
++ 0x7F, 0x63, 0x00, 0x69, 0x18, 0x72, 0x57, 0x00,
++ 0x58, 0x0C, 0xE0, 0x20, 0x63, 0x57,
++ },
++ { /* Init_CR90_CRA7 */
++ 0x56, 0x4B, 0x5E, 0x55, 0x86, 0x9D, 0x8E, 0xAA,
++ 0xDB, 0x2A, 0xDF, 0x33, 0x00, 0x00, 0x18, 0x00,
++ 0x20, 0x1F, 0x1A, 0x19, 0x0F, 0x0F, 0x0F, 0x00,
++ },
++ },
++ /* We use 1024x768 table to light 1024x600 panel for lemote */
++ { /* mode#4: 1024 x 600 16Bpp 60Hz */
++ 1024, 600, 16, 60,
++ /* Init_MISC */
++ 0xEB,
++ { /* Init_SR0_SR4 */
++ 0x03, 0x01, 0x0F, 0x00, 0x0E,
++ },
++ { /* Init_SR10_SR24 */
++ 0xC8, 0x40, 0x14, 0x60, 0x00, 0x0A, 0x17, 0x20,
++ 0x51, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xC4, 0x30, 0x02, 0x00, 0x01,
++ },
++ { /* Init_SR30_SR75 */
++ 0x22, 0x03, 0x24, 0x09, 0xC0, 0x22, 0x22, 0x22,
++ 0x22, 0x22, 0x22, 0x22, 0x00, 0x00, 0x03, 0xFF,
++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x22, 0x22, 0x22,
++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
++ 0x00, 0x60, 0x59, 0x22, 0x22, 0x00, 0x00, 0x22,
++ 0x01, 0x80, 0x7A, 0x1A, 0x1A, 0x00, 0x00, 0x00,
++ 0x50, 0x03, 0x16, 0x02, 0x0D, 0x82, 0x09, 0x02,
++ 0x04, 0x45, 0x3F, 0x30, 0x40, 0x20,
++ },
++ { /* Init_SR80_SR93 */
++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
++ 0x00, 0x00, 0x00, 0x00,
++ },
++ { /* Init_SRA0_SRAF */
++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
++ },
++ { /* Init_GR00_GR08 */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
++ 0xFF,
++ },
++ { /* Init_AR00_AR14 */
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x41, 0x00, 0x0F, 0x00, 0x00,
++ },
++ { /* Init_CR00_CR18 */
++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
++ 0xFF,
++ },
++ { /* Init_CR30_CR4D */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
++ 0xA3, 0x7F, 0x00, 0x82, 0x0b, 0x6f, 0x57, 0x00,
++ 0x5c, 0x0f, 0xE0, 0xe0, 0x7F, 0x57,
++ },
++ { /* Init_CR90_CRA7 */
++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
++ },
++ },
++ { /* mode#5: 1024 x 768 24Bpp 60Hz */
++ 1024, 768, 24, 60,
++ /* Init_MISC */
++ 0xEB,
++ { /* Init_SR0_SR4 */
++ 0x03, 0x01, 0x0F, 0x03, 0x0E,
++ },
++ { /* Init_SR10_SR24 */
++ 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
++ 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xC4, 0x30, 0x02, 0x01, 0x01,
++ },
++ { /* Init_SR30_SR75 */
++ 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
++ 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
++ 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
++ 0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02,
++ 0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
++ },
++ { /* Init_SR80_SR93 */
++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
++ 0x00, 0x00, 0x00, 0x00,
++ },
++ { /* Init_SRA0_SRAF */
++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
++ },
++ { /* Init_GR00_GR08 */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
++ 0xFF,
++ },
++ { /* Init_AR00_AR14 */
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x41, 0x00, 0x0F, 0x00, 0x00,
++ },
++ { /* Init_CR00_CR18 */
++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
++ 0xFF,
++ },
++ { /* Init_CR30_CR4D */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
++ 0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00,
++ 0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF,
++ },
++ { /* Init_CR90_CRA7 */
++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
++ },
++ },
++ { /* mode#4: 1024 x 768 32Bpp 60Hz */
++ 1024, 768, 32, 60,
++ /* Init_MISC */
++ 0xEB,
++ { /* Init_SR0_SR4 */
++ 0x03, 0x01, 0x0F, 0x03, 0x0E,
++ },
++ { /* Init_SR10_SR24 */
++ 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
++ 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xC4, 0x32, 0x02, 0x01, 0x01,
++ },
++ { /* Init_SR30_SR75 */
++ 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
++ 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
++ 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
++ 0x50, 0x03, 0x74, 0x14, 0x3B, 0x0D, 0x09, 0x02,
++ 0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
++ },
++ { /* Init_SR80_SR93 */
++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
++ 0x00, 0x00, 0x00, 0x00,
++ },
++ { /* Init_SRA0_SRAF */
++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
++ },
++ { /* Init_GR00_GR08 */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
++ 0xFF,
++ },
++ { /* Init_AR00_AR14 */
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x41, 0x00, 0x0F, 0x00, 0x00,
++ },
++ { /* Init_CR00_CR18 */
++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
++ 0xFF,
++ },
++ { /* Init_CR30_CR4D */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
++ 0x00, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
++ 0xA3, 0x7F, 0x00, 0x86, 0x15, 0x24, 0xFF, 0x00,
++ 0x01, 0x07, 0xE5, 0x20, 0x7F, 0xFF,
++ },
++ { /* Init_CR90_CRA7 */
++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
++ },
++ },
++ { /* mode#6: 320 x 240 16Bpp 60Hz */
++ 320, 240, 16, 60,
++ /* Init_MISC */
++ 0xEB,
++ { /* Init_SR0_SR4 */
++ 0x03, 0x01, 0x0F, 0x03, 0x0E,
++ },
++ { /* Init_SR10_SR24 */
++ 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
++ 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xC4, 0x32, 0x02, 0x01, 0x01,
++ },
++ { /* Init_SR30_SR75 */
++ 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
++ 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
++ 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
++ 0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43,
++ 0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
++ },
++ { /* Init_SR80_SR93 */
++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
++ 0x00, 0x00, 0x00, 0x00,
++ },
++ { /* Init_SRA0_SRAF */
++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
++ },
++ { /* Init_GR00_GR08 */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
++ 0xFF,
++ },
++ { /* Init_AR00_AR14 */
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x41, 0x00, 0x0F, 0x00, 0x00,
++ },
++ { /* Init_CR00_CR18 */
++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
++ 0xFF,
++ },
++ { /* Init_CR30_CR4D */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
++ 0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
++ 0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00,
++ 0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF,
++ },
++ { /* Init_CR90_CRA7 */
++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
++ },
++ },
++
++ { /* mode#8: 320 x 240 32Bpp 60Hz */
++ 320, 240, 32, 60,
++ /* Init_MISC */
++ 0xEB,
++ { /* Init_SR0_SR4 */
++ 0x03, 0x01, 0x0F, 0x03, 0x0E,
++ },
++ { /* Init_SR10_SR24 */
++ 0xF3, 0xB6, 0xC0, 0xDD, 0x00, 0x0E, 0x17, 0x2C,
++ 0x99, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0xC4, 0x32, 0x02, 0x01, 0x01,
++ },
++ { /* Init_SR30_SR75 */
++ 0x38, 0x03, 0x20, 0x09, 0xC0, 0x3A, 0x3A, 0x3A,
++ 0x3A, 0x3A, 0x3A, 0x3A, 0x00, 0x00, 0x03, 0xFF,
++ 0x00, 0xFC, 0x00, 0x00, 0x20, 0x18, 0x00, 0xFC,
++ 0x20, 0x0C, 0x44, 0x20, 0x00, 0x00, 0x00, 0x3A,
++ 0x06, 0x68, 0xA7, 0x7F, 0x83, 0x24, 0xFF, 0x03,
++ 0x00, 0x60, 0x59, 0x3A, 0x3A, 0x00, 0x00, 0x3A,
++ 0x01, 0x80, 0x7E, 0x1A, 0x1A, 0x00, 0x00, 0x00,
++ 0x50, 0x03, 0x74, 0x14, 0x08, 0x43, 0x08, 0x43,
++ 0x04, 0x45, 0x30, 0x30, 0x40, 0x20,
++ },
++ { /* Init_SR80_SR93 */
++ 0xFF, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0x3A,
++ 0xF7, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x3A, 0x3A,
++ 0x00, 0x00, 0x00, 0x00,
++ },
++ { /* Init_SRA0_SRAF */
++ 0x00, 0xFB, 0x9F, 0x01, 0x00, 0xED, 0xED, 0xED,
++ 0x7B, 0xFB, 0xFF, 0xFF, 0x97, 0xEF, 0xBF, 0xDF,
++ },
++ { /* Init_GR00_GR08 */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x05, 0x0F,
++ 0xFF,
++ },
++ { /* Init_AR00_AR14 */
++ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
++ 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
++ 0x41, 0x00, 0x0F, 0x00, 0x00,
++ },
++ { /* Init_CR00_CR18 */
++ 0xA3, 0x7F, 0x7F, 0x00, 0x85, 0x16, 0x24, 0xF5,
++ 0x00, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
++ 0x03, 0x09, 0xFF, 0x80, 0x40, 0xFF, 0x00, 0xE3,
++ 0xFF,
++ },
++ { /* Init_CR30_CR4D */
++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20,
++ 0x00, 0x00, 0x30, 0x40, 0x00, 0xFF, 0xBF, 0xFF,
++ 0x2E, 0x27, 0x00, 0x2b, 0x0c, 0x0F, 0xEF, 0x00,
++ 0xFe, 0x0f, 0x01, 0xC0, 0x27, 0xEF,
++ },
++ { /* Init_CR90_CRA7 */
++ 0x55, 0xD9, 0x5D, 0xE1, 0x86, 0x1B, 0x8E, 0x26,
++ 0xDA, 0x8D, 0xDE, 0x94, 0x00, 0x00, 0x18, 0x00,
++ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x15, 0x03,
++ },
++ },
++};
++
++#define numVGAModes (sizeof(VGAMode) / sizeof(struct ModeInit))
+diff -Nur linux-2.6.30/fs/autofs4/waitq.c rt4ls/fs/autofs4/waitq.c
+--- linux-2.6.30/fs/autofs4/waitq.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/fs/autofs4/waitq.c 2009-06-12 16:28:48.180649291 +0200
+@@ -297,14 +297,20 @@
+ */
+ if (notify == NFY_MOUNT) {
+ /*
+- * If the dentry was successfully mounted while we slept
+- * on the wait queue mutex we can return success. If it
+- * isn't mounted (doesn't have submounts for the case of
+- * a multi-mount with no mount at it's base) we can
+- * continue on and create a new request.
+- */
+- if (have_submounts(dentry))
+- return 0;
++ * If the dentry isn't hashed just go ahead and try the
++ * mount again with a new wait (not much else we can do).
++ */
++ if (!d_unhashed(dentry)) {
++ /*
++ * But if the dentry is hashed, that means that we
++ * got here through the revalidate path. Thus, we
++ * need to check if the dentry has been mounted
++ * while we waited on the wq_mutex. If it has,
++ * simply return success.
++ */
++ if (d_mountpoint(dentry))
++ return 0;
++ }
+ }
+
+ return 1;
+diff -Nur linux-2.6.30/fs/jbd/commit.c rt4ls/fs/jbd/commit.c
+--- linux-2.6.30/fs/jbd/commit.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/fs/jbd/commit.c 2009-06-12 16:28:48.464665929 +0200
+@@ -241,7 +241,7 @@
+ spin_lock(&journal->j_list_lock);
+ }
+ /* Someone already cleaned up the buffer? */
+- if (!buffer_jbd(bh) || bh2jh(bh) != jh
++ if (!buffer_jbd(bh)
+ || jh->b_transaction != commit_transaction
+ || jh->b_jlist != BJ_SyncData) {
+ jbd_unlock_bh_state(bh);
+@@ -478,9 +478,7 @@
+ spin_lock(&journal->j_list_lock);
+ continue;
+ }
+- if (buffer_jbd(bh) && bh2jh(bh) == jh &&
+- jh->b_transaction == commit_transaction &&
+- jh->b_jlist == BJ_Locked) {
++ if (buffer_jbd(bh) && jh->b_jlist == BJ_Locked) {
+ __journal_unfile_buffer(jh);
+ jbd_unlock_bh_state(bh);
+ journal_remove_journal_head(bh);
+diff -Nur linux-2.6.30/include/linux/cpumask.h rt4ls/include/linux/cpumask.h
+--- linux-2.6.30/include/linux/cpumask.h 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/include/linux/cpumask.h 2009-06-12 16:29:16.018395927 +0200
+@@ -1022,8 +1022,6 @@
+
+ bool alloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags, int node);
+ bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags);
+-bool zalloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags, int node);
+-bool zalloc_cpumask_var(cpumask_var_t *mask, gfp_t flags);
+ void alloc_bootmem_cpumask_var(cpumask_var_t *mask);
+ void free_cpumask_var(cpumask_var_t mask);
+ void free_bootmem_cpumask_var(cpumask_var_t mask);
+@@ -1042,19 +1040,6 @@
+ return true;
+ }
+
+-static inline bool zalloc_cpumask_var(cpumask_var_t *mask, gfp_t flags)
+-{
+- cpumask_clear(*mask);
+- return true;
+-}
+-
+-static inline bool zalloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags,
+- int node)
+-{
+- cpumask_clear(*mask);
+- return true;
+-}
+-
+ static inline void alloc_bootmem_cpumask_var(cpumask_var_t *mask)
+ {
+ }
+diff -Nur linux-2.6.30/ipc/shm.c rt4ls/ipc/shm.c
+--- linux-2.6.30/ipc/shm.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/ipc/shm.c 2009-06-12 16:29:47.289072291 +0200
+@@ -969,13 +969,10 @@
+ SYSCALL_DEFINE1(shmdt, char __user *, shmaddr)
+ {
+ struct mm_struct *mm = current->mm;
+- struct vm_area_struct *vma;
++ struct vm_area_struct *vma, *next;
+ unsigned long addr = (unsigned long)shmaddr;
+- int retval = -EINVAL;
+-#ifdef CONFIG_MMU
+ loff_t size = 0;
+- struct vm_area_struct *next;
+-#endif
++ int retval = -EINVAL;
+
+ if (addr & ~PAGE_MASK)
+ return retval;
+diff -Nur linux-2.6.30/kernel/sched_cpupri.c rt4ls/kernel/sched_cpupri.c
+--- linux-2.6.30/kernel/sched_cpupri.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/kernel/sched_cpupri.c 2009-06-12 16:29:48.957102637 +0200
+@@ -165,7 +165,7 @@
+ vec->count = 0;
+ if (bootmem)
+ alloc_bootmem_cpumask_var(&vec->mask);
+- else if (!zalloc_cpumask_var(&vec->mask, GFP_KERNEL))
++ else if (!alloc_cpumask_var(&vec->mask, GFP_KERNEL))
+ goto cleanup;
+ }
+
+diff -Nur linux-2.6.30/kernel/sched_rt.c rt4ls/kernel/sched_rt.c
+--- linux-2.6.30/kernel/sched_rt.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/kernel/sched_rt.c 2009-06-12 16:29:48.969124560 +0200
+@@ -1591,7 +1591,7 @@
+ unsigned int i;
+
+ for_each_possible_cpu(i)
+- zalloc_cpumask_var_node(&per_cpu(local_cpu_mask, i),
++ alloc_cpumask_var_node(&per_cpu(local_cpu_mask, i),
+ GFP_KERNEL, cpu_to_node(i));
+ }
+ #endif /* CONFIG_SMP */
+diff -Nur linux-2.6.30/kernel/smp.c rt4ls/kernel/smp.c
+--- linux-2.6.30/kernel/smp.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/kernel/smp.c 2009-06-12 16:29:48.969124560 +0200
+@@ -52,7 +52,7 @@
+ switch (action) {
+ case CPU_UP_PREPARE:
+ case CPU_UP_PREPARE_FROZEN:
+- if (!zalloc_cpumask_var_node(&cfd->cpumask, GFP_KERNEL,
++ if (!alloc_cpumask_var_node(&cfd->cpumask, GFP_KERNEL,
+ cpu_to_node(cpu)))
+ return NOTIFY_BAD;
+ break;
+diff -Nur linux-2.6.30/lib/cpumask.c rt4ls/lib/cpumask.c
+--- linux-2.6.30/lib/cpumask.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/lib/cpumask.c 2009-06-12 16:29:49.032452180 +0200
+@@ -119,12 +119,6 @@
+ }
+ EXPORT_SYMBOL(alloc_cpumask_var_node);
+
+-bool zalloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags, int node)
+-{
+- return alloc_cpumask_var_node(mask, flags | __GFP_ZERO, node);
+-}
+-EXPORT_SYMBOL(zalloc_cpumask_var_node);
+-
+ /**
+ * alloc_cpumask_var - allocate a struct cpumask
+ * @mask: pointer to cpumask_var_t where the cpumask is returned
+@@ -141,12 +135,6 @@
+ }
+ EXPORT_SYMBOL(alloc_cpumask_var);
+
+-bool zalloc_cpumask_var(cpumask_var_t *mask, gfp_t flags)
+-{
+- return alloc_cpumask_var(mask, flags | __GFP_ZERO);
+-}
+-EXPORT_SYMBOL(zalloc_cpumask_var);
+-
+ /**
+ * alloc_bootmem_cpumask_var - allocate a struct cpumask from the bootmem arena.
+ * @mask: pointer to cpumask_var_t where the cpumask is returned
+diff -Nur linux-2.6.30/net/sched/cls_cgroup.c rt4ls/net/sched/cls_cgroup.c
+--- linux-2.6.30/net/sched/cls_cgroup.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/net/sched/cls_cgroup.c 2009-06-12 16:29:50.516543166 +0200
+@@ -167,9 +167,6 @@
+ struct tcf_exts e;
+ int err;
+
+- if (!tca[TCA_OPTIONS])
+- return -EINVAL;
+-
+ if (head == NULL) {
+ if (!handle)
+ return -EINVAL;
+diff -Nur linux-2.6.30/sound/core/pcm_native.c rt4ls/sound/core/pcm_native.c
+--- linux-2.6.30/sound/core/pcm_native.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/sound/core/pcm_native.c 2009-06-12 16:29:54.880818910 +0200
+@@ -3091,7 +3091,11 @@
+ return VM_FAULT_SIGBUS;
+ } else {
+ vaddr = runtime->dma_area + offset;
++#if defined(__mips__) && defined(CONFIG_DMA_NONCOHERENT)
++ page = virt_to_page(CAC_ADDR(vaddr));
++#else
+ page = virt_to_page(vaddr);
++#endif
+ }
+ get_page(page);
+ vmf->page = page;
+@@ -3206,6 +3210,11 @@
+ if (PCM_RUNTIME_CHECK(substream))
+ return -ENXIO;
+
++#if defined(__mips__) && defined(CONFIG_DMA_NONCOHERENT)
++ /* all mmap using uncached mode */
++ area->vm_page_prot = pgprot_noncached(area->vm_page_prot);
++ area->vm_flags |= (VM_RESERVED | VM_IO);
++#endif
+ offset = area->vm_pgoff << PAGE_SHIFT;
+ switch (offset) {
+ case SNDRV_PCM_MMAP_OFFSET_STATUS:
+diff -Nur linux-2.6.30/sound/core/sgbuf.c rt4ls/sound/core/sgbuf.c
+--- linux-2.6.30/sound/core/sgbuf.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/sound/core/sgbuf.c 2009-06-12 16:29:54.904819175 +0200
+@@ -114,7 +114,11 @@
+ if (!i)
+ table->addr |= chunk; /* mark head */
+ table++;
++#if defined(__mips__) && defined(CONFIG_DMA_NONCOHERENT)
++ *pgtable++ = virt_to_page(CAC_ADDR(tmpb.area));
++#else
+ *pgtable++ = virt_to_page(tmpb.area);
++#endif
+ tmpb.area += PAGE_SIZE;
+ tmpb.addr += PAGE_SIZE;
+ }
+@@ -125,7 +129,12 @@
+ }
+
+ sgbuf->size = size;
++#if defined(__mips__) && defined(CONFIG_DMA_NONCOHERENT)
++ dmab->area = vmap(sgbuf->page_table, sgbuf->pages, \
++ VM_MAP | VM_IO, pgprot_noncached(PAGE_KERNEL));
++#else
+ dmab->area = vmap(sgbuf->page_table, sgbuf->pages, VM_MAP, PAGE_KERNEL);
++#endif
+ if (! dmab->area)
+ goto _failed;
+ if (res_size)
+diff -Nur linux-2.6.30/sound/pci/Kconfig rt4ls/sound/pci/Kconfig
+--- linux-2.6.30/sound/pci/Kconfig 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/sound/pci/Kconfig 2009-06-12 16:29:55.036828170 +0200
+@@ -259,7 +259,6 @@
+
+ config SND_CS5535AUDIO
+ tristate "CS5535/CS5536 Audio"
+- depends on X86 && !X86_64
+ select SND_PCM
+ select SND_AC97_CODEC
+ help
+diff -Nur linux-2.6.30/virt/kvm/kvm_main.c rt4ls/virt/kvm/kvm_main.c
+--- linux-2.6.30/virt/kvm/kvm_main.c 2009-06-10 05:05:27.000000000 +0200
++++ rt4ls/virt/kvm/kvm_main.c 2009-06-12 16:29:55.860876705 +0200
+@@ -2301,7 +2301,7 @@
+
+ bad_pfn = page_to_pfn(bad_page);
+
+- if (!zalloc_cpumask_var(&cpus_hardware_enabled, GFP_KERNEL)) {
++ if (!alloc_cpumask_var(&cpus_hardware_enabled, GFP_KERNEL)) {
+ r = -ENOMEM;
+ goto out_free_0;
+ }