From 92dd4fee15cb7c33868c7d7213f82136955397b1 Mon Sep 17 00:00:00 2001 From: Waldemar Brodkorb Date: Sat, 29 May 2010 14:29:22 +0200 Subject: upgrade all targets to Linux 2.6.34 --- mk/image.mk | 10 + .../MesaLib/patches/patch-src_glsl_apps_Makefile | 15 + package/libXxf86vm/Makefile | 2 +- target/Config.in | 6 +- target/ag241/patches/ar7.patch | 103 +- target/ag241/target.mk | 4 +- target/alix1c/Makefile | 8 +- target/alix1c/target.mk | 4 +- target/alix2d/Makefile | 7 +- target/alix2d/target.mk | 4 +- target/alix2d13/Makefile | 8 +- target/alix2d13/target.mk | 4 +- target/bulkdef.lst | 23 + target/foxboard/patches/cris.patch | 6625 +---------- target/foxboard/target.mk | 4 +- target/foxg20/patches/foxg20.patch | 75 +- target/foxg20/target.mk | 4 +- target/ibmx40/Makefile | 20 +- target/lemote/Makefile | 14 +- target/lemote/kernel.config | 70 +- target/lemote/patches/lemote.patch | 11715 +++++++++++-------- target/lemote/target.mk | 4 +- target/linux/patches/2.6.34/aufs2.patch | 531 +- target/native/Makefile | 9 +- target/native/target.mk | 4 +- target/qemu-arm/Makefile | 14 +- target/qemu-arm/target.mk | 4 +- target/qemu-cris/Makefile | 12 +- target/qemu-cris/target.mk | 4 +- target/qemu-mips/Makefile | 14 +- target/qemu-mips/target.mk | 4 +- target/qemu-mips64/target.mk | 4 +- target/qemu-mips64el/target.mk | 4 +- target/qemu-mipsel/Makefile | 14 +- target/qemu-mipsel/target.mk | 4 +- target/qemu-x86/Makefile | 20 +- target/qemu-x86/target.mk | 4 +- target/qemu-x86_64/Makefile | 20 +- target/qemu-x86_64/kernel.config | 47 +- target/qemu-x86_64/target.mk | 4 +- target/rb4xx/patches/ar71xx.patch | 987 +- target/rb4xx/target.mk | 4 +- target/rb532/target.mk | 4 +- target/rescue-x86/Makefile | 14 +- target/rescue-x86/target.mk | 4 +- target/rescue-x86_64/Makefile | 15 +- target/rescue-x86_64/target.mk | 4 +- target/shuttle/Makefile | 20 +- target/shuttle/target.mk | 4 +- target/toolchain-arm/target.mk | 4 +- target/toolchain-armel/target.mk | 4 +- target/toolchain-mips/target.mk | 4 +- target/toolchain-mipsel/target.mk | 4 +- target/toolchain-ppc/target.mk | 4 +- target/toolchain-sparc/target.mk | 4 +- target/toolchain-x86/target.mk | 4 +- target/toolchain-x86_64/target.mk | 4 +- target/wag54g/target.mk | 4 +- target/wrap/target.mk | 4 +- target/zaurus/target.mk | 4 +- toolchain/gcc/Makefile | 2 +- 61 files changed, 8118 insertions(+), 12430 deletions(-) create mode 100644 package/MesaLib/patches/patch-src_glsl_apps_Makefile diff --git a/mk/image.mk b/mk/image.mk index 04fae43bf..53b01d0c2 100644 --- a/mk/image.mk +++ b/mk/image.mk @@ -70,6 +70,8 @@ ${BIN_DIR}/${INITRAMFS}: ${TARGET_DIR} cpio -R 0:0 -oC512 -Mdist -Hnewc | ${ADK_COMPRESSION_TOOL} >$@ ${BUILD_DIR}/${INITRAMFS_PIGGYBACK}: ${TARGET_DIR} + $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="${BUILD_DIR}/${INITRAMFS_PIGGYBACK}"#' \ + $(LINUX_DIR)/.config cd ${TARGET_DIR}; find . | sed -n '/^\.\//s///p' | sort | \ cpio -R 0:0 -oC512 -Mdist -Hnewc >$@ @@ -81,5 +83,13 @@ ${BIN_DIR}/${ROOTFSSQUASHFS}: ${TARGET_DIR} ${BUILD_DIR}/root.squashfs > \ ${BUILD_DIR}/${ROOTFSSQUASHFS} +createinitramfs: + @-rm $(LINUX_DIR)/usr/initramfs_data.cpio* $(MAKE_TRACE) + echo N | \ + $(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" \ + ARCH=$(ARCH) CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) + $(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" \ + ARCH=$(ARCH) CC="$(TARGET_CC)" $(MAKE_TRACE) + imageclean: rm -f $(BIN_DIR)/$(ADK_TARGET)-* ${BUILD_DIR}/$(ADK_TARGET)-* diff --git a/package/MesaLib/patches/patch-src_glsl_apps_Makefile b/package/MesaLib/patches/patch-src_glsl_apps_Makefile new file mode 100644 index 000000000..76d23d7bf --- /dev/null +++ b/package/MesaLib/patches/patch-src_glsl_apps_Makefile @@ -0,0 +1,15 @@ +--- Mesa-7.8.1.orig/src/glsl/apps/Makefile 2010-04-05 01:46:26.000000000 +0200 ++++ Mesa-7.8.1/src/glsl/apps/Makefile 2010-05-25 17:38:03.594714854 +0200 +@@ -26,10 +26,10 @@ INCLUDES = -I. + .SUFFIXES: .c + + .c: +- $(APP_CC) $(INCLUDES) $(CFLAGS) $(LDFLAGS) $< $(LIBS) -o $@ ++ $(APP_CC) $(HOSTCFLAGS) $< $(LIBS) -o $@ + + .c.o: +- $(APP_CC) -c $(INCLUDES) $(CFLAGS) $(DEFINES) $< -o $@ ++ $(APP_CC) -c $(HOSTCFLAGS) $(DEFINES) $< -o $@ + + + ##### TARGETS ##### diff --git a/package/libXxf86vm/Makefile b/package/libXxf86vm/Makefile index 778b74f0b..4d8d57f12 100644 --- a/package/libXxf86vm/Makefile +++ b/package/libXxf86vm/Makefile @@ -9,7 +9,7 @@ PKG_RELEASE:= 1 PKG_MD5SUM:= 52b49483eccbdd1566b8c560fe7f76e8 PKG_DESCR:= add short description PKG_SECTION:= libs -PKG_BUILDDEP+= xf86vidmodeproto +PKG_BUILDDEP+= xf86vidmodeproto libXext PKG_SITES:= http://xorg.freedesktop.org/archive/individual/lib/ include $(TOPDIR)/mk/package.mk diff --git a/target/Config.in b/target/Config.in index c5927e1a7..e8d0d0cf4 100644 --- a/target/Config.in +++ b/target/Config.in @@ -172,6 +172,7 @@ config ADK_TARGET default "qemu-arm" if ADK_arm_qemu default "qemu-cris" if ADK_cris_qemu default "qemu-mips" if ADK_mips_qemu + default "qemu-mips64" if ADK_mips64_qemu default "qemu-mipsel" if ADK_mipsel_qemu default "qemu-x86" if ADK_x86_qemu default "qemu-x86_64" if ADK_x86_64_qemu @@ -253,6 +254,7 @@ config ADK_LINUX_CRIS_FOXBOARD select ADK_PACKAGE_KMOD_USB_CONTROLLER select ADK_KERNEL_USB select ADK_KERNEL_NLS + select ADK_KERNEL_NETDEVICES select ADK_TARGET_WITH_USB help Support for Foxboard targets. @@ -263,6 +265,7 @@ config ADK_LINUX_MIPS64_LEMOTE bool "Lemote Subnotebook Yeeloong" select ADK_lemote select ADK_LINUX_64 + select ADK_KERNEL_USB select ADK_KERNEL_EXT2_FS select ADK_KERNEL_SCSI select ADK_KERNEL_ATA @@ -610,6 +613,7 @@ depends on ADK_LINUX_ALIX config ADK_LINUX_X86_ALIX1C bool "PC Engines Alix1C" select ADK_alix1c + select ADK_KERNEL_USB select ADK_KERNEL_SCSI select ADK_KERNEL_ATA select ADK_KERNEL_BLK_DEV_SD @@ -1006,7 +1010,7 @@ endchoice choice prompt "Compression method for Kernel" - depends on !(ADK_TARGET_ROOTFS_INITRAMFS || ADK_TARGET_ROOTFS_INITRAMFS_PIGGYBACK || ADK_TOOLCHAIN_ONLY) + depends on !(ADK_TARGET_ROOTFS_INITRAMFS || ADK_TARGET_ROOTFS_INITRAMFS_PIGGYBACK || ADK_TOOLCHAIN_ONLY || ADK_LINUX_ARM_FOXG20 || ADK_LINUX_ARM_QEMU ) config ADK_TARGET_KERNEL_COMPRESSION_LZMA boolean diff --git a/target/ag241/patches/ar7.patch b/target/ag241/patches/ar7.patch index 7fe9f03c0..dcaaa2ec7 100644 --- a/target/ag241/patches/ar7.patch +++ b/target/ag241/patches/ar7.patch @@ -1,29 +1,8 @@ -diff -Nur linux-2.6.33.1.orig/arch/mips/ar7/platform.c linux-2.6.33.1/arch/mips/ar7/platform.c ---- linux-2.6.33.1.orig/arch/mips/ar7/platform.c 2010-03-15 17:09:39.000000000 +0100 -+++ linux-2.6.33.1/arch/mips/ar7/platform.c 2010-03-28 19:26:53.000000000 +0200 -@@ -509,7 +509,7 @@ - - memset(uart_port, 0, sizeof(struct uart_port) * 2); - -- uart_port[0].type = PORT_16550A; -+ uart_port[0].type = PORT_AR7; - uart_port[0].line = 0; - uart_port[0].irq = AR7_IRQ_UART0; - uart_port[0].uartclk = ar7_bus_freq() / 2; -@@ -524,7 +524,7 @@ - - /* Only TNETD73xx have a second serial port */ - if (ar7_has_second_uart()) { -- uart_port[1].type = PORT_16550A; -+ uart_port[1].type = PORT_AR7; - uart_port[1].line = 1; - uart_port[1].irq = AR7_IRQ_UART1; - uart_port[1].uartclk = ar7_bus_freq() / 2; -diff -Nur linux-2.6.33.1.orig/arch/mips/ar7/prom.c linux-2.6.33.1/arch/mips/ar7/prom.c ---- linux-2.6.33.1.orig/arch/mips/ar7/prom.c 2010-03-15 17:09:39.000000000 +0100 -+++ linux-2.6.33.1/arch/mips/ar7/prom.c 2010-03-28 19:26:53.000000000 +0200 -@@ -219,6 +219,14 @@ - if (strstr(prom_getcmdline(), "console=")) +diff -Nur linux-2.6.34.orig/arch/mips/ar7/prom.c linux-2.6.34/arch/mips/ar7/prom.c +--- linux-2.6.34.orig/arch/mips/ar7/prom.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/mips/ar7/prom.c 2010-05-28 15:52:26.960965976 +0200 +@@ -206,6 +206,14 @@ + if (strstr(arcs_cmdline, "console=")) return; +#ifdef CONFIG_KGDB @@ -37,26 +16,9 @@ diff -Nur linux-2.6.33.1.orig/arch/mips/ar7/prom.c linux-2.6.33.1/arch/mips/ar7/ s = prom_getenv("modetty0"); if (s) { baud = simple_strtoul(s, &p, 10); -diff -Nur linux-2.6.33.1.orig/arch/mips/include/asm/page.h linux-2.6.33.1/arch/mips/include/asm/page.h ---- linux-2.6.33.1.orig/arch/mips/include/asm/page.h 2010-03-15 17:09:39.000000000 +0100 -+++ linux-2.6.33.1/arch/mips/include/asm/page.h 2010-03-28 19:26:53.000000000 +0200 -@@ -200,8 +200,11 @@ - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) - --#define UNCAC_ADDR(addr) ((addr) - PAGE_OFFSET + UNCAC_BASE) --#define CAC_ADDR(addr) ((addr) - UNCAC_BASE + PAGE_OFFSET) -+#define UNCAC_ADDR(addr) ((addr) - PAGE_OFFSET + UNCAC_BASE + \ -+ PHYS_OFFSET) -+#define CAC_ADDR(addr) ((addr) - UNCAC_BASE + PAGE_OFFSET - \ -+ PHYS_OFFSET) -+ - - #include - #include -diff -Nur linux-2.6.33.1.orig/arch/mips/Kconfig linux-2.6.33.1/arch/mips/Kconfig ---- linux-2.6.33.1.orig/arch/mips/Kconfig 2010-03-15 17:09:39.000000000 +0100 -+++ linux-2.6.33.1/arch/mips/Kconfig 2010-03-28 19:26:53.000000000 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/Kconfig linux-2.6.34/arch/mips/Kconfig +--- linux-2.6.34.orig/arch/mips/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/mips/Kconfig 2010-05-28 15:52:27.142223192 +0200 @@ -34,7 +34,6 @@ select CEVT_R4K select CSRC_R4K @@ -65,38 +27,9 @@ diff -Nur linux-2.6.33.1.orig/arch/mips/Kconfig linux-2.6.33.1/arch/mips/Kconfig select SWAP_IO_SPACE select SYS_HAS_CPU_MIPS32_R1 select SYS_HAS_EARLY_PRINTK -diff -Nur linux-2.6.33.1.orig/arch/mips/kernel/traps.c linux-2.6.33.1/arch/mips/kernel/traps.c ---- linux-2.6.33.1.orig/arch/mips/kernel/traps.c 2010-03-15 17:09:39.000000000 +0100 -+++ linux-2.6.33.1/arch/mips/kernel/traps.c 2010-03-28 19:26:53.000000000 +0200 -@@ -1283,9 +1283,22 @@ - - exception_handlers[n] = handler; - if (n == 0 && cpu_has_divec) { -- *(u32 *)(ebase + 0x200) = 0x08000000 | -- (0x03ffffff & (handler >> 2)); -- local_flush_icache_range(ebase + 0x200, ebase + 0x204); -+ if ((handler ^ (ebase + 4)) & 0xfc000000) { -+ /* lui k0, 0x0000 */ -+ *(u32 *)(ebase + 0x200) = 0x3c1a0000 | (handler >> 16); -+ /* ori k0, 0x0000 */ -+ *(u32 *)(ebase + 0x204) = -+ 0x375a0000 | (handler & 0xffff); -+ /* jr k0 */ -+ *(u32 *)(ebase + 0x208) = 0x03400008; -+ /* nop */ -+ *(u32 *)(ebase + 0x20C) = 0x00000000; -+ flush_icache_range(ebase + 0x200, ebase + 0x210); -+ } else { -+ *(u32 *)(ebase + 0x200) = -+ 0x08000000 | (0x03ffffff & (handler >> 2)); -+ flush_icache_range(ebase + 0x200, ebase + 0x204); -+ } - } - return (void *)old_handler; - } -diff -Nur linux-2.6.33.1.orig/drivers/mtd/ar7part.c linux-2.6.33.1/drivers/mtd/ar7part.c ---- linux-2.6.33.1.orig/drivers/mtd/ar7part.c 2010-03-15 17:09:39.000000000 +0100 -+++ linux-2.6.33.1/drivers/mtd/ar7part.c 2010-03-28 19:26:53.000000000 +0200 +diff -Nur linux-2.6.34.orig/drivers/mtd/ar7part.c linux-2.6.34/drivers/mtd/ar7part.c +--- linux-2.6.34.orig/drivers/mtd/ar7part.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/mtd/ar7part.c 2010-05-28 15:52:27.232223555 +0200 @@ -28,7 +28,7 @@ #include #include @@ -128,9 +61,9 @@ diff -Nur linux-2.6.33.1.orig/drivers/mtd/ar7part.c linux-2.6.33.1/drivers/mtd/a *pparts = ar7_parts; return AR7_PARTS; } -diff -Nur linux-2.6.33.1.orig/drivers/mtd/maps/physmap.c linux-2.6.33.1/drivers/mtd/maps/physmap.c ---- linux-2.6.33.1.orig/drivers/mtd/maps/physmap.c 2010-03-15 17:09:39.000000000 +0100 -+++ linux-2.6.33.1/drivers/mtd/maps/physmap.c 2010-03-28 19:26:53.000000000 +0200 +diff -Nur linux-2.6.34.orig/drivers/mtd/maps/physmap.c linux-2.6.34/drivers/mtd/maps/physmap.c +--- linux-2.6.34.orig/drivers/mtd/maps/physmap.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/mtd/maps/physmap.c 2010-05-28 15:52:27.281073432 +0200 @@ -79,7 +79,7 @@ "map_rom", NULL }; @@ -140,10 +73,10 @@ diff -Nur linux-2.6.33.1.orig/drivers/mtd/maps/physmap.c linux-2.6.33.1/drivers/ #endif static int physmap_flash_probe(struct platform_device *dev) -diff -Nur linux-2.6.33.1.orig/drivers/serial/8250.c linux-2.6.33.1/drivers/serial/8250.c ---- linux-2.6.33.1.orig/drivers/serial/8250.c 2010-03-15 17:09:39.000000000 +0100 -+++ linux-2.6.33.1/drivers/serial/8250.c 2010-03-28 19:26:53.000000000 +0200 -@@ -2715,7 +2715,11 @@ +diff -Nur linux-2.6.34.orig/drivers/serial/8250.c linux-2.6.34/drivers/serial/8250.c +--- linux-2.6.34.orig/drivers/serial/8250.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/serial/8250.c 2010-05-28 15:52:27.330968429 +0200 +@@ -2746,7 +2746,11 @@ { struct uart_8250_port *up = (struct uart_8250_port *)port; diff --git a/target/ag241/target.mk b/target/ag241/target.mk index 3bb051ea2..90a85803e 100644 --- a/target/ag241/target.mk +++ b/target/ag241/target.mk @@ -1,7 +1,7 @@ ARCH:= mips CPU_ARCH:= mipsel -KERNEL_VERSION:= 2.6.33.1 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= 73b514ec918b88a45656be191b1ee226 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=mips32 diff --git a/target/alix1c/Makefile b/target/alix1c/Makefile index da95587ed..5a737fd8a 100644 --- a/target/alix1c/Makefile +++ b/target/alix1c/Makefile @@ -7,8 +7,10 @@ include $(TOPDIR)/mk/modules.mk include $(TOPDIR)/mk/kernel-build.mk include $(TOPDIR)/mk/image.mk +KERNEL:=$(LINUX_DIR)/arch/x86/boot/bzImage + kernel-install: - cp $(LINUX_DIR)/arch/x86/boot/bzImage $(TARGET_DIR)/boot/vmlinuz-adk + @cp $(KERNEL) $(TARGET_DIR)/boot/vmlinuz-adk ifeq ($(FS),ext2-block) imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) @@ -19,11 +21,9 @@ imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) endif ifeq ($(FS),nfsroot) imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) - @cp $(LINUX_DIR)/arch/x86/boot/bzImage \ - $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel $(MAKE_TRACE) + @cp $(KERNEL) $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel @echo @echo 'The linux kernel is here: $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel' @echo 'The nfs root tarball is here: ${BIN_DIR}/${ROOTFSTARBALL}' - @echo 'Do not forget to create device nodes for console,null and tty in your nfsroot' @echo 'Login as user root with password linux123 via ssh or console' endif diff --git a/target/alix1c/target.mk b/target/alix1c/target.mk index d5ee60a53..3c08f3902 100644 --- a/target/alix1c/target.mk +++ b/target/alix1c/target.mk @@ -1,7 +1,7 @@ ARCH:= x86 CPU_ARCH:= i586 -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=geode diff --git a/target/alix2d/Makefile b/target/alix2d/Makefile index 932c81109..cd4964c24 100644 --- a/target/alix2d/Makefile +++ b/target/alix2d/Makefile @@ -7,8 +7,10 @@ include $(TOPDIR)/mk/modules.mk include $(TOPDIR)/mk/kernel-build.mk include $(TOPDIR)/mk/image.mk +KERNEL:=$(LINUX_DIR)/arch/x86/boot/bzImage + kernel-install: - @cp $(LINUX_DIR)/arch/x86/boot/bzImage $(TARGET_DIR)/boot/vmlinuz-adk + @cp $(KERNEL) $(TARGET_DIR)/boot/vmlinuz-adk ifeq ($(FS),ext2-block) imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) @@ -19,8 +21,7 @@ imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) endif ifeq ($(FS),nfsroot) imageinstall: $(BIN_DIR)/$(ROOTFSUSERTARBALL) - @cp $(LINUX_DIR)/arch/x86/boot/bzImage \ - $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel $(MAKE_TRACE) + @cp $(KERNEL) $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel @echo @echo 'The linux kernel is here: $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel' @echo 'The nfs root tarball is here: ${BIN_DIR}/${ROOTFSUSERTARBALL}' diff --git a/target/alix2d/target.mk b/target/alix2d/target.mk index d5ee60a53..3c08f3902 100644 --- a/target/alix2d/target.mk +++ b/target/alix2d/target.mk @@ -1,7 +1,7 @@ ARCH:= x86 CPU_ARCH:= i586 -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=geode diff --git a/target/alix2d13/Makefile b/target/alix2d13/Makefile index da95587ed..5a737fd8a 100644 --- a/target/alix2d13/Makefile +++ b/target/alix2d13/Makefile @@ -7,8 +7,10 @@ include $(TOPDIR)/mk/modules.mk include $(TOPDIR)/mk/kernel-build.mk include $(TOPDIR)/mk/image.mk +KERNEL:=$(LINUX_DIR)/arch/x86/boot/bzImage + kernel-install: - cp $(LINUX_DIR)/arch/x86/boot/bzImage $(TARGET_DIR)/boot/vmlinuz-adk + @cp $(KERNEL) $(TARGET_DIR)/boot/vmlinuz-adk ifeq ($(FS),ext2-block) imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) @@ -19,11 +21,9 @@ imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) endif ifeq ($(FS),nfsroot) imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) - @cp $(LINUX_DIR)/arch/x86/boot/bzImage \ - $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel $(MAKE_TRACE) + @cp $(KERNEL) $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel @echo @echo 'The linux kernel is here: $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel' @echo 'The nfs root tarball is here: ${BIN_DIR}/${ROOTFSTARBALL}' - @echo 'Do not forget to create device nodes for console,null and tty in your nfsroot' @echo 'Login as user root with password linux123 via ssh or console' endif diff --git a/target/alix2d13/target.mk b/target/alix2d13/target.mk index d5ee60a53..3c08f3902 100644 --- a/target/alix2d13/target.mk +++ b/target/alix2d13/target.mk @@ -1,7 +1,7 @@ ARCH:= x86 CPU_ARCH:= i586 -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=geode diff --git a/target/bulkdef.lst b/target/bulkdef.lst index 134956742..222bd7606 100644 --- a/target/bulkdef.lst +++ b/target/bulkdef.lst @@ -22,9 +22,15 @@ rb532 glibc ext2-block alix1c uclibc nfsroot alix1c eglibc nfsroot alix1c glibc nfsroot +alix1c uclibc ext2-block +alix1c eglibc ext2-block +alix1c glibc ext2-block wrap uclibc nfsroot wrap eglibc nfsroot wrap glibc nfsroot +wrap uclibc ext2-block +wrap eglibc ext2-block +wrap glibc ext2-block arm_qemu uclibc archive arm_qemu eglibc archive arm_qemu glibc archive @@ -37,14 +43,31 @@ mipsel_qemu glibc archive x86_qemu uclibc archive x86_qemu eglibc archive x86_qemu glibc archive +x86_qemu uclibc initramfs +x86_qemu eglibc initramfs +x86_qemu glibc initramfs x86_64_qemu uclibc archive x86_64_qemu eglibc archive x86_64_qemu glibc archive +x86_64_qemu uclibc initramfs +x86_64_qemu eglibc initramfs +x86_64_qemu glibc initramfs lemote eglibc archive lemote glibc archive +lemote eglibc initramfs +lemote glibc initramfs +lemote eglibc initramfs-piggyback +lemote glibc initramfs-piggyback ibmx40 uclibc archive ibmx40 eglibc archive ibmx40 glibc archive +ibmx40 uclibc initramfs +ibmx40 eglibc initramfs +ibmx40 glibc initramfs +ibmx40 uclibc initramfs-piggyback +ibmx40 eglibc initramfs-piggyback +ibmx40 glibc initramfs-piggyback shuttle uclibc archive shuttle eglibc archive shuttle glibc archive + diff --git a/target/foxboard/patches/cris.patch b/target/foxboard/patches/cris.patch index 3c6bca534..1a4e109e5 100644 --- a/target/foxboard/patches/cris.patch +++ b/target/foxboard/patches/cris.patch @@ -1,6 +1,6 @@ -diff -Nur linux-2.6.32.orig/arch/cris/arch-v10/drivers/axisflashmap.c linux-2.6.32/arch/cris/arch-v10/drivers/axisflashmap.c ---- linux-2.6.32.orig/arch/cris/arch-v10/drivers/axisflashmap.c 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/arch/cris/arch-v10/drivers/axisflashmap.c 2010-01-10 14:34:37.376309632 +0100 +diff -Nur linux-2.6.34.orig/arch/cris/arch-v10/drivers/axisflashmap.c linux-2.6.34/arch/cris/arch-v10/drivers/axisflashmap.c +--- linux-2.6.34.orig/arch/cris/arch-v10/drivers/axisflashmap.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/cris/arch-v10/drivers/axisflashmap.c 2010-05-25 19:41:49.324723145 +0200 @@ -113,7 +113,7 @@ /* If no partition-table was found, we use this default-set. */ @@ -146,9 +146,9 @@ diff -Nur linux-2.6.32.orig/arch/cris/arch-v10/drivers/axisflashmap.c linux-2.6. return err; } -diff -Nur linux-2.6.32.orig/arch/cris/arch-v10/drivers/ds1302.c linux-2.6.32/arch/cris/arch-v10/drivers/ds1302.c ---- linux-2.6.32.orig/arch/cris/arch-v10/drivers/ds1302.c 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/arch/cris/arch-v10/drivers/ds1302.c 2010-01-10 13:41:59.256309588 +0100 +diff -Nur linux-2.6.34.orig/arch/cris/arch-v10/drivers/ds1302.c linux-2.6.34/arch/cris/arch-v10/drivers/ds1302.c +--- linux-2.6.34.orig/arch/cris/arch-v10/drivers/ds1302.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/cris/arch-v10/drivers/ds1302.c 2010-05-25 19:41:49.361720375 +0200 @@ -21,6 +21,7 @@ #include #include @@ -181,9 +181,9 @@ diff -Nur linux-2.6.32.orig/arch/cris/arch-v10/drivers/ds1302.c linux-2.6.32/arc return 0; } -diff -Nur linux-2.6.32.orig/arch/cris/arch-v10/drivers/gpio.c linux-2.6.32/arch/cris/arch-v10/drivers/gpio.c ---- linux-2.6.32.orig/arch/cris/arch-v10/drivers/gpio.c 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/arch/cris/arch-v10/drivers/gpio.c 2010-01-10 13:41:59.256309588 +0100 +diff -Nur linux-2.6.34.orig/arch/cris/arch-v10/drivers/gpio.c linux-2.6.34/arch/cris/arch-v10/drivers/gpio.c +--- linux-2.6.34.orig/arch/cris/arch-v10/drivers/gpio.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/cris/arch-v10/drivers/gpio.c 2010-05-25 19:41:49.427216846 +0200 @@ -21,6 +21,7 @@ #include #include @@ -217,18 +217,18 @@ diff -Nur linux-2.6.32.orig/arch/cris/arch-v10/drivers/gpio.c linux-2.6.32/arch/ /* Clear all leds */ #if defined (CONFIG_ETRAX_CSP0_LEDS) || defined (CONFIG_ETRAX_PA_LEDS) || defined (CONFIG_ETRAX_PB_LEDS) CRIS_LED_NETWORK_SET(0); -diff -Nur linux-2.6.32.orig/arch/cris/arch-v10/lib/hw_settings.S linux-2.6.32/arch/cris/arch-v10/lib/hw_settings.S ---- linux-2.6.32.orig/arch/cris/arch-v10/lib/hw_settings.S 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/arch/cris/arch-v10/lib/hw_settings.S 2010-01-10 13:41:59.256309588 +0100 +diff -Nur linux-2.6.34.orig/arch/cris/arch-v10/lib/hw_settings.S linux-2.6.34/arch/cris/arch-v10/lib/hw_settings.S +--- linux-2.6.34.orig/arch/cris/arch-v10/lib/hw_settings.S 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/cris/arch-v10/lib/hw_settings.S 2010-05-25 19:41:49.485343082 +0200 @@ -60,3 +60,5 @@ .dword R_PORT_PB_SET .dword PB_SET_VALUE .dword 0 ; No more register values + .ascii "ACME_PART_MAGIC" + .dword 0xdeadc0de -diff -Nur linux-2.6.32.orig/arch/cris/arch-v10/mm/init.c linux-2.6.32/arch/cris/arch-v10/mm/init.c ---- linux-2.6.32.orig/arch/cris/arch-v10/mm/init.c 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/arch/cris/arch-v10/mm/init.c 2010-01-10 13:41:59.256309588 +0100 +diff -Nur linux-2.6.34.orig/arch/cris/arch-v10/mm/init.c linux-2.6.34/arch/cris/arch-v10/mm/init.c +--- linux-2.6.34.orig/arch/cris/arch-v10/mm/init.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/cris/arch-v10/mm/init.c 2010-05-25 19:41:49.522223225 +0200 @@ -184,6 +184,9 @@ free_area_init_node(0, zones_size, PAGE_OFFSET >> PAGE_SHIFT, 0); @@ -239,9 +239,9 @@ diff -Nur linux-2.6.32.orig/arch/cris/arch-v10/mm/init.c linux-2.6.32/arch/cris/ /* Initialize remaps of some I/O-ports. It is important that this * is called before any driver is initialized. -diff -Nur linux-2.6.32.orig/arch/cris/boot/compressed/Makefile linux-2.6.32/arch/cris/boot/compressed/Makefile ---- linux-2.6.32.orig/arch/cris/boot/compressed/Makefile 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/arch/cris/boot/compressed/Makefile 2010-01-10 13:41:59.256309588 +0100 +diff -Nur linux-2.6.34.orig/arch/cris/boot/compressed/Makefile linux-2.6.34/arch/cris/boot/compressed/Makefile +--- linux-2.6.34.orig/arch/cris/boot/compressed/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/cris/boot/compressed/Makefile 2010-05-25 19:41:49.562223178 +0200 @@ -18,7 +18,7 @@ OBJECTS-$(CONFIG_ETRAX_ARCH_V32) = $(obj)/head_v32.o OBJECTS-$(CONFIG_ETRAX_ARCH_V10) = $(obj)/head_v10.o @@ -251,9 +251,9 @@ diff -Nur linux-2.6.32.orig/arch/cris/boot/compressed/Makefile linux-2.6.32/arch quiet_cmd_image = BUILD $@ cmd_image = cat $(obj)/decompress.bin $(obj)/piggy.gz > $@ -diff -Nur linux-2.6.32.orig/arch/cris/boot/compressed/misc.c linux-2.6.32/arch/cris/boot/compressed/misc.c ---- linux-2.6.32.orig/arch/cris/boot/compressed/misc.c 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/arch/cris/boot/compressed/misc.c 2010-01-10 13:41:59.256309588 +0100 +diff -Nur linux-2.6.34.orig/arch/cris/boot/compressed/misc.c linux-2.6.34/arch/cris/boot/compressed/misc.c +--- linux-2.6.34.orig/arch/cris/boot/compressed/misc.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/cris/boot/compressed/misc.c 2010-05-25 19:41:49.602223136 +0200 @@ -106,7 +106,7 @@ static void flush_window(void); @@ -304,9 +304,9 @@ diff -Nur linux-2.6.32.orig/arch/cris/boot/compressed/misc.c linux-2.6.32/arch/c - puts("Done. Now booting the kernel\n"); + putstr("Done. Now booting the kernel\n"); } -diff -Nur linux-2.6.32.orig/arch/cris/boot/Makefile linux-2.6.32/arch/cris/boot/Makefile ---- linux-2.6.32.orig/arch/cris/boot/Makefile 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/arch/cris/boot/Makefile 2010-01-10 13:41:59.256309588 +0100 +diff -Nur linux-2.6.34.orig/arch/cris/boot/Makefile linux-2.6.34/arch/cris/boot/Makefile +--- linux-2.6.34.orig/arch/cris/boot/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/cris/boot/Makefile 2010-05-25 19:41:49.642223132 +0200 @@ -5,7 +5,7 @@ objcopyflags-$(CONFIG_ETRAX_ARCH_V10) += -R .note -R .comment objcopyflags-$(CONFIG_ETRAX_ARCH_V32) += --remove-section=.bss @@ -324,10 +324,10 @@ diff -Nur linux-2.6.32.orig/arch/cris/boot/Makefile linux-2.6.32/arch/cris/boot/ $(obj)/zImage: $(obj)/compressed/vmlinux @cp $< $@ -diff -Nur linux-2.6.32.orig/arch/cris/Kconfig linux-2.6.32/arch/cris/Kconfig ---- linux-2.6.32.orig/arch/cris/Kconfig 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/arch/cris/Kconfig 2010-01-10 13:41:59.256309588 +0100 -@@ -168,6 +168,12 @@ +diff -Nur linux-2.6.34.orig/arch/cris/Kconfig linux-2.6.34/arch/cris/Kconfig +--- linux-2.6.34.orig/arch/cris/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/cris/Kconfig 2010-05-25 19:41:49.692223112 +0200 +@@ -174,6 +174,12 @@ help Size of DRAM (decimal in MB) typically 2, 8 or 16. @@ -340,7 +340,7 @@ diff -Nur linux-2.6.32.orig/arch/cris/Kconfig linux-2.6.32/arch/cris/Kconfig config ETRAX_VMEM_SIZE int "Video memory size (dec, in MB)" depends on ETRAX_ARCH_V32 && !ETRAXFS -@@ -273,7 +279,7 @@ +@@ -279,7 +285,7 @@ select MTD_CFI_AMDSTD select MTD_JEDECPROBE if ETRAX_ARCH_V32 select MTD_CHAR @@ -349,7 +349,7 @@ diff -Nur linux-2.6.32.orig/arch/cris/Kconfig linux-2.6.32/arch/cris/Kconfig select MTD_PARTITIONS select MTD_CONCAT select MTD_COMPLEX_MAPPINGS -@@ -662,6 +668,11 @@ +@@ -668,6 +674,11 @@ source "drivers/ide/Kconfig" @@ -361,9 +361,9 @@ diff -Nur linux-2.6.32.orig/arch/cris/Kconfig linux-2.6.32/arch/cris/Kconfig source "drivers/net/Kconfig" source "drivers/i2c/Kconfig" -diff -Nur linux-2.6.32.orig/arch/cris/Makefile linux-2.6.32/arch/cris/Makefile ---- linux-2.6.32.orig/arch/cris/Makefile 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/arch/cris/Makefile 2010-01-10 13:41:59.256309588 +0100 +diff -Nur linux-2.6.34.orig/arch/cris/Makefile linux-2.6.34/arch/cris/Makefile +--- linux-2.6.34.orig/arch/cris/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/cris/Makefile 2010-05-25 19:41:49.751101855 +0200 @@ -40,10 +40,10 @@ LD = $(CROSS_COMPILE)ld -mcrislinux @@ -377,10 +377,10 @@ diff -Nur linux-2.6.32.orig/arch/cris/Makefile linux-2.6.32/arch/cris/Makefile KBUILD_CPPFLAGS += $(inc) ifdef CONFIG_FRAME_POINTER -diff -Nur linux-2.6.32.orig/drivers/net/cris/eth_v10.c linux-2.6.32/drivers/net/cris/eth_v10.c ---- linux-2.6.32.orig/drivers/net/cris/eth_v10.c 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/drivers/net/cris/eth_v10.c 2010-01-10 13:41:59.256309588 +0100 -@@ -1725,7 +1725,7 @@ +diff -Nur linux-2.6.34.orig/drivers/net/cris/eth_v10.c linux-2.6.34/drivers/net/cris/eth_v10.c +--- linux-2.6.34.orig/drivers/net/cris/eth_v10.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/net/cris/eth_v10.c 2010-05-25 19:41:49.809234068 +0200 +@@ -1722,7 +1722,7 @@ static void e100_netpoll(struct net_device* netdev) { @@ -389,6385 +389,61 @@ diff -Nur linux-2.6.32.orig/drivers/net/cris/eth_v10.c linux-2.6.32/drivers/net/ } #endif -diff -Nur linux-2.6.32.orig/drivers/net/cris/eth_v10.c.orig linux-2.6.32/drivers/net/cris/eth_v10.c.orig ---- linux-2.6.32.orig/drivers/net/cris/eth_v10.c.orig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.32/drivers/net/cris/eth_v10.c.orig 2009-12-03 04:51:21.000000000 +0100 -@@ -0,0 +1,1760 @@ -+/* -+ * e100net.c: A network driver for the ETRAX 100LX network controller. -+ * -+ * Copyright (c) 1998-2002 Axis Communications AB. -+ * -+ * The outline of this driver comes from skeleton.c. -+ * -+ */ -+ -+ -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include /* DMA and register descriptions */ -+#include /* CRIS_LED_* I/O functions */ -+#include -+#include -+#include -+#include -+#include -+#include -+ -+//#define ETHDEBUG -+#define D(x) -+ -+/* -+ * The name of the card. Is used for messages and in the requests for -+ * io regions, irqs and dma channels -+ */ -+ -+static const char* cardname = "ETRAX 100LX built-in ethernet controller"; -+ -+/* A default ethernet address. Highlevel SW will set the real one later */ -+ -+static struct sockaddr default_mac = { -+ 0, -+ { 0x00, 0x40, 0x8C, 0xCD, 0x00, 0x00 } -+}; -+ -+/* Information that need to be kept for each board. */ -+struct net_local { -+ struct net_device_stats stats; -+ struct mii_if_info mii_if; -+ -+ /* Tx control lock. This protects the transmit buffer ring -+ * state along with the "tx full" state of the driver. This -+ * means all netif_queue flow control actions are protected -+ * by this lock as well. -+ */ -+ spinlock_t lock; -+ -+ spinlock_t led_lock; /* Protect LED state */ -+ spinlock_t transceiver_lock; /* Protect transceiver state. */ -+}; -+ -+typedef struct etrax_eth_descr -+{ -+ etrax_dma_descr descr; -+ struct sk_buff* skb; -+} etrax_eth_descr; -+ -+/* Some transceivers requires special handling */ -+struct transceiver_ops -+{ -+ unsigned int oui; -+ void (*check_speed)(struct net_device* dev); -+ void (*check_duplex)(struct net_device* dev); -+}; -+ -+/* Duplex settings */ -+enum duplex -+{ -+ half, -+ full, -+ autoneg -+}; -+ -+/* Dma descriptors etc. */ -+ -+#define MAX_MEDIA_DATA_SIZE 1522 -+ -+#define MIN_PACKET_LEN 46 -+#define ETHER_HEAD_LEN 14 -+ -+/* -+** MDIO constants. -+*/ -+#define MDIO_START 0x1 -+#define MDIO_READ 0x2 -+#define MDIO_WRITE 0x1 -+#define MDIO_PREAMBLE 0xfffffffful -+ -+/* Broadcom specific */ -+#define MDIO_AUX_CTRL_STATUS_REG 0x18 -+#define MDIO_BC_FULL_DUPLEX_IND 0x1 -+#define MDIO_BC_SPEED 0x2 -+ -+/* TDK specific */ -+#define MDIO_TDK_DIAGNOSTIC_REG 18 -+#define MDIO_TDK_DIAGNOSTIC_RATE 0x400 -+#define MDIO_TDK_DIAGNOSTIC_DPLX 0x800 -+ -+/*Intel LXT972A specific*/ -+#define MDIO_INT_STATUS_REG_2 0x0011 -+#define MDIO_INT_FULL_DUPLEX_IND (1 << 9) -+#define MDIO_INT_SPEED (1 << 14) -+ -+/* Network flash constants */ -+#define NET_FLASH_TIME (HZ/50) /* 20 ms */ -+#define NET_FLASH_PAUSE (HZ/100) /* 10 ms */ -+#define NET_LINK_UP_CHECK_INTERVAL (2*HZ) /* 2 s */ -+#define NET_DUPLEX_CHECK_INTERVAL (2*HZ) /* 2 s */ -+ -+#define NO_NETWORK_ACTIVITY 0 -+#define NETWORK_ACTIVITY 1 -+ -+#define NBR_OF_RX_DESC 32 -+#define NBR_OF_TX_DESC 16 -+ -+/* Large packets are sent directly to upper layers while small packets are */ -+/* copied (to reduce memory waste). The following constant decides the breakpoint */ -+#define RX_COPYBREAK 256 -+ -+/* Due to a chip bug we need to flush the cache when descriptors are returned */ -+/* to the DMA. To decrease performance impact we return descriptors in chunks. */ -+/* The following constant determines the number of descriptors to return. */ -+#define RX_QUEUE_THRESHOLD NBR_OF_RX_DESC/2 -+ -+#define GET_BIT(bit,val) (((val) >> (bit)) & 0x01) -+ -+/* Define some macros to access ETRAX 100 registers */ -+#define SETF(var, reg, field, val) var = (var & ~IO_MASK_(reg##_, field##_)) | \ -+ IO_FIELD_(reg##_, field##_, val) -+#define SETS(var, reg, field, val) var = (var & ~IO_MASK_(reg##_, field##_)) | \ -+ IO_STATE_(reg##_, field##_, _##val) -+ -+static etrax_eth_descr *myNextRxDesc; /* Points to the next descriptor to -+ to be processed */ -+static etrax_eth_descr *myLastRxDesc; /* The last processed descriptor */ -+ -+static etrax_eth_descr RxDescList[NBR_OF_RX_DESC] __attribute__ ((aligned(32))); -+ -+static etrax_eth_descr* myFirstTxDesc; /* First packet not yet sent */ -+static etrax_eth_descr* myLastTxDesc; /* End of send queue */ -+static etrax_eth_descr* myNextTxDesc; /* Next descriptor to use */ -+static etrax_eth_descr TxDescList[NBR_OF_TX_DESC] __attribute__ ((aligned(32))); -+ -+static unsigned int network_rec_config_shadow = 0; -+ -+static unsigned int network_tr_ctrl_shadow = 0; -+ -+/* Network speed indication. */ -+static DEFINE_TIMER(speed_timer, NULL, 0, 0); -+static DEFINE_TIMER(clear_led_timer, NULL, 0, 0); -+static int current_speed; /* Speed read from transceiver */ -+static int current_speed_selection; /* Speed selected by user */ -+static unsigned long led_next_time; -+static int led_active; -+static int rx_queue_len; -+ -+/* Duplex */ -+static DEFINE_TIMER(duplex_timer, NULL, 0, 0); -+static int full_duplex; -+static enum duplex current_duplex; -+ -+/* Index to functions, as function prototypes. */ -+ -+static int etrax_ethernet_init(void); -+ -+static int e100_open(struct net_device *dev); -+static int e100_set_mac_address(struct net_device *dev, void *addr); -+static int e100_send_packet(struct sk_buff *skb, struct net_device *dev); -+static irqreturn_t e100rxtx_interrupt(int irq, void *dev_id); -+static irqreturn_t e100nw_interrupt(int irq, void *dev_id); -+static void e100_rx(struct net_device *dev); -+static int e100_close(struct net_device *dev); -+static int e100_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); -+static int e100_set_config(struct net_device* dev, struct ifmap* map); -+static void e100_tx_timeout(struct net_device *dev); -+static struct net_device_stats *e100_get_stats(struct net_device *dev); -+static void set_multicast_list(struct net_device *dev); -+static void e100_hardware_send_packet(struct net_local* np, char *buf, int length); -+static void update_rx_stats(struct net_device_stats *); -+static void update_tx_stats(struct net_device_stats *); -+static int e100_probe_transceiver(struct net_device* dev); -+ -+static void e100_check_speed(unsigned long priv); -+static void e100_set_speed(struct net_device* dev, unsigned long speed); -+static void e100_check_duplex(unsigned long priv); -+static void e100_set_duplex(struct net_device* dev, enum duplex); -+static void e100_negotiate(struct net_device* dev); -+ -+static int e100_get_mdio_reg(struct net_device *dev, int phy_id, int location); -+static void e100_set_mdio_reg(struct net_device *dev, int phy_id, int location, int value); -+ -+static void e100_send_mdio_cmd(unsigned short cmd, int write_cmd); -+static void e100_send_mdio_bit(unsigned char bit); -+static unsigned char e100_receive_mdio_bit(void); -+static void e100_reset_transceiver(struct net_device* net); -+ -+static void e100_clear_network_leds(unsigned long dummy); -+static void e100_set_network_leds(int active); -+ -+static const struct ethtool_ops e100_ethtool_ops; -+#if defined(CONFIG_ETRAX_NO_PHY) -+static void dummy_check_speed(struct net_device* dev); -+static void dummy_check_duplex(struct net_device* dev); -+#else -+static void broadcom_check_speed(struct net_device* dev); -+static void broadcom_check_duplex(struct net_device* dev); -+static void tdk_check_speed(struct net_device* dev); -+static void tdk_check_duplex(struct net_device* dev); -+static void intel_check_speed(struct net_device* dev); -+static void intel_check_duplex(struct net_device* dev); -+static void generic_check_speed(struct net_device* dev); -+static void generic_check_duplex(struct net_device* dev); -+#endif -+#ifdef CONFIG_NET_POLL_CONTROLLER -+static void e100_netpoll(struct net_device* dev); -+#endif -+ -+static int autoneg_normal = 1; -+ -+struct transceiver_ops transceivers[] = -+{ -+#if defined(CONFIG_ETRAX_NO_PHY) -+ {0x0000, dummy_check_speed, dummy_check_duplex} /* Dummy */ -+#else -+ {0x1018, broadcom_check_speed, broadcom_check_duplex}, /* Broadcom */ -+ {0xC039, tdk_check_speed, tdk_check_duplex}, /* TDK 2120 */ -+ {0x039C, tdk_check_speed, tdk_check_duplex}, /* TDK 2120C */ -+ {0x04de, intel_check_speed, intel_check_duplex}, /* Intel LXT972A*/ -+ {0x0000, generic_check_speed, generic_check_duplex} /* Generic, must be last */ -+#endif -+}; -+ -+struct transceiver_ops* transceiver = &transceivers[0]; -+ -+static const struct net_device_ops e100_netdev_ops = { -+ .ndo_open = e100_open, -+ .ndo_stop = e100_close, -+ .ndo_start_xmit = e100_send_packet, -+ .ndo_tx_timeout = e100_tx_timeout, -+ .ndo_get_stats = e100_get_stats, -+ .ndo_set_multicast_list = set_multicast_list, -+ .ndo_do_ioctl = e100_ioctl, -+ .ndo_set_mac_address = e100_set_mac_address, -+ .ndo_validate_addr = eth_validate_addr, -+ .ndo_change_mtu = eth_change_mtu, -+ .ndo_set_config = e100_set_config, -+#ifdef CONFIG_NET_POLL_CONTROLLER -+ .ndo_poll_controller = e100_netpoll, -+#endif -+}; -+ -+#define tx_done(dev) (*R_DMA_CH0_CMD == 0) -+ -+/* -+ * Check for a network adaptor of this type, and return '0' if one exists. -+ * If dev->base_addr == 0, probe all likely locations. -+ * If dev->base_addr == 1, always return failure. -+ * If dev->base_addr == 2, allocate space for the device and return success -+ * (detachable devices only). -+ */ -+ -+static int __init -+etrax_ethernet_init(void) -+{ -+ struct net_device *dev; -+ struct net_local* np; -+ int i, err; -+ -+ printk(KERN_INFO -+ "ETRAX 100LX 10/100MBit ethernet v2.0 (c) 1998-2007 Axis Communications AB\n"); -+ -+ if (cris_request_io_interface(if_eth, cardname)) { -+ printk(KERN_CRIT "etrax_ethernet_init failed to get IO interface\n"); -+ return -EBUSY; -+ } -+ -+ dev = alloc_etherdev(sizeof(struct net_local)); -+ if (!dev) -+ return -ENOMEM; -+ -+ np = netdev_priv(dev); -+ -+ /* we do our own locking */ -+ dev->features |= NETIF_F_LLTX; -+ -+ dev->base_addr = (unsigned int)R_NETWORK_SA_0; /* just to have something to show */ -+ -+ /* now setup our etrax specific stuff */ -+ -+ dev->irq = NETWORK_DMA_RX_IRQ_NBR; /* we really use DMATX as well... */ -+ dev->dma = NETWORK_RX_DMA_NBR; -+ -+ /* fill in our handlers so the network layer can talk to us in the future */ -+ -+ dev->ethtool_ops = &e100_ethtool_ops; -+ dev->netdev_ops = &e100_netdev_ops; -+ -+ spin_lock_init(&np->lock); -+ spin_lock_init(&np->led_lock); -+ spin_lock_init(&np->transceiver_lock); -+ -+ /* Initialise the list of Etrax DMA-descriptors */ -+ -+ /* Initialise receive descriptors */ -+ -+ for (i = 0; i < NBR_OF_RX_DESC; i++) { -+ /* Allocate two extra cachelines to make sure that buffer used -+ * by DMA does not share cacheline with any other data (to -+ * avoid cache bug) -+ */ -+ RxDescList[i].skb = dev_alloc_skb(MAX_MEDIA_DATA_SIZE + 2 * L1_CACHE_BYTES); -+ if (!RxDescList[i].skb) -+ return -ENOMEM; -+ RxDescList[i].descr.ctrl = 0; -+ RxDescList[i].descr.sw_len = MAX_MEDIA_DATA_SIZE; -+ RxDescList[i].descr.next = virt_to_phys(&RxDescList[i + 1]); -+ RxDescList[i].descr.buf = L1_CACHE_ALIGN(virt_to_phys(RxDescList[i].skb->data)); -+ RxDescList[i].descr.status = 0; -+ RxDescList[i].descr.hw_len = 0; -+ prepare_rx_descriptor(&RxDescList[i].descr); -+ } -+ -+ RxDescList[NBR_OF_RX_DESC - 1].descr.ctrl = d_eol; -+ RxDescList[NBR_OF_RX_DESC - 1].descr.next = virt_to_phys(&RxDescList[0]); -+ rx_queue_len = 0; -+ -+ /* Initialize transmit descriptors */ -+ for (i = 0; i < NBR_OF_TX_DESC; i++) { -+ TxDescList[i].descr.ctrl = 0; -+ TxDescList[i].descr.sw_len = 0; -+ TxDescList[i].descr.next = virt_to_phys(&TxDescList[i + 1].descr); -+ TxDescList[i].descr.buf = 0; -+ TxDescList[i].descr.status = 0; -+ TxDescList[i].descr.hw_len = 0; -+ TxDescList[i].skb = 0; -+ } -+ -+ TxDescList[NBR_OF_TX_DESC - 1].descr.ctrl = d_eol; -+ TxDescList[NBR_OF_TX_DESC - 1].descr.next = virt_to_phys(&TxDescList[0].descr); -+ -+ /* Initialise initial pointers */ -+ -+ myNextRxDesc = &RxDescList[0]; -+ myLastRxDesc = &RxDescList[NBR_OF_RX_DESC - 1]; -+ myFirstTxDesc = &TxDescList[0]; -+ myNextTxDesc = &TxDescList[0]; -+ myLastTxDesc = &TxDescList[NBR_OF_TX_DESC - 1]; -+ -+ /* Register device */ -+ err = register_netdev(dev); -+ if (err) { -+ free_netdev(dev); -+ return err; -+ } -+ -+ /* set the default MAC address */ -+ -+ e100_set_mac_address(dev, &default_mac); -+ -+ /* Initialize speed indicator stuff. */ -+ -+ current_speed = 10; -+ current_speed_selection = 0; /* Auto */ -+ speed_timer.expires = jiffies + NET_LINK_UP_CHECK_INTERVAL; -+ speed_timer.data = (unsigned long)dev; -+ speed_timer.function = e100_check_speed; -+ -+ clear_led_timer.function = e100_clear_network_leds; -+ clear_led_timer.data = (unsigned long)dev; -+ -+ full_duplex = 0; -+ current_duplex = autoneg; -+ duplex_timer.expires = jiffies + NET_DUPLEX_CHECK_INTERVAL; -+ duplex_timer.data = (unsigned long)dev; -+ duplex_timer.function = e100_check_duplex; -+ -+ /* Initialize mii interface */ -+ np->mii_if.phy_id_mask = 0x1f; -+ np->mii_if.reg_num_mask = 0x1f; -+ np->mii_if.dev = dev; -+ np->mii_if.mdio_read = e100_get_mdio_reg; -+ np->mii_if.mdio_write = e100_set_mdio_reg; -+ -+ /* Initialize group address registers to make sure that no */ -+ /* unwanted addresses are matched */ -+ *R_NETWORK_GA_0 = 0x00000000; -+ *R_NETWORK_GA_1 = 0x00000000; -+ -+ /* Initialize next time the led can flash */ -+ led_next_time = jiffies; -+ return 0; -+} -+ -+/* set MAC address of the interface. called from the core after a -+ * SIOCSIFADDR ioctl, and from the bootup above. -+ */ -+ -+static int -+e100_set_mac_address(struct net_device *dev, void *p) -+{ -+ struct net_local *np = netdev_priv(dev); -+ struct sockaddr *addr = p; -+ -+ spin_lock(&np->lock); /* preemption protection */ -+ -+ /* remember it */ -+ -+ memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); -+ -+ /* Write it to the hardware. -+ * Note the way the address is wrapped: -+ * *R_NETWORK_SA_0 = a0_0 | (a0_1 << 8) | (a0_2 << 16) | (a0_3 << 24); -+ * *R_NETWORK_SA_1 = a0_4 | (a0_5 << 8); -+ */ -+ -+ *R_NETWORK_SA_0 = dev->dev_addr[0] | (dev->dev_addr[1] << 8) | -+ (dev->dev_addr[2] << 16) | (dev->dev_addr[3] << 24); -+ *R_NETWORK_SA_1 = dev->dev_addr[4] | (dev->dev_addr[5] << 8); -+ *R_NETWORK_SA_2 = 0; -+ -+ /* show it in the log as well */ -+ -+ printk(KERN_INFO "%s: changed MAC to %pM\n", dev->name, dev->dev_addr); -+ -+ spin_unlock(&np->lock); -+ -+ return 0; -+} -+ -+/* -+ * Open/initialize the board. This is called (in the current kernel) -+ * sometime after booting when the 'ifconfig' program is run. -+ * -+ * This routine should set everything up anew at each open, even -+ * registers that "should" only need to be set once at boot, so that -+ * there is non-reboot way to recover if something goes wrong. -+ */ -+ -+static int -+e100_open(struct net_device *dev) -+{ -+ unsigned long flags; -+ -+ /* enable the MDIO output pin */ -+ -+ *R_NETWORK_MGM_CTRL = IO_STATE(R_NETWORK_MGM_CTRL, mdoe, enable); -+ -+ *R_IRQ_MASK0_CLR = -+ IO_STATE(R_IRQ_MASK0_CLR, overrun, clr) | -+ IO_STATE(R_IRQ_MASK0_CLR, underrun, clr) | -+ IO_STATE(R_IRQ_MASK0_CLR, excessive_col, clr); -+ -+ /* clear dma0 and 1 eop and descr irq masks */ -+ *R_IRQ_MASK2_CLR = -+ IO_STATE(R_IRQ_MASK2_CLR, dma0_descr, clr) | -+ IO_STATE(R_IRQ_MASK2_CLR, dma0_eop, clr) | -+ IO_STATE(R_IRQ_MASK2_CLR, dma1_descr, clr) | -+ IO_STATE(R_IRQ_MASK2_CLR, dma1_eop, clr); -+ -+ /* Reset and wait for the DMA channels */ -+ -+ RESET_DMA(NETWORK_TX_DMA_NBR); -+ RESET_DMA(NETWORK_RX_DMA_NBR); -+ WAIT_DMA(NETWORK_TX_DMA_NBR); -+ WAIT_DMA(NETWORK_RX_DMA_NBR); -+ -+ /* Initialise the etrax network controller */ -+ -+ /* allocate the irq corresponding to the receiving DMA */ -+ -+ if (request_irq(NETWORK_DMA_RX_IRQ_NBR, e100rxtx_interrupt, -+ IRQF_SAMPLE_RANDOM, cardname, (void *)dev)) { -+ goto grace_exit0; -+ } -+ -+ /* allocate the irq corresponding to the transmitting DMA */ -+ -+ if (request_irq(NETWORK_DMA_TX_IRQ_NBR, e100rxtx_interrupt, 0, -+ cardname, (void *)dev)) { -+ goto grace_exit1; -+ } -+ -+ /* allocate the irq corresponding to the network errors etc */ -+ -+ if (request_irq(NETWORK_STATUS_IRQ_NBR, e100nw_interrupt, 0, -+ cardname, (void *)dev)) { -+ goto grace_exit2; -+ } -+ -+ /* -+ * Always allocate the DMA channels after the IRQ, -+ * and clean up on failure. -+ */ -+ -+ if (cris_request_dma(NETWORK_TX_DMA_NBR, -+ cardname, -+ DMA_VERBOSE_ON_ERROR, -+ dma_eth)) { -+ goto grace_exit3; -+ } -+ -+ if (cris_request_dma(NETWORK_RX_DMA_NBR, -+ cardname, -+ DMA_VERBOSE_ON_ERROR, -+ dma_eth)) { -+ goto grace_exit4; -+ } -+ -+ /* give the HW an idea of what MAC address we want */ -+ -+ *R_NETWORK_SA_0 = dev->dev_addr[0] | (dev->dev_addr[1] << 8) | -+ (dev->dev_addr[2] << 16) | (dev->dev_addr[3] << 24); -+ *R_NETWORK_SA_1 = dev->dev_addr[4] | (dev->dev_addr[5] << 8); -+ *R_NETWORK_SA_2 = 0; -+ -+#if 0 -+ /* use promiscuous mode for testing */ -+ *R_NETWORK_GA_0 = 0xffffffff; -+ *R_NETWORK_GA_1 = 0xffffffff; -+ -+ *R_NETWORK_REC_CONFIG = 0xd; /* broadcast rec, individ. rec, ma0 enabled */ -+#else -+ SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG, max_size, size1522); -+ SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG, broadcast, receive); -+ SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG, ma0, enable); -+ SETF(network_rec_config_shadow, R_NETWORK_REC_CONFIG, duplex, full_duplex); -+ *R_NETWORK_REC_CONFIG = network_rec_config_shadow; -+#endif -+ -+ *R_NETWORK_GEN_CONFIG = -+ IO_STATE(R_NETWORK_GEN_CONFIG, phy, mii_clk) | -+ IO_STATE(R_NETWORK_GEN_CONFIG, enable, on); -+ -+ SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error, clr); -+ SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, delay, none); -+ SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, cancel, dont); -+ SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, cd, enable); -+ SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, retry, enable); -+ SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, pad, enable); -+ SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, crc, enable); -+ *R_NETWORK_TR_CTRL = network_tr_ctrl_shadow; -+ -+ local_irq_save(flags); -+ -+ /* enable the irq's for ethernet DMA */ -+ -+ *R_IRQ_MASK2_SET = -+ IO_STATE(R_IRQ_MASK2_SET, dma0_eop, set) | -+ IO_STATE(R_IRQ_MASK2_SET, dma1_eop, set); -+ -+ *R_IRQ_MASK0_SET = -+ IO_STATE(R_IRQ_MASK0_SET, overrun, set) | -+ IO_STATE(R_IRQ_MASK0_SET, underrun, set) | -+ IO_STATE(R_IRQ_MASK0_SET, excessive_col, set); -+ -+ /* make sure the irqs are cleared */ -+ -+ *R_DMA_CH0_CLR_INTR = IO_STATE(R_DMA_CH0_CLR_INTR, clr_eop, do); -+ *R_DMA_CH1_CLR_INTR = IO_STATE(R_DMA_CH1_CLR_INTR, clr_eop, do); -+ -+ /* make sure the rec and transmit error counters are cleared */ -+ -+ (void)*R_REC_COUNTERS; /* dummy read */ -+ (void)*R_TR_COUNTERS; /* dummy read */ -+ -+ /* start the receiving DMA channel so we can receive packets from now on */ -+ -+ *R_DMA_CH1_FIRST = virt_to_phys(myNextRxDesc); -+ *R_DMA_CH1_CMD = IO_STATE(R_DMA_CH1_CMD, cmd, start); -+ -+ /* Set up transmit DMA channel so it can be restarted later */ -+ -+ *R_DMA_CH0_FIRST = 0; -+ *R_DMA_CH0_DESCR = virt_to_phys(myLastTxDesc); -+ netif_start_queue(dev); -+ -+ local_irq_restore(flags); -+ -+ /* Probe for transceiver */ -+ if (e100_probe_transceiver(dev)) -+ goto grace_exit5; -+ -+ /* Start duplex/speed timers */ -+ add_timer(&speed_timer); -+ add_timer(&duplex_timer); -+ -+ /* We are now ready to accept transmit requeusts from -+ * the queueing layer of the networking. -+ */ -+ netif_carrier_on(dev); -+ -+ return 0; -+ -+grace_exit5: -+ cris_free_dma(NETWORK_RX_DMA_NBR, cardname); -+grace_exit4: -+ cris_free_dma(NETWORK_TX_DMA_NBR, cardname); -+grace_exit3: -+ free_irq(NETWORK_STATUS_IRQ_NBR, (void *)dev); -+grace_exit2: -+ free_irq(NETWORK_DMA_TX_IRQ_NBR, (void *)dev); -+grace_exit1: -+ free_irq(NETWORK_DMA_RX_IRQ_NBR, (void *)dev); -+grace_exit0: -+ return -EAGAIN; -+} -+ -+#if defined(CONFIG_ETRAX_NO_PHY) -+static void -+dummy_check_speed(struct net_device* dev) -+{ -+ current_speed = 100; -+} -+#else -+static void -+generic_check_speed(struct net_device* dev) -+{ -+ unsigned long data; -+ struct net_local *np = netdev_priv(dev); -+ -+ data = e100_get_mdio_reg(dev, np->mii_if.phy_id, MII_ADVERTISE); -+ if ((data & ADVERTISE_100FULL) || -+ (data & ADVERTISE_100HALF)) -+ current_speed = 100; -+ else -+ current_speed = 10; -+} -+ -+static void -+tdk_check_speed(struct net_device* dev) -+{ -+ unsigned long data; -+ struct net_local *np = netdev_priv(dev); -+ -+ data = e100_get_mdio_reg(dev, np->mii_if.phy_id, -+ MDIO_TDK_DIAGNOSTIC_REG); -+ current_speed = (data & MDIO_TDK_DIAGNOSTIC_RATE ? 100 : 10); -+} -+ -+static void -+broadcom_check_speed(struct net_device* dev) -+{ -+ unsigned long data; -+ struct net_local *np = netdev_priv(dev); -+ -+ data = e100_get_mdio_reg(dev, np->mii_if.phy_id, -+ MDIO_AUX_CTRL_STATUS_REG); -+ current_speed = (data & MDIO_BC_SPEED ? 100 : 10); -+} -+ -+static void -+intel_check_speed(struct net_device* dev) -+{ -+ unsigned long data; -+ struct net_local *np = netdev_priv(dev); -+ -+ data = e100_get_mdio_reg(dev, np->mii_if.phy_id, -+ MDIO_INT_STATUS_REG_2); -+ current_speed = (data & MDIO_INT_SPEED ? 100 : 10); -+} -+#endif -+static void -+e100_check_speed(unsigned long priv) -+{ -+ struct net_device* dev = (struct net_device*)priv; -+ struct net_local *np = netdev_priv(dev); -+ static int led_initiated = 0; -+ unsigned long data; -+ int old_speed = current_speed; -+ -+ spin_lock(&np->transceiver_lock); -+ -+ data = e100_get_mdio_reg(dev, np->mii_if.phy_id, MII_BMSR); -+ if (!(data & BMSR_LSTATUS)) { -+ current_speed = 0; -+ } else { -+ transceiver->check_speed(dev); -+ } -+ -+ spin_lock(&np->led_lock); -+ if ((old_speed != current_speed) || !led_initiated) { -+ led_initiated = 1; -+ e100_set_network_leds(NO_NETWORK_ACTIVITY); -+ if (current_speed) -+ netif_carrier_on(dev); -+ else -+ netif_carrier_off(dev); -+ } -+ spin_unlock(&np->led_lock); -+ -+ /* Reinitialize the timer. */ -+ speed_timer.expires = jiffies + NET_LINK_UP_CHECK_INTERVAL; -+ add_timer(&speed_timer); -+ -+ spin_unlock(&np->transceiver_lock); -+} -+ -+static void -+e100_negotiate(struct net_device* dev) -+{ -+ struct net_local *np = netdev_priv(dev); -+ unsigned short data = e100_get_mdio_reg(dev, np->mii_if.phy_id, -+ MII_ADVERTISE); -+ -+ /* Discard old speed and duplex settings */ -+ data &= ~(ADVERTISE_100HALF | ADVERTISE_100FULL | -+ ADVERTISE_10HALF | ADVERTISE_10FULL); -+ -+ switch (current_speed_selection) { -+ case 10: -+ if (current_duplex == full) -+ data |= ADVERTISE_10FULL; -+ else if (current_duplex == half) -+ data |= ADVERTISE_10HALF; -+ else -+ data |= ADVERTISE_10HALF | ADVERTISE_10FULL; -+ break; -+ -+ case 100: -+ if (current_duplex == full) -+ data |= ADVERTISE_100FULL; -+ else if (current_duplex == half) -+ data |= ADVERTISE_100HALF; -+ else -+ data |= ADVERTISE_100HALF | ADVERTISE_100FULL; -+ break; -+ -+ case 0: /* Auto */ -+ if (current_duplex == full) -+ data |= ADVERTISE_100FULL | ADVERTISE_10FULL; -+ else if (current_duplex == half) -+ data |= ADVERTISE_100HALF | ADVERTISE_10HALF; -+ else -+ data |= ADVERTISE_10HALF | ADVERTISE_10FULL | -+ ADVERTISE_100HALF | ADVERTISE_100FULL; -+ break; -+ -+ default: /* assume autoneg speed and duplex */ -+ data |= ADVERTISE_10HALF | ADVERTISE_10FULL | -+ ADVERTISE_100HALF | ADVERTISE_100FULL; -+ break; -+ } -+ -+ e100_set_mdio_reg(dev, np->mii_if.phy_id, MII_ADVERTISE, data); -+ -+ data = e100_get_mdio_reg(dev, np->mii_if.phy_id, MII_BMCR); -+ if (autoneg_normal) { -+ /* Renegotiate with link partner */ -+ data |= BMCR_ANENABLE | BMCR_ANRESTART; -+ } else { -+ /* Don't negotiate speed or duplex */ -+ data &= ~(BMCR_ANENABLE | BMCR_ANRESTART); -+ -+ /* Set speed and duplex static */ -+ if (current_speed_selection == 10) -+ data &= ~BMCR_SPEED100; -+ else -+ data |= BMCR_SPEED100; -+ -+ if (current_duplex != full) -+ data &= ~BMCR_FULLDPLX; -+ else -+ data |= BMCR_FULLDPLX; -+ } -+ e100_set_mdio_reg(dev, np->mii_if.phy_id, MII_BMCR, data); -+} -+ -+static void -+e100_set_speed(struct net_device* dev, unsigned long speed) -+{ -+ struct net_local *np = netdev_priv(dev); -+ -+ spin_lock(&np->transceiver_lock); -+ if (speed != current_speed_selection) { -+ current_speed_selection = speed; -+ e100_negotiate(dev); -+ } -+ spin_unlock(&np->transceiver_lock); -+} -+ -+static void -+e100_check_duplex(unsigned long priv) -+{ -+ struct net_device *dev = (struct net_device *)priv; -+ struct net_local *np = netdev_priv(dev); -+ int old_duplex; -+ -+ spin_lock(&np->transceiver_lock); -+ old_duplex = full_duplex; -+ transceiver->check_duplex(dev); -+ if (old_duplex != full_duplex) { -+ /* Duplex changed */ -+ SETF(network_rec_config_shadow, R_NETWORK_REC_CONFIG, duplex, full_duplex); -+ *R_NETWORK_REC_CONFIG = network_rec_config_shadow; -+ } -+ -+ /* Reinitialize the timer. */ -+ duplex_timer.expires = jiffies + NET_DUPLEX_CHECK_INTERVAL; -+ add_timer(&duplex_timer); -+ np->mii_if.full_duplex = full_duplex; -+ spin_unlock(&np->transceiver_lock); -+} -+#if defined(CONFIG_ETRAX_NO_PHY) -+static void -+dummy_check_duplex(struct net_device* dev) -+{ -+ full_duplex = 1; -+} -+#else -+static void -+generic_check_duplex(struct net_device* dev) -+{ -+ unsigned long data; -+ struct net_local *np = netdev_priv(dev); -+ -+ data = e100_get_mdio_reg(dev, np->mii_if.phy_id, MII_ADVERTISE); -+ if ((data & ADVERTISE_10FULL) || -+ (data & ADVERTISE_100FULL)) -+ full_duplex = 1; -+ else -+ full_duplex = 0; -+} -+ -+static void -+tdk_check_duplex(struct net_device* dev) -+{ -+ unsigned long data; -+ struct net_local *np = netdev_priv(dev); -+ -+ data = e100_get_mdio_reg(dev, np->mii_if.phy_id, -+ MDIO_TDK_DIAGNOSTIC_REG); -+ full_duplex = (data & MDIO_TDK_DIAGNOSTIC_DPLX) ? 1 : 0; -+} -+ -+static void -+broadcom_check_duplex(struct net_device* dev) -+{ -+ unsigned long data; -+ struct net_local *np = netdev_priv(dev); -+ -+ data = e100_get_mdio_reg(dev, np->mii_if.phy_id, -+ MDIO_AUX_CTRL_STATUS_REG); -+ full_duplex = (data & MDIO_BC_FULL_DUPLEX_IND) ? 1 : 0; -+} -+ -+static void -+intel_check_duplex(struct net_device* dev) -+{ -+ unsigned long data; -+ struct net_local *np = netdev_priv(dev); -+ -+ data = e100_get_mdio_reg(dev, np->mii_if.phy_id, -+ MDIO_INT_STATUS_REG_2); -+ full_duplex = (data & MDIO_INT_FULL_DUPLEX_IND) ? 1 : 0; -+} -+#endif -+static void -+e100_set_duplex(struct net_device* dev, enum duplex new_duplex) -+{ -+ struct net_local *np = netdev_priv(dev); -+ -+ spin_lock(&np->transceiver_lock); -+ if (new_duplex != current_duplex) { -+ current_duplex = new_duplex; -+ e100_negotiate(dev); -+ } -+ spin_unlock(&np->transceiver_lock); -+} -+ -+static int -+e100_probe_transceiver(struct net_device* dev) -+{ -+ int ret = 0; -+ -+#if !defined(CONFIG_ETRAX_NO_PHY) -+ unsigned int phyid_high; -+ unsigned int phyid_low; -+ unsigned int oui; -+ struct transceiver_ops* ops = NULL; -+ struct net_local *np = netdev_priv(dev); -+ -+ spin_lock(&np->transceiver_lock); -+ -+ /* Probe MDIO physical address */ -+ for (np->mii_if.phy_id = 0; np->mii_if.phy_id <= 31; -+ np->mii_if.phy_id++) { -+ if (e100_get_mdio_reg(dev, -+ np->mii_if.phy_id, MII_BMSR) != 0xffff) -+ break; -+ } -+ if (np->mii_if.phy_id == 32) { -+ ret = -ENODEV; -+ goto out; -+ } -+ -+ /* Get manufacturer */ -+ phyid_high = e100_get_mdio_reg(dev, np->mii_if.phy_id, MII_PHYSID1); -+ phyid_low = e100_get_mdio_reg(dev, np->mii_if.phy_id, MII_PHYSID2); -+ oui = (phyid_high << 6) | (phyid_low >> 10); -+ -+ for (ops = &transceivers[0]; ops->oui; ops++) { -+ if (ops->oui == oui) -+ break; -+ } -+ transceiver = ops; -+out: -+ spin_unlock(&np->transceiver_lock); -+#endif -+ return ret; -+} -+ -+static int -+e100_get_mdio_reg(struct net_device *dev, int phy_id, int location) -+{ -+ unsigned short cmd; /* Data to be sent on MDIO port */ -+ int data; /* Data read from MDIO */ -+ int bitCounter; -+ -+ /* Start of frame, OP Code, Physical Address, Register Address */ -+ cmd = (MDIO_START << 14) | (MDIO_READ << 12) | (phy_id << 7) | -+ (location << 2); -+ -+ e100_send_mdio_cmd(cmd, 0); -+ -+ data = 0; -+ -+ /* Data... */ -+ for (bitCounter=15; bitCounter>=0 ; bitCounter--) { -+ data |= (e100_receive_mdio_bit() << bitCounter); -+ } -+ -+ return data; -+} -+ -+static void -+e100_set_mdio_reg(struct net_device *dev, int phy_id, int location, int value) -+{ -+ int bitCounter; -+ unsigned short cmd; -+ -+ cmd = (MDIO_START << 14) | (MDIO_WRITE << 12) | (phy_id << 7) | -+ (location << 2); -+ -+ e100_send_mdio_cmd(cmd, 1); -+ -+ /* Data... */ -+ for (bitCounter=15; bitCounter>=0 ; bitCounter--) { -+ e100_send_mdio_bit(GET_BIT(bitCounter, value)); -+ } -+ -+} -+ -+static void -+e100_send_mdio_cmd(unsigned short cmd, int write_cmd) -+{ -+ int bitCounter; -+ unsigned char data = 0x2; -+ -+ /* Preamble */ -+ for (bitCounter = 31; bitCounter>= 0; bitCounter--) -+ e100_send_mdio_bit(GET_BIT(bitCounter, MDIO_PREAMBLE)); -+ -+ for (bitCounter = 15; bitCounter >= 2; bitCounter--) -+ e100_send_mdio_bit(GET_BIT(bitCounter, cmd)); -+ -+ /* Turnaround */ -+ for (bitCounter = 1; bitCounter >= 0 ; bitCounter--) -+ if (write_cmd) -+ e100_send_mdio_bit(GET_BIT(bitCounter, data)); -+ else -+ e100_receive_mdio_bit(); -+} -+ -+static void -+e100_send_mdio_bit(unsigned char bit) -+{ -+ *R_NETWORK_MGM_CTRL = -+ IO_STATE(R_NETWORK_MGM_CTRL, mdoe, enable) | -+ IO_FIELD(R_NETWORK_MGM_CTRL, mdio, bit); -+ udelay(1); -+ *R_NETWORK_MGM_CTRL = -+ IO_STATE(R_NETWORK_MGM_CTRL, mdoe, enable) | -+ IO_MASK(R_NETWORK_MGM_CTRL, mdck) | -+ IO_FIELD(R_NETWORK_MGM_CTRL, mdio, bit); -+ udelay(1); -+} -+ -+static unsigned char -+e100_receive_mdio_bit() -+{ -+ unsigned char bit; -+ *R_NETWORK_MGM_CTRL = 0; -+ bit = IO_EXTRACT(R_NETWORK_STAT, mdio, *R_NETWORK_STAT); -+ udelay(1); -+ *R_NETWORK_MGM_CTRL = IO_MASK(R_NETWORK_MGM_CTRL, mdck); -+ udelay(1); -+ return bit; -+} -+ -+static void -+e100_reset_transceiver(struct net_device* dev) -+{ -+ struct net_local *np = netdev_priv(dev); -+ unsigned short cmd; -+ unsigned short data; -+ int bitCounter; -+ -+ data = e100_get_mdio_reg(dev, np->mii_if.phy_id, MII_BMCR); -+ -+ cmd = (MDIO_START << 14) | (MDIO_WRITE << 12) | (np->mii_if.phy_id << 7) | (MII_BMCR << 2); -+ -+ e100_send_mdio_cmd(cmd, 1); -+ -+ data |= 0x8000; -+ -+ for (bitCounter = 15; bitCounter >= 0 ; bitCounter--) { -+ e100_send_mdio_bit(GET_BIT(bitCounter, data)); -+ } -+} -+ -+/* Called by upper layers if they decide it took too long to complete -+ * sending a packet - we need to reset and stuff. -+ */ -+ -+static void -+e100_tx_timeout(struct net_device *dev) -+{ -+ struct net_local *np = netdev_priv(dev); -+ unsigned long flags; -+ -+ spin_lock_irqsave(&np->lock, flags); -+ -+ printk(KERN_WARNING "%s: transmit timed out, %s?\n", dev->name, -+ tx_done(dev) ? "IRQ problem" : "network cable problem"); -+ -+ /* remember we got an error */ -+ -+ np->stats.tx_errors++; -+ -+ /* reset the TX DMA in case it has hung on something */ -+ -+ RESET_DMA(NETWORK_TX_DMA_NBR); -+ WAIT_DMA(NETWORK_TX_DMA_NBR); -+ -+ /* Reset the transceiver. */ -+ -+ e100_reset_transceiver(dev); -+ -+ /* and get rid of the packets that never got an interrupt */ -+ while (myFirstTxDesc != myNextTxDesc) { -+ dev_kfree_skb(myFirstTxDesc->skb); -+ myFirstTxDesc->skb = 0; -+ myFirstTxDesc = phys_to_virt(myFirstTxDesc->descr.next); -+ } -+ -+ /* Set up transmit DMA channel so it can be restarted later */ -+ *R_DMA_CH0_FIRST = 0; -+ *R_DMA_CH0_DESCR = virt_to_phys(myLastTxDesc); -+ -+ /* tell the upper layers we're ok again */ -+ -+ netif_wake_queue(dev); -+ spin_unlock_irqrestore(&np->lock, flags); -+} -+ -+ -+/* This will only be invoked if the driver is _not_ in XOFF state. -+ * What this means is that we need not check it, and that this -+ * invariant will hold if we make sure that the netif_*_queue() -+ * calls are done at the proper times. -+ */ -+ -+static int -+e100_send_packet(struct sk_buff *skb, struct net_device *dev) -+{ -+ struct net_local *np = netdev_priv(dev); -+ unsigned char *buf = skb->data; -+ unsigned long flags; -+ -+#ifdef ETHDEBUG -+ printk("send packet len %d\n", length); -+#endif -+ spin_lock_irqsave(&np->lock, flags); /* protect from tx_interrupt and ourself */ -+ -+ myNextTxDesc->skb = skb; -+ -+ dev->trans_start = jiffies; -+ -+ e100_hardware_send_packet(np, buf, skb->len); -+ -+ myNextTxDesc = phys_to_virt(myNextTxDesc->descr.next); -+ -+ /* Stop queue if full */ -+ if (myNextTxDesc == myFirstTxDesc) { -+ netif_stop_queue(dev); -+ } -+ -+ spin_unlock_irqrestore(&np->lock, flags); -+ -+ return NETDEV_TX_OK; -+} -+ -+/* -+ * The typical workload of the driver: -+ * Handle the network interface interrupts. -+ */ -+ -+static irqreturn_t -+e100rxtx_interrupt(int irq, void *dev_id) -+{ -+ struct net_device *dev = (struct net_device *)dev_id; -+ struct net_local *np = netdev_priv(dev); -+ unsigned long irqbits; -+ -+ /* -+ * Note that both rx and tx interrupts are blocked at this point, -+ * regardless of which got us here. -+ */ -+ -+ irqbits = *R_IRQ_MASK2_RD; -+ -+ /* Handle received packets */ -+ if (irqbits & IO_STATE(R_IRQ_MASK2_RD, dma1_eop, active)) { -+ /* acknowledge the eop interrupt */ -+ -+ *R_DMA_CH1_CLR_INTR = IO_STATE(R_DMA_CH1_CLR_INTR, clr_eop, do); -+ -+ /* check if one or more complete packets were indeed received */ -+ -+ while ((*R_DMA_CH1_FIRST != virt_to_phys(myNextRxDesc)) && -+ (myNextRxDesc != myLastRxDesc)) { -+ /* Take out the buffer and give it to the OS, then -+ * allocate a new buffer to put a packet in. -+ */ -+ e100_rx(dev); -+ np->stats.rx_packets++; -+ /* restart/continue on the channel, for safety */ -+ *R_DMA_CH1_CMD = IO_STATE(R_DMA_CH1_CMD, cmd, restart); -+ /* clear dma channel 1 eop/descr irq bits */ -+ *R_DMA_CH1_CLR_INTR = -+ IO_STATE(R_DMA_CH1_CLR_INTR, clr_eop, do) | -+ IO_STATE(R_DMA_CH1_CLR_INTR, clr_descr, do); -+ -+ /* now, we might have gotten another packet -+ so we have to loop back and check if so */ -+ } -+ } -+ -+ /* Report any packets that have been sent */ -+ while (virt_to_phys(myFirstTxDesc) != *R_DMA_CH0_FIRST && -+ (netif_queue_stopped(dev) || myFirstTxDesc != myNextTxDesc)) { -+ np->stats.tx_bytes += myFirstTxDesc->skb->len; -+ np->stats.tx_packets++; -+ -+ /* dma is ready with the transmission of the data in tx_skb, so now -+ we can release the skb memory */ -+ dev_kfree_skb_irq(myFirstTxDesc->skb); -+ myFirstTxDesc->skb = 0; -+ myFirstTxDesc = phys_to_virt(myFirstTxDesc->descr.next); -+ /* Wake up queue. */ -+ netif_wake_queue(dev); -+ } -+ -+ if (irqbits & IO_STATE(R_IRQ_MASK2_RD, dma0_eop, active)) { -+ /* acknowledge the eop interrupt. */ -+ *R_DMA_CH0_CLR_INTR = IO_STATE(R_DMA_CH0_CLR_INTR, clr_eop, do); -+ } -+ -+ return IRQ_HANDLED; -+} -+ -+static irqreturn_t -+e100nw_interrupt(int irq, void *dev_id) -+{ -+ struct net_device *dev = (struct net_device *)dev_id; -+ struct net_local *np = netdev_priv(dev); -+ unsigned long irqbits = *R_IRQ_MASK0_RD; -+ -+ /* check for underrun irq */ -+ if (irqbits & IO_STATE(R_IRQ_MASK0_RD, underrun, active)) { -+ SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error, clr); -+ *R_NETWORK_TR_CTRL = network_tr_ctrl_shadow; -+ SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error, nop); -+ np->stats.tx_errors++; -+ D(printk("ethernet receiver underrun!\n")); -+ } -+ -+ /* check for overrun irq */ -+ if (irqbits & IO_STATE(R_IRQ_MASK0_RD, overrun, active)) { -+ update_rx_stats(&np->stats); /* this will ack the irq */ -+ D(printk("ethernet receiver overrun!\n")); -+ } -+ /* check for excessive collision irq */ -+ if (irqbits & IO_STATE(R_IRQ_MASK0_RD, excessive_col, active)) { -+ SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error, clr); -+ *R_NETWORK_TR_CTRL = network_tr_ctrl_shadow; -+ SETS(network_tr_ctrl_shadow, R_NETWORK_TR_CTRL, clr_error, nop); -+ np->stats.tx_errors++; -+ D(printk("ethernet excessive collisions!\n")); -+ } -+ return IRQ_HANDLED; -+} -+ -+/* We have a good packet(s), get it/them out of the buffers. */ -+static void -+e100_rx(struct net_device *dev) -+{ -+ struct sk_buff *skb; -+ int length = 0; -+ struct net_local *np = netdev_priv(dev); -+ unsigned char *skb_data_ptr; -+#ifdef ETHDEBUG -+ int i; -+#endif -+ etrax_eth_descr *prevRxDesc; /* The descriptor right before myNextRxDesc */ -+ spin_lock(&np->led_lock); -+ if (!led_active && time_after(jiffies, led_next_time)) { -+ /* light the network leds depending on the current speed. */ -+ e100_set_network_leds(NETWORK_ACTIVITY); -+ -+ /* Set the earliest time we may clear the LED */ -+ led_next_time = jiffies + NET_FLASH_TIME; -+ led_active = 1; -+ mod_timer(&clear_led_timer, jiffies + HZ/10); -+ } -+ spin_unlock(&np->led_lock); -+ -+ length = myNextRxDesc->descr.hw_len - 4; -+ np->stats.rx_bytes += length; -+ -+#ifdef ETHDEBUG -+ printk("Got a packet of length %d:\n", length); -+ /* dump the first bytes in the packet */ -+ skb_data_ptr = (unsigned char *)phys_to_virt(myNextRxDesc->descr.buf); -+ for (i = 0; i < 8; i++) { -+ printk("%d: %.2x %.2x %.2x %.2x %.2x %.2x %.2x %.2x\n", i * 8, -+ skb_data_ptr[0],skb_data_ptr[1],skb_data_ptr[2],skb_data_ptr[3], -+ skb_data_ptr[4],skb_data_ptr[5],skb_data_ptr[6],skb_data_ptr[7]); -+ skb_data_ptr += 8; -+ } -+#endif -+ -+ if (length < RX_COPYBREAK) { -+ /* Small packet, copy data */ -+ skb = dev_alloc_skb(length - ETHER_HEAD_LEN); -+ if (!skb) { -+ np->stats.rx_errors++; -+ printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n", dev->name); -+ goto update_nextrxdesc; -+ } -+ -+ skb_put(skb, length - ETHER_HEAD_LEN); /* allocate room for the packet body */ -+ skb_data_ptr = skb_push(skb, ETHER_HEAD_LEN); /* allocate room for the header */ -+ -+#ifdef ETHDEBUG -+ printk("head = 0x%x, data = 0x%x, tail = 0x%x, end = 0x%x\n", -+ skb->head, skb->data, skb_tail_pointer(skb), -+ skb_end_pointer(skb)); -+ printk("copying packet to 0x%x.\n", skb_data_ptr); -+#endif -+ -+ memcpy(skb_data_ptr, phys_to_virt(myNextRxDesc->descr.buf), length); -+ } -+ else { -+ /* Large packet, send directly to upper layers and allocate new -+ * memory (aligned to cache line boundary to avoid bug). -+ * Before sending the skb to upper layers we must make sure -+ * that skb->data points to the aligned start of the packet. -+ */ -+ int align; -+ struct sk_buff *new_skb = dev_alloc_skb(MAX_MEDIA_DATA_SIZE + 2 * L1_CACHE_BYTES); -+ if (!new_skb) { -+ np->stats.rx_errors++; -+ printk(KERN_NOTICE "%s: Memory squeeze, dropping packet.\n", dev->name); -+ goto update_nextrxdesc; -+ } -+ skb = myNextRxDesc->skb; -+ align = (int)phys_to_virt(myNextRxDesc->descr.buf) - (int)skb->data; -+ skb_put(skb, length + align); -+ skb_pull(skb, align); /* Remove alignment bytes */ -+ myNextRxDesc->skb = new_skb; -+ myNextRxDesc->descr.buf = L1_CACHE_ALIGN(virt_to_phys(myNextRxDesc->skb->data)); -+ } -+ -+ skb->protocol = eth_type_trans(skb, dev); -+ -+ /* Send the packet to the upper layers */ -+ netif_rx(skb); -+ -+ update_nextrxdesc: -+ /* Prepare for next packet */ -+ myNextRxDesc->descr.status = 0; -+ prevRxDesc = myNextRxDesc; -+ myNextRxDesc = phys_to_virt(myNextRxDesc->descr.next); -+ -+ rx_queue_len++; -+ -+ /* Check if descriptors should be returned */ -+ if (rx_queue_len == RX_QUEUE_THRESHOLD) { -+ flush_etrax_cache(); -+ prevRxDesc->descr.ctrl |= d_eol; -+ myLastRxDesc->descr.ctrl &= ~d_eol; -+ myLastRxDesc = prevRxDesc; -+ rx_queue_len = 0; -+ } -+} -+ -+/* The inverse routine to net_open(). */ -+static int -+e100_close(struct net_device *dev) -+{ -+ struct net_local *np = netdev_priv(dev); -+ -+ printk(KERN_INFO "Closing %s.\n", dev->name); -+ -+ netif_stop_queue(dev); -+ -+ *R_IRQ_MASK0_CLR = -+ IO_STATE(R_IRQ_MASK0_CLR, overrun, clr) | -+ IO_STATE(R_IRQ_MASK0_CLR, underrun, clr) | -+ IO_STATE(R_IRQ_MASK0_CLR, excessive_col, clr); -+ -+ *R_IRQ_MASK2_CLR = -+ IO_STATE(R_IRQ_MASK2_CLR, dma0_descr, clr) | -+ IO_STATE(R_IRQ_MASK2_CLR, dma0_eop, clr) | -+ IO_STATE(R_IRQ_MASK2_CLR, dma1_descr, clr) | -+ IO_STATE(R_IRQ_MASK2_CLR, dma1_eop, clr); -+ -+ /* Stop the receiver and the transmitter */ -+ -+ RESET_DMA(NETWORK_TX_DMA_NBR); -+ RESET_DMA(NETWORK_RX_DMA_NBR); -+ -+ /* Flush the Tx and disable Rx here. */ -+ -+ free_irq(NETWORK_DMA_RX_IRQ_NBR, (void *)dev); -+ free_irq(NETWORK_DMA_TX_IRQ_NBR, (void *)dev); -+ free_irq(NETWORK_STATUS_IRQ_NBR, (void *)dev); -+ -+ cris_free_dma(NETWORK_TX_DMA_NBR, cardname); -+ cris_free_dma(NETWORK_RX_DMA_NBR, cardname); -+ -+ /* Update the statistics here. */ -+ -+ update_rx_stats(&np->stats); -+ update_tx_stats(&np->stats); -+ -+ /* Stop speed/duplex timers */ -+ del_timer(&speed_timer); -+ del_timer(&duplex_timer); -+ -+ return 0; -+} -+ -+static int -+e100_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) -+{ -+ struct mii_ioctl_data *data = if_mii(ifr); -+ struct net_local *np = netdev_priv(dev); -+ int rc = 0; -+ int old_autoneg; -+ -+ spin_lock(&np->lock); /* Preempt protection */ -+ switch (cmd) { -+ /* The ioctls below should be considered obsolete but are */ -+ /* still present for compatability with old scripts/apps */ -+ case SET_ETH_SPEED_10: /* 10 Mbps */ -+ e100_set_speed(dev, 10); -+ break; -+ case SET_ETH_SPEED_100: /* 100 Mbps */ -+ e100_set_speed(dev, 100); -+ break; -+ case SET_ETH_SPEED_AUTO: /* Auto-negotiate speed */ -+ e100_set_speed(dev, 0); -+ break; -+ case SET_ETH_DUPLEX_HALF: /* Half duplex */ -+ e100_set_duplex(dev, half); -+ break; -+ case SET_ETH_DUPLEX_FULL: /* Full duplex */ -+ e100_set_duplex(dev, full); -+ break; -+ case SET_ETH_DUPLEX_AUTO: /* Auto-negotiate duplex */ -+ e100_set_duplex(dev, autoneg); -+ break; -+ case SET_ETH_AUTONEG: -+ old_autoneg = autoneg_normal; -+ autoneg_normal = *(int*)data; -+ if (autoneg_normal != old_autoneg) -+ e100_negotiate(dev); -+ break; -+ default: -+ rc = generic_mii_ioctl(&np->mii_if, if_mii(ifr), -+ cmd, NULL); -+ break; -+ } -+ spin_unlock(&np->lock); -+ return rc; -+} -+ -+static int e100_get_settings(struct net_device *dev, -+ struct ethtool_cmd *cmd) -+{ -+ struct net_local *np = netdev_priv(dev); -+ int err; -+ -+ spin_lock_irq(&np->lock); -+ err = mii_ethtool_gset(&np->mii_if, cmd); -+ spin_unlock_irq(&np->lock); -+ -+ /* The PHY may support 1000baseT, but the Etrax100 does not. */ -+ cmd->supported &= ~(SUPPORTED_1000baseT_Half -+ | SUPPORTED_1000baseT_Full); -+ return err; -+} -+ -+static int e100_set_settings(struct net_device *dev, -+ struct ethtool_cmd *ecmd) -+{ -+ if (ecmd->autoneg == AUTONEG_ENABLE) { -+ e100_set_duplex(dev, autoneg); -+ e100_set_speed(dev, 0); -+ } else { -+ e100_set_duplex(dev, ecmd->duplex == DUPLEX_HALF ? half : full); -+ e100_set_speed(dev, ecmd->speed == SPEED_10 ? 10: 100); -+ } -+ -+ return 0; -+} -+ -+static void e100_get_drvinfo(struct net_device *dev, -+ struct ethtool_drvinfo *info) -+{ -+ strncpy(info->driver, "ETRAX 100LX", sizeof(info->driver) - 1); -+ strncpy(info->version, "$Revision: 1.31 $", sizeof(info->version) - 1); -+ strncpy(info->fw_version, "N/A", sizeof(info->fw_version) - 1); -+ strncpy(info->bus_info, "N/A", sizeof(info->bus_info) - 1); -+} -+ -+static int e100_nway_reset(struct net_device *dev) -+{ -+ if (current_duplex == autoneg && current_speed_selection == 0) -+ e100_negotiate(dev); -+ return 0; -+} -+ -+static const struct ethtool_ops e100_ethtool_ops = { -+ .get_settings = e100_get_settings, -+ .set_settings = e100_set_settings, -+ .get_drvinfo = e100_get_drvinfo, -+ .nway_reset = e100_nway_reset, -+ .get_link = ethtool_op_get_link, -+}; -+ -+static int -+e100_set_config(struct net_device *dev, struct ifmap *map) -+{ -+ struct net_local *np = netdev_priv(dev); -+ -+ spin_lock(&np->lock); /* Preempt protection */ -+ -+ switch(map->port) { -+ case IF_PORT_UNKNOWN: -+ /* Use autoneg */ -+ e100_set_speed(dev, 0); -+ e100_set_duplex(dev, autoneg); -+ break; -+ case IF_PORT_10BASET: -+ e100_set_speed(dev, 10); -+ e100_set_duplex(dev, autoneg); -+ break; -+ case IF_PORT_100BASET: -+ case IF_PORT_100BASETX: -+ e100_set_speed(dev, 100); -+ e100_set_duplex(dev, autoneg); -+ break; -+ case IF_PORT_100BASEFX: -+ case IF_PORT_10BASE2: -+ case IF_PORT_AUI: -+ spin_unlock(&np->lock); -+ return -EOPNOTSUPP; -+ break; -+ default: -+ printk(KERN_ERR "%s: Invalid media selected", dev->name); -+ spin_unlock(&np->lock); -+ return -EINVAL; -+ } -+ spin_unlock(&np->lock); -+ return 0; -+} -+ -+static void -+update_rx_stats(struct net_device_stats *es) -+{ -+ unsigned long r = *R_REC_COUNTERS; -+ /* update stats relevant to reception errors */ -+ es->rx_fifo_errors += IO_EXTRACT(R_REC_COUNTERS, congestion, r); -+ es->rx_crc_errors += IO_EXTRACT(R_REC_COUNTERS, crc_error, r); -+ es->rx_frame_errors += IO_EXTRACT(R_REC_COUNTERS, alignment_error, r); -+ es->rx_length_errors += IO_EXTRACT(R_REC_COUNTERS, oversize, r); -+} -+ -+static void -+update_tx_stats(struct net_device_stats *es) -+{ -+ unsigned long r = *R_TR_COUNTERS; -+ /* update stats relevant to transmission errors */ -+ es->collisions += -+ IO_EXTRACT(R_TR_COUNTERS, single_col, r) + -+ IO_EXTRACT(R_TR_COUNTERS, multiple_col, r); -+} -+ -+/* -+ * Get the current statistics. -+ * This may be called with the card open or closed. -+ */ -+static struct net_device_stats * -+e100_get_stats(struct net_device *dev) -+{ -+ struct net_local *lp = netdev_priv(dev); -+ unsigned long flags; -+ -+ spin_lock_irqsave(&lp->lock, flags); -+ -+ update_rx_stats(&lp->stats); -+ update_tx_stats(&lp->stats); -+ -+ spin_unlock_irqrestore(&lp->lock, flags); -+ return &lp->stats; -+} -+ -+/* -+ * Set or clear the multicast filter for this adaptor. -+ * num_addrs == -1 Promiscuous mode, receive all packets -+ * num_addrs == 0 Normal mode, clear multicast list -+ * num_addrs > 0 Multicast mode, receive normal and MC packets, -+ * and do best-effort filtering. -+ */ -+static void -+set_multicast_list(struct net_device *dev) -+{ -+ struct net_local *lp = netdev_priv(dev); -+ int num_addr = dev->mc_count; -+ unsigned long int lo_bits; -+ unsigned long int hi_bits; -+ -+ spin_lock(&lp->lock); -+ if (dev->flags & IFF_PROMISC) { -+ /* promiscuous mode */ -+ lo_bits = 0xfffffffful; -+ hi_bits = 0xfffffffful; -+ -+ /* Enable individual receive */ -+ SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG, individual, receive); -+ *R_NETWORK_REC_CONFIG = network_rec_config_shadow; -+ } else if (dev->flags & IFF_ALLMULTI) { -+ /* enable all multicasts */ -+ lo_bits = 0xfffffffful; -+ hi_bits = 0xfffffffful; -+ -+ /* Disable individual receive */ -+ SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG, individual, discard); -+ *R_NETWORK_REC_CONFIG = network_rec_config_shadow; -+ } else if (num_addr == 0) { -+ /* Normal, clear the mc list */ -+ lo_bits = 0x00000000ul; -+ hi_bits = 0x00000000ul; -+ -+ /* Disable individual receive */ -+ SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG, individual, discard); -+ *R_NETWORK_REC_CONFIG = network_rec_config_shadow; -+ } else { -+ /* MC mode, receive normal and MC packets */ -+ char hash_ix; -+ struct dev_mc_list *dmi = dev->mc_list; -+ int i; -+ char *baddr; -+ -+ lo_bits = 0x00000000ul; -+ hi_bits = 0x00000000ul; -+ for (i = 0; i < num_addr; i++) { -+ /* Calculate the hash index for the GA registers */ -+ -+ hash_ix = 0; -+ baddr = dmi->dmi_addr; -+ hash_ix ^= (*baddr) & 0x3f; -+ hash_ix ^= ((*baddr) >> 6) & 0x03; -+ ++baddr; -+ hash_ix ^= ((*baddr) << 2) & 0x03c; -+ hash_ix ^= ((*baddr) >> 4) & 0xf; -+ ++baddr; -+ hash_ix ^= ((*baddr) << 4) & 0x30; -+ hash_ix ^= ((*baddr) >> 2) & 0x3f; -+ ++baddr; -+ hash_ix ^= (*baddr) & 0x3f; -+ hash_ix ^= ((*baddr) >> 6) & 0x03; -+ ++baddr; -+ hash_ix ^= ((*baddr) << 2) & 0x03c; -+ hash_ix ^= ((*baddr) >> 4) & 0xf; -+ ++baddr; -+ hash_ix ^= ((*baddr) << 4) & 0x30; -+ hash_ix ^= ((*baddr) >> 2) & 0x3f; -+ -+ hash_ix &= 0x3f; -+ -+ if (hash_ix >= 32) { -+ hi_bits |= (1 << (hash_ix-32)); -+ } else { -+ lo_bits |= (1 << hash_ix); -+ } -+ dmi = dmi->next; -+ } -+ /* Disable individual receive */ -+ SETS(network_rec_config_shadow, R_NETWORK_REC_CONFIG, individual, discard); -+ *R_NETWORK_REC_CONFIG = network_rec_config_shadow; -+ } -+ *R_NETWORK_GA_0 = lo_bits; -+ *R_NETWORK_GA_1 = hi_bits; -+ spin_unlock(&lp->lock); -+} -+ -+void -+e100_hardware_send_packet(struct net_local *np, char *buf, int length) -+{ -+ D(printk("e100 send pack, buf 0x%x len %d\n", buf, length)); -+ -+ spin_lock(&np->led_lock); -+ if (!led_active && time_after(jiffies, led_next_time)) { -+ /* light the network leds depending on the current speed. */ -+ e100_set_network_leds(NETWORK_ACTIVITY); -+ -+ /* Set the earliest time we may clear the LED */ -+ led_next_time = jiffies + NET_FLASH_TIME; -+ led_active = 1; -+ mod_timer(&clear_led_timer, jiffies + HZ/10); -+ } -+ spin_unlock(&np->led_lock); -+ -+ /* configure the tx dma descriptor */ -+ myNextTxDesc->descr.sw_len = length; -+ myNextTxDesc->descr.ctrl = d_eop | d_eol | d_wait; -+ myNextTxDesc->descr.buf = virt_to_phys(buf); -+ -+ /* Move end of list */ -+ myLastTxDesc->descr.ctrl &= ~d_eol; -+ myLastTxDesc = myNextTxDesc; -+ -+ /* Restart DMA channel */ -+ *R_DMA_CH0_CMD = IO_STATE(R_DMA_CH0_CMD, cmd, restart); -+} -+ -+static void -+e100_clear_network_leds(unsigned long dummy) -+{ -+ struct net_device *dev = (struct net_device *)dummy; -+ struct net_local *np = netdev_priv(dev); -+ -+ spin_lock(&np->led_lock); -+ -+ if (led_active && time_after(jiffies, led_next_time)) { -+ e100_set_network_leds(NO_NETWORK_ACTIVITY); -+ -+ /* Set the earliest time we may set the LED */ -+ led_next_time = jiffies + NET_FLASH_PAUSE; -+ led_active = 0; -+ } -+ -+ spin_unlock(&np->led_lock); -+} -+ -+static void -+e100_set_network_leds(int active) -+{ -+#if defined(CONFIG_ETRAX_NETWORK_LED_ON_WHEN_LINK) -+ int light_leds = (active == NO_NETWORK_ACTIVITY); -+#elif defined(CONFIG_ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY) -+ int light_leds = (active == NETWORK_ACTIVITY); -+#else -+#error "Define either CONFIG_ETRAX_NETWORK_LED_ON_WHEN_LINK or CONFIG_ETRAX_NETWORK_LED_ON_WHEN_ACTIVITY" -+#endif -+ -+ if (!current_speed) { -+ /* Make LED red, link is down */ -+#if defined(CONFIG_ETRAX_NETWORK_RED_ON_NO_CONNECTION) -+ CRIS_LED_NETWORK_SET(CRIS_LED_RED); -+#else -+ CRIS_LED_NETWORK_SET(CRIS_LED_OFF); -+#endif -+ } else if (light_leds) { -+ if (current_speed == 10) { -+ CRIS_LED_NETWORK_SET(CRIS_LED_ORANGE); -+ } else { -+ CRIS_LED_NETWORK_SET(CRIS_LED_GREEN); -+ } -+ } else { -+ CRIS_LED_NETWORK_SET(CRIS_LED_OFF); -+ } -+} -+ -+#ifdef CONFIG_NET_POLL_CONTROLLER -+static void -+e100_netpoll(struct net_device* netdev) -+{ -+ e100rxtx_interrupt(NETWORK_DMA_TX_IRQ_NBR, netdev, NULL); -+} -+#endif -+ -+static int -+etrax_init_module(void) -+{ -+ return etrax_ethernet_init(); -+} -+ -+static int __init -+e100_boot_setup(char* str) -+{ -+ struct sockaddr sa = {0}; -+ int i; -+ -+ /* Parse the colon separated Ethernet station address */ -+ for (i = 0; i < ETH_ALEN; i++) { -+ unsigned int tmp; -+ if (sscanf(str + 3*i, "%2x", &tmp) != 1) { -+ printk(KERN_WARNING "Malformed station address"); -+ return 0; -+ } -+ sa.sa_data[i] = (char)tmp; -+ } -+ -+ default_mac = sa; -+ return 1; -+} -+ -+__setup("etrax100_eth=", e100_boot_setup); -+ -+module_init(etrax_init_module); -diff -Nur linux-2.6.32.orig/drivers/serial/crisv10.c linux-2.6.32/drivers/serial/crisv10.c ---- linux-2.6.32.orig/drivers/serial/crisv10.c 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/drivers/serial/crisv10.c 2010-01-10 13:41:59.276309474 +0100 -@@ -13,6 +13,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -27,6 +28,7 @@ - #include - #include - #include -+#include - #include - #include - #include -@@ -4415,6 +4417,7 @@ - #endif - }; - -+static struct class *rs_class; - static int __init rs_init(void) - { - int i; -@@ -4548,6 +4551,24 @@ - #endif - #endif /* CONFIG_SVINTO_SIM */ - -+ rs_class = class_create(THIS_MODULE, "rs_tty"); -+#ifdef CONFIG_ETRAX_SERIAL_PORT0 -+ device_create(rs_class, NULL, -+ MKDEV(TTY_MAJOR, 64), NULL, "ttyS0"); -+#endif -+#ifdef CONFIG_ETRAX_SERIAL_PORT1 -+ device_create(rs_class, NULL, -+ MKDEV(TTY_MAJOR, 65), NULL, "ttyS1"); -+#endif -+#ifdef CONFIG_ETRAX_SERIAL_PORT2 -+ device_create(rs_class, NULL, -+ MKDEV(TTY_MAJOR, 66), NULL, "ttyS2"); -+#endif -+#ifdef CONFIG_ETRAX_SERIAL_PORT3 -+ device_create(rs_class, NULL, -+ MKDEV(TTY_MAJOR, 67), NULL, "ttyS3"); -+#endif -+ - return 0; - } - -diff -Nur linux-2.6.32.orig/drivers/serial/crisv10.c.orig linux-2.6.32/drivers/serial/crisv10.c.orig ---- linux-2.6.32.orig/drivers/serial/crisv10.c.orig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.32/drivers/serial/crisv10.c.orig 2009-12-03 04:51:21.000000000 +0100 -@@ -0,0 +1,4556 @@ -+/* -+ * Serial port driver for the ETRAX 100LX chip -+ * -+ * Copyright (C) 1998-2007 Axis Communications AB -+ * -+ * Many, many authors. Based once upon a time on serial.c for 16x50. -+ * -+ */ -+ -+static char *serial_version = "$Revision: 1.25 $"; -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+#include -+ -+/* non-arch dependent serial structures are in linux/serial.h */ -+#include -+/* while we keep our own stuff (struct e100_serial) in a local .h file */ -+#include "crisv10.h" -+#include -+#include -+ -+#ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER -+#ifndef CONFIG_ETRAX_FAST_TIMER -+#error "Enable FAST_TIMER to use SERIAL_FAST_TIMER" -+#endif -+#endif -+ -+#if defined(CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS) && \ -+ (CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS == 0) -+#error "RX_TIMEOUT_TICKS == 0 not allowed, use 1" -+#endif -+ -+#if defined(CONFIG_ETRAX_RS485_ON_PA) && defined(CONFIG_ETRAX_RS485_ON_PORT_G) -+#error "Disable either CONFIG_ETRAX_RS485_ON_PA or CONFIG_ETRAX_RS485_ON_PORT_G" -+#endif -+ -+/* -+ * All of the compatibilty code so we can compile serial.c against -+ * older kernels is hidden in serial_compat.h -+ */ -+#if defined(LOCAL_HEADERS) -+#include "serial_compat.h" -+#endif -+ -+struct tty_driver *serial_driver; -+ -+/* number of characters left in xmit buffer before we ask for more */ -+#define WAKEUP_CHARS 256 -+ -+//#define SERIAL_DEBUG_INTR -+//#define SERIAL_DEBUG_OPEN -+//#define SERIAL_DEBUG_FLOW -+//#define SERIAL_DEBUG_DATA -+//#define SERIAL_DEBUG_THROTTLE -+//#define SERIAL_DEBUG_IO /* Debug for Extra control and status pins */ -+//#define SERIAL_DEBUG_LINE 0 /* What serport we want to debug */ -+ -+/* Enable this to use serial interrupts to handle when you -+ expect the first received event on the serial port to -+ be an error, break or similar. Used to be able to flash IRMA -+ from eLinux */ -+#define SERIAL_HANDLE_EARLY_ERRORS -+ -+/* Currently 16 descriptors x 128 bytes = 2048 bytes */ -+#define SERIAL_DESCR_BUF_SIZE 256 -+ -+#define SERIAL_PRESCALE_BASE 3125000 /* 3.125MHz */ -+#define DEF_BAUD_BASE SERIAL_PRESCALE_BASE -+ -+/* We don't want to load the system with massive fast timer interrupt -+ * on high baudrates so limit it to 250 us (4kHz) */ -+#define MIN_FLUSH_TIME_USEC 250 -+ -+/* Add an x here to log a lot of timer stuff */ -+#define TIMERD(x) -+/* Debug details of interrupt handling */ -+#define DINTR1(x) /* irq on/off, errors */ -+#define DINTR2(x) /* tx and rx */ -+/* Debug flip buffer stuff */ -+#define DFLIP(x) -+/* Debug flow control and overview of data flow */ -+#define DFLOW(x) -+#define DBAUD(x) -+#define DLOG_INT_TRIG(x) -+ -+//#define DEBUG_LOG_INCLUDED -+#ifndef DEBUG_LOG_INCLUDED -+#define DEBUG_LOG(line, string, value) -+#else -+struct debug_log_info -+{ -+ unsigned long time; -+ unsigned long timer_data; -+// int line; -+ const char *string; -+ int value; -+}; -+#define DEBUG_LOG_SIZE 4096 -+ -+struct debug_log_info debug_log[DEBUG_LOG_SIZE]; -+int debug_log_pos = 0; -+ -+#define DEBUG_LOG(_line, _string, _value) do { \ -+ if ((_line) == SERIAL_DEBUG_LINE) {\ -+ debug_log_func(_line, _string, _value); \ -+ }\ -+}while(0) -+ -+void debug_log_func(int line, const char *string, int value) -+{ -+ if (debug_log_pos < DEBUG_LOG_SIZE) { -+ debug_log[debug_log_pos].time = jiffies; -+ debug_log[debug_log_pos].timer_data = *R_TIMER_DATA; -+// debug_log[debug_log_pos].line = line; -+ debug_log[debug_log_pos].string = string; -+ debug_log[debug_log_pos].value = value; -+ debug_log_pos++; -+ } -+ /*printk(string, value);*/ -+} -+#endif -+ -+#ifndef CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS -+/* Default number of timer ticks before flushing rx fifo -+ * When using "little data, low latency applications: use 0 -+ * When using "much data applications (PPP)" use ~5 -+ */ -+#define CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS 5 -+#endif -+ -+unsigned long timer_data_to_ns(unsigned long timer_data); -+ -+static void change_speed(struct e100_serial *info); -+static void rs_throttle(struct tty_struct * tty); -+static void rs_wait_until_sent(struct tty_struct *tty, int timeout); -+static int rs_write(struct tty_struct *tty, -+ const unsigned char *buf, int count); -+#ifdef CONFIG_ETRAX_RS485 -+static int e100_write_rs485(struct tty_struct *tty, -+ const unsigned char *buf, int count); -+#endif -+static int get_lsr_info(struct e100_serial *info, unsigned int *value); -+ -+ -+#define DEF_BAUD 115200 /* 115.2 kbit/s */ -+#define STD_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST) -+#define DEF_RX 0x20 /* or SERIAL_CTRL_W >> 8 */ -+/* Default value of tx_ctrl register: has txd(bit 7)=1 (idle) as default */ -+#define DEF_TX 0x80 /* or SERIAL_CTRL_B */ -+ -+/* offsets from R_SERIALx_CTRL */ -+ -+#define REG_DATA 0 -+#define REG_DATA_STATUS32 0 /* this is the 32 bit register R_SERIALx_READ */ -+#define REG_TR_DATA 0 -+#define REG_STATUS 1 -+#define REG_TR_CTRL 1 -+#define REG_REC_CTRL 2 -+#define REG_BAUD 3 -+#define REG_XOFF 4 /* this is a 32 bit register */ -+ -+/* The bitfields are the same for all serial ports */ -+#define SER_RXD_MASK IO_MASK(R_SERIAL0_STATUS, rxd) -+#define SER_DATA_AVAIL_MASK IO_MASK(R_SERIAL0_STATUS, data_avail) -+#define SER_FRAMING_ERR_MASK IO_MASK(R_SERIAL0_STATUS, framing_err) -+#define SER_PAR_ERR_MASK IO_MASK(R_SERIAL0_STATUS, par_err) -+#define SER_OVERRUN_MASK IO_MASK(R_SERIAL0_STATUS, overrun) -+ -+#define SER_ERROR_MASK (SER_OVERRUN_MASK | SER_PAR_ERR_MASK | SER_FRAMING_ERR_MASK) -+ -+/* Values for info->errorcode */ -+#define ERRCODE_SET_BREAK (TTY_BREAK) -+#define ERRCODE_INSERT 0x100 -+#define ERRCODE_INSERT_BREAK (ERRCODE_INSERT | TTY_BREAK) -+ -+#define FORCE_EOP(info) *R_SET_EOP = 1U << info->iseteop; -+ -+/* -+ * General note regarding the use of IO_* macros in this file: -+ * -+ * We will use the bits defined for DMA channel 6 when using various -+ * IO_* macros (e.g. IO_STATE, IO_MASK, IO_EXTRACT) and _assume_ they are -+ * the same for all channels (which of course they are). -+ * -+ * We will also use the bits defined for serial port 0 when writing commands -+ * to the different ports, as these bits too are the same for all ports. -+ */ -+ -+ -+/* Mask for the irqs possibly enabled in R_IRQ_MASK1_RD etc. */ -+static const unsigned long e100_ser_int_mask = 0 -+#ifdef CONFIG_ETRAX_SERIAL_PORT0 -+| IO_MASK(R_IRQ_MASK1_RD, ser0_data) | IO_MASK(R_IRQ_MASK1_RD, ser0_ready) -+#endif -+#ifdef CONFIG_ETRAX_SERIAL_PORT1 -+| IO_MASK(R_IRQ_MASK1_RD, ser1_data) | IO_MASK(R_IRQ_MASK1_RD, ser1_ready) -+#endif -+#ifdef CONFIG_ETRAX_SERIAL_PORT2 -+| IO_MASK(R_IRQ_MASK1_RD, ser2_data) | IO_MASK(R_IRQ_MASK1_RD, ser2_ready) -+#endif -+#ifdef CONFIG_ETRAX_SERIAL_PORT3 -+| IO_MASK(R_IRQ_MASK1_RD, ser3_data) | IO_MASK(R_IRQ_MASK1_RD, ser3_ready) -+#endif -+; -+unsigned long r_alt_ser_baudrate_shadow = 0; -+ -+/* this is the data for the four serial ports in the etrax100 */ -+/* DMA2(ser2), DMA4(ser3), DMA6(ser0) or DMA8(ser1) */ -+/* R_DMA_CHx_CLR_INTR, R_DMA_CHx_FIRST, R_DMA_CHx_CMD */ -+ -+static struct e100_serial rs_table[] = { -+ { .baud = DEF_BAUD, -+ .ioport = (unsigned char *)R_SERIAL0_CTRL, -+ .irq = 1U << 12, /* uses DMA 6 and 7 */ -+ .oclrintradr = R_DMA_CH6_CLR_INTR, -+ .ofirstadr = R_DMA_CH6_FIRST, -+ .ocmdadr = R_DMA_CH6_CMD, -+ .ostatusadr = R_DMA_CH6_STATUS, -+ .iclrintradr = R_DMA_CH7_CLR_INTR, -+ .ifirstadr = R_DMA_CH7_FIRST, -+ .icmdadr = R_DMA_CH7_CMD, -+ .idescradr = R_DMA_CH7_DESCR, -+ .flags = STD_FLAGS, -+ .rx_ctrl = DEF_RX, -+ .tx_ctrl = DEF_TX, -+ .iseteop = 2, -+ .dma_owner = dma_ser0, -+ .io_if = if_serial_0, -+#ifdef CONFIG_ETRAX_SERIAL_PORT0 -+ .enabled = 1, -+#ifdef CONFIG_ETRAX_SERIAL_PORT0_DMA6_OUT -+ .dma_out_enabled = 1, -+ .dma_out_nbr = SER0_TX_DMA_NBR, -+ .dma_out_irq_nbr = SER0_DMA_TX_IRQ_NBR, -+ .dma_out_irq_flags = IRQF_DISABLED, -+ .dma_out_irq_description = "serial 0 dma tr", -+#else -+ .dma_out_enabled = 0, -+ .dma_out_nbr = UINT_MAX, -+ .dma_out_irq_nbr = 0, -+ .dma_out_irq_flags = 0, -+ .dma_out_irq_description = NULL, -+#endif -+#ifdef CONFIG_ETRAX_SERIAL_PORT0_DMA7_IN -+ .dma_in_enabled = 1, -+ .dma_in_nbr = SER0_RX_DMA_NBR, -+ .dma_in_irq_nbr = SER0_DMA_RX_IRQ_NBR, -+ .dma_in_irq_flags = IRQF_DISABLED, -+ .dma_in_irq_description = "serial 0 dma rec", -+#else -+ .dma_in_enabled = 0, -+ .dma_in_nbr = UINT_MAX, -+ .dma_in_irq_nbr = 0, -+ .dma_in_irq_flags = 0, -+ .dma_in_irq_description = NULL, -+#endif -+#else -+ .enabled = 0, -+ .io_if_description = NULL, -+ .dma_out_enabled = 0, -+ .dma_in_enabled = 0 -+#endif -+ -+}, /* ttyS0 */ -+#ifndef CONFIG_SVINTO_SIM -+ { .baud = DEF_BAUD, -+ .ioport = (unsigned char *)R_SERIAL1_CTRL, -+ .irq = 1U << 16, /* uses DMA 8 and 9 */ -+ .oclrintradr = R_DMA_CH8_CLR_INTR, -+ .ofirstadr = R_DMA_CH8_FIRST, -+ .ocmdadr = R_DMA_CH8_CMD, -+ .ostatusadr = R_DMA_CH8_STATUS, -+ .iclrintradr = R_DMA_CH9_CLR_INTR, -+ .ifirstadr = R_DMA_CH9_FIRST, -+ .icmdadr = R_DMA_CH9_CMD, -+ .idescradr = R_DMA_CH9_DESCR, -+ .flags = STD_FLAGS, -+ .rx_ctrl = DEF_RX, -+ .tx_ctrl = DEF_TX, -+ .iseteop = 3, -+ .dma_owner = dma_ser1, -+ .io_if = if_serial_1, -+#ifdef CONFIG_ETRAX_SERIAL_PORT1 -+ .enabled = 1, -+ .io_if_description = "ser1", -+#ifdef CONFIG_ETRAX_SERIAL_PORT1_DMA8_OUT -+ .dma_out_enabled = 1, -+ .dma_out_nbr = SER1_TX_DMA_NBR, -+ .dma_out_irq_nbr = SER1_DMA_TX_IRQ_NBR, -+ .dma_out_irq_flags = IRQF_DISABLED, -+ .dma_out_irq_description = "serial 1 dma tr", -+#else -+ .dma_out_enabled = 0, -+ .dma_out_nbr = UINT_MAX, -+ .dma_out_irq_nbr = 0, -+ .dma_out_irq_flags = 0, -+ .dma_out_irq_description = NULL, -+#endif -+#ifdef CONFIG_ETRAX_SERIAL_PORT1_DMA9_IN -+ .dma_in_enabled = 1, -+ .dma_in_nbr = SER1_RX_DMA_NBR, -+ .dma_in_irq_nbr = SER1_DMA_RX_IRQ_NBR, -+ .dma_in_irq_flags = IRQF_DISABLED, -+ .dma_in_irq_description = "serial 1 dma rec", -+#else -+ .dma_in_enabled = 0, -+ .dma_in_enabled = 0, -+ .dma_in_nbr = UINT_MAX, -+ .dma_in_irq_nbr = 0, -+ .dma_in_irq_flags = 0, -+ .dma_in_irq_description = NULL, -+#endif -+#else -+ .enabled = 0, -+ .io_if_description = NULL, -+ .dma_in_irq_nbr = 0, -+ .dma_out_enabled = 0, -+ .dma_in_enabled = 0 -+#endif -+}, /* ttyS1 */ -+ -+ { .baud = DEF_BAUD, -+ .ioport = (unsigned char *)R_SERIAL2_CTRL, -+ .irq = 1U << 4, /* uses DMA 2 and 3 */ -+ .oclrintradr = R_DMA_CH2_CLR_INTR, -+ .ofirstadr = R_DMA_CH2_FIRST, -+ .ocmdadr = R_DMA_CH2_CMD, -+ .ostatusadr = R_DMA_CH2_STATUS, -+ .iclrintradr = R_DMA_CH3_CLR_INTR, -+ .ifirstadr = R_DMA_CH3_FIRST, -+ .icmdadr = R_DMA_CH3_CMD, -+ .idescradr = R_DMA_CH3_DESCR, -+ .flags = STD_FLAGS, -+ .rx_ctrl = DEF_RX, -+ .tx_ctrl = DEF_TX, -+ .iseteop = 0, -+ .dma_owner = dma_ser2, -+ .io_if = if_serial_2, -+#ifdef CONFIG_ETRAX_SERIAL_PORT2 -+ .enabled = 1, -+ .io_if_description = "ser2", -+#ifdef CONFIG_ETRAX_SERIAL_PORT2_DMA2_OUT -+ .dma_out_enabled = 1, -+ .dma_out_nbr = SER2_TX_DMA_NBR, -+ .dma_out_irq_nbr = SER2_DMA_TX_IRQ_NBR, -+ .dma_out_irq_flags = IRQF_DISABLED, -+ .dma_out_irq_description = "serial 2 dma tr", -+#else -+ .dma_out_enabled = 0, -+ .dma_out_nbr = UINT_MAX, -+ .dma_out_irq_nbr = 0, -+ .dma_out_irq_flags = 0, -+ .dma_out_irq_description = NULL, -+#endif -+#ifdef CONFIG_ETRAX_SERIAL_PORT2_DMA3_IN -+ .dma_in_enabled = 1, -+ .dma_in_nbr = SER2_RX_DMA_NBR, -+ .dma_in_irq_nbr = SER2_DMA_RX_IRQ_NBR, -+ .dma_in_irq_flags = IRQF_DISABLED, -+ .dma_in_irq_description = "serial 2 dma rec", -+#else -+ .dma_in_enabled = 0, -+ .dma_in_nbr = UINT_MAX, -+ .dma_in_irq_nbr = 0, -+ .dma_in_irq_flags = 0, -+ .dma_in_irq_description = NULL, -+#endif -+#else -+ .enabled = 0, -+ .io_if_description = NULL, -+ .dma_out_enabled = 0, -+ .dma_in_enabled = 0 -+#endif -+ }, /* ttyS2 */ -+ -+ { .baud = DEF_BAUD, -+ .ioport = (unsigned char *)R_SERIAL3_CTRL, -+ .irq = 1U << 8, /* uses DMA 4 and 5 */ -+ .oclrintradr = R_DMA_CH4_CLR_INTR, -+ .ofirstadr = R_DMA_CH4_FIRST, -+ .ocmdadr = R_DMA_CH4_CMD, -+ .ostatusadr = R_DMA_CH4_STATUS, -+ .iclrintradr = R_DMA_CH5_CLR_INTR, -+ .ifirstadr = R_DMA_CH5_FIRST, -+ .icmdadr = R_DMA_CH5_CMD, -+ .idescradr = R_DMA_CH5_DESCR, -+ .flags = STD_FLAGS, -+ .rx_ctrl = DEF_RX, -+ .tx_ctrl = DEF_TX, -+ .iseteop = 1, -+ .dma_owner = dma_ser3, -+ .io_if = if_serial_3, -+#ifdef CONFIG_ETRAX_SERIAL_PORT3 -+ .enabled = 1, -+ .io_if_description = "ser3", -+#ifdef CONFIG_ETRAX_SERIAL_PORT3_DMA4_OUT -+ .dma_out_enabled = 1, -+ .dma_out_nbr = SER3_TX_DMA_NBR, -+ .dma_out_irq_nbr = SER3_DMA_TX_IRQ_NBR, -+ .dma_out_irq_flags = IRQF_DISABLED, -+ .dma_out_irq_description = "serial 3 dma tr", -+#else -+ .dma_out_enabled = 0, -+ .dma_out_nbr = UINT_MAX, -+ .dma_out_irq_nbr = 0, -+ .dma_out_irq_flags = 0, -+ .dma_out_irq_description = NULL, -+#endif -+#ifdef CONFIG_ETRAX_SERIAL_PORT3_DMA5_IN -+ .dma_in_enabled = 1, -+ .dma_in_nbr = SER3_RX_DMA_NBR, -+ .dma_in_irq_nbr = SER3_DMA_RX_IRQ_NBR, -+ .dma_in_irq_flags = IRQF_DISABLED, -+ .dma_in_irq_description = "serial 3 dma rec", -+#else -+ .dma_in_enabled = 0, -+ .dma_in_nbr = UINT_MAX, -+ .dma_in_irq_nbr = 0, -+ .dma_in_irq_flags = 0, -+ .dma_in_irq_description = NULL -+#endif -+#else -+ .enabled = 0, -+ .io_if_description = NULL, -+ .dma_out_enabled = 0, -+ .dma_in_enabled = 0 -+#endif -+ } /* ttyS3 */ -+#endif -+}; -+ -+ -+#define NR_PORTS (sizeof(rs_table)/sizeof(struct e100_serial)) -+ -+#ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER -+static struct fast_timer fast_timers[NR_PORTS]; -+#endif -+ -+#ifdef CONFIG_ETRAX_SERIAL_PROC_ENTRY -+#define PROCSTAT(x) x -+struct ser_statistics_type { -+ int overrun_cnt; -+ int early_errors_cnt; -+ int ser_ints_ok_cnt; -+ int errors_cnt; -+ unsigned long int processing_flip; -+ unsigned long processing_flip_still_room; -+ unsigned long int timeout_flush_cnt; -+ int rx_dma_ints; -+ int tx_dma_ints; -+ int rx_tot; -+ int tx_tot; -+}; -+ -+static struct ser_statistics_type ser_stat[NR_PORTS]; -+ -+#else -+ -+#define PROCSTAT(x) -+ -+#endif /* CONFIG_ETRAX_SERIAL_PROC_ENTRY */ -+ -+/* RS-485 */ -+#if defined(CONFIG_ETRAX_RS485) -+#ifdef CONFIG_ETRAX_FAST_TIMER -+static struct fast_timer fast_timers_rs485[NR_PORTS]; -+#endif -+#if defined(CONFIG_ETRAX_RS485_ON_PA) -+static int rs485_pa_bit = CONFIG_ETRAX_RS485_ON_PA_BIT; -+#endif -+#if defined(CONFIG_ETRAX_RS485_ON_PORT_G) -+static int rs485_port_g_bit = CONFIG_ETRAX_RS485_ON_PORT_G_BIT; -+#endif -+#endif -+ -+/* Info and macros needed for each ports extra control/status signals. */ -+#define E100_STRUCT_PORT(line, pinname) \ -+ ((CONFIG_ETRAX_SER##line##_##pinname##_ON_PA_BIT >= 0)? \ -+ (R_PORT_PA_DATA): ( \ -+ (CONFIG_ETRAX_SER##line##_##pinname##_ON_PB_BIT >= 0)? \ -+ (R_PORT_PB_DATA):&dummy_ser[line])) -+ -+#define E100_STRUCT_SHADOW(line, pinname) \ -+ ((CONFIG_ETRAX_SER##line##_##pinname##_ON_PA_BIT >= 0)? \ -+ (&port_pa_data_shadow): ( \ -+ (CONFIG_ETRAX_SER##line##_##pinname##_ON_PB_BIT >= 0)? \ -+ (&port_pb_data_shadow):&dummy_ser[line])) -+#define E100_STRUCT_MASK(line, pinname) \ -+ ((CONFIG_ETRAX_SER##line##_##pinname##_ON_PA_BIT >= 0)? \ -+ (1<= 0)? \ -+ (1< 3.3V to RS-232 driver -> -12V on RS-232 level -+ * inactive = 1 -> 0V to RS-232 driver -> +12V on RS-232 level -+ * -+ * These macros returns the pin value: 0=0V, >=1 = 3.3V on ETRAX chip -+ */ -+ -+/* Output */ -+#define E100_RTS_GET(info) ((info)->rx_ctrl & E100_RTS_MASK) -+/* Input */ -+#define E100_CTS_GET(info) ((info)->ioport[REG_STATUS] & E100_CTS_MASK) -+ -+/* These are typically PA or PB and 0 means 0V, 1 means 3.3V */ -+/* Is an output */ -+#define E100_DTR_GET(info) ((*e100_modem_pins[(info)->line].dtr_shadow) & e100_modem_pins[(info)->line].dtr_mask) -+ -+/* Normally inputs */ -+#define E100_RI_GET(info) ((*e100_modem_pins[(info)->line].ri_port) & e100_modem_pins[(info)->line].ri_mask) -+#define E100_CD_GET(info) ((*e100_modem_pins[(info)->line].cd_port) & e100_modem_pins[(info)->line].cd_mask) -+ -+/* Input */ -+#define E100_DSR_GET(info) ((*e100_modem_pins[(info)->line].dsr_port) & e100_modem_pins[(info)->line].dsr_mask) -+ -+ -+/* -+ * tmp_buf is used as a temporary buffer by serial_write. We need to -+ * lock it in case the memcpy_fromfs blocks while swapping in a page, -+ * and some other program tries to do a serial write at the same time. -+ * Since the lock will only come under contention when the system is -+ * swapping and available memory is low, it makes sense to share one -+ * buffer across all the serial ports, since it significantly saves -+ * memory if large numbers of serial ports are open. -+ */ -+static unsigned char *tmp_buf; -+static DEFINE_MUTEX(tmp_buf_mutex); -+ -+/* Calculate the chartime depending on baudrate, numbor of bits etc. */ -+static void update_char_time(struct e100_serial * info) -+{ -+ tcflag_t cflags = info->port.tty->termios->c_cflag; -+ int bits; -+ -+ /* calc. number of bits / data byte */ -+ /* databits + startbit and 1 stopbit */ -+ if ((cflags & CSIZE) == CS7) -+ bits = 9; -+ else -+ bits = 10; -+ -+ if (cflags & CSTOPB) /* 2 stopbits ? */ -+ bits++; -+ -+ if (cflags & PARENB) /* parity bit ? */ -+ bits++; -+ -+ /* calc timeout */ -+ info->char_time_usec = ((bits * 1000000) / info->baud) + 1; -+ info->flush_time_usec = 4*info->char_time_usec; -+ if (info->flush_time_usec < MIN_FLUSH_TIME_USEC) -+ info->flush_time_usec = MIN_FLUSH_TIME_USEC; -+ -+} -+ -+/* -+ * This function maps from the Bxxxx defines in asm/termbits.h into real -+ * baud rates. -+ */ -+ -+static int -+cflag_to_baud(unsigned int cflag) -+{ -+ static int baud_table[] = { -+ 0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400, -+ 4800, 9600, 19200, 38400 }; -+ -+ static int ext_baud_table[] = { -+ 0, 57600, 115200, 230400, 460800, 921600, 1843200, 6250000, -+ 0, 0, 0, 0, 0, 0, 0, 0 }; -+ -+ if (cflag & CBAUDEX) -+ return ext_baud_table[(cflag & CBAUD) & ~CBAUDEX]; -+ else -+ return baud_table[cflag & CBAUD]; -+} -+ -+/* and this maps to an etrax100 hardware baud constant */ -+ -+static unsigned char -+cflag_to_etrax_baud(unsigned int cflag) -+{ -+ char retval; -+ -+ static char baud_table[] = { -+ -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, -1, 3, 4, 5, 6, 7 }; -+ -+ static char ext_baud_table[] = { -+ -1, 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, -1, -1, -1, -1, -1 }; -+ -+ if (cflag & CBAUDEX) -+ retval = ext_baud_table[(cflag & CBAUD) & ~CBAUDEX]; -+ else -+ retval = baud_table[cflag & CBAUD]; -+ -+ if (retval < 0) { -+ printk(KERN_WARNING "serdriver tried setting invalid baud rate, flags %x.\n", cflag); -+ retval = 5; /* choose default 9600 instead */ -+ } -+ -+ return retval | (retval << 4); /* choose same for both TX and RX */ -+} -+ -+ -+/* Various static support functions */ -+ -+/* Functions to set or clear DTR/RTS on the requested line */ -+/* It is complicated by the fact that RTS is a serial port register, while -+ * DTR might not be implemented in the HW at all, and if it is, it can be on -+ * any general port. -+ */ -+ -+ -+static inline void -+e100_dtr(struct e100_serial *info, int set) -+{ -+#ifndef CONFIG_SVINTO_SIM -+ unsigned char mask = e100_modem_pins[info->line].dtr_mask; -+ -+#ifdef SERIAL_DEBUG_IO -+ printk("ser%i dtr %i mask: 0x%02X\n", info->line, set, mask); -+ printk("ser%i shadow before 0x%02X get: %i\n", -+ info->line, *e100_modem_pins[info->line].dtr_shadow, -+ E100_DTR_GET(info)); -+#endif -+ /* DTR is active low */ -+ { -+ unsigned long flags; -+ -+ local_irq_save(flags); -+ *e100_modem_pins[info->line].dtr_shadow &= ~mask; -+ *e100_modem_pins[info->line].dtr_shadow |= (set ? 0 : mask); -+ *e100_modem_pins[info->line].dtr_port = *e100_modem_pins[info->line].dtr_shadow; -+ local_irq_restore(flags); -+ } -+ -+#ifdef SERIAL_DEBUG_IO -+ printk("ser%i shadow after 0x%02X get: %i\n", -+ info->line, *e100_modem_pins[info->line].dtr_shadow, -+ E100_DTR_GET(info)); -+#endif -+#endif -+} -+ -+/* set = 0 means 3.3V on the pin, bitvalue: 0=active, 1=inactive -+ * 0=0V , 1=3.3V -+ */ -+static inline void -+e100_rts(struct e100_serial *info, int set) -+{ -+#ifndef CONFIG_SVINTO_SIM -+ unsigned long flags; -+ local_irq_save(flags); -+ info->rx_ctrl &= ~E100_RTS_MASK; -+ info->rx_ctrl |= (set ? 0 : E100_RTS_MASK); /* RTS is active low */ -+ info->ioport[REG_REC_CTRL] = info->rx_ctrl; -+ local_irq_restore(flags); -+#ifdef SERIAL_DEBUG_IO -+ printk("ser%i rts %i\n", info->line, set); -+#endif -+#endif -+} -+ -+ -+/* If this behaves as a modem, RI and CD is an output */ -+static inline void -+e100_ri_out(struct e100_serial *info, int set) -+{ -+#ifndef CONFIG_SVINTO_SIM -+ /* RI is active low */ -+ { -+ unsigned char mask = e100_modem_pins[info->line].ri_mask; -+ unsigned long flags; -+ -+ local_irq_save(flags); -+ *e100_modem_pins[info->line].ri_shadow &= ~mask; -+ *e100_modem_pins[info->line].ri_shadow |= (set ? 0 : mask); -+ *e100_modem_pins[info->line].ri_port = *e100_modem_pins[info->line].ri_shadow; -+ local_irq_restore(flags); -+ } -+#endif -+} -+static inline void -+e100_cd_out(struct e100_serial *info, int set) -+{ -+#ifndef CONFIG_SVINTO_SIM -+ /* CD is active low */ -+ { -+ unsigned char mask = e100_modem_pins[info->line].cd_mask; -+ unsigned long flags; -+ -+ local_irq_save(flags); -+ *e100_modem_pins[info->line].cd_shadow &= ~mask; -+ *e100_modem_pins[info->line].cd_shadow |= (set ? 0 : mask); -+ *e100_modem_pins[info->line].cd_port = *e100_modem_pins[info->line].cd_shadow; -+ local_irq_restore(flags); -+ } -+#endif -+} -+ -+static inline void -+e100_disable_rx(struct e100_serial *info) -+{ -+#ifndef CONFIG_SVINTO_SIM -+ /* disable the receiver */ -+ info->ioport[REG_REC_CTRL] = -+ (info->rx_ctrl &= ~IO_MASK(R_SERIAL0_REC_CTRL, rec_enable)); -+#endif -+} -+ -+static inline void -+e100_enable_rx(struct e100_serial *info) -+{ -+#ifndef CONFIG_SVINTO_SIM -+ /* enable the receiver */ -+ info->ioport[REG_REC_CTRL] = -+ (info->rx_ctrl |= IO_MASK(R_SERIAL0_REC_CTRL, rec_enable)); -+#endif -+} -+ -+/* the rx DMA uses both the dma_descr and the dma_eop interrupts */ -+ -+static inline void -+e100_disable_rxdma_irq(struct e100_serial *info) -+{ -+#ifdef SERIAL_DEBUG_INTR -+ printk("rxdma_irq(%d): 0\n",info->line); -+#endif -+ DINTR1(DEBUG_LOG(info->line,"IRQ disable_rxdma_irq %i\n", info->line)); -+ *R_IRQ_MASK2_CLR = (info->irq << 2) | (info->irq << 3); -+} -+ -+static inline void -+e100_enable_rxdma_irq(struct e100_serial *info) -+{ -+#ifdef SERIAL_DEBUG_INTR -+ printk("rxdma_irq(%d): 1\n",info->line); -+#endif -+ DINTR1(DEBUG_LOG(info->line,"IRQ enable_rxdma_irq %i\n", info->line)); -+ *R_IRQ_MASK2_SET = (info->irq << 2) | (info->irq << 3); -+} -+ -+/* the tx DMA uses only dma_descr interrupt */ -+ -+static void e100_disable_txdma_irq(struct e100_serial *info) -+{ -+#ifdef SERIAL_DEBUG_INTR -+ printk("txdma_irq(%d): 0\n",info->line); -+#endif -+ DINTR1(DEBUG_LOG(info->line,"IRQ disable_txdma_irq %i\n", info->line)); -+ *R_IRQ_MASK2_CLR = info->irq; -+} -+ -+static void e100_enable_txdma_irq(struct e100_serial *info) -+{ -+#ifdef SERIAL_DEBUG_INTR -+ printk("txdma_irq(%d): 1\n",info->line); -+#endif -+ DINTR1(DEBUG_LOG(info->line,"IRQ enable_txdma_irq %i\n", info->line)); -+ *R_IRQ_MASK2_SET = info->irq; -+} -+ -+static void e100_disable_txdma_channel(struct e100_serial *info) -+{ -+ unsigned long flags; -+ -+ /* Disable output DMA channel for the serial port in question -+ * ( set to something other than serialX) -+ */ -+ local_irq_save(flags); -+ DFLOW(DEBUG_LOG(info->line, "disable_txdma_channel %i\n", info->line)); -+ if (info->line == 0) { -+ if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma6)) == -+ IO_STATE(R_GEN_CONFIG, dma6, serial0)) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma6); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma6, unused); -+ } -+ } else if (info->line == 1) { -+ if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma8)) == -+ IO_STATE(R_GEN_CONFIG, dma8, serial1)) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma8); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma8, usb); -+ } -+ } else if (info->line == 2) { -+ if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma2)) == -+ IO_STATE(R_GEN_CONFIG, dma2, serial2)) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma2); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma2, par0); -+ } -+ } else if (info->line == 3) { -+ if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma4)) == -+ IO_STATE(R_GEN_CONFIG, dma4, serial3)) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma4); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma4, par1); -+ } -+ } -+ *R_GEN_CONFIG = genconfig_shadow; -+ local_irq_restore(flags); -+} -+ -+ -+static void e100_enable_txdma_channel(struct e100_serial *info) -+{ -+ unsigned long flags; -+ -+ local_irq_save(flags); -+ DFLOW(DEBUG_LOG(info->line, "enable_txdma_channel %i\n", info->line)); -+ /* Enable output DMA channel for the serial port in question */ -+ if (info->line == 0) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma6); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma6, serial0); -+ } else if (info->line == 1) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma8); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma8, serial1); -+ } else if (info->line == 2) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma2); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma2, serial2); -+ } else if (info->line == 3) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma4); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma4, serial3); -+ } -+ *R_GEN_CONFIG = genconfig_shadow; -+ local_irq_restore(flags); -+} -+ -+static void e100_disable_rxdma_channel(struct e100_serial *info) -+{ -+ unsigned long flags; -+ -+ /* Disable input DMA channel for the serial port in question -+ * ( set to something other than serialX) -+ */ -+ local_irq_save(flags); -+ if (info->line == 0) { -+ if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma7)) == -+ IO_STATE(R_GEN_CONFIG, dma7, serial0)) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma7); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma7, unused); -+ } -+ } else if (info->line == 1) { -+ if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma9)) == -+ IO_STATE(R_GEN_CONFIG, dma9, serial1)) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma9); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma9, usb); -+ } -+ } else if (info->line == 2) { -+ if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma3)) == -+ IO_STATE(R_GEN_CONFIG, dma3, serial2)) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma3); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma3, par0); -+ } -+ } else if (info->line == 3) { -+ if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma5)) == -+ IO_STATE(R_GEN_CONFIG, dma5, serial3)) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma5); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma5, par1); -+ } -+ } -+ *R_GEN_CONFIG = genconfig_shadow; -+ local_irq_restore(flags); -+} -+ -+ -+static void e100_enable_rxdma_channel(struct e100_serial *info) -+{ -+ unsigned long flags; -+ -+ local_irq_save(flags); -+ /* Enable input DMA channel for the serial port in question */ -+ if (info->line == 0) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma7); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma7, serial0); -+ } else if (info->line == 1) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma9); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma9, serial1); -+ } else if (info->line == 2) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma3); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma3, serial2); -+ } else if (info->line == 3) { -+ genconfig_shadow &= ~IO_MASK(R_GEN_CONFIG, dma5); -+ genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma5, serial3); -+ } -+ *R_GEN_CONFIG = genconfig_shadow; -+ local_irq_restore(flags); -+} -+ -+#ifdef SERIAL_HANDLE_EARLY_ERRORS -+/* in order to detect and fix errors on the first byte -+ we have to use the serial interrupts as well. */ -+ -+static inline void -+e100_disable_serial_data_irq(struct e100_serial *info) -+{ -+#ifdef SERIAL_DEBUG_INTR -+ printk("ser_irq(%d): 0\n",info->line); -+#endif -+ DINTR1(DEBUG_LOG(info->line,"IRQ disable data_irq %i\n", info->line)); -+ *R_IRQ_MASK1_CLR = (1U << (8+2*info->line)); -+} -+ -+static inline void -+e100_enable_serial_data_irq(struct e100_serial *info) -+{ -+#ifdef SERIAL_DEBUG_INTR -+ printk("ser_irq(%d): 1\n",info->line); -+ printk("**** %d = %d\n", -+ (8+2*info->line), -+ (1U << (8+2*info->line))); -+#endif -+ DINTR1(DEBUG_LOG(info->line,"IRQ enable data_irq %i\n", info->line)); -+ *R_IRQ_MASK1_SET = (1U << (8+2*info->line)); -+} -+#endif -+ -+static inline void -+e100_disable_serial_tx_ready_irq(struct e100_serial *info) -+{ -+#ifdef SERIAL_DEBUG_INTR -+ printk("ser_tx_irq(%d): 0\n",info->line); -+#endif -+ DINTR1(DEBUG_LOG(info->line,"IRQ disable ready_irq %i\n", info->line)); -+ *R_IRQ_MASK1_CLR = (1U << (8+1+2*info->line)); -+} -+ -+static inline void -+e100_enable_serial_tx_ready_irq(struct e100_serial *info) -+{ -+#ifdef SERIAL_DEBUG_INTR -+ printk("ser_tx_irq(%d): 1\n",info->line); -+ printk("**** %d = %d\n", -+ (8+1+2*info->line), -+ (1U << (8+1+2*info->line))); -+#endif -+ DINTR2(DEBUG_LOG(info->line,"IRQ enable ready_irq %i\n", info->line)); -+ *R_IRQ_MASK1_SET = (1U << (8+1+2*info->line)); -+} -+ -+static inline void e100_enable_rx_irq(struct e100_serial *info) -+{ -+ if (info->uses_dma_in) -+ e100_enable_rxdma_irq(info); -+ else -+ e100_enable_serial_data_irq(info); -+} -+static inline void e100_disable_rx_irq(struct e100_serial *info) -+{ -+ if (info->uses_dma_in) -+ e100_disable_rxdma_irq(info); -+ else -+ e100_disable_serial_data_irq(info); -+} -+ -+#if defined(CONFIG_ETRAX_RS485) -+/* Enable RS-485 mode on selected port. This is UGLY. */ -+static int -+e100_enable_rs485(struct tty_struct *tty, struct serial_rs485 *r) -+{ -+ struct e100_serial * info = (struct e100_serial *)tty->driver_data; -+ -+#if defined(CONFIG_ETRAX_RS485_ON_PA) -+ *R_PORT_PA_DATA = port_pa_data_shadow |= (1 << rs485_pa_bit); -+#endif -+#if defined(CONFIG_ETRAX_RS485_ON_PORT_G) -+ REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow, -+ rs485_port_g_bit, 1); -+#endif -+#if defined(CONFIG_ETRAX_RS485_LTC1387) -+ REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow, -+ CONFIG_ETRAX_RS485_LTC1387_DXEN_PORT_G_BIT, 1); -+ REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow, -+ CONFIG_ETRAX_RS485_LTC1387_RXEN_PORT_G_BIT, 1); -+#endif -+ -+ info->rs485.flags = r->flags; -+ if (r->delay_rts_before_send >= 1000) -+ info->rs485.delay_rts_before_send = 1000; -+ else -+ info->rs485.delay_rts_before_send = r->delay_rts_before_send; -+/* printk("rts: on send = %i, after = %i, enabled = %i", -+ info->rs485.rts_on_send, -+ info->rs485.rts_after_sent, -+ info->rs485.enabled -+ ); -+*/ -+ return 0; -+} -+ -+static int -+e100_write_rs485(struct tty_struct *tty, -+ const unsigned char *buf, int count) -+{ -+ struct e100_serial * info = (struct e100_serial *)tty->driver_data; -+ int old_value = (info->rs485.flags) & SER_RS485_ENABLED; -+ -+ /* rs485 is always implicitly enabled if we're using the ioctl() -+ * but it doesn't have to be set in the serial_rs485 -+ * (to be backward compatible with old apps) -+ * So we store, set and restore it. -+ */ -+ info->rs485.flags |= SER_RS485_ENABLED; -+ /* rs_write now deals with RS485 if enabled */ -+ count = rs_write(tty, buf, count); -+ if (!old_value) -+ info->rs485.flags &= ~(SER_RS485_ENABLED); -+ return count; -+} -+ -+#ifdef CONFIG_ETRAX_FAST_TIMER -+/* Timer function to toggle RTS when using FAST_TIMER */ -+static void rs485_toggle_rts_timer_function(unsigned long data) -+{ -+ struct e100_serial *info = (struct e100_serial *)data; -+ -+ fast_timers_rs485[info->line].function = NULL; -+ e100_rts(info, (info->rs485.flags & SER_RS485_RTS_AFTER_SEND)); -+#if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER) -+ e100_enable_rx(info); -+ e100_enable_rx_irq(info); -+#endif -+} -+#endif -+#endif /* CONFIG_ETRAX_RS485 */ -+ -+/* -+ * ------------------------------------------------------------ -+ * rs_stop() and rs_start() -+ * -+ * This routines are called before setting or resetting tty->stopped. -+ * They enable or disable transmitter using the XOFF registers, as necessary. -+ * ------------------------------------------------------------ -+ */ -+ -+static void -+rs_stop(struct tty_struct *tty) -+{ -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ if (info) { -+ unsigned long flags; -+ unsigned long xoff; -+ -+ local_irq_save(flags); -+ DFLOW(DEBUG_LOG(info->line, "XOFF rs_stop xmit %i\n", -+ CIRC_CNT(info->xmit.head, -+ info->xmit.tail,SERIAL_XMIT_SIZE))); -+ -+ xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, -+ STOP_CHAR(info->port.tty)); -+ xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, stop); -+ if (tty->termios->c_iflag & IXON ) { -+ xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable); -+ } -+ -+ *((unsigned long *)&info->ioport[REG_XOFF]) = xoff; -+ local_irq_restore(flags); -+ } -+} -+ -+static void -+rs_start(struct tty_struct *tty) -+{ -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ if (info) { -+ unsigned long flags; -+ unsigned long xoff; -+ -+ local_irq_save(flags); -+ DFLOW(DEBUG_LOG(info->line, "XOFF rs_start xmit %i\n", -+ CIRC_CNT(info->xmit.head, -+ info->xmit.tail,SERIAL_XMIT_SIZE))); -+ xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, STOP_CHAR(tty)); -+ xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, enable); -+ if (tty->termios->c_iflag & IXON ) { -+ xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable); -+ } -+ -+ *((unsigned long *)&info->ioport[REG_XOFF]) = xoff; -+ if (!info->uses_dma_out && -+ info->xmit.head != info->xmit.tail && info->xmit.buf) -+ e100_enable_serial_tx_ready_irq(info); -+ -+ local_irq_restore(flags); -+ } -+} -+ -+/* -+ * ---------------------------------------------------------------------- -+ * -+ * Here starts the interrupt handling routines. All of the following -+ * subroutines are declared as inline and are folded into -+ * rs_interrupt(). They were separated out for readability's sake. -+ * -+ * Note: rs_interrupt() is a "fast" interrupt, which means that it -+ * runs with interrupts turned off. People who may want to modify -+ * rs_interrupt() should try to keep the interrupt handler as fast as -+ * possible. After you are done making modifications, it is not a bad -+ * idea to do: -+ * -+ * gcc -S -DKERNEL -Wall -Wstrict-prototypes -O6 -fomit-frame-pointer serial.c -+ * -+ * and look at the resulting assemble code in serial.s. -+ * -+ * - Ted Ts'o (tytso@mit.edu), 7-Mar-93 -+ * ----------------------------------------------------------------------- -+ */ -+ -+/* -+ * This routine is used by the interrupt handler to schedule -+ * processing in the software interrupt portion of the driver. -+ */ -+static void rs_sched_event(struct e100_serial *info, int event) -+{ -+ if (info->event & (1 << event)) -+ return; -+ info->event |= 1 << event; -+ schedule_work(&info->work); -+} -+ -+/* The output DMA channel is free - use it to send as many chars as possible -+ * NOTES: -+ * We don't pay attention to info->x_char, which means if the TTY wants to -+ * use XON/XOFF it will set info->x_char but we won't send any X char! -+ * -+ * To implement this, we'd just start a DMA send of 1 byte pointing at a -+ * buffer containing the X char, and skip updating xmit. We'd also have to -+ * check if the last sent char was the X char when we enter this function -+ * the next time, to avoid updating xmit with the sent X value. -+ */ -+ -+static void -+transmit_chars_dma(struct e100_serial *info) -+{ -+ unsigned int c, sentl; -+ struct etrax_dma_descr *descr; -+ -+#ifdef CONFIG_SVINTO_SIM -+ /* This will output too little if tail is not 0 always since -+ * we don't reloop to send the other part. Anyway this SHOULD be a -+ * no-op - transmit_chars_dma would never really be called during sim -+ * since rs_write does not write into the xmit buffer then. -+ */ -+ if (info->xmit.tail) -+ printk("Error in serial.c:transmit_chars-dma(), tail!=0\n"); -+ if (info->xmit.head != info->xmit.tail) { -+ SIMCOUT(info->xmit.buf + info->xmit.tail, -+ CIRC_CNT(info->xmit.head, -+ info->xmit.tail, -+ SERIAL_XMIT_SIZE)); -+ info->xmit.head = info->xmit.tail; /* move back head */ -+ info->tr_running = 0; -+ } -+ return; -+#endif -+ /* acknowledge both dma_descr and dma_eop irq in R_DMA_CHx_CLR_INTR */ -+ *info->oclrintradr = -+ IO_STATE(R_DMA_CH6_CLR_INTR, clr_descr, do) | -+ IO_STATE(R_DMA_CH6_CLR_INTR, clr_eop, do); -+ -+#ifdef SERIAL_DEBUG_INTR -+ if (info->line == SERIAL_DEBUG_LINE) -+ printk("tc\n"); -+#endif -+ if (!info->tr_running) { -+ /* weirdo... we shouldn't get here! */ -+ printk(KERN_WARNING "Achtung: transmit_chars_dma with !tr_running\n"); -+ return; -+ } -+ -+ descr = &info->tr_descr; -+ -+ /* first get the amount of bytes sent during the last DMA transfer, -+ and update xmit accordingly */ -+ -+ /* if the stop bit was not set, all data has been sent */ -+ if (!(descr->status & d_stop)) { -+ sentl = descr->sw_len; -+ } else -+ /* otherwise we find the amount of data sent here */ -+ sentl = descr->hw_len; -+ -+ DFLOW(DEBUG_LOG(info->line, "TX %i done\n", sentl)); -+ -+ /* update stats */ -+ info->icount.tx += sentl; -+ -+ /* update xmit buffer */ -+ info->xmit.tail = (info->xmit.tail + sentl) & (SERIAL_XMIT_SIZE - 1); -+ -+ /* if there is only a few chars left in the buf, wake up the blocked -+ write if any */ -+ if (CIRC_CNT(info->xmit.head, -+ info->xmit.tail, -+ SERIAL_XMIT_SIZE) < WAKEUP_CHARS) -+ rs_sched_event(info, RS_EVENT_WRITE_WAKEUP); -+ -+ /* find out the largest amount of consecutive bytes we want to send now */ -+ -+ c = CIRC_CNT_TO_END(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); -+ -+ /* Don't send all in one DMA transfer - divide it so we wake up -+ * application before all is sent -+ */ -+ -+ if (c >= 4*WAKEUP_CHARS) -+ c = c/2; -+ -+ if (c <= 0) { -+ /* our job here is done, don't schedule any new DMA transfer */ -+ info->tr_running = 0; -+ -+#if defined(CONFIG_ETRAX_RS485) && defined(CONFIG_ETRAX_FAST_TIMER) -+ if (info->rs485.flags & SER_RS485_ENABLED) { -+ /* Set a short timer to toggle RTS */ -+ start_one_shot_timer(&fast_timers_rs485[info->line], -+ rs485_toggle_rts_timer_function, -+ (unsigned long)info, -+ info->char_time_usec*2, -+ "RS-485"); -+ } -+#endif /* RS485 */ -+ return; -+ } -+ -+ /* ok we can schedule a dma send of c chars starting at info->xmit.tail */ -+ /* set up the descriptor correctly for output */ -+ DFLOW(DEBUG_LOG(info->line, "TX %i\n", c)); -+ descr->ctrl = d_int | d_eol | d_wait; /* Wait needed for tty_wait_until_sent() */ -+ descr->sw_len = c; -+ descr->buf = virt_to_phys(info->xmit.buf + info->xmit.tail); -+ descr->status = 0; -+ -+ *info->ofirstadr = virt_to_phys(descr); /* write to R_DMAx_FIRST */ -+ *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, start); -+ -+ /* DMA is now running (hopefully) */ -+} /* transmit_chars_dma */ -+ -+static void -+start_transmit(struct e100_serial *info) -+{ -+#if 0 -+ if (info->line == SERIAL_DEBUG_LINE) -+ printk("x\n"); -+#endif -+ -+ info->tr_descr.sw_len = 0; -+ info->tr_descr.hw_len = 0; -+ info->tr_descr.status = 0; -+ info->tr_running = 1; -+ if (info->uses_dma_out) -+ transmit_chars_dma(info); -+ else -+ e100_enable_serial_tx_ready_irq(info); -+} /* start_transmit */ -+ -+#ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER -+static int serial_fast_timer_started = 0; -+static int serial_fast_timer_expired = 0; -+static void flush_timeout_function(unsigned long data); -+#define START_FLUSH_FAST_TIMER_TIME(info, string, usec) {\ -+ unsigned long timer_flags; \ -+ local_irq_save(timer_flags); \ -+ if (fast_timers[info->line].function == NULL) { \ -+ serial_fast_timer_started++; \ -+ TIMERD(DEBUG_LOG(info->line, "start_timer %i ", info->line)); \ -+ TIMERD(DEBUG_LOG(info->line, "num started: %i\n", serial_fast_timer_started)); \ -+ start_one_shot_timer(&fast_timers[info->line], \ -+ flush_timeout_function, \ -+ (unsigned long)info, \ -+ (usec), \ -+ string); \ -+ } \ -+ else { \ -+ TIMERD(DEBUG_LOG(info->line, "timer %i already running\n", info->line)); \ -+ } \ -+ local_irq_restore(timer_flags); \ -+} -+#define START_FLUSH_FAST_TIMER(info, string) START_FLUSH_FAST_TIMER_TIME(info, string, info->flush_time_usec) -+ -+#else -+#define START_FLUSH_FAST_TIMER_TIME(info, string, usec) -+#define START_FLUSH_FAST_TIMER(info, string) -+#endif -+ -+static struct etrax_recv_buffer * -+alloc_recv_buffer(unsigned int size) -+{ -+ struct etrax_recv_buffer *buffer; -+ -+ if (!(buffer = kmalloc(sizeof *buffer + size, GFP_ATOMIC))) -+ return NULL; -+ -+ buffer->next = NULL; -+ buffer->length = 0; -+ buffer->error = TTY_NORMAL; -+ -+ return buffer; -+} -+ -+static void -+append_recv_buffer(struct e100_serial *info, struct etrax_recv_buffer *buffer) -+{ -+ unsigned long flags; -+ -+ local_irq_save(flags); -+ -+ if (!info->first_recv_buffer) -+ info->first_recv_buffer = buffer; -+ else -+ info->last_recv_buffer->next = buffer; -+ -+ info->last_recv_buffer = buffer; -+ -+ info->recv_cnt += buffer->length; -+ if (info->recv_cnt > info->max_recv_cnt) -+ info->max_recv_cnt = info->recv_cnt; -+ -+ local_irq_restore(flags); -+} -+ -+static int -+add_char_and_flag(struct e100_serial *info, unsigned char data, unsigned char flag) -+{ -+ struct etrax_recv_buffer *buffer; -+ if (info->uses_dma_in) { -+ if (!(buffer = alloc_recv_buffer(4))) -+ return 0; -+ -+ buffer->length = 1; -+ buffer->error = flag; -+ buffer->buffer[0] = data; -+ -+ append_recv_buffer(info, buffer); -+ -+ info->icount.rx++; -+ } else { -+ struct tty_struct *tty = info->port.tty; -+ tty_insert_flip_char(tty, data, flag); -+ info->icount.rx++; -+ } -+ -+ return 1; -+} -+ -+static unsigned int handle_descr_data(struct e100_serial *info, -+ struct etrax_dma_descr *descr, -+ unsigned int recvl) -+{ -+ struct etrax_recv_buffer *buffer = phys_to_virt(descr->buf) - sizeof *buffer; -+ -+ if (info->recv_cnt + recvl > 65536) { -+ printk(KERN_CRIT -+ "%s: Too much pending incoming serial data! Dropping %u bytes.\n", __func__, recvl); -+ return 0; -+ } -+ -+ buffer->length = recvl; -+ -+ if (info->errorcode == ERRCODE_SET_BREAK) -+ buffer->error = TTY_BREAK; -+ info->errorcode = 0; -+ -+ append_recv_buffer(info, buffer); -+ -+ if (!(buffer = alloc_recv_buffer(SERIAL_DESCR_BUF_SIZE))) -+ panic("%s: Failed to allocate memory for receive buffer!\n", __func__); -+ -+ descr->buf = virt_to_phys(buffer->buffer); -+ -+ return recvl; -+} -+ -+static unsigned int handle_all_descr_data(struct e100_serial *info) -+{ -+ struct etrax_dma_descr *descr; -+ unsigned int recvl; -+ unsigned int ret = 0; -+ -+ while (1) -+ { -+ descr = &info->rec_descr[info->cur_rec_descr]; -+ -+ if (descr == phys_to_virt(*info->idescradr)) -+ break; -+ -+ if (++info->cur_rec_descr == SERIAL_RECV_DESCRIPTORS) -+ info->cur_rec_descr = 0; -+ -+ /* find out how many bytes were read */ -+ -+ /* if the eop bit was not set, all data has been received */ -+ if (!(descr->status & d_eop)) { -+ recvl = descr->sw_len; -+ } else { -+ /* otherwise we find the amount of data received here */ -+ recvl = descr->hw_len; -+ } -+ -+ /* Reset the status information */ -+ descr->status = 0; -+ -+ DFLOW( DEBUG_LOG(info->line, "RX %lu\n", recvl); -+ if (info->port.tty->stopped) { -+ unsigned char *buf = phys_to_virt(descr->buf); -+ DEBUG_LOG(info->line, "rx 0x%02X\n", buf[0]); -+ DEBUG_LOG(info->line, "rx 0x%02X\n", buf[1]); -+ DEBUG_LOG(info->line, "rx 0x%02X\n", buf[2]); -+ } -+ ); -+ -+ /* update stats */ -+ info->icount.rx += recvl; -+ -+ ret += handle_descr_data(info, descr, recvl); -+ } -+ -+ return ret; -+} -+ -+static void receive_chars_dma(struct e100_serial *info) -+{ -+ struct tty_struct *tty; -+ unsigned char rstat; -+ -+#ifdef CONFIG_SVINTO_SIM -+ /* No receive in the simulator. Will probably be when the rest of -+ * the serial interface works, and this piece will just be removed. -+ */ -+ return; -+#endif -+ -+ /* Acknowledge both dma_descr and dma_eop irq in R_DMA_CHx_CLR_INTR */ -+ *info->iclrintradr = -+ IO_STATE(R_DMA_CH6_CLR_INTR, clr_descr, do) | -+ IO_STATE(R_DMA_CH6_CLR_INTR, clr_eop, do); -+ -+ tty = info->port.tty; -+ if (!tty) /* Something wrong... */ -+ return; -+ -+#ifdef SERIAL_HANDLE_EARLY_ERRORS -+ if (info->uses_dma_in) -+ e100_enable_serial_data_irq(info); -+#endif -+ -+ if (info->errorcode == ERRCODE_INSERT_BREAK) -+ add_char_and_flag(info, '\0', TTY_BREAK); -+ -+ handle_all_descr_data(info); -+ -+ /* Read the status register to detect errors */ -+ rstat = info->ioport[REG_STATUS]; -+ if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) { -+ DFLOW(DEBUG_LOG(info->line, "XOFF detect stat %x\n", rstat)); -+ } -+ -+ if (rstat & SER_ERROR_MASK) { -+ /* If we got an error, we must reset it by reading the -+ * data_in field -+ */ -+ unsigned char data = info->ioport[REG_DATA]; -+ -+ PROCSTAT(ser_stat[info->line].errors_cnt++); -+ DEBUG_LOG(info->line, "#dERR: s d 0x%04X\n", -+ ((rstat & SER_ERROR_MASK) << 8) | data); -+ -+ if (rstat & SER_PAR_ERR_MASK) -+ add_char_and_flag(info, data, TTY_PARITY); -+ else if (rstat & SER_OVERRUN_MASK) -+ add_char_and_flag(info, data, TTY_OVERRUN); -+ else if (rstat & SER_FRAMING_ERR_MASK) -+ add_char_and_flag(info, data, TTY_FRAME); -+ } -+ -+ START_FLUSH_FAST_TIMER(info, "receive_chars"); -+ -+ /* Restart the receiving DMA */ -+ *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, restart); -+} -+ -+static int start_recv_dma(struct e100_serial *info) -+{ -+ struct etrax_dma_descr *descr = info->rec_descr; -+ struct etrax_recv_buffer *buffer; -+ int i; -+ -+ /* Set up the receiving descriptors */ -+ for (i = 0; i < SERIAL_RECV_DESCRIPTORS; i++) { -+ if (!(buffer = alloc_recv_buffer(SERIAL_DESCR_BUF_SIZE))) -+ panic("%s: Failed to allocate memory for receive buffer!\n", __func__); -+ -+ descr[i].ctrl = d_int; -+ descr[i].buf = virt_to_phys(buffer->buffer); -+ descr[i].sw_len = SERIAL_DESCR_BUF_SIZE; -+ descr[i].hw_len = 0; -+ descr[i].status = 0; -+ descr[i].next = virt_to_phys(&descr[i+1]); -+ } -+ -+ /* Link the last descriptor to the first */ -+ descr[i-1].next = virt_to_phys(&descr[0]); -+ -+ /* Start with the first descriptor in the list */ -+ info->cur_rec_descr = 0; -+ -+ /* Start the DMA */ -+ *info->ifirstadr = virt_to_phys(&descr[info->cur_rec_descr]); -+ *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, start); -+ -+ /* Input DMA should be running now */ -+ return 1; -+} -+ -+static void -+start_receive(struct e100_serial *info) -+{ -+#ifdef CONFIG_SVINTO_SIM -+ /* No receive in the simulator. Will probably be when the rest of -+ * the serial interface works, and this piece will just be removed. -+ */ -+ return; -+#endif -+ if (info->uses_dma_in) { -+ /* reset the input dma channel to be sure it works */ -+ -+ *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset); -+ while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->icmdadr) == -+ IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, reset)); -+ -+ start_recv_dma(info); -+ } -+} -+ -+ -+/* the bits in the MASK2 register are laid out like this: -+ DMAI_EOP DMAI_DESCR DMAO_EOP DMAO_DESCR -+ where I is the input channel and O is the output channel for the port. -+ info->irq is the bit number for the DMAO_DESCR so to check the others we -+ shift info->irq to the left. -+*/ -+ -+/* dma output channel interrupt handler -+ this interrupt is called from DMA2(ser2), DMA4(ser3), DMA6(ser0) or -+ DMA8(ser1) when they have finished a descriptor with the intr flag set. -+*/ -+ -+static irqreturn_t -+tr_interrupt(int irq, void *dev_id) -+{ -+ struct e100_serial *info; -+ unsigned long ireg; -+ int i; -+ int handled = 0; -+ -+#ifdef CONFIG_SVINTO_SIM -+ /* No receive in the simulator. Will probably be when the rest of -+ * the serial interface works, and this piece will just be removed. -+ */ -+ { -+ const char *s = "What? tr_interrupt in simulator??\n"; -+ SIMCOUT(s,strlen(s)); -+ } -+ return IRQ_HANDLED; -+#endif -+ -+ /* find out the line that caused this irq and get it from rs_table */ -+ -+ ireg = *R_IRQ_MASK2_RD; /* get the active irq bits for the dma channels */ -+ -+ for (i = 0; i < NR_PORTS; i++) { -+ info = rs_table + i; -+ if (!info->enabled || !info->uses_dma_out) -+ continue; -+ /* check for dma_descr (don't need to check for dma_eop in output dma for serial */ -+ if (ireg & info->irq) { -+ handled = 1; -+ /* we can send a new dma bunch. make it so. */ -+ DINTR2(DEBUG_LOG(info->line, "tr_interrupt %i\n", i)); -+ /* Read jiffies_usec first, -+ * we want this time to be as late as possible -+ */ -+ PROCSTAT(ser_stat[info->line].tx_dma_ints++); -+ info->last_tx_active_usec = GET_JIFFIES_USEC(); -+ info->last_tx_active = jiffies; -+ transmit_chars_dma(info); -+ } -+ -+ /* FIXME: here we should really check for a change in the -+ status lines and if so call status_handle(info) */ -+ } -+ return IRQ_RETVAL(handled); -+} /* tr_interrupt */ -+ -+/* dma input channel interrupt handler */ -+ -+static irqreturn_t -+rec_interrupt(int irq, void *dev_id) -+{ -+ struct e100_serial *info; -+ unsigned long ireg; -+ int i; -+ int handled = 0; -+ -+#ifdef CONFIG_SVINTO_SIM -+ /* No receive in the simulator. Will probably be when the rest of -+ * the serial interface works, and this piece will just be removed. -+ */ -+ { -+ const char *s = "What? rec_interrupt in simulator??\n"; -+ SIMCOUT(s,strlen(s)); -+ } -+ return IRQ_HANDLED; -+#endif -+ -+ /* find out the line that caused this irq and get it from rs_table */ -+ -+ ireg = *R_IRQ_MASK2_RD; /* get the active irq bits for the dma channels */ -+ -+ for (i = 0; i < NR_PORTS; i++) { -+ info = rs_table + i; -+ if (!info->enabled || !info->uses_dma_in) -+ continue; -+ /* check for both dma_eop and dma_descr for the input dma channel */ -+ if (ireg & ((info->irq << 2) | (info->irq << 3))) { -+ handled = 1; -+ /* we have received something */ -+ receive_chars_dma(info); -+ } -+ -+ /* FIXME: here we should really check for a change in the -+ status lines and if so call status_handle(info) */ -+ } -+ return IRQ_RETVAL(handled); -+} /* rec_interrupt */ -+ -+static int force_eop_if_needed(struct e100_serial *info) -+{ -+ /* We check data_avail bit to determine if data has -+ * arrived since last time -+ */ -+ unsigned char rstat = info->ioport[REG_STATUS]; -+ -+ /* error or datavail? */ -+ if (rstat & SER_ERROR_MASK) { -+ /* Some error has occurred. If there has been valid data, an -+ * EOP interrupt will be made automatically. If no data, the -+ * normal ser_interrupt should be enabled and handle it. -+ * So do nothing! -+ */ -+ DEBUG_LOG(info->line, "timeout err: rstat 0x%03X\n", -+ rstat | (info->line << 8)); -+ return 0; -+ } -+ -+ if (rstat & SER_DATA_AVAIL_MASK) { -+ /* Ok data, no error, count it */ -+ TIMERD(DEBUG_LOG(info->line, "timeout: rstat 0x%03X\n", -+ rstat | (info->line << 8))); -+ /* Read data to clear status flags */ -+ (void)info->ioport[REG_DATA]; -+ -+ info->forced_eop = 0; -+ START_FLUSH_FAST_TIMER(info, "magic"); -+ return 0; -+ } -+ -+ /* hit the timeout, force an EOP for the input -+ * dma channel if we haven't already -+ */ -+ if (!info->forced_eop) { -+ info->forced_eop = 1; -+ PROCSTAT(ser_stat[info->line].timeout_flush_cnt++); -+ TIMERD(DEBUG_LOG(info->line, "timeout EOP %i\n", info->line)); -+ FORCE_EOP(info); -+ } -+ -+ return 1; -+} -+ -+static void flush_to_flip_buffer(struct e100_serial *info) -+{ -+ struct tty_struct *tty; -+ struct etrax_recv_buffer *buffer; -+ unsigned long flags; -+ -+ local_irq_save(flags); -+ tty = info->port.tty; -+ -+ if (!tty) { -+ local_irq_restore(flags); -+ return; -+ } -+ -+ while ((buffer = info->first_recv_buffer) != NULL) { -+ unsigned int count = buffer->length; -+ -+ tty_insert_flip_string(tty, buffer->buffer, count); -+ info->recv_cnt -= count; -+ -+ if (count == buffer->length) { -+ info->first_recv_buffer = buffer->next; -+ kfree(buffer); -+ } else { -+ buffer->length -= count; -+ memmove(buffer->buffer, buffer->buffer + count, buffer->length); -+ buffer->error = TTY_NORMAL; -+ } -+ } -+ -+ if (!info->first_recv_buffer) -+ info->last_recv_buffer = NULL; -+ -+ local_irq_restore(flags); -+ -+ /* This includes a check for low-latency */ -+ tty_flip_buffer_push(tty); -+} -+ -+static void check_flush_timeout(struct e100_serial *info) -+{ -+ /* Flip what we've got (if we can) */ -+ flush_to_flip_buffer(info); -+ -+ /* We might need to flip later, but not to fast -+ * since the system is busy processing input... */ -+ if (info->first_recv_buffer) -+ START_FLUSH_FAST_TIMER_TIME(info, "flip", 2000); -+ -+ /* Force eop last, since data might have come while we're processing -+ * and if we started the slow timer above, we won't start a fast -+ * below. -+ */ -+ force_eop_if_needed(info); -+} -+ -+#ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER -+static void flush_timeout_function(unsigned long data) -+{ -+ struct e100_serial *info = (struct e100_serial *)data; -+ -+ fast_timers[info->line].function = NULL; -+ serial_fast_timer_expired++; -+ TIMERD(DEBUG_LOG(info->line, "flush_timout %i ", info->line)); -+ TIMERD(DEBUG_LOG(info->line, "num expired: %i\n", serial_fast_timer_expired)); -+ check_flush_timeout(info); -+} -+ -+#else -+ -+/* dma fifo/buffer timeout handler -+ forces an end-of-packet for the dma input channel if no chars -+ have been received for CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS/100 s. -+*/ -+ -+static struct timer_list flush_timer; -+ -+static void -+timed_flush_handler(unsigned long ptr) -+{ -+ struct e100_serial *info; -+ int i; -+ -+#ifdef CONFIG_SVINTO_SIM -+ return; -+#endif -+ -+ for (i = 0; i < NR_PORTS; i++) { -+ info = rs_table + i; -+ if (info->uses_dma_in) -+ check_flush_timeout(info); -+ } -+ -+ /* restart flush timer */ -+ mod_timer(&flush_timer, jiffies + CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS); -+} -+#endif -+ -+#ifdef SERIAL_HANDLE_EARLY_ERRORS -+ -+/* If there is an error (ie break) when the DMA is running and -+ * there are no bytes in the fifo the DMA is stopped and we get no -+ * eop interrupt. Thus we have to monitor the first bytes on a DMA -+ * transfer, and if it is without error we can turn the serial -+ * interrupts off. -+ */ -+ -+/* -+BREAK handling on ETRAX 100: -+ETRAX will generate interrupt although there is no stop bit between the -+characters. -+ -+Depending on how long the break sequence is, the end of the breaksequence -+will look differently: -+| indicates start/end of a character. -+ -+B= Break character (0x00) with framing error. -+E= Error byte with parity error received after B characters. -+F= "Faked" valid byte received immediately after B characters. -+V= Valid byte -+ -+1. -+ B BL ___________________________ V -+.._|__________|__________| |valid data | -+ -+Multiple frame errors with data == 0x00 (B), -+the timing matches up "perfectly" so no extra ending char is detected. -+The RXD pin is 1 in the last interrupt, in that case -+we set info->errorcode = ERRCODE_INSERT_BREAK, but we can't really -+know if another byte will come and this really is case 2. below -+(e.g F=0xFF or 0xFE) -+If RXD pin is 0 we can expect another character (see 2. below). -+ -+ -+2. -+ -+ B B E or F__________________..__ V -+.._|__________|__________|______ | |valid data -+ "valid" or -+ parity error -+ -+Multiple frame errors with data == 0x00 (B), -+but the part of the break trigs is interpreted as a start bit (and possibly -+some 0 bits followed by a number of 1 bits and a stop bit). -+Depending on parity settings etc. this last character can be either -+a fake "valid" char (F) or have a parity error (E). -+ -+If the character is valid it will be put in the buffer, -+we set info->errorcode = ERRCODE_SET_BREAK so the receive interrupt -+will set the flags so the tty will handle it, -+if it's an error byte it will not be put in the buffer -+and we set info->errorcode = ERRCODE_INSERT_BREAK. -+ -+To distinguish a V byte in 1. from an F byte in 2. we keep a timestamp -+of the last faulty char (B) and compares it with the current time: -+If the time elapsed time is less then 2*char_time_usec we will assume -+it's a faked F char and not a Valid char and set -+info->errorcode = ERRCODE_SET_BREAK. -+ -+Flaws in the above solution: -+~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -+We use the timer to distinguish a F character from a V character, -+if a V character is to close after the break we might make the wrong decision. -+ -+TODO: The break will be delayed until an F or V character is received. -+ -+*/ -+ -+static -+struct e100_serial * handle_ser_rx_interrupt_no_dma(struct e100_serial *info) -+{ -+ unsigned long data_read; -+ struct tty_struct *tty = info->port.tty; -+ -+ if (!tty) { -+ printk("!NO TTY!\n"); -+ return info; -+ } -+ -+ /* Read data and status at the same time */ -+ data_read = *((unsigned long *)&info->ioport[REG_DATA_STATUS32]); -+more_data: -+ if (data_read & IO_MASK(R_SERIAL0_READ, xoff_detect) ) { -+ DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0)); -+ } -+ DINTR2(DEBUG_LOG(info->line, "ser_rx %c\n", IO_EXTRACT(R_SERIAL0_READ, data_in, data_read))); -+ -+ if (data_read & ( IO_MASK(R_SERIAL0_READ, framing_err) | -+ IO_MASK(R_SERIAL0_READ, par_err) | -+ IO_MASK(R_SERIAL0_READ, overrun) )) { -+ /* An error */ -+ info->last_rx_active_usec = GET_JIFFIES_USEC(); -+ info->last_rx_active = jiffies; -+ DINTR1(DEBUG_LOG(info->line, "ser_rx err stat_data %04X\n", data_read)); -+ DLOG_INT_TRIG( -+ if (!log_int_trig1_pos) { -+ log_int_trig1_pos = log_int_pos; -+ log_int(rdpc(), 0, 0); -+ } -+ ); -+ -+ -+ if ( ((data_read & IO_MASK(R_SERIAL0_READ, data_in)) == 0) && -+ (data_read & IO_MASK(R_SERIAL0_READ, framing_err)) ) { -+ /* Most likely a break, but we get interrupts over and -+ * over again. -+ */ -+ -+ if (!info->break_detected_cnt) { -+ DEBUG_LOG(info->line, "#BRK start\n", 0); -+ } -+ if (data_read & IO_MASK(R_SERIAL0_READ, rxd)) { -+ /* The RX pin is high now, so the break -+ * must be over, but.... -+ * we can't really know if we will get another -+ * last byte ending the break or not. -+ * And we don't know if the byte (if any) will -+ * have an error or look valid. -+ */ -+ DEBUG_LOG(info->line, "# BL BRK\n", 0); -+ info->errorcode = ERRCODE_INSERT_BREAK; -+ } -+ info->break_detected_cnt++; -+ } else { -+ /* The error does not look like a break, but could be -+ * the end of one -+ */ -+ if (info->break_detected_cnt) { -+ DEBUG_LOG(info->line, "EBRK %i\n", info->break_detected_cnt); -+ info->errorcode = ERRCODE_INSERT_BREAK; -+ } else { -+ unsigned char data = IO_EXTRACT(R_SERIAL0_READ, -+ data_in, data_read); -+ char flag = TTY_NORMAL; -+ if (info->errorcode == ERRCODE_INSERT_BREAK) { -+ struct tty_struct *tty = info->port.tty; -+ tty_insert_flip_char(tty, 0, flag); -+ info->icount.rx++; -+ } -+ -+ if (data_read & IO_MASK(R_SERIAL0_READ, par_err)) { -+ info->icount.parity++; -+ flag = TTY_PARITY; -+ } else if (data_read & IO_MASK(R_SERIAL0_READ, overrun)) { -+ info->icount.overrun++; -+ flag = TTY_OVERRUN; -+ } else if (data_read & IO_MASK(R_SERIAL0_READ, framing_err)) { -+ info->icount.frame++; -+ flag = TTY_FRAME; -+ } -+ tty_insert_flip_char(tty, data, flag); -+ info->errorcode = 0; -+ } -+ info->break_detected_cnt = 0; -+ } -+ } else if (data_read & IO_MASK(R_SERIAL0_READ, data_avail)) { -+ /* No error */ -+ DLOG_INT_TRIG( -+ if (!log_int_trig1_pos) { -+ if (log_int_pos >= log_int_size) { -+ log_int_pos = 0; -+ } -+ log_int_trig0_pos = log_int_pos; -+ log_int(rdpc(), 0, 0); -+ } -+ ); -+ tty_insert_flip_char(tty, -+ IO_EXTRACT(R_SERIAL0_READ, data_in, data_read), -+ TTY_NORMAL); -+ } else { -+ DEBUG_LOG(info->line, "ser_rx int but no data_avail %08lX\n", data_read); -+ } -+ -+ -+ info->icount.rx++; -+ data_read = *((unsigned long *)&info->ioport[REG_DATA_STATUS32]); -+ if (data_read & IO_MASK(R_SERIAL0_READ, data_avail)) { -+ DEBUG_LOG(info->line, "ser_rx %c in loop\n", IO_EXTRACT(R_SERIAL0_READ, data_in, data_read)); -+ goto more_data; -+ } -+ -+ tty_flip_buffer_push(info->port.tty); -+ return info; -+} -+ -+static struct e100_serial* handle_ser_rx_interrupt(struct e100_serial *info) -+{ -+ unsigned char rstat; -+ -+#ifdef SERIAL_DEBUG_INTR -+ printk("Interrupt from serport %d\n", i); -+#endif -+/* DEBUG_LOG(info->line, "ser_interrupt stat %03X\n", rstat | (i << 8)); */ -+ if (!info->uses_dma_in) { -+ return handle_ser_rx_interrupt_no_dma(info); -+ } -+ /* DMA is used */ -+ rstat = info->ioport[REG_STATUS]; -+ if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) { -+ DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0)); -+ } -+ -+ if (rstat & SER_ERROR_MASK) { -+ unsigned char data; -+ -+ info->last_rx_active_usec = GET_JIFFIES_USEC(); -+ info->last_rx_active = jiffies; -+ /* If we got an error, we must reset it by reading the -+ * data_in field -+ */ -+ data = info->ioport[REG_DATA]; -+ DINTR1(DEBUG_LOG(info->line, "ser_rx! %c\n", data)); -+ DINTR1(DEBUG_LOG(info->line, "ser_rx err stat %02X\n", rstat)); -+ if (!data && (rstat & SER_FRAMING_ERR_MASK)) { -+ /* Most likely a break, but we get interrupts over and -+ * over again. -+ */ -+ -+ if (!info->break_detected_cnt) { -+ DEBUG_LOG(info->line, "#BRK start\n", 0); -+ } -+ if (rstat & SER_RXD_MASK) { -+ /* The RX pin is high now, so the break -+ * must be over, but.... -+ * we can't really know if we will get another -+ * last byte ending the break or not. -+ * And we don't know if the byte (if any) will -+ * have an error or look valid. -+ */ -+ DEBUG_LOG(info->line, "# BL BRK\n", 0); -+ info->errorcode = ERRCODE_INSERT_BREAK; -+ } -+ info->break_detected_cnt++; -+ } else { -+ /* The error does not look like a break, but could be -+ * the end of one -+ */ -+ if (info->break_detected_cnt) { -+ DEBUG_LOG(info->line, "EBRK %i\n", info->break_detected_cnt); -+ info->errorcode = ERRCODE_INSERT_BREAK; -+ } else { -+ if (info->errorcode == ERRCODE_INSERT_BREAK) { -+ info->icount.brk++; -+ add_char_and_flag(info, '\0', TTY_BREAK); -+ } -+ -+ if (rstat & SER_PAR_ERR_MASK) { -+ info->icount.parity++; -+ add_char_and_flag(info, data, TTY_PARITY); -+ } else if (rstat & SER_OVERRUN_MASK) { -+ info->icount.overrun++; -+ add_char_and_flag(info, data, TTY_OVERRUN); -+ } else if (rstat & SER_FRAMING_ERR_MASK) { -+ info->icount.frame++; -+ add_char_and_flag(info, data, TTY_FRAME); -+ } -+ -+ info->errorcode = 0; -+ } -+ info->break_detected_cnt = 0; -+ DEBUG_LOG(info->line, "#iERR s d %04X\n", -+ ((rstat & SER_ERROR_MASK) << 8) | data); -+ } -+ PROCSTAT(ser_stat[info->line].early_errors_cnt++); -+ } else { /* It was a valid byte, now let the DMA do the rest */ -+ unsigned long curr_time_u = GET_JIFFIES_USEC(); -+ unsigned long curr_time = jiffies; -+ -+ if (info->break_detected_cnt) { -+ /* Detect if this character is a new valid char or the -+ * last char in a break sequence: If LSBits are 0 and -+ * MSBits are high AND the time is close to the -+ * previous interrupt we should discard it. -+ */ -+ long elapsed_usec = -+ (curr_time - info->last_rx_active) * (1000000/HZ) + -+ curr_time_u - info->last_rx_active_usec; -+ if (elapsed_usec < 2*info->char_time_usec) { -+ DEBUG_LOG(info->line, "FBRK %i\n", info->line); -+ /* Report as BREAK (error) and let -+ * receive_chars_dma() handle it -+ */ -+ info->errorcode = ERRCODE_SET_BREAK; -+ } else { -+ DEBUG_LOG(info->line, "Not end of BRK (V)%i\n", info->line); -+ } -+ DEBUG_LOG(info->line, "num brk %i\n", info->break_detected_cnt); -+ } -+ -+#ifdef SERIAL_DEBUG_INTR -+ printk("** OK, disabling ser_interrupts\n"); -+#endif -+ e100_disable_serial_data_irq(info); -+ DINTR2(DEBUG_LOG(info->line, "ser_rx OK %d\n", info->line)); -+ info->break_detected_cnt = 0; -+ -+ PROCSTAT(ser_stat[info->line].ser_ints_ok_cnt++); -+ } -+ /* Restarting the DMA never hurts */ -+ *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, restart); -+ START_FLUSH_FAST_TIMER(info, "ser_int"); -+ return info; -+} /* handle_ser_rx_interrupt */ -+ -+static void handle_ser_tx_interrupt(struct e100_serial *info) -+{ -+ unsigned long flags; -+ -+ if (info->x_char) { -+ unsigned char rstat; -+ DFLOW(DEBUG_LOG(info->line, "tx_int: xchar 0x%02X\n", info->x_char)); -+ local_irq_save(flags); -+ rstat = info->ioport[REG_STATUS]; -+ DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat)); -+ -+ info->ioport[REG_TR_DATA] = info->x_char; -+ info->icount.tx++; -+ info->x_char = 0; -+ /* We must enable since it is disabled in ser_interrupt */ -+ e100_enable_serial_tx_ready_irq(info); -+ local_irq_restore(flags); -+ return; -+ } -+ if (info->uses_dma_out) { -+ unsigned char rstat; -+ int i; -+ /* We only use normal tx interrupt when sending x_char */ -+ DFLOW(DEBUG_LOG(info->line, "tx_int: xchar sent\n", 0)); -+ local_irq_save(flags); -+ rstat = info->ioport[REG_STATUS]; -+ DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat)); -+ e100_disable_serial_tx_ready_irq(info); -+ if (info->port.tty->stopped) -+ rs_stop(info->port.tty); -+ /* Enable the DMA channel and tell it to continue */ -+ e100_enable_txdma_channel(info); -+ /* Wait 12 cycles before doing the DMA command */ -+ for(i = 6; i > 0; i--) -+ nop(); -+ -+ *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, continue); -+ local_irq_restore(flags); -+ return; -+ } -+ /* Normal char-by-char interrupt */ -+ if (info->xmit.head == info->xmit.tail -+ || info->port.tty->stopped -+ || info->port.tty->hw_stopped) { -+ DFLOW(DEBUG_LOG(info->line, "tx_int: stopped %i\n", -+ info->port.tty->stopped)); -+ e100_disable_serial_tx_ready_irq(info); -+ info->tr_running = 0; -+ return; -+ } -+ DINTR2(DEBUG_LOG(info->line, "tx_int %c\n", info->xmit.buf[info->xmit.tail])); -+ /* Send a byte, rs485 timing is critical so turn of ints */ -+ local_irq_save(flags); -+ info->ioport[REG_TR_DATA] = info->xmit.buf[info->xmit.tail]; -+ info->xmit.tail = (info->xmit.tail + 1) & (SERIAL_XMIT_SIZE-1); -+ info->icount.tx++; -+ if (info->xmit.head == info->xmit.tail) { -+#if defined(CONFIG_ETRAX_RS485) && defined(CONFIG_ETRAX_FAST_TIMER) -+ if (info->rs485.flags & SER_RS485_ENABLED) { -+ /* Set a short timer to toggle RTS */ -+ start_one_shot_timer(&fast_timers_rs485[info->line], -+ rs485_toggle_rts_timer_function, -+ (unsigned long)info, -+ info->char_time_usec*2, -+ "RS-485"); -+ } -+#endif /* RS485 */ -+ info->last_tx_active_usec = GET_JIFFIES_USEC(); -+ info->last_tx_active = jiffies; -+ e100_disable_serial_tx_ready_irq(info); -+ info->tr_running = 0; -+ DFLOW(DEBUG_LOG(info->line, "tx_int: stop2\n", 0)); -+ } else { -+ /* We must enable since it is disabled in ser_interrupt */ -+ e100_enable_serial_tx_ready_irq(info); -+ } -+ local_irq_restore(flags); -+ -+ if (CIRC_CNT(info->xmit.head, -+ info->xmit.tail, -+ SERIAL_XMIT_SIZE) < WAKEUP_CHARS) -+ rs_sched_event(info, RS_EVENT_WRITE_WAKEUP); -+ -+} /* handle_ser_tx_interrupt */ -+ -+/* result of time measurements: -+ * RX duration 54-60 us when doing something, otherwise 6-9 us -+ * ser_int duration: just sending: 8-15 us normally, up to 73 us -+ */ -+static irqreturn_t -+ser_interrupt(int irq, void *dev_id) -+{ -+ static volatile int tx_started = 0; -+ struct e100_serial *info; -+ int i; -+ unsigned long flags; -+ unsigned long irq_mask1_rd; -+ unsigned long data_mask = (1 << (8+2*0)); /* ser0 data_avail */ -+ int handled = 0; -+ static volatile unsigned long reentered_ready_mask = 0; -+ -+ local_irq_save(flags); -+ irq_mask1_rd = *R_IRQ_MASK1_RD; -+ /* First handle all rx interrupts with ints disabled */ -+ info = rs_table; -+ irq_mask1_rd &= e100_ser_int_mask; -+ for (i = 0; i < NR_PORTS; i++) { -+ /* Which line caused the data irq? */ -+ if (irq_mask1_rd & data_mask) { -+ handled = 1; -+ handle_ser_rx_interrupt(info); -+ } -+ info += 1; -+ data_mask <<= 2; -+ } -+ /* Handle tx interrupts with interrupts enabled so we -+ * can take care of new data interrupts while transmitting -+ * We protect the tx part with the tx_started flag. -+ * We disable the tr_ready interrupts we are about to handle and -+ * unblock the serial interrupt so new serial interrupts may come. -+ * -+ * If we get a new interrupt: -+ * - it migth be due to synchronous serial ports. -+ * - serial irq will be blocked by general irq handler. -+ * - async data will be handled above (sync will be ignored). -+ * - tx_started flag will prevent us from trying to send again and -+ * we will exit fast - no need to unblock serial irq. -+ * - Next (sync) serial interrupt handler will be runned with -+ * disabled interrupt due to restore_flags() at end of function, -+ * so sync handler will not be preempted or reentered. -+ */ -+ if (!tx_started) { -+ unsigned long ready_mask; -+ unsigned long -+ tx_started = 1; -+ /* Only the tr_ready interrupts left */ -+ irq_mask1_rd &= (IO_MASK(R_IRQ_MASK1_RD, ser0_ready) | -+ IO_MASK(R_IRQ_MASK1_RD, ser1_ready) | -+ IO_MASK(R_IRQ_MASK1_RD, ser2_ready) | -+ IO_MASK(R_IRQ_MASK1_RD, ser3_ready)); -+ while (irq_mask1_rd) { -+ /* Disable those we are about to handle */ -+ *R_IRQ_MASK1_CLR = irq_mask1_rd; -+ /* Unblock the serial interrupt */ -+ *R_VECT_MASK_SET = IO_STATE(R_VECT_MASK_SET, serial, set); -+ -+ local_irq_enable(); -+ ready_mask = (1 << (8+1+2*0)); /* ser0 tr_ready */ -+ info = rs_table; -+ for (i = 0; i < NR_PORTS; i++) { -+ /* Which line caused the ready irq? */ -+ if (irq_mask1_rd & ready_mask) { -+ handled = 1; -+ handle_ser_tx_interrupt(info); -+ } -+ info += 1; -+ ready_mask <<= 2; -+ } -+ /* handle_ser_tx_interrupt enables tr_ready interrupts */ -+ local_irq_disable(); -+ /* Handle reentered TX interrupt */ -+ irq_mask1_rd = reentered_ready_mask; -+ } -+ local_irq_disable(); -+ tx_started = 0; -+ } else { -+ unsigned long ready_mask; -+ ready_mask = irq_mask1_rd & (IO_MASK(R_IRQ_MASK1_RD, ser0_ready) | -+ IO_MASK(R_IRQ_MASK1_RD, ser1_ready) | -+ IO_MASK(R_IRQ_MASK1_RD, ser2_ready) | -+ IO_MASK(R_IRQ_MASK1_RD, ser3_ready)); -+ if (ready_mask) { -+ reentered_ready_mask |= ready_mask; -+ /* Disable those we are about to handle */ -+ *R_IRQ_MASK1_CLR = ready_mask; -+ DFLOW(DEBUG_LOG(SERIAL_DEBUG_LINE, "ser_int reentered with TX %X\n", ready_mask)); -+ } -+ } -+ -+ local_irq_restore(flags); -+ return IRQ_RETVAL(handled); -+} /* ser_interrupt */ -+#endif -+ -+/* -+ * ------------------------------------------------------------------- -+ * Here ends the serial interrupt routines. -+ * ------------------------------------------------------------------- -+ */ -+ -+/* -+ * This routine is used to handle the "bottom half" processing for the -+ * serial driver, known also the "software interrupt" processing. -+ * This processing is done at the kernel interrupt level, after the -+ * rs_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON. This -+ * is where time-consuming activities which can not be done in the -+ * interrupt driver proper are done; the interrupt driver schedules -+ * them using rs_sched_event(), and they get done here. -+ */ -+static void -+do_softint(struct work_struct *work) -+{ -+ struct e100_serial *info; -+ struct tty_struct *tty; -+ -+ info = container_of(work, struct e100_serial, work); -+ -+ tty = info->port.tty; -+ if (!tty) -+ return; -+ -+ if (test_and_clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event)) -+ tty_wakeup(tty); -+} -+ -+static int -+startup(struct e100_serial * info) -+{ -+ unsigned long flags; -+ unsigned long xmit_page; -+ int i; -+ -+ xmit_page = get_zeroed_page(GFP_KERNEL); -+ if (!xmit_page) -+ return -ENOMEM; -+ -+ local_irq_save(flags); -+ -+ /* if it was already initialized, skip this */ -+ -+ if (info->flags & ASYNC_INITIALIZED) { -+ local_irq_restore(flags); -+ free_page(xmit_page); -+ return 0; -+ } -+ -+ if (info->xmit.buf) -+ free_page(xmit_page); -+ else -+ info->xmit.buf = (unsigned char *) xmit_page; -+ -+#ifdef SERIAL_DEBUG_OPEN -+ printk("starting up ttyS%d (xmit_buf 0x%p)...\n", info->line, info->xmit.buf); -+#endif -+ -+#ifdef CONFIG_SVINTO_SIM -+ /* Bits and pieces collected from below. Better to have them -+ in one ifdef:ed clause than to mix in a lot of ifdefs, -+ right? */ -+ if (info->port.tty) -+ clear_bit(TTY_IO_ERROR, &info->port.tty->flags); -+ -+ info->xmit.head = info->xmit.tail = 0; -+ info->first_recv_buffer = info->last_recv_buffer = NULL; -+ info->recv_cnt = info->max_recv_cnt = 0; -+ -+ for (i = 0; i < SERIAL_RECV_DESCRIPTORS; i++) -+ info->rec_descr[i].buf = NULL; -+ -+ /* No real action in the simulator, but may set info important -+ to ioctl. */ -+ change_speed(info); -+#else -+ -+ /* -+ * Clear the FIFO buffers and disable them -+ * (they will be reenabled in change_speed()) -+ */ -+ -+ /* -+ * Reset the DMA channels and make sure their interrupts are cleared -+ */ -+ -+ if (info->dma_in_enabled) { -+ info->uses_dma_in = 1; -+ e100_enable_rxdma_channel(info); -+ -+ *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset); -+ -+ /* Wait until reset cycle is complete */ -+ while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->icmdadr) == -+ IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, reset)); -+ -+ /* Make sure the irqs are cleared */ -+ *info->iclrintradr = -+ IO_STATE(R_DMA_CH6_CLR_INTR, clr_descr, do) | -+ IO_STATE(R_DMA_CH6_CLR_INTR, clr_eop, do); -+ } else { -+ e100_disable_rxdma_channel(info); -+ } -+ -+ if (info->dma_out_enabled) { -+ info->uses_dma_out = 1; -+ e100_enable_txdma_channel(info); -+ *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset); -+ -+ while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->ocmdadr) == -+ IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, reset)); -+ -+ /* Make sure the irqs are cleared */ -+ *info->oclrintradr = -+ IO_STATE(R_DMA_CH6_CLR_INTR, clr_descr, do) | -+ IO_STATE(R_DMA_CH6_CLR_INTR, clr_eop, do); -+ } else { -+ e100_disable_txdma_channel(info); -+ } -+ -+ if (info->port.tty) -+ clear_bit(TTY_IO_ERROR, &info->port.tty->flags); -+ -+ info->xmit.head = info->xmit.tail = 0; -+ info->first_recv_buffer = info->last_recv_buffer = NULL; -+ info->recv_cnt = info->max_recv_cnt = 0; -+ -+ for (i = 0; i < SERIAL_RECV_DESCRIPTORS; i++) -+ info->rec_descr[i].buf = 0; -+ -+ /* -+ * and set the speed and other flags of the serial port -+ * this will start the rx/tx as well -+ */ -+#ifdef SERIAL_HANDLE_EARLY_ERRORS -+ e100_enable_serial_data_irq(info); -+#endif -+ change_speed(info); -+ -+ /* dummy read to reset any serial errors */ -+ -+ (void)info->ioport[REG_DATA]; -+ -+ /* enable the interrupts */ -+ if (info->uses_dma_out) -+ e100_enable_txdma_irq(info); -+ -+ e100_enable_rx_irq(info); -+ -+ info->tr_running = 0; /* to be sure we don't lock up the transmitter */ -+ -+ /* setup the dma input descriptor and start dma */ -+ -+ start_receive(info); -+ -+ /* for safety, make sure the descriptors last result is 0 bytes written */ -+ -+ info->tr_descr.sw_len = 0; -+ info->tr_descr.hw_len = 0; -+ info->tr_descr.status = 0; -+ -+ /* enable RTS/DTR last */ -+ -+ e100_rts(info, 1); -+ e100_dtr(info, 1); -+ -+#endif /* CONFIG_SVINTO_SIM */ -+ -+ info->flags |= ASYNC_INITIALIZED; -+ -+ local_irq_restore(flags); -+ return 0; -+} -+ -+/* -+ * This routine will shutdown a serial port; interrupts are disabled, and -+ * DTR is dropped if the hangup on close termio flag is on. -+ */ -+static void -+shutdown(struct e100_serial * info) -+{ -+ unsigned long flags; -+ struct etrax_dma_descr *descr = info->rec_descr; -+ struct etrax_recv_buffer *buffer; -+ int i; -+ -+#ifndef CONFIG_SVINTO_SIM -+ /* shut down the transmitter and receiver */ -+ DFLOW(DEBUG_LOG(info->line, "shutdown %i\n", info->line)); -+ e100_disable_rx(info); -+ info->ioport[REG_TR_CTRL] = (info->tx_ctrl &= ~0x40); -+ -+ /* disable interrupts, reset dma channels */ -+ if (info->uses_dma_in) { -+ e100_disable_rxdma_irq(info); -+ *info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset); -+ info->uses_dma_in = 0; -+ } else { -+ e100_disable_serial_data_irq(info); -+ } -+ -+ if (info->uses_dma_out) { -+ e100_disable_txdma_irq(info); -+ info->tr_running = 0; -+ *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset); -+ info->uses_dma_out = 0; -+ } else { -+ e100_disable_serial_tx_ready_irq(info); -+ info->tr_running = 0; -+ } -+ -+#endif /* CONFIG_SVINTO_SIM */ -+ -+ if (!(info->flags & ASYNC_INITIALIZED)) -+ return; -+ -+#ifdef SERIAL_DEBUG_OPEN -+ printk("Shutting down serial port %d (irq %d)....\n", info->line, -+ info->irq); -+#endif -+ -+ local_irq_save(flags); -+ -+ if (info->xmit.buf) { -+ free_page((unsigned long)info->xmit.buf); -+ info->xmit.buf = NULL; -+ } -+ -+ for (i = 0; i < SERIAL_RECV_DESCRIPTORS; i++) -+ if (descr[i].buf) { -+ buffer = phys_to_virt(descr[i].buf) - sizeof *buffer; -+ kfree(buffer); -+ descr[i].buf = 0; -+ } -+ -+ if (!info->port.tty || (info->port.tty->termios->c_cflag & HUPCL)) { -+ /* hang up DTR and RTS if HUPCL is enabled */ -+ e100_dtr(info, 0); -+ e100_rts(info, 0); /* could check CRTSCTS before doing this */ -+ } -+ -+ if (info->port.tty) -+ set_bit(TTY_IO_ERROR, &info->port.tty->flags); -+ -+ info->flags &= ~ASYNC_INITIALIZED; -+ local_irq_restore(flags); -+} -+ -+ -+/* change baud rate and other assorted parameters */ -+ -+static void -+change_speed(struct e100_serial *info) -+{ -+ unsigned int cflag; -+ unsigned long xoff; -+ unsigned long flags; -+ /* first some safety checks */ -+ -+ if (!info->port.tty || !info->port.tty->termios) -+ return; -+ if (!info->ioport) -+ return; -+ -+ cflag = info->port.tty->termios->c_cflag; -+ -+ /* possibly, the tx/rx should be disabled first to do this safely */ -+ -+ /* change baud-rate and write it to the hardware */ -+ if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST) { -+ /* Special baudrate */ -+ u32 mask = 0xFF << (info->line*8); /* Each port has 8 bits */ -+ unsigned long alt_source = -+ IO_STATE(R_ALT_SER_BAUDRATE, ser0_rec, normal) | -+ IO_STATE(R_ALT_SER_BAUDRATE, ser0_tr, normal); -+ /* R_ALT_SER_BAUDRATE selects the source */ -+ DBAUD(printk("Custom baudrate: baud_base/divisor %lu/%i\n", -+ (unsigned long)info->baud_base, info->custom_divisor)); -+ if (info->baud_base == SERIAL_PRESCALE_BASE) { -+ /* 0, 2-65535 (0=65536) */ -+ u16 divisor = info->custom_divisor; -+ /* R_SERIAL_PRESCALE (upper 16 bits of R_CLOCK_PRESCALE) */ -+ /* baudrate is 3.125MHz/custom_divisor */ -+ alt_source = -+ IO_STATE(R_ALT_SER_BAUDRATE, ser0_rec, prescale) | -+ IO_STATE(R_ALT_SER_BAUDRATE, ser0_tr, prescale); -+ alt_source = 0x11; -+ DBAUD(printk("Writing SERIAL_PRESCALE: divisor %i\n", divisor)); -+ *R_SERIAL_PRESCALE = divisor; -+ info->baud = SERIAL_PRESCALE_BASE/divisor; -+ } -+#ifdef CONFIG_ETRAX_EXTERN_PB6CLK_ENABLED -+ else if ((info->baud_base==CONFIG_ETRAX_EXTERN_PB6CLK_FREQ/8 && -+ info->custom_divisor == 1) || -+ (info->baud_base==CONFIG_ETRAX_EXTERN_PB6CLK_FREQ && -+ info->custom_divisor == 8)) { -+ /* ext_clk selected */ -+ alt_source = -+ IO_STATE(R_ALT_SER_BAUDRATE, ser0_rec, extern) | -+ IO_STATE(R_ALT_SER_BAUDRATE, ser0_tr, extern); -+ DBAUD(printk("using external baudrate: %lu\n", CONFIG_ETRAX_EXTERN_PB6CLK_FREQ/8)); -+ info->baud = CONFIG_ETRAX_EXTERN_PB6CLK_FREQ/8; -+ } -+#endif -+ else -+ { -+ /* Bad baudbase, we don't support using timer0 -+ * for baudrate. -+ */ -+ printk(KERN_WARNING "Bad baud_base/custom_divisor: %lu/%i\n", -+ (unsigned long)info->baud_base, info->custom_divisor); -+ } -+ r_alt_ser_baudrate_shadow &= ~mask; -+ r_alt_ser_baudrate_shadow |= (alt_source << (info->line*8)); -+ *R_ALT_SER_BAUDRATE = r_alt_ser_baudrate_shadow; -+ } else { -+ /* Normal baudrate */ -+ /* Make sure we use normal baudrate */ -+ u32 mask = 0xFF << (info->line*8); /* Each port has 8 bits */ -+ unsigned long alt_source = -+ IO_STATE(R_ALT_SER_BAUDRATE, ser0_rec, normal) | -+ IO_STATE(R_ALT_SER_BAUDRATE, ser0_tr, normal); -+ r_alt_ser_baudrate_shadow &= ~mask; -+ r_alt_ser_baudrate_shadow |= (alt_source << (info->line*8)); -+#ifndef CONFIG_SVINTO_SIM -+ *R_ALT_SER_BAUDRATE = r_alt_ser_baudrate_shadow; -+#endif /* CONFIG_SVINTO_SIM */ -+ -+ info->baud = cflag_to_baud(cflag); -+#ifndef CONFIG_SVINTO_SIM -+ info->ioport[REG_BAUD] = cflag_to_etrax_baud(cflag); -+#endif /* CONFIG_SVINTO_SIM */ -+ } -+ -+#ifndef CONFIG_SVINTO_SIM -+ /* start with default settings and then fill in changes */ -+ local_irq_save(flags); -+ /* 8 bit, no/even parity */ -+ info->rx_ctrl &= ~(IO_MASK(R_SERIAL0_REC_CTRL, rec_bitnr) | -+ IO_MASK(R_SERIAL0_REC_CTRL, rec_par_en) | -+ IO_MASK(R_SERIAL0_REC_CTRL, rec_par)); -+ -+ /* 8 bit, no/even parity, 1 stop bit, no cts */ -+ info->tx_ctrl &= ~(IO_MASK(R_SERIAL0_TR_CTRL, tr_bitnr) | -+ IO_MASK(R_SERIAL0_TR_CTRL, tr_par_en) | -+ IO_MASK(R_SERIAL0_TR_CTRL, tr_par) | -+ IO_MASK(R_SERIAL0_TR_CTRL, stop_bits) | -+ IO_MASK(R_SERIAL0_TR_CTRL, auto_cts)); -+ -+ if ((cflag & CSIZE) == CS7) { -+ /* set 7 bit mode */ -+ info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_bitnr, tr_7bit); -+ info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_bitnr, rec_7bit); -+ } -+ -+ if (cflag & CSTOPB) { -+ /* set 2 stop bit mode */ -+ info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, stop_bits, two_bits); -+ } -+ -+ if (cflag & PARENB) { -+ /* enable parity */ -+ info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_par_en, enable); -+ info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_par_en, enable); -+ } -+ -+ if (cflag & CMSPAR) { -+ /* enable stick parity, PARODD mean Mark which matches ETRAX */ -+ info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_stick_par, stick); -+ info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_stick_par, stick); -+ } -+ if (cflag & PARODD) { -+ /* set odd parity (or Mark if CMSPAR) */ -+ info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_par, odd); -+ info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_par, odd); -+ } -+ -+ if (cflag & CRTSCTS) { -+ /* enable automatic CTS handling */ -+ DFLOW(DEBUG_LOG(info->line, "FLOW auto_cts enabled\n", 0)); -+ info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, auto_cts, active); -+ } -+ -+ /* make sure the tx and rx are enabled */ -+ -+ info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_enable, enable); -+ info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_enable, enable); -+ -+ /* actually write the control regs to the hardware */ -+ -+ info->ioport[REG_TR_CTRL] = info->tx_ctrl; -+ info->ioport[REG_REC_CTRL] = info->rx_ctrl; -+ xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, STOP_CHAR(info->port.tty)); -+ xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, enable); -+ if (info->port.tty->termios->c_iflag & IXON ) { -+ DFLOW(DEBUG_LOG(info->line, "FLOW XOFF enabled 0x%02X\n", -+ STOP_CHAR(info->port.tty))); -+ xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable); -+ } -+ -+ *((unsigned long *)&info->ioport[REG_XOFF]) = xoff; -+ local_irq_restore(flags); -+#endif /* !CONFIG_SVINTO_SIM */ -+ -+ update_char_time(info); -+ -+} /* change_speed */ -+ -+/* start transmitting chars NOW */ -+ -+static void -+rs_flush_chars(struct tty_struct *tty) -+{ -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ unsigned long flags; -+ -+ if (info->tr_running || -+ info->xmit.head == info->xmit.tail || -+ tty->stopped || -+ tty->hw_stopped || -+ !info->xmit.buf) -+ return; -+ -+#ifdef SERIAL_DEBUG_FLOW -+ printk("rs_flush_chars\n"); -+#endif -+ -+ /* this protection might not exactly be necessary here */ -+ -+ local_irq_save(flags); -+ start_transmit(info); -+ local_irq_restore(flags); -+} -+ -+static int rs_raw_write(struct tty_struct *tty, -+ const unsigned char *buf, int count) -+{ -+ int c, ret = 0; -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ unsigned long flags; -+ -+ /* first some sanity checks */ -+ -+ if (!tty || !info->xmit.buf || !tmp_buf) -+ return 0; -+ -+#ifdef SERIAL_DEBUG_DATA -+ if (info->line == SERIAL_DEBUG_LINE) -+ printk("rs_raw_write (%d), status %d\n", -+ count, info->ioport[REG_STATUS]); -+#endif -+ -+#ifdef CONFIG_SVINTO_SIM -+ /* Really simple. The output is here and now. */ -+ SIMCOUT(buf, count); -+ return count; -+#endif -+ local_save_flags(flags); -+ DFLOW(DEBUG_LOG(info->line, "write count %i ", count)); -+ DFLOW(DEBUG_LOG(info->line, "ldisc %i\n", tty->ldisc.chars_in_buffer(tty))); -+ -+ -+ /* The local_irq_disable/restore_flags pairs below are needed -+ * because the DMA interrupt handler moves the info->xmit values. -+ * the memcpy needs to be in the critical region unfortunately, -+ * because we need to read xmit values, memcpy, write xmit values -+ * in one atomic operation... this could perhaps be avoided by -+ * more clever design. -+ */ -+ local_irq_disable(); -+ while (count) { -+ c = CIRC_SPACE_TO_END(info->xmit.head, -+ info->xmit.tail, -+ SERIAL_XMIT_SIZE); -+ -+ if (count < c) -+ c = count; -+ if (c <= 0) -+ break; -+ -+ memcpy(info->xmit.buf + info->xmit.head, buf, c); -+ info->xmit.head = (info->xmit.head + c) & -+ (SERIAL_XMIT_SIZE-1); -+ buf += c; -+ count -= c; -+ ret += c; -+ } -+ local_irq_restore(flags); -+ -+ /* enable transmitter if not running, unless the tty is stopped -+ * this does not need IRQ protection since if tr_running == 0 -+ * the IRQ's are not running anyway for this port. -+ */ -+ DFLOW(DEBUG_LOG(info->line, "write ret %i\n", ret)); -+ -+ if (info->xmit.head != info->xmit.tail && -+ !tty->stopped && -+ !tty->hw_stopped && -+ !info->tr_running) { -+ start_transmit(info); -+ } -+ -+ return ret; -+} /* raw_raw_write() */ -+ -+static int -+rs_write(struct tty_struct *tty, -+ const unsigned char *buf, int count) -+{ -+#if defined(CONFIG_ETRAX_RS485) -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ -+ if (info->rs485.flags & SER_RS485_ENABLED) -+ { -+ /* If we are in RS-485 mode, we need to toggle RTS and disable -+ * the receiver before initiating a DMA transfer -+ */ -+#ifdef CONFIG_ETRAX_FAST_TIMER -+ /* Abort any started timer */ -+ fast_timers_rs485[info->line].function = NULL; -+ del_fast_timer(&fast_timers_rs485[info->line]); -+#endif -+ e100_rts(info, (info->rs485.flags & SER_RS485_RTS_ON_SEND)); -+#if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER) -+ e100_disable_rx(info); -+ e100_enable_rx_irq(info); -+#endif -+ -+ if (info->rs485.delay_rts_before_send > 0) -+ msleep(info->rs485.delay_rts_before_send); -+ } -+#endif /* CONFIG_ETRAX_RS485 */ -+ -+ count = rs_raw_write(tty, buf, count); -+ -+#if defined(CONFIG_ETRAX_RS485) -+ if (info->rs485.flags & SER_RS485_ENABLED) -+ { -+ unsigned int val; -+ /* If we are in RS-485 mode the following has to be done: -+ * wait until DMA is ready -+ * wait on transmit shift register -+ * toggle RTS -+ * enable the receiver -+ */ -+ -+ /* Sleep until all sent */ -+ tty_wait_until_sent(tty, 0); -+#ifdef CONFIG_ETRAX_FAST_TIMER -+ /* Now sleep a little more so that shift register is empty */ -+ schedule_usleep(info->char_time_usec * 2); -+#endif -+ /* wait on transmit shift register */ -+ do{ -+ get_lsr_info(info, &val); -+ }while (!(val & TIOCSER_TEMT)); -+ -+ e100_rts(info, (info->rs485.flags & SER_RS485_RTS_AFTER_SEND)); -+ -+#if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER) -+ e100_enable_rx(info); -+ e100_enable_rxdma_irq(info); -+#endif -+ } -+#endif /* CONFIG_ETRAX_RS485 */ -+ -+ return count; -+} /* rs_write */ -+ -+ -+/* how much space is available in the xmit buffer? */ -+ -+static int -+rs_write_room(struct tty_struct *tty) -+{ -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ -+ return CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); -+} -+ -+/* How many chars are in the xmit buffer? -+ * This does not include any chars in the transmitter FIFO. -+ * Use wait_until_sent for waiting for FIFO drain. -+ */ -+ -+static int -+rs_chars_in_buffer(struct tty_struct *tty) -+{ -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ -+ return CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); -+} -+ -+/* discard everything in the xmit buffer */ -+ -+static void -+rs_flush_buffer(struct tty_struct *tty) -+{ -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ unsigned long flags; -+ -+ local_irq_save(flags); -+ info->xmit.head = info->xmit.tail = 0; -+ local_irq_restore(flags); -+ -+ tty_wakeup(tty); -+} -+ -+/* -+ * This function is used to send a high-priority XON/XOFF character to -+ * the device -+ * -+ * Since we use DMA we don't check for info->x_char in transmit_chars_dma(), -+ * but we do it in handle_ser_tx_interrupt(). -+ * We disable DMA channel and enable tx ready interrupt and write the -+ * character when possible. -+ */ -+static void rs_send_xchar(struct tty_struct *tty, char ch) -+{ -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ unsigned long flags; -+ local_irq_save(flags); -+ if (info->uses_dma_out) { -+ /* Put the DMA on hold and disable the channel */ -+ *info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, hold); -+ while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->ocmdadr) != -+ IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, hold)); -+ e100_disable_txdma_channel(info); -+ } -+ -+ /* Must make sure transmitter is not stopped before we can transmit */ -+ if (tty->stopped) -+ rs_start(tty); -+ -+ /* Enable manual transmit interrupt and send from there */ -+ DFLOW(DEBUG_LOG(info->line, "rs_send_xchar 0x%02X\n", ch)); -+ info->x_char = ch; -+ e100_enable_serial_tx_ready_irq(info); -+ local_irq_restore(flags); -+} -+ -+/* -+ * ------------------------------------------------------------ -+ * rs_throttle() -+ * -+ * This routine is called by the upper-layer tty layer to signal that -+ * incoming characters should be throttled. -+ * ------------------------------------------------------------ -+ */ -+static void -+rs_throttle(struct tty_struct * tty) -+{ -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+#ifdef SERIAL_DEBUG_THROTTLE -+ char buf[64]; -+ -+ printk("throttle %s: %lu....\n", tty_name(tty, buf), -+ (unsigned long)tty->ldisc.chars_in_buffer(tty)); -+#endif -+ DFLOW(DEBUG_LOG(info->line,"rs_throttle %lu\n", tty->ldisc.chars_in_buffer(tty))); -+ -+ /* Do RTS before XOFF since XOFF might take some time */ -+ if (tty->termios->c_cflag & CRTSCTS) { -+ /* Turn off RTS line */ -+ e100_rts(info, 0); -+ } -+ if (I_IXOFF(tty)) -+ rs_send_xchar(tty, STOP_CHAR(tty)); -+ -+} -+ -+static void -+rs_unthrottle(struct tty_struct * tty) -+{ -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+#ifdef SERIAL_DEBUG_THROTTLE -+ char buf[64]; -+ -+ printk("unthrottle %s: %lu....\n", tty_name(tty, buf), -+ (unsigned long)tty->ldisc.chars_in_buffer(tty)); -+#endif -+ DFLOW(DEBUG_LOG(info->line,"rs_unthrottle ldisc %d\n", tty->ldisc.chars_in_buffer(tty))); -+ DFLOW(DEBUG_LOG(info->line,"rs_unthrottle flip.count: %i\n", tty->flip.count)); -+ /* Do RTS before XOFF since XOFF might take some time */ -+ if (tty->termios->c_cflag & CRTSCTS) { -+ /* Assert RTS line */ -+ e100_rts(info, 1); -+ } -+ -+ if (I_IXOFF(tty)) { -+ if (info->x_char) -+ info->x_char = 0; -+ else -+ rs_send_xchar(tty, START_CHAR(tty)); -+ } -+ -+} -+ -+/* -+ * ------------------------------------------------------------ -+ * rs_ioctl() and friends -+ * ------------------------------------------------------------ -+ */ -+ -+static int -+get_serial_info(struct e100_serial * info, -+ struct serial_struct * retinfo) -+{ -+ struct serial_struct tmp; -+ -+ /* this is all probably wrong, there are a lot of fields -+ * here that we don't have in e100_serial and maybe we -+ * should set them to something else than 0. -+ */ -+ -+ if (!retinfo) -+ return -EFAULT; -+ memset(&tmp, 0, sizeof(tmp)); -+ tmp.type = info->type; -+ tmp.line = info->line; -+ tmp.port = (int)info->ioport; -+ tmp.irq = info->irq; -+ tmp.flags = info->flags; -+ tmp.baud_base = info->baud_base; -+ tmp.close_delay = info->close_delay; -+ tmp.closing_wait = info->closing_wait; -+ tmp.custom_divisor = info->custom_divisor; -+ if (copy_to_user(retinfo, &tmp, sizeof(*retinfo))) -+ return -EFAULT; -+ return 0; -+} -+ -+static int -+set_serial_info(struct e100_serial *info, -+ struct serial_struct *new_info) -+{ -+ struct serial_struct new_serial; -+ struct e100_serial old_info; -+ int retval = 0; -+ -+ if (copy_from_user(&new_serial, new_info, sizeof(new_serial))) -+ return -EFAULT; -+ -+ old_info = *info; -+ -+ if (!capable(CAP_SYS_ADMIN)) { -+ if ((new_serial.type != info->type) || -+ (new_serial.close_delay != info->close_delay) || -+ ((new_serial.flags & ~ASYNC_USR_MASK) != -+ (info->flags & ~ASYNC_USR_MASK))) -+ return -EPERM; -+ info->flags = ((info->flags & ~ASYNC_USR_MASK) | -+ (new_serial.flags & ASYNC_USR_MASK)); -+ goto check_and_exit; -+ } -+ -+ if (info->count > 1) -+ return -EBUSY; -+ -+ /* -+ * OK, past this point, all the error checking has been done. -+ * At this point, we start making changes..... -+ */ -+ -+ info->baud_base = new_serial.baud_base; -+ info->flags = ((info->flags & ~ASYNC_FLAGS) | -+ (new_serial.flags & ASYNC_FLAGS)); -+ info->custom_divisor = new_serial.custom_divisor; -+ info->type = new_serial.type; -+ info->close_delay = new_serial.close_delay; -+ info->closing_wait = new_serial.closing_wait; -+ info->port.tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0; -+ -+ check_and_exit: -+ if (info->flags & ASYNC_INITIALIZED) { -+ change_speed(info); -+ } else -+ retval = startup(info); -+ return retval; -+} -+ -+/* -+ * get_lsr_info - get line status register info -+ * -+ * Purpose: Let user call ioctl() to get info when the UART physically -+ * is emptied. On bus types like RS485, the transmitter must -+ * release the bus after transmitting. This must be done when -+ * the transmit shift register is empty, not be done when the -+ * transmit holding register is empty. This functionality -+ * allows an RS485 driver to be written in user space. -+ */ -+static int -+get_lsr_info(struct e100_serial * info, unsigned int *value) -+{ -+ unsigned int result = TIOCSER_TEMT; -+#ifndef CONFIG_SVINTO_SIM -+ unsigned long curr_time = jiffies; -+ unsigned long curr_time_usec = GET_JIFFIES_USEC(); -+ unsigned long elapsed_usec = -+ (curr_time - info->last_tx_active) * 1000000/HZ + -+ curr_time_usec - info->last_tx_active_usec; -+ -+ if (info->xmit.head != info->xmit.tail || -+ elapsed_usec < 2*info->char_time_usec) { -+ result = 0; -+ } -+#endif -+ -+ if (copy_to_user(value, &result, sizeof(int))) -+ return -EFAULT; -+ return 0; -+} -+ -+#ifdef SERIAL_DEBUG_IO -+struct state_str -+{ -+ int state; -+ const char *str; -+}; -+ -+const struct state_str control_state_str[] = { -+ {TIOCM_DTR, "DTR" }, -+ {TIOCM_RTS, "RTS"}, -+ {TIOCM_ST, "ST?" }, -+ {TIOCM_SR, "SR?" }, -+ {TIOCM_CTS, "CTS" }, -+ {TIOCM_CD, "CD" }, -+ {TIOCM_RI, "RI" }, -+ {TIOCM_DSR, "DSR" }, -+ {0, NULL } -+}; -+ -+char *get_control_state_str(int MLines, char *s) -+{ -+ int i = 0; -+ -+ s[0]='\0'; -+ while (control_state_str[i].str != NULL) { -+ if (MLines & control_state_str[i].state) { -+ if (s[0] != '\0') { -+ strcat(s, ", "); -+ } -+ strcat(s, control_state_str[i].str); -+ } -+ i++; -+ } -+ return s; -+} -+#endif -+ -+static int -+rs_break(struct tty_struct *tty, int break_state) -+{ -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ unsigned long flags; -+ -+ if (!info->ioport) -+ return -EIO; -+ -+ local_irq_save(flags); -+ if (break_state == -1) { -+ /* Go to manual mode and set the txd pin to 0 */ -+ /* Clear bit 7 (txd) and 6 (tr_enable) */ -+ info->tx_ctrl &= 0x3F; -+ } else { -+ /* Set bit 7 (txd) and 6 (tr_enable) */ -+ info->tx_ctrl |= (0x80 | 0x40); -+ } -+ info->ioport[REG_TR_CTRL] = info->tx_ctrl; -+ local_irq_restore(flags); -+ return 0; -+} -+ -+static int -+rs_tiocmset(struct tty_struct *tty, struct file *file, -+ unsigned int set, unsigned int clear) -+{ -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ unsigned long flags; -+ -+ local_irq_save(flags); -+ -+ if (clear & TIOCM_RTS) -+ e100_rts(info, 0); -+ if (clear & TIOCM_DTR) -+ e100_dtr(info, 0); -+ /* Handle FEMALE behaviour */ -+ if (clear & TIOCM_RI) -+ e100_ri_out(info, 0); -+ if (clear & TIOCM_CD) -+ e100_cd_out(info, 0); -+ -+ if (set & TIOCM_RTS) -+ e100_rts(info, 1); -+ if (set & TIOCM_DTR) -+ e100_dtr(info, 1); -+ /* Handle FEMALE behaviour */ -+ if (set & TIOCM_RI) -+ e100_ri_out(info, 1); -+ if (set & TIOCM_CD) -+ e100_cd_out(info, 1); -+ -+ local_irq_restore(flags); -+ return 0; -+} -+ -+static int -+rs_tiocmget(struct tty_struct *tty, struct file *file) -+{ -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ unsigned int result; -+ unsigned long flags; -+ -+ local_irq_save(flags); -+ -+ result = -+ (!E100_RTS_GET(info) ? TIOCM_RTS : 0) -+ | (!E100_DTR_GET(info) ? TIOCM_DTR : 0) -+ | (!E100_RI_GET(info) ? TIOCM_RNG : 0) -+ | (!E100_DSR_GET(info) ? TIOCM_DSR : 0) -+ | (!E100_CD_GET(info) ? TIOCM_CAR : 0) -+ | (!E100_CTS_GET(info) ? TIOCM_CTS : 0); -+ -+ local_irq_restore(flags); -+ -+#ifdef SERIAL_DEBUG_IO -+ printk(KERN_DEBUG "ser%i: modem state: %i 0x%08X\n", -+ info->line, result, result); -+ { -+ char s[100]; -+ -+ get_control_state_str(result, s); -+ printk(KERN_DEBUG "state: %s\n", s); -+ } -+#endif -+ return result; -+ -+} -+ -+ -+static int -+rs_ioctl(struct tty_struct *tty, struct file * file, -+ unsigned int cmd, unsigned long arg) -+{ -+ struct e100_serial * info = (struct e100_serial *)tty->driver_data; -+ -+ if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) && -+ (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGWILD) && -+ (cmd != TIOCSERSWILD) && (cmd != TIOCSERGSTRUCT)) { -+ if (tty->flags & (1 << TTY_IO_ERROR)) -+ return -EIO; -+ } -+ -+ switch (cmd) { -+ case TIOCGSERIAL: -+ return get_serial_info(info, -+ (struct serial_struct *) arg); -+ case TIOCSSERIAL: -+ return set_serial_info(info, -+ (struct serial_struct *) arg); -+ case TIOCSERGETLSR: /* Get line status register */ -+ return get_lsr_info(info, (unsigned int *) arg); -+ -+ case TIOCSERGSTRUCT: -+ if (copy_to_user((struct e100_serial *) arg, -+ info, sizeof(struct e100_serial))) -+ return -EFAULT; -+ return 0; -+ -+#if defined(CONFIG_ETRAX_RS485) -+ case TIOCSERSETRS485: -+ { -+ /* In this ioctl we still use the old structure -+ * rs485_control for backward compatibility -+ * (if we use serial_rs485, then old user-level code -+ * wouldn't work anymore...). -+ * The use of this ioctl is deprecated: use TIOCSRS485 -+ * instead.*/ -+ struct rs485_control rs485ctrl; -+ struct serial_rs485 rs485data; -+ printk(KERN_DEBUG "The use of this ioctl is deprecated. Use TIOCSRS485 instead\n"); -+ if (copy_from_user(&rs485ctrl, (struct rs485_control *)arg, -+ sizeof(rs485ctrl))) -+ return -EFAULT; -+ -+ rs485data.delay_rts_before_send = rs485ctrl.delay_rts_before_send; -+ rs485data.flags = 0; -+ if (rs485ctrl.enabled) -+ rs485data.flags |= SER_RS485_ENABLED; -+ else -+ rs485data.flags &= ~(SER_RS485_ENABLED); -+ -+ if (rs485ctrl.rts_on_send) -+ rs485data.flags |= SER_RS485_RTS_ON_SEND; -+ else -+ rs485data.flags &= ~(SER_RS485_RTS_ON_SEND); -+ -+ if (rs485ctrl.rts_after_sent) -+ rs485data.flags |= SER_RS485_RTS_AFTER_SEND; -+ else -+ rs485data.flags &= ~(SER_RS485_RTS_AFTER_SEND); -+ -+ return e100_enable_rs485(tty, &rs485data); -+ } -+ -+ case TIOCSRS485: -+ { -+ /* This is the new version of TIOCSRS485, with new -+ * data structure serial_rs485 */ -+ struct serial_rs485 rs485data; -+ if (copy_from_user(&rs485data, (struct rs485_control *)arg, -+ sizeof(rs485data))) -+ return -EFAULT; -+ -+ return e100_enable_rs485(tty, &rs485data); -+ } -+ -+ -+ case TIOCSERWRRS485: -+ { -+ struct rs485_write rs485wr; -+ if (copy_from_user(&rs485wr, (struct rs485_write *)arg, -+ sizeof(rs485wr))) -+ return -EFAULT; -+ -+ return e100_write_rs485(tty, rs485wr.outc, rs485wr.outc_size); -+ } -+#endif -+ -+ default: -+ return -ENOIOCTLCMD; -+ } -+ return 0; -+} -+ -+static void -+rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios) -+{ -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ -+ change_speed(info); -+ -+ /* Handle turning off CRTSCTS */ -+ if ((old_termios->c_cflag & CRTSCTS) && -+ !(tty->termios->c_cflag & CRTSCTS)) { -+ tty->hw_stopped = 0; -+ rs_start(tty); -+ } -+ -+} -+ -+/* -+ * ------------------------------------------------------------ -+ * rs_close() -+ * -+ * This routine is called when the serial port gets closed. First, we -+ * wait for the last remaining data to be sent. Then, we unlink its -+ * S structure from the interrupt chain if necessary, and we free -+ * that IRQ if nothing is left in the chain. -+ * ------------------------------------------------------------ -+ */ -+static void -+rs_close(struct tty_struct *tty, struct file * filp) -+{ -+ struct e100_serial * info = (struct e100_serial *)tty->driver_data; -+ unsigned long flags; -+ -+ if (!info) -+ return; -+ -+ /* interrupts are disabled for this entire function */ -+ -+ local_irq_save(flags); -+ -+ if (tty_hung_up_p(filp)) { -+ local_irq_restore(flags); -+ return; -+ } -+ -+#ifdef SERIAL_DEBUG_OPEN -+ printk("[%d] rs_close ttyS%d, count = %d\n", current->pid, -+ info->line, info->count); -+#endif -+ if ((tty->count == 1) && (info->count != 1)) { -+ /* -+ * Uh, oh. tty->count is 1, which means that the tty -+ * structure will be freed. Info->count should always -+ * be one in these conditions. If it's greater than -+ * one, we've got real problems, since it means the -+ * serial port won't be shutdown. -+ */ -+ printk(KERN_CRIT -+ "rs_close: bad serial port count; tty->count is 1, " -+ "info->count is %d\n", info->count); -+ info->count = 1; -+ } -+ if (--info->count < 0) { -+ printk(KERN_CRIT "rs_close: bad serial port count for ttyS%d: %d\n", -+ info->line, info->count); -+ info->count = 0; -+ } -+ if (info->count) { -+ local_irq_restore(flags); -+ return; -+ } -+ info->flags |= ASYNC_CLOSING; -+ /* -+ * Save the termios structure, since this port may have -+ * separate termios for callout and dialin. -+ */ -+ if (info->flags & ASYNC_NORMAL_ACTIVE) -+ info->normal_termios = *tty->termios; -+ /* -+ * Now we wait for the transmit buffer to clear; and we notify -+ * the line discipline to only process XON/XOFF characters. -+ */ -+ tty->closing = 1; -+ if (info->closing_wait != ASYNC_CLOSING_WAIT_NONE) -+ tty_wait_until_sent(tty, info->closing_wait); -+ /* -+ * At this point we stop accepting input. To do this, we -+ * disable the serial receiver and the DMA receive interrupt. -+ */ -+#ifdef SERIAL_HANDLE_EARLY_ERRORS -+ e100_disable_serial_data_irq(info); -+#endif -+ -+#ifndef CONFIG_SVINTO_SIM -+ e100_disable_rx(info); -+ e100_disable_rx_irq(info); -+ -+ if (info->flags & ASYNC_INITIALIZED) { -+ /* -+ * Before we drop DTR, make sure the UART transmitter -+ * has completely drained; this is especially -+ * important as we have a transmit FIFO! -+ */ -+ rs_wait_until_sent(tty, HZ); -+ } -+#endif -+ -+ shutdown(info); -+ rs_flush_buffer(tty); -+ tty_ldisc_flush(tty); -+ tty->closing = 0; -+ info->event = 0; -+ info->port.tty = NULL; -+ if (info->blocked_open) { -+ if (info->close_delay) -+ schedule_timeout_interruptible(info->close_delay); -+ wake_up_interruptible(&info->open_wait); -+ } -+ info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING); -+ wake_up_interruptible(&info->close_wait); -+ local_irq_restore(flags); -+ -+ /* port closed */ -+ -+#if defined(CONFIG_ETRAX_RS485) -+ if (info->rs485.flags & SER_RS485_ENABLED) { -+ info->rs485.flags &= ~(SER_RS485_ENABLED); -+#if defined(CONFIG_ETRAX_RS485_ON_PA) -+ *R_PORT_PA_DATA = port_pa_data_shadow &= ~(1 << rs485_pa_bit); -+#endif -+#if defined(CONFIG_ETRAX_RS485_ON_PORT_G) -+ REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow, -+ rs485_port_g_bit, 0); -+#endif -+#if defined(CONFIG_ETRAX_RS485_LTC1387) -+ REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow, -+ CONFIG_ETRAX_RS485_LTC1387_DXEN_PORT_G_BIT, 0); -+ REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow, -+ CONFIG_ETRAX_RS485_LTC1387_RXEN_PORT_G_BIT, 0); -+#endif -+ } -+#endif -+ -+ /* -+ * Release any allocated DMA irq's. -+ */ -+ if (info->dma_in_enabled) { -+ free_irq(info->dma_in_irq_nbr, info); -+ cris_free_dma(info->dma_in_nbr, info->dma_in_irq_description); -+ info->uses_dma_in = 0; -+#ifdef SERIAL_DEBUG_OPEN -+ printk(KERN_DEBUG "DMA irq '%s' freed\n", -+ info->dma_in_irq_description); -+#endif -+ } -+ if (info->dma_out_enabled) { -+ free_irq(info->dma_out_irq_nbr, info); -+ cris_free_dma(info->dma_out_nbr, info->dma_out_irq_description); -+ info->uses_dma_out = 0; -+#ifdef SERIAL_DEBUG_OPEN -+ printk(KERN_DEBUG "DMA irq '%s' freed\n", -+ info->dma_out_irq_description); -+#endif -+ } -+} -+ -+/* -+ * rs_wait_until_sent() --- wait until the transmitter is empty -+ */ -+static void rs_wait_until_sent(struct tty_struct *tty, int timeout) -+{ -+ unsigned long orig_jiffies; -+ struct e100_serial *info = (struct e100_serial *)tty->driver_data; -+ unsigned long curr_time = jiffies; -+ unsigned long curr_time_usec = GET_JIFFIES_USEC(); -+ long elapsed_usec = -+ (curr_time - info->last_tx_active) * (1000000/HZ) + -+ curr_time_usec - info->last_tx_active_usec; -+ -+ /* -+ * Check R_DMA_CHx_STATUS bit 0-6=number of available bytes in FIFO -+ * R_DMA_CHx_HWSW bit 31-16=nbr of bytes left in DMA buffer (0=64k) -+ */ -+ lock_kernel(); -+ orig_jiffies = jiffies; -+ while (info->xmit.head != info->xmit.tail || /* More in send queue */ -+ (*info->ostatusadr & 0x007f) || /* more in FIFO */ -+ (elapsed_usec < 2*info->char_time_usec)) { -+ schedule_timeout_interruptible(1); -+ if (signal_pending(current)) -+ break; -+ if (timeout && time_after(jiffies, orig_jiffies + timeout)) -+ break; -+ curr_time = jiffies; -+ curr_time_usec = GET_JIFFIES_USEC(); -+ elapsed_usec = -+ (curr_time - info->last_tx_active) * (1000000/HZ) + -+ curr_time_usec - info->last_tx_active_usec; -+ } -+ set_current_state(TASK_RUNNING); -+ unlock_kernel(); -+} -+ -+/* -+ * rs_hangup() --- called by tty_hangup() when a hangup is signaled. -+ */ -+void -+rs_hangup(struct tty_struct *tty) -+{ -+ struct e100_serial * info = (struct e100_serial *)tty->driver_data; -+ -+ rs_flush_buffer(tty); -+ shutdown(info); -+ info->event = 0; -+ info->count = 0; -+ info->flags &= ~ASYNC_NORMAL_ACTIVE; -+ info->port.tty = NULL; -+ wake_up_interruptible(&info->open_wait); -+} -+ -+/* -+ * ------------------------------------------------------------ -+ * rs_open() and friends -+ * ------------------------------------------------------------ -+ */ -+static int -+block_til_ready(struct tty_struct *tty, struct file * filp, -+ struct e100_serial *info) -+{ -+ DECLARE_WAITQUEUE(wait, current); -+ unsigned long flags; -+ int retval; -+ int do_clocal = 0, extra_count = 0; -+ -+ /* -+ * If the device is in the middle of being closed, then block -+ * until it's done, and then try again. -+ */ -+ if (tty_hung_up_p(filp) || -+ (info->flags & ASYNC_CLOSING)) { -+ wait_event_interruptible(info->close_wait, -+ !(info->flags & ASYNC_CLOSING)); -+#ifdef SERIAL_DO_RESTART -+ if (info->flags & ASYNC_HUP_NOTIFY) -+ return -EAGAIN; -+ else -+ return -ERESTARTSYS; -+#else -+ return -EAGAIN; -+#endif -+ } -+ -+ /* -+ * If non-blocking mode is set, or the port is not enabled, -+ * then make the check up front and then exit. -+ */ -+ if ((filp->f_flags & O_NONBLOCK) || -+ (tty->flags & (1 << TTY_IO_ERROR))) { -+ info->flags |= ASYNC_NORMAL_ACTIVE; -+ return 0; -+ } -+ -+ if (tty->termios->c_cflag & CLOCAL) { -+ do_clocal = 1; -+ } -+ -+ /* -+ * Block waiting for the carrier detect and the line to become -+ * free (i.e., not in use by the callout). While we are in -+ * this loop, info->count is dropped by one, so that -+ * rs_close() knows when to free things. We restore it upon -+ * exit, either normal or abnormal. -+ */ -+ retval = 0; -+ add_wait_queue(&info->open_wait, &wait); -+#ifdef SERIAL_DEBUG_OPEN -+ printk("block_til_ready before block: ttyS%d, count = %d\n", -+ info->line, info->count); -+#endif -+ local_irq_save(flags); -+ if (!tty_hung_up_p(filp)) { -+ extra_count++; -+ info->count--; -+ } -+ local_irq_restore(flags); -+ info->blocked_open++; -+ while (1) { -+ local_irq_save(flags); -+ /* assert RTS and DTR */ -+ e100_rts(info, 1); -+ e100_dtr(info, 1); -+ local_irq_restore(flags); -+ set_current_state(TASK_INTERRUPTIBLE); -+ if (tty_hung_up_p(filp) || -+ !(info->flags & ASYNC_INITIALIZED)) { -+#ifdef SERIAL_DO_RESTART -+ if (info->flags & ASYNC_HUP_NOTIFY) -+ retval = -EAGAIN; -+ else -+ retval = -ERESTARTSYS; -+#else -+ retval = -EAGAIN; -+#endif -+ break; -+ } -+ if (!(info->flags & ASYNC_CLOSING) && do_clocal) -+ /* && (do_clocal || DCD_IS_ASSERTED) */ -+ break; -+ if (signal_pending(current)) { -+ retval = -ERESTARTSYS; -+ break; -+ } -+#ifdef SERIAL_DEBUG_OPEN -+ printk("block_til_ready blocking: ttyS%d, count = %d\n", -+ info->line, info->count); -+#endif -+ schedule(); -+ } -+ set_current_state(TASK_RUNNING); -+ remove_wait_queue(&info->open_wait, &wait); -+ if (extra_count) -+ info->count++; -+ info->blocked_open--; -+#ifdef SERIAL_DEBUG_OPEN -+ printk("block_til_ready after blocking: ttyS%d, count = %d\n", -+ info->line, info->count); -+#endif -+ if (retval) -+ return retval; -+ info->flags |= ASYNC_NORMAL_ACTIVE; -+ return 0; -+} -+ -+static void -+deinit_port(struct e100_serial *info) -+{ -+ if (info->dma_out_enabled) { -+ cris_free_dma(info->dma_out_nbr, info->dma_out_irq_description); -+ free_irq(info->dma_out_irq_nbr, info); -+ } -+ if (info->dma_in_enabled) { -+ cris_free_dma(info->dma_in_nbr, info->dma_in_irq_description); -+ free_irq(info->dma_in_irq_nbr, info); -+ } -+} -+ -+/* -+ * This routine is called whenever a serial port is opened. -+ * It performs the serial-specific initialization for the tty structure. -+ */ -+static int -+rs_open(struct tty_struct *tty, struct file * filp) -+{ -+ struct e100_serial *info; -+ int retval, line; -+ unsigned long page; -+ int allocated_resources = 0; -+ -+ /* find which port we want to open */ -+ line = tty->index; -+ -+ if (line < 0 || line >= NR_PORTS) -+ return -ENODEV; -+ -+ /* find the corresponding e100_serial struct in the table */ -+ info = rs_table + line; -+ -+ /* don't allow the opening of ports that are not enabled in the HW config */ -+ if (!info->enabled) -+ return -ENODEV; -+ -+#ifdef SERIAL_DEBUG_OPEN -+ printk("[%d] rs_open %s, count = %d\n", current->pid, tty->name, -+ info->count); -+#endif -+ -+ info->count++; -+ tty->driver_data = info; -+ info->port.tty = tty; -+ -+ info->port.tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0; -+ -+ if (!tmp_buf) { -+ page = get_zeroed_page(GFP_KERNEL); -+ if (!page) { -+ return -ENOMEM; -+ } -+ if (tmp_buf) -+ free_page(page); -+ else -+ tmp_buf = (unsigned char *) page; -+ } -+ -+ /* -+ * If the port is in the middle of closing, bail out now -+ */ -+ if (tty_hung_up_p(filp) || -+ (info->flags & ASYNC_CLOSING)) { -+ wait_event_interruptible(info->close_wait, -+ !(info->flags & ASYNC_CLOSING)); -+#ifdef SERIAL_DO_RESTART -+ return ((info->flags & ASYNC_HUP_NOTIFY) ? -+ -EAGAIN : -ERESTARTSYS); -+#else -+ return -EAGAIN; -+#endif -+ } -+ -+ /* -+ * If DMA is enabled try to allocate the irq's. -+ */ -+ if (info->count == 1) { -+ allocated_resources = 1; -+ if (info->dma_in_enabled) { -+ if (request_irq(info->dma_in_irq_nbr, -+ rec_interrupt, -+ info->dma_in_irq_flags, -+ info->dma_in_irq_description, -+ info)) { -+ printk(KERN_WARNING "DMA irq '%s' busy; " -+ "falling back to non-DMA mode\n", -+ info->dma_in_irq_description); -+ /* Make sure we never try to use DMA in */ -+ /* for the port again. */ -+ info->dma_in_enabled = 0; -+ } else if (cris_request_dma(info->dma_in_nbr, -+ info->dma_in_irq_description, -+ DMA_VERBOSE_ON_ERROR, -+ info->dma_owner)) { -+ free_irq(info->dma_in_irq_nbr, info); -+ printk(KERN_WARNING "DMA '%s' busy; " -+ "falling back to non-DMA mode\n", -+ info->dma_in_irq_description); -+ /* Make sure we never try to use DMA in */ -+ /* for the port again. */ -+ info->dma_in_enabled = 0; -+ } -+#ifdef SERIAL_DEBUG_OPEN -+ else -+ printk(KERN_DEBUG "DMA irq '%s' allocated\n", -+ info->dma_in_irq_description); -+#endif -+ } -+ if (info->dma_out_enabled) { -+ if (request_irq(info->dma_out_irq_nbr, -+ tr_interrupt, -+ info->dma_out_irq_flags, -+ info->dma_out_irq_description, -+ info)) { -+ printk(KERN_WARNING "DMA irq '%s' busy; " -+ "falling back to non-DMA mode\n", -+ info->dma_out_irq_description); -+ /* Make sure we never try to use DMA out */ -+ /* for the port again. */ -+ info->dma_out_enabled = 0; -+ } else if (cris_request_dma(info->dma_out_nbr, -+ info->dma_out_irq_description, -+ DMA_VERBOSE_ON_ERROR, -+ info->dma_owner)) { -+ free_irq(info->dma_out_irq_nbr, info); -+ printk(KERN_WARNING "DMA '%s' busy; " -+ "falling back to non-DMA mode\n", -+ info->dma_out_irq_description); -+ /* Make sure we never try to use DMA out */ -+ /* for the port again. */ -+ info->dma_out_enabled = 0; -+ } -+#ifdef SERIAL_DEBUG_OPEN -+ else -+ printk(KERN_DEBUG "DMA irq '%s' allocated\n", -+ info->dma_out_irq_description); -+#endif -+ } -+ } -+ -+ /* -+ * Start up the serial port -+ */ -+ -+ retval = startup(info); -+ if (retval) { -+ if (allocated_resources) -+ deinit_port(info); -+ -+ /* FIXME Decrease count info->count here too? */ -+ return retval; -+ } -+ -+ -+ retval = block_til_ready(tty, filp, info); -+ if (retval) { -+#ifdef SERIAL_DEBUG_OPEN -+ printk("rs_open returning after block_til_ready with %d\n", -+ retval); -+#endif -+ if (allocated_resources) -+ deinit_port(info); -+ -+ return retval; -+ } -+ -+ if ((info->count == 1) && (info->flags & ASYNC_SPLIT_TERMIOS)) { -+ *tty->termios = info->normal_termios; -+ change_speed(info); -+ } -+ -+#ifdef SERIAL_DEBUG_OPEN -+ printk("rs_open ttyS%d successful...\n", info->line); -+#endif -+ DLOG_INT_TRIG( log_int_pos = 0); -+ -+ DFLIP( if (info->line == SERIAL_DEBUG_LINE) { -+ info->icount.rx = 0; -+ } ); -+ -+ return 0; -+} -+ -+#ifdef CONFIG_PROC_FS -+/* -+ * /proc fs routines.... -+ */ -+ -+static void seq_line_info(struct seq_file *m, struct e100_serial *info) -+{ -+ unsigned long tmp; -+ -+ seq_printf(m, "%d: uart:E100 port:%lX irq:%d", -+ info->line, (unsigned long)info->ioport, info->irq); -+ -+ if (!info->ioport || (info->type == PORT_UNKNOWN)) { -+ seq_printf(m, "\n"); -+ return; -+ } -+ -+ seq_printf(m, " baud:%d", info->baud); -+ seq_printf(m, " tx:%lu rx:%lu", -+ (unsigned long)info->icount.tx, -+ (unsigned long)info->icount.rx); -+ tmp = CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE); -+ if (tmp) -+ seq_printf(m, " tx_pend:%lu/%lu", -+ (unsigned long)tmp, -+ (unsigned long)SERIAL_XMIT_SIZE); -+ -+ seq_printf(m, " rx_pend:%lu/%lu", -+ (unsigned long)info->recv_cnt, -+ (unsigned long)info->max_recv_cnt); -+ -+#if 1 -+ if (info->port.tty) { -+ if (info->port.tty->stopped) -+ seq_printf(m, " stopped:%i", -+ (int)info->port.tty->stopped); -+ if (info->port.tty->hw_stopped) -+ seq_printf(m, " hw_stopped:%i", -+ (int)info->port.tty->hw_stopped); -+ } -+ -+ { -+ unsigned char rstat = info->ioport[REG_STATUS]; -+ if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect)) -+ seq_printf(m, " xoff_detect:1"); -+ } -+ -+#endif -+ -+ if (info->icount.frame) -+ seq_printf(m, " fe:%lu", (unsigned long)info->icount.frame); -+ -+ if (info->icount.parity) -+ seq_printf(m, " pe:%lu", (unsigned long)info->icount.parity); -+ -+ if (info->icount.brk) -+ seq_printf(m, " brk:%lu", (unsigned long)info->icount.brk); -+ -+ if (info->icount.overrun) -+ seq_printf(m, " oe:%lu", (unsigned long)info->icount.overrun); -+ -+ /* -+ * Last thing is the RS-232 status lines -+ */ -+ if (!E100_RTS_GET(info)) -+ seq_puts(m, "|RTS"); -+ if (!E100_CTS_GET(info)) -+ seq_puts(m, "|CTS"); -+ if (!E100_DTR_GET(info)) -+ seq_puts(m, "|DTR"); -+ if (!E100_DSR_GET(info)) -+ seq_puts(m, "|DSR"); -+ if (!E100_CD_GET(info)) -+ seq_puts(m, "|CD"); -+ if (!E100_RI_GET(info)) -+ seq_puts(m, "|RI"); -+ seq_puts(m, "\n"); -+} -+ -+ -+static int crisv10_proc_show(struct seq_file *m, void *v) -+{ -+ int i; -+ -+ seq_printf(m, "serinfo:1.0 driver:%s\n", serial_version); -+ -+ for (i = 0; i < NR_PORTS; i++) { -+ if (!rs_table[i].enabled) -+ continue; -+ seq_line_info(m, &rs_table[i]); -+ } -+#ifdef DEBUG_LOG_INCLUDED -+ for (i = 0; i < debug_log_pos; i++) { -+ seq_printf(m, "%-4i %lu.%lu ", -+ i, debug_log[i].time, -+ timer_data_to_ns(debug_log[i].timer_data)); -+ seq_printf(m, debug_log[i].string, debug_log[i].value); -+ } -+ seq_printf(m, "debug_log %i/%i\n", i, DEBUG_LOG_SIZE); -+ debug_log_pos = 0; -+#endif -+ return 0; -+} -+ -+static int crisv10_proc_open(struct inode *inode, struct file *file) -+{ -+ return single_open(file, crisv10_proc_show, NULL); -+} -+ -+static const struct file_operations crisv10_proc_fops = { -+ .owner = THIS_MODULE, -+ .open = crisv10_proc_open, -+ .read = seq_read, -+ .llseek = seq_lseek, -+ .release = single_release, -+}; -+#endif -+ -+ -+/* Finally, routines used to initialize the serial driver. */ -+ -+static void show_serial_version(void) -+{ -+ printk(KERN_INFO -+ "ETRAX 100LX serial-driver %s, " -+ "(c) 2000-2004 Axis Communications AB\r\n", -+ &serial_version[11]); /* "$Revision: x.yy" */ -+} -+ -+/* rs_init inits the driver at boot (using the module_init chain) */ -+ -+static const struct tty_operations rs_ops = { -+ .open = rs_open, -+ .close = rs_close, -+ .write = rs_write, -+ .flush_chars = rs_flush_chars, -+ .write_room = rs_write_room, -+ .chars_in_buffer = rs_chars_in_buffer, -+ .flush_buffer = rs_flush_buffer, -+ .ioctl = rs_ioctl, -+ .throttle = rs_throttle, -+ .unthrottle = rs_unthrottle, -+ .set_termios = rs_set_termios, -+ .stop = rs_stop, -+ .start = rs_start, -+ .hangup = rs_hangup, -+ .break_ctl = rs_break, -+ .send_xchar = rs_send_xchar, -+ .wait_until_sent = rs_wait_until_sent, -+ .tiocmget = rs_tiocmget, -+ .tiocmset = rs_tiocmset, -+#ifdef CONFIG_PROC_FS -+ .proc_fops = &crisv10_proc_fops, -+#endif -+}; -+ -+static int __init rs_init(void) -+{ -+ int i; -+ struct e100_serial *info; -+ struct tty_driver *driver = alloc_tty_driver(NR_PORTS); -+ -+ if (!driver) -+ return -ENOMEM; -+ -+ show_serial_version(); -+ -+ /* Setup the timed flush handler system */ -+ -+#if !defined(CONFIG_ETRAX_SERIAL_FAST_TIMER) -+ setup_timer(&flush_timer, timed_flush_handler, 0); -+ mod_timer(&flush_timer, jiffies + 5); -+#endif -+ -+#if defined(CONFIG_ETRAX_RS485) -+#if defined(CONFIG_ETRAX_RS485_ON_PA) -+ if (cris_io_interface_allocate_pins(if_ser0, 'a', rs485_pa_bit, -+ rs485_pa_bit)) { -+ printk(KERN_CRIT "ETRAX100LX serial: Could not allocate " -+ "RS485 pin\n"); -+ put_tty_driver(driver); -+ return -EBUSY; -+ } -+#endif -+#if defined(CONFIG_ETRAX_RS485_ON_PORT_G) -+ if (cris_io_interface_allocate_pins(if_ser0, 'g', rs485_pa_bit, -+ rs485_port_g_bit)) { -+ printk(KERN_CRIT "ETRAX100LX serial: Could not allocate " -+ "RS485 pin\n"); -+ put_tty_driver(driver); -+ return -EBUSY; -+ } -+#endif -+#endif -+ -+ /* Initialize the tty_driver structure */ -+ -+ driver->driver_name = "serial"; -+ driver->name = "ttyS"; -+ driver->major = TTY_MAJOR; -+ driver->minor_start = 64; -+ driver->type = TTY_DRIVER_TYPE_SERIAL; -+ driver->subtype = SERIAL_TYPE_NORMAL; -+ driver->init_termios = tty_std_termios; -+ driver->init_termios.c_cflag = -+ B115200 | CS8 | CREAD | HUPCL | CLOCAL; /* is normally B9600 default... */ -+ driver->init_termios.c_ispeed = 115200; -+ driver->init_termios.c_ospeed = 115200; -+ driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV; -+ -+ tty_set_operations(driver, &rs_ops); -+ serial_driver = driver; -+ if (tty_register_driver(driver)) -+ panic("Couldn't register serial driver\n"); -+ /* do some initializing for the separate ports */ -+ -+ for (i = 0, info = rs_table; i < NR_PORTS; i++,info++) { -+ if (info->enabled) { -+ if (cris_request_io_interface(info->io_if, -+ info->io_if_description)) { -+ printk(KERN_CRIT "ETRAX100LX async serial: " -+ "Could not allocate IO pins for " -+ "%s, port %d\n", -+ info->io_if_description, i); -+ info->enabled = 0; -+ } -+ } -+ info->uses_dma_in = 0; -+ info->uses_dma_out = 0; -+ info->line = i; -+ info->port.tty = NULL; -+ info->type = PORT_ETRAX; -+ info->tr_running = 0; -+ info->forced_eop = 0; -+ info->baud_base = DEF_BAUD_BASE; -+ info->custom_divisor = 0; -+ info->flags = 0; -+ info->close_delay = 5*HZ/10; -+ info->closing_wait = 30*HZ; -+ info->x_char = 0; -+ info->event = 0; -+ info->count = 0; -+ info->blocked_open = 0; -+ info->normal_termios = driver->init_termios; -+ init_waitqueue_head(&info->open_wait); -+ init_waitqueue_head(&info->close_wait); -+ info->xmit.buf = NULL; -+ info->xmit.tail = info->xmit.head = 0; -+ info->first_recv_buffer = info->last_recv_buffer = NULL; -+ info->recv_cnt = info->max_recv_cnt = 0; -+ info->last_tx_active_usec = 0; -+ info->last_tx_active = 0; -+ -+#if defined(CONFIG_ETRAX_RS485) -+ /* Set sane defaults */ -+ info->rs485.flags &= ~(SER_RS485_RTS_ON_SEND); -+ info->rs485.flags |= SER_RS485_RTS_AFTER_SEND; -+ info->rs485.delay_rts_before_send = 0; -+ info->rs485.flags &= ~(SER_RS485_ENABLED); -+#endif -+ INIT_WORK(&info->work, do_softint); -+ -+ if (info->enabled) { -+ printk(KERN_INFO "%s%d at 0x%x is a builtin UART with DMA\n", -+ serial_driver->name, info->line, (unsigned int)info->ioport); -+ } -+ } -+#ifdef CONFIG_ETRAX_FAST_TIMER -+#ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER -+ memset(fast_timers, 0, sizeof(fast_timers)); +diff -Nur linux-2.6.34.orig/drivers/serial/crisv10.c linux-2.6.34/drivers/serial/crisv10.c +--- linux-2.6.34.orig/drivers/serial/crisv10.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/serial/crisv10.c 2010-05-25 19:41:51.550975576 +0200 +@@ -13,6 +13,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -27,6 +28,7 @@ + #include + #include + #include ++#include + #include + #include + #include +@@ -4415,6 +4417,7 @@ + #endif + }; + ++static struct class *rs_class; + static int __init rs_init(void) + { + int i; +@@ -4548,6 +4551,24 @@ + #endif + #endif /* CONFIG_SVINTO_SIM */ + ++ rs_class = class_create(THIS_MODULE, "rs_tty"); ++#ifdef CONFIG_ETRAX_SERIAL_PORT0 ++ device_create(rs_class, NULL, ++ MKDEV(TTY_MAJOR, 64), NULL, "ttyS0"); +#endif -+#ifdef CONFIG_ETRAX_RS485 -+ memset(fast_timers_rs485, 0, sizeof(fast_timers_rs485)); ++#ifdef CONFIG_ETRAX_SERIAL_PORT1 ++ device_create(rs_class, NULL, ++ MKDEV(TTY_MAJOR, 65), NULL, "ttyS1"); +#endif -+ fast_timer_init(); ++#ifdef CONFIG_ETRAX_SERIAL_PORT2 ++ device_create(rs_class, NULL, ++ MKDEV(TTY_MAJOR, 66), NULL, "ttyS2"); +#endif -+ -+#ifndef CONFIG_SVINTO_SIM -+#ifndef CONFIG_ETRAX_KGDB -+ /* Not needed in simulator. May only complicate stuff. */ -+ /* hook the irq's for DMA channel 6 and 7, serial output and input, and some more... */ -+ -+ if (request_irq(SERIAL_IRQ_NBR, ser_interrupt, -+ IRQF_SHARED | IRQF_DISABLED, "serial ", driver)) -+ panic("%s: Failed to request irq8", __func__); -+ ++#ifdef CONFIG_ETRAX_SERIAL_PORT3 ++ device_create(rs_class, NULL, ++ MKDEV(TTY_MAJOR, 67), NULL, "ttyS3"); +#endif -+#endif /* CONFIG_SVINTO_SIM */ -+ -+ return 0; -+} -+ -+/* this makes sure that rs_init is called during kernel boot */ + -+module_init(rs_init); -diff -Nur linux-2.6.32.orig/drivers/usb/host/hc-cris-dbg.h linux-2.6.32/drivers/usb/host/hc-cris-dbg.h ---- linux-2.6.32.orig/drivers/usb/host/hc-cris-dbg.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.32/drivers/usb/host/hc-cris-dbg.h 2010-01-10 13:41:59.276309474 +0100 + return 0; + } + +diff -Nur linux-2.6.34.orig/drivers/usb/host/hc-cris-dbg.h linux-2.6.34/drivers/usb/host/hc-cris-dbg.h +--- linux-2.6.34.orig/drivers/usb/host/hc-cris-dbg.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/usb/host/hc-cris-dbg.h 2010-05-25 19:41:51.632223123 +0200 @@ -0,0 +1,146 @@ + +/* macros for debug output */ @@ -6915,10 +591,10 @@ diff -Nur linux-2.6.32.orig/drivers/usb/host/hc-cris-dbg.h linux-2.6.32/drivers/ + }; \ + s; \ + }) -diff -Nur linux-2.6.32.orig/drivers/usb/host/hc-crisv10.c linux-2.6.32/drivers/usb/host/hc-crisv10.c ---- linux-2.6.32.orig/drivers/usb/host/hc-crisv10.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.32/drivers/usb/host/hc-crisv10.c 2010-01-10 13:41:59.326309689 +0100 -@@ -0,0 +1,4801 @@ +diff -Nur linux-2.6.34.orig/drivers/usb/host/hc-crisv10.c linux-2.6.34/drivers/usb/host/hc-crisv10.c +--- linux-2.6.34.orig/drivers/usb/host/hc-crisv10.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/usb/host/hc-crisv10.c 2010-05-25 19:48:39.180967618 +0200 +@@ -0,0 +1,4802 @@ +/* + * + * ETRAX 100LX USB Host Controller Driver @@ -6933,6 +609,7 @@ diff -Nur linux-2.6.32.orig/drivers/usb/host/hc-crisv10.c linux-2.6.32/drivers/u +#include +#include +#include ++#include +#include +#include +#include @@ -11720,9 +5397,9 @@ diff -Nur linux-2.6.32.orig/drivers/usb/host/hc-crisv10.c linux-2.6.32/drivers/u +/* Module hooks */ +module_init(module_hcd_init); +module_exit(module_hcd_exit); -diff -Nur linux-2.6.32.orig/drivers/usb/host/hc-crisv10.h linux-2.6.32/drivers/usb/host/hc-crisv10.h ---- linux-2.6.32.orig/drivers/usb/host/hc-crisv10.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.32/drivers/usb/host/hc-crisv10.h 2010-01-10 13:41:59.326309689 +0100 +diff -Nur linux-2.6.34.orig/drivers/usb/host/hc-crisv10.h linux-2.6.34/drivers/usb/host/hc-crisv10.h +--- linux-2.6.34.orig/drivers/usb/host/hc-crisv10.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/usb/host/hc-crisv10.h 2010-05-25 19:41:51.695693244 +0200 @@ -0,0 +1,331 @@ +#ifndef __LINUX_ETRAX_USB_H +#define __LINUX_ETRAX_USB_H @@ -12055,116 +5732,30 @@ diff -Nur linux-2.6.32.orig/drivers/usb/host/hc-crisv10.h linux-2.6.32/drivers/u +#define USB_SB_command__full__yes 1 + +#endif -diff -Nur linux-2.6.32.orig/drivers/usb/host/Makefile linux-2.6.32/drivers/usb/host/Makefile ---- linux-2.6.32.orig/drivers/usb/host/Makefile 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/drivers/usb/host/Makefile 2010-01-10 13:41:59.326309689 +0100 -@@ -32,3 +32,4 @@ +diff -Nur linux-2.6.34.orig/drivers/usb/host/Makefile linux-2.6.34/drivers/usb/host/Makefile +--- linux-2.6.34.orig/drivers/usb/host/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/usb/host/Makefile 2010-05-25 19:42:41.304723153 +0200 +@@ -32,5 +32,6 @@ obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o obj-$(CONFIG_USB_ISP1760_HCD) += isp1760.o obj-$(CONFIG_USB_HWA_HCD) += hwa-hc.o +obj-$(CONFIG_ETRAX_USB_HOST) += hc-crisv10.o -diff -Nur linux-2.6.32.orig/drivers/usb/host/Makefile.orig linux-2.6.32/drivers/usb/host/Makefile.orig ---- linux-2.6.32.orig/drivers/usb/host/Makefile.orig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.32/drivers/usb/host/Makefile.orig 2009-12-03 04:51:21.000000000 +0100 -@@ -0,0 +1,34 @@ -+# -+# Makefile for USB Host Controller Drivers -+# -+ -+ifeq ($(CONFIG_USB_DEBUG),y) -+ EXTRA_CFLAGS += -DDEBUG -+endif -+ -+isp1760-objs := isp1760-hcd.o isp1760-if.o -+fhci-objs := fhci-hcd.o fhci-hub.o fhci-q.o fhci-mem.o \ -+ fhci-tds.o fhci-sched.o -+ifeq ($(CONFIG_FHCI_DEBUG),y) -+fhci-objs += fhci-dbg.o -+endif -+xhci-objs := xhci-hcd.o xhci-mem.o xhci-pci.o xhci-ring.o xhci-hub.o xhci-dbg.o -+ -+obj-$(CONFIG_USB_WHCI_HCD) += whci/ -+ -+obj-$(CONFIG_PCI) += pci-quirks.o -+ -+obj-$(CONFIG_USB_EHCI_HCD) += ehci-hcd.o -+obj-$(CONFIG_USB_OXU210HP_HCD) += oxu210hp-hcd.o -+obj-$(CONFIG_USB_ISP116X_HCD) += isp116x-hcd.o -+obj-$(CONFIG_USB_ISP1362_HCD) += isp1362-hcd.o -+obj-$(CONFIG_USB_OHCI_HCD) += ohci-hcd.o -+obj-$(CONFIG_USB_UHCI_HCD) += uhci-hcd.o -+obj-$(CONFIG_USB_FHCI_HCD) += fhci.o -+obj-$(CONFIG_USB_XHCI_HCD) += xhci.o -+obj-$(CONFIG_USB_SL811_HCD) += sl811-hcd.o -+obj-$(CONFIG_USB_SL811_CS) += sl811_cs.o -+obj-$(CONFIG_USB_U132_HCD) += u132-hcd.o -+obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o -+obj-$(CONFIG_USB_ISP1760_HCD) += isp1760.o -+obj-$(CONFIG_USB_HWA_HCD) += hwa-hc.o -diff -Nur linux-2.6.32.orig/drivers/usb/Makefile linux-2.6.32/drivers/usb/Makefile ---- linux-2.6.32.orig/drivers/usb/Makefile 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/drivers/usb/Makefile 2010-01-10 13:41:59.326309689 +0100 + obj-$(CONFIG_USB_IMX21_HCD) += imx21-hcd.o + +diff -Nur linux-2.6.34.orig/drivers/usb/Makefile linux-2.6.34/drivers/usb/Makefile +--- linux-2.6.34.orig/drivers/usb/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/usb/Makefile 2010-05-25 19:43:05.884723032 +0200 @@ -21,6 +21,7 @@ obj-$(CONFIG_USB_R8A66597_HCD) += host/ obj-$(CONFIG_USB_HWA_HCD) += host/ obj-$(CONFIG_USB_ISP1760_HCD) += host/ +obj-$(CONFIG_ETRAX_USB_HOST) += host/ + obj-$(CONFIG_USB_IMX21_HCD) += host/ obj-$(CONFIG_USB_C67X00_HCD) += c67x00/ - -diff -Nur linux-2.6.32.orig/drivers/usb/Makefile.orig linux-2.6.32/drivers/usb/Makefile.orig ---- linux-2.6.32.orig/drivers/usb/Makefile.orig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.32/drivers/usb/Makefile.orig 2009-12-03 04:51:21.000000000 +0100 -@@ -0,0 +1,46 @@ -+# -+# Makefile for the kernel USB device drivers. -+# -+ -+# Object files in subdirectories -+ -+obj-$(CONFIG_USB) += core/ -+ -+obj-$(CONFIG_USB_MON) += mon/ -+ -+obj-$(CONFIG_PCI) += host/ -+obj-$(CONFIG_USB_EHCI_HCD) += host/ -+obj-$(CONFIG_USB_ISP116X_HCD) += host/ -+obj-$(CONFIG_USB_OHCI_HCD) += host/ -+obj-$(CONFIG_USB_UHCI_HCD) += host/ -+obj-$(CONFIG_USB_FHCI_HCD) += host/ -+obj-$(CONFIG_USB_XHCI_HCD) += host/ -+obj-$(CONFIG_USB_SL811_HCD) += host/ -+obj-$(CONFIG_USB_ISP1362_HCD) += host/ -+obj-$(CONFIG_USB_U132_HCD) += host/ -+obj-$(CONFIG_USB_R8A66597_HCD) += host/ -+obj-$(CONFIG_USB_HWA_HCD) += host/ -+obj-$(CONFIG_USB_ISP1760_HCD) += host/ -+ -+obj-$(CONFIG_USB_C67X00_HCD) += c67x00/ -+ -+obj-$(CONFIG_USB_WUSB) += wusbcore/ -+ -+obj-$(CONFIG_USB_ACM) += class/ -+obj-$(CONFIG_USB_PRINTER) += class/ -+obj-$(CONFIG_USB_WDM) += class/ -+obj-$(CONFIG_USB_TMC) += class/ -+ -+obj-$(CONFIG_USB_STORAGE) += storage/ -+obj-$(CONFIG_USB) += storage/ -+ -+obj-$(CONFIG_USB_MDC800) += image/ -+obj-$(CONFIG_USB_MICROTEK) += image/ -+ -+obj-$(CONFIG_USB_SERIAL) += serial/ -+ -+obj-$(CONFIG_USB) += misc/ -+obj-y += early/ -+ -+obj-$(CONFIG_USB_ATM) += atm/ -+obj-$(CONFIG_USB_SPEEDTOUCH) += atm/ -diff -Nur linux-2.6.32.orig/lib/klist.c linux-2.6.32/lib/klist.c ---- linux-2.6.32.orig/lib/klist.c 2009-12-03 04:51:21.000000000 +0100 -+++ linux-2.6.32/lib/klist.c 2010-01-10 13:41:59.326309689 +0100 +diff -Nur linux-2.6.34.orig/lib/klist.c linux-2.6.34/lib/klist.c +--- linux-2.6.34.orig/lib/klist.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/lib/klist.c 2010-05-25 19:41:55.440969800 +0200 @@ -60,7 +60,7 @@ { knode->n_klist = klist; diff --git a/target/foxboard/target.mk b/target/foxboard/target.mk index 147affb9c..d4eb2ab29 100644 --- a/target/foxboard/target.mk +++ b/target/foxboard/target.mk @@ -1,7 +1,7 @@ ARCH:= cris CPU_ARCH:= cris -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe -fno-peephole2 TARGET_CFLAGS_ARCH:= -march=v10 diff --git a/target/foxg20/patches/foxg20.patch b/target/foxg20/patches/foxg20.patch index 1f628574e..d564c71fb 100644 --- a/target/foxg20/patches/foxg20.patch +++ b/target/foxg20/patches/foxg20.patch @@ -1,6 +1,6 @@ -diff -Nur linux-2.6.33.orig/arch/arm/include/asm/setup.h linux-2.6.33/arch/arm/include/asm/setup.h ---- linux-2.6.33.orig/arch/arm/include/asm/setup.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-2.6.33/arch/arm/include/asm/setup.h 2010-02-27 19:32:30.150085477 +0100 +diff -Nur linux-2.6.34.orig/arch/arm/include/asm/setup.h linux-2.6.34/arch/arm/include/asm/setup.h +--- linux-2.6.34.orig/arch/arm/include/asm/setup.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/arm/include/asm/setup.h 2010-05-25 20:26:06.083473207 +0200 @@ -18,6 +18,8 @@ #define COMMAND_LINE_SIZE 1024 @@ -10,22 +10,22 @@ diff -Nur linux-2.6.33.orig/arch/arm/include/asm/setup.h linux-2.6.33/arch/arm/i /* The list ends with an ATAG_NONE node. */ #define ATAG_NONE 0x00000000 -diff -Nur linux-2.6.33.orig/arch/arm/Kconfig linux-2.6.33/arch/arm/Kconfig ---- linux-2.6.33.orig/arch/arm/Kconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-2.6.33/arch/arm/Kconfig 2010-02-27 20:23:52.139866005 +0100 -@@ -19,6 +19,8 @@ +diff -Nur linux-2.6.34.orig/arch/arm/Kconfig linux-2.6.34/arch/arm/Kconfig +--- linux-2.6.34.orig/arch/arm/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/arm/Kconfig 2010-05-25 20:26:06.103473096 +0200 +@@ -20,6 +20,8 @@ select HAVE_FUNCTION_TRACER if (!XIP_KERNEL) select HAVE_GENERIC_DMA_COHERENT select HAVE_KERNEL_GZIP + select HAVE_KERNEL_BZIP2 + select HAVE_KERNEL_LZMA select HAVE_KERNEL_LZO - help - The ARM series is a line of low-power-consumption RISC chip designs -diff -Nur linux-2.6.33.orig/arch/arm/kernel/setup.c linux-2.6.33/arch/arm/kernel/setup.c ---- linux-2.6.33.orig/arch/arm/kernel/setup.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-2.6.33/arch/arm/kernel/setup.c 2010-02-27 19:32:30.212085837 +0100 -@@ -807,8 +807,12 @@ + select HAVE_PERF_EVENTS + select PERF_USE_VMALLOC +diff -Nur linux-2.6.34.orig/arch/arm/kernel/setup.c linux-2.6.34/arch/arm/kernel/setup.c +--- linux-2.6.34.orig/arch/arm/kernel/setup.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/arm/kernel/setup.c 2010-05-25 20:26:06.150978830 +0200 +@@ -790,8 +790,12 @@ static int c_show(struct seq_file *m, void *v) { @@ -38,9 +38,9 @@ diff -Nur linux-2.6.33.orig/arch/arm/kernel/setup.c linux-2.6.33/arch/arm/kernel seq_printf(m, "Processor\t: %s rev %d (%s)\n", cpu_name, read_cpuid_id() & 15, elf_platform); -diff -Nur linux-2.6.33.orig/arch/arm/mach-at91/at91sam9260_devices.c linux-2.6.33/arch/arm/mach-at91/at91sam9260_devices.c ---- linux-2.6.33.orig/arch/arm/mach-at91/at91sam9260_devices.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-2.6.33/arch/arm/mach-at91/at91sam9260_devices.c 2010-02-27 19:32:30.233294964 +0100 +diff -Nur linux-2.6.34.orig/arch/arm/mach-at91/at91sam9260_devices.c linux-2.6.34/arch/arm/mach-at91/at91sam9260_devices.c +--- linux-2.6.34.orig/arch/arm/mach-at91/at91sam9260_devices.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/arm/mach-at91/at91sam9260_devices.c 2010-05-25 20:26:06.190979002 +0200 @@ -454,7 +454,15 @@ .sda_is_open_drain = 1, .scl_pin = AT91_PIN_PA24, @@ -57,9 +57,9 @@ diff -Nur linux-2.6.33.orig/arch/arm/mach-at91/at91sam9260_devices.c linux-2.6.3 }; static struct platform_device at91sam9260_twi_device = { -diff -Nur linux-2.6.33.orig/arch/arm/mach-at91/board-foxg20.c linux-2.6.33/arch/arm/mach-at91/board-foxg20.c ---- linux-2.6.33.orig/arch/arm/mach-at91/board-foxg20.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33/arch/arm/mach-at91/board-foxg20.c 2010-02-27 19:32:30.235748629 +0100 +diff -Nur linux-2.6.34.orig/arch/arm/mach-at91/board-foxg20.c linux-2.6.34/arch/arm/mach-at91/board-foxg20.c +--- linux-2.6.34.orig/arch/arm/mach-at91/board-foxg20.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/arm/mach-at91/board-foxg20.c 2010-05-25 20:26:06.230978938 +0200 @@ -0,0 +1,376 @@ +/* + * Copyright (C) 2005 SAN People @@ -437,10 +437,10 @@ diff -Nur linux-2.6.33.orig/arch/arm/mach-at91/board-foxg20.c linux-2.6.33/arch/ + .init_irq = foxg20_init_irq, + .init_machine = foxg20_board_init, +MACHINE_END -diff -Nur linux-2.6.33.orig/arch/arm/mach-at91/Kconfig linux-2.6.33/arch/arm/mach-at91/Kconfig ---- linux-2.6.33.orig/arch/arm/mach-at91/Kconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-2.6.33/arch/arm/mach-at91/Kconfig 2010-02-27 20:22:57.467867560 +0100 -@@ -354,6 +354,15 @@ +diff -Nur linux-2.6.34.orig/arch/arm/mach-at91/Kconfig linux-2.6.34/arch/arm/mach-at91/Kconfig +--- linux-2.6.34.orig/arch/arm/mach-at91/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/arm/mach-at91/Kconfig 2010-05-25 20:26:06.270978491 +0200 +@@ -360,6 +360,15 @@ Select this if you are using a Eukrea Electromatique's CPU9G20 Board @@ -456,10 +456,10 @@ diff -Nur linux-2.6.33.orig/arch/arm/mach-at91/Kconfig linux-2.6.33/arch/arm/mac endif # ---------------------------------------------------------- -diff -Nur linux-2.6.33.orig/arch/arm/mach-at91/Makefile linux-2.6.33/arch/arm/mach-at91/Makefile ---- linux-2.6.33.orig/arch/arm/mach-at91/Makefile 2010-02-24 19:52:17.000000000 +0100 -+++ linux-2.6.33/arch/arm/mach-at91/Makefile 2010-02-27 19:32:30.295749847 +0100 -@@ -66,6 +66,9 @@ +diff -Nur linux-2.6.34.orig/arch/arm/mach-at91/Makefile linux-2.6.34/arch/arm/mach-at91/Makefile +--- linux-2.6.34.orig/arch/arm/mach-at91/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/arm/mach-at91/Makefile 2010-05-25 20:26:06.310978635 +0200 +@@ -67,6 +67,9 @@ # AT91SAM9G45 board-specific support obj-$(CONFIG_MACH_AT91SAM9G45EKES) += board-sam9m10g45ek.o @@ -469,24 +469,3 @@ diff -Nur linux-2.6.33.orig/arch/arm/mach-at91/Makefile linux-2.6.33/arch/arm/ma # AT91CAP9 board-specific support obj-$(CONFIG_MACH_AT91CAP9ADK) += board-cap9adk.o -diff -Nur linux-2.6.33.orig/drivers/mmc/host/at91_mci.c linux-2.6.33/drivers/mmc/host/at91_mci.c ---- linux-2.6.33.orig/drivers/mmc/host/at91_mci.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-2.6.33/drivers/mmc/host/at91_mci.c 2010-02-27 19:32:30.295749847 +0100 -@@ -461,7 +461,7 @@ - at91_mci_write(host, AT91_MCI_DTOR, AT91_MCI_DTOMUL_1M | AT91_MCI_DTOCYC); - mr = AT91_MCI_PDCMODE | 0x34a; - -- if (cpu_is_at91sam9260() || cpu_is_at91sam9263()) -+ if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20()) - mr |= AT91_MCI_RDPROOF | AT91_MCI_WRPROOF; - - at91_mci_write(host, AT91_MCI_MR, mr); -@@ -1017,7 +1017,7 @@ - host->bus_mode = 0; - host->board = pdev->dev.platform_data; - if (host->board->wire4) { -- if (cpu_is_at91sam9260() || cpu_is_at91sam9263()) -+ if (cpu_is_at91sam9260() || cpu_is_at91sam9263() || cpu_is_at91sam9g20()) - mmc->caps |= MMC_CAP_4_BIT_DATA; - else - dev_warn(&pdev->dev, "4 wire bus mode not supported" diff --git a/target/foxg20/target.mk b/target/foxg20/target.mk index c2eecaddd..f37e7689b 100644 --- a/target/foxg20/target.mk +++ b/target/foxg20/target.mk @@ -1,8 +1,8 @@ # arm default is little endian, this target uses EABI ARCH:= arm CPU_ARCH:= arm -KERNEL_VERSION:= 2.6.33.2 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= 80c5ff544b0ee4d9b5d8b8b89d4a0ef9 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=armv5te -mtune=arm926ej-s diff --git a/target/ibmx40/Makefile b/target/ibmx40/Makefile index 19ac7e3dc..65ef6bf14 100644 --- a/target/ibmx40/Makefile +++ b/target/ibmx40/Makefile @@ -7,21 +7,10 @@ include $(TOPDIR)/mk/modules.mk include $(TOPDIR)/mk/kernel-build.mk include $(TOPDIR)/mk/image.mk -kernel-install: - @cp $(LINUX_DIR)/arch/x86/boot/bzImage $(TARGET_DIR)/boot/vmlinuz-adk +KERNEL:=$(LINUX_DIR)/arch/x86/boot/bzImage -createinit: - @-rm $(LINUX_DIR)/usr/initramfs_data.cpio.* - $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="${BUILD_DIR}/${INITRAMFS_PIGGYBACK}"#' $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_UID=0' >> $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_GID=0' >> $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_COMPRESSION_LZMA=y' >> $(LINUX_DIR)/.config - echo N |$(MAKE) -C $(LINUX_DIR) V=0 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) - $(MAKE) -C $(LINUX_DIR) V=0 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" $(MAKE_TRACE) - $(CP) $(LINUX_DIR)/arch/x86/boot/compressed/vmlinux \ - $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel +kernel-install: + @cp $(KERNEL) $(TARGET_DIR)/boot/vmlinuz-adk createinitcrypt: $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="./initramfs_list"#' $(LINUX_DIR)/.config @@ -48,7 +37,8 @@ imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) endif ifeq ($(FS),initramfs-piggyback) -imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinit +imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinitramfs + @cp $(KERNEL) ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel @echo 'The kernel file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo 'Login as user root with password linux123 via ssh or console' endif diff --git a/target/lemote/Makefile b/target/lemote/Makefile index fa554dfaf..59e2b84b1 100644 --- a/target/lemote/Makefile +++ b/target/lemote/Makefile @@ -10,16 +10,6 @@ include $(TOPDIR)/mk/image.mk kernel-install: @cp $(LINUX_DIR)/vmlinuz $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel -createinit: - @-rm $(LINUX_DIR)/usr/initramfs_data.cpio.* $(MAKE_TRACE) - $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="${BUILD_DIR}/${INITRAMFS_PIGGYBACK}"#' \ - $(LINUX_DIR)/.config - echo N |$(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) - $(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" $(MAKE_TRACE) - @cp $(LINUX_DIR)/vmlinuz $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel - createinitcrypt: $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="./initramfs_list"#' $(LINUX_DIR)/.config echo 'CONFIG_INITRAMFS_ROOT_UID=0' >> $(LINUX_DIR)/.config @@ -70,13 +60,13 @@ imageinstall: $(BIN_DIR)/$(ROOTFSUSERTARBALL) createinitcrypt @echo 'Login as user root with password linux123 via ssh or console' endif ifeq ($(FS),initramfs) -imageinstall: $(BIN_DIR)/$(INITRAMFS) createinit +imageinstall: $(BIN_DIR)/$(INITRAMFS) @echo 'The kernel file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo 'The initramfs image is: ${BIN_DIR}/${INITRAMFS}' @echo 'Login as user root with password linux123 via ssh or console' endif ifeq ($(FS),initramfs-piggyback) -imageinstall: $(BIN_DIR)/$(INITRAMFS) createinit +imageinstall: $(BUILD_DIR)/$(INITRAMFS_PIGGYBACK) createinitramfs @echo 'The kernel+initramfs file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo 'Login as user root with password linux123 via ssh or console' endif diff --git a/target/lemote/kernel.config b/target/lemote/kernel.config index 33c8305bc..c109120a0 100644 --- a/target/lemote/kernel.config +++ b/target/lemote/kernel.config @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33 -# Sun Mar 7 13:18:48 2010 +# Linux kernel version: 2.6.34 +# Fri May 28 12:08:04 2010 # CONFIG_MIPS=y @@ -68,12 +68,13 @@ 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_NEED_DMA_MAP_STATE=y CONFIG_SYS_HAS_EARLY_PRINTK=y CONFIG_I8259=y # CONFIG_NO_IOPORT is not set CONFIG_GENERIC_ISA_DMA=y CONFIG_GENERIC_ISA_DMA_SUPPORT_BROKEN=y +CONFIG_GENERIC_GPIO=y # CONFIG_CPU_BIG_ENDIAN is not set CONFIG_CPU_LITTLE_ENDIAN=y CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y @@ -107,7 +108,9 @@ CONFIG_CPU_LOONGSON2F=y # CONFIG_CPU_RM9000 is not set # CONFIG_CPU_SB1 is not set # CONFIG_CPU_CAVIUM_OCTEON is not set +# CONFIG_CPU_LOONGSON2F_WORKAROUNDS is not set CONFIG_SYS_SUPPORTS_ZBOOT=y +CONFIG_SYS_SUPPORTS_ZBOOT_UART16550=y CONFIG_CPU_LOONGSON2=y CONFIG_SYS_HAS_CPU_LOONGSON2F=y CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y @@ -132,6 +135,7 @@ CONFIG_BOARD_SCACHE=y CONFIG_MIPS_MT_DISABLED=y # CONFIG_MIPS_MT_SMP is not set # CONFIG_MIPS_MT_SMTC is not set +# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set CONFIG_CPU_HAS_WB=y CONFIG_CPU_HAS_SYNC=y CONFIG_GENERIC_HARDIRQS=y @@ -214,7 +218,6 @@ CONFIG_RCU_FANOUT=64 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_V2 is not set # CONFIG_RELAY is not set @@ -320,7 +323,6 @@ CONFIG_HW_HAS_PCI=y CONFIG_PCI=y CONFIG_PCI_DOMAINS=y # CONFIG_ARCH_SUPPORTS_MSI is not set -# CONFIG_PCI_LEGACY is not set # CONFIG_PCI_STUB is not set # CONFIG_PCI_IOV is not set CONFIG_ISA=y @@ -356,6 +358,7 @@ CONFIG_HIBERNATION_NVS=y CONFIG_HIBERNATION=y CONFIG_PM_STD_PARTITION="/dev/mapper/swap" # CONFIG_PM_RUNTIME is not set +CONFIG_PM_OPS=y CONFIG_MIPS_EXTERNAL_TIMER=y CONFIG_MIPS_CPUFREQ=y @@ -388,7 +391,6 @@ CONFIG_NET=y # Networking options # CONFIG_PACKET=y -CONFIG_PACKET_MMAP=y CONFIG_UNIX=y # CONFIG_NET_KEY is not set CONFIG_INET=y @@ -508,6 +510,7 @@ CONFIG_HAVE_IDE=y # # SCSI device support # +CONFIG_SCSI_MOD=y # CONFIG_RAID_ATTRS is not set CONFIG_SCSI=y CONFIG_SCSI_DMA=y @@ -667,6 +670,7 @@ CONFIG_NET_PCI=y # CONFIG_AMD8111_ETH is not set # CONFIG_ADAPTEC_STARFIRE is not set # CONFIG_AC3200 is not set +# CONFIG_KSZ884X_PCI is not set # CONFIG_APRICOT is not set # CONFIG_B44 is not set # CONFIG_FORCEDETH is not set @@ -714,6 +718,7 @@ CONFIG_WLAN=y # CONFIG_USB_PEGASUS is not set # CONFIG_USB_RTL8150 is not set # CONFIG_USB_USBNET is not set +# CONFIG_USB_IPHETH is not set # CONFIG_WAN is not set # CONFIG_FDDI is not set # CONFIG_HIPPI is not set @@ -752,6 +757,8 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=600 CONFIG_INPUT_KEYBOARD=y CONFIG_KEYBOARD_ATKBD=y # CONFIG_KEYBOARD_LKKBD is not set +# CONFIG_KEYBOARD_GPIO is not set +# CONFIG_KEYBOARD_MATRIX is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_OPENCORES is not set # CONFIG_KEYBOARD_STOWAWAY is not set @@ -773,6 +780,7 @@ CONFIG_MOUSE_PS2_SYNAPTICS=y # CONFIG_MOUSE_LOGIBM is not set # CONFIG_MOUSE_PC110PAD is not set # CONFIG_MOUSE_VSXXXAA is not set +# CONFIG_MOUSE_GPIO is not set # CONFIG_INPUT_JOYSTICK is not set # CONFIG_INPUT_TABLET is not set # CONFIG_INPUT_TOUCHSCREEN is not set @@ -818,6 +826,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=2 # CONFIG_SERIAL_CORE=y # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set CONFIG_UNIX98_PTYS=y # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set # CONFIG_LEGACY_PTYS is not set @@ -836,6 +845,34 @@ CONFIG_DEVPORT=y # PPS support # # CONFIG_PPS is not set +CONFIG_ARCH_REQUIRE_GPIOLIB=y +CONFIG_GPIOLIB=y +# CONFIG_GPIO_SYSFS is not set + +# +# Memory mapped GPIO expanders: +# +# CONFIG_GPIO_IT8761E is not set +# CONFIG_GPIO_SCH is not set + +# +# I2C GPIO expanders: +# + +# +# PCI GPIO expanders: +# +# CONFIG_GPIO_CS5535 is not set +# CONFIG_GPIO_BT8XX is not set +# CONFIG_GPIO_LANGWELL is not set + +# +# SPI GPIO expanders: +# + +# +# AC97 GPIO expanders: +# # CONFIG_W1 is not set CONFIG_POWER_SUPPLY=y # CONFIG_POWER_SUPPLY_DEBUG is not set @@ -854,6 +891,7 @@ CONFIG_HWMON=y # CONFIG_SENSORS_IT87 is not set # CONFIG_SENSORS_PC87360 is not set # CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_SHT15 is not set # CONFIG_SENSORS_SIS5595 is not set # CONFIG_SENSORS_SMSC47M1 is not set # CONFIG_SENSORS_SMSC47B397 is not set @@ -878,6 +916,8 @@ CONFIG_SSB_POSSIBLE=y # CONFIG_MFD_SM501 is not set # CONFIG_HTC_PASIC3 is not set # CONFIG_MFD_TMIO is not set +# CONFIG_MFD_TIMBERDALE is not set +# CONFIG_LPC_SCH is not set # CONFIG_REGULATOR is not set # CONFIG_MEDIA_SUPPORT is not set @@ -885,6 +925,7 @@ CONFIG_SSB_POSSIBLE=y # Graphics support # CONFIG_VGA_ARB=y +CONFIG_VGA_ARB_MAX_GPUS=16 # CONFIG_DRM is not set # CONFIG_VGASTATE is not set CONFIG_VIDEO_OUTPUT_CONTROL=y @@ -1003,8 +1044,6 @@ CONFIG_USB=y # CONFIG_USB_DEVICEFS is not set # CONFIG_USB_DEVICE_CLASS is not set CONFIG_USB_DYNAMIC_MINORS=y -CONFIG_USB_SUSPEND=y -# CONFIG_USB_OTG is not set # CONFIG_USB_OTG_WHITELIST is not set # CONFIG_USB_OTG_BLACKLIST_HUB is not set # CONFIG_USB_MON is not set @@ -1072,7 +1111,6 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y # 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 @@ -1085,12 +1123,12 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y # CONFIG_USB_IOWARRIOR is not set # CONFIG_USB_TEST is not set # CONFIG_USB_ISIGHTFW is not set -# CONFIG_USB_VST is not set # CONFIG_USB_GADGET is not set # # OTG and related infrastructure # +# CONFIG_USB_GPIO_VBUS is not set # CONFIG_NOP_USB_XCEIV is not set # CONFIG_UWB is not set CONFIG_MMC=y @@ -1109,8 +1147,6 @@ CONFIG_MMC_BLOCK_BOUNCE=y # MMC/SD/SDIO Host Controller Drivers # # CONFIG_MMC_SDHCI is not set -# CONFIG_MMC_AT91 is not set -# CONFIG_MMC_ATMELMCI is not set # CONFIG_MMC_TIFM_SD is not set # CONFIG_MMC_CB710 is not set # CONFIG_MMC_VIA_SDMMC is not set @@ -1167,13 +1203,14 @@ CONFIG_RTC_DRV_CMOS=y CONFIG_STAGING=y # CONFIG_STAGING_EXCLUDE_BUILD is not set # CONFIG_USB_IP_COMMON is not set +# CONFIG_PRISM2_USB is not set # CONFIG_ECHO is not set # CONFIG_COMEDI is not set # CONFIG_ASUS_OLED is not set -# CONFIG_ALTERA_PCIE_CHDMA is not set # CONFIG_R8187SE is not set +# CONFIG_RTL8192SU is not set +# CONFIG_RTL8192U is not set # CONFIG_RTL8192E is not set -# CONFIG_INPUT_MIMIO is not set # CONFIG_TRANZPORT is not set # @@ -1185,9 +1222,7 @@ CONFIG_STAGING=y # # CONFIG_INPUT_GPIO is not set # CONFIG_POHMELFS is not set -# CONFIG_B3DFG is not set # CONFIG_IDE_PHISON is not set -# CONFIG_PLAN9AUTH is not set # CONFIG_VT6655 is not set # CONFIG_VT6656 is not set # CONFIG_FB_UDL is not set @@ -1203,6 +1238,8 @@ CONFIG_STAGING=y # CONFIG_STRIP is not set # CONFIG_WAVELAN is not set CONFIG_FB_SM7XX=y +# CONFIG_DT3155 is not set +# CONFIG_CRYSTALHD is not set CONFIG_MIPS_PLATFORM_DEVICES=y CONFIG_LEMOTE_YEELOONG2F=y # CONFIG_LEMOTE_LYNLOONG2F is not set @@ -1267,6 +1304,7 @@ CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NFS_FS is not set # CONFIG_NFSD is not set # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set diff --git a/target/lemote/patches/lemote.patch b/target/lemote/patches/lemote.patch index edb778459..31af80bb6 100644 --- a/target/lemote/patches/lemote.patch +++ b/target/lemote/patches/lemote.patch @@ -1,32 +1,6 @@ -diff -Nur linux-2.6.33/arch/mips/boot/compressed/dbg.c linux-lemote/arch/mips/boot/compressed/dbg.c ---- linux-2.6.33/arch/mips/boot/compressed/dbg.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/boot/compressed/dbg.c 2010-03-06 16:42:59.000000000 +0100 -@@ -9,7 +9,7 @@ - #include - #include - --void __attribute__ ((weak)) putc(char c) -+void __weak putc(char c) - { - } - -diff -Nur linux-2.6.33/arch/mips/boot/compressed/decompress.c linux-lemote/arch/mips/boot/compressed/decompress.c ---- linux-2.6.33/arch/mips/boot/compressed/decompress.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/boot/compressed/decompress.c 2010-03-06 16:42:59.000000000 +0100 -@@ -5,8 +5,8 @@ - * Author: Matt Porter Derived from - * arch/ppc/boot/prep/misc.c - * -- * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology -- * Author: Wu Zhangjin -+ * Copyright (C) 2009 Lemote, Inc. -+ * Author: Wu Zhangjin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/boot/compressed/ld.script linux-lemote/arch/mips/boot/compressed/ld.script ---- linux-2.6.33/arch/mips/boot/compressed/ld.script 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/boot/compressed/ld.script 2010-03-06 16:42:59.000000000 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/boot/compressed/ld.script linux-loongson/arch/mips/boot/compressed/ld.script +--- linux-2.6.34.orig/arch/mips/boot/compressed/ld.script 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/boot/compressed/ld.script 2010-05-27 18:12:28.592215840 +0200 @@ -2,7 +2,7 @@ * ld.script for compressed kernel support of MIPS * @@ -36,60 +10,16 @@ diff -Nur linux-2.6.33/arch/mips/boot/compressed/ld.script linux-lemote/arch/mip */ OUTPUT_ARCH(mips) -@@ -29,8 +29,8 @@ - __image_end = .; - CONSTRUCTORS - } -- .sdata : { *(.sdata) } -- . = ALIGN(4); -+ .sdata : { *(.sdata) } -+ . = ALIGN(4); - _edata = .; /* End of data section */ - - /* BSS */ -diff -Nur linux-2.6.33/arch/mips/boot/compressed/Makefile linux-lemote/arch/mips/boot/compressed/Makefile ---- linux-2.6.33/arch/mips/boot/compressed/Makefile 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/boot/compressed/Makefile 2010-03-06 16:42:59.000000000 +0100 -@@ -9,7 +9,7 @@ - # modified by Cort (cort@cs.nmt.edu) - # - # Copyright (C) 2009 Lemote Inc. & DSLab, Lanzhou University --# Author: Wu Zhangjin -+# Author: Wu Zhangjin - # - - # compressed kernel load addr: VMLINUZ_LOAD_ADDRESS > VMLINUX_LOAD_ADDRESS + VMLINUX_SIZE -@@ -27,15 +27,17 @@ - KBUILD_CFLAGS := $(shell echo $(KBUILD_CFLAGS) | sed -e "s/-pg//") - - KBUILD_CFLAGS := $(LINUXINCLUDE) $(KBUILD_CFLAGS) -D__KERNEL__ \ -- -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" \ -+ -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" - - KBUILD_AFLAGS := $(LINUXINCLUDE) $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ -- -DKERNEL_ENTRY=0x$(shell $(NM) $(objtree)/$(KBUILD_IMAGE) 2>/dev/null | grep " kernel_entry" | cut -f1 -d \ ) \ -- -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -+ -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \ -+ -DKERNEL_ENTRY=0x$(shell $(NM) $(objtree)/$(KBUILD_IMAGE) 2>/dev/null | grep " kernel_entry" | cut -f1 -d \ ) - - obj-y := $(obj)/head.o $(obj)/decompress.o $(obj)/dbg.o - -+ifdef CONFIG_DEBUG_ZBOOT - obj-$(CONFIG_SYS_SUPPORTS_ZBOOT_UART16550) += $(obj)/uart-16550.o -+endif - - OBJCOPYFLAGS_vmlinux.bin := $(OBJCOPYFLAGS) -O binary -R .comment -S - $(obj)/vmlinux.bin: $(KBUILD_IMAGE) -diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/mips/configs/fuloong2e_defconfig ---- linux-2.6.33/arch/mips/configs/fuloong2e_defconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/configs/fuloong2e_defconfig 2010-03-06 16:42:59.000000000 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/configs/fuloong2e_defconfig linux-loongson/arch/mips/configs/fuloong2e_defconfig +--- linux-2.6.34.orig/arch/mips/configs/fuloong2e_defconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/configs/fuloong2e_defconfig 2010-05-27 18:12:28.602215969 +0200 @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.32-rc4 -# Fri Oct 16 13:18:01 2009 -+# Linux kernel version: 2.6.33 -+# Mon Mar 1 23:44:14 2010 ++# Linux kernel version: 2.6.34-rc5 ++# Wed Apr 28 01:14:53 2010 # CONFIG_MIPS=y @@ -110,11 +40,13 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m CONFIG_RWSEM_GENERIC_SPINLOCK=y # CONFIG_ARCH_HAS_ILOG2_U32 is not set # CONFIG_ARCH_HAS_ILOG2_U64 is not set -@@ -67,7 +70,6 @@ +@@ -66,8 +69,7 @@ + CONFIG_CSRC_R4K_LIB=y CONFIG_CSRC_R4K=y CONFIG_DMA_NONCOHERENT=y - CONFIG_DMA_NEED_PCI_MAP_STATE=y +-CONFIG_DMA_NEED_PCI_MAP_STATE=y -CONFIG_EARLY_PRINTK=y ++CONFIG_NEED_DMA_MAP_STATE=y CONFIG_SYS_HAS_EARLY_PRINTK=y CONFIG_I8259=y # CONFIG_NO_IOPORT is not set @@ -134,7 +66,14 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m CONFIG_CPU_LOONGSON2=y CONFIG_SYS_HAS_CPU_LOONGSON2E=y CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y -@@ -134,7 +136,6 @@ +@@ -128,13 +130,13 @@ + CONFIG_MIPS_MT_DISABLED=y + # CONFIG_MIPS_MT_SMP is not set + # CONFIG_MIPS_MT_SMTC is not set ++# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set + CONFIG_CPU_HAS_WB=y + CONFIG_CPU_HAS_SYNC=y + CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_IRQ_PROBE=y CONFIG_CPU_SUPPORTS_HIGHMEM=y CONFIG_SYS_SUPPORTS_HIGHMEM=y @@ -142,7 +81,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m CONFIG_ARCH_POPULATES_NODE_MAP=y CONFIG_SELECT_MEMORY_MODEL=y # CONFIG_FLATMEM_MANUAL is not set -@@ -143,23 +144,18 @@ +@@ -143,23 +145,18 @@ CONFIG_SPARSEMEM=y CONFIG_HAVE_MEMORY_PRESENT=y CONFIG_SPARSEMEM_STATIC=y @@ -167,7 +106,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_HZ_48 is not set # CONFIG_HZ_100 is not set # CONFIG_HZ_128 is not set -@@ -190,9 +186,11 @@ +@@ -190,9 +187,11 @@ CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y CONFIG_HAVE_KERNEL_LZMA=y @@ -179,7 +118,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m CONFIG_SWAP=y CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y -@@ -208,6 +206,7 @@ +@@ -208,6 +207,7 @@ # CONFIG_TREE_RCU=y # CONFIG_TREE_PREEMPT_RCU is not set @@ -187,9 +126,11 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_RCU_TRACE is not set CONFIG_RCU_FANOUT=64 # CONFIG_RCU_FANOUT_EXACT is not set -@@ -217,8 +216,7 @@ +@@ -215,10 +215,8 @@ + CONFIG_IKCONFIG=y + CONFIG_IKCONFIG_PROC=y CONFIG_LOG_BUF_SHIFT=14 - # CONFIG_GROUP_SCHED is not set +-# CONFIG_GROUP_SCHED is not set # CONFIG_CGROUPS is not set -CONFIG_SYSFS_DEPRECATED=y -CONFIG_SYSFS_DEPRECATED_V2=y @@ -197,15 +138,23 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_RELAY is not set CONFIG_NAMESPACES=y # CONFIG_UTS_NS is not set -@@ -268,6 +266,7 @@ +@@ -258,7 +256,6 @@ + # CONFIG_SLUB is not set + # CONFIG_SLOB is not set + CONFIG_PROFILING=y +-CONFIG_TRACEPOINTS=y + CONFIG_OPROFILE=m + CONFIG_HAVE_OPROFILE=y + CONFIG_HAVE_SYSCALL_WRAPPERS=y +@@ -266,7 +263,6 @@ # - # CONFIG_GCOV_KERNEL is not set + # GCOV-based kernel profiling + # +-# CONFIG_GCOV_KERNEL is not set CONFIG_SLOW_WORK=y -+# CONFIG_SLOW_WORK_DEBUG is not set CONFIG_HAVE_GENERIC_DMA_COHERENT=y CONFIG_SLABINFO=y - CONFIG_RT_MUTEXES=y -@@ -287,14 +286,41 @@ +@@ -287,14 +283,41 @@ # IO Schedulers # CONFIG_IOSCHED_NOOP=y @@ -249,15 +198,39 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m CONFIG_FREEZER=y # -@@ -340,7 +366,6 @@ +@@ -304,7 +327,6 @@ + CONFIG_PCI=y + CONFIG_PCI_DOMAINS=y + # CONFIG_ARCH_SUPPORTS_MSI is not set +-CONFIG_PCI_LEGACY=y + # CONFIG_PCI_STUB is not set + # CONFIG_PCI_IOV is not set + CONFIG_ISA=y +@@ -339,14 +361,13 @@ + CONFIG_HIBERNATION=y CONFIG_PM_STD_PARTITION="/dev/hda3" # CONFIG_PM_RUNTIME is not set ++CONFIG_PM_OPS=y CONFIG_NET=y -CONFIG_COMPAT_NETLINK_MESSAGES=y # # Networking options -@@ -491,10 +516,6 @@ + # + CONFIG_PACKET=y +-CONFIG_PACKET_MMAP=y + CONFIG_UNIX=y + CONFIG_XFRM=y + # CONFIG_XFRM_USER is not set +@@ -483,7 +504,6 @@ + # Network testing + # + # CONFIG_NET_PKTGEN is not set +-# CONFIG_NET_DROP_MONITOR is not set + # CONFIG_HAMRADIO is not set + # CONFIG_CAN is not set + # CONFIG_IRDA is not set +@@ -491,10 +511,6 @@ # CONFIG_AF_RXRPC is not set CONFIG_WIRELESS=y # CONFIG_CFG80211 is not set @@ -268,7 +241,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_LIB80211 is not set # -@@ -617,6 +638,10 @@ +@@ -617,6 +633,10 @@ # CONFIG_BLK_DEV_COW_COMMON is not set CONFIG_BLK_DEV_LOOP=y CONFIG_BLK_DEV_CRYPTOLOOP=m @@ -279,7 +252,15 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_BLK_DEV_NBD is not set # CONFIG_BLK_DEV_SX8 is not set # CONFIG_BLK_DEV_UB is not set -@@ -755,7 +780,7 @@ +@@ -707,6 +727,7 @@ + # + # SCSI device support + # ++CONFIG_SCSI_MOD=y + # CONFIG_RAID_ATTRS is not set + CONFIG_SCSI=y + CONFIG_SCSI_DMA=y +@@ -755,7 +776,7 @@ # # @@ -288,7 +269,15 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # # CONFIG_FIREWIRE is not set # CONFIG_IEEE1394 is not set -@@ -798,6 +823,7 @@ +@@ -764,6 +785,7 @@ + # CONFIG_DUMMY is not set + # CONFIG_BONDING is not set + CONFIG_MACVLAN=m ++# CONFIG_MACVTAP is not set + # CONFIG_EQUALIZER is not set + # CONFIG_TUN is not set + CONFIG_VETH=m +@@ -798,6 +820,7 @@ # CONFIG_SMC91X is not set # CONFIG_DM9000 is not set # CONFIG_ETHOC is not set @@ -296,7 +285,30 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_NET_VENDOR_RACAL is not set # CONFIG_DNET is not set # CONFIG_NET_TULIP is not set -@@ -888,8 +914,10 @@ +@@ -817,6 +840,7 @@ + # CONFIG_AMD8111_ETH is not set + # CONFIG_ADAPTEC_STARFIRE is not set + # CONFIG_AC3200 is not set ++# CONFIG_KSZ884X_PCI is not set + # CONFIG_APRICOT is not set + # CONFIG_B44 is not set + # CONFIG_FORCEDETH is not set +@@ -871,6 +895,8 @@ + # CONFIG_CHELSIO_T1 is not set + CONFIG_CHELSIO_T3_DEPENDS=y + # CONFIG_CHELSIO_T3 is not set ++CONFIG_CHELSIO_T4_DEPENDS=y ++# CONFIG_CHELSIO_T4 is not set + # CONFIG_ENIC is not set + # CONFIG_IXGBE is not set + # CONFIG_IXGB is not set +@@ -883,13 +909,16 @@ + # CONFIG_MLX4_CORE is not set + # CONFIG_TEHUTI is not set + # CONFIG_BNX2X is not set ++# CONFIG_QLCNIC is not set + # CONFIG_QLGE is not set + # CONFIG_SFC is not set # CONFIG_BE2NET is not set # CONFIG_TR is not set CONFIG_WLAN=y @@ -309,7 +321,15 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # # Enable WiMAX (Networking options) to see the WiMAX drivers -@@ -926,6 +954,7 @@ +@@ -904,6 +933,7 @@ + # CONFIG_USB_RTL8150 is not set + # CONFIG_USB_USBNET is not set + # CONFIG_USB_CDC_PHONET is not set ++# CONFIG_USB_IPHETH is not set + # CONFIG_WAN is not set + # CONFIG_FDDI is not set + # CONFIG_HIPPI is not set +@@ -926,6 +956,7 @@ # CONFIG_NETCONSOLE is not set # CONFIG_NETPOLL is not set # CONFIG_NET_POLL_CONTROLLER is not set @@ -317,7 +337,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_ISDN is not set # CONFIG_PHONE is not set -@@ -935,6 +964,7 @@ +@@ -935,6 +966,7 @@ CONFIG_INPUT=y CONFIG_INPUT_FF_MEMLESS=y # CONFIG_INPUT_POLLDEV is not set @@ -325,7 +345,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # # Userland interfaces -@@ -992,6 +1022,7 @@ +@@ -992,6 +1024,7 @@ # CONFIG_SERIO_PCIPS2 is not set CONFIG_SERIO_LIBPS2=y # CONFIG_SERIO_RAW is not set @@ -333,7 +353,23 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_GAMEPORT is not set # -@@ -1078,11 +1109,6 @@ +@@ -1022,6 +1055,7 @@ + CONFIG_SERIAL_CORE=y + CONFIG_SERIAL_CORE_CONSOLE=y + # CONFIG_SERIAL_JSM is not set ++# CONFIG_SERIAL_TIMBERDALE is not set + CONFIG_UNIX98_PTYS=y + # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set + CONFIG_LEGACY_PTYS=y +@@ -1069,6 +1103,7 @@ + # + # CONFIG_I2C_OCORES is not set + # CONFIG_I2C_SIMTEC is not set ++# CONFIG_I2C_XILINX is not set + + # + # External I2C/SMBus adapter drivers +@@ -1078,27 +1113,15 @@ # CONFIG_I2C_TINY_USB is not set # @@ -345,23 +381,44 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # Other I2C/SMBus bus drivers # # CONFIG_I2C_ELEKTOR is not set -@@ -1093,7 +1119,6 @@ - # - # Miscellaneous I2C Chip support - # + # CONFIG_I2C_PCA_ISA is not set + # CONFIG_I2C_PCA_PLATFORM is not set + # CONFIG_I2C_STUB is not set +- +-# +-# Miscellaneous I2C Chip support +-# -# CONFIG_DS1682 is not set - # CONFIG_SENSORS_TSL2550 is not set +-# CONFIG_SENSORS_TSL2550 is not set # CONFIG_I2C_DEBUG_CORE is not set # CONFIG_I2C_DEBUG_ALGO is not set -@@ -1125,7 +1150,6 @@ + # CONFIG_I2C_DEBUG_BUS is not set +-# CONFIG_I2C_DEBUG_CHIP is not set + # CONFIG_SPI is not set + + # +@@ -1125,10 +1148,9 @@ # CONFIG_HTC_PASIC3 is not set # CONFIG_MFD_TMIO is not set # CONFIG_MFD_WM8400 is not set -# CONFIG_MFD_WM831X is not set - # CONFIG_MFD_WM8350_I2C is not set +-# CONFIG_MFD_WM8350_I2C is not set ++# CONFIG_MFD_WM8994 is not set # CONFIG_MFD_PCF50633 is not set - # CONFIG_AB3100_CORE is not set -@@ -1271,6 +1295,7 @@ +-# CONFIG_AB3100_CORE is not set ++# CONFIG_LPC_SCH is not set + # CONFIG_REGULATOR is not set + # CONFIG_MEDIA_SUPPORT is not set + +@@ -1136,6 +1158,7 @@ + # Graphics support + # + CONFIG_VGA_ARB=y ++CONFIG_VGA_ARB_MAX_GPUS=16 + # CONFIG_DRM is not set + # CONFIG_VGASTATE is not set + CONFIG_VIDEO_OUTPUT_CONTROL=m +@@ -1271,6 +1294,7 @@ # CONFIG_SND_OXYGEN is not set # CONFIG_SND_CS4281 is not set # CONFIG_SND_CS46XX is not set @@ -369,7 +426,49 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # CONFIG_SND_CTXFI is not set # CONFIG_SND_DARLA20 is not set # CONFIG_SND_GINA20 is not set -@@ -1482,6 +1507,7 @@ +@@ -1321,6 +1345,7 @@ + CONFIG_SND_MIPS=y + CONFIG_SND_USB=y + # CONFIG_SND_USB_AUDIO is not set ++# CONFIG_SND_USB_UA101 is not set + # CONFIG_SND_USB_CAIAQ is not set + # CONFIG_SND_SOC is not set + # CONFIG_SOUND_PRIME is not set +@@ -1358,7 +1383,6 @@ + CONFIG_USB_DEVICEFS=y + # CONFIG_USB_DEVICE_CLASS is not set + # CONFIG_USB_DYNAMIC_MINORS is not set +-# CONFIG_USB_SUSPEND is not set + # CONFIG_USB_OTG is not set + CONFIG_USB_OTG_WHITELIST=y + # CONFIG_USB_OTG_BLACKLIST_HUB is not set +@@ -1440,7 +1464,6 @@ + # CONFIG_USB_RIO500 is not set + # CONFIG_USB_LEGOTOWER is not set + # CONFIG_USB_LCD is not set +-# CONFIG_USB_BERRY_CHARGE is not set + # CONFIG_USB_LED is not set + # CONFIG_USB_CYPRESS_CY7C63 is not set + # CONFIG_USB_CYTHERM is not set +@@ -1453,7 +1476,6 @@ + # CONFIG_USB_IOWARRIOR is not set + # CONFIG_USB_TEST is not set + CONFIG_USB_ISIGHTFW=m +-CONFIG_USB_VST=m + # CONFIG_USB_GADGET is not set + + # +@@ -1473,15 +1495,16 @@ + CONFIG_UIO_CIF=m + # CONFIG_UIO_PDRV is not set + # CONFIG_UIO_PDRV_GENIRQ is not set +-# CONFIG_UIO_SMX is not set + # CONFIG_UIO_AEC is not set + # CONFIG_UIO_SERCOS3 is not set + # CONFIG_UIO_PCI_GENERIC is not set ++# CONFIG_UIO_NETX is not set + + # # TI VLYNQ # # CONFIG_STAGING is not set @@ -377,7 +476,17 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # # File systems -@@ -1522,8 +1548,8 @@ +@@ -1499,9 +1522,7 @@ + # CONFIG_EXT4_DEBUG is not set + CONFIG_FS_XIP=y + CONFIG_JBD=y +-# CONFIG_JBD_DEBUG is not set + CONFIG_JBD2=m +-# CONFIG_JBD2_DEBUG is not set + CONFIG_FS_MBCACHE=m + CONFIG_REISERFS_FS=m + # CONFIG_REISERFS_CHECK is not set +@@ -1522,8 +1543,8 @@ # CONFIG_QUOTA is not set CONFIG_AUTOFS_FS=y CONFIG_AUTOFS4_FS=y @@ -388,27 +497,55 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m # # Caches -@@ -1700,6 +1726,11 @@ +@@ -1572,6 +1593,7 @@ + # CONFIG_BFS_FS is not set + # CONFIG_EFS_FS is not set + # CONFIG_JFFS2_FS is not set ++# CONFIG_LOGFS is not set + # CONFIG_CRAMFS is not set + # CONFIG_SQUASHFS is not set + # CONFIG_VXFS_FS is not set +@@ -1605,6 +1627,7 @@ + CONFIG_SMB_FS=m + CONFIG_SMB_NLS_DEFAULT=y + CONFIG_SMB_NLS_REMOTE="cp936" ++# CONFIG_CEPH_FS is not set + CONFIG_CIFS=m + CONFIG_CIFS_STATS=y + CONFIG_CIFS_STATS2=y +@@ -1692,24 +1715,24 @@ + # CONFIG_MAGIC_SYSRQ is not set + # CONFIG_STRIP_ASM_SYMS is not set + # CONFIG_UNUSED_SYMBOLS is not set +-CONFIG_DEBUG_FS=y ++# CONFIG_DEBUG_FS is not set + # CONFIG_HEADERS_CHECK is not set + # CONFIG_DEBUG_KERNEL is not set +-CONFIG_STACKTRACE=y + # CONFIG_DEBUG_MEMORY_INIT is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set CONFIG_SYSCTL_SYSCALL_CHECK=y - CONFIG_NOP_TRACER=y +-CONFIG_NOP_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y CONFIG_RING_BUFFER=y - CONFIG_EVENT_TRACING=y - CONFIG_CONTEXT_SWITCH_TRACER=y -@@ -1710,6 +1741,7 @@ - # CONFIG_DYNAMIC_DEBUG is not set +-CONFIG_EVENT_TRACING=y +-CONFIG_CONTEXT_SWITCH_TRACER=y + CONFIG_RING_BUFFER_ALLOW_SWAP=y +-CONFIG_TRACING=y + CONFIG_TRACING_SUPPORT=y + # CONFIG_FTRACE is not set +-# CONFIG_DYNAMIC_DEBUG is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y -+CONFIG_EARLY_PRINTK=y ++# CONFIG_EARLY_PRINTK is not set # CONFIG_CMDLINE_BOOL is not set # -@@ -1718,7 +1750,11 @@ +@@ -1718,7 +1741,11 @@ # CONFIG_KEYS is not set # CONFIG_SECURITY is not set # CONFIG_SECURITYFS is not set @@ -421,145 +558,78 @@ diff -Nur linux-2.6.33/arch/mips/configs/fuloong2e_defconfig linux-lemote/arch/m CONFIG_CRYPTO=y # -diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mips/configs/lemote2f_defconfig ---- linux-2.6.33/arch/mips/configs/lemote2f_defconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/configs/lemote2f_defconfig 2010-03-06 16:42:59.000000000 +0100 +@@ -1819,7 +1846,7 @@ + # + CONFIG_CRYPTO_ANSI_CPRNG=m + # CONFIG_CRYPTO_HW is not set +-CONFIG_BINARY_PRINTF=y ++# CONFIG_BINARY_PRINTF is not set + + # + # Library routines +diff -Nur linux-2.6.34.orig/arch/mips/configs/lemote2f_defconfig linux-loongson/arch/mips/configs/lemote2f_defconfig +--- linux-2.6.34.orig/arch/mips/configs/lemote2f_defconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/configs/lemote2f_defconfig 2010-05-27 18:12:28.612213391 +0200 @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit --# Linux kernel version: 2.6.32-rc6 --# Mon Nov 9 23:42:42 2009 -+# Linux kernel version: 2.6.33 -+# Mon Mar 1 23:36:53 2010 +-# Linux kernel version: 2.6.33-rc2 +-# Mon Jan 4 13:41:09 2010 ++# Linux kernel version: 2.6.34-rc3 ++# Sun Apr 11 04:31:19 2010 # CONFIG_MIPS=y -@@ -27,6 +27,7 @@ - # CONFIG_PNX8550_STB810 is not set - # CONFIG_PMC_MSP is not set - # CONFIG_PMC_YOSEMITE is not set -+# CONFIG_POWERTV is not set - # CONFIG_SGI_IP22 is not set - # CONFIG_SGI_IP27 is not set - # CONFIG_SGI_IP28 is not set -@@ -51,6 +52,9 @@ - # CONFIG_LEMOTE_FULOONG2E is not set - CONFIG_LEMOTE_MACH2F=y - CONFIG_CS5536=y -+CONFIG_CS5536_MFGPT=y -+CONFIG_LOONGSON_SUSPEND=y -+CONFIG_LOONGSON_UART_BASE=y - CONFIG_RWSEM_GENERIC_SPINLOCK=y - # CONFIG_ARCH_HAS_ILOG2_U32 is not set - # CONFIG_ARCH_HAS_ILOG2_U64 is not set -@@ -63,13 +67,8 @@ - CONFIG_GENERIC_CMOS_UPDATE=y +@@ -68,7 +68,7 @@ CONFIG_SCHED_OMIT_FRAME_POINTER=y CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y --CONFIG_CEVT_R4K_LIB=y --CONFIG_CEVT_R4K=y --CONFIG_CSRC_R4K_LIB=y --CONFIG_CSRC_R4K=y CONFIG_DMA_NONCOHERENT=y - CONFIG_DMA_NEED_PCI_MAP_STATE=y --CONFIG_EARLY_PRINTK=y +-CONFIG_DMA_NEED_PCI_MAP_STATE=y ++CONFIG_NEED_DMA_MAP_STATE=y CONFIG_SYS_HAS_EARLY_PRINTK=y CONFIG_I8259=y # CONFIG_NO_IOPORT is not set -@@ -109,13 +108,15 @@ - # CONFIG_CPU_SB1 is not set - # CONFIG_CPU_CAVIUM_OCTEON is not set - CONFIG_SYS_SUPPORTS_ZBOOT=y --CONFIG_SYS_SUPPORTS_ZBOOT_UART16550=y - CONFIG_CPU_LOONGSON2=y - CONFIG_SYS_HAS_CPU_LOONGSON2F=y - CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y - CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y - CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y - CONFIG_CPU_SUPPORTS_64BIT_KERNEL=y -+CONFIG_CPU_SUPPORTS_CPUFREQ=y -+CONFIG_CPU_SUPPORTS_ADDRWINCFG=y -+CONFIG_CPU_SUPPORTS_UNCACHED_ACCELERATED=y - - # - # Kernel type -@@ -137,7 +138,6 @@ - CONFIG_GENERIC_IRQ_PROBE=y - CONFIG_CPU_SUPPORTS_HIGHMEM=y - CONFIG_SYS_SUPPORTS_HIGHMEM=y --CONFIG_ARCH_FLATMEM_ENABLE=y - CONFIG_ARCH_POPULATES_NODE_MAP=y - CONFIG_SELECT_MEMORY_MODEL=y - # CONFIG_FLATMEM_MANUAL is not set -@@ -146,17 +146,11 @@ - CONFIG_SPARSEMEM=y - CONFIG_HAVE_MEMORY_PRESENT=y - CONFIG_SPARSEMEM_STATIC=y -- --# --# Memory hotplug is currently incompatible with Software Suspend --# - CONFIG_PAGEFLAGS_EXTENDED=y - CONFIG_SPLIT_PTLOCK_CPUS=4 - CONFIG_PHYS_ADDR_T_64BIT=y - CONFIG_ZONE_DMA_FLAG=0 - CONFIG_VIRT_TO_BUS=y --CONFIG_HAVE_MLOCK=y --CONFIG_HAVE_MLOCKED_PAGE_BIT=y - # CONFIG_KSM is not set - CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 - CONFIG_TICK_ONESHOT=y -@@ -175,7 +169,7 @@ - # CONFIG_PREEMPT_NONE is not set - # CONFIG_PREEMPT_VOLUNTARY is not set - CONFIG_PREEMPT=y --# CONFIG_KEXEC is not set -+CONFIG_KEXEC=y - # CONFIG_SECCOMP is not set - CONFIG_LOCKDEP_SUPPORT=y - CONFIG_STACKTRACE_SUPPORT=y -@@ -194,9 +188,11 @@ +@@ -132,6 +132,7 @@ + CONFIG_MIPS_MT_DISABLED=y + # CONFIG_MIPS_MT_SMP is not set + # CONFIG_MIPS_MT_SMTC is not set ++# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set + CONFIG_CPU_HAS_WB=y + CONFIG_CPU_HAS_SYNC=y + CONFIG_GENERIC_HARDIRQS=y +@@ -188,9 +189,11 @@ CONFIG_HAVE_KERNEL_GZIP=y CONFIG_HAVE_KERNEL_BZIP2=y CONFIG_HAVE_KERNEL_LZMA=y --# CONFIG_KERNEL_GZIP is not set +CONFIG_HAVE_KERNEL_LZO=y -+CONFIG_KERNEL_GZIP=y + CONFIG_KERNEL_GZIP=y # CONFIG_KERNEL_BZIP2 is not set --CONFIG_KERNEL_LZMA=y -+# CONFIG_KERNEL_LZMA is not set + # CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_LZO is not set CONFIG_SWAP=y CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y -@@ -211,6 +207,7 @@ - # - CONFIG_TREE_RCU=y - # CONFIG_TREE_PREEMPT_RCU is not set -+# CONFIG_TINY_RCU is not set - # CONFIG_RCU_TRACE is not set - CONFIG_RCU_FANOUT=64 - # CONFIG_RCU_FANOUT_EXACT is not set -@@ -220,11 +217,15 @@ +@@ -213,10 +216,8 @@ + CONFIG_IKCONFIG=y + CONFIG_IKCONFIG_PROC=y CONFIG_LOG_BUF_SHIFT=15 - # CONFIG_GROUP_SCHED is not set +-# CONFIG_GROUP_SCHED is not set # CONFIG_CGROUPS is not set -CONFIG_SYSFS_DEPRECATED=y -CONFIG_SYSFS_DEPRECATED_V2=y +# CONFIG_SYSFS_DEPRECATED_V2 is not set # CONFIG_RELAY is not set # CONFIG_NAMESPACES is not set --# CONFIG_BLK_DEV_INITRD is not set -+CONFIG_BLK_DEV_INITRD=y -+CONFIG_INITRAMFS_SOURCE="" -+CONFIG_RD_GZIP=y -+CONFIG_RD_BZIP2=y -+CONFIG_RD_LZMA=y + CONFIG_BLK_DEV_INITRD=y +@@ -224,6 +225,7 @@ + CONFIG_RD_GZIP=y + CONFIG_RD_BZIP2=y + CONFIG_RD_LZMA=y +# CONFIG_RD_LZO is not set # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_SYSCTL=y CONFIG_ANON_INODES=y -@@ -251,21 +252,24 @@ +@@ -250,13 +252,12 @@ # CONFIG_VM_EVENT_COUNTERS=y CONFIG_PCI_QUIRKS=y @@ -569,520 +639,167 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_SLAB is not set CONFIG_SLUB=y # CONFIG_SLOB is not set --# CONFIG_PROFILING is not set -+CONFIG_PROFILING=y -+CONFIG_TRACEPOINTS=y -+CONFIG_OPROFILE=m + CONFIG_PROFILING=y +-CONFIG_TRACEPOINTS=y + CONFIG_OPROFILE=m CONFIG_HAVE_OPROFILE=y CONFIG_HAVE_SYSCALL_WRAPPERS=y - +@@ -264,11 +265,8 @@ # # GCOV-based kernel profiling # --# CONFIG_SLOW_WORK is not set -+# CONFIG_GCOV_KERNEL is not set -+CONFIG_SLOW_WORK=y -+# CONFIG_SLOW_WORK_DEBUG is not set +-# CONFIG_GCOV_KERNEL is not set + CONFIG_SLOW_WORK=y +-# CONFIG_SLOW_WORK_DEBUG is not set CONFIG_HAVE_GENERIC_DMA_COHERENT=y -CONFIG_SLABINFO=y CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 CONFIG_MODULES=y -@@ -283,14 +287,41 @@ - # IO Schedulers - # - CONFIG_IOSCHED_NOOP=y --CONFIG_IOSCHED_AS=y --CONFIG_IOSCHED_DEADLINE=y -+CONFIG_IOSCHED_DEADLINE=m - CONFIG_IOSCHED_CFQ=y --# CONFIG_DEFAULT_AS is not set - # CONFIG_DEFAULT_DEADLINE is not set - CONFIG_DEFAULT_CFQ=y - # CONFIG_DEFAULT_NOOP is not set - CONFIG_DEFAULT_IOSCHED="cfq" -+# CONFIG_INLINE_SPIN_TRYLOCK is not set -+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set -+# CONFIG_INLINE_SPIN_LOCK is not set -+# CONFIG_INLINE_SPIN_LOCK_BH is not set -+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set -+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set -+# CONFIG_INLINE_SPIN_UNLOCK is not set -+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set -+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set -+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set -+# CONFIG_INLINE_READ_TRYLOCK is not set -+# CONFIG_INLINE_READ_LOCK is not set -+# CONFIG_INLINE_READ_LOCK_BH is not set -+# CONFIG_INLINE_READ_LOCK_IRQ is not set -+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set -+# CONFIG_INLINE_READ_UNLOCK is not set -+# CONFIG_INLINE_READ_UNLOCK_BH is not set -+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set -+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set -+# CONFIG_INLINE_WRITE_TRYLOCK is not set -+# CONFIG_INLINE_WRITE_LOCK is not set -+# CONFIG_INLINE_WRITE_LOCK_BH is not set -+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set -+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set -+# CONFIG_INLINE_WRITE_UNLOCK is not set -+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set -+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set -+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set -+# CONFIG_MUTEX_SPIN_ON_OWNER is not set - CONFIG_FREEZER=y - - # -@@ -300,7 +331,7 @@ +@@ -330,7 +328,6 @@ CONFIG_PCI=y CONFIG_PCI_DOMAINS=y # CONFIG_ARCH_SUPPORTS_MSI is not set -CONFIG_PCI_LEGACY=y -+# CONFIG_PCI_LEGACY is not set # CONFIG_PCI_STUB is not set # CONFIG_PCI_IOV is not set CONFIG_ISA=y -@@ -314,7 +345,7 @@ - CONFIG_BINFMT_ELF=y - # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set - # CONFIG_HAVE_AOUT is not set --# CONFIG_BINFMT_MISC is not set -+CONFIG_BINFMT_MISC=m - CONFIG_MIPS32_COMPAT=y - CONFIG_COMPAT=y - CONFIG_SYSVIPC_COMPAT=y -@@ -335,7 +366,33 @@ - CONFIG_HIBERNATION_NVS=y +@@ -366,6 +363,7 @@ CONFIG_HIBERNATION=y CONFIG_PM_STD_PARTITION="/dev/hda3" --# CONFIG_PM_RUNTIME is not set -+CONFIG_PM_RUNTIME=y -+CONFIG_MIPS_EXTERNAL_TIMER=y -+CONFIG_MIPS_CPUFREQ=y -+ -+# -+# CPU Frequency scaling -+# -+CONFIG_CPU_FREQ=y -+CONFIG_CPU_FREQ_TABLE=y -+CONFIG_CPU_FREQ_DEBUG=y -+CONFIG_CPU_FREQ_STAT=m -+CONFIG_CPU_FREQ_STAT_DETAILS=y -+# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set -+# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set -+# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set -+CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y -+# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set -+CONFIG_CPU_FREQ_GOV_PERFORMANCE=y -+CONFIG_CPU_FREQ_GOV_POWERSAVE=m -+CONFIG_CPU_FREQ_GOV_USERSPACE=m -+CONFIG_CPU_FREQ_GOV_ONDEMAND=y -+CONFIG_CPU_FREQ_GOV_CONSERVATIVE=m -+ -+# -+# CPUFreq processor drivers -+# -+CONFIG_LOONGSON2_CPUFREQ=m - CONFIG_NET=y - CONFIG_COMPAT_NETLINK_MESSAGES=y + CONFIG_PM_RUNTIME=y ++CONFIG_PM_OPS=y + CONFIG_MIPS_EXTERNAL_TIMER=y + CONFIG_MIPS_CPUFREQ=y -@@ -346,11 +403,12 @@ - CONFIG_PACKET_MMAP=y - CONFIG_UNIX=y - CONFIG_XFRM=y --# CONFIG_XFRM_USER is not set -+CONFIG_XFRM_USER=m - # CONFIG_XFRM_SUB_POLICY is not set - # CONFIG_XFRM_MIGRATE is not set - # CONFIG_XFRM_STATISTICS is not set --# CONFIG_NET_KEY is not set -+CONFIG_NET_KEY=m -+# CONFIG_NET_KEY_MIGRATE is not set - CONFIG_INET=y - CONFIG_IP_MULTICAST=y - CONFIG_IP_ADVANCED_ROUTER=y -@@ -361,12 +419,13 @@ - CONFIG_IP_ROUTE_MULTIPATH=y - CONFIG_IP_ROUTE_VERBOSE=y - # CONFIG_IP_PNP is not set --# CONFIG_NET_IPIP is not set --# CONFIG_NET_IPGRE is not set -+CONFIG_NET_IPIP=m -+CONFIG_NET_IPGRE=m -+# CONFIG_NET_IPGRE_BROADCAST is not set - CONFIG_IP_MROUTE=y - CONFIG_IP_PIMSM_V1=y - CONFIG_IP_PIMSM_V2=y --# CONFIG_ARPD is not set -+CONFIG_ARPD=y - CONFIG_SYN_COOKIES=y - # CONFIG_INET_AH is not set - # CONFIG_INET_ESP is not set -@@ -399,30 +458,34 @@ - # CONFIG_DEFAULT_WESTWOOD is not set - # CONFIG_DEFAULT_RENO is not set - CONFIG_DEFAULT_TCP_CONG="bic" --# CONFIG_TCP_MD5SIG is not set -+CONFIG_TCP_MD5SIG=y - CONFIG_IPV6=m - CONFIG_IPV6_PRIVACY=y --# CONFIG_IPV6_ROUTER_PREF is not set -+CONFIG_IPV6_ROUTER_PREF=y -+# CONFIG_IPV6_ROUTE_INFO is not set - # CONFIG_IPV6_OPTIMISTIC_DAD is not set - # CONFIG_INET6_AH is not set - # CONFIG_INET6_ESP is not set - # CONFIG_INET6_IPCOMP is not set - # CONFIG_IPV6_MIP6 is not set - # CONFIG_INET6_XFRM_TUNNEL is not set --# CONFIG_INET6_TUNNEL is not set -+CONFIG_INET6_TUNNEL=m - CONFIG_INET6_XFRM_MODE_TRANSPORT=m - CONFIG_INET6_XFRM_MODE_TUNNEL=m - CONFIG_INET6_XFRM_MODE_BEET=m - # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set - CONFIG_IPV6_SIT=m -+# CONFIG_IPV6_SIT_6RD is not set - CONFIG_IPV6_NDISC_NODETYPE=y --# CONFIG_IPV6_TUNNEL is not set --# CONFIG_IPV6_MULTIPLE_TABLES is not set -+CONFIG_IPV6_TUNNEL=m -+CONFIG_IPV6_MULTIPLE_TABLES=y -+CONFIG_IPV6_SUBTREES=y - # CONFIG_IPV6_MROUTE is not set - CONFIG_NETWORK_SECMARK=y - CONFIG_NETFILTER=y - # CONFIG_NETFILTER_DEBUG is not set - CONFIG_NETFILTER_ADVANCED=y -+CONFIG_BRIDGE_NETFILTER=y +@@ -393,12 +391,12 @@ + # + CONFIG_LOONGSON2_CPUFREQ=m + CONFIG_NET=y ++CONFIG_COMPAT_NETLINK_MESSAGES=y # - # Core Netfilter Configuration -@@ -446,17 +509,22 @@ + # Networking options # - # CONFIG_IP6_NF_QUEUE is not set - # CONFIG_IP6_NF_IPTABLES is not set -+# CONFIG_BRIDGE_NF_EBTABLES is not set - # CONFIG_IP_DCCP is not set - # CONFIG_IP_SCTP is not set - # CONFIG_RDS is not set - # CONFIG_TIPC is not set + CONFIG_PACKET=y +-CONFIG_PACKET_MMAP=y + CONFIG_UNIX=y + CONFIG_XFRM=y + CONFIG_XFRM_USER=m +@@ -515,6 +513,7 @@ # CONFIG_ATM is not set --# CONFIG_BRIDGE is not set -+CONFIG_STP=m -+CONFIG_BRIDGE=m + CONFIG_STP=m + CONFIG_BRIDGE=m ++CONFIG_BRIDGE_IGMP_SNOOPING=y # CONFIG_NET_DSA is not set --# CONFIG_VLAN_8021Q is not set -+CONFIG_VLAN_8021Q=m -+# CONFIG_VLAN_8021Q_GVRP is not set - # CONFIG_DECNET is not set -+CONFIG_LLC=m - # CONFIG_LLC2 is not set --# CONFIG_IPX is not set -+CONFIG_IPX=m -+# CONFIG_IPX_INTERN is not set - # CONFIG_ATALK is not set - # CONFIG_X25 is not set - # CONFIG_LAPB is not set -@@ -518,26 +586,64 @@ + CONFIG_VLAN_8021Q=m + # CONFIG_VLAN_8021Q_GVRP is not set +@@ -584,7 +583,6 @@ # Network testing # # CONFIG_NET_PKTGEN is not set -+# CONFIG_NET_DROP_MONITOR is not set +-# CONFIG_NET_DROP_MONITOR is not set # CONFIG_HAMRADIO is not set # CONFIG_CAN is not set # CONFIG_IRDA is not set --# CONFIG_BT is not set -+CONFIG_BT=m -+CONFIG_BT_L2CAP=m -+CONFIG_BT_SCO=m -+CONFIG_BT_RFCOMM=m -+CONFIG_BT_RFCOMM_TTY=y -+CONFIG_BT_BNEP=m -+CONFIG_BT_BNEP_MC_FILTER=y -+CONFIG_BT_BNEP_PROTO_FILTER=y -+CONFIG_BT_HIDP=m -+ -+# -+# Bluetooth device drivers -+# -+CONFIG_BT_HCIBTUSB=m -+# CONFIG_BT_HCIBTSDIO is not set -+# CONFIG_BT_HCIUART is not set -+# CONFIG_BT_HCIBCM203X is not set -+# CONFIG_BT_HCIBPA10X is not set -+CONFIG_BT_HCIBFUSB=m -+CONFIG_BT_HCIVHCI=m -+# CONFIG_BT_MRVL is not set +@@ -609,18 +607,20 @@ + CONFIG_BT_HCIBFUSB=m + CONFIG_BT_HCIVHCI=m + # CONFIG_BT_MRVL is not set +# CONFIG_BT_ATH3K is not set # CONFIG_AF_RXRPC is not set CONFIG_FIB_RULES=y CONFIG_WIRELESS=y --# CONFIG_CFG80211 is not set --CONFIG_CFG80211_DEFAULT_PS_VALUE=0 --# CONFIG_WIRELESS_OLD_REGULATORY is not set - CONFIG_WIRELESS_EXT=y -+CONFIG_WEXT_CORE=y -+CONFIG_WEXT_PROC=y ++CONFIG_WIRELESS_EXT=y + CONFIG_WEXT_CORE=y + CONFIG_WEXT_PROC=y +CONFIG_WEXT_PRIV=y -+CONFIG_CFG80211=m -+# CONFIG_NL80211_TESTMODE is not set -+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set -+# CONFIG_CFG80211_REG_DEBUG is not set -+CONFIG_CFG80211_DEFAULT_PS=y -+# CONFIG_CFG80211_DEBUGFS is not set -+# CONFIG_WIRELESS_OLD_REGULATORY is not set -+CONFIG_CFG80211_WEXT=y + CONFIG_CFG80211=m + # CONFIG_NL80211_TESTMODE is not set + # CONFIG_CFG80211_DEVELOPER_WARNINGS is not set + # CONFIG_CFG80211_REG_DEBUG is not set + CONFIG_CFG80211_DEFAULT_PS=y +-# CONFIG_CFG80211_DEBUGFS is not set +-# CONFIG_WIRELESS_OLD_REGULATORY is not set ++# CONFIG_CFG80211_INTERNAL_REGDB is not set + CONFIG_CFG80211_WEXT=y CONFIG_WIRELESS_EXT_SYSFS=y --# CONFIG_LIB80211 is not set -- --# --# CFG80211 needs to be enabled for MAC80211 --# -+CONFIG_LIB80211=m -+CONFIG_LIB80211_DEBUG=y -+CONFIG_MAC80211=m -+# CONFIG_MAC80211_RC_PID is not set -+CONFIG_MAC80211_RC_MINSTREL=y -+# CONFIG_MAC80211_RC_DEFAULT_PID is not set -+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y -+CONFIG_MAC80211_RC_DEFAULT="minstrel" -+# CONFIG_MAC80211_MESH is not set -+CONFIG_MAC80211_LEDS=y -+# CONFIG_MAC80211_DEBUGFS is not set -+# CONFIG_MAC80211_DEBUG_MENU is not set + CONFIG_LIB80211=m +@@ -633,7 +633,6 @@ + CONFIG_MAC80211_RC_DEFAULT="minstrel" + # CONFIG_MAC80211_MESH is not set + CONFIG_MAC80211_LEDS=y +-# CONFIG_MAC80211_DEBUGFS is not set + # CONFIG_MAC80211_DEBUG_MENU is not set # CONFIG_WIMAX is not set CONFIG_RFKILL=m --# CONFIG_RFKILL_INPUT is not set -+CONFIG_RFKILL_LEDS=y -+CONFIG_RFKILL_INPUT=y - # CONFIG_NET_9P is not set - - # -@@ -555,7 +661,7 @@ - CONFIG_FIRMWARE_IN_KERNEL=y - CONFIG_EXTRA_FIRMWARE="" - # CONFIG_SYS_HYPERVISOR is not set --# CONFIG_CONNECTOR is not set -+CONFIG_CONNECTOR=m - # CONFIG_MTD is not set - # CONFIG_PARPORT is not set - # CONFIG_PNP is not set -@@ -566,7 +672,8 @@ - # CONFIG_BLK_DEV_UMEM is not set +@@ -668,10 +667,6 @@ # CONFIG_BLK_DEV_COW_COMMON is not set CONFIG_BLK_DEV_LOOP=y --CONFIG_BLK_DEV_CRYPTOLOOP=y -+CONFIG_BLK_DEV_CRYPTOLOOP=m -+# CONFIG_BLK_DEV_DRBD is not set - # CONFIG_BLK_DEV_NBD is not set - # CONFIG_BLK_DEV_SX8 is not set - # CONFIG_BLK_DEV_UB is not set -@@ -577,19 +684,7 @@ - # CONFIG_CDROM_PKTCDVD is not set - # CONFIG_ATA_OVER_ETH is not set - # CONFIG_BLK_DEV_HD is not set --CONFIG_MISC_DEVICES=y --# CONFIG_PHANTOM is not set --# CONFIG_SGI_IOC4 is not set --# CONFIG_TIFM_CORE is not set --# CONFIG_ENCLOSURE_SERVICES is not set --# CONFIG_HP_ILO is not set --# CONFIG_C2PORT is not set + CONFIG_BLK_DEV_CRYPTOLOOP=m - -# --# EEPROM support +-# DRBD disabled because PROC_FS, INET or CONNECTOR not selected -# --# CONFIG_EEPROM_93CX6 is not set --# CONFIG_CB710_CORE is not set -+# CONFIG_MISC_DEVICES is not set - CONFIG_HAVE_IDE=y - CONFIG_IDE=y - -@@ -619,8 +714,7 @@ - # - CONFIG_BLK_DEV_IDEPCI=y - # CONFIG_IDEPCI_PCIBUS_ORDER is not set --# CONFIG_BLK_DEV_OFFBOARD is not set --CONFIG_BLK_DEV_GENERIC=y -+# CONFIG_BLK_DEV_GENERIC is not set - # CONFIG_BLK_DEV_OPTI621 is not set - CONFIG_BLK_DEV_IDEDMA_PCI=y - # CONFIG_BLK_DEV_AEC62XX is not set -@@ -700,7 +794,29 @@ - # CONFIG_SCSI_DH is not set - # CONFIG_SCSI_OSD_INITIATOR is not set - # CONFIG_ATA is not set --# CONFIG_MD is not set -+CONFIG_MD=y -+CONFIG_BLK_DEV_MD=m -+CONFIG_MD_LINEAR=m -+CONFIG_MD_RAID0=m -+CONFIG_MD_RAID1=m -+CONFIG_MD_RAID10=m -+CONFIG_MD_RAID456=m -+CONFIG_MD_RAID6_PQ=m -+# CONFIG_ASYNC_RAID6_TEST is not set -+CONFIG_MD_MULTIPATH=m -+CONFIG_MD_FAULTY=m -+CONFIG_BLK_DEV_DM=m -+CONFIG_DM_DEBUG=y -+CONFIG_DM_CRYPT=m -+CONFIG_DM_SNAPSHOT=m -+CONFIG_DM_MIRROR=m -+CONFIG_DM_LOG_USERSPACE=m -+CONFIG_DM_ZERO=m -+CONFIG_DM_MULTIPATH=m -+CONFIG_DM_MULTIPATH_QL=m -+CONFIG_DM_MULTIPATH_ST=m -+CONFIG_DM_DELAY=m -+CONFIG_DM_UEVENT=y - # CONFIG_FUSION is not set - - # -@@ -712,19 +828,19 @@ - # - + # CONFIG_BLK_DEV_DRBD is not set + # CONFIG_BLK_DEV_NBD is not set + # CONFIG_BLK_DEV_SX8 is not set +@@ -758,6 +753,7 @@ # --# See the help texts for more information. -+# The newer stack is recommended. + # SCSI device support # - # CONFIG_FIREWIRE is not set - # CONFIG_IEEE1394 is not set - # CONFIG_I2O is not set - CONFIG_NETDEVICES=y - # CONFIG_IFB is not set --# CONFIG_DUMMY is not set -+CONFIG_DUMMY=m - # CONFIG_BONDING is not set - # CONFIG_MACVLAN is not set - # CONFIG_EQUALIZER is not set --# CONFIG_TUN is not set --# CONFIG_VETH is not set -+CONFIG_TUN=m -+CONFIG_VETH=m - # CONFIG_ARCNET is not set - # CONFIG_PHYLIB is not set - CONFIG_NET_ETHERNET=y -@@ -738,6 +854,7 @@ - # CONFIG_SMC91X is not set - # CONFIG_DM9000 is not set - # CONFIG_ETHOC is not set -+# CONFIG_SMSC911X is not set - # CONFIG_NET_VENDOR_RACAL is not set - # CONFIG_DNET is not set - # CONFIG_NET_TULIP is not set -@@ -767,9 +884,9 @@ ++CONFIG_SCSI_MOD=m + # CONFIG_RAID_ATTRS is not set + CONFIG_SCSI=m + CONFIG_SCSI_DMA=y +@@ -873,6 +869,7 @@ + # CONFIG_AMD8111_ETH is not set + # CONFIG_ADAPTEC_STARFIRE is not set + # CONFIG_AC3200 is not set ++# CONFIG_KSZ884X_PCI is not set + # CONFIG_APRICOT is not set + # CONFIG_B44 is not set + # CONFIG_FORCEDETH is not set +@@ -883,7 +880,7 @@ # CONFIG_NATSEMI is not set # CONFIG_NE2K_PCI is not set # CONFIG_8139CP is not set -CONFIG_8139TOO=y +CONFIG_8139TOO=m # CONFIG_8139TOO_PIO is not set --CONFIG_8139TOO_TUNE_TWISTER=y -+# CONFIG_8139TOO_TUNE_TWISTER is not set + # CONFIG_8139TOO_TUNE_TWISTER is not set # CONFIG_8139TOO_8129 is not set - # CONFIG_8139_OLD_RX_RESET is not set - # CONFIG_R6040 is not set -@@ -794,7 +911,8 @@ +@@ -910,7 +907,7 @@ # CONFIG_NS83820 is not set # CONFIG_HAMACHI is not set # CONFIG_YELLOWFIN is not set -CONFIG_R8169=y +CONFIG_R8169=m -+CONFIG_R8169_VLAN=y + CONFIG_R8169_VLAN=y # CONFIG_SIS190 is not set # CONFIG_SKGE is not set - # CONFIG_SKY2 is not set -@@ -810,15 +928,31 @@ - # CONFIG_NETDEV_10000 is not set - # CONFIG_TR is not set - CONFIG_WLAN=y --CONFIG_WLAN_PRE80211=y --# CONFIG_STRIP is not set --# CONFIG_WAVELAN is not set --CONFIG_WLAN_80211=y --# CONFIG_LIBERTAS is not set -+# CONFIG_LIBERTAS_THINFIRM is not set - # CONFIG_ATMEL is not set -+# CONFIG_AT76C50X_USB is not set - # CONFIG_PRISM54 is not set +@@ -934,7 +931,7 @@ # CONFIG_USB_ZD1201 is not set -+# CONFIG_USB_NET_RNDIS_WLAN is not set -+# CONFIG_RTL8180 is not set + # CONFIG_USB_NET_RNDIS_WLAN is not set + # CONFIG_RTL8180 is not set +-# CONFIG_RTL8187 is not set +CONFIG_RTL8187B=m -+# CONFIG_ADM8211 is not set -+# CONFIG_MAC80211_HWSIM is not set -+# CONFIG_MWL8K is not set -+# CONFIG_ATH_COMMON is not set -+# CONFIG_B43 is not set -+# CONFIG_B43LEGACY is not set - # CONFIG_HOSTAP is not set -+# CONFIG_IPW2100 is not set -+# CONFIG_IPW2200 is not set -+# CONFIG_IWLWIFI is not set -+# CONFIG_IWM is not set -+# CONFIG_LIBERTAS is not set -+# CONFIG_HERMES is not set -+# CONFIG_P54_COMMON is not set -+# CONFIG_RT2X00 is not set -+# CONFIG_WL12XX is not set -+# CONFIG_ZD1211RW is not set - - # - # Enable WiMAX (Networking options) to see the WiMAX drivers -@@ -831,17 +965,39 @@ - # CONFIG_USB_KAWETH is not set - # CONFIG_USB_PEGASUS is not set - # CONFIG_USB_RTL8150 is not set --# CONFIG_USB_USBNET is not set -+CONFIG_USB_USBNET=m -+CONFIG_USB_NET_AX8817X=m -+CONFIG_USB_NET_CDCETHER=m -+CONFIG_USB_NET_CDC_EEM=m -+# CONFIG_USB_NET_DM9601 is not set -+# CONFIG_USB_NET_SMSC95XX is not set -+# CONFIG_USB_NET_GL620A is not set -+CONFIG_USB_NET_NET1080=m -+# CONFIG_USB_NET_PLUSB is not set -+# CONFIG_USB_NET_MCS7830 is not set -+# CONFIG_USB_NET_RNDIS_HOST is not set -+CONFIG_USB_NET_CDC_SUBSET=m -+# CONFIG_USB_ALI_M5632 is not set -+# CONFIG_USB_AN2720 is not set -+CONFIG_USB_BELKIN=y -+CONFIG_USB_ARMLINUX=y -+# CONFIG_USB_EPSON2888 is not set -+# CONFIG_USB_KC2190 is not set -+CONFIG_USB_NET_ZAURUS=m - # CONFIG_USB_HSO is not set -+# CONFIG_USB_NET_INT51X1 is not set - # CONFIG_WAN is not set - # CONFIG_FDDI is not set - # CONFIG_HIPPI is not set - # CONFIG_PPP is not set - # CONFIG_SLIP is not set - # CONFIG_NET_FC is not set --# CONFIG_NETCONSOLE is not set --# CONFIG_NETPOLL is not set --# CONFIG_NET_POLL_CONTROLLER is not set -+CONFIG_NETCONSOLE=m -+CONFIG_NETCONSOLE_DYNAMIC=y -+CONFIG_NETPOLL=y -+# CONFIG_NETPOLL_TRAP is not set -+CONFIG_NET_POLL_CONTROLLER=y -+# CONFIG_VMXNET3 is not set - # CONFIG_ISDN is not set - # CONFIG_PHONE is not set - -@@ -849,25 +1005,26 @@ - # Input device support - # + # CONFIG_ADM8211 is not set + # CONFIG_MAC80211_HWSIM is not set + # CONFIG_MWL8K is not set +@@ -969,6 +966,7 @@ + CONFIG_USB_NET_CDCETHER=m + CONFIG_USB_NET_CDC_EEM=m + # CONFIG_USB_NET_DM9601 is not set ++# CONFIG_USB_NET_SMSC75XX is not set + # CONFIG_USB_NET_SMSC95XX is not set + # CONFIG_USB_NET_GL620A is not set + CONFIG_USB_NET_NET1080=m +@@ -1006,24 +1004,24 @@ CONFIG_INPUT=y --# CONFIG_INPUT_FF_MEMLESS is not set --# CONFIG_INPUT_POLLDEV is not set -+CONFIG_INPUT_FF_MEMLESS=m -+CONFIG_INPUT_POLLDEV=m + CONFIG_INPUT_FF_MEMLESS=m + CONFIG_INPUT_POLLDEV=m +-# CONFIG_INPUT_SPARSEKMAP is not set +CONFIG_INPUT_SPARSEKMAP=m # @@ -1107,7 +824,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_KEYBOARD_LKKBD is not set # CONFIG_KEYBOARD_NEWTON is not set # CONFIG_KEYBOARD_OPENCORES is not set -@@ -875,7 +1032,7 @@ +@@ -1031,7 +1029,7 @@ # CONFIG_KEYBOARD_SUNKBD is not set # CONFIG_KEYBOARD_XTKBD is not set CONFIG_INPUT_MOUSE=y @@ -1116,24 +833,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_MOUSE_PS2_ALPS is not set # CONFIG_MOUSE_PS2_LOGIPS2PP is not set CONFIG_MOUSE_PS2_SYNAPTICS=y -@@ -884,7 +1041,7 @@ - # CONFIG_MOUSE_PS2_SENTELIC is not set - # CONFIG_MOUSE_PS2_TOUCHKIT is not set - # CONFIG_MOUSE_SERIAL is not set --# CONFIG_MOUSE_APPLETOUCH is not set -+CONFIG_MOUSE_APPLETOUCH=m - # CONFIG_MOUSE_BCM5974 is not set - # CONFIG_MOUSE_INPORT is not set - # CONFIG_MOUSE_LOGIBM is not set -@@ -904,6 +1061,7 @@ - # CONFIG_SERIO_PCIPS2 is not set - CONFIG_SERIO_LIBPS2=y - # CONFIG_SERIO_RAW is not set -+# CONFIG_SERIO_ALTERA_PS2 is not set - # CONFIG_GAMEPORT is not set - - # -@@ -915,27 +1073,13 @@ +@@ -1072,20 +1070,7 @@ CONFIG_HW_CONSOLE=y # CONFIG_VT_HW_CONSOLE_BINDING is not set CONFIG_DEVKMEM=y @@ -1155,25 +855,15 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_NOZOMI is not set # - # Serial drivers - # --CONFIG_SERIAL_8250=y --CONFIG_SERIAL_8250_CONSOLE=y -+CONFIG_SERIAL_8250=m - # CONFIG_SERIAL_8250_PCI is not set - CONFIG_SERIAL_8250_NR_UARTS=16 - CONFIG_SERIAL_8250_RUNTIME_UARTS=4 -@@ -953,8 +1097,7 @@ - # - # Non-8250 serial port support +@@ -1111,6 +1096,7 @@ # --CONFIG_SERIAL_CORE=y --CONFIG_SERIAL_CORE_CONSOLE=y -+CONFIG_SERIAL_CORE=m + CONFIG_SERIAL_CORE=m # CONFIG_SERIAL_JSM is not set ++# CONFIG_SERIAL_TIMBERDALE is not set CONFIG_UNIX98_PTYS=y # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set -@@ -963,7 +1106,6 @@ + CONFIG_LEGACY_PTYS=y +@@ -1118,7 +1104,6 @@ # CONFIG_IPMI_HANDLER is not set CONFIG_HW_RANDOM=y # CONFIG_HW_RANDOM_TIMERIOMEM is not set @@ -1181,7 +871,7 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_DTLK is not set # CONFIG_R3964 is not set # CONFIG_APPLICOM is not set -@@ -978,7 +1120,10 @@ +@@ -1133,7 +1118,10 @@ # # CONFIG_PPS is not set # CONFIG_W1 is not set @@ -1193,134 +883,45 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi CONFIG_HWMON=y # CONFIG_HWMON_VID is not set # CONFIG_HWMON_DEBUG_CHIP is not set -@@ -1033,14 +1178,18 @@ - # - # Multimedia drivers - # -+CONFIG_IR_CORE=m -+CONFIG_VIDEO_IR=m - # CONFIG_MEDIA_ATTACH is not set - CONFIG_VIDEO_V4L2=m - CONFIG_VIDEO_V4L1=m -+CONFIG_VIDEOBUF_GEN=m -+CONFIG_VIDEOBUF_VMALLOC=m - CONFIG_VIDEO_CAPTURE_DRIVERS=y - # CONFIG_VIDEO_ADV_DEBUG is not set - # CONFIG_VIDEO_FIXED_MINOR_RANGES is not set - CONFIG_VIDEO_HELPER_CHIPS_AUTO=y --# CONFIG_VIDEO_VIVI is not set -+CONFIG_VIDEO_VIVI=m - # CONFIG_VIDEO_PMS is not set - # CONFIG_VIDEO_CPIA is not set - # CONFIG_VIDEO_CPIA2 is not set -@@ -1049,52 +1198,55 @@ - CONFIG_USB_VIDEO_CLASS=m - CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y - CONFIG_USB_GSPCA=m --# CONFIG_USB_M5602 is not set --# CONFIG_USB_STV06XX is not set -+CONFIG_USB_M5602=m -+CONFIG_USB_STV06XX=m +@@ -1172,6 +1160,7 @@ + # CONFIG_MFD_SM501 is not set + # CONFIG_HTC_PASIC3 is not set + # CONFIG_MFD_TMIO is not set ++# CONFIG_LPC_SCH is not set + # CONFIG_REGULATOR is not set + CONFIG_MEDIA_SUPPORT=m + +@@ -1211,7 +1200,9 @@ + CONFIG_USB_M5602=m + CONFIG_USB_STV06XX=m # CONFIG_USB_GL860 is not set --# CONFIG_USB_GSPCA_CONEX is not set --# CONFIG_USB_GSPCA_ETOMS is not set --# CONFIG_USB_GSPCA_FINEPIX is not set -+CONFIG_USB_GSPCA_CONEX=m -+CONFIG_USB_GSPCA_ETOMS=m -+CONFIG_USB_GSPCA_FINEPIX=m ++# CONFIG_USB_GSPCA_BENQ is not set + CONFIG_USB_GSPCA_CONEX=m ++# CONFIG_USB_GSPCA_CPIA1 is not set + CONFIG_USB_GSPCA_ETOMS=m + CONFIG_USB_GSPCA_FINEPIX=m # CONFIG_USB_GSPCA_JEILINJ is not set --# CONFIG_USB_GSPCA_MARS is not set --# CONFIG_USB_GSPCA_MR97310A is not set --# CONFIG_USB_GSPCA_OV519 is not set --# CONFIG_USB_GSPCA_OV534 is not set --# CONFIG_USB_GSPCA_PAC207 is not set --# CONFIG_USB_GSPCA_PAC7311 is not set --# CONFIG_USB_GSPCA_SN9C20X is not set --# CONFIG_USB_GSPCA_SONIXB is not set --# CONFIG_USB_GSPCA_SONIXJ is not set --# CONFIG_USB_GSPCA_SPCA500 is not set --# CONFIG_USB_GSPCA_SPCA501 is not set --# CONFIG_USB_GSPCA_SPCA505 is not set --# CONFIG_USB_GSPCA_SPCA506 is not set --# CONFIG_USB_GSPCA_SPCA508 is not set --# CONFIG_USB_GSPCA_SPCA561 is not set --# CONFIG_USB_GSPCA_SQ905 is not set --# CONFIG_USB_GSPCA_SQ905C is not set --# CONFIG_USB_GSPCA_STK014 is not set --# CONFIG_USB_GSPCA_SUNPLUS is not set --# CONFIG_USB_GSPCA_T613 is not set --# CONFIG_USB_GSPCA_TV8532 is not set --# CONFIG_USB_GSPCA_VC032X is not set --# CONFIG_USB_GSPCA_ZC3XX is not set -+CONFIG_USB_GSPCA_MARS=m -+CONFIG_USB_GSPCA_MR97310A=m -+CONFIG_USB_GSPCA_OV519=m -+CONFIG_USB_GSPCA_OV534=m -+CONFIG_USB_GSPCA_PAC207=m -+# CONFIG_USB_GSPCA_PAC7302 is not set -+CONFIG_USB_GSPCA_PAC7311=m -+CONFIG_USB_GSPCA_SN9C20X=m -+CONFIG_USB_GSPCA_SN9C20X_EVDEV=y -+CONFIG_USB_GSPCA_SONIXB=m -+CONFIG_USB_GSPCA_SONIXJ=m -+CONFIG_USB_GSPCA_SPCA500=m -+CONFIG_USB_GSPCA_SPCA501=m -+CONFIG_USB_GSPCA_SPCA505=m -+CONFIG_USB_GSPCA_SPCA506=m -+CONFIG_USB_GSPCA_SPCA508=m -+CONFIG_USB_GSPCA_SPCA561=m -+CONFIG_USB_GSPCA_SQ905=m -+CONFIG_USB_GSPCA_SQ905C=m -+CONFIG_USB_GSPCA_STK014=m -+# CONFIG_USB_GSPCA_STV0680 is not set -+CONFIG_USB_GSPCA_SUNPLUS=m -+CONFIG_USB_GSPCA_T613=m -+CONFIG_USB_GSPCA_TV8532=m -+CONFIG_USB_GSPCA_VC032X=m -+CONFIG_USB_GSPCA_ZC3XX=m - # CONFIG_VIDEO_HDPVR is not set - # CONFIG_USB_VICAM is not set - # CONFIG_USB_IBMCAM is not set - # CONFIG_USB_KONICAWC is not set - # CONFIG_USB_QUICKCAM_MESSENGER is not set --# CONFIG_USB_ET61X251 is not set -+CONFIG_USB_ET61X251=m - # CONFIG_USB_OV511 is not set - # CONFIG_USB_SE401 is not set --# CONFIG_USB_SN9C102 is not set -+CONFIG_USB_SN9C102=m - # CONFIG_USB_STV680 is not set --# CONFIG_USB_ZC0301 is not set -+CONFIG_USB_ZC0301=m - # CONFIG_USB_PWC is not set - CONFIG_USB_PWC_INPUT_EVDEV=y --# CONFIG_USB_ZR364XX is not set --# CONFIG_USB_STKWEBCAM is not set --# CONFIG_USB_S2255 is not set -+CONFIG_USB_ZR364XX=m -+CONFIG_USB_STKWEBCAM=m -+CONFIG_USB_S2255=m - # CONFIG_RADIO_ADAPTERS is not set - # CONFIG_DAB is not set - -@@ -1132,6 +1284,7 @@ - # CONFIG_FB_CYBER2000 is not set - # CONFIG_FB_ASILIANT is not set - # CONFIG_FB_IMSTT is not set -+# CONFIG_FB_UVESA is not set - # CONFIG_FB_S1D13XXX is not set - # CONFIG_FB_NVIDIA is not set - # CONFIG_FB_RIVA is not set -@@ -1161,7 +1314,7 @@ - CONFIG_BACKLIGHT_LCD_SUPPORT=y - # CONFIG_LCD_CLASS_DEVICE is not set - CONFIG_BACKLIGHT_CLASS_DEVICE=y --CONFIG_BACKLIGHT_GENERIC=y -+CONFIG_BACKLIGHT_GENERIC=m - +@@ -1219,9 +1210,11 @@ + CONFIG_USB_GSPCA_MR97310A=m + CONFIG_USB_GSPCA_OV519=m + CONFIG_USB_GSPCA_OV534=m ++# CONFIG_USB_GSPCA_OV534_9 is not set + CONFIG_USB_GSPCA_PAC207=m + # CONFIG_USB_GSPCA_PAC7302 is not set + CONFIG_USB_GSPCA_PAC7311=m ++# CONFIG_USB_GSPCA_SN9C2028 is not set + CONFIG_USB_GSPCA_SN9C20X=m + CONFIG_USB_GSPCA_SN9C20X_EVDEV=y + CONFIG_USB_GSPCA_SONIXB=m +@@ -1264,6 +1257,7 @@ + # Graphics support # - # Display device support -@@ -1188,33 +1341,45 @@ + CONFIG_VGA_ARB=y ++CONFIG_VGA_ARB_MAX_GPUS=16 + # CONFIG_DRM is not set + # CONFIG_VGASTATE is not set + CONFIG_VIDEO_OUTPUT_CONTROL=y +@@ -1351,10 +1345,7 @@ CONFIG_FONT_SUN8x16=y CONFIG_FONT_SUN12x22=y CONFIG_FONT_10x18=y @@ -1330,137 +931,54 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi -CONFIG_LOGO_LINUX_CLUT224=y +# CONFIG_LOGO is not set CONFIG_SOUND=m --# CONFIG_SOUND_OSS_CORE is not set -+CONFIG_SOUND_OSS_CORE=y -+CONFIG_SOUND_OSS_CORE_PRECLAIM=y - CONFIG_SND=m - CONFIG_SND_TIMER=m - CONFIG_SND_PCM=m --# CONFIG_SND_SEQUENCER is not set --# CONFIG_SND_MIXER_OSS is not set --# CONFIG_SND_PCM_OSS is not set --# CONFIG_SND_HRTIMER is not set + CONFIG_SOUND_OSS_CORE=y + CONFIG_SOUND_OSS_CORE_PRECLAIM=y +@@ -1372,7 +1363,6 @@ + CONFIG_SND_SEQUENCER_OSS=y + CONFIG_SND_HRTIMER=m + CONFIG_SND_SEQ_HRTIMER_DEFAULT=y -# CONFIG_SND_RTCTIMER is not set -+CONFIG_SND_HWDEP=m -+CONFIG_SND_RAWMIDI=m -+CONFIG_SND_SEQUENCER=m -+CONFIG_SND_SEQ_DUMMY=m -+CONFIG_SND_OSSEMUL=y -+CONFIG_SND_MIXER_OSS=m -+CONFIG_SND_PCM_OSS=m -+CONFIG_SND_PCM_OSS_PLUGINS=y -+CONFIG_SND_SEQUENCER_OSS=y -+CONFIG_SND_HRTIMER=m -+CONFIG_SND_SEQ_HRTIMER_DEFAULT=y # CONFIG_SND_DYNAMIC_MINORS is not set --# CONFIG_SND_SUPPORT_OLD_API is not set --# CONFIG_SND_VERBOSE_PROCFS is not set -+CONFIG_SND_SUPPORT_OLD_API=y -+CONFIG_SND_VERBOSE_PROCFS=y - # CONFIG_SND_VERBOSE_PRINTK is not set - # CONFIG_SND_DEBUG is not set - CONFIG_SND_VMASTER=y --# CONFIG_SND_RAWMIDI_SEQ is not set -+CONFIG_SND_RAWMIDI_SEQ=m - # CONFIG_SND_OPL3_LIB_SEQ is not set - # CONFIG_SND_OPL4_LIB_SEQ is not set - # CONFIG_SND_SBAWE_SEQ is not set - # CONFIG_SND_EMU10K1_SEQ is not set -+CONFIG_SND_MPU401_UART=m - CONFIG_SND_AC97_CODEC=m --# CONFIG_SND_DRIVERS is not set -+CONFIG_SND_DRIVERS=y -+CONFIG_SND_DUMMY=m -+CONFIG_SND_VIRMIDI=m -+# CONFIG_SND_MTPAV is not set -+CONFIG_SND_SERIAL_U16550=m -+CONFIG_SND_MPU401=m -+CONFIG_SND_AC97_POWER_SAVE=y -+CONFIG_SND_AC97_POWER_SAVE_DEFAULT=10 - CONFIG_SND_PCI=y - # CONFIG_SND_AD1889 is not set - # CONFIG_SND_ALS300 is not set -@@ -1281,7 +1446,10 @@ - # CONFIG_SND_VX222 is not set - # CONFIG_SND_YMFPCI is not set + CONFIG_SND_SUPPORT_OLD_API=y + CONFIG_SND_VERBOSE_PROCFS=y +@@ -1462,6 +1452,7 @@ # CONFIG_SND_MIPS is not set --# CONFIG_SND_USB is not set -+CONFIG_SND_USB=y -+CONFIG_SND_USB_AUDIO=m -+CONFIG_SND_USB_CAIAQ=m -+CONFIG_SND_USB_CAIAQ_INPUT=y + CONFIG_SND_USB=y + CONFIG_SND_USB_AUDIO=m ++# CONFIG_SND_USB_UA101 is not set + CONFIG_SND_USB_CAIAQ=m + CONFIG_SND_USB_CAIAQ_INPUT=y # CONFIG_SND_SOC is not set - # CONFIG_SOUND_PRIME is not set - CONFIG_AC97_BUS=m -@@ -1299,32 +1467,41 @@ +@@ -1481,6 +1472,7 @@ # # Special HID drivers # --# CONFIG_HID_A4TECH is not set --# CONFIG_HID_APPLE is not set --# CONFIG_HID_BELKIN is not set --# CONFIG_HID_CHERRY is not set --# CONFIG_HID_CHICONY is not set --# CONFIG_HID_CYPRESS is not set --# CONFIG_HID_DRAGONRISE is not set --# CONFIG_HID_EZKEY is not set --# CONFIG_HID_KYE is not set --# CONFIG_HID_GYRATION is not set --# CONFIG_HID_TWINHAN is not set --# CONFIG_HID_KENSINGTON is not set --# CONFIG_HID_LOGITECH is not set --# CONFIG_HID_MICROSOFT is not set --# CONFIG_HID_MONTEREY is not set --# CONFIG_HID_NTRIG is not set --# CONFIG_HID_PANTHERLORD is not set --# CONFIG_HID_PETALYNX is not set --# CONFIG_HID_SAMSUNG is not set --# CONFIG_HID_SONY is not set --# CONFIG_HID_SUNPLUS is not set --# CONFIG_HID_GREENASIA is not set --# CONFIG_HID_SMARTJOYPLUS is not set --# CONFIG_HID_TOPSEED is not set --# CONFIG_HID_THRUSTMASTER is not set --# CONFIG_HID_ZEROPLUS is not set -+CONFIG_HID_A4TECH=m -+CONFIG_HID_APPLE=m -+CONFIG_HID_BELKIN=m -+CONFIG_HID_CHERRY=m -+CONFIG_HID_CHICONY=m -+CONFIG_HID_CYPRESS=m -+CONFIG_HID_DRAGONRISE=m -+CONFIG_DRAGONRISE_FF=y -+CONFIG_HID_EZKEY=m -+CONFIG_HID_KYE=m -+CONFIG_HID_GYRATION=m -+CONFIG_HID_TWINHAN=m -+CONFIG_HID_KENSINGTON=m -+CONFIG_HID_LOGITECH=m -+CONFIG_LOGITECH_FF=y -+CONFIG_LOGIRUMBLEPAD2_FF=y -+CONFIG_HID_MICROSOFT=m -+CONFIG_HID_MONTEREY=m -+CONFIG_HID_NTRIG=m -+CONFIG_HID_PANTHERLORD=m -+CONFIG_PANTHERLORD_FF=y -+CONFIG_HID_PETALYNX=m -+CONFIG_HID_SAMSUNG=m -+CONFIG_HID_SONY=m -+CONFIG_HID_SUNPLUS=m -+CONFIG_HID_GREENASIA=m -+CONFIG_GREENASIA_FF=y -+CONFIG_HID_SMARTJOYPLUS=m -+CONFIG_SMARTJOYPLUS_FF=y -+CONFIG_HID_TOPSEED=m -+CONFIG_HID_THRUSTMASTER=m -+CONFIG_THRUSTMASTER_FF=y -+CONFIG_HID_WACOM=m -+CONFIG_HID_ZEROPLUS=m -+CONFIG_ZEROPLUS_FF=y - CONFIG_USB_SUPPORT=y - CONFIG_USB_ARCH_HAS_HCD=y - CONFIG_USB_ARCH_HAS_OHCI=y -@@ -1336,15 +1513,15 @@ ++# CONFIG_HID_3M_PCT is not set + CONFIG_HID_A4TECH=m + CONFIG_HID_APPLE=m + CONFIG_HID_BELKIN=m +@@ -1497,14 +1489,20 @@ + CONFIG_HID_LOGITECH=m + CONFIG_LOGITECH_FF=y + CONFIG_LOGIRUMBLEPAD2_FF=y ++# CONFIG_LOGIG940_FF is not set ++# CONFIG_HID_MAGICMOUSE is not set + CONFIG_HID_MICROSOFT=m ++# CONFIG_HID_MOSART is not set + CONFIG_HID_MONTEREY=m + CONFIG_HID_NTRIG=m ++# CONFIG_HID_ORTEK is not set + CONFIG_HID_PANTHERLORD=m + CONFIG_PANTHERLORD_FF=y + CONFIG_HID_PETALYNX=m ++# CONFIG_HID_QUANTA is not set + CONFIG_HID_SAMSUNG=m + CONFIG_HID_SONY=m ++# CONFIG_HID_STANTUM is not set + CONFIG_HID_SUNPLUS=m + CONFIG_HID_GREENASIA=m + CONFIG_GREENASIA_FF=y +@@ -1527,14 +1525,14 @@ # # Miscellaneous USB options # @@ -1473,146 +991,77 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi CONFIG_USB_OTG_WHITELIST=y # CONFIG_USB_OTG_BLACKLIST_HUB is not set -CONFIG_USB_MON=y --# CONFIG_USB_WUSB is not set +CONFIG_USB_MON=m -+CONFIG_USB_WUSB=m + CONFIG_USB_WUSB=m # CONFIG_USB_WUSB_CBAF is not set - # -@@ -1366,14 +1543,15 @@ - CONFIG_USB_UHCI_HCD=m - # CONFIG_USB_SL811_HCD is not set - # CONFIG_USB_R8A66597_HCD is not set --# CONFIG_USB_WHCI_HCD is not set --# CONFIG_USB_HWA_HCD is not set -+CONFIG_USB_WHCI_HCD=m -+CONFIG_USB_HWA_HCD=m -+# CONFIG_USB_GADGET_MUSB_HDRC is not set - - # - # USB Device Class drivers - # - CONFIG_USB_ACM=m --# CONFIG_USB_PRINTER is not set -+CONFIG_USB_PRINTER=m - CONFIG_USB_WDM=m - # CONFIG_USB_TMC is not set - -@@ -1397,7 +1575,7 @@ - # CONFIG_USB_STORAGE_ONETOUCH is not set - # CONFIG_USB_STORAGE_KARMA is not set - # CONFIG_USB_STORAGE_CYPRESS_ATACB is not set --# CONFIG_USB_LIBUSUAL is not set -+CONFIG_USB_LIBUSUAL=y +@@ -1633,6 +1631,7 @@ + # CONFIG_USB_SERIAL_NAVMAN is not set + # CONFIG_USB_SERIAL_PL2303 is not set + # CONFIG_USB_SERIAL_OTI6858 is not set ++# CONFIG_USB_SERIAL_QCAUX is not set + # CONFIG_USB_SERIAL_QUALCOMM is not set + # CONFIG_USB_SERIAL_SPCP8X5 is not set + # CONFIG_USB_SERIAL_HP4X is not set +@@ -1646,6 +1645,7 @@ + # CONFIG_USB_SERIAL_OPTION is not set + # CONFIG_USB_SERIAL_OMNINET is not set + # CONFIG_USB_SERIAL_OPTICON is not set ++# CONFIG_USB_SERIAL_VIVOPAY_SERIAL is not set + # CONFIG_USB_SERIAL_DEBUG is not set # - # USB Imaging devices -@@ -1467,7 +1645,7 @@ +@@ -1658,7 +1658,6 @@ + # CONFIG_USB_RIO500 is not set # CONFIG_USB_LEGOTOWER is not set # CONFIG_USB_LCD is not set - # CONFIG_USB_BERRY_CHARGE is not set --# CONFIG_USB_LED is not set -+CONFIG_USB_LED=m +-# CONFIG_USB_BERRY_CHARGE is not set + CONFIG_USB_LED=m # CONFIG_USB_CYPRESS_CY7C63 is not set # CONFIG_USB_CYTHERM is not set - # CONFIG_USB_IDMOUSE is not set -@@ -1480,19 +1658,136 @@ +@@ -1671,10 +1670,8 @@ + # CONFIG_USB_IOWARRIOR is not set # CONFIG_USB_TEST is not set # CONFIG_USB_ISIGHTFW is not set - # CONFIG_USB_VST is not set --# CONFIG_USB_GADGET is not set -+CONFIG_USB_GADGET=m -+# CONFIG_USB_GADGET_DEBUG_FILES is not set -+# CONFIG_USB_GADGET_DEBUG_FS is not set -+CONFIG_USB_GADGET_VBUS_DRAW=2 -+CONFIG_USB_GADGET_SELECTED=y -+# CONFIG_USB_GADGET_AT91 is not set -+# CONFIG_USB_GADGET_ATMEL_USBA is not set -+# CONFIG_USB_GADGET_FSL_USB2 is not set -+# CONFIG_USB_GADGET_LH7A40X is not set -+# CONFIG_USB_GADGET_OMAP is not set -+# CONFIG_USB_GADGET_PXA25X is not set -+# CONFIG_USB_GADGET_R8A66597 is not set -+# CONFIG_USB_GADGET_PXA27X is not set -+# CONFIG_USB_GADGET_S3C_HSOTG is not set -+# CONFIG_USB_GADGET_IMX is not set -+# CONFIG_USB_GADGET_S3C2410 is not set -+CONFIG_USB_GADGET_M66592=y -+CONFIG_USB_M66592=m -+# CONFIG_USB_GADGET_AMD5536UDC is not set -+# CONFIG_USB_GADGET_FSL_QE is not set -+# CONFIG_USB_GADGET_CI13XXX is not set -+# CONFIG_USB_GADGET_NET2280 is not set -+# CONFIG_USB_GADGET_GOKU is not set -+# CONFIG_USB_GADGET_LANGWELL is not set -+# CONFIG_USB_GADGET_DUMMY_HCD is not set -+CONFIG_USB_GADGET_DUALSPEED=y -+# CONFIG_USB_ZERO is not set -+# CONFIG_USB_AUDIO is not set -+# CONFIG_USB_ETH is not set -+# CONFIG_USB_GADGETFS is not set -+# CONFIG_USB_FILE_STORAGE is not set -+# CONFIG_USB_MASS_STORAGE is not set -+# CONFIG_USB_G_SERIAL is not set -+# CONFIG_USB_MIDI_GADGET is not set -+# CONFIG_USB_G_PRINTER is not set -+# CONFIG_USB_CDC_COMPOSITE is not set -+# CONFIG_USB_G_MULTI is not set +-# CONFIG_USB_VST is not set + CONFIG_USB_GADGET=m + # CONFIG_USB_GADGET_DEBUG_FILES is not set +-# CONFIG_USB_GADGET_DEBUG_FS is not set + CONFIG_USB_GADGET_VBUS_DRAW=2 + CONFIG_USB_GADGET_SELECTED=y + # CONFIG_USB_GADGET_AT91 is not set +@@ -1708,6 +1705,7 @@ + # CONFIG_USB_MIDI_GADGET is not set + # CONFIG_USB_G_PRINTER is not set + # CONFIG_USB_CDC_COMPOSITE is not set ++# CONFIG_USB_G_NOKIA is not set + # CONFIG_USB_G_MULTI is not set # - # OTG and related infrastructure +@@ -1735,8 +1733,6 @@ + # MMC/SD/SDIO Host Controller Drivers + # + # CONFIG_MMC_SDHCI is not set +-# CONFIG_MMC_AT91 is not set +-# CONFIG_MMC_ATMELMCI is not set + # CONFIG_MMC_TIFM_SD is not set + # CONFIG_MMC_CB710 is not set + # CONFIG_MMC_VIA_SDMMC is not set +@@ -1747,11 +1743,11 @@ + # + # LED drivers # - # CONFIG_NOP_USB_XCEIV is not set --# CONFIG_UWB is not set --# CONFIG_MMC is not set -+CONFIG_UWB=m -+CONFIG_UWB_HWA=m -+CONFIG_UWB_WHCI=m -+# CONFIG_UWB_WLP is not set -+# CONFIG_UWB_I1480U is not set -+CONFIG_MMC=m -+# CONFIG_MMC_DEBUG is not set -+# CONFIG_MMC_UNSAFE_RESUME is not set -+ -+# -+# MMC/SD/SDIO Card Drivers -+# -+CONFIG_MMC_BLOCK=m -+CONFIG_MMC_BLOCK_BOUNCE=y -+# CONFIG_SDIO_UART is not set -+# CONFIG_MMC_TEST is not set -+ -+# -+# MMC/SD/SDIO Host Controller Drivers -+# -+# CONFIG_MMC_SDHCI is not set -+# CONFIG_MMC_AT91 is not set -+# CONFIG_MMC_ATMELMCI is not set -+# CONFIG_MMC_TIFM_SD is not set -+# CONFIG_MMC_CB710 is not set -+# CONFIG_MMC_VIA_SDMMC is not set - # CONFIG_MEMSTICK is not set --# CONFIG_NEW_LEDS is not set -+CONFIG_NEW_LEDS=y -+CONFIG_LEDS_CLASS=m -+ -+# -+# LED drivers -+# -+ -+# -+# LED Triggers -+# +CONFIG_LEDS_TRIGGERS=y -+# CONFIG_LEDS_TRIGGER_TIMER is not set -+# CONFIG_LEDS_TRIGGER_IDE_DISK is not set -+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set -+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set -+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set -+ -+# -+# iptables trigger is under Netfilter config (LED target) -+# + + # + # LED Triggers + # +-CONFIG_LEDS_TRIGGERS=y + # CONFIG_LEDS_TRIGGER_TIMER is not set + # CONFIG_LEDS_TRIGGER_IDE_DISK is not set + # CONFIG_LEDS_TRIGGER_HEARTBEAT is not set +@@ -1763,7 +1759,45 @@ + # # CONFIG_ACCESSIBILITY is not set # CONFIG_INFINIBAND is not set -# CONFIG_RTC_CLASS is not set @@ -1658,305 +1107,83 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_DMADEVICES is not set # CONFIG_AUXDISPLAY is not set # CONFIG_UIO is not set -@@ -1504,22 +1799,21 @@ - # CONFIG_STAGING_EXCLUDE_BUILD is not set +@@ -1776,14 +1810,15 @@ # CONFIG_ET131X is not set # CONFIG_USB_IP_COMMON is not set -+# CONFIG_W35UND is not set - # CONFIG_PRISM2_USB is not set + # CONFIG_W35UND is not set ++# CONFIG_PRISM2_USB is not set # CONFIG_ECHO is not set -+# CONFIG_OTUS is not set + # CONFIG_OTUS is not set # CONFIG_COMEDI is not set # CONFIG_ASUS_OLED is not set - # CONFIG_ALTERA_PCIE_CHDMA is not set --# CONFIG_RTL8187SE is not set -+# CONFIG_R8187SE is not set - # CONFIG_RTL8192SU is not set +-# CONFIG_ALTERA_PCIE_CHDMA is not set + # CONFIG_R8187SE is not set ++# CONFIG_RTL8192SU is not set +# CONFIG_RTL8192U is not set # CONFIG_RTL8192E is not set - # CONFIG_INPUT_MIMIO is not set +-# CONFIG_INPUT_MIMIO is not set # CONFIG_TRANZPORT is not set # --# Android --# -- --# - # Qualcomm MSM Camera And Video - # - -@@ -1527,7 +1821,6 @@ - # Camera Sensor Selection +@@ -1795,8 +1830,6 @@ # # CONFIG_INPUT_GPIO is not set --# CONFIG_DST is not set # CONFIG_POHMELFS is not set - # CONFIG_B3DFG is not set - # CONFIG_PLAN9AUTH is not set -@@ -1544,28 +1837,57 @@ - # - # CONFIG_RAR_REGISTER is not set - # CONFIG_IIO is not set -+# CONFIG_RAMZSWAP is not set -+# CONFIG_BATMAN_ADV is not set -+# CONFIG_STRIP is not set -+# CONFIG_WAVELAN is not set +-# CONFIG_B3DFG is not set +-# CONFIG_PLAN9AUTH is not set + # CONFIG_LINE6_USB is not set + # CONFIG_USB_SERIAL_QUATECH2 is not set + # CONFIG_USB_SERIAL_QUATECH_USB2 is not set +@@ -1815,7 +1848,11 @@ + # CONFIG_STRIP is not set + # CONFIG_WAVELAN is not set CONFIG_FB_SM7XX=y --CONFIG_FB_SM7XX_ACCEL=y +-# CONFIG_FB_SM7XX_ACCEL is not set ++# CONFIG_DT3155 is not set ++# CONFIG_CRYSTALHD is not set +CONFIG_MIPS_PLATFORM_DEVICES=y +CONFIG_LEMOTE_YEELOONG2F=m +CONFIG_LEMOTE_LYNLOONG2F=m # # File systems - # --# CONFIG_EXT2_FS is not set -+CONFIG_EXT2_FS=m -+# CONFIG_EXT2_FS_XATTR is not set -+# CONFIG_EXT2_FS_XIP is not set - CONFIG_EXT3_FS=y - # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set - CONFIG_EXT3_FS_XATTR=y - CONFIG_EXT3_FS_POSIX_ACL=y - CONFIG_EXT3_FS_SECURITY=y --# CONFIG_EXT4_FS is not set -+CONFIG_EXT4_FS=y -+CONFIG_EXT4_FS_XATTR=y -+# CONFIG_EXT4_FS_POSIX_ACL is not set -+# CONFIG_EXT4_FS_SECURITY is not set -+# CONFIG_EXT4_DEBUG is not set +@@ -1834,9 +1871,7 @@ + # CONFIG_EXT4_FS_SECURITY is not set + # CONFIG_EXT4_DEBUG is not set CONFIG_JBD=y -+# CONFIG_JBD_DEBUG is not set -+CONFIG_JBD2=y -+# CONFIG_JBD2_DEBUG is not set +-# CONFIG_JBD_DEBUG is not set + CONFIG_JBD2=y +-# CONFIG_JBD2_DEBUG is not set CONFIG_FS_MBCACHE=y --# CONFIG_REISERFS_FS is not set --# CONFIG_JFS_FS is not set -+CONFIG_REISERFS_FS=m -+# CONFIG_REISERFS_CHECK is not set -+CONFIG_REISERFS_PROC_INFO=y -+CONFIG_REISERFS_FS_XATTR=y -+# CONFIG_REISERFS_FS_POSIX_ACL is not set -+# CONFIG_REISERFS_FS_SECURITY is not set -+CONFIG_JFS_FS=m -+CONFIG_JFS_POSIX_ACL=y -+# CONFIG_JFS_SECURITY is not set -+# CONFIG_JFS_DEBUG is not set -+# CONFIG_JFS_STATISTICS is not set - CONFIG_FS_POSIX_ACL=y --# CONFIG_XFS_FS is not set -+CONFIG_XFS_FS=m -+CONFIG_XFS_QUOTA=y -+CONFIG_XFS_POSIX_ACL=y -+# CONFIG_XFS_RT is not set -+# CONFIG_XFS_DEBUG is not set - # CONFIG_GFS2_FS is not set - # CONFIG_OCFS2_FS is not set --# CONFIG_BTRFS_FS is not set -+CONFIG_BTRFS_FS=m -+# CONFIG_BTRFS_FS_POSIX_ACL is not set - # CONFIG_NILFS2_FS is not set - CONFIG_FILE_LOCKING=y - CONFIG_FSNOTIFY=y -@@ -1575,17 +1897,26 @@ - CONFIG_QUOTA=y - # CONFIG_QUOTA_NETLINK_INTERFACE is not set - CONFIG_PRINT_QUOTA_WARNING=y -+CONFIG_QUOTA_TREE=m - # CONFIG_QFMT_V1 is not set --# CONFIG_QFMT_V2 is not set -+CONFIG_QFMT_V2=m + CONFIG_REISERFS_FS=m + # CONFIG_REISERFS_CHECK is not set +@@ -1874,7 +1909,8 @@ CONFIG_QUOTACTL=y --# CONFIG_AUTOFS_FS is not set --# CONFIG_AUTOFS4_FS is not set + CONFIG_AUTOFS_FS=m + CONFIG_AUTOFS4_FS=m -# CONFIG_FUSE_FS is not set -+CONFIG_AUTOFS_FS=m -+CONFIG_AUTOFS4_FS=m +CONFIG_FUSE_FS=m +CONFIG_CUSE=m # # Caches - # --# CONFIG_FSCACHE is not set -+CONFIG_FSCACHE=m -+# CONFIG_FSCACHE_STATS is not set -+# CONFIG_FSCACHE_HISTOGRAM is not set -+# CONFIG_FSCACHE_DEBUG is not set -+# CONFIG_FSCACHE_OBJECT_LIST is not set -+CONFIG_CACHEFILES=m -+# CONFIG_CACHEFILES_DEBUG is not set -+# CONFIG_CACHEFILES_HISTOGRAM is not set - - # - # CD-ROM/DVD Filesystems -@@ -1599,11 +1930,13 @@ - # DOS/FAT/NT Filesystems - # - CONFIG_FAT_FS=m --# CONFIG_MSDOS_FS is not set -+CONFIG_MSDOS_FS=m - CONFIG_VFAT_FS=m - CONFIG_FAT_DEFAULT_CODEPAGE=437 - CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" --# CONFIG_NTFS_FS is not set -+CONFIG_NTFS_FS=m -+# CONFIG_NTFS_DEBUG is not set -+CONFIG_NTFS_RW=y - - # - # Pseudo filesystems -@@ -1616,23 +1949,60 @@ - CONFIG_TMPFS=y - # CONFIG_TMPFS_POSIX_ACL is not set - # CONFIG_HUGETLB_PAGE is not set --# CONFIG_CONFIGFS_FS is not set --# CONFIG_MISC_FILESYSTEMS is not set -+CONFIG_CONFIGFS_FS=m -+CONFIG_MISC_FILESYSTEMS=y -+# CONFIG_ADFS_FS is not set -+# CONFIG_AFFS_FS is not set -+# CONFIG_ECRYPT_FS is not set -+# CONFIG_HFS_FS is not set -+# CONFIG_HFSPLUS_FS is not set -+# CONFIG_BEFS_FS is not set -+# CONFIG_BFS_FS is not set -+# CONFIG_EFS_FS is not set -+CONFIG_CRAMFS=m -+CONFIG_SQUASHFS=m -+CONFIG_SQUASHFS_EMBEDDED=y -+CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 -+# CONFIG_VXFS_FS is not set -+# CONFIG_MINIX_FS is not set -+# CONFIG_OMFS_FS is not set -+# CONFIG_HPFS_FS is not set -+# CONFIG_QNX4FS_FS is not set -+CONFIG_ROMFS_FS=m -+CONFIG_ROMFS_BACKED_BY_BLOCK=y -+# CONFIG_ROMFS_BACKED_BY_MTD is not set -+# CONFIG_ROMFS_BACKED_BY_BOTH is not set -+CONFIG_ROMFS_ON_BLOCK=y -+# CONFIG_SYSV_FS is not set -+# CONFIG_UFS_FS is not set - CONFIG_NETWORK_FILESYSTEMS=y - CONFIG_NFS_FS=m - CONFIG_NFS_V3=y - CONFIG_NFS_V3_ACL=y - # CONFIG_NFS_V4 is not set --# CONFIG_NFSD is not set -+# CONFIG_NFS_FSCACHE is not set -+CONFIG_NFSD=m -+CONFIG_NFSD_V3=y -+# CONFIG_NFSD_V3_ACL is not set -+CONFIG_NFSD_V4=y - CONFIG_LOCKD=m - CONFIG_LOCKD_V4=y -+CONFIG_EXPORTFS=m - CONFIG_NFS_ACL_SUPPORT=m - CONFIG_NFS_COMMON=y - CONFIG_SUNRPC=m --# CONFIG_RPCSEC_GSS_KRB5 is not set -+CONFIG_SUNRPC_GSS=m -+CONFIG_RPCSEC_GSS_KRB5=m +@@ -1929,6 +1965,7 @@ + # CONFIG_BEFS_FS is not set + # CONFIG_BFS_FS is not set + # CONFIG_EFS_FS is not set ++# CONFIG_LOGFS is not set + CONFIG_CRAMFS=m + CONFIG_SQUASHFS=m + CONFIG_SQUASHFS_EMBEDDED=y +@@ -1965,6 +2002,7 @@ + CONFIG_RPCSEC_GSS_KRB5=m # CONFIG_RPCSEC_GSS_SPKM3 is not set # CONFIG_SMB_FS is not set --# CONFIG_CIFS is not set -+CONFIG_CIFS=m -+# CONFIG_CIFS_STATS is not set -+# CONFIG_CIFS_WEAK_PW_HASH is not set -+# CONFIG_CIFS_UPCALL is not set -+# CONFIG_CIFS_XATTR is not set -+# CONFIG_CIFS_DEBUG2 is not set -+# CONFIG_CIFS_DFS_UPCALL is not set -+# CONFIG_CIFS_EXPERIMENTAL is not set - # CONFIG_NCP_FS is not set - # CONFIG_CODA_FS is not set - # CONFIG_AFS_FS is not set -@@ -1643,177 +2013,205 @@ - # CONFIG_PARTITION_ADVANCED is not set - CONFIG_MSDOS_PARTITION=y - CONFIG_NLS=y --CONFIG_NLS_DEFAULT="utf-8" --# CONFIG_NLS_CODEPAGE_437 is not set --# CONFIG_NLS_CODEPAGE_737 is not set --# CONFIG_NLS_CODEPAGE_775 is not set --# CONFIG_NLS_CODEPAGE_850 is not set --# CONFIG_NLS_CODEPAGE_852 is not set --# CONFIG_NLS_CODEPAGE_855 is not set --# CONFIG_NLS_CODEPAGE_857 is not set --# CONFIG_NLS_CODEPAGE_860 is not set --# CONFIG_NLS_CODEPAGE_861 is not set --# CONFIG_NLS_CODEPAGE_862 is not set --# CONFIG_NLS_CODEPAGE_863 is not set --# CONFIG_NLS_CODEPAGE_864 is not set --# CONFIG_NLS_CODEPAGE_865 is not set --# CONFIG_NLS_CODEPAGE_866 is not set --# CONFIG_NLS_CODEPAGE_869 is not set --# CONFIG_NLS_CODEPAGE_936 is not set --# CONFIG_NLS_CODEPAGE_950 is not set --# CONFIG_NLS_CODEPAGE_932 is not set --# CONFIG_NLS_CODEPAGE_949 is not set --# CONFIG_NLS_CODEPAGE_874 is not set --# CONFIG_NLS_ISO8859_8 is not set --# CONFIG_NLS_CODEPAGE_1250 is not set --# CONFIG_NLS_CODEPAGE_1251 is not set --# CONFIG_NLS_ASCII is not set --# CONFIG_NLS_ISO8859_1 is not set --# CONFIG_NLS_ISO8859_2 is not set --# CONFIG_NLS_ISO8859_3 is not set --# CONFIG_NLS_ISO8859_4 is not set --# CONFIG_NLS_ISO8859_5 is not set --# CONFIG_NLS_ISO8859_6 is not set --# CONFIG_NLS_ISO8859_7 is not set --# CONFIG_NLS_ISO8859_9 is not set --# CONFIG_NLS_ISO8859_13 is not set --# CONFIG_NLS_ISO8859_14 is not set --# CONFIG_NLS_ISO8859_15 is not set --# CONFIG_NLS_KOI8_R is not set --# CONFIG_NLS_KOI8_U is not set --# CONFIG_NLS_UTF8 is not set -+CONFIG_NLS_DEFAULT="utf8" -+CONFIG_NLS_CODEPAGE_437=m -+CONFIG_NLS_CODEPAGE_737=m -+CONFIG_NLS_CODEPAGE_775=m -+CONFIG_NLS_CODEPAGE_850=m -+CONFIG_NLS_CODEPAGE_852=m -+CONFIG_NLS_CODEPAGE_855=m -+CONFIG_NLS_CODEPAGE_857=m -+CONFIG_NLS_CODEPAGE_860=m -+CONFIG_NLS_CODEPAGE_861=m -+CONFIG_NLS_CODEPAGE_862=m -+CONFIG_NLS_CODEPAGE_863=m -+CONFIG_NLS_CODEPAGE_864=m -+CONFIG_NLS_CODEPAGE_865=m -+CONFIG_NLS_CODEPAGE_866=m -+CONFIG_NLS_CODEPAGE_869=m -+CONFIG_NLS_CODEPAGE_936=m -+CONFIG_NLS_CODEPAGE_950=m -+CONFIG_NLS_CODEPAGE_932=m -+CONFIG_NLS_CODEPAGE_949=m -+CONFIG_NLS_CODEPAGE_874=m -+CONFIG_NLS_ISO8859_8=m -+CONFIG_NLS_CODEPAGE_1250=m -+CONFIG_NLS_CODEPAGE_1251=m -+CONFIG_NLS_ASCII=m -+CONFIG_NLS_ISO8859_1=m -+CONFIG_NLS_ISO8859_2=m -+CONFIG_NLS_ISO8859_3=m -+CONFIG_NLS_ISO8859_4=m -+CONFIG_NLS_ISO8859_5=m -+CONFIG_NLS_ISO8859_6=m -+CONFIG_NLS_ISO8859_7=m -+CONFIG_NLS_ISO8859_9=m -+CONFIG_NLS_ISO8859_13=m -+CONFIG_NLS_ISO8859_14=m -+CONFIG_NLS_ISO8859_15=m -+CONFIG_NLS_KOI8_R=m -+CONFIG_NLS_KOI8_U=m -+CONFIG_NLS_UTF8=y - # CONFIG_DLM is not set - - # ++# CONFIG_CEPH_FS is not set + CONFIG_CIFS=m + # CONFIG_CIFS_STATS is not set + # CONFIG_CIFS_WEAK_PW_HASH is not set +@@ -2028,39 +2066,31 @@ # Kernel hacking # CONFIG_TRACE_IRQFLAGS_SUPPORT=y @@ -1968,266 +1195,1521 @@ diff -Nur linux-2.6.33/arch/mips/configs/lemote2f_defconfig linux-lemote/arch/mi # CONFIG_MAGIC_SYSRQ is not set CONFIG_STRIP_ASM_SYMS=y # CONFIG_UNUSED_SYMBOLS is not set --# CONFIG_DEBUG_FS is not set -+CONFIG_DEBUG_FS=y +-CONFIG_DEBUG_FS=y ++# CONFIG_DEBUG_FS is not set # CONFIG_HEADERS_CHECK is not set # CONFIG_DEBUG_KERNEL is not set -# CONFIG_SLUB_DEBUG_ON is not set -# CONFIG_SLUB_STATS is not set -+CONFIG_STACKTRACE=y +-CONFIG_STACKTRACE=y # CONFIG_DEBUG_MEMORY_INIT is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set --CONFIG_SYSCTL_SYSCALL_CHECK=y -+# CONFIG_SYSCTL_SYSCALL_CHECK is not set -+CONFIG_NOP_TRACER=y -+CONFIG_HAVE_FUNCTION_TRACER=y -+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y -+CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y -+CONFIG_HAVE_DYNAMIC_FTRACE=y -+CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y -+CONFIG_RING_BUFFER=y -+CONFIG_EVENT_TRACING=y -+CONFIG_CONTEXT_SWITCH_TRACER=y -+CONFIG_RING_BUFFER_ALLOW_SWAP=y -+CONFIG_TRACING=y + CONFIG_SYSCTL_SYSCALL_CHECK=y +-CONFIG_NOP_TRACER=y + CONFIG_HAVE_FUNCTION_TRACER=y + CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y + CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y + CONFIG_HAVE_DYNAMIC_FTRACE=y + CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y + CONFIG_RING_BUFFER=y +-CONFIG_EVENT_TRACING=y +-CONFIG_CONTEXT_SWITCH_TRACER=y + CONFIG_RING_BUFFER_ALLOW_SWAP=y +-CONFIG_TRACING=y CONFIG_TRACING_SUPPORT=y # CONFIG_FTRACE is not set -+# CONFIG_DYNAMIC_DEBUG is not set +-# CONFIG_DYNAMIC_DEBUG is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y -+CONFIG_EARLY_PRINTK=y +-CONFIG_EARLY_PRINTK=y ++# CONFIG_EARLY_PRINTK is not set # CONFIG_CMDLINE_BOOL is not set # - # Security options +@@ -2183,7 +2213,7 @@ + CONFIG_CRYPTO_ANSI_CPRNG=m + CONFIG_CRYPTO_HW=y + # CONFIG_CRYPTO_DEV_HIFN_795X is not set +-CONFIG_BINARY_PRINTF=y ++# CONFIG_BINARY_PRINTF is not set + # --# CONFIG_KEYS is not set -+CONFIG_KEYS=y -+CONFIG_KEYS_DEBUG_PROC_KEYS=y - # CONFIG_SECURITY is not set - # CONFIG_SECURITYFS is not set --# CONFIG_SECURITY_FILE_CAPABILITIES is not set + # Library routines +diff -Nur linux-2.6.34.orig/arch/mips/configs/lemote2f_minimal_defconfig linux-loongson/arch/mips/configs/lemote2f_minimal_defconfig +--- linux-2.6.34.orig/arch/mips/configs/lemote2f_minimal_defconfig 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/arch/mips/configs/lemote2f_minimal_defconfig 2010-05-27 18:12:28.612213391 +0200 +@@ -0,0 +1,1383 @@ ++# ++# Automatically generated make config: don't edit ++# Linux kernel version: 2.6.34-rc5 ++# Wed Apr 28 01:06:41 2010 ++# ++CONFIG_MIPS=y ++ ++# ++# Machine selection ++# ++# CONFIG_MACH_ALCHEMY is not set ++# CONFIG_AR7 is not set ++# CONFIG_BCM47XX is not set ++# CONFIG_BCM63XX is not set ++# CONFIG_MIPS_COBALT is not set ++# CONFIG_MACH_DECSTATION is not set ++# CONFIG_MACH_JAZZ is not set ++# CONFIG_LASAT is not set ++CONFIG_MACH_LOONGSON=y ++# CONFIG_MIPS_MALTA is not set ++# CONFIG_MIPS_SIM is not set ++# CONFIG_NEC_MARKEINS is not set ++# CONFIG_MACH_VR41XX is not set ++# CONFIG_NXP_STB220 is not set ++# CONFIG_NXP_STB225 is not set ++# CONFIG_PNX8550_JBS is not set ++# CONFIG_PNX8550_STB810 is not set ++# CONFIG_PMC_MSP is not set ++# CONFIG_PMC_YOSEMITE is not set ++# CONFIG_POWERTV is not set ++# CONFIG_SGI_IP22 is not set ++# CONFIG_SGI_IP27 is not set ++# CONFIG_SGI_IP28 is not set ++# CONFIG_SGI_IP32 is not set ++# CONFIG_SIBYTE_CRHINE is not set ++# CONFIG_SIBYTE_CARMEL is not set ++# CONFIG_SIBYTE_CRHONE is not set ++# CONFIG_SIBYTE_RHONE is not set ++# CONFIG_SIBYTE_SWARM is not set ++# CONFIG_SIBYTE_LITTLESUR is not set ++# CONFIG_SIBYTE_SENTOSA is not set ++# CONFIG_SIBYTE_BIGSUR is not set ++# CONFIG_SNI_RM is not set ++# CONFIG_MACH_TX39XX is not set ++# CONFIG_MACH_TX49XX is not set ++# CONFIG_MIKROTIK_RB532 is not set ++# CONFIG_WR_PPMC is not set ++# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set ++# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set ++# CONFIG_ALCHEMY_GPIO_INDIRECT is not set ++CONFIG_ARCH_SPARSEMEM_ENABLE=y ++# CONFIG_LEMOTE_FULOONG2E is not set ++CONFIG_LEMOTE_MACH2F=y ++CONFIG_CS5536=y ++# CONFIG_CS5536_MFGPT is not set ++CONFIG_LOONGSON_UART_BASE=y ++CONFIG_RWSEM_GENERIC_SPINLOCK=y ++# CONFIG_ARCH_HAS_ILOG2_U32 is not set ++# CONFIG_ARCH_HAS_ILOG2_U64 is not set ++CONFIG_ARCH_SUPPORTS_OPROFILE=y ++CONFIG_GENERIC_FIND_NEXT_BIT=y ++CONFIG_GENERIC_HWEIGHT=y ++CONFIG_GENERIC_CALIBRATE_DELAY=y ++CONFIG_GENERIC_CLOCKEVENTS=y ++CONFIG_GENERIC_TIME=y ++CONFIG_GENERIC_CMOS_UPDATE=y ++CONFIG_SCHED_OMIT_FRAME_POINTER=y ++CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y ++CONFIG_CEVT_R4K_LIB=y ++CONFIG_CEVT_R4K=y ++CONFIG_CSRC_R4K_LIB=y ++CONFIG_CSRC_R4K=y ++CONFIG_DMA_NONCOHERENT=y ++CONFIG_NEED_DMA_MAP_STATE=y ++CONFIG_SYS_HAS_EARLY_PRINTK=y ++CONFIG_I8259=y ++# CONFIG_NO_IOPORT is not set ++CONFIG_GENERIC_ISA_DMA=y ++CONFIG_GENERIC_ISA_DMA_SUPPORT_BROKEN=y ++# CONFIG_CPU_BIG_ENDIAN is not set ++CONFIG_CPU_LITTLE_ENDIAN=y ++CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y ++CONFIG_IRQ_CPU=y ++CONFIG_BOOT_ELF32=y ++CONFIG_MIPS_L1_CACHE_SHIFT=5 ++ ++# ++# CPU selection ++# ++# CONFIG_CPU_LOONGSON2E is not set ++CONFIG_CPU_LOONGSON2F=y ++# CONFIG_CPU_MIPS32_R1 is not set ++# CONFIG_CPU_MIPS32_R2 is not set ++# CONFIG_CPU_MIPS64_R1 is not set ++# CONFIG_CPU_MIPS64_R2 is not set ++# CONFIG_CPU_R3000 is not set ++# CONFIG_CPU_TX39XX is not set ++# CONFIG_CPU_VR41XX is not set ++# CONFIG_CPU_R4300 is not set ++# CONFIG_CPU_R4X00 is not set ++# CONFIG_CPU_TX49XX is not set ++# CONFIG_CPU_R5000 is not set ++# CONFIG_CPU_R5432 is not set ++# CONFIG_CPU_R5500 is not set ++# CONFIG_CPU_R6000 is not set ++# CONFIG_CPU_NEVADA is not set ++# CONFIG_CPU_R8000 is not set ++# CONFIG_CPU_R10000 is not set ++# CONFIG_CPU_RM7000 is not set ++# CONFIG_CPU_RM9000 is not set ++# CONFIG_CPU_SB1 is not set ++# CONFIG_CPU_CAVIUM_OCTEON is not set ++CONFIG_SYS_SUPPORTS_ZBOOT=y ++CONFIG_CPU_LOONGSON2=y ++CONFIG_SYS_HAS_CPU_LOONGSON2F=y ++CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y ++CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y ++CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y ++CONFIG_CPU_SUPPORTS_64BIT_KERNEL=y ++CONFIG_CPU_SUPPORTS_CPUFREQ=y ++CONFIG_CPU_SUPPORTS_ADDRWINCFG=y ++CONFIG_CPU_SUPPORTS_UNCACHED_ACCELERATED=y ++ ++# ++# Kernel type ++# ++# CONFIG_32BIT is not set ++CONFIG_64BIT=y ++# CONFIG_PAGE_SIZE_4KB is not set ++# CONFIG_PAGE_SIZE_8KB is not set ++CONFIG_PAGE_SIZE_16KB=y ++# CONFIG_PAGE_SIZE_32KB is not set ++# CONFIG_PAGE_SIZE_64KB is not set ++CONFIG_BOARD_SCACHE=y ++CONFIG_MIPS_MT_DISABLED=y ++# CONFIG_MIPS_MT_SMP is not set ++# CONFIG_MIPS_MT_SMTC is not set ++# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set ++CONFIG_CPU_HAS_WB=y ++CONFIG_CPU_HAS_SYNC=y ++CONFIG_GENERIC_HARDIRQS=y ++CONFIG_GENERIC_IRQ_PROBE=y ++CONFIG_CPU_SUPPORTS_HIGHMEM=y ++CONFIG_SYS_SUPPORTS_HIGHMEM=y ++CONFIG_ARCH_POPULATES_NODE_MAP=y ++CONFIG_SELECT_MEMORY_MODEL=y ++# CONFIG_FLATMEM_MANUAL is not set ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++CONFIG_SPARSEMEM_MANUAL=y ++CONFIG_SPARSEMEM=y ++CONFIG_HAVE_MEMORY_PRESENT=y ++CONFIG_SPARSEMEM_STATIC=y ++CONFIG_PAGEFLAGS_EXTENDED=y ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++CONFIG_PHYS_ADDR_T_64BIT=y ++CONFIG_ZONE_DMA_FLAG=0 ++CONFIG_VIRT_TO_BUS=y ++# CONFIG_KSM is not set ++CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 ++CONFIG_TICK_ONESHOT=y ++CONFIG_NO_HZ=y ++CONFIG_HIGH_RES_TIMERS=y ++CONFIG_GENERIC_CLOCKEVENTS_BUILD=y ++CONFIG_CPU_SUPPORTS_HR_SCHED_CLOCK=y ++# CONFIG_HZ_48 is not set ++# CONFIG_HZ_100 is not set ++# CONFIG_HZ_128 is not set ++CONFIG_HZ_250=y ++# CONFIG_HZ_256 is not set ++# CONFIG_HZ_1000 is not set ++# CONFIG_HZ_1024 is not set ++CONFIG_SYS_SUPPORTS_ARBIT_HZ=y ++CONFIG_HZ=250 ++# CONFIG_PREEMPT_NONE is not set ++# CONFIG_PREEMPT_VOLUNTARY is not set ++CONFIG_PREEMPT=y ++CONFIG_KEXEC=y ++# CONFIG_SECCOMP is not set ++CONFIG_LOCKDEP_SUPPORT=y ++CONFIG_STACKTRACE_SUPPORT=y ++CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" ++CONFIG_CONSTRUCTORS=y ++ ++# ++# General setup ++# ++CONFIG_EXPERIMENTAL=y ++CONFIG_BROKEN_ON_SMP=y ++CONFIG_LOCK_KERNEL=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 ++CONFIG_LOCALVERSION="" ++# CONFIG_LOCALVERSION_AUTO is not set ++CONFIG_HAVE_KERNEL_GZIP=y ++CONFIG_HAVE_KERNEL_BZIP2=y ++CONFIG_HAVE_KERNEL_LZMA=y ++CONFIG_HAVE_KERNEL_LZO=y ++CONFIG_KERNEL_GZIP=y ++# CONFIG_KERNEL_BZIP2 is not set ++# CONFIG_KERNEL_LZMA is not set ++# CONFIG_KERNEL_LZO is not set ++CONFIG_SWAP=y ++CONFIG_SYSVIPC=y ++CONFIG_SYSVIPC_SYSCTL=y ++# CONFIG_POSIX_MQUEUE is not set ++CONFIG_BSD_PROCESS_ACCT=y ++CONFIG_BSD_PROCESS_ACCT_V3=y ++# CONFIG_TASKSTATS is not set ++CONFIG_AUDIT=y ++ ++# ++# RCU Subsystem ++# ++CONFIG_TREE_RCU=y ++# CONFIG_TREE_PREEMPT_RCU is not set ++# CONFIG_TINY_RCU is not set ++# CONFIG_RCU_TRACE is not set ++CONFIG_RCU_FANOUT=64 ++# CONFIG_RCU_FANOUT_EXACT is not set ++# CONFIG_TREE_RCU_TRACE is not set ++CONFIG_IKCONFIG=y ++CONFIG_IKCONFIG_PROC=y ++CONFIG_LOG_BUF_SHIFT=15 ++# CONFIG_CGROUPS is not set ++CONFIG_SYSFS_DEPRECATED=y ++CONFIG_SYSFS_DEPRECATED_V2=y ++# CONFIG_RELAY is not set ++# CONFIG_NAMESPACES is not set ++CONFIG_BLK_DEV_INITRD=y ++CONFIG_INITRAMFS_SOURCE="" ++CONFIG_RD_GZIP=y ++CONFIG_RD_BZIP2=y ++CONFIG_RD_LZMA=y ++CONFIG_RD_LZO=y ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set ++CONFIG_SYSCTL=y ++CONFIG_ANON_INODES=y ++CONFIG_EMBEDDED=y ++CONFIG_SYSCTL_SYSCALL=y ++CONFIG_KALLSYMS=y ++# CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_HOTPLUG=y ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_ELF_CORE=y ++CONFIG_PCSPKR_PLATFORM=y ++CONFIG_BASE_FULL=y ++CONFIG_FUTEX=y ++CONFIG_EPOLL=y ++CONFIG_SIGNALFD=y ++CONFIG_TIMERFD=y ++CONFIG_EVENTFD=y ++CONFIG_SHMEM=y ++CONFIG_AIO=y ++ ++# ++# Kernel Performance Events And Counters ++# ++CONFIG_VM_EVENT_COUNTERS=y ++CONFIG_PCI_QUIRKS=y ++CONFIG_SLUB_DEBUG=y ++CONFIG_COMPAT_BRK=y ++# CONFIG_SLAB is not set ++CONFIG_SLUB=y ++# CONFIG_SLOB is not set ++CONFIG_PROFILING=y ++# CONFIG_OPROFILE is not set ++CONFIG_HAVE_OPROFILE=y ++CONFIG_HAVE_SYSCALL_WRAPPERS=y ++ ++# ++# GCOV-based kernel profiling ++# ++# CONFIG_SLOW_WORK is not set ++CONFIG_HAVE_GENERIC_DMA_COHERENT=y ++CONFIG_SLABINFO=y ++CONFIG_RT_MUTEXES=y ++CONFIG_BASE_SMALL=0 ++# CONFIG_MODULES is not set ++CONFIG_BLOCK=y ++# CONFIG_BLK_DEV_BSG is not set ++# CONFIG_BLK_DEV_INTEGRITY is not set ++CONFIG_BLOCK_COMPAT=y ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++# CONFIG_IOSCHED_DEADLINE is not set ++# CONFIG_IOSCHED_CFQ is not set ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++CONFIG_DEFAULT_NOOP=y ++CONFIG_DEFAULT_IOSCHED="noop" ++# CONFIG_INLINE_SPIN_TRYLOCK is not set ++# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set ++# CONFIG_INLINE_SPIN_LOCK is not set ++# CONFIG_INLINE_SPIN_LOCK_BH is not set ++# CONFIG_INLINE_SPIN_LOCK_IRQ is not set ++# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set ++# CONFIG_INLINE_SPIN_UNLOCK is not set ++# CONFIG_INLINE_SPIN_UNLOCK_BH is not set ++# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set ++# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set ++# CONFIG_INLINE_READ_TRYLOCK is not set ++# CONFIG_INLINE_READ_LOCK is not set ++# CONFIG_INLINE_READ_LOCK_BH is not set ++# CONFIG_INLINE_READ_LOCK_IRQ is not set ++# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set ++# CONFIG_INLINE_READ_UNLOCK is not set ++# CONFIG_INLINE_READ_UNLOCK_BH is not set ++# CONFIG_INLINE_READ_UNLOCK_IRQ is not set ++# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set ++# CONFIG_INLINE_WRITE_TRYLOCK is not set ++# CONFIG_INLINE_WRITE_LOCK is not set ++# CONFIG_INLINE_WRITE_LOCK_BH is not set ++# CONFIG_INLINE_WRITE_LOCK_IRQ is not set ++# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set ++# CONFIG_INLINE_WRITE_UNLOCK is not set ++# CONFIG_INLINE_WRITE_UNLOCK_BH is not set ++# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set ++# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set ++# CONFIG_MUTEX_SPIN_ON_OWNER is not set ++# CONFIG_FREEZER is not set ++ ++# ++# Bus options (PCI, PCMCIA, EISA, ISA, TC) ++# ++CONFIG_HW_HAS_PCI=y ++CONFIG_PCI=y ++CONFIG_PCI_DOMAINS=y ++# CONFIG_ARCH_SUPPORTS_MSI is not set ++# CONFIG_PCI_STUB is not set ++# CONFIG_PCI_IOV is not set ++CONFIG_ISA=y ++CONFIG_MMU=y ++# CONFIG_PCCARD is not set ++# CONFIG_HOTPLUG_PCI is not set ++ ++# ++# Executable file formats ++# ++CONFIG_BINFMT_ELF=y ++# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set ++# CONFIG_HAVE_AOUT is not set ++# CONFIG_BINFMT_MISC is not set ++CONFIG_MIPS32_COMPAT=y ++CONFIG_COMPAT=y ++CONFIG_SYSVIPC_COMPAT=y ++CONFIG_MIPS32_O32=y ++CONFIG_MIPS32_N32=y ++CONFIG_BINFMT_ELF32=y ++ ++# ++# Power management options ++# ++CONFIG_ARCH_HIBERNATION_POSSIBLE=y ++CONFIG_ARCH_SUSPEND_POSSIBLE=y ++# CONFIG_PM is not set ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++CONFIG_PACKET=y ++CONFIG_UNIX=y ++# CONFIG_NET_KEY is not set ++CONFIG_INET=y ++# CONFIG_IP_MULTICAST is not set ++# CONFIG_IP_ADVANCED_ROUTER is not set ++CONFIG_IP_FIB_HASH=y ++# CONFIG_IP_PNP is not set ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_XFRM_TUNNEL is not set ++# CONFIG_INET_TUNNEL is not set ++# CONFIG_INET_XFRM_MODE_TRANSPORT is not set ++# CONFIG_INET_XFRM_MODE_TUNNEL is not set ++# CONFIG_INET_XFRM_MODE_BEET is not set ++# CONFIG_INET_LRO is not set ++# CONFIG_INET_DIAG is not set ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_CUBIC=y ++CONFIG_DEFAULT_TCP_CONG="cubic" ++# CONFIG_TCP_MD5SIG is not set ++# CONFIG_IPV6 is not set ++# CONFIG_NETWORK_SECMARK is not set ++# CONFIG_NETFILTER is not set ++# CONFIG_IP_DCCP is not set ++# CONFIG_IP_SCTP is not set ++# CONFIG_RDS is not set ++# CONFIG_TIPC is not set ++# CONFIG_ATM is not set ++# CONFIG_BRIDGE is not set ++# CONFIG_NET_DSA is not set ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++# CONFIG_PHONET is not set ++# CONFIG_IEEE802154 is not set ++# CONFIG_NET_SCHED is not set ++# CONFIG_DCB is not set ++ ++# ++# Network testing ++# ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_CAN is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++# CONFIG_AF_RXRPC is not set ++# CONFIG_WIRELESS is not set ++# CONFIG_WIMAX is not set ++# CONFIG_RFKILL is not set ++# CONFIG_NET_9P is not set ++ ++# ++# Device Drivers ++# ++ ++# ++# Generic Driver Options ++# ++CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" ++# CONFIG_DEVTMPFS is not set ++CONFIG_STANDALONE=y ++CONFIG_PREVENT_FIRMWARE_BUILD=y ++CONFIG_FW_LOADER=y ++CONFIG_FIRMWARE_IN_KERNEL=y ++CONFIG_EXTRA_FIRMWARE="" ++# CONFIG_SYS_HYPERVISOR is not set ++# CONFIG_CONNECTOR is not set ++# CONFIG_MTD is not set ++# CONFIG_PARPORT is not set ++# CONFIG_PNP is not set ++CONFIG_BLK_DEV=y ++# CONFIG_BLK_CPQ_DA is not set ++# CONFIG_BLK_CPQ_CISS_DA is not set ++# CONFIG_BLK_DEV_DAC960 is not set ++# CONFIG_BLK_DEV_UMEM is not set ++# CONFIG_BLK_DEV_COW_COMMON is not set ++CONFIG_BLK_DEV_LOOP=y ++# CONFIG_BLK_DEV_CRYPTOLOOP is not set ++ ++# ++# DRBD disabled because PROC_FS, INET or CONNECTOR not selected ++# ++# CONFIG_BLK_DEV_NBD is not set ++# CONFIG_BLK_DEV_SX8 is not set ++# CONFIG_BLK_DEV_UB is not set ++CONFIG_BLK_DEV_RAM=y ++CONFIG_BLK_DEV_RAM_COUNT=16 ++CONFIG_BLK_DEV_RAM_SIZE=8192 ++# CONFIG_BLK_DEV_XIP is not set ++# CONFIG_CDROM_PKTCDVD is not set ++# CONFIG_ATA_OVER_ETH is not set ++# CONFIG_BLK_DEV_HD is not set ++# CONFIG_MISC_DEVICES is not set ++CONFIG_HAVE_IDE=y ++CONFIG_IDE=y ++ ++# ++# Please see Documentation/ide/ide.txt for help/info on IDE drives ++# ++CONFIG_IDE_XFER_MODE=y ++CONFIG_IDE_TIMINGS=y ++# CONFIG_BLK_DEV_IDE_SATA is not set ++CONFIG_IDE_GD=y ++CONFIG_IDE_GD_ATA=y ++# CONFIG_IDE_GD_ATAPI is not set ++# CONFIG_BLK_DEV_IDECD is not set ++# CONFIG_BLK_DEV_IDETAPE is not set ++# CONFIG_IDE_TASK_IOCTL is not set ++# CONFIG_IDE_PROC_FS is not set ++ ++# ++# IDE chipset support/bugfixes ++# ++# CONFIG_IDE_GENERIC is not set ++# CONFIG_BLK_DEV_PLATFORM is not set ++CONFIG_BLK_DEV_IDEDMA_SFF=y ++ ++# ++# PCI IDE chipsets support ++# ++CONFIG_BLK_DEV_IDEPCI=y ++# CONFIG_IDEPCI_PCIBUS_ORDER is not set ++# CONFIG_BLK_DEV_GENERIC is not set ++# CONFIG_BLK_DEV_OPTI621 is not set ++CONFIG_BLK_DEV_IDEDMA_PCI=y ++# CONFIG_BLK_DEV_AEC62XX is not set ++# CONFIG_BLK_DEV_ALI15X3 is not set ++CONFIG_BLK_DEV_AMD74XX=y ++# CONFIG_BLK_DEV_CMD64X is not set ++# CONFIG_BLK_DEV_TRIFLEX is not set ++# CONFIG_BLK_DEV_CS5520 is not set ++# CONFIG_BLK_DEV_CS5530 is not set ++# CONFIG_BLK_DEV_HPT366 is not set ++# CONFIG_BLK_DEV_JMICRON is not set ++# CONFIG_BLK_DEV_SC1200 is not set ++# CONFIG_BLK_DEV_PIIX is not set ++# CONFIG_BLK_DEV_IT8172 is not set ++# CONFIG_BLK_DEV_IT8213 is not set ++# CONFIG_BLK_DEV_IT821X is not set ++# CONFIG_BLK_DEV_NS87415 is not set ++# CONFIG_BLK_DEV_PDC202XX_OLD is not set ++# CONFIG_BLK_DEV_PDC202XX_NEW is not set ++# CONFIG_BLK_DEV_SVWKS is not set ++# CONFIG_BLK_DEV_SIIMAGE is not set ++# CONFIG_BLK_DEV_SLC90E66 is not set ++# CONFIG_BLK_DEV_TRM290 is not set ++# CONFIG_BLK_DEV_VIA82CXXX is not set ++# CONFIG_BLK_DEV_TC86C001 is not set ++ ++# ++# Other IDE chipsets support ++# ++ ++# ++# Note: most of these also require special kernel boot parameters ++# ++# CONFIG_BLK_DEV_4DRIVES is not set ++# CONFIG_BLK_DEV_ALI14XX is not set ++# CONFIG_BLK_DEV_DTC2278 is not set ++# CONFIG_BLK_DEV_HT6560B is not set ++# CONFIG_BLK_DEV_QD65XX is not set ++# CONFIG_BLK_DEV_UMC8672 is not set ++CONFIG_BLK_DEV_IDEDMA=y ++ ++# ++# SCSI device support ++# ++CONFIG_SCSI_MOD=y ++# CONFIG_RAID_ATTRS is not set ++CONFIG_SCSI=y ++CONFIG_SCSI_DMA=y ++# CONFIG_SCSI_TGT is not set ++# CONFIG_SCSI_NETLINK is not set ++# CONFIG_SCSI_PROC_FS is not set ++ ++# ++# SCSI support type (disk, tape, CD-ROM) ++# ++CONFIG_BLK_DEV_SD=y ++# CONFIG_CHR_DEV_ST is not set ++# CONFIG_CHR_DEV_OSST is not set ++# CONFIG_BLK_DEV_SR is not set ++# CONFIG_CHR_DEV_SG is not set ++# CONFIG_CHR_DEV_SCH is not set ++# CONFIG_SCSI_MULTI_LUN is not set ++# CONFIG_SCSI_CONSTANTS is not set ++# CONFIG_SCSI_LOGGING is not set ++# CONFIG_SCSI_SCAN_ASYNC is not set ++ ++# ++# SCSI Transports ++# ++# CONFIG_SCSI_SPI_ATTRS is not set ++# CONFIG_SCSI_FC_ATTRS is not set ++# CONFIG_SCSI_ISCSI_ATTRS is not set ++# CONFIG_SCSI_SAS_LIBSAS is not set ++# CONFIG_SCSI_SRP_ATTRS is not set ++# CONFIG_SCSI_LOWLEVEL is not set ++# CONFIG_SCSI_DH is not set ++# CONFIG_SCSI_OSD_INITIATOR is not set ++# CONFIG_ATA is not set ++# CONFIG_MD is not set ++# CONFIG_FUSION is not set ++ ++# ++# IEEE 1394 (FireWire) support ++# ++ ++# ++# You can enable one or both FireWire driver stacks. ++# ++ ++# ++# The newer stack is recommended. ++# ++# CONFIG_FIREWIRE is not set ++# CONFIG_IEEE1394 is not set ++# CONFIG_I2O is not set ++CONFIG_NETDEVICES=y ++# CONFIG_DUMMY is not set ++# CONFIG_BONDING is not set ++# CONFIG_MACVLAN is not set ++# CONFIG_EQUALIZER is not set ++# CONFIG_TUN is not set ++# CONFIG_VETH is not set ++# CONFIG_ARCNET is not set ++# CONFIG_PHYLIB is not set ++CONFIG_NET_ETHERNET=y ++CONFIG_MII=y ++# CONFIG_AX88796 is not set ++# CONFIG_HAPPYMEAL is not set ++# CONFIG_SUNGEM is not set ++# CONFIG_CASSINI is not set ++# CONFIG_NET_VENDOR_3COM is not set ++# CONFIG_NET_VENDOR_SMC is not set ++# CONFIG_SMC91X is not set ++# CONFIG_DM9000 is not set ++# CONFIG_ETHOC is not set ++# CONFIG_SMSC911X is not set ++# CONFIG_NET_VENDOR_RACAL is not set ++# CONFIG_DNET is not set ++# CONFIG_NET_TULIP is not set ++# CONFIG_AT1700 is not set ++# CONFIG_DEPCA is not set ++# CONFIG_HP100 is not set ++# CONFIG_NET_ISA is not set ++# CONFIG_IBM_NEW_EMAC_ZMII is not set ++# CONFIG_IBM_NEW_EMAC_RGMII is not set ++# CONFIG_IBM_NEW_EMAC_TAH is not set ++# CONFIG_IBM_NEW_EMAC_EMAC4 is not set ++# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set ++# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set ++# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set ++CONFIG_NET_PCI=y ++# CONFIG_PCNET32 is not set ++# CONFIG_AMD8111_ETH is not set ++# CONFIG_ADAPTEC_STARFIRE is not set ++# CONFIG_AC3200 is not set ++# CONFIG_KSZ884X_PCI is not set ++# CONFIG_APRICOT is not set ++# CONFIG_B44 is not set ++# CONFIG_FORCEDETH is not set ++# CONFIG_CS89x0 is not set ++# CONFIG_TC35815 is not set ++# CONFIG_E100 is not set ++# CONFIG_FEALNX is not set ++# CONFIG_NATSEMI is not set ++# CONFIG_NE2K_PCI is not set ++# CONFIG_8139CP is not set ++CONFIG_8139TOO=y ++CONFIG_8139TOO_PIO=y ++# CONFIG_8139TOO_TUNE_TWISTER is not set ++# CONFIG_8139TOO_8129 is not set ++# CONFIG_8139_OLD_RX_RESET is not set ++# CONFIG_R6040 is not set ++# CONFIG_SIS900 is not set ++# CONFIG_EPIC100 is not set ++# CONFIG_SMSC9420 is not set ++# CONFIG_SUNDANCE is not set ++# CONFIG_TLAN is not set ++# CONFIG_KS8842 is not set ++# CONFIG_KS8851_MLL is not set ++# CONFIG_VIA_RHINE is not set ++# CONFIG_SC92031 is not set ++# CONFIG_ATL2 is not set ++CONFIG_NETDEV_1000=y ++# CONFIG_ACENIC is not set ++# CONFIG_DL2K is not set ++# CONFIG_E1000 is not set ++# CONFIG_E1000E is not set ++# CONFIG_IP1000 is not set ++# CONFIG_IGB is not set ++# CONFIG_IGBVF is not set ++# CONFIG_NS83820 is not set ++# CONFIG_HAMACHI is not set ++# CONFIG_YELLOWFIN is not set ++CONFIG_R8169=y ++# CONFIG_SIS190 is not set ++# CONFIG_SKGE is not set ++# CONFIG_SKY2 is not set ++# CONFIG_VIA_VELOCITY is not set ++# CONFIG_TIGON3 is not set ++# CONFIG_BNX2 is not set ++# CONFIG_CNIC is not set ++# CONFIG_QLA3XXX is not set ++# CONFIG_ATL1 is not set ++# CONFIG_ATL1E is not set ++# CONFIG_ATL1C is not set ++# CONFIG_JME is not set ++# CONFIG_NETDEV_10000 is not set ++# CONFIG_TR is not set ++# CONFIG_WLAN is not set ++ ++# ++# Enable WiMAX (Networking options) to see the WiMAX drivers ++# ++ ++# ++# USB Network Adapters ++# ++# CONFIG_USB_CATC is not set ++# CONFIG_USB_KAWETH is not set ++# CONFIG_USB_PEGASUS is not set ++# CONFIG_USB_RTL8150 is not set ++# CONFIG_USB_USBNET is not set ++# CONFIG_USB_IPHETH is not set ++# CONFIG_WAN is not set ++# CONFIG_FDDI is not set ++# CONFIG_HIPPI is not set ++# CONFIG_PPP is not set ++# CONFIG_SLIP is not set ++# CONFIG_NET_FC is not set ++# CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set ++# CONFIG_VMXNET3 is not set ++# CONFIG_ISDN is not set ++# CONFIG_PHONE is not set ++ ++# ++# Input device support ++# ++CONFIG_INPUT=y ++CONFIG_INPUT_FF_MEMLESS=y ++# CONFIG_INPUT_POLLDEV is not set ++# CONFIG_INPUT_SPARSEKMAP is not set ++ ++# ++# Userland interfaces ++# ++CONFIG_INPUT_MOUSEDEV=y ++CONFIG_INPUT_MOUSEDEV_PSAUX=y ++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 ++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 ++# CONFIG_INPUT_JOYDEV is not set ++# CONFIG_INPUT_EVDEV is not set ++# CONFIG_INPUT_EVBUG is not set ++ ++# ++# Input Device Drivers ++# ++CONFIG_INPUT_KEYBOARD=y ++CONFIG_KEYBOARD_ATKBD=y ++# CONFIG_KEYBOARD_LKKBD is not set ++# CONFIG_KEYBOARD_NEWTON is not set ++# CONFIG_KEYBOARD_OPENCORES is not set ++# CONFIG_KEYBOARD_STOWAWAY is not set ++# CONFIG_KEYBOARD_SUNKBD is not set ++# CONFIG_KEYBOARD_XTKBD is not set ++CONFIG_INPUT_MOUSE=y ++CONFIG_MOUSE_PS2=y ++# CONFIG_MOUSE_PS2_ALPS is not set ++# CONFIG_MOUSE_PS2_LOGIPS2PP is not set ++CONFIG_MOUSE_PS2_SYNAPTICS=y ++# CONFIG_MOUSE_PS2_TRACKPOINT is not set ++# CONFIG_MOUSE_PS2_ELANTECH is not set ++# CONFIG_MOUSE_PS2_SENTELIC is not set ++# CONFIG_MOUSE_PS2_TOUCHKIT is not set ++# CONFIG_MOUSE_SERIAL is not set ++# CONFIG_MOUSE_APPLETOUCH is not set ++# CONFIG_MOUSE_BCM5974 is not set ++# CONFIG_MOUSE_INPORT is not set ++# CONFIG_MOUSE_LOGIBM is not set ++# CONFIG_MOUSE_PC110PAD is not set ++# CONFIG_MOUSE_VSXXXAA is not set ++# CONFIG_INPUT_JOYSTICK is not set ++# CONFIG_INPUT_TABLET is not set ++# CONFIG_INPUT_TOUCHSCREEN is not set ++# CONFIG_INPUT_MISC is not set ++ ++# ++# Hardware I/O ports ++# ++CONFIG_SERIO=y ++CONFIG_SERIO_I8042=y ++# CONFIG_SERIO_SERPORT is not set ++# CONFIG_SERIO_PCIPS2 is not set ++CONFIG_SERIO_LIBPS2=y ++# CONFIG_SERIO_RAW is not set ++# CONFIG_SERIO_ALTERA_PS2 is not set ++# CONFIG_GAMEPORT is not set ++ ++# ++# Character devices ++# ++CONFIG_VT=y ++CONFIG_CONSOLE_TRANSLATIONS=y ++CONFIG_VT_CONSOLE=y ++CONFIG_HW_CONSOLE=y ++# CONFIG_VT_HW_CONSOLE_BINDING is not set ++# CONFIG_DEVKMEM is not set ++# CONFIG_SERIAL_NONSTANDARD is not set ++# CONFIG_NOZOMI is not set ++ ++# ++# Serial drivers ++# ++CONFIG_SERIAL_8250=y ++CONFIG_SERIAL_8250_CONSOLE=y ++# CONFIG_SERIAL_8250_PCI is not set ++CONFIG_SERIAL_8250_NR_UARTS=4 ++CONFIG_SERIAL_8250_RUNTIME_UARTS=4 ++# CONFIG_SERIAL_8250_EXTENDED is not set ++ ++# ++# Non-8250 serial port support ++# ++CONFIG_SERIAL_CORE=y ++CONFIG_SERIAL_CORE_CONSOLE=y ++# CONFIG_SERIAL_JSM is not set ++# CONFIG_SERIAL_TIMBERDALE is not set ++CONFIG_UNIX98_PTYS=y ++# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set ++CONFIG_LEGACY_PTYS=y ++CONFIG_LEGACY_PTY_COUNT=16 ++# CONFIG_IPMI_HANDLER is not set ++# CONFIG_HW_RANDOM is not set ++# CONFIG_DTLK is not set ++# CONFIG_R3964 is not set ++# CONFIG_APPLICOM is not set ++# CONFIG_RAW_DRIVER is not set ++# CONFIG_TCG_TPM is not set ++CONFIG_DEVPORT=y ++# CONFIG_I2C is not set ++# CONFIG_SPI is not set ++ ++# ++# PPS support ++# ++# CONFIG_PPS is not set ++# CONFIG_W1 is not set ++# CONFIG_POWER_SUPPLY is not set ++# CONFIG_HWMON is not set ++# CONFIG_THERMAL is not set ++# CONFIG_WATCHDOG is not set ++CONFIG_SSB_POSSIBLE=y ++ ++# ++# Sonics Silicon Backplane ++# ++# CONFIG_SSB is not set ++ ++# ++# Multifunction device drivers ++# ++# CONFIG_MFD_CORE is not set ++# CONFIG_MFD_SM501 is not set ++# CONFIG_HTC_PASIC3 is not set ++# CONFIG_MFD_TMIO is not set ++# CONFIG_LPC_SCH is not set ++# CONFIG_REGULATOR is not set ++# CONFIG_MEDIA_SUPPORT is not set ++ ++# ++# Graphics support ++# ++CONFIG_VGA_ARB=y ++CONFIG_VGA_ARB_MAX_GPUS=16 ++# CONFIG_DRM is not set ++# CONFIG_VGASTATE is not set ++CONFIG_VIDEO_OUTPUT_CONTROL=y ++CONFIG_FB=y ++CONFIG_FIRMWARE_EDID=y ++# CONFIG_FB_DDC is not set ++CONFIG_FB_BOOT_VESA_SUPPORT=y ++CONFIG_FB_CFB_FILLRECT=y ++CONFIG_FB_CFB_COPYAREA=y ++CONFIG_FB_CFB_IMAGEBLIT=y ++# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set ++# CONFIG_FB_SYS_FILLRECT is not set ++# CONFIG_FB_SYS_COPYAREA is not set ++# CONFIG_FB_SYS_IMAGEBLIT is not set ++# CONFIG_FB_FOREIGN_ENDIAN is not set ++# CONFIG_FB_SYS_FOPS is not set ++# CONFIG_FB_SVGALIB is not set ++# CONFIG_FB_MACMODES is not set ++# CONFIG_FB_BACKLIGHT is not set ++CONFIG_FB_MODE_HELPERS=y ++CONFIG_FB_TILEBLITTING=y ++ ++# ++# Frame buffer hardware drivers ++# ++# CONFIG_FB_CIRRUS is not set ++# CONFIG_FB_PM2 is not set ++# CONFIG_FB_CYBER2000 is not set ++# CONFIG_FB_ASILIANT is not set ++# CONFIG_FB_IMSTT is not set ++# CONFIG_FB_S1D13XXX is not set ++# CONFIG_FB_NVIDIA is not set ++# CONFIG_FB_RIVA is not set ++# CONFIG_FB_MATROX is not set ++# CONFIG_FB_RADEON is not set ++# CONFIG_FB_ATY128 is not set ++# CONFIG_FB_ATY is not set ++# CONFIG_FB_S3 is not set ++# CONFIG_FB_SAVAGE is not set ++CONFIG_FB_SIS=y ++CONFIG_FB_SIS_300=y ++CONFIG_FB_SIS_315=y ++# CONFIG_FB_VIA is not set ++# CONFIG_FB_NEOMAGIC is not set ++# CONFIG_FB_KYRO is not set ++# CONFIG_FB_3DFX is not set ++# CONFIG_FB_VOODOO1 is not set ++# CONFIG_FB_VT8623 is not set ++# CONFIG_FB_TRIDENT is not set ++# CONFIG_FB_ARK is not set ++# CONFIG_FB_PM3 is not set ++# CONFIG_FB_CARMINE is not set ++# CONFIG_FB_VIRTUAL is not set ++# CONFIG_FB_METRONOME is not set ++# CONFIG_FB_MB862XX is not set ++# CONFIG_FB_BROADSHEET is not set ++CONFIG_BACKLIGHT_LCD_SUPPORT=y ++# CONFIG_LCD_CLASS_DEVICE is not set ++CONFIG_BACKLIGHT_CLASS_DEVICE=y ++CONFIG_BACKLIGHT_GENERIC=y ++ ++# ++# Display device support ++# ++# CONFIG_DISPLAY_SUPPORT is not set ++ ++# ++# Console display driver support ++# ++# CONFIG_VGA_CONSOLE is not set ++# CONFIG_MDA_CONSOLE is not set ++CONFIG_DUMMY_CONSOLE=y ++CONFIG_FRAMEBUFFER_CONSOLE=y ++# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set ++CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y ++CONFIG_FONTS=y ++CONFIG_FONT_8x8=y ++CONFIG_FONT_8x16=y ++CONFIG_FONT_6x11=y ++CONFIG_FONT_7x14=y ++CONFIG_FONT_PEARL_8x8=y ++CONFIG_FONT_ACORN_8x8=y ++CONFIG_FONT_MINI_4x6=y ++CONFIG_FONT_SUN8x16=y ++CONFIG_FONT_SUN12x22=y ++CONFIG_FONT_10x18=y ++CONFIG_LOGO=y ++# CONFIG_LOGO_LINUX_MONO is not set ++# CONFIG_LOGO_LINUX_VGA16 is not set ++CONFIG_LOGO_LINUX_CLUT224=y ++# CONFIG_SOUND is not set ++CONFIG_HID_SUPPORT=y ++CONFIG_HID=y ++CONFIG_HIDRAW=y ++ ++# ++# USB Input Devices ++# ++CONFIG_USB_HID=y ++# CONFIG_HID_PID is not set ++CONFIG_USB_HIDDEV=y ++ ++# ++# Special HID drivers ++# ++# CONFIG_HID_3M_PCT is not set ++CONFIG_HID_A4TECH=y ++CONFIG_HID_APPLE=y ++CONFIG_HID_BELKIN=y ++CONFIG_HID_CHERRY=y ++CONFIG_HID_CHICONY=y ++CONFIG_HID_CYPRESS=y ++CONFIG_HID_DRAGONRISE=y ++CONFIG_DRAGONRISE_FF=y ++CONFIG_HID_EZKEY=y ++CONFIG_HID_KYE=y ++CONFIG_HID_GYRATION=y ++CONFIG_HID_TWINHAN=y ++CONFIG_HID_KENSINGTON=y ++CONFIG_HID_LOGITECH=y ++CONFIG_LOGITECH_FF=y ++CONFIG_LOGIRUMBLEPAD2_FF=y ++# CONFIG_LOGIG940_FF is not set ++CONFIG_HID_MICROSOFT=y ++# CONFIG_HID_MOSART is not set ++CONFIG_HID_MONTEREY=y ++CONFIG_HID_NTRIG=y ++# CONFIG_HID_ORTEK is not set ++CONFIG_HID_PANTHERLORD=y ++CONFIG_PANTHERLORD_FF=y ++CONFIG_HID_PETALYNX=y ++# CONFIG_HID_QUANTA is not set ++CONFIG_HID_SAMSUNG=y ++CONFIG_HID_SONY=y ++# CONFIG_HID_STANTUM is not set ++CONFIG_HID_SUNPLUS=y ++CONFIG_HID_GREENASIA=y ++CONFIG_GREENASIA_FF=y ++CONFIG_HID_SMARTJOYPLUS=y ++CONFIG_SMARTJOYPLUS_FF=y ++CONFIG_HID_TOPSEED=y ++CONFIG_HID_THRUSTMASTER=y ++CONFIG_THRUSTMASTER_FF=y ++CONFIG_HID_ZEROPLUS=y ++CONFIG_ZEROPLUS_FF=y ++CONFIG_USB_SUPPORT=y ++CONFIG_USB_ARCH_HAS_HCD=y ++CONFIG_USB_ARCH_HAS_OHCI=y ++CONFIG_USB_ARCH_HAS_EHCI=y ++CONFIG_USB=y ++# CONFIG_USB_DEBUG is not set ++# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set ++ ++# ++# Miscellaneous USB options ++# ++# CONFIG_USB_DEVICEFS is not set ++# CONFIG_USB_DEVICE_CLASS is not set ++CONFIG_USB_DYNAMIC_MINORS=y ++# CONFIG_USB_OTG is not set ++CONFIG_USB_OTG_WHITELIST=y ++# CONFIG_USB_OTG_BLACKLIST_HUB is not set ++CONFIG_USB_MON=y ++# CONFIG_USB_WUSB is not set ++# CONFIG_USB_WUSB_CBAF is not set ++ ++# ++# USB Host Controller Drivers ++# ++# CONFIG_USB_C67X00_HCD is not set ++# CONFIG_USB_XHCI_HCD is not set ++CONFIG_USB_EHCI_HCD=y ++CONFIG_USB_EHCI_ROOT_HUB_TT=y ++# CONFIG_USB_EHCI_TT_NEWSCHED is not set ++# CONFIG_USB_OXU210HP_HCD is not set ++# CONFIG_USB_ISP116X_HCD is not set ++# CONFIG_USB_ISP1760_HCD is not set ++# CONFIG_USB_ISP1362_HCD is not set ++CONFIG_USB_OHCI_HCD=y ++# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set ++# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set ++CONFIG_USB_OHCI_LITTLE_ENDIAN=y ++# CONFIG_USB_UHCI_HCD is not set ++# CONFIG_USB_SL811_HCD is not set ++# CONFIG_USB_R8A66597_HCD is not set ++# CONFIG_USB_WHCI_HCD is not set ++# CONFIG_USB_HWA_HCD is not set ++ ++# ++# USB Device Class drivers ++# ++# CONFIG_USB_ACM is not set ++# CONFIG_USB_PRINTER is not set ++# CONFIG_USB_WDM is not set ++# CONFIG_USB_TMC is not set ++ ++# ++# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may ++# ++ ++# ++# also be needed; see USB_STORAGE Help for more info ++# ++CONFIG_USB_STORAGE=y ++# CONFIG_USB_STORAGE_DEBUG is not set ++# CONFIG_USB_STORAGE_DATAFAB is not set ++# CONFIG_USB_STORAGE_FREECOM is not set ++# CONFIG_USB_STORAGE_ISD200 is not set ++# CONFIG_USB_STORAGE_USBAT is not set ++# CONFIG_USB_STORAGE_SDDR09 is not set ++# CONFIG_USB_STORAGE_SDDR55 is not set ++# CONFIG_USB_STORAGE_JUMPSHOT is not set ++# CONFIG_USB_STORAGE_ALAUDA is not set ++# CONFIG_USB_STORAGE_ONETOUCH is not set ++# CONFIG_USB_STORAGE_KARMA is not set ++# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set ++CONFIG_USB_LIBUSUAL=y ++ ++# ++# USB Imaging devices ++# ++# CONFIG_USB_MDC800 is not set ++# CONFIG_USB_MICROTEK is not set ++ ++# ++# USB port drivers ++# ++# CONFIG_USB_SERIAL is not set ++ ++# ++# USB Miscellaneous drivers ++# ++# CONFIG_USB_EMI62 is not set ++# CONFIG_USB_EMI26 is not set ++# CONFIG_USB_ADUTUX is not set ++# CONFIG_USB_SEVSEG is not set ++# CONFIG_USB_RIO500 is not set ++# CONFIG_USB_LEGOTOWER is not set ++# CONFIG_USB_LCD is not set ++# CONFIG_USB_LED is not set ++# CONFIG_USB_CYPRESS_CY7C63 is not set ++# CONFIG_USB_CYTHERM is not set ++# CONFIG_USB_IDMOUSE is not set ++# CONFIG_USB_FTDI_ELAN is not set ++# CONFIG_USB_APPLEDISPLAY is not set ++# CONFIG_USB_SISUSBVGA is not set ++# CONFIG_USB_LD is not set ++# CONFIG_USB_TRANCEVIBRATOR is not set ++# CONFIG_USB_IOWARRIOR is not set ++# CONFIG_USB_TEST is not set ++# CONFIG_USB_ISIGHTFW is not set ++# CONFIG_USB_GADGET is not set ++ ++# ++# OTG and related infrastructure ++# ++# CONFIG_NOP_USB_XCEIV is not set ++# CONFIG_UWB is not set ++# CONFIG_MMC is not set ++# CONFIG_MEMSTICK is not set ++# CONFIG_NEW_LEDS is not set ++# CONFIG_ACCESSIBILITY is not set ++# CONFIG_INFINIBAND is not set ++CONFIG_RTC_LIB=y ++CONFIG_RTC_CLASS=y ++CONFIG_RTC_HCTOSYS=y ++CONFIG_RTC_HCTOSYS_DEVICE="rtc0" ++# CONFIG_RTC_DEBUG is not set ++ ++# ++# RTC interfaces ++# ++CONFIG_RTC_INTF_SYSFS=y ++CONFIG_RTC_INTF_PROC=y ++CONFIG_RTC_INTF_DEV=y ++# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set ++# CONFIG_RTC_DRV_TEST is not set ++ ++# ++# SPI RTC drivers ++# ++ ++# ++# Platform RTC drivers ++# ++CONFIG_RTC_DRV_CMOS=y ++# CONFIG_RTC_DRV_DS1286 is not set ++# CONFIG_RTC_DRV_DS1511 is not set ++# CONFIG_RTC_DRV_DS1553 is not set ++# CONFIG_RTC_DRV_DS1742 is not set ++# CONFIG_RTC_DRV_STK17TA8 is not set ++# CONFIG_RTC_DRV_M48T86 is not set ++# CONFIG_RTC_DRV_M48T35 is not set ++# CONFIG_RTC_DRV_M48T59 is not set ++# CONFIG_RTC_DRV_MSM6242 is not set ++# CONFIG_RTC_DRV_BQ4802 is not set ++# CONFIG_RTC_DRV_RP5C01 is not set ++# CONFIG_RTC_DRV_V3020 is not set ++ ++# ++# on-CPU RTC drivers ++# ++# CONFIG_DMADEVICES is not set ++# CONFIG_AUXDISPLAY is not set ++# CONFIG_UIO is not set ++ ++# ++# TI VLYNQ ++# ++CONFIG_STAGING=y ++# CONFIG_STAGING_EXCLUDE_BUILD is not set ++# CONFIG_ET131X is not set ++# CONFIG_USB_IP_COMMON is not set ++# CONFIG_ECHO is not set ++# CONFIG_ASUS_OLED is not set ++# CONFIG_TRANZPORT is not set ++ ++# ++# Qualcomm MSM Camera And Video ++# ++ ++# ++# Camera Sensor Selection ++# ++# CONFIG_INPUT_GPIO is not set ++# CONFIG_POHMELFS is not set ++# CONFIG_FB_UDL is not set ++# CONFIG_VME_BUS is not set ++ ++# ++# RAR Register Driver ++# ++# CONFIG_RAR_REGISTER is not set ++# CONFIG_IIO is not set ++# CONFIG_RAMZSWAP is not set ++# CONFIG_BATMAN_ADV is not set ++# CONFIG_STRIP is not set ++CONFIG_FB_SM7XX=y ++# CONFIG_DT3155 is not set ++# CONFIG_CRYSTALHD is not set ++CONFIG_MIPS_PLATFORM_DEVICES=y ++# CONFIG_LEMOTE_YEELOONG2F is not set ++# CONFIG_LEMOTE_LYNLOONG2F is not set ++ ++# ++# File systems ++# ++CONFIG_EXT2_FS=y ++CONFIG_EXT2_FS_XATTR=y ++# CONFIG_EXT2_FS_POSIX_ACL is not set ++# CONFIG_EXT2_FS_SECURITY is not set ++# CONFIG_EXT2_FS_XIP is not set ++CONFIG_EXT3_FS=y ++# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set ++CONFIG_EXT3_FS_XATTR=y ++# CONFIG_EXT3_FS_POSIX_ACL is not set ++# CONFIG_EXT3_FS_SECURITY is not set ++# CONFIG_EXT4_FS is not set ++CONFIG_JBD=y ++CONFIG_FS_MBCACHE=y ++# CONFIG_REISERFS_FS is not set ++# CONFIG_JFS_FS is not set ++# CONFIG_FS_POSIX_ACL is not set ++# CONFIG_XFS_FS is not set ++# CONFIG_GFS2_FS is not set ++# CONFIG_OCFS2_FS is not set ++# CONFIG_BTRFS_FS is not set ++# CONFIG_NILFS2_FS is not set ++CONFIG_FILE_LOCKING=y ++CONFIG_FSNOTIFY=y ++CONFIG_DNOTIFY=y ++CONFIG_INOTIFY=y ++CONFIG_INOTIFY_USER=y ++# CONFIG_QUOTA is not set ++# CONFIG_AUTOFS_FS is not set ++# CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set ++ ++# ++# Caches ++# ++# CONFIG_FSCACHE is not set ++ ++# ++# CD-ROM/DVD Filesystems ++# ++# CONFIG_ISO9660_FS is not set ++# CONFIG_UDF_FS is not set ++ ++# ++# DOS/FAT/NT Filesystems ++# ++CONFIG_FAT_FS=y ++CONFIG_MSDOS_FS=y ++CONFIG_VFAT_FS=y ++CONFIG_FAT_DEFAULT_CODEPAGE=437 ++CONFIG_FAT_DEFAULT_IOCHARSET="utf-8" ++# CONFIG_NTFS_FS is not set ++ ++# ++# Pseudo filesystems ++# ++CONFIG_PROC_FS=y ++CONFIG_PROC_KCORE=y ++CONFIG_PROC_SYSCTL=y ++CONFIG_PROC_PAGE_MONITOR=y ++CONFIG_SYSFS=y ++CONFIG_TMPFS=y ++# CONFIG_TMPFS_POSIX_ACL is not set ++# CONFIG_HUGETLB_PAGE is not set ++# CONFIG_CONFIGFS_FS is not set ++# CONFIG_MISC_FILESYSTEMS is not set ++# CONFIG_NETWORK_FILESYSTEMS is not set ++ ++# ++# Partition Types ++# ++# CONFIG_PARTITION_ADVANCED is not set ++CONFIG_MSDOS_PARTITION=y ++CONFIG_NLS=y ++CONFIG_NLS_DEFAULT="utf8" ++CONFIG_NLS_CODEPAGE_437=y ++# CONFIG_NLS_CODEPAGE_737 is not set ++# CONFIG_NLS_CODEPAGE_775 is not set ++# CONFIG_NLS_CODEPAGE_850 is not set ++# CONFIG_NLS_CODEPAGE_852 is not set ++# CONFIG_NLS_CODEPAGE_855 is not set ++# CONFIG_NLS_CODEPAGE_857 is not set ++# CONFIG_NLS_CODEPAGE_860 is not set ++# CONFIG_NLS_CODEPAGE_861 is not set ++# CONFIG_NLS_CODEPAGE_862 is not set ++# CONFIG_NLS_CODEPAGE_863 is not set ++# CONFIG_NLS_CODEPAGE_864 is not set ++# CONFIG_NLS_CODEPAGE_865 is not set ++# CONFIG_NLS_CODEPAGE_866 is not set ++# CONFIG_NLS_CODEPAGE_869 is not set ++# CONFIG_NLS_CODEPAGE_936 is not set ++# CONFIG_NLS_CODEPAGE_950 is not set ++# CONFIG_NLS_CODEPAGE_932 is not set ++# CONFIG_NLS_CODEPAGE_949 is not set ++# CONFIG_NLS_CODEPAGE_874 is not set ++# CONFIG_NLS_ISO8859_8 is not set ++# CONFIG_NLS_CODEPAGE_1250 is not set ++# CONFIG_NLS_CODEPAGE_1251 is not set ++CONFIG_NLS_ASCII=y ++# CONFIG_NLS_ISO8859_1 is not set ++# CONFIG_NLS_ISO8859_2 is not set ++# CONFIG_NLS_ISO8859_3 is not set ++# CONFIG_NLS_ISO8859_4 is not set ++# CONFIG_NLS_ISO8859_5 is not set ++# CONFIG_NLS_ISO8859_6 is not set ++# CONFIG_NLS_ISO8859_7 is not set ++# CONFIG_NLS_ISO8859_9 is not set ++# CONFIG_NLS_ISO8859_13 is not set ++# CONFIG_NLS_ISO8859_14 is not set ++# CONFIG_NLS_ISO8859_15 is not set ++# CONFIG_NLS_KOI8_R is not set ++# CONFIG_NLS_KOI8_U is not set ++CONFIG_NLS_UTF8=y ++# CONFIG_DLM is not set ++ ++# ++# Kernel hacking ++# ++CONFIG_TRACE_IRQFLAGS_SUPPORT=y ++CONFIG_PRINTK_TIME=y ++CONFIG_ENABLE_WARN_DEPRECATED=y ++CONFIG_ENABLE_MUST_CHECK=y ++CONFIG_FRAME_WARN=1024 ++# CONFIG_MAGIC_SYSRQ is not set ++CONFIG_STRIP_ASM_SYMS=y ++# CONFIG_UNUSED_SYMBOLS is not set ++# CONFIG_DEBUG_FS is not set ++# CONFIG_HEADERS_CHECK is not set ++# CONFIG_DEBUG_KERNEL is not set ++# CONFIG_SLUB_DEBUG_ON is not set ++# CONFIG_SLUB_STATS is not set ++# CONFIG_DEBUG_MEMORY_INIT is not set ++# CONFIG_RCU_CPU_STALL_DETECTOR is not set ++CONFIG_SYSCTL_SYSCALL_CHECK=y ++CONFIG_HAVE_FUNCTION_TRACER=y ++CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y ++CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y ++CONFIG_HAVE_DYNAMIC_FTRACE=y ++CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y ++CONFIG_TRACING_SUPPORT=y ++# CONFIG_FTRACE is not set ++# CONFIG_SAMPLES is not set ++CONFIG_HAVE_ARCH_KGDB=y ++# CONFIG_EARLY_PRINTK is not set ++# CONFIG_CMDLINE_BOOL is not set ++ ++# ++# Security options ++# ++# CONFIG_KEYS is not set ++# CONFIG_SECURITY is not set ++# CONFIG_SECURITYFS is not set +# CONFIG_DEFAULT_SECURITY_SELINUX is not set +# CONFIG_DEFAULT_SECURITY_SMACK is not set +# CONFIG_DEFAULT_SECURITY_TOMOYO is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_DEFAULT_SECURITY="" -+CONFIG_XOR_BLOCKS=m -+CONFIG_ASYNC_CORE=m -+CONFIG_ASYNC_MEMCPY=m -+CONFIG_ASYNC_XOR=m -+CONFIG_ASYNC_PQ=m -+CONFIG_ASYNC_RAID6_RECOV=m - CONFIG_CRYPTO=y - - # - # Crypto core or helper - # -+CONFIG_CRYPTO_FIPS=y - CONFIG_CRYPTO_ALGAPI=y - CONFIG_CRYPTO_ALGAPI2=y -+CONFIG_CRYPTO_AEAD=m - CONFIG_CRYPTO_AEAD2=y --CONFIG_CRYPTO_BLKCIPHER=y -+CONFIG_CRYPTO_BLKCIPHER=m - CONFIG_CRYPTO_BLKCIPHER2=y -+CONFIG_CRYPTO_HASH=y - CONFIG_CRYPTO_HASH2=y -+CONFIG_CRYPTO_RNG=m - CONFIG_CRYPTO_RNG2=y - CONFIG_CRYPTO_PCOMP=y --CONFIG_CRYPTO_MANAGER=y -+CONFIG_CRYPTO_MANAGER=m - CONFIG_CRYPTO_MANAGER2=y --# CONFIG_CRYPTO_GF128MUL is not set --# CONFIG_CRYPTO_NULL is not set -+CONFIG_CRYPTO_GF128MUL=m -+CONFIG_CRYPTO_NULL=m - CONFIG_CRYPTO_WORKQUEUE=y --# CONFIG_CRYPTO_CRYPTD is not set --# CONFIG_CRYPTO_AUTHENC is not set --# CONFIG_CRYPTO_TEST is not set -+CONFIG_CRYPTO_CRYPTD=m -+CONFIG_CRYPTO_AUTHENC=m -+CONFIG_CRYPTO_TEST=m - - # - # Authenticated Encryption with Associated Data - # --# CONFIG_CRYPTO_CCM is not set --# CONFIG_CRYPTO_GCM is not set --# CONFIG_CRYPTO_SEQIV is not set -+CONFIG_CRYPTO_CCM=m -+CONFIG_CRYPTO_GCM=m -+CONFIG_CRYPTO_SEQIV=m - - # - # Block modes - # --CONFIG_CRYPTO_CBC=y --# CONFIG_CRYPTO_CTR is not set -+CONFIG_CRYPTO_CBC=m -+CONFIG_CRYPTO_CTR=m - # CONFIG_CRYPTO_CTS is not set --# CONFIG_CRYPTO_ECB is not set --# CONFIG_CRYPTO_LRW is not set --# CONFIG_CRYPTO_PCBC is not set --# CONFIG_CRYPTO_XTS is not set -+CONFIG_CRYPTO_ECB=m -+CONFIG_CRYPTO_LRW=m -+CONFIG_CRYPTO_PCBC=m -+CONFIG_CRYPTO_XTS=m - - # - # Hash modes - # --# CONFIG_CRYPTO_HMAC is not set --# CONFIG_CRYPTO_XCBC is not set -+CONFIG_CRYPTO_HMAC=m -+CONFIG_CRYPTO_XCBC=m - # CONFIG_CRYPTO_VMAC is not set - - # - # Digest - # --# CONFIG_CRYPTO_CRC32C is not set --# CONFIG_CRYPTO_GHASH is not set --# CONFIG_CRYPTO_MD4 is not set --# CONFIG_CRYPTO_MD5 is not set --# CONFIG_CRYPTO_MICHAEL_MIC is not set --# CONFIG_CRYPTO_RMD128 is not set --# CONFIG_CRYPTO_RMD160 is not set --# CONFIG_CRYPTO_RMD256 is not set --# CONFIG_CRYPTO_RMD320 is not set --# CONFIG_CRYPTO_SHA1 is not set --# CONFIG_CRYPTO_SHA256 is not set --# CONFIG_CRYPTO_SHA512 is not set --# CONFIG_CRYPTO_TGR192 is not set --# CONFIG_CRYPTO_WP512 is not set -+CONFIG_CRYPTO_CRC32C=m -+CONFIG_CRYPTO_GHASH=m -+CONFIG_CRYPTO_MD4=m -+CONFIG_CRYPTO_MD5=y -+CONFIG_CRYPTO_MICHAEL_MIC=m -+CONFIG_CRYPTO_RMD128=m -+CONFIG_CRYPTO_RMD160=m -+CONFIG_CRYPTO_RMD256=m -+CONFIG_CRYPTO_RMD320=m -+CONFIG_CRYPTO_SHA1=m -+CONFIG_CRYPTO_SHA256=m -+CONFIG_CRYPTO_SHA512=m -+CONFIG_CRYPTO_TGR192=m -+CONFIG_CRYPTO_WP512=m - - # - # Ciphers - # --# CONFIG_CRYPTO_AES is not set --# CONFIG_CRYPTO_ANUBIS is not set --# CONFIG_CRYPTO_ARC4 is not set --# CONFIG_CRYPTO_BLOWFISH is not set --# CONFIG_CRYPTO_CAMELLIA is not set --# CONFIG_CRYPTO_CAST5 is not set --# CONFIG_CRYPTO_CAST6 is not set --# CONFIG_CRYPTO_DES is not set --# CONFIG_CRYPTO_FCRYPT is not set --# CONFIG_CRYPTO_KHAZAD is not set --# CONFIG_CRYPTO_SALSA20 is not set --# CONFIG_CRYPTO_SEED is not set --# CONFIG_CRYPTO_SERPENT is not set --# CONFIG_CRYPTO_TEA is not set --# CONFIG_CRYPTO_TWOFISH is not set -+CONFIG_CRYPTO_AES=m -+CONFIG_CRYPTO_ANUBIS=m -+CONFIG_CRYPTO_ARC4=m -+CONFIG_CRYPTO_BLOWFISH=m -+CONFIG_CRYPTO_CAMELLIA=m -+CONFIG_CRYPTO_CAST5=m -+CONFIG_CRYPTO_CAST6=m -+CONFIG_CRYPTO_DES=m -+CONFIG_CRYPTO_FCRYPT=m -+CONFIG_CRYPTO_KHAZAD=m -+CONFIG_CRYPTO_SALSA20=m -+CONFIG_CRYPTO_SEED=m -+CONFIG_CRYPTO_SERPENT=m -+CONFIG_CRYPTO_TEA=m -+CONFIG_CRYPTO_TWOFISH=m -+CONFIG_CRYPTO_TWOFISH_COMMON=m - - # - # Compression - # --# CONFIG_CRYPTO_DEFLATE is not set --# CONFIG_CRYPTO_ZLIB is not set --# CONFIG_CRYPTO_LZO is not set -+CONFIG_CRYPTO_DEFLATE=m -+CONFIG_CRYPTO_ZLIB=m -+CONFIG_CRYPTO_LZO=m - - # - # Random Number Generation - # --# CONFIG_CRYPTO_ANSI_CPRNG is not set -+CONFIG_CRYPTO_ANSI_CPRNG=m - CONFIG_CRYPTO_HW=y - # CONFIG_CRYPTO_DEV_HIFN_795X is not set --# CONFIG_BINARY_PRINTF is not set -+CONFIG_BINARY_PRINTF=y - - # - # Library routines -@@ -1821,14 +2219,20 @@ - CONFIG_BITREVERSE=y - CONFIG_GENERIC_FIND_LAST_BIT=y - # CONFIG_CRC_CCITT is not set --# CONFIG_CRC16 is not set -+CONFIG_CRC16=y - CONFIG_CRC_T10DIF=y - # CONFIG_CRC_ITU_T is not set - CONFIG_CRC32=y - # CONFIG_CRC7 is not set --# CONFIG_LIBCRC32C is not set -+CONFIG_LIBCRC32C=m - CONFIG_AUDIT_GENERIC=y --CONFIG_ZLIB_INFLATE=m ++# CONFIG_CRYPTO is not set ++# CONFIG_BINARY_PRINTF is not set ++ ++# ++# Library routines ++# ++CONFIG_BITREVERSE=y ++CONFIG_GENERIC_FIND_LAST_BIT=y ++# CONFIG_CRC_CCITT is not set ++# CONFIG_CRC16 is not set ++# CONFIG_CRC_T10DIF is not set ++# CONFIG_CRC_ITU_T is not set ++CONFIG_CRC32=y ++# CONFIG_CRC7 is not set ++# CONFIG_LIBCRC32C is not set ++CONFIG_AUDIT_GENERIC=y +CONFIG_ZLIB_INFLATE=y -+CONFIG_ZLIB_DEFLATE=m -+CONFIG_LZO_COMPRESS=m -+CONFIG_LZO_DECOMPRESS=m ++CONFIG_LZO_DECOMPRESS=y +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_LZMA=y - CONFIG_HAS_IOMEM=y - CONFIG_HAS_IOPORT=y - CONFIG_HAS_DMA=y -diff -Nur linux-2.6.33/arch/mips/include/asm/ftrace.h linux-lemote/arch/mips/include/asm/ftrace.h ---- linux-2.6.33/arch/mips/include/asm/ftrace.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/ftrace.h 2010-03-06 16:43:00.000000000 +0100 -@@ -4,7 +4,7 @@ ++CONFIG_DECOMPRESS_LZO=y ++CONFIG_HAS_IOMEM=y ++CONFIG_HAS_IOPORT=y ++CONFIG_HAS_DMA=y ++CONFIG_NLATTR=y +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/dma-mapping.h linux-loongson/arch/mips/include/asm/dma-mapping.h +--- linux-2.6.34.orig/arch/mips/include/asm/dma-mapping.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/include/asm/dma-mapping.h 2010-05-27 18:12:28.622215656 +0200 +@@ -74,4 +74,8 @@ + extern void dma_cache_sync(struct device *dev, void *vaddr, size_t size, + enum dma_data_direction direction); + ++#define ARCH_HAS_DMA_MMAP_COHERENT ++extern int dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma, ++ void *cpu_addr, dma_addr_t handle, size_t size); ++ + #endif /* _ASM_DMA_MAPPING_H */ +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/ftrace.h linux-loongson/arch/mips/include/asm/ftrace.h +--- linux-2.6.34.orig/arch/mips/include/asm/ftrace.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/include/asm/ftrace.h 2010-05-27 18:12:28.642214121 +0200 +@@ -3,7 +3,7 @@ + * License. See the file "COPYING" in the main directory of this archive for * more details. * - * Copyright (C) 2009 DSLab, Lanzhou University, China -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin +- * Copyright (C) 2009 DSLab, Lanzhou University, China ++ * Copyright (C) 2009, 2010 DSLab, Lanzhou University, China + * Author: Wu Zhangjin */ - #ifndef _ASM_MIPS_FTRACE_H -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h linux-lemote/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h 2010-03-06 16:43:00.000000000 +0100 -@@ -3,7 +3,7 @@ - * License. See the file "COPYING" in the main directory of this archive - * for more details. - * -- * Copyright (C) 2009 Wu Zhangjin -+ * Copyright (C) 2009 Wu Zhangjin - * Copyright (C) 2009 Philippe Vachon - * Copyright (C) 2009 Zhang Le - * -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h linux-lemote/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h 2010-03-06 16:43:00.000000000 +0100 -@@ -301,5 +301,40 @@ +@@ -19,6 +19,14 @@ + extern void _mcount(void); + #define mcount _mcount + ++/* ++ * If the Instruction Pointer is in module space (0xc0000000), return true; ++ * otherwise, it is in kernel space (0x80000000), return false. ++ * ++ * FIXME: This may not work in some cases. ++ */ ++#define in_module(ip) (unlikely((ip) & 0x40000000)) ++ + #define safe_load(load, src, dst, error) \ + do { \ + asm volatile ( \ +@@ -83,8 +91,8 @@ + + struct dyn_arch_ftrace { + }; +- + #endif /* CONFIG_DYNAMIC_FTRACE */ ++ + #endif /* __ASSEMBLY__ */ + #endif /* CONFIG_FUNCTION_TRACER */ + #endif /* _ASM_MIPS_FTRACE_H */ +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h linux-loongson/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/include/asm/mach-loongson/cpu-feature-overrides.h 2010-05-27 18:12:28.712212405 +0200 +@@ -52,6 +52,8 @@ + #define cpu_has_tx39_cache 0 + #define cpu_has_userlocal 0 + #define cpu_has_vce 0 ++#define cpu_has_veic 0 ++#define cpu_has_vint 0 + #define cpu_has_vtag_icache 0 + #define cpu_has_watch 1 + +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h linux-loongson/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h 2010-05-27 18:12:28.712212405 +0200 +@@ -255,21 +255,12 @@ + * IDE STANDARD + */ + #define IDE_CAP 0x00 +-#define IDE_CONFIG 0x01 +-#define IDE_SMI 0x02 +-#define IDE_ERROR 0x03 +-#define IDE_PM 0x04 +-#define IDE_DIAG 0x05 +- +-/* +- * IDE SPEC. +- */ + #define IDE_IO_BAR 0x08 + #define IDE_CFG 0x10 + #define IDE_DTC 0x12 + #define IDE_CAST 0x13 + #define IDE_ETC 0x14 +-#define IDE_INTERNAL_PM 0x15 ++#define IDE_PM 0x15 + + /* + * ACC STANDARD +@@ -301,5 +292,40 @@ /* GPIO : I/O SPACE; REG : 32BITS */ #define GPIOL_OUT_VAL 0x00 #define GPIOL_OUT_EN 0x04 @@ -2268,9 +2750,9 @@ diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536.h linux +#define SMB_CTRL3 0x06 #endif /* _CS5536_H */ -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h linux-lemote/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h 2010-03-06 16:43:00.000000000 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h linux-loongson/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h 2010-05-27 18:12:28.712212405 +0200 @@ -32,4 +32,9 @@ #define MFGPT0_CNT (MFGPT_BASE + 4) #define MFGPT0_SETUP (MFGPT_BASE + 6) @@ -2281,21 +2763,9 @@ diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536_mfgpt.h +#define MFGPT2_SETUP (MFGPT_BASE + 0x16) + #endif /*!_CS5536_MFGPT_H */ -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h linux-lemote/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/cs5536/cs5536_vsm.h 2010-03-06 16:43:00.000000000 +0100 -@@ -2,7 +2,7 @@ - * the read/write interfaces for Virtual Support Module(VSM) - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - */ - - #ifndef _CS5536_VSM_H -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/ec_kb3310b.h linux-lemote/arch/mips/include/asm/mach-loongson/ec_kb3310b.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/ec_kb3310b.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/ec_kb3310b.h 2010-03-06 16:43:00.000000000 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/ec_kb3310b.h linux-loongson/arch/mips/include/asm/mach-loongson/ec_kb3310b.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/ec_kb3310b.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/arch/mips/include/asm/mach-loongson/ec_kb3310b.h 2010-05-27 18:12:28.712212405 +0200 @@ -0,0 +1,191 @@ +/* + * KB3310B Embedded Controller @@ -2469,18 +2939,18 @@ diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/ec_kb3310b.h linux-le +/* SCI Event Number from EC */ +enum { + EVENT_LID = 0x23, /* Turn on/off LID */ -+ EVENT_DISPLAY_TOGGLE, /* Fn+F3 for display switch */ ++ EVENT_SWITCHVIDEOMODE, /* Fn+F3 for display switch */ + EVENT_SLEEP, /* Fn+F1 for entering sleep mode */ + EVENT_OVERTEMP, /* Over-temperature happened */ + EVENT_CRT_DETECT, /* CRT is connected */ + EVENT_CAMERA, /* Camera on/off */ + EVENT_USB_OC2, /* USB2 Over Current occurred */ + EVENT_USB_OC0, /* USB0 Over Current occurred */ -+ EVENT_BLACK_SCREEN, /* Turn on/off backlight */ -+ EVENT_AUDIO_MUTE, /* Mute on/off */ -+ EVENT_DISPLAY_BRIGHTNESS,/* LCD backlight brightness adjust */ ++ EVENT_DISPLAYTOGGLE, /* Fn+F2, Turn on/off backlight */ ++ EVENT_AUDIO_MUTE, /* Fn+F4, Mute on/off */ ++ EVENT_DISPLAY_BRIGHTNESS,/* Fn+^/V, LCD backlight brightness adjust */ + EVENT_AC_BAT, /* AC & Battery relative issue */ -+ EVENT_AUDIO_VOLUME, /* Volume adjust */ ++ EVENT_AUDIO_VOLUME, /* Fn+<|>, Volume adjust */ + EVENT_WLAN, /* Wlan on/off */ +}; + @@ -2488,33 +2958,49 @@ diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/ec_kb3310b.h linux-le +#define EVENT_END EVENT_WLAN + +#endif /* !_EC_KB3310B_H */ -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/loongson.h linux-lemote/arch/mips/include/asm/mach-loongson/loongson.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/loongson.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/loongson.h 2010-03-06 16:43:00.000000000 +0100 -@@ -1,12 +1,11 @@ - /* - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the - * Free Software Foundation; either version 2 of the License, or (at your - * option) any later version. -- * - */ - - #ifndef __ASM_MACH_LOONGSON_LOONGSON_H -@@ -23,7 +22,7 @@ - extern void mach_prepare_shutdown(void); - - /* environment arguments from bootloader */ --extern unsigned long bus_clock, cpu_clock_freq; -+extern unsigned long cpu_clock_freq; - extern unsigned long memsize, highmemsize; - - /* loongson-specific command line, env and memory initialization */ -@@ -43,6 +42,12 @@ +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/gpio.h linux-loongson/arch/mips/include/asm/mach-loongson/gpio.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/gpio.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/arch/mips/include/asm/mach-loongson/gpio.h 2010-05-27 18:12:28.712212405 +0200 +@@ -0,0 +1,35 @@ ++/* ++ * STLS2F GPIO Support ++ * ++ * Copyright (c) 2008 Richard Liu, STMicroelectronics ++ * Copyright (c) 2008-2010 Arnaud Patard ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ */ ++ ++#ifndef __STLS2F_GPIO_H ++#define __STLS2F_GPIO_H ++ ++#include ++ ++extern void gpio_set_value(unsigned gpio, int value); ++extern int gpio_get_value(unsigned gpio); ++extern int gpio_cansleep(unsigned gpio); ++ ++/* The chip can do interrupt ++ * but it has not been tested and doc not clear ++ */ ++static inline int gpio_to_irq(int gpio) ++{ ++ return -EINVAL; ++} ++ ++static inline int irq_to_gpio(int gpio) ++{ ++ return -EINVAL; ++} ++ ++#endif /* __STLS2F_GPIO_H */ +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/loongson.h linux-loongson/arch/mips/include/asm/mach-loongson/loongson.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-loongson/loongson.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/include/asm/mach-loongson/loongson.h 2010-05-27 18:12:28.712212405 +0200 +@@ -42,6 +42,12 @@ #endif } @@ -2527,99 +3013,28 @@ diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/loongson.h linux-lemo /* irq operation functions */ extern void bonito_irqdispatch(void); extern void __init bonito_irq_init(void); -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/machine.h linux-lemote/arch/mips/include/asm/mach-loongson/machine.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/machine.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/machine.h 2010-03-06 16:43:00.000000000 +0100 -@@ -1,6 +1,6 @@ - /* -- * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology -- * Author: Wu Zhangjin -+ * Copyright (C) 2009 Lemote, Inc. -+ * Author: Wu Zhangjin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/mem.h linux-lemote/arch/mips/include/asm/mach-loongson/mem.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/mem.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/mem.h 2010-03-06 16:43:00.000000000 +0100 -@@ -1,6 +1,6 @@ - /* - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/include/asm/mach-loongson/pci.h linux-lemote/arch/mips/include/asm/mach-loongson/pci.h ---- linux-2.6.33/arch/mips/include/asm/mach-loongson/pci.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/mach-loongson/pci.h 2010-03-06 16:43:00.000000000 +0100 -@@ -1,23 +1,12 @@ - /* - * Copyright (c) 2008 Zhang Le -- * Copyright (c) 2009 Wu Zhangjin -+ * Copyright (c) 2009 Wu Zhangjin - * - * This program is free software; you can redistribute it - * and/or modify it under the terms of the GNU General - * Public License as published by the Free Software - * Foundation; either version 2 of the License, or (at your - * option) any later version. -- * -- * This program is distributed in the hope that it will be -- * useful, but WITHOUT ANY WARRANTY; without even the implied -- * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR -- * PURPOSE. See the GNU General Public License for more -- * details. -- * -- * You should have received a copy of the GNU General Public -- * License along with this program; if not, write to the Free -- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA -- * 02139, USA. - */ - - #ifndef __ASM_MACH_LOONGSON_PCI_H_ -diff -Nur linux-2.6.33/arch/mips/include/asm/stackframe.h linux-lemote/arch/mips/include/asm/stackframe.h ---- linux-2.6.33/arch/mips/include/asm/stackframe.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/include/asm/stackframe.h 2010-03-06 16:43:00.000000000 +0100 -@@ -121,6 +121,25 @@ - .endm - #else - .macro get_saved_sp /* Uniprocessor variation */ -+ /* -+ * clear BTB(branch target buffer), forbid RAS(row address -+ * strobe) to make cpu execute predictively via -+ * loongson2-specific 64bit diagnostic register -+ */ -+#ifdef CONFIG_CPU_LOONGSON2F -+ move k0, ra -+ jal 1f -+ nop -+1: jal 1f -+ nop -+1: jal 1f -+ nop -+1: jal 1f -+ nop -+1: move ra, k0 -+ li k0, 3 -+ mtc0 k0, $22 -+#endif - #if defined(CONFIG_32BIT) || defined(KBUILD_64BIT_SYM32) - lui k1, %hi(kernelsp) - #else -diff -Nur linux-2.6.33/arch/mips/Kconfig linux-lemote/arch/mips/Kconfig ---- linux-2.6.33/arch/mips/Kconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/Kconfig 2010-03-06 16:42:59.000000000 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/Kconfig linux-loongson/arch/mips/Kconfig +--- linux-2.6.34.orig/arch/mips/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/Kconfig 2010-05-27 18:12:28.582214052 +0200 @@ -180,7 +180,7 @@ config MACH_LOONGSON bool "Loongson family of machines" -- select SYS_SUPPORTS_ZBOOT_UART16550 -+ select SYS_SUPPORTS_ZBOOT +- select SYS_SUPPORTS_ZBOOT ++ select SYS_SUPPORTS_ZBOOT_UART16550 help This enables the support of Loongson family of machines. -@@ -1934,6 +1934,18 @@ +@@ -1075,6 +1075,8 @@ + bool "Loongson 2F" + depends on SYS_HAS_CPU_LOONGSON2F + select CPU_LOONGSON2 ++ select GENERIC_GPIO ++ select ARCH_REQUIRE_GPIOLIB + help + The Loongson 2F processor implements the MIPS III instruction set + with many extensions. +@@ -1965,6 +1967,18 @@ source "kernel/time/Kconfig" # @@ -2638,46 +3053,9 @@ diff -Nur linux-2.6.33/arch/mips/Kconfig linux-lemote/arch/mips/Kconfig # Timer Interrupt Frequency Configuration # -diff -Nur linux-2.6.33/arch/mips/Kconfig.debug linux-lemote/arch/mips/Kconfig.debug ---- linux-2.6.33/arch/mips/Kconfig.debug 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/Kconfig.debug 2010-03-06 16:42:59.000000000 +0100 -@@ -102,4 +102,22 @@ - arch/mips/include/asm/debug.h for debugging macros. - If unsure, say N. - -+config DEBUG_ZBOOT -+ bool "Enable compressed kernel support debugging" -+ depends on DEBUG_KERNEL && SYS_SUPPORTS_ZBOOT -+ help -+ If you want to add compressed kernel support to a new board, and the -+ board supports uart16550 compatible serial port, please select -+ SYS_SUPPORTS_ZBOOT_UART16550 for your board and enable this option to -+ debug it. -+ -+ If your board doesn't support uart16550 compatible serial port, you -+ can try to select SYS_SUPPORTS_ZBOOT and use the other methods to -+ debug it. for example, add a new serial port support just as -+ arch/mips/boot/compressed/uart-16550.c does. -+ -+ After the compressed kernel support works, please disable this option -+ to reduce the kernel image size and speed up the booting procedure a -+ little. -+ - endmenu -diff -Nur linux-2.6.33/arch/mips/kernel/cpufreq/loongson2_clock.c linux-lemote/arch/mips/kernel/cpufreq/loongson2_clock.c ---- linux-2.6.33/arch/mips/kernel/cpufreq/loongson2_clock.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/kernel/cpufreq/loongson2_clock.c 2010-03-06 16:43:01.000000000 +0100 -@@ -164,3 +164,7 @@ - spin_unlock_irqrestore(&loongson2_wait_lock, flags); - } - EXPORT_SYMBOL_GPL(loongson2_cpu_wait); -+ -+MODULE_AUTHOR("Yanhua "); -+MODULE_DESCRIPTION("cpuclock driver of Loongson2F"); -+MODULE_LICENSE("GPL"); -diff -Nur linux-2.6.33/arch/mips/kernel/csrc-r4k.c linux-lemote/arch/mips/kernel/csrc-r4k.c ---- linux-2.6.33/arch/mips/kernel/csrc-r4k.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/kernel/csrc-r4k.c 2010-03-06 16:43:01.000000000 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/kernel/csrc-r4k.c linux-loongson/arch/mips/kernel/csrc-r4k.c +--- linux-2.6.34.orig/arch/mips/kernel/csrc-r4k.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/kernel/csrc-r4k.c 2010-05-27 18:12:28.882214141 +0200 @@ -6,10 +6,66 @@ * Copyright (C) 2007 by Ralf Baechle */ @@ -2754,33 +3132,457 @@ diff -Nur linux-2.6.33/arch/mips/kernel/csrc-r4k.c linux-lemote/arch/mips/kernel /* Calculate a somewhat reasonable rating value */ clocksource_mips.rating = 200 + mips_hpt_frequency / 10000000; -diff -Nur linux-2.6.33/arch/mips/kernel/ftrace.c linux-lemote/arch/mips/kernel/ftrace.c ---- linux-2.6.33/arch/mips/kernel/ftrace.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/kernel/ftrace.c 2010-03-06 16:43:01.000000000 +0100 -@@ -3,7 +3,7 @@ +diff -Nur linux-2.6.34.orig/arch/mips/kernel/ftrace.c linux-loongson/arch/mips/kernel/ftrace.c +--- linux-2.6.34.orig/arch/mips/kernel/ftrace.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/kernel/ftrace.c 2010-05-27 18:12:28.882214141 +0200 +@@ -2,7 +2,7 @@ + * Code for replacing ftrace calls with jumps. * * Copyright (C) 2007-2008 Steven Rostedt - * Copyright (C) 2009 DSLab, Lanzhou University, China -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin +- * Copyright (C) 2009 DSLab, Lanzhou University, China ++ * Copyright (C) 2009, 2010 DSLab, Lanzhou University, China + * Author: Wu Zhangjin * * Thanks goes to Steven Rostedt for writing the original x86 version. - */ -diff -Nur linux-2.6.33/arch/mips/kernel/mcount.S linux-lemote/arch/mips/kernel/mcount.S ---- linux-2.6.33/arch/mips/kernel/mcount.S 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/kernel/mcount.S 2010-03-06 16:43:01.000000000 +0100 -@@ -6,7 +6,7 @@ +@@ -15,15 +15,51 @@ + #include + #include + #include ++#include ++ ++#define INSN_S_R_SP 0xafb00000 /* s{d,w} R, offset(sp) */ + + #ifdef CONFIG_DYNAMIC_FTRACE + +-#define JAL 0x0c000000 /* jump & link: ip --> ra, jump to target */ +-#define ADDR_MASK 0x03ffffff /* op_code|addr : 31...26|25 ....0 */ +-#define jump_insn_encode(op_code, addr) \ +- ((unsigned int)((op_code) | (((addr) >> 2) & ADDR_MASK))) ++/* Before linking, the following instructions are fixed. */ ++#ifdef CONFIG_CPU_LOONGSON2F ++#define INSN_NOP 0x00200825 /* or at, at, zero */ ++#else ++#define INSN_NOP 0x00000000 /* nop */ ++#endif ++#define INSN_B_1F_16 0x10000004 /* b 1f; offset = (16 >> 2) */ ++#define INSN_B_1F_20 0x10000005 /* b 1f; offset = (20 >> 2) */ ++ ++/* After linking, the following instructions are fixed. */ ++static unsigned int insn_jal_ftrace_caller __read_mostly; ++static unsigned int insn_lui_v1_hi16_mcount __read_mostly; ++static unsigned int insn_j_ftrace_graph_caller __maybe_unused __read_mostly; ++ ++/* The following instructions are encoded in the run-time */ ++/* insn: jal func; op_code|addr : 31...26|25 ....0 */ ++#define INSN_JAL(addr) \ ++ ((unsigned int)(0x0c000000 | (((addr) >> 2) & 0x03ffffff))) + +-static unsigned int ftrace_nop = 0x00000000; ++static inline void ftrace_dyn_arch_init_insns(void) ++{ ++ u32 *buf; ++ unsigned int v1; ++ ++ /* lui v1, hi16_mcount */ ++ v1 = 3; ++ buf = (u32 *)&insn_lui_v1_hi16_mcount; ++ UASM_i_LA_mostly(&buf, v1, MCOUNT_ADDR); ++ ++ /* jal (ftrace_caller + 8), jump over the first two instruction */ ++ buf = (u32 *)&insn_jal_ftrace_caller; ++ uasm_i_jal(&buf, (FTRACE_ADDR + 8)); ++ ++#ifdef CONFIG_FUNCTION_GRAPH_TRACER ++ /* j ftrace_graph_caller */ ++ buf = (u32 *)&insn_j_ftrace_graph_caller; ++ uasm_i_j(&buf, (unsigned long)ftrace_graph_caller); ++#endif ++} + + static int ftrace_modify_code(unsigned long ip, unsigned int new_code) + { +@@ -31,7 +67,6 @@ + + /* *(unsigned int *)ip = new_code; */ + safe_store_code(new_code, ip, faulted); +- + if (unlikely(faulted)) + return -EFAULT; + +@@ -40,84 +75,82 @@ + return 0; + } + +-static int lui_v1; +-static int jal_mcount; +- + int ftrace_make_nop(struct module *mod, + struct dyn_ftrace *rec, unsigned long addr) + { + unsigned int new; +- int faulted; + unsigned long ip = rec->ip; + +- /* We have compiled module with -mlong-calls, but compiled the kernel +- * without it, we need to cope with them respectively. */ +- if (ip & 0x40000000) { +- /* record it for ftrace_make_call */ +- if (lui_v1 == 0) { +- /* lui_v1 = *(unsigned int *)ip; */ +- safe_load_code(lui_v1, ip, faulted); +- +- if (unlikely(faulted)) +- return -EFAULT; +- } +- +- /* lui v1, hi_16bit_of_mcount --> b 1f (0x10000004) +- * addiu v1, v1, low_16bit_of_mcount +- * move at, ra +- * jalr v1 +- * nop +- * 1f: (ip + 12) +- */ +- new = 0x10000004; +- } else { +- /* record/calculate it for ftrace_make_call */ +- if (jal_mcount == 0) { +- /* We can record it directly like this: +- * jal_mcount = *(unsigned int *)ip; +- * Herein, jump over the first two nop instructions */ +- jal_mcount = jump_insn_encode(JAL, (MCOUNT_ADDR + 8)); +- } ++ /* ++ * We have compiled modules with -mlong-calls, but compiled kernel ++ * without it, therefore, need to cope with them respectively. ++ * ++ * For module: ++ * ++ * lui v1, hi16_mcount --> b 1f ++ * addiu v1, v1, lo16_mcount ++ * move at, ra ++ * jalr v1 ++ * nop ++ * 1f: (ip + 16) ++ * For kernel: ++ * ++ * move at, ra ++ * jal _mcount --> nop ++ * ++ * And with the -mmcount-ra-address option, the offset may be 20 for ++ * leaf fuction and 24 for non-leaf function. ++ */ + +- /* move at, ra +- * jalr v1 --> nop +- */ +- new = ftrace_nop; ++ if (!in_module(ip)) ++ new = INSN_NOP; ++ else { ++#if defined(KBUILD_MCOUNT_RA_ADDRESS) && defined(CONFIG_32BIT) ++ new = INSN_B_1F_20; ++#else ++ new = INSN_B_1F_16; ++#endif + } ++ + return ftrace_modify_code(ip, new); + } + +-static int modified; /* initialized as 0 by default */ +- + int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr) + { + unsigned int new; + unsigned long ip = rec->ip; + +- /* We just need to remove the "b ftrace_stub" at the fist time! */ +- if (modified == 0) { +- modified = 1; +- ftrace_modify_code(addr, ftrace_nop); +- } +- /* ip, module: 0xc0000000, kernel: 0x80000000 */ +- new = (ip & 0x40000000) ? lui_v1 : jal_mcount; ++ new = in_module(ip) ? insn_lui_v1_hi16_mcount : insn_jal_ftrace_caller; + + return ftrace_modify_code(ip, new); + } + +-#define FTRACE_CALL_IP ((unsigned long)(&ftrace_call)) +- + int ftrace_update_ftrace_func(ftrace_func_t func) + { + unsigned int new; + +- new = jump_insn_encode(JAL, (unsigned long)func); ++ new = INSN_JAL((unsigned long)func); + +- return ftrace_modify_code(FTRACE_CALL_IP, new); ++ return ftrace_modify_code((unsigned long)(&ftrace_call), new); + } + + int __init ftrace_dyn_arch_init(void *data) + { ++ ftrace_dyn_arch_init_insns(); ++ ++ /* ++ * We are safe to remove the "b ftrace_stub" for the current ++ * ftrace_caller() is almost empty (only the stack operations), and ++ * most importantly, the calling to mcount will be disabled later in ++ * ftrace_init(), then there is no 'big' overhead. And in the future, ++ * we are hoping the function_trace_stop is initialized as 1 then we ++ * can eventually remove that 'useless' "b ftrace_stub" and the ++ * following nop. Currently, although we can call ftrace_stop() to set ++ * function_trace_stop as 1, but it will change the behavior of the ++ * Function Tracer. ++ */ ++ ftrace_modify_code(MCOUNT_ADDR, INSN_NOP); ++ + /* The return code is retured via data */ + *(unsigned long *)data = 0; + +@@ -128,30 +161,24 @@ + #ifdef CONFIG_FUNCTION_GRAPH_TRACER + + #ifdef CONFIG_DYNAMIC_FTRACE +- + extern void ftrace_graph_call(void); +-#define JMP 0x08000000 /* jump to target directly */ +-#define CALL_FTRACE_GRAPH_CALLER \ +- jump_insn_encode(JMP, (unsigned long)(&ftrace_graph_caller)) + #define FTRACE_GRAPH_CALL_IP ((unsigned long)(&ftrace_graph_call)) + + int ftrace_enable_ftrace_graph_caller(void) + { + return ftrace_modify_code(FTRACE_GRAPH_CALL_IP, +- CALL_FTRACE_GRAPH_CALLER); ++ insn_j_ftrace_graph_caller); + } + + int ftrace_disable_ftrace_graph_caller(void) + { +- return ftrace_modify_code(FTRACE_GRAPH_CALL_IP, ftrace_nop); ++ return ftrace_modify_code(FTRACE_GRAPH_CALL_IP, INSN_NOP); + } +- + #endif /* !CONFIG_DYNAMIC_FTRACE */ + + #ifndef KBUILD_MCOUNT_RA_ADDRESS +-#define S_RA_SP (0xafbf << 16) /* s{d,w} ra, offset(sp) */ +-#define S_R_SP (0xafb0 << 16) /* s{d,w} R, offset(sp) */ +-#define OFFSET_MASK 0xffff /* stack offset range: 0 ~ PT_SIZE */ ++#define INSN_S_RA_SP 0xafbf0000 /* s{d,w} ra, offset(sp) */ ++#define STACK_OFFSET_MASK 0xffff /* stack offset range: 0 ~ PT_SIZE */ + + unsigned long ftrace_get_parent_addr(unsigned long self_addr, + unsigned long parent, +@@ -162,35 +189,35 @@ + unsigned int code; + int faulted; + +- /* in module or kernel? */ +- if (self_addr & 0x40000000) { +- /* module: move to the instruction "lui v1, HI_16BIT_OF_MCOUNT" */ +- ip = self_addr - 20; +- } else { +- /* kernel: move to the instruction "move ra, at" */ +- ip = self_addr - 12; +- } ++ /* ++ * For module, move the ip from calling site of mcount to the ++ * instruction "lui v1, hi_16bit_of_mcount"(offset is 20), but for ++ * kernel, move to the instruction "move ra, at"(offset is 12) ++ */ ++ ip = self_addr - (in_module(self_addr) ? 20 : 12); + +- /* search the text until finding the non-store instruction or "s{d,w} +- * ra, offset(sp)" instruction */ ++ /* ++ * search the text until finding the non-store instruction or "s{d,w} ++ * ra, offset(sp)" instruction ++ */ + do { + ip -= 4; + + /* get the code at "ip": code = *(unsigned int *)ip; */ + safe_load_code(code, ip, faulted); +- + if (unlikely(faulted)) + return 0; + +- /* If we hit the non-store instruction before finding where the ++ /* ++ * If we hit the non-store instruction before finding where the + * ra is stored, then this is a leaf function and it does not +- * store the ra on the stack. */ +- if ((code & S_R_SP) != S_R_SP) ++ * store the ra on the stack. ++ */ ++ if ((code & INSN_S_R_SP) != INSN_S_R_SP) + return parent_addr; ++ } while (((code & INSN_S_RA_SP) != INSN_S_RA_SP)); + +- } while (((code & S_RA_SP) != S_RA_SP)); +- +- sp = fp + (code & OFFSET_MASK); ++ sp = fp + (code & STACK_OFFSET_MASK); + + /* ra = *(unsigned long *)sp; */ + safe_load_stack(ra, sp, faulted); +@@ -201,8 +228,7 @@ + return sp; + return 0; + } +- +-#endif ++#endif /* !KBUILD_MCOUNT_RA_ADDRESS */ + + /* + * Hook the return address and push it in the stack of return addrs +@@ -211,16 +237,17 @@ + void prepare_ftrace_return(unsigned long *parent, unsigned long self_addr, + unsigned long fp) + { ++ int faulted; + unsigned long old; + struct ftrace_graph_ent trace; + unsigned long return_hooker = (unsigned long) + &return_to_handler; +- int faulted; + + if (unlikely(atomic_read(¤t->tracing_graph_pause))) + return; + +- /* "parent" is the stack address saved the return address of the caller ++ /* ++ * "parent" is the stack address saved the return address of the caller + * of _mcount. + * + * if the gcc < 4.5, a leaf function does not save the return address +@@ -241,12 +268,14 @@ + if (unlikely(faulted)) + goto out; + #ifndef KBUILD_MCOUNT_RA_ADDRESS +- parent = (unsigned long *)ftrace_get_parent_addr(self_addr, old, +- (unsigned long)parent, +- fp); +- /* If fails when getting the stack address of the non-leaf function's +- * ra, stop function graph tracer and return */ +- if (parent == 0) ++ parent = (unsigned long *)ftrace_get_parent_addr( ++ self_addr, old, (unsigned long)parent, fp); ++ ++ /* ++ * If fails on getting the stack address of the non-leaf function's ra, ++ * stop function graph tracer and return ++ */ ++ if (unlikely(parent == 0)) + goto out; + #endif + /* *parent = return_hooker; */ +diff -Nur linux-2.6.34.orig/arch/mips/kernel/mcount.S linux-loongson/arch/mips/kernel/mcount.S +--- linux-2.6.34.orig/arch/mips/kernel/mcount.S 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/kernel/mcount.S 2010-05-27 18:12:28.882214141 +0200 +@@ -6,6 +6,7 @@ * more details. * * Copyright (C) 2009 Lemote Inc. & DSLab, Lanzhou University, China -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin ++ * Copyright (C) 2010 DSLab, Lanzhou University, China + * Author: Wu Zhangjin */ - #include -diff -Nur linux-2.6.33/arch/mips/kernel/time.c linux-lemote/arch/mips/kernel/time.c ---- linux-2.6.33/arch/mips/kernel/time.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/kernel/time.c 2010-03-06 16:43:01.000000000 +0100 +@@ -45,8 +46,6 @@ + PTR_L a5, PT_R9(sp) + PTR_L a6, PT_R10(sp) + PTR_L a7, PT_R11(sp) +-#endif +-#ifdef CONFIG_64BIT + PTR_ADDIU sp, PT_SIZE + #else + PTR_ADDIU sp, (PT_SIZE + 8) +@@ -71,14 +70,14 @@ + + MCOUNT_SAVE_REGS + #ifdef KBUILD_MCOUNT_RA_ADDRESS +- PTR_S t0, PT_R12(sp) /* t0 saved the location of the return address(at) by -mmcount-ra-address */ ++ PTR_S $12, PT_R12(sp) /* save location of parent's return address */ + #endif + +- move a0, ra /* arg1: next ip, selfaddr */ ++ move a0, ra /* arg1: self return address */ + .globl ftrace_call + ftrace_call: + nop /* a placeholder for the call to a real tracing function */ +- move a1, AT /* arg2: the caller's next ip, parent */ ++ move a1, AT /* arg2: parent's return address */ + + #ifdef CONFIG_FUNCTION_GRAPH_TRACER + .globl ftrace_graph_call +@@ -119,9 +118,9 @@ + static_trace: + MCOUNT_SAVE_REGS + +- move a0, ra /* arg1: next ip, selfaddr */ ++ move a0, ra /* arg1: self return address */ + jalr t2 /* (1) call *ftrace_trace_function */ +- move a1, AT /* arg2: the caller's next ip, parent */ ++ move a1, AT /* arg2: parent's return address */ + + MCOUNT_RESTORE_REGS + .globl ftrace_stub +@@ -134,28 +133,36 @@ + #ifdef CONFIG_FUNCTION_GRAPH_TRACER + + NESTED(ftrace_graph_caller, PT_SIZE, ra) +-#ifdef CONFIG_DYNAMIC_FTRACE +- PTR_L a1, PT_R31(sp) /* load the original ra from the stack */ +-#ifdef KBUILD_MCOUNT_RA_ADDRESS +- PTR_L t0, PT_R12(sp) /* load the original t0 from the stack */ +-#endif +-#else ++#ifndef CONFIG_DYNAMIC_FTRACE + MCOUNT_SAVE_REGS +- move a1, ra /* arg2: next ip, selfaddr */ + #endif + ++ /* arg1: Get the location of the parent's return address */ + #ifdef KBUILD_MCOUNT_RA_ADDRESS +- bnez t0, 1f /* non-leaf func: t0 saved the location of the return address */ ++#ifdef CONFIG_DYNAMIC_FTRACE ++ PTR_L a0, PT_R12(sp) ++#else ++ move a0, $12 ++#endif ++ bnez a0, 1f /* arg1: non-leaf func: stored in $12 */ + nop +- PTR_LA t0, PT_R1(sp) /* leaf func: get the location of at(old ra) from our own stack */ +-1: move a0, t0 /* arg1: the location of the return address */ ++#endif ++ PTR_LA a0, PT_R1(sp) /* leaf func: the location in current stack */ ++ ++1: ++ /* arg2: Get self return address */ ++#ifdef CONFIG_DYNAMIC_FTRACE ++ PTR_L a1, PT_R31(sp) + #else +- PTR_LA a0, PT_R1(sp) /* arg1: &AT -> a0 */ ++ move a1, ra + #endif ++ + jal prepare_ftrace_return ++ ++ /* arg3: Get frame pointer of current stack */ + #ifdef CONFIG_FRAME_POINTER +- move a2, fp /* arg3: frame pointer */ +-#else ++ move a2, fp ++#else /* ! CONFIG_FRAME_POINTER */ + #ifdef CONFIG_64BIT + PTR_LA a2, PT_SIZE(sp) + #else +diff -Nur linux-2.6.34.orig/arch/mips/kernel/time.c linux-loongson/arch/mips/kernel/time.c +--- linux-2.6.34.orig/arch/mips/kernel/time.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/kernel/time.c 2010-05-27 18:12:28.892213481 +0200 @@ -119,6 +119,11 @@ void __init time_init(void) @@ -2793,18 +3595,10 @@ diff -Nur linux-2.6.33/arch/mips/kernel/time.c linux-lemote/arch/mips/kernel/tim plat_time_init(); if (!mips_clockevent_init() || !cpu_has_mfc0_count_bug()) -diff -Nur linux-2.6.33/arch/mips/loongson/common/cmdline.c linux-lemote/arch/mips/loongson/common/cmdline.c ---- linux-2.6.33/arch/mips/loongson/common/cmdline.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cmdline.c 2010-03-06 16:43:01.000000000 +0100 -@@ -10,23 +10,27 @@ - * Author: Fuxin Zhang, zhangfx@lemote.com - * - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the +diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cmdline.c linux-loongson/arch/mips/loongson/common/cmdline.c +--- linux-2.6.34.orig/arch/mips/loongson/common/cmdline.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/loongson/common/cmdline.c 2010-05-27 18:12:28.902214422 +0200 +@@ -17,10 +17,15 @@ * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. */ @@ -2813,22 +3607,14 @@ diff -Nur linux-2.6.33/arch/mips/loongson/common/cmdline.c linux-lemote/arch/mip #include --int prom_argc; --/* pmon passes arguments in 32bit pointers */ --int *_prom_argv; +/* the kernel command line copied from arcs_cmdline */ +char loongson_cmdline[COMMAND_LINE_SIZE]; +EXPORT_SYMBOL(loongson_cmdline); - ++ void __init prom_init_cmdline(void) { -+ int prom_argc; -+ /* pmon passes arguments in 32bit pointers */ -+ int *_prom_argv; - int i; - long l; - -@@ -51,4 +55,26 @@ + int prom_argc; +@@ -50,4 +55,26 @@ strcat(arcs_cmdline, " root=/dev/hda1"); prom_init_machtype(); @@ -2855,215 +3641,878 @@ diff -Nur linux-2.6.33/arch/mips/loongson/common/cmdline.c linux-lemote/arch/mip + /* copy arcs_cmdline into loongson_cmdline */ + strncpy(loongson_cmdline, arcs_cmdline, COMMAND_LINE_SIZE); } -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_acc.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_acc.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_acc.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_acc.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author : jlliu, liujl@lemote.com - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_ehci.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_ehci.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_ehci.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_ehci.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author : jlliu, liujl@lemote.com - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_ide.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_ide.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_ide.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_ide.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author : jlliu, liujl@lemote.com - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_isa.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_isa.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_isa.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_isa.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author : jlliu, liujl@lemote.com - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_mfgpt.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author: Yanhua, yanh@lemote.com - * - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu zhangjin, wuzj@lemote.com -+ * Author: Wu zhangjin, wuzhangjin@gmail.com - * - * Reference: AMD Geode(TM) CS5536 Companion Device Data Book - * -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_ohci.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_ohci.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_ohci.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_ohci.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author : jlliu, liujl@lemote.com - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_pci.c linux-lemote/arch/mips/loongson/common/cs5536/cs5536_pci.c ---- linux-2.6.33/arch/mips/loongson/common/cs5536/cs5536_pci.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/cs5536/cs5536_pci.c 2010-03-06 16:43:01.000000000 +0100 -@@ -5,7 +5,7 @@ - * Author : jlliu, liujl@lemote.com - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/loongson/common/early_printk.c linux-lemote/arch/mips/loongson/common/early_printk.c ---- linux-2.6.33/arch/mips/loongson/common/early_printk.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/early_printk.c 2010-03-06 16:43:01.000000000 +0100 -@@ -2,7 +2,7 @@ - * - * Copyright (c) 2009 Philippe Vachon - * Copyright (c) 2009 Lemote Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/loongson/common/env.c linux-lemote/arch/mips/loongson/common/env.c ---- linux-2.6.33/arch/mips/loongson/common/env.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/env.c 2010-03-06 16:43:01.000000000 +0100 -@@ -9,8 +9,8 @@ - * Copyright (C) 2007 Lemote Inc. & Insititute of Computing Technology - * Author: Fuxin Zhang, zhangfx@lemote.com - * -- * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Copyright (C) 2009 Lemote Inc. -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -@@ -23,13 +23,10 @@ +diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_acc.c linux-loongson/arch/mips/loongson/common/cs5536/cs5536_acc.c +--- linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_acc.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/loongson/common/cs5536/cs5536_acc.c 2010-05-27 18:12:28.902214422 +0200 +@@ -18,7 +18,7 @@ - #include + void pci_acc_write_reg(int reg, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; --unsigned long bus_clock, cpu_clock_freq; -+unsigned long cpu_clock_freq; - EXPORT_SYMBOL(cpu_clock_freq); - unsigned long memsize, highmemsize; + switch (reg) { + case PCI_COMMAND: +@@ -66,75 +66,73 @@ + u32 pci_acc_read_reg(int reg) + { + u32 hi, lo; +- u32 conf_data = 0; ++ u32 cfg = 0; --/* pmon passes arguments in 32bit pointers */ --int *_prom_envp; -- - #define parse_even_earlier(res, option, p) \ - do { \ - if (strncmp(option, (char *)p, strlen(option)) == 0) \ -@@ -39,6 +36,10 @@ + switch (reg) { + case PCI_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_ACC_DEVICE_ID, CS5536_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_ACC_DEVICE_ID, ++ CS5536_VENDOR_ID); + break; + case PCI_COMMAND: + _rdmsr(GLIU_MSR_REG(GLIU_IOD_BM1), &hi, &lo); + if (((lo & 0xfff00000) || (hi & 0x000000ff)) + && ((hi & 0xf0000000) == 0xa0000000)) +- conf_data |= PCI_COMMAND_IO; ++ cfg |= PCI_COMMAND_IO; + _rdmsr(GLIU_MSR_REG(GLIU_PAE), &hi, &lo); + if ((lo & 0x300) == 0x300) +- conf_data |= PCI_COMMAND_MASTER; ++ cfg |= PCI_COMMAND_MASTER; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_FAST_BACK; + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_PARITY; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_PARITY; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; + break; + case PCI_CLASS_REVISION: + _rdmsr(ACC_MSR_REG(ACC_CAP), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_ACC_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_ACC_CLASS_CODE << 8); + break; + case PCI_CACHE_LINE_SIZE: +- conf_data = +- CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, +- PCI_NORMAL_LATENCY_TIMER); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, ++ PCI_NORMAL_LATENCY_TIMER); + break; + case PCI_BAR0_REG: + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & SOFT_BAR_ACC_FLAG) { +- conf_data = CS5536_ACC_RANGE | ++ cfg = CS5536_ACC_RANGE | + PCI_BASE_ADDRESS_SPACE_IO; + lo &= ~SOFT_BAR_ACC_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(GLIU_MSR_REG(GLIU_IOD_BM1), &hi, &lo); +- conf_data = (hi & 0x000000ff) << 12; +- conf_data |= (lo & 0xfff00000) >> 20; +- conf_data |= 0x01; +- conf_data &= ~0x02; ++ cfg = (hi & 0x000000ff) << 12; ++ cfg |= (lo & 0xfff00000) >> 20; ++ cfg |= 0x01; ++ cfg &= ~0x02; + } + break; + case PCI_CARDBUS_CIS: +- conf_data = PCI_CARDBUS_CIS_POINTER; ++ cfg = PCI_CARDBUS_CIS_POINTER; + break; + case PCI_SUBSYSTEM_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_ACC_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_ACC_SUB_ID, ++ CS5536_SUB_VENDOR_ID); + break; + case PCI_ROM_ADDRESS: +- conf_data = PCI_EXPANSION_ROM_BAR; ++ cfg = PCI_EXPANSION_ROM_BAR; + break; + case PCI_CAPABILITY_LIST: +- conf_data = PCI_CAPLIST_USB_POINTER; ++ cfg = PCI_CAPLIST_USB_POINTER; + break; + case PCI_INTERRUPT_LINE: +- conf_data = +- CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_ACC_INTR); ++ cfg = CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_ACC_INTR); + break; + default: + break; + } + +- return conf_data; ++ return cfg; + } +diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ehci.c linux-loongson/arch/mips/loongson/common/cs5536/cs5536_ehci.c +--- linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ehci.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/loongson/common/cs5536/cs5536_ehci.c 2010-05-27 18:12:28.902214422 +0200 +@@ -18,7 +18,7 @@ - void __init prom_init_env(void) + void pci_ehci_write_reg(int reg, u32 value) { -+ /* pmon passes arguments in 32bit pointers */ -+ int *_prom_envp; -+ unsigned long bus_clock; -+ unsigned int processor_id; - long l; +- u32 hi = 0, lo = value; ++ u32 hi, lo; + + switch (reg) { + case PCI_COMMAND: +@@ -49,6 +49,8 @@ + lo |= SOFT_BAR_EHCI_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else if ((value & 0x01) == 0x00) { ++ _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); ++ lo = value; + _wrmsr(USB_MSR_REG(USB_EHCI), hi, lo); + + value &= 0xfffffff0; +@@ -76,83 +78,81 @@ + + u32 pci_ehci_read_reg(int reg) + { +- u32 conf_data = 0; ++ u32 cfg = 0; + u32 hi, lo; - /* firmware arguments are initialized in head.S */ -@@ -55,6 +56,22 @@ + switch (reg) { + case PCI_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_EHCI_DEVICE_ID, CS5536_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_EHCI_DEVICE_ID, ++ CS5536_VENDOR_ID); + break; + case PCI_COMMAND: + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); + if (hi & PCI_COMMAND_MASTER) +- conf_data |= PCI_COMMAND_MASTER; ++ cfg |= PCI_COMMAND_MASTER; + if (hi & PCI_COMMAND_MEMORY) +- conf_data |= PCI_COMMAND_MEMORY; ++ cfg |= PCI_COMMAND_MEMORY; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_FAST_BACK; + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_PARITY; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_PARITY; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; + break; + case PCI_CLASS_REVISION: + _rdmsr(USB_MSR_REG(USB_CAP), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_EHCI_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_EHCI_CLASS_CODE << 8); + break; + case PCI_CACHE_LINE_SIZE: +- conf_data = +- CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, +- PCI_NORMAL_LATENCY_TIMER); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, ++ PCI_NORMAL_LATENCY_TIMER); + break; + case PCI_BAR0_REG: + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & SOFT_BAR_EHCI_FLAG) { +- conf_data = CS5536_EHCI_RANGE | ++ cfg = CS5536_EHCI_RANGE | + PCI_BASE_ADDRESS_SPACE_MEMORY; + lo &= ~SOFT_BAR_EHCI_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); +- conf_data = lo & 0xfffff000; ++ cfg = lo & 0xfffff000; + } + break; + case PCI_CARDBUS_CIS: +- conf_data = PCI_CARDBUS_CIS_POINTER; ++ cfg = PCI_CARDBUS_CIS_POINTER; + break; + case PCI_SUBSYSTEM_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_EHCI_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_EHCI_SUB_ID, ++ CS5536_SUB_VENDOR_ID); + break; + case PCI_ROM_ADDRESS: +- conf_data = PCI_EXPANSION_ROM_BAR; ++ cfg = PCI_EXPANSION_ROM_BAR; + break; + case PCI_CAPABILITY_LIST: +- conf_data = PCI_CAPLIST_USB_POINTER; ++ cfg = PCI_CAPLIST_USB_POINTER; + break; + case PCI_INTERRUPT_LINE: +- conf_data = +- CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR); ++ cfg = CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR); + break; + case PCI_EHCI_LEGSMIEN_REG: + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); +- conf_data = (hi & 0x003f0000) >> 16; ++ cfg = (hi & 0x003f0000) >> 16; + break; + case PCI_EHCI_LEGSMISTS_REG: + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); +- conf_data = (hi & 0x3f000000) >> 24; ++ cfg = (hi & 0x3f000000) >> 24; + break; + case PCI_EHCI_FLADJ_REG: + _rdmsr(USB_MSR_REG(USB_EHCI), &hi, &lo); +- conf_data = hi & 0x00003f00; ++ cfg = hi & 0x00003f00; + break; + default: + break; } - if (memsize == 0) - memsize = 256; -+ if (bus_clock == 0) -+ bus_clock = 66000000; -+ if (cpu_clock_freq == 0) { -+ processor_id = (¤t_cpu_data)->processor_id; -+ switch (processor_id & PRID_REV_MASK) { -+ case PRID_REV_LOONGSON2E: -+ cpu_clock_freq = 533080000; -+ break; -+ case PRID_REV_LOONGSON2F: -+ cpu_clock_freq = 797000000; -+ break; -+ default: -+ cpu_clock_freq = 100000000; -+ break; + +- return conf_data; ++ return cfg; + } +diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ide.c linux-loongson/arch/mips/loongson/common/cs5536/cs5536_ide.c +--- linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ide.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/loongson/common/cs5536/cs5536_ide.c 2010-05-27 18:12:28.902214422 +0200 +@@ -18,7 +18,7 @@ + + void pci_ide_write_reg(int reg, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; + + switch (reg) { + case PCI_COMMAND: +@@ -51,6 +51,7 @@ + lo |= SOFT_BAR_IDE_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else if (value & 0x01) { ++ _rdmsr(IDE_MSR_REG(IDE_IO_BAR), &hi, &lo); + lo = (value & 0xfffffff0) | 0x1; + _wrmsr(IDE_MSR_REG(IDE_IO_BAR), hi, lo); + +@@ -65,21 +66,22 @@ + _rdmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), &hi, &lo); + lo |= 0x01; + _wrmsr(DIVIL_MSR_REG(DIVIL_BALL_OPTS), hi, lo); +- } else ++ } else { ++ _rdmsr(IDE_MSR_REG(IDE_CFG), &hi, &lo); ++ lo = value; + _wrmsr(IDE_MSR_REG(IDE_CFG), hi, lo); + } -+ } + break; +- case PCI_IDE_DTC_REG: +- _wrmsr(IDE_MSR_REG(IDE_DTC), hi, lo); +- break; +- case PCI_IDE_CAST_REG: +- _wrmsr(IDE_MSR_REG(IDE_CAST), hi, lo); +- break; +- case PCI_IDE_ETC_REG: +- _wrmsr(IDE_MSR_REG(IDE_ETC), hi, lo); +- break; +- case PCI_IDE_PM_REG: +- _wrmsr(IDE_MSR_REG(IDE_INTERNAL_PM), hi, lo); +- break; ++#define SET_PCI_IDE_REG(r) \ ++ case PCI_IDE_##r##_REG: \ ++ _rdmsr(IDE_MSR_REG(IDE_##r), &hi, &lo); \ ++ lo = value; \ ++ _wrmsr(IDE_MSR_REG(IDE_##r), hi, lo); \ ++ break; ++ SET_PCI_IDE_REG(DTC) ++ SET_PCI_IDE_REG(CAST) ++ SET_PCI_IDE_REG(ETC) ++ SET_PCI_IDE_REG(PM) + default: + break; + } +@@ -87,93 +89,82 @@ + + u32 pci_ide_read_reg(int reg) + { +- u32 conf_data = 0; ++ u32 cfg = 0; + u32 hi, lo; + + switch (reg) { + case PCI_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_IDE_DEVICE_ID, CS5536_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_IDE_DEVICE_ID, ++ CS5536_VENDOR_ID); + break; + case PCI_COMMAND: + _rdmsr(IDE_MSR_REG(IDE_IO_BAR), &hi, &lo); + if (lo & 0xfffffff0) +- conf_data |= PCI_COMMAND_IO; ++ cfg |= PCI_COMMAND_IO; + _rdmsr(GLIU_MSR_REG(GLIU_PAE), &hi, &lo); + if ((lo & 0x30) == 0x30) +- conf_data |= PCI_COMMAND_MASTER; ++ cfg |= PCI_COMMAND_MASTER; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_FAST_BACK; + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_PARITY; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_PARITY; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; + break; + case PCI_CLASS_REVISION: + _rdmsr(IDE_MSR_REG(IDE_CAP), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_IDE_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_IDE_CLASS_CODE << 8); + break; + case PCI_CACHE_LINE_SIZE: + _rdmsr(SB_MSR_REG(SB_CTRL), &hi, &lo); + hi &= 0x000000f8; +- conf_data = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, hi); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, hi); + break; + case PCI_BAR4_REG: + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & SOFT_BAR_IDE_FLAG) { +- conf_data = CS5536_IDE_RANGE | ++ cfg = CS5536_IDE_RANGE | + PCI_BASE_ADDRESS_SPACE_IO; + lo &= ~SOFT_BAR_IDE_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(IDE_MSR_REG(IDE_IO_BAR), &hi, &lo); +- conf_data = lo & 0xfffffff0; +- conf_data |= 0x01; +- conf_data &= ~0x02; ++ cfg = lo & 0xfffffff0; ++ cfg |= 0x01; ++ cfg &= ~0x02; + } + break; + case PCI_CARDBUS_CIS: +- conf_data = PCI_CARDBUS_CIS_POINTER; ++ cfg = PCI_CARDBUS_CIS_POINTER; + break; + case PCI_SUBSYSTEM_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_IDE_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_IDE_SUB_ID, ++ CS5536_SUB_VENDOR_ID); + break; + case PCI_ROM_ADDRESS: +- conf_data = PCI_EXPANSION_ROM_BAR; ++ cfg = PCI_EXPANSION_ROM_BAR; + break; + case PCI_CAPABILITY_LIST: +- conf_data = PCI_CAPLIST_POINTER; ++ cfg = PCI_CAPLIST_POINTER; + break; + case PCI_INTERRUPT_LINE: +- conf_data = +- CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_IDE_INTR); +- break; +- case PCI_IDE_CFG_REG: +- _rdmsr(IDE_MSR_REG(IDE_CFG), &hi, &lo); +- conf_data = lo; +- break; +- case PCI_IDE_DTC_REG: +- _rdmsr(IDE_MSR_REG(IDE_DTC), &hi, &lo); +- conf_data = lo; +- break; +- case PCI_IDE_CAST_REG: +- _rdmsr(IDE_MSR_REG(IDE_CAST), &hi, &lo); +- conf_data = lo; +- break; +- case PCI_IDE_ETC_REG: +- _rdmsr(IDE_MSR_REG(IDE_ETC), &hi, &lo); +- conf_data = lo; +- case PCI_IDE_PM_REG: +- _rdmsr(IDE_MSR_REG(IDE_INTERNAL_PM), &hi, &lo); +- conf_data = lo; ++ cfg = CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_IDE_INTR); + break; ++#define GET_PCI_IDE_REG(r) \ ++ case PCI_IDE_##r##_REG: \ ++ _rdmsr(IDE_MSR_REG(IDE_##r), &hi, &cfg); \ ++ break; ++ GET_PCI_IDE_REG(CFG) ++ GET_PCI_IDE_REG(DTC) ++ GET_PCI_IDE_REG(CAST) ++ GET_PCI_IDE_REG(ETC) ++ GET_PCI_IDE_REG(PM) + default: + break; + } + +- return conf_data; ++ return cfg; + } +diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_isa.c linux-loongson/arch/mips/loongson/common/cs5536/cs5536_isa.c +--- linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_isa.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/loongson/common/cs5536/cs5536_isa.c 2010-05-27 18:12:28.902214422 +0200 +@@ -61,7 +61,7 @@ + for (offset = DIVIL_LBAR_SMB; offset <= DIVIL_LBAR_PMS; offset++) { + _rdmsr(DIVIL_MSR_REG(offset), &hi, &lo); + hi |= 0x01; +- _wrmsr(DIVIL_MSR_REG(DIVIL_LBAR_SMB), hi, lo); ++ _wrmsr(DIVIL_MSR_REG(offset), hi, lo); + } + } + +@@ -76,7 +76,7 @@ + for (offset = DIVIL_LBAR_SMB; offset <= DIVIL_LBAR_PMS; offset++) { + _rdmsr(DIVIL_MSR_REG(offset), &hi, &lo); + hi &= ~0x01; +- _wrmsr(DIVIL_MSR_REG(DIVIL_LBAR_SMB), hi, lo); ++ _wrmsr(DIVIL_MSR_REG(offset), hi, lo); + } + } + +@@ -86,7 +86,7 @@ + + void pci_isa_write_bar(int n, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; + + if (value == PCI_BAR_RANGE_MASK) { + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); +@@ -95,7 +95,7 @@ + } else if (value & 0x01) { + /* NATIVE reg */ + hi = 0x0000f001; +- lo &= bar_space_range[n]; ++ lo = value & bar_space_range[n]; + _wrmsr(divil_msr_reg[n], hi, lo); + + /* RCONFx is 4bytes in units for I/O space */ +@@ -112,21 +112,21 @@ + + u32 pci_isa_read_bar(int n) + { +- u32 conf_data = 0; ++ u32 cfg = 0; + u32 hi, lo; + + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & soft_bar_flag[n]) { +- conf_data = bar_space_range[n] | PCI_BASE_ADDRESS_SPACE_IO; ++ cfg = bar_space_range[n] | PCI_BASE_ADDRESS_SPACE_IO; + lo &= ~soft_bar_flag[n]; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(divil_msr_reg[n], &hi, &lo); +- conf_data = lo & bar_space_range[n]; +- conf_data |= 0x01; +- conf_data &= ~0x02; ++ cfg = lo & bar_space_range[n]; ++ cfg |= 0x01; ++ cfg &= ~0x02; + } +- return conf_data; ++ return cfg; + } - pr_info("busclock=%ld, cpuclock=%ld, memsize=%ld, highmemsize=%ld\n", - bus_clock, cpu_clock_freq, memsize, highmemsize); -diff -Nur linux-2.6.33/arch/mips/loongson/common/init.c linux-lemote/arch/mips/loongson/common/init.c ---- linux-2.6.33/arch/mips/loongson/common/init.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/init.c 2010-03-06 16:43:01.000000000 +0100 -@@ -1,6 +1,6 @@ - /* - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/loongson/common/machtype.c linux-lemote/arch/mips/loongson/common/machtype.c ---- linux-2.6.33/arch/mips/loongson/common/machtype.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/machtype.c 2010-03-06 16:43:01.000000000 +0100 -@@ -1,6 +1,6 @@ /* -- * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Copyright (C) 2009 Lemote Inc. -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * Copyright (c) 2009 Zhang Le - * -@@ -35,6 +35,10 @@ - return system_types[mips_machtype]; +@@ -136,7 +136,7 @@ + */ + void pci_isa_write_reg(int reg, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; + u32 temp; + + switch (reg) { +@@ -230,45 +230,45 @@ + */ + u32 pci_isa_read_reg(int reg) + { +- u32 conf_data = 0; ++ u32 cfg = 0; + u32 hi, lo; + + switch (reg) { + case PCI_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_ISA_DEVICE_ID, CS5536_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_ISA_DEVICE_ID, ++ CS5536_VENDOR_ID); + break; + case PCI_COMMAND: + /* we just check the first LBAR for the IO enable bit, */ + /* maybe we should changed later. */ + _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_SMB), &hi, &lo); + if (hi & 0x01) +- conf_data |= PCI_COMMAND_IO; ++ cfg |= PCI_COMMAND_IO; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_FAST_BACK; + + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_TAS_ERR_FLAG) +- conf_data |= PCI_STATUS_SIG_TARGET_ABORT; ++ cfg |= PCI_STATUS_SIG_TARGET_ABORT; + if (lo & SB_TAR_ERR_FLAG) +- conf_data |= PCI_STATUS_REC_TARGET_ABORT; ++ cfg |= PCI_STATUS_REC_TARGET_ABORT; + if (lo & SB_MAR_ERR_FLAG) +- conf_data |= PCI_STATUS_REC_MASTER_ABORT; ++ cfg |= PCI_STATUS_REC_MASTER_ABORT; + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_DETECTED_PARITY; ++ cfg |= PCI_STATUS_DETECTED_PARITY; + break; + case PCI_CLASS_REVISION: + _rdmsr(GLCP_MSR_REG(GLCP_CHIP_REV_ID), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_ISA_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_ISA_CLASS_CODE << 8); + break; + case PCI_CACHE_LINE_SIZE: + _rdmsr(SB_MSR_REG(SB_CTRL), &hi, &lo); + hi &= 0x000000f8; +- conf_data = CFG_PCI_CACHE_LINE_SIZE(PCI_BRIDGE_HEADER_TYPE, hi); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_BRIDGE_HEADER_TYPE, hi); + break; + /* + * we only use the LBAR of DIVIL, no RCONF used. +@@ -292,25 +292,25 @@ + return pci_isa_read_bar(5); + break; + case PCI_CARDBUS_CIS: +- conf_data = PCI_CARDBUS_CIS_POINTER; ++ cfg = PCI_CARDBUS_CIS_POINTER; + break; + case PCI_SUBSYSTEM_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_ISA_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_ISA_SUB_ID, ++ CS5536_SUB_VENDOR_ID); + break; + case PCI_ROM_ADDRESS: +- conf_data = PCI_EXPANSION_ROM_BAR; ++ cfg = PCI_EXPANSION_ROM_BAR; + break; + case PCI_CAPABILITY_LIST: +- conf_data = PCI_CAPLIST_POINTER; ++ cfg = PCI_CAPLIST_POINTER; + break; + case PCI_INTERRUPT_LINE: + /* no interrupt used here */ +- conf_data = CFG_PCI_INTERRUPT_LINE(0x00, 0x00); ++ cfg = CFG_PCI_INTERRUPT_LINE(0x00, 0x00); + break; + default: + break; + } + +- return conf_data; ++ return cfg; } +diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ohci.c linux-loongson/arch/mips/loongson/common/cs5536/cs5536_ohci.c +--- linux-2.6.34.orig/arch/mips/loongson/common/cs5536/cs5536_ohci.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/loongson/common/cs5536/cs5536_ohci.c 2010-05-27 18:12:28.902214422 +0200 +@@ -18,7 +18,7 @@ + + void pci_ohci_write_reg(int reg, u32 value) + { +- u32 hi = 0, lo = value; ++ u32 hi, lo; + + switch (reg) { + case PCI_COMMAND: +@@ -49,6 +49,8 @@ + lo |= SOFT_BAR_OHCI_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else if ((value & 0x01) == 0x00) { ++ _rdmsr(USB_MSR_REG(USB_OHCI), &hi, &lo); ++ lo = value; + _wrmsr(USB_MSR_REG(USB_OHCI), hi, lo); + + value &= 0xfffffff0; +@@ -71,77 +73,75 @@ + + u32 pci_ohci_read_reg(int reg) + { +- u32 conf_data = 0; ++ u32 cfg = 0; + u32 hi, lo; + + switch (reg) { + case PCI_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_OHCI_DEVICE_ID, CS5536_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_OHCI_DEVICE_ID, ++ CS5536_VENDOR_ID); + break; + case PCI_COMMAND: + _rdmsr(USB_MSR_REG(USB_OHCI), &hi, &lo); + if (hi & PCI_COMMAND_MASTER) +- conf_data |= PCI_COMMAND_MASTER; ++ cfg |= PCI_COMMAND_MASTER; + if (hi & PCI_COMMAND_MEMORY) +- conf_data |= PCI_COMMAND_MEMORY; ++ cfg |= PCI_COMMAND_MEMORY; + break; + case PCI_STATUS: +- conf_data |= PCI_STATUS_66MHZ; +- conf_data |= PCI_STATUS_FAST_BACK; ++ cfg |= PCI_STATUS_66MHZ; ++ cfg |= PCI_STATUS_FAST_BACK; + _rdmsr(SB_MSR_REG(SB_ERROR), &hi, &lo); + if (lo & SB_PARE_ERR_FLAG) +- conf_data |= PCI_STATUS_PARITY; +- conf_data |= PCI_STATUS_DEVSEL_MEDIUM; ++ cfg |= PCI_STATUS_PARITY; ++ cfg |= PCI_STATUS_DEVSEL_MEDIUM; + break; + case PCI_CLASS_REVISION: + _rdmsr(USB_MSR_REG(USB_CAP), &hi, &lo); +- conf_data = lo & 0x000000ff; +- conf_data |= (CS5536_OHCI_CLASS_CODE << 8); ++ cfg = lo & 0x000000ff; ++ cfg |= (CS5536_OHCI_CLASS_CODE << 8); + break; + case PCI_CACHE_LINE_SIZE: +- conf_data = +- CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, +- PCI_NORMAL_LATENCY_TIMER); ++ cfg = CFG_PCI_CACHE_LINE_SIZE(PCI_NORMAL_HEADER_TYPE, ++ PCI_NORMAL_LATENCY_TIMER); + break; + case PCI_BAR0_REG: + _rdmsr(GLCP_MSR_REG(GLCP_SOFT_COM), &hi, &lo); + if (lo & SOFT_BAR_OHCI_FLAG) { +- conf_data = CS5536_OHCI_RANGE | ++ cfg = CS5536_OHCI_RANGE | + PCI_BASE_ADDRESS_SPACE_MEMORY; + lo &= ~SOFT_BAR_OHCI_FLAG; + _wrmsr(GLCP_MSR_REG(GLCP_SOFT_COM), hi, lo); + } else { + _rdmsr(USB_MSR_REG(USB_OHCI), &hi, &lo); +- conf_data = lo & 0xffffff00; +- conf_data &= ~0x0000000f; /* 32bit mem */ ++ cfg = lo & 0xffffff00; ++ cfg &= ~0x0000000f; /* 32bit mem */ + } + break; + case PCI_CARDBUS_CIS: +- conf_data = PCI_CARDBUS_CIS_POINTER; ++ cfg = PCI_CARDBUS_CIS_POINTER; + break; + case PCI_SUBSYSTEM_VENDOR_ID: +- conf_data = +- CFG_PCI_VENDOR_ID(CS5536_OHCI_SUB_ID, CS5536_SUB_VENDOR_ID); ++ cfg = CFG_PCI_VENDOR_ID(CS5536_OHCI_SUB_ID, ++ CS5536_SUB_VENDOR_ID); + break; + case PCI_ROM_ADDRESS: +- conf_data = PCI_EXPANSION_ROM_BAR; ++ cfg = PCI_EXPANSION_ROM_BAR; + break; + case PCI_CAPABILITY_LIST: +- conf_data = PCI_CAPLIST_USB_POINTER; ++ cfg = PCI_CAPLIST_USB_POINTER; + break; + case PCI_INTERRUPT_LINE: +- conf_data = +- CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR); ++ cfg = CFG_PCI_INTERRUPT_LINE(PCI_DEFAULT_PIN, CS5536_USB_INTR); + break; + case PCI_OHCI_INT_REG: + _rdmsr(DIVIL_MSR_REG(PIC_YSEL_LOW), &hi, &lo); + if ((lo & 0x00000f00) == CS5536_USB_INTR) +- conf_data = 1; ++ cfg = 1; + break; + default: + break; + } -+void __weak __init mach_prom_init_machtype(void) +- return conf_data; ++ return cfg; + } +diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/gpio.c linux-loongson/arch/mips/loongson/common/gpio.c +--- linux-2.6.34.orig/arch/mips/loongson/common/gpio.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/arch/mips/loongson/common/gpio.c 2010-05-27 18:12:28.902214422 +0200 +@@ -0,0 +1,139 @@ ++/* ++ * STLS2F GPIO Support ++ * ++ * Copyright (c) 2008 Richard Liu, STMicroelectronics ++ * Copyright (c) 2008-2010 Arnaud Patard ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#define STLS2F_N_GPIO 4 ++#define STLS2F_GPIO_IN_OFFSET 16 ++ ++static DEFINE_SPINLOCK(gpio_lock); ++ ++int gpio_get_value(unsigned gpio) +{ ++ u32 val; ++ u32 mask; ++ ++ if (gpio >= STLS2F_N_GPIO) ++ return __gpio_get_value(gpio); ++ ++ mask = 1 << (gpio + STLS2F_GPIO_IN_OFFSET); ++ spin_lock(&gpio_lock); ++ val = LOONGSON_GPIODATA; ++ spin_unlock(&gpio_lock); ++ ++ return ((val & mask) != 0); +} ++EXPORT_SYMBOL(gpio_get_value); + - void __init prom_init_machtype(void) - { - char *p, str[MACHTYPE_LEN]; -@@ -43,8 +47,10 @@ - mips_machtype = LOONGSON_MACHTYPE; - - p = strstr(arcs_cmdline, "machtype="); -- if (!p) -+ if (!p) { -+ mach_prom_init_machtype(); - return; ++void gpio_set_value(unsigned gpio, int state) ++{ ++ u32 val; ++ u32 mask; ++ ++ if (gpio >= STLS2F_N_GPIO) { ++ __gpio_set_value(gpio, state); ++ return ; + } - p += strlen("machtype="); - strncpy(str, p, MACHTYPE_LEN); - p = strstr(str, " "); -diff -Nur linux-2.6.33/arch/mips/loongson/common/Makefile linux-lemote/arch/mips/loongson/common/Makefile ---- linux-2.6.33/arch/mips/loongson/common/Makefile 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/Makefile 2010-03-06 16:43:01.000000000 +0100 -@@ -23,3 +23,9 @@ ++ ++ mask = 1 << gpio; ++ ++ spin_lock(&gpio_lock); ++ val = LOONGSON_GPIODATA; ++ if (state) ++ val |= mask; ++ else ++ val &= (~mask); ++ LOONGSON_GPIODATA = val; ++ spin_unlock(&gpio_lock); ++} ++EXPORT_SYMBOL(gpio_set_value); ++ ++int gpio_cansleep(unsigned gpio) ++{ ++ if (gpio < STLS2F_N_GPIO) ++ return 0; ++ else ++ return __gpio_cansleep(gpio); ++} ++EXPORT_SYMBOL(gpio_cansleep); ++ ++static int ls2f_gpio_direction_input(struct gpio_chip *chip, unsigned gpio) ++{ ++ u32 temp; ++ u32 mask; ++ ++ if (gpio >= STLS2F_N_GPIO) ++ return -EINVAL; ++ ++ spin_lock(&gpio_lock); ++ mask = 1 << gpio; ++ temp = LOONGSON_GPIOIE; ++ temp |= mask; ++ LOONGSON_GPIOIE = temp; ++ spin_unlock(&gpio_lock); ++ ++ return 0; ++} ++ ++static int ls2f_gpio_direction_output(struct gpio_chip *chip, ++ unsigned gpio, int level) ++{ ++ u32 temp; ++ u32 mask; ++ ++ if (gpio >= STLS2F_N_GPIO) ++ return -EINVAL; ++ ++ gpio_set_value(gpio, level); ++ spin_lock(&gpio_lock); ++ mask = 1 << gpio; ++ temp = LOONGSON_GPIOIE; ++ temp &= (~mask); ++ LOONGSON_GPIOIE = temp; ++ spin_unlock(&gpio_lock); ++ ++ return 0; ++} ++ ++static int ls2f_gpio_get_value(struct gpio_chip *chip, unsigned gpio) ++{ ++ return gpio_get_value(gpio); ++} ++ ++static void ls2f_gpio_set_value(struct gpio_chip *chip, ++ unsigned gpio, int value) ++{ ++ gpio_set_value(gpio, value); ++} ++ ++static struct gpio_chip ls2f_chip = { ++ .label = "ls2f", ++ .direction_input = ls2f_gpio_direction_input, ++ .get = ls2f_gpio_get_value, ++ .direction_output = ls2f_gpio_direction_output, ++ .set = ls2f_gpio_set_value, ++ .base = 0, ++ .ngpio = STLS2F_N_GPIO, ++}; ++ ++static int __init ls2f_gpio_setup(void) ++{ ++ return gpiochip_add(&ls2f_chip); ++} ++arch_initcall(ls2f_gpio_setup); +diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/Makefile linux-loongson/arch/mips/loongson/common/Makefile +--- linux-2.6.34.orig/arch/mips/loongson/common/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/loongson/common/Makefile 2010-05-27 18:12:28.902214422 +0200 +@@ -4,6 +4,7 @@ + + obj-y += setup.o init.o cmdline.o env.o time.o reset.o irq.o \ + pci.o bonito-irq.o mem.o machtype.o platform.o ++obj-$(CONFIG_GENERIC_GPIO) += gpio.o + + # + # Serial port support +@@ -23,3 +24,9 @@ # obj-$(CONFIG_LOONGSON_SUSPEND) += pm.o @@ -3073,27 +4522,9 @@ diff -Nur linux-2.6.33/arch/mips/loongson/common/Makefile linux-lemote/arch/mips +# please enable CONFIG_RTC_DRV_CMOS +# +obj-$(CONFIG_RTC_DRV_CMOS) += rtc.o -diff -Nur linux-2.6.33/arch/mips/loongson/common/mem.c linux-lemote/arch/mips/loongson/common/mem.c ---- linux-2.6.33/arch/mips/loongson/common/mem.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/mem.c 2010-03-06 16:43:01.000000000 +0100 -@@ -16,10 +16,11 @@ - - void __init prom_init_memory(void) - { -- add_memory_region(0x0, (memsize << 20), BOOT_MEM_RAM); -+ add_memory_region(0x0, (memsize << 20), BOOT_MEM_RAM); -+ -+ add_memory_region(memsize << 20, LOONGSON_PCI_MEM_START - (memsize << -+ 20), BOOT_MEM_RESERVED); - -- add_memory_region(memsize << 20, LOONGSON_PCI_MEM_START - (memsize << -- 20), BOOT_MEM_RESERVED); - #ifdef CONFIG_CPU_SUPPORTS_ADDRWINCFG - { - int bit; -diff -Nur linux-2.6.33/arch/mips/loongson/common/mtd.c linux-lemote/arch/mips/loongson/common/mtd.c ---- linux-2.6.33/arch/mips/loongson/common/mtd.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/mtd.c 2010-03-06 16:43:01.000000000 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/mtd.c linux-loongson/arch/mips/loongson/common/mtd.c +--- linux-2.6.34.orig/arch/mips/loongson/common/mtd.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/arch/mips/loongson/common/mtd.c 2010-05-27 18:12:28.902214422 +0200 @@ -0,0 +1,91 @@ +/* + * Driver for flushing/dumping ROM of PMON on loongson family machines @@ -3186,796 +4617,3365 @@ diff -Nur linux-2.6.33/arch/mips/loongson/common/mtd.c linux-lemote/arch/mips/lo +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Yanhua "); +MODULE_DESCRIPTION("MTD driver for pmon flushing/dumping"); -diff -Nur linux-2.6.33/arch/mips/loongson/common/platform.c linux-lemote/arch/mips/loongson/common/platform.c ---- linux-2.6.33/arch/mips/loongson/common/platform.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/platform.c 2010-03-06 16:43:01.000000000 +0100 -@@ -1,6 +1,6 @@ - /* - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/loongson/common/pm.c linux-lemote/arch/mips/loongson/common/pm.c ---- linux-2.6.33/arch/mips/loongson/common/pm.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/pm.c 2010-03-06 16:43:01.000000000 +0100 -@@ -2,7 +2,7 @@ - * loongson-specific suspend support - * - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by -diff -Nur linux-2.6.33/arch/mips/loongson/common/reset.c linux-lemote/arch/mips/loongson/common/reset.c ---- linux-2.6.33/arch/mips/loongson/common/reset.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/reset.c 2010-03-06 16:43:01.000000000 +0100 -@@ -6,8 +6,8 @@ - * - * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology - * Author: Fuxin Zhang, zhangfx@lemote.com -- * Copyright (C) 2009 Lemote, Inc. & Institute of Computing Technology -- * Author: Zhangjin Wu, wuzj@lemote.com -+ * Copyright (C) 2009 Lemote, Inc. -+ * Author: Zhangjin Wu, wuzhangjin@gmail.com - */ - #include - #include -@@ -21,22 +21,39 @@ - /* do preparation for reboot */ - mach_prepare_reboot(); +diff -Nur linux-2.6.34.orig/arch/mips/loongson/common/rtc.c linux-loongson/arch/mips/loongson/common/rtc.c +--- linux-2.6.34.orig/arch/mips/loongson/common/rtc.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/arch/mips/loongson/common/rtc.c 2010-05-27 18:12:28.902214422 +0200 +@@ -0,0 +1,43 @@ ++/* ++ * Registration of Loongson RTC platform device. ++ * ++ * Copyright (C) 2007 Yoichi Yuasa ++ * Copyright (C) 2009 Wu Zhangjin ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ */ ++ ++#include ++#include ++#include ++#include ++ ++static struct resource rtc_cmos_resource[] = { ++ { ++ .start = RTC_PORT(0), ++ .end = RTC_PORT(1), ++ .flags = IORESOURCE_IO, ++ }, ++ { ++ .start = RTC_IRQ, ++ .end = RTC_IRQ, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++static struct platform_device rtc_cmos_device = { ++ .name = "rtc_cmos", ++ .id = -1, ++ .num_resources = ARRAY_SIZE(rtc_cmos_resource), ++ .resource = rtc_cmos_resource ++}; ++ ++static __init int rtc_cmos_init(void) ++{ ++ return platform_device_register(&rtc_cmos_device); ++} ++ ++device_initcall(rtc_cmos_init); +diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.c linux-loongson/arch/mips/loongson/lemote-2f/ec_kb3310b.c +--- linux-2.6.34.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/loongson/lemote-2f/ec_kb3310b.c 2010-05-27 18:12:28.902214422 +0200 +@@ -14,7 +14,7 @@ + #include + #include -- /* reboot via jumping to boot base address */ -+ /* reboot via jumping to boot base address -+ * -+ * ".set noat" and ".set at" are used to ensure the address not -+ * polluted by the binutils patch. the patch will try to change the -+ * jumping address to "addr & 0xcfffffff" via the at register, which is -+ * really wrong for 0xbfc00000: -+ */ +-#include "ec_kb3310b.h" ++#include + + static DEFINE_SPINLOCK(index_access_lock); + static DEFINE_SPINLOCK(port_access_lock); +@@ -78,12 +78,9 @@ + spin_unlock_irqrestore(&port_access_lock, flags); + + if (timeout <= 0) { +- printk(KERN_ERR "%s: deadable error : timeout...\n", __func__); ++ pr_err("%s: deadable error : timeout...\n", __func__); + ret = -EINVAL; +- } else +- printk(KERN_INFO +- "(%x/%d)ec issued command %d status : 0x%x\n", +- timeout, EC_CMD_TIMEOUT - timeout, cmd, status); ++ } + + return ret; + } +@@ -118,8 +115,7 @@ + udelay(EC_REG_DELAY); + } + if (timeout <= 0) { +- pr_info("%s: get event number timeout.\n", __func__); +- ++ pr_err("%s: get event number timeout.\n", __func__); + return -EINVAL; + } + value = inb(EC_DAT_PORT); +diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.h linux-loongson/arch/mips/loongson/lemote-2f/ec_kb3310b.h +--- linux-2.6.34.orig/arch/mips/loongson/lemote-2f/ec_kb3310b.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/loongson/lemote-2f/ec_kb3310b.h 1970-01-01 01:00:00.000000000 +0100 +@@ -1,188 +0,0 @@ +-/* +- * KB3310B Embedded Controller +- * +- * Copyright (C) 2008 Lemote Inc. +- * Author: liujl , 2008-03-14 +- * +- * This program is free software; you can redistribute it and/or modify +- * it under the terms of the GNU General Public License as published by +- * the Free Software Foundation; either version 2 of the License, or +- * (at your option) any later version. +- */ +- +-#ifndef _EC_KB3310B_H +-#define _EC_KB3310B_H +- +-extern unsigned char ec_read(unsigned short addr); +-extern void ec_write(unsigned short addr, unsigned char val); +-extern int ec_query_seq(unsigned char cmd); +-extern int ec_query_event_num(void); +-extern int ec_get_event_num(void); +- +-typedef int (*sci_handler) (int status); +-extern sci_handler yeeloong_report_lid_status; +- +-#define SCI_IRQ_NUM 0x0A +- +-/* +- * The following registers are determined by the EC index configuration. +- * 1, fill the PORT_HIGH as EC register high part. +- * 2, fill the PORT_LOW as EC register low part. +- * 3, fill the PORT_DATA as EC register write data or get the data from it. +- */ +-#define EC_IO_PORT_HIGH 0x0381 +-#define EC_IO_PORT_LOW 0x0382 +-#define EC_IO_PORT_DATA 0x0383 +- +-/* +- * EC delay time is 500us for register and status access +- */ +-#define EC_REG_DELAY 500 /* unit : us */ +-#define EC_CMD_TIMEOUT 0x1000 +- +-/* +- * EC access port for SCI communication +- */ +-#define EC_CMD_PORT 0x66 +-#define EC_STS_PORT 0x66 +-#define EC_DAT_PORT 0x62 +-#define CMD_INIT_IDLE_MODE 0xdd +-#define CMD_EXIT_IDLE_MODE 0xdf +-#define CMD_INIT_RESET_MODE 0xd8 +-#define CMD_REBOOT_SYSTEM 0x8c +-#define CMD_GET_EVENT_NUM 0x84 +-#define CMD_PROGRAM_PIECE 0xda +- +-/* temperature & fan registers */ +-#define REG_TEMPERATURE_VALUE 0xF458 +-#define REG_FAN_AUTO_MAN_SWITCH 0xF459 +-#define BIT_FAN_AUTO 0 +-#define BIT_FAN_MANUAL 1 +-#define REG_FAN_CONTROL 0xF4D2 +-#define BIT_FAN_CONTROL_ON (1 << 0) +-#define BIT_FAN_CONTROL_OFF (0 << 0) +-#define REG_FAN_STATUS 0xF4DA +-#define BIT_FAN_STATUS_ON (1 << 0) +-#define BIT_FAN_STATUS_OFF (0 << 0) +-#define REG_FAN_SPEED_HIGH 0xFE22 +-#define REG_FAN_SPEED_LOW 0xFE23 +-#define REG_FAN_SPEED_LEVEL 0xF4CC +-/* fan speed divider */ +-#define FAN_SPEED_DIVIDER 480000 /* (60*1000*1000/62.5/2)*/ +- +-/* battery registers */ +-#define REG_BAT_DESIGN_CAP_HIGH 0xF77D +-#define REG_BAT_DESIGN_CAP_LOW 0xF77E +-#define REG_BAT_FULLCHG_CAP_HIGH 0xF780 +-#define REG_BAT_FULLCHG_CAP_LOW 0xF781 +-#define REG_BAT_DESIGN_VOL_HIGH 0xF782 +-#define REG_BAT_DESIGN_VOL_LOW 0xF783 +-#define REG_BAT_CURRENT_HIGH 0xF784 +-#define REG_BAT_CURRENT_LOW 0xF785 +-#define REG_BAT_VOLTAGE_HIGH 0xF786 +-#define REG_BAT_VOLTAGE_LOW 0xF787 +-#define REG_BAT_TEMPERATURE_HIGH 0xF788 +-#define REG_BAT_TEMPERATURE_LOW 0xF789 +-#define REG_BAT_RELATIVE_CAP_HIGH 0xF492 +-#define REG_BAT_RELATIVE_CAP_LOW 0xF493 +-#define REG_BAT_VENDOR 0xF4C4 +-#define FLAG_BAT_VENDOR_SANYO 0x01 +-#define FLAG_BAT_VENDOR_SIMPLO 0x02 +-#define REG_BAT_CELL_COUNT 0xF4C6 +-#define FLAG_BAT_CELL_3S1P 0x03 +-#define FLAG_BAT_CELL_3S2P 0x06 +-#define REG_BAT_CHARGE 0xF4A2 +-#define FLAG_BAT_CHARGE_DISCHARGE 0x01 +-#define FLAG_BAT_CHARGE_CHARGE 0x02 +-#define FLAG_BAT_CHARGE_ACPOWER 0x00 +-#define REG_BAT_STATUS 0xF4B0 +-#define BIT_BAT_STATUS_LOW (1 << 5) +-#define BIT_BAT_STATUS_DESTROY (1 << 2) +-#define BIT_BAT_STATUS_FULL (1 << 1) +-#define BIT_BAT_STATUS_IN (1 << 0) +-#define REG_BAT_CHARGE_STATUS 0xF4B1 +-#define BIT_BAT_CHARGE_STATUS_OVERTEMP (1 << 2) +-#define BIT_BAT_CHARGE_STATUS_PRECHG (1 << 1) +-#define REG_BAT_STATE 0xF482 +-#define BIT_BAT_STATE_CHARGING (1 << 1) +-#define BIT_BAT_STATE_DISCHARGING (1 << 0) +-#define REG_BAT_POWER 0xF440 +-#define BIT_BAT_POWER_S3 (1 << 2) +-#define BIT_BAT_POWER_ON (1 << 1) +-#define BIT_BAT_POWER_ACIN (1 << 0) +- +-/* other registers */ +-/* Audio: rd/wr */ +-#define REG_AUDIO_VOLUME 0xF46C +-#define REG_AUDIO_MUTE 0xF4E7 +-#define REG_AUDIO_BEEP 0xF4D0 +-/* USB port power or not: rd/wr */ +-#define REG_USB0_FLAG 0xF461 +-#define REG_USB1_FLAG 0xF462 +-#define REG_USB2_FLAG 0xF463 +-#define BIT_USB_FLAG_ON 1 +-#define BIT_USB_FLAG_OFF 0 +-/* LID */ +-#define REG_LID_DETECT 0xF4BD +-#define BIT_LID_DETECT_ON 1 +-#define BIT_LID_DETECT_OFF 0 +-/* CRT */ +-#define REG_CRT_DETECT 0xF4AD +-#define BIT_CRT_DETECT_PLUG 1 +-#define BIT_CRT_DETECT_UNPLUG 0 +-/* LCD backlight brightness adjust: 9 levels */ +-#define REG_DISPLAY_BRIGHTNESS 0xF4F5 +-/* Black screen Status */ +-#define BIT_DISPLAY_LCD_ON 1 +-#define BIT_DISPLAY_LCD_OFF 0 +-/* LCD backlight control: off/restore */ +-#define REG_BACKLIGHT_CTRL 0xF7BD +-#define BIT_BACKLIGHT_ON 1 +-#define BIT_BACKLIGHT_OFF 0 +-/* Reset the machine auto-clear: rd/wr */ +-#define REG_RESET 0xF4EC +-#define BIT_RESET_ON 1 +-/* Light the led: rd/wr */ +-#define REG_LED 0xF4C8 +-#define BIT_LED_RED_POWER (1 << 0) +-#define BIT_LED_ORANGE_POWER (1 << 1) +-#define BIT_LED_GREEN_CHARGE (1 << 2) +-#define BIT_LED_RED_CHARGE (1 << 3) +-#define BIT_LED_NUMLOCK (1 << 4) +-/* Test led mode, all led on/off */ +-#define REG_LED_TEST 0xF4C2 +-#define BIT_LED_TEST_IN 1 +-#define BIT_LED_TEST_OUT 0 +-/* Camera on/off */ +-#define REG_CAMERA_STATUS 0xF46A +-#define BIT_CAMERA_STATUS_ON 1 +-#define BIT_CAMERA_STATUS_OFF 0 +-#define REG_CAMERA_CONTROL 0xF7B7 +-#define BIT_CAMERA_CONTROL_OFF 0 +-#define BIT_CAMERA_CONTROL_ON 1 +-/* Wlan Status */ +-#define REG_WLAN 0xF4FA +-#define BIT_WLAN_ON 1 +-#define BIT_WLAN_OFF 0 +-#define REG_DISPLAY_LCD 0xF79F +- +-/* SCI Event Number from EC */ +-enum { +- EVENT_LID = 0x23, /* LID open/close */ +- EVENT_DISPLAY_TOGGLE, /* Fn+F3 for display switch */ +- EVENT_SLEEP, /* Fn+F1 for entering sleep mode */ +- EVENT_OVERTEMP, /* Over-temperature happened */ +- EVENT_CRT_DETECT, /* CRT is connected */ +- EVENT_CAMERA, /* Camera on/off */ +- EVENT_USB_OC2, /* USB2 Over Current occurred */ +- EVENT_USB_OC0, /* USB0 Over Current occurred */ +- EVENT_BLACK_SCREEN, /* Turn on/off backlight */ +- EVENT_AUDIO_MUTE, /* Mute on/off */ +- EVENT_DISPLAY_BRIGHTNESS,/* LCD backlight brightness adjust */ +- EVENT_AC_BAT, /* AC & Battery relative issue */ +- EVENT_AUDIO_VOLUME, /* Volume adjust */ +- EVENT_WLAN, /* Wlan on/off */ +- EVENT_END +-}; +- +-#endif /* !_EC_KB3310B_H */ +diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/Makefile linux-loongson/arch/mips/loongson/lemote-2f/Makefile +--- linux-2.6.34.orig/arch/mips/loongson/lemote-2f/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/loongson/lemote-2f/Makefile 2010-05-27 18:12:28.902214422 +0200 +@@ -2,7 +2,7 @@ + # Makefile for lemote loongson2f family machines + # + +-obj-y += machtype.o irq.o reset.o ec_kb3310b.o ++obj-y += machtype.o irq.o reset.o ec_kb3310b.o platform.o + + # + # Suspend Support +diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/platform.c linux-loongson/arch/mips/loongson/lemote-2f/platform.c +--- linux-2.6.34.orig/arch/mips/loongson/lemote-2f/platform.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/arch/mips/loongson/lemote-2f/platform.c 2010-05-27 18:12:28.902214422 +0200 +@@ -0,0 +1,48 @@ ++/* ++ * Copyright (C) 2009 Lemote Inc. ++ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * ++ * This program is free software; you can redistribute it and/or modify it ++ * under the terms of the GNU General Public License as published by the ++ * Free Software Foundation; either version 2 of the License, or (at your ++ * option) any later version. ++ */ ++ ++#include ++#include ++ ++#include ++ ++static struct platform_device yeeloong_pdev = { ++ .name = "yeeloong_laptop", ++ .id = -1, ++}; ++ ++static struct platform_device lynloong_pdev = { ++ .name = "lynloong_pc", ++ .id = -1, ++}; ++ ++static int __init lemote2f_platform_init(void) ++{ ++ struct platform_device *pdev = NULL; ++ ++ switch (mips_machtype) { ++ case MACH_LEMOTE_YL2F89: ++ pdev = &yeeloong_pdev; ++ break; ++ case MACH_LEMOTE_LL2F: ++ pdev = &lynloong_pdev; ++ break; ++ default: ++ break; ++ ++ } ++ ++ if (pdev != NULL) ++ return platform_device_register(pdev); ++ ++ return -ENODEV; ++} ++ ++arch_initcall(lemote2f_platform_init); +diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/pm.c linux-loongson/arch/mips/loongson/lemote-2f/pm.c +--- linux-2.6.34.orig/arch/mips/loongson/lemote-2f/pm.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/loongson/lemote-2f/pm.c 2010-05-27 18:12:28.902214422 +0200 +@@ -23,7 +23,7 @@ + #include + + #include +-#include "ec_kb3310b.h" ++#include + + #define I8042_KBD_IRQ 1 + #define I8042_CTR_KBDINT 0x01 +@@ -100,7 +100,7 @@ + if (irq < 0) + return 0; + +- printk(KERN_INFO "%s: irq = %d\n", __func__, irq); ++ pr_info("%s: irq = %d\n", __func__, irq); + + if (irq == I8042_KBD_IRQ) + return 1; +diff -Nur linux-2.6.34.orig/arch/mips/loongson/lemote-2f/reset.c linux-loongson/arch/mips/loongson/lemote-2f/reset.c +--- linux-2.6.34.orig/arch/mips/loongson/lemote-2f/reset.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/loongson/lemote-2f/reset.c 2010-05-27 18:12:28.902214422 +0200 +@@ -20,7 +20,7 @@ + #include + + #include +-#include "ec_kb3310b.h" ++#include + + static void reset_cpu(void) + { +diff -Nur linux-2.6.34.orig/arch/mips/mm/dma-default.c linux-loongson/arch/mips/mm/dma-default.c +--- linux-2.6.34.orig/arch/mips/mm/dma-default.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/mm/dma-default.c 2010-05-27 18:12:28.932213915 +0200 +@@ -375,3 +375,16 @@ + } + + EXPORT_SYMBOL(dma_cache_sync); ++ ++int __weak dma_mmap_coherent(struct device *dev, struct vm_area_struct *vma, ++ void *cpu_addr, dma_addr_t handle, size_t size) ++{ ++ struct page *pg; ++ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); ++ cpu_addr = (void *)dma_addr_to_virt(dev, handle); ++ pg = virt_to_page(cpu_addr); ++ return remap_pfn_range(vma, vma->vm_start, ++ page_to_pfn(pg) + vma->vm_pgoff, ++ size, vma->vm_page_prot); ++} ++EXPORT_SYMBOL(dma_mmap_coherent); +diff -Nur linux-2.6.34.orig/arch/mips/oprofile/op_model_loongson2.c linux-loongson/arch/mips/oprofile/op_model_loongson2.c +--- linux-2.6.34.orig/arch/mips/oprofile/op_model_loongson2.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/arch/mips/oprofile/op_model_loongson2.c 2010-05-27 18:12:28.962214357 +0200 +@@ -8,7 +8,6 @@ + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. +- * + */ + #include + #include +@@ -17,24 +16,18 @@ + #include /* LOONGSON2_PERFCNT_IRQ */ + #include "op_impl.h" + +-/* +- * a patch should be sent to oprofile with the loongson-specific support. +- * otherwise, the oprofile tool will not recognize this and complain about +- * "cpu_type 'unset' is not valid". +- */ + #define LOONGSON2_CPU_TYPE "mips/loongson2" + +-#define LOONGSON2_COUNTER1_EVENT(event) ((event & 0x0f) << 5) +-#define LOONGSON2_COUNTER2_EVENT(event) ((event & 0x0f) << 9) +- +-#define LOONGSON2_PERFCNT_EXL (1UL << 0) +-#define LOONGSON2_PERFCNT_KERNEL (1UL << 1) +-#define LOONGSON2_PERFCNT_SUPERVISOR (1UL << 2) +-#define LOONGSON2_PERFCNT_USER (1UL << 3) +-#define LOONGSON2_PERFCNT_INT_EN (1UL << 4) + #define LOONGSON2_PERFCNT_OVERFLOW (1ULL << 31) + +-/* Loongson2 performance counter register */ ++#define LOONGSON2_PERFCTRL_EXL (1UL << 0) ++#define LOONGSON2_PERFCTRL_KERNEL (1UL << 1) ++#define LOONGSON2_PERFCTRL_SUPERVISOR (1UL << 2) ++#define LOONGSON2_PERFCTRL_USER (1UL << 3) ++#define LOONGSON2_PERFCTRL_ENABLE (1UL << 4) ++#define LOONGSON2_PERFCTRL_EVENT(idx, event) \ ++ (((event) & 0x0f) << ((idx) ? 9 : 5)) ++ + #define read_c0_perfctrl() __read_64bit_c0_register($24, 0) + #define write_c0_perfctrl(val) __write_64bit_c0_register($24, 0, val) + #define read_c0_perfcnt() __read_64bit_c0_register($25, 0) +@@ -49,7 +42,12 @@ + + static char *oprofid = "LoongsonPerf"; + static irqreturn_t loongson2_perfcount_handler(int irq, void *dev_id); +-/* Compute all of the registers in preparation for enabling profiling. */ ++ ++static void reset_counters(void *arg) ++{ ++ write_c0_perfctrl(0); ++ write_c0_perfcnt(0); ++} + + static void loongson2_reg_setup(struct op_counter_config *cfg) + { +@@ -57,41 +55,38 @@ + + reg.reset_counter1 = 0; + reg.reset_counter2 = 0; +- /* Compute the performance counter ctrl word. */ +- /* For now count kernel and user mode */ ++ ++ /* ++ * Compute the performance counter ctrl word. ++ * For now, count kernel and user mode. ++ */ + if (cfg[0].enabled) { +- ctrl |= LOONGSON2_COUNTER1_EVENT(cfg[0].event); ++ ctrl |= LOONGSON2_PERFCTRL_EVENT(0, cfg[0].event); + reg.reset_counter1 = 0x80000000ULL - cfg[0].count; + } + + if (cfg[1].enabled) { +- ctrl |= LOONGSON2_COUNTER2_EVENT(cfg[1].event); +- reg.reset_counter2 = (0x80000000ULL - cfg[1].count); ++ ctrl |= LOONGSON2_PERFCTRL_EVENT(1, cfg[1].event); ++ reg.reset_counter2 = 0x80000000ULL - cfg[1].count; + } + + if (cfg[0].enabled || cfg[1].enabled) { +- ctrl |= LOONGSON2_PERFCNT_EXL | LOONGSON2_PERFCNT_INT_EN; ++ ctrl |= LOONGSON2_PERFCTRL_EXL | LOONGSON2_PERFCTRL_ENABLE; + if (cfg[0].kernel || cfg[1].kernel) +- ctrl |= LOONGSON2_PERFCNT_KERNEL; ++ ctrl |= LOONGSON2_PERFCTRL_KERNEL; + if (cfg[0].user || cfg[1].user) +- ctrl |= LOONGSON2_PERFCNT_USER; ++ ctrl |= LOONGSON2_PERFCTRL_USER; + } + + reg.ctrl = ctrl; + + reg.cnt1_enabled = cfg[0].enabled; + reg.cnt2_enabled = cfg[1].enabled; +- + } + +-/* Program all of the registers in preparation for enabling profiling. */ +- + static void loongson2_cpu_setup(void *args) + { +- uint64_t perfcount; +- +- perfcount = (reg.reset_counter2 << 32) | reg.reset_counter1; +- write_c0_perfcnt(perfcount); ++ write_c0_perfcnt((reg.reset_counter2 << 32) | reg.reset_counter1); + } + + static void loongson2_cpu_start(void *args) +@@ -114,15 +109,8 @@ + struct pt_regs *regs = get_irq_regs(); + int enabled; + +- /* +- * LOONGSON2 defines two 32-bit performance counters. +- * To avoid a race updating the registers we need to stop the counters +- * while we're messing with +- * them ... +- */ +- + /* Check whether the irq belongs to me */ +- enabled = read_c0_perfctrl() & LOONGSON2_PERFCNT_INT_EN; ++ enabled = read_c0_perfctrl() & LOONGSON2_PERFCTRL_ENABLE; + if (!enabled) + return IRQ_NONE; + enabled = reg.cnt1_enabled | reg.cnt2_enabled; +@@ -157,7 +145,7 @@ + + static void loongson2_exit(void) + { +- write_c0_perfctrl(0); ++ reset_counters(NULL); + free_irq(LOONGSON2_PERFCNT_IRQ, oprofid); + } + +diff -Nur linux-2.6.34.orig/drivers/ide/ide-iops.c linux-loongson/drivers/ide/ide-iops.c +--- linux-2.6.34.orig/drivers/ide/ide-iops.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/drivers/ide/ide-iops.c 2010-05-27 18:12:36.363472774 +0200 +@@ -27,6 +27,8 @@ + #include + #include + ++#include ++ + void SELECT_MASK(ide_drive_t *drive, int mask) + { + const struct ide_port_ops *port_ops = drive->hwif->port_ops; +@@ -300,6 +302,9 @@ + { + const char **list, *m = (char *)&drive->id[ATA_ID_PROD]; + ++ if (mips_machtype != MACH_LEMOTE_YL2F89) ++ return; ++ + for (list = nien_quirk_list; *list != NULL; list++) + if (strstr(m, *list) != NULL) { + drive->dev_flags |= IDE_DFLAG_NIEN_QUIRK; +diff -Nur linux-2.6.34.orig/drivers/net/Kconfig linux-loongson/drivers/net/Kconfig +--- linux-2.6.34.orig/drivers/net/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/drivers/net/Kconfig 2010-05-27 18:15:36.182214625 +0200 +@@ -2432,6 +2432,13 @@ + Some boards that use the Discovery chipset are the Momenco + Ocelot C and Jaguar ATX and Pegasos II. + ++config TITAN_GE ++ bool "PMC-Sierra TITAN Gigabit Ethernet Support" ++ depends on PMC_YOSEMITE ++ help ++ This enables support for the the integrated ethernet of ++ PMC-Sierra's Titan SoC. ++ + config XILINX_LL_TEMAC + tristate "Xilinx LL TEMAC (LocalLink Tri-mode Ethernet MAC) driver" + select PHYLIB +diff -Nur linux-2.6.34.orig/drivers/net/Makefile linux-loongson/drivers/net/Makefile +--- linux-2.6.34.orig/drivers/net/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/drivers/net/Makefile 2010-05-27 18:15:36.182214625 +0200 +@@ -154,6 +154,8 @@ + obj-$(CONFIG_QLCNIC) += qlcnic/ + obj-$(CONFIG_QLGE) += qlge/ + ++obj-$(CONFIG_TITAN_GE) += titan_mdio.o titan_ge.o ++ + obj-$(CONFIG_PPP) += ppp_generic.o + obj-$(CONFIG_PPP_ASYNC) += ppp_async.o + obj-$(CONFIG_PPP_SYNC_TTY) += ppp_synctty.o +diff -Nur linux-2.6.34.orig/drivers/net/titan_ge.c linux-loongson/drivers/net/titan_ge.c +--- linux-2.6.34.orig/drivers/net/titan_ge.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/titan_ge.c 2010-05-27 18:12:39.084716399 +0200 +@@ -0,0 +1,2069 @@ ++/* ++ * drivers/net/titan_ge.c - Driver for Titan ethernet ports ++ * ++ * Copyright (C) 2003 PMC-Sierra Inc. ++ * Author : Manish Lachwani (lachwani@pmc-sierra.com) ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2 ++ * of the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ */ ++ ++/* ++ * The MAC unit of the Titan consists of the following: ++ * ++ * -> XDMA Engine to move data to from the memory to the MAC packet FIFO ++ * -> FIFO is where the incoming and outgoing data is placed ++ * -> TRTG is the unit that pulls the data from the FIFO for Tx and pushes ++ * the data into the FIFO for Rx ++ * -> TMAC is the outgoing MAC interface and RMAC is the incoming. ++ * -> AFX is the address filtering block ++ * -> GMII block to communicate with the PHY ++ * ++ * Rx will look like the following: ++ * GMII --> RMAC --> AFX --> TRTG --> Rx FIFO --> XDMA --> CPU memory ++ * ++ * Tx will look like the following: ++ * CPU memory --> XDMA --> Tx FIFO --> TRTG --> TMAC --> GMII ++ * ++ * The Titan driver has support for the following performance features: ++ * -> Rx side checksumming ++ * -> Jumbo Frames ++ * -> Interrupt Coalscing ++ * -> Rx NAPI ++ * -> SKB Recycling ++ * -> Transmit/Receive descriptors in SRAM ++ * -> Fast routing for IP forwarding ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++/* For MII specifc registers, titan_mdio.h should be included */ ++#include ++ ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include "titan_ge.h" ++#include "titan_mdio.h" ++ ++/* Static Function Declarations */ ++static int titan_ge_eth_open(struct net_device *); ++static void titan_ge_eth_stop(struct net_device *); ++static struct net_device_stats *titan_ge_get_stats(struct net_device *); ++static int titan_ge_init_rx_desc_ring(titan_ge_port_info *, int, int, ++ unsigned long, unsigned long, ++ unsigned long); ++static int titan_ge_init_tx_desc_ring(titan_ge_port_info *, int, ++ unsigned long, unsigned long); ++ ++static int titan_ge_open(struct net_device *); ++static int titan_ge_start_xmit(struct sk_buff *, struct net_device *); ++static int titan_ge_stop(struct net_device *); ++ ++static unsigned long titan_ge_tx_coal(unsigned long, int); ++ ++static void titan_ge_port_reset(unsigned int); ++static int titan_ge_free_tx_queue(titan_ge_port_info *); ++static int titan_ge_rx_task(struct net_device *, titan_ge_port_info *); ++static int titan_ge_port_start(struct net_device *, titan_ge_port_info *); ++ ++static int titan_ge_return_tx_desc(titan_ge_port_info *, int); ++ ++/* ++ * Some configuration for the FIFO and the XDMA channel needs ++ * to be done only once for all the ports. This flag controls ++ * that ++ */ ++static unsigned long config_done; ++ ++/* ++ * One time out of memory flag ++ */ ++static unsigned int oom_flag; ++ ++static int titan_ge_poll(struct net_device *netdev, int *budget); ++ ++static int titan_ge_receive_queue(struct net_device *, unsigned int); ++ ++static struct platform_device *titan_ge_device[3]; ++ ++/* MAC Address */ ++extern unsigned char titan_ge_mac_addr_base[6]; ++ ++unsigned long titan_ge_base; ++static unsigned long titan_ge_sram; ++ ++static char titan_string[] = "titan"; ++ ++/* ++ * The Titan GE has two alignment requirements: ++ * -> skb->data to be cacheline aligned (32 byte) ++ * -> IP header alignment to 16 bytes ++ * ++ * The latter is not implemented. So, that results in an extra copy on ++ * the Rx. This is a big performance hog. For the former case, the ++ * dev_alloc_skb() has been replaced with titan_ge_alloc_skb(). The size ++ * requested is calculated: ++ * ++ * Ethernet Frame Size : 1518 ++ * Ethernet Header : 14 ++ * Future Titan change for IP header alignment : 2 ++ * ++ * Hence, we allocate (1518 + 14 + 2+ 64) = 1580 bytes. For IP header ++ * alignment, we use skb_reserve(). ++ */ ++ ++#define ALIGNED_RX_SKB_ADDR(addr) \ ++ ((((unsigned long)(addr) + (64UL - 1UL)) \ ++ & ~(64UL - 1UL)) - (unsigned long)(addr)) ++ ++#define titan_ge_alloc_skb(__length, __gfp_flags) \ ++({ struct sk_buff *__skb; \ ++ __skb = alloc_skb((__length) + 64, (__gfp_flags)); \ ++ if(__skb) { \ ++ int __offset = (int) ALIGNED_RX_SKB_ADDR(__skb->data); \ ++ if(__offset) \ ++ skb_reserve(__skb, __offset); \ ++ } \ ++ __skb; \ ++}) ++ ++/* ++ * Configure the GMII block of the Titan based on what the PHY tells us ++ */ ++static void titan_ge_gmii_config(int port_num) ++{ ++ unsigned int reg_data = 0, phy_reg; ++ int err; ++ ++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg); ++ ++ if (err == TITAN_GE_MDIO_ERROR) { ++ printk(KERN_ERR ++ "Could not read PHY control register 0x11 \n"); ++ printk(KERN_ERR ++ "Setting speed to 1000 Mbps and Duplex to Full \n"); ++ ++ return; ++ } ++ ++ err = titan_ge_mdio_write(port_num, TITAN_GE_MDIO_PHY_IE, 0); ++ ++ if (phy_reg & 0x8000) { ++ if (phy_reg & 0x2000) { ++ /* Full Duplex and 1000 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x201); ++ } else { ++ /* Half Duplex and 1000 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x2201); ++ } ++ } ++ if (phy_reg & 0x4000) { ++ if (phy_reg & 0x2000) { ++ /* Full Duplex and 100 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x100); ++ } else { ++ /* Half Duplex and 100 Mbps */ ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_MODE + ++ (port_num << 12)), 0x2100); ++ } ++ } ++ reg_data = TITAN_GE_READ(TITAN_GE_GMII_CONFIG_GENERAL + ++ (port_num << 12)); ++ reg_data |= 0x3; ++ TITAN_GE_WRITE((TITAN_GE_GMII_CONFIG_GENERAL + ++ (port_num << 12)), reg_data); ++} ++ ++/* ++ * Enable the TMAC if it is not ++ */ ++static void titan_ge_enable_tx(unsigned int port_num) ++{ ++ unsigned long reg_data; ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)); ++ if (!(reg_data & 0x8000)) { ++ printk("TMAC disabled for port %d!! \n", port_num); ++ ++ reg_data |= 0x0001; /* Enable TMAC */ ++ reg_data |= 0x4000; /* CRC Check Enable */ ++ reg_data |= 0x2000; /* Padding enable */ ++ reg_data |= 0x0800; /* CRC Add enable */ ++ reg_data |= 0x0080; /* PAUSE frame */ ++ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ } ++} ++ ++/* ++ * Tx Timeout function ++ */ ++static void titan_ge_tx_timeout(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ printk(KERN_INFO "%s: TX timeout ", netdev->name); ++ printk(KERN_INFO "Resetting card \n"); ++ ++ /* Do the reset outside of interrupt context */ ++ schedule_work(&titan_ge_eth->tx_timeout_task); ++} ++ ++/* ++ * Update the AFX tables for UC and MC for slice 0 only ++ */ ++static void titan_ge_update_afx(titan_ge_port_info * titan_ge_eth) ++{ ++ int port = titan_ge_eth->port_num; ++ unsigned int i; ++ volatile unsigned long reg_data = 0; ++ u8 p_addr[6]; ++ ++ memcpy(p_addr, titan_ge_eth->port_mac_addr, 6); ++ ++ /* Set the MAC address here for TMAC and RMAC */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((0x112c | (port << 12)), 0x1); ++ /* Configure the eight address filters */ ++ for (i = 0; i < 8; i++) { ++ /* Select each of the eight filters */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 + ++ (port << 12)), i); ++ ++ /* Configure the match */ ++ reg_data = 0x9; /* Forward Enable Bit */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 + ++ (port << 12)), reg_data); ++ ++ /* Finally, AFX Exact Match Address Registers */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_LOW + (port << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_MID + (port << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_HIGH + (port << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ ++ /* VLAN id set to 0 */ ++ TITAN_GE_WRITE((TITAN_GE_AFX_EXACT_MATCH_VID + ++ (port << 12)), 0); ++ } ++} ++ ++/* ++ * Actual Routine to reset the adapter when the timeout occurred ++ */ ++static void titan_ge_tx_timeout_task(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ int port = titan_ge_eth->port_num; ++ ++ printk("Titan GE: Transmit timed out. Resetting ... \n"); ++ ++ /* Dump debug info */ ++ printk(KERN_ERR "TRTG cause : %x \n", ++ TITAN_GE_READ(0x100c + (port << 12))); ++ ++ /* Fix this for the other ports */ ++ printk(KERN_ERR "FIFO cause : %x \n", TITAN_GE_READ(0x482c)); ++ printk(KERN_ERR "IE cause : %x \n", TITAN_GE_READ(0x0040)); ++ printk(KERN_ERR "XDMA GDI ERROR : %x \n", ++ TITAN_GE_READ(0x5008 + (port << 8))); ++ printk(KERN_ERR "CHANNEL ERROR: %x \n", ++ TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT ++ + (port << 8))); ++ ++ netif_device_detach(netdev); ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ titan_ge_port_start(netdev, titan_ge_eth); ++ netif_device_attach(netdev); ++} ++ ++/* ++ * Change the MTU of the Ethernet Device ++ */ ++static int titan_ge_change_mtu(struct net_device *netdev, int new_mtu) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned long flags; ++ ++ if ((new_mtu > 9500) || (new_mtu < 64)) ++ return -EINVAL; ++ ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ netdev->mtu = new_mtu; ++ ++ /* Now we have to reopen the interface so that SKBs with the new ++ * size will be allocated */ ++ ++ if (netif_running(netdev)) { ++ titan_ge_eth_stop(netdev); ++ ++ if (titan_ge_eth_open(netdev) != TITAN_OK) { ++ printk(KERN_ERR ++ "%s: Fatal error on opening device\n", ++ netdev->name); ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ return -1; ++ } ++ } ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ return 0; ++} ++ ++/* ++ * Titan Gbe Interrupt Handler. All the three ports send interrupt to one line ++ * only. Once an interrupt is triggered, figure out the port and then check ++ * the channel. ++ */ ++static irqreturn_t titan_ge_int_handler(int irq, void *dev_id) ++{ ++ struct net_device *netdev = (struct net_device *) dev_id; ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int reg_data; ++ unsigned int eth_int_cause_error = 0, is; ++ unsigned long eth_int_cause1; ++ int err = 0; ++#ifdef CONFIG_SMP ++ unsigned long eth_int_cause2; ++#endif ++ ++ /* Ack the CPU interrupt */ ++ switch (port_num) { ++ case 0: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS1); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR1, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS1); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR1, is); ++#endif ++ break; ++ ++ case 1: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS0); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR0, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS0); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR0, is); ++#endif ++ break; ++ ++ case 2: ++ is = OCD_READ(RM9000x2_OCD_INTP0STATUS4); ++ OCD_WRITE(RM9000x2_OCD_INTP0CLEAR4, is); ++ ++#ifdef CONFIG_SMP ++ is = OCD_READ(RM9000x2_OCD_INTP1STATUS4); ++ OCD_WRITE(RM9000x2_OCD_INTP1CLEAR4, is); ++#endif ++ } ++ ++ eth_int_cause1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A); ++#ifdef CONFIG_SMP ++ eth_int_cause2 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_B); ++#endif ++ ++ /* Spurious interrupt */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 == 0) && (eth_int_cause2 == 0)) { ++#else ++ if (eth_int_cause1 == 0) { ++#endif ++ eth_int_cause_error = TITAN_GE_READ(TITAN_GE_CHANNEL0_INTERRUPT + ++ (port_num << 8)); ++ ++ if (eth_int_cause_error == 0) ++ return IRQ_NONE; ++ } ++ ++ /* Handle Tx first. No need to ack interrupts */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 & 0x20202) || ++ (eth_int_cause2 & 0x20202) ) ++#else ++ if (eth_int_cause1 & 0x20202) ++#endif ++ titan_ge_free_tx_queue(titan_ge_eth); ++ ++ /* Handle the Rx next */ ++#ifdef CONFIG_SMP ++ if ( (eth_int_cause1 & 0x10101) || ++ (eth_int_cause2 & 0x10101)) { ++#else ++ if (eth_int_cause1 & 0x10101) { ++#endif ++ if (netif_rx_schedule_prep(netdev)) { ++ unsigned int ack; ++ ++ ack = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ /* Disable Tx and Rx both */ ++ if (port_num == 0) ++ ack &= ~(0x3); ++ if (port_num == 1) ++ ack &= ~(0x300); ++ ++ if (port_num == 2) ++ ack &= ~(0x30000); ++ ++ /* Interrupts have been disabled */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, ack); ++ ++ __netif_rx_schedule(netdev); ++ } ++ } ++ ++ /* Handle error interrupts */ ++ if (eth_int_cause_error && (eth_int_cause_error != 0x2)) { ++ printk(KERN_ERR ++ "XDMA Channel Error : %x on port %d\n", ++ eth_int_cause_error, port_num); ++ ++ printk(KERN_ERR ++ "XDMA GDI Hardware error : %x on port %d\n", ++ TITAN_GE_READ(0x5008 + (port_num << 8)), port_num); ++ ++ printk(KERN_ERR ++ "XDMA currently has %d Rx descriptors \n", ++ TITAN_GE_READ(0x5048 + (port_num << 8))); ++ ++ printk(KERN_ERR ++ "XDMA currently has prefetcted %d Rx descriptors \n", ++ TITAN_GE_READ(0x505c + (port_num << 8))); ++ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + ++ (port_num << 8)), eth_int_cause_error); ++ } ++ ++ /* ++ * PHY interrupt to inform abt the changes. Reading the ++ * PHY Status register will clear the interrupt ++ */ ++ if ((!(eth_int_cause1 & 0x30303)) && ++ (eth_int_cause_error == 0)) { ++ err = ++ titan_ge_mdio_read(port_num, ++ TITAN_GE_MDIO_PHY_IS, ®_data); ++ ++ if (reg_data & 0x0400) { ++ /* Link status change */ ++ titan_ge_mdio_read(port_num, ++ TITAN_GE_MDIO_PHY_STATUS, ®_data); ++ if (!(reg_data & 0x0400)) { ++ /* Link is down */ ++ netif_carrier_off(netdev); ++ netif_stop_queue(netdev); ++ } else { ++ /* Link is up */ ++ netif_carrier_on(netdev); ++ netif_wake_queue(netdev); ++ ++ /* Enable the queue */ ++ titan_ge_enable_tx(port_num); ++ } ++ } ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++/* ++ * Multicast and Promiscuous mode set. The ++ * set_multi entry point is called whenever the ++ * multicast address list or the network interface ++ * flags are updated. ++ */ ++static void titan_ge_set_multi(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned long reg_data; ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 + ++ (port_num << 12)); ++ ++ if (netdev->flags & IFF_PROMISC) { ++ reg_data |= 0x2; ++ } ++ else if (netdev->flags & IFF_ALLMULTI) { ++ reg_data |= 0x01; ++ reg_data |= 0x400; /* Use the 64-bit Multicast Hash bin */ ++ } ++ else { ++ reg_data = 0x2; ++ } ++ ++ TITAN_GE_WRITE((TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 + ++ (port_num << 12)), reg_data); ++ if (reg_data & 0x01) { ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_LOW + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDLOW + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_MIDHI + ++ (port_num << 12)), 0xffff); ++ TITAN_GE_WRITE((TITAN_GE_AFX_MULTICAST_HASH_HI + ++ (port_num << 12)), 0xffff); ++ } ++} ++ ++/* ++ * Open the network device ++ */ ++static int titan_ge_open(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int irq = TITAN_ETH_PORT_IRQ - port_num; ++ int retval; ++ ++ retval = request_irq(irq, titan_ge_int_handler, ++ SA_INTERRUPT | SA_SAMPLE_RANDOM , netdev->name, netdev); ++ ++ if (retval != 0) { ++ printk(KERN_ERR "Cannot assign IRQ number to TITAN GE \n"); ++ return -1; ++ } ++ ++ netdev->irq = irq; ++ printk(KERN_INFO "Assigned IRQ %d to port %d\n", irq, port_num); ++ ++ spin_lock_irq(&(titan_ge_eth->lock)); ++ ++ if (titan_ge_eth_open(netdev) != TITAN_OK) { ++ spin_unlock_irq(&(titan_ge_eth->lock)); ++ printk("%s: Error opening interface \n", netdev->name); ++ free_irq(netdev->irq, netdev); ++ return -EBUSY; ++ } ++ ++ spin_unlock_irq(&(titan_ge_eth->lock)); ++ ++ return 0; ++} ++ ++/* ++ * Allocate the SKBs for the Rx ring. Also used ++ * for refilling the queue ++ */ ++static int titan_ge_rx_task(struct net_device *netdev, ++ titan_ge_port_info *titan_ge_port) ++{ ++ struct device *device = &titan_ge_device[titan_ge_port->port_num]->dev; ++ volatile titan_ge_rx_desc *rx_desc; ++ struct sk_buff *skb; ++ int rx_used_desc; ++ int count = 0; ++ ++ while (titan_ge_port->rx_ring_skbs < titan_ge_port->rx_ring_size) { ++ ++ /* First try to get the skb from the recycler */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ skb = titan_ge_alloc_skb(TITAN_GE_JUMBO_BUFSIZE, GFP_ATOMIC); ++#else ++ skb = titan_ge_alloc_skb(TITAN_GE_STD_BUFSIZE, GFP_ATOMIC); ++#endif ++ if (unlikely(!skb)) { ++ /* OOM, set the flag */ ++ printk("OOM \n"); ++ oom_flag = 1; ++ break; ++ } ++ count++; ++ skb->dev = netdev; ++ ++ titan_ge_port->rx_ring_skbs++; ++ ++ rx_used_desc = titan_ge_port->rx_used_desc_q; ++ rx_desc = &(titan_ge_port->rx_desc_area[rx_used_desc]); ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ rx_desc->buffer_addr = dma_map_single(device, skb->data, ++ TITAN_GE_JUMBO_BUFSIZE - 2, DMA_FROM_DEVICE); ++#else ++ rx_desc->buffer_addr = dma_map_single(device, skb->data, ++ TITAN_GE_STD_BUFSIZE - 2, DMA_FROM_DEVICE); ++#endif ++ ++ titan_ge_port->rx_skb[rx_used_desc] = skb; ++ rx_desc->cmd_sts = TITAN_GE_RX_BUFFER_OWNED; ++ ++ titan_ge_port->rx_used_desc_q = ++ (rx_used_desc + 1) % TITAN_GE_RX_QUEUE; ++ } ++ ++ return count; ++} ++ ++/* ++ * Actual init of the Tital GE port. There is one register for ++ * the channel configuration ++ */ ++static void titan_port_init(struct net_device *netdev, ++ titan_ge_port_info * titan_ge_eth) ++{ ++ unsigned long reg_data; ++ ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ ++ /* First reset the TMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data |= 0x80000000; ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ udelay(30); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data &= ~(0xc0000000); ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ /* Now reset the RMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data |= 0x00080000; ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++ ++ udelay(30); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG); ++ reg_data &= ~(0x000c0000); ++ TITAN_GE_WRITE(TITAN_GE_CHANNEL0_CONFIG, reg_data); ++} ++ ++/* ++ * Start the port. All the hardware specific configuration ++ * for the XDMA, Tx FIFO, Rx FIFO, TMAC, RMAC, TRTG and AFX ++ * go here ++ */ ++static int titan_ge_port_start(struct net_device *netdev, ++ titan_ge_port_info * titan_port) ++{ ++ volatile unsigned long reg_data, reg_data1; ++ int port_num = titan_port->port_num; ++ int count = 0; ++ unsigned long reg_data_1; ++ ++ if (config_done == 0) { ++ reg_data = TITAN_GE_READ(0x0004); ++ reg_data |= 0x100; ++ TITAN_GE_WRITE(0x0004, reg_data); ++ ++ reg_data &= ~(0x100); ++ TITAN_GE_WRITE(0x0004, reg_data); ++ ++ /* Turn on GMII/MII mode and turn off TBI mode */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TSB_CTRL_1); ++ reg_data |= 0x00000700; ++ reg_data &= ~(0x00800000); /* Fencing */ ++ ++ TITAN_GE_WRITE(0x000c, 0x00001100); ++ ++ TITAN_GE_WRITE(TITAN_GE_TSB_CTRL_1, reg_data); ++ ++ /* Set the CPU Resource Limit register */ ++ TITAN_GE_WRITE(0x00f8, 0x8); ++ ++ /* Be conservative when using the BIU buffers */ ++ TITAN_GE_WRITE(0x0068, 0x4); ++ } ++ ++ titan_port->tx_threshold = 0; ++ titan_port->rx_threshold = 0; ++ ++ /* We need to write the descriptors for Tx and Rx */ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_TX_DESC + (port_num << 8)), ++ (unsigned long) titan_port->tx_dma); ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_RX_DESC + (port_num << 8)), ++ (unsigned long) titan_port->rx_dma); ++ ++ if (config_done == 0) { ++ /* Step 1: XDMA config */ ++ reg_data = TITAN_GE_READ(TITAN_GE_XDMA_CONFIG); ++ reg_data &= ~(0x80000000); /* clear reset */ ++ reg_data |= 0x1 << 29; /* sparse tx descriptor spacing */ ++ reg_data |= 0x1 << 28; /* sparse rx descriptor spacing */ ++ reg_data |= (0x1 << 23) | (0x1 << 24); /* Descriptor Coherency */ ++ reg_data |= (0x1 << 21) | (0x1 << 22); /* Data Coherency */ ++ TITAN_GE_WRITE(TITAN_GE_XDMA_CONFIG, reg_data); ++ } ++ ++ /* IR register for the XDMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)); ++ reg_data |= 0x80068000; /* No Rx_OOD */ ++ TITAN_GE_WRITE((TITAN_GE_GDI_INTERRUPT_ENABLE + (port_num << 8)), reg_data); ++ ++ /* Start the Tx and Rx XDMA controller */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)); ++ reg_data &= 0x4fffffff; /* Clear tx reset */ ++ reg_data &= 0xfff4ffff; /* Clear rx reset */ ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ reg_data |= 0xa0 | 0x30030000; ++#else ++ reg_data |= 0x40 | 0x20030000; ++#endif ++ ++#ifndef CONFIG_SMP ++ reg_data &= ~(0x10); ++ reg_data |= 0x0f; /* All of the packet */ ++#endif ++ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + (port_num << 8)), reg_data); ++ ++ /* Rx desc count */ ++ count = titan_ge_rx_task(netdev, titan_port); ++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), count); ++ count = TITAN_GE_READ(0x5048 + (port_num << 8)); ++ ++ udelay(30); ++ ++ /* ++ * Step 2: Configure the SDQPF, i.e. FIFO ++ */ ++ if (config_done == 0) { ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL); ++ reg_data = 0x1; ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ reg_data &= ~(0x1); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_CTL); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_CTL, reg_data); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL); ++ reg_data = 0x1; ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ reg_data &= ~(0x1); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_CTL); ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_CTL, reg_data); ++ } ++ /* ++ * Enable RX FIFO 0, 4 and 8 ++ */ ++ if (port_num == 0) { ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_RXFIFO_0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10); ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4844); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x4844, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_RXFIFO_0, reg_data); ++ ++ reg_data = TITAN_GE_READ(TITAN_GE_SDQPF_TXFIFO_0); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ reg_data |= (0xff << 10); ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4944); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x4944, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(TITAN_GE_SDQPF_TXFIFO_0, reg_data); ++ ++ } ++ ++ if (port_num == 1) { ++ reg_data = TITAN_GE_READ(0x4870); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (0xff + 1); ++ ++ TITAN_GE_WRITE(0x4870, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4874); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x4874, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4870, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x494c); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x494c, reg_data); ++ reg_data |= (0xff << 10) | (0xff + 1); ++ TITAN_GE_WRITE(0x494c, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x4950); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x4950, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x494c, reg_data); ++ } ++ ++ /* ++ * Titan 1.2 revision does support port #2 ++ */ ++ if (port_num == 2) { ++ /* ++ * Put the descriptors in the SRAM ++ */ ++ reg_data = TITAN_GE_READ(0x48a0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x48a4); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x48a4, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x4958); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ TITAN_GE_WRITE(0x4958, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x495c); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x495c, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ } ++ ++ if (port_num == 2) { ++ reg_data = TITAN_GE_READ(0x48a0); ++ ++ reg_data |= 0x100000; ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ /* ++ * BAV2,BAV and DAV settings for the Rx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x48a4); ++ reg_data1 |= ( (0x10 << 20) | (0x10 << 10) | 0x1); ++ TITAN_GE_WRITE(0x48a4, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x48a0, reg_data); ++ ++ reg_data = TITAN_GE_READ(0x4958); ++ reg_data |= 0x100000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ reg_data |= (0xff << 10) | (2*(0xff + 1)); ++ TITAN_GE_WRITE(0x4958, reg_data); ++ ++ /* ++ * BAV2, BAV and DAV settings for the Tx FIFO ++ */ ++ reg_data1 = TITAN_GE_READ(0x495c); ++ reg_data1 = ( (0x1 << 20) | (0x1 << 10) | 0x10); ++ ++ TITAN_GE_WRITE(0x495c, reg_data1); ++ ++ reg_data &= ~(0x00100000); ++ reg_data |= 0x200000; ++ ++ TITAN_GE_WRITE(0x4958, reg_data); ++ } ++ ++ /* ++ * Step 3: TRTG block enable ++ */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TRTG_CONFIG + (port_num << 12)); ++ ++ /* ++ * This is the 1.2 revision of the chip. It has fix for the ++ * IP header alignment. Now, the IP header begins at an ++ * aligned address and this wont need an extra copy in the ++ * driver. This performance drawback existed in the previous ++ * versions of the silicon ++ */ ++ reg_data_1 = TITAN_GE_READ(0x103c + (port_num << 12)); ++ reg_data_1 |= 0x40000000; ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ reg_data_1 |= 0x04000000; ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ mdelay(5); ++ ++ reg_data_1 &= ~(0x04000000); ++ TITAN_GE_WRITE((0x103c + (port_num << 12)), reg_data_1); ++ ++ mdelay(5); ++ ++ reg_data |= 0x0001; ++ TITAN_GE_WRITE((TITAN_GE_TRTG_CONFIG + (port_num << 12)), reg_data); ++ ++ /* ++ * Step 4: Start the Tx activity ++ */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_2 + (port_num << 12)), 0xe197); ++#ifdef TITAN_GE_JUMBO_FRAMES ++ TITAN_GE_WRITE((0x1258 + (port_num << 12)), 0x4000); ++#endif ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)); ++ reg_data |= 0x0001; /* Enable TMAC */ ++ reg_data |= 0x6c70; /* PAUSE also set */ ++ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ udelay(30); ++ ++ /* Destination Address drop bit */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)); ++ reg_data |= 0x218; /* DA_DROP bit and pause */ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_2 + (port_num << 12)), reg_data); ++ ++ TITAN_GE_WRITE((0x1218 + (port_num << 12)), 0x3); ++ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ TITAN_GE_WRITE((0x1208 + (port_num << 12)), 0x4000); ++#endif ++ /* Start the Rx activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)); ++ reg_data |= 0x0001; /* RMAC Enable */ ++ reg_data |= 0x0010; /* CRC Check enable */ ++ reg_data |= 0x0040; /* Min Frame check enable */ ++ reg_data |= 0x4400; /* Max Frame check enable */ ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ udelay(30); ++ ++ /* ++ * Enable the Interrupts for Tx and Rx ++ */ ++ reg_data1 = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ ++ if (port_num == 0) { ++ reg_data1 |= 0x3; ++#ifdef CONFIG_SMP ++ TITAN_GE_WRITE(0x0038, 0x003); ++#else ++ TITAN_GE_WRITE(0x0038, 0x303); ++#endif ++ } ++ ++ if (port_num == 1) { ++ reg_data1 |= 0x300; ++ } ++ ++ if (port_num == 2) ++ reg_data1 |= 0x30000; ++ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data1); ++ TITAN_GE_WRITE(0x003c, 0x300); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(0x0024, 0x04000024); /* IRQ vector */ ++ TITAN_GE_WRITE(0x0020, 0x000fb000); /* INTMSG base */ ++ } ++ ++ /* Priority */ ++ reg_data = TITAN_GE_READ(0x1038 + (port_num << 12)); ++ reg_data &= ~(0x00f00000); ++ TITAN_GE_WRITE((0x1038 + (port_num << 12)), reg_data); ++ ++ /* Step 5: GMII config */ ++ titan_ge_gmii_config(port_num); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(0x1a80, 0); ++ config_done = 1; ++ } ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Function to queue the packet for the Ethernet device ++ */ ++static void titan_ge_tx_queue(titan_ge_port_info * titan_ge_eth, ++ struct sk_buff * skb) ++{ ++ struct device *device = &titan_ge_device[titan_ge_eth->port_num]->dev; ++ unsigned int curr_desc = titan_ge_eth->tx_curr_desc_q; ++ volatile titan_ge_tx_desc *tx_curr; ++ int port_num = titan_ge_eth->port_num; ++ ++ tx_curr = &(titan_ge_eth->tx_desc_area[curr_desc]); ++ tx_curr->buffer_addr = ++ dma_map_single(device, skb->data, skb_headlen(skb), ++ DMA_TO_DEVICE); ++ ++ titan_ge_eth->tx_skb[curr_desc] = (struct sk_buff *) skb; ++ tx_curr->buffer_len = skb_headlen(skb); ++ ++ /* Last descriptor enables interrupt and changes ownership */ ++ tx_curr->cmd_sts = 0x1 | (1 << 15) | (1 << 5); ++ ++ /* Kick the XDMA to start the transfer from memory to the FIFO */ ++ TITAN_GE_WRITE((0x5044 + (port_num << 8)), 0x1); ++ ++ /* Current descriptor updated */ ++ titan_ge_eth->tx_curr_desc_q = (curr_desc + 1) % TITAN_GE_TX_QUEUE; ++ ++ /* Prefetch the next descriptor */ ++ prefetch((const void *) ++ &titan_ge_eth->tx_desc_area[titan_ge_eth->tx_curr_desc_q]); ++} ++ ++/* ++ * Actually does the open of the Ethernet device ++ */ ++static int titan_ge_eth_open(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ struct device *device = &titan_ge_device[port_num]->dev; ++ unsigned long reg_data; ++ unsigned int phy_reg; ++ int err = 0; ++ ++ /* Stop the Rx activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + (port_num << 12)), reg_data); ++ ++ /* Clear the port interrupts */ ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_INTERRUPT + (port_num << 8)), 0x0); ++ ++ if (config_done == 0) { ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0); ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_B, 0); ++ } ++ ++ /* Set the MAC Address */ ++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6); ++ ++ if (config_done == 0) ++ titan_port_init(netdev, titan_ge_eth); ++ ++ titan_ge_update_afx(titan_ge_eth); ++ ++ /* Allocate the Tx ring now */ ++ titan_ge_eth->tx_ring_skbs = 0; ++ titan_ge_eth->tx_ring_size = TITAN_GE_TX_QUEUE; ++ ++ /* Allocate space in the SRAM for the descriptors */ ++ titan_ge_eth->tx_desc_area = (titan_ge_tx_desc *) ++ (titan_ge_sram + TITAN_TX_RING_BYTES * port_num); ++ titan_ge_eth->tx_dma = TITAN_SRAM_BASE + TITAN_TX_RING_BYTES * port_num; ++ ++ if (!titan_ge_eth->tx_desc_area) { ++ printk(KERN_ERR ++ "%s: Cannot allocate Tx Ring (size %d bytes) for port %d\n", ++ netdev->name, TITAN_TX_RING_BYTES, port_num); ++ return -ENOMEM; ++ } ++ ++ memset(titan_ge_eth->tx_desc_area, 0, titan_ge_eth->tx_desc_area_size); ++ ++ /* Now initialize the Tx descriptor ring */ ++ titan_ge_init_tx_desc_ring(titan_ge_eth, ++ titan_ge_eth->tx_ring_size, ++ (unsigned long) titan_ge_eth->tx_desc_area, ++ (unsigned long) titan_ge_eth->tx_dma); ++ ++ /* Allocate the Rx ring now */ ++ titan_ge_eth->rx_ring_size = TITAN_GE_RX_QUEUE; ++ titan_ge_eth->rx_ring_skbs = 0; ++ ++ titan_ge_eth->rx_desc_area = ++ (titan_ge_rx_desc *)(titan_ge_sram + 0x1000 + TITAN_RX_RING_BYTES * port_num); ++ ++ titan_ge_eth->rx_dma = TITAN_SRAM_BASE + 0x1000 + TITAN_RX_RING_BYTES * port_num; ++ ++ if (!titan_ge_eth->rx_desc_area) { ++ printk(KERN_ERR "%s: Cannot allocate Rx Ring (size %d bytes)\n", ++ netdev->name, TITAN_RX_RING_BYTES); ++ ++ printk(KERN_ERR "%s: Freeing previously allocated TX queues...", ++ netdev->name); ++ ++ dma_free_coherent(device, titan_ge_eth->tx_desc_area_size, ++ (void *) titan_ge_eth->tx_desc_area, ++ titan_ge_eth->tx_dma); ++ ++ return -ENOMEM; ++ } ++ ++ memset(titan_ge_eth->rx_desc_area, 0, titan_ge_eth->rx_desc_area_size); ++ ++ /* Now initialize the Rx ring */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++ if ((titan_ge_init_rx_desc_ring ++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_JUMBO_BUFSIZE, ++ (unsigned long) titan_ge_eth->rx_desc_area, 0, ++ (unsigned long) titan_ge_eth->rx_dma)) == 0) ++#else ++ if ((titan_ge_init_rx_desc_ring ++ (titan_ge_eth, titan_ge_eth->rx_ring_size, TITAN_GE_STD_BUFSIZE, ++ (unsigned long) titan_ge_eth->rx_desc_area, 0, ++ (unsigned long) titan_ge_eth->rx_dma)) == 0) ++#endif ++ panic("%s: Error initializing RX Ring\n", netdev->name); ++ ++ /* Fill the Rx ring with the SKBs */ ++ titan_ge_port_start(netdev, titan_ge_eth); ++ ++ /* ++ * Check if Interrupt Coalscing needs to be turned on. The ++ * values specified in the register is multiplied by ++ * (8 x 64 nanoseconds) to determine when an interrupt should ++ * be sent to the CPU. ++ */ ++ ++ if (TITAN_GE_TX_COAL) { ++ titan_ge_eth->tx_int_coal = ++ titan_ge_tx_coal(TITAN_GE_TX_COAL, port_num); ++ } ++ ++ err = titan_ge_mdio_read(port_num, TITAN_GE_MDIO_PHY_STATUS, &phy_reg); ++ if (err == TITAN_GE_MDIO_ERROR) { ++ printk(KERN_ERR ++ "Could not read PHY control register 0x11 \n"); ++ return TITAN_ERROR; ++ } ++ if (!(phy_reg & 0x0400)) { ++ netif_carrier_off(netdev); ++ netif_stop_queue(netdev); ++ return TITAN_ERROR; ++ } else { ++ netif_carrier_on(netdev); ++ netif_start_queue(netdev); ++ } ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Queue the packet for Tx. Currently no support for zero copy, ++ * checksum offload and Scatter Gather. The chip does support ++ * Scatter Gather only. But, that wont help here since zero copy ++ * requires support for Tx checksumming also. ++ */ ++int titan_ge_start_xmit(struct sk_buff *skb, struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned long flags; ++ struct net_device_stats *stats; ++//printk("titan_ge_start_xmit\n"); ++ ++ stats = &titan_ge_eth->stats; ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ if ((TITAN_GE_TX_QUEUE - titan_ge_eth->tx_ring_skbs) <= ++ (skb_shinfo(skb)->nr_frags + 1)) { ++ netif_stop_queue(netdev); ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ printk(KERN_ERR "Tx OOD \n"); ++ return 1; ++ } ++ ++ titan_ge_tx_queue(titan_ge_eth, skb); ++ titan_ge_eth->tx_ring_skbs++; ++ ++ if (TITAN_GE_TX_QUEUE <= (titan_ge_eth->tx_ring_skbs + 4)) { ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ titan_ge_free_tx_queue(titan_ge_eth); ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ } ++ ++ stats->tx_bytes += skb->len; ++ stats->tx_packets++; ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ netdev->trans_start = jiffies; ++ ++ return 0; ++} ++ ++/* ++ * Actually does the Rx. Rx side checksumming supported. ++ */ ++static int titan_ge_rx(struct net_device *netdev, int port_num, ++ titan_ge_port_info * titan_ge_port, ++ titan_ge_packet * packet) ++{ ++ int rx_curr_desc, rx_used_desc; ++ volatile titan_ge_rx_desc *rx_desc; ++ ++ rx_curr_desc = titan_ge_port->rx_curr_desc_q; ++ rx_used_desc = titan_ge_port->rx_used_desc_q; ++ ++ if (((rx_curr_desc + 1) % TITAN_GE_RX_QUEUE) == rx_used_desc) ++ return TITAN_ERROR; ++ ++ rx_desc = &(titan_ge_port->rx_desc_area[rx_curr_desc]); ++ ++ if (rx_desc->cmd_sts & TITAN_GE_RX_BUFFER_OWNED) ++ return TITAN_ERROR; ++ ++ packet->skb = titan_ge_port->rx_skb[rx_curr_desc]; ++ packet->len = (rx_desc->cmd_sts & 0x7fff); ++ ++ /* ++ * At this point, we dont know if the checksumming ++ * actually helps relieve CPU. So, keep it for ++ * port 0 only ++ */ ++ packet->checksum = ntohs((rx_desc->buffer & 0xffff0000) >> 16); ++ packet->cmd_sts = rx_desc->cmd_sts; ++ ++ titan_ge_port->rx_curr_desc_q = (rx_curr_desc + 1) % TITAN_GE_RX_QUEUE; ++ ++ /* Prefetch the next descriptor */ ++ prefetch((const void *) ++ &titan_ge_port->rx_desc_area[titan_ge_port->rx_curr_desc_q + 1]); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Free the Tx queue of the used SKBs ++ */ ++static int titan_ge_free_tx_queue(titan_ge_port_info *titan_ge_eth) ++{ ++ unsigned long flags; ++ ++ /* Take the lock */ ++ spin_lock_irqsave(&(titan_ge_eth->lock), flags); ++ ++ while (titan_ge_return_tx_desc(titan_ge_eth, titan_ge_eth->port_num) == 0) ++ if (titan_ge_eth->tx_ring_skbs != 1) ++ titan_ge_eth->tx_ring_skbs--; ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Threshold beyond which we do the cleaning of ++ * Tx queue and new allocation for the Rx ++ * queue ++ */ ++#define TX_THRESHOLD 4 ++#define RX_THRESHOLD 10 ++ ++/* ++ * Receive the packets and send it to the kernel. ++ */ ++static int titan_ge_receive_queue(struct net_device *netdev, unsigned int max) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ titan_ge_packet packet; ++ struct net_device_stats *stats; ++ struct sk_buff *skb; ++ unsigned long received_packets = 0; ++ unsigned int ack; ++ ++ stats = &titan_ge_eth->stats; ++ ++ while ((--max) ++ && (titan_ge_rx(netdev, port_num, titan_ge_eth, &packet) == TITAN_OK)) { ++ skb = (struct sk_buff *) packet.skb; ++ ++ titan_ge_eth->rx_ring_skbs--; ++ ++ if (--titan_ge_eth->rx_work_limit < 0) ++ break; ++ received_packets++; ++ ++ stats->rx_packets++; ++ stats->rx_bytes += packet.len; ++ ++ if ((packet.cmd_sts & TITAN_GE_RX_PERR) || ++ (packet.cmd_sts & TITAN_GE_RX_OVERFLOW_ERROR) || ++ (packet.cmd_sts & TITAN_GE_RX_TRUNC) || ++ (packet.cmd_sts & TITAN_GE_RX_CRC_ERROR)) { ++ stats->rx_dropped++; ++ dev_kfree_skb_any(skb); ++ ++ continue; ++ } ++ /* ++ * Either support fast path or slow path. Decision ++ * making can really slow down the performance. The ++ * idea is to cut down the number of checks and improve ++ * the fastpath. ++ */ ++ ++ skb_put(skb, packet.len - 2); ++ ++ /* ++ * Increment data pointer by two since thats where ++ * the MAC starts ++ */ ++ skb_reserve(skb, 2); ++ skb->protocol = eth_type_trans(skb, netdev); ++ netif_receive_skb(skb); ++ ++ if (titan_ge_eth->rx_threshold > RX_THRESHOLD) { ++ ack = titan_ge_rx_task(netdev, titan_ge_eth); ++ TITAN_GE_WRITE((0x5048 + (port_num << 8)), ack); ++ titan_ge_eth->rx_threshold = 0; ++ } else ++ titan_ge_eth->rx_threshold++; ++ ++ if (titan_ge_eth->tx_threshold > TX_THRESHOLD) { ++ titan_ge_eth->tx_threshold = 0; ++ titan_ge_free_tx_queue(titan_ge_eth); ++ } ++ else ++ titan_ge_eth->tx_threshold++; ++ ++ } ++ return received_packets; ++} ++ ++ ++/* ++ * Enable the Rx side interrupts ++ */ ++static void titan_ge_enable_int(unsigned int port_num, ++ titan_ge_port_info *titan_ge_eth, ++ struct net_device *netdev) ++{ ++ unsigned long reg_data = TITAN_GE_READ(TITAN_GE_INTR_XDMA_IE); ++ ++ if (port_num == 0) ++ reg_data |= 0x3; ++ if (port_num == 1) ++ reg_data |= 0x300; ++ if (port_num == 2) ++ reg_data |= 0x30000; ++ ++ /* Re-enable interrupts */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, reg_data); ++} ++ ++/* ++ * Main function to handle the polling for Rx side NAPI. ++ * Receive interrupts have been disabled at this point. ++ * The poll schedules the transmit followed by receive. ++ */ ++static int titan_ge_poll(struct net_device *netdev, int *budget) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ int port_num = titan_ge_eth->port_num; ++ int work_done = 0; ++ unsigned long flags, status; ++ ++ titan_ge_eth->rx_work_limit = *budget; ++ if (titan_ge_eth->rx_work_limit > netdev->quota) ++ titan_ge_eth->rx_work_limit = netdev->quota; ++ ++ do { ++ /* Do the transmit cleaning work here */ ++ titan_ge_free_tx_queue(titan_ge_eth); ++ ++ /* Ack the Rx interrupts */ ++ if (port_num == 0) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x3); ++ if (port_num == 1) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x300); ++ if (port_num == 2) ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_CORE_A, 0x30000); ++ ++ work_done += titan_ge_receive_queue(netdev, 0); ++ ++ /* Out of quota and there is work to be done */ ++ if (titan_ge_eth->rx_work_limit < 0) ++ goto not_done; ++ ++ /* Receive alloc_skb could lead to OOM */ ++ if (oom_flag == 1) { ++ oom_flag = 0; ++ goto oom; ++ } ++ ++ status = TITAN_GE_READ(TITAN_GE_INTR_XDMA_CORE_A); ++ } while (status & 0x30300); ++ ++ /* If we are here, then no more interrupts to process */ ++ goto done; ++ ++not_done: ++ *budget -= work_done; ++ netdev->quota -= work_done; ++ return 1; ++ ++oom: ++ printk(KERN_ERR "OOM \n"); ++ netif_rx_complete(netdev); ++ return 0; ++ ++done: ++ /* ++ * No more packets on the poll list. Turn the interrupts ++ * back on and we should be able to catch the new ++ * packets in the interrupt handler ++ */ ++ if (!work_done) ++ work_done = 1; ++ ++ *budget -= work_done; ++ netdev->quota -= work_done; ++ ++ spin_lock_irqsave(&titan_ge_eth->lock, flags); ++ ++ /* Remove us from the poll list */ ++ netif_rx_complete(netdev); ++ ++ /* Re-enable interrupts */ ++ titan_ge_enable_int(port_num, titan_ge_eth, netdev); ++ ++ spin_unlock_irqrestore(&titan_ge_eth->lock, flags); ++ ++ return 0; ++} ++ ++/* ++ * Close the network device ++ */ ++int titan_ge_stop(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ spin_lock_irq(&(titan_ge_eth->lock)); ++ titan_ge_eth_stop(netdev); ++ free_irq(netdev->irq, netdev); ++ spin_unlock_irq(&titan_ge_eth->lock); ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Free the Tx ring ++ */ ++static void titan_ge_free_tx_rings(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int curr; ++ unsigned long reg_data; ++ ++ /* Stop the Tx DMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)); ++ reg_data |= 0xc0000000; ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)), reg_data); ++ ++ /* Disable the TMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ for (curr = 0; ++ (titan_ge_eth->tx_ring_skbs) && (curr < TITAN_GE_TX_QUEUE); ++ curr++) { ++ if (titan_ge_eth->tx_skb[curr]) { ++ dev_kfree_skb(titan_ge_eth->tx_skb[curr]); ++ titan_ge_eth->tx_ring_skbs--; ++ } ++ } ++ ++ if (titan_ge_eth->tx_ring_skbs != 0) ++ printk ++ ("%s: Error on Tx descriptor free - could not free %d" ++ " descriptors\n", netdev->name, ++ titan_ge_eth->tx_ring_skbs); ++ ++#ifndef TITAN_RX_RING_IN_SRAM ++ dma_free_coherent(&titan_ge_device[port_num]->dev, ++ titan_ge_eth->tx_desc_area_size, ++ (void *) titan_ge_eth->tx_desc_area, ++ titan_ge_eth->tx_dma); ++#endif ++} ++ ++/* ++ * Free the Rx ring ++ */ ++static void titan_ge_free_rx_rings(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ unsigned int curr; ++ unsigned long reg_data; ++ ++ /* Stop the Rx DMA */ ++ reg_data = TITAN_GE_READ(TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)); ++ reg_data |= 0x000c0000; ++ TITAN_GE_WRITE((TITAN_GE_CHANNEL0_CONFIG + ++ (port_num << 8)), reg_data); ++ ++ /* Disable the RMAC */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x00000001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ for (curr = 0; ++ titan_ge_eth->rx_ring_skbs && (curr < TITAN_GE_RX_QUEUE); ++ curr++) { ++ if (titan_ge_eth->rx_skb[curr]) { ++ dev_kfree_skb(titan_ge_eth->rx_skb[curr]); ++ titan_ge_eth->rx_ring_skbs--; ++ } ++ } ++ ++ if (titan_ge_eth->rx_ring_skbs != 0) ++ printk(KERN_ERR ++ "%s: Error in freeing Rx Ring. %d skb's still" ++ " stuck in RX Ring - ignoring them\n", netdev->name, ++ titan_ge_eth->rx_ring_skbs); ++ ++#ifndef TITAN_RX_RING_IN_SRAM ++ dma_free_coherent(&titan_ge_device[port_num]->dev, ++ titan_ge_eth->rx_desc_area_size, ++ (void *) titan_ge_eth->rx_desc_area, ++ titan_ge_eth->rx_dma); ++#endif ++} ++ ++/* ++ * Actually does the stop of the Ethernet device ++ */ ++static void titan_ge_eth_stop(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ netif_stop_queue(netdev); ++ ++ titan_ge_port_reset(titan_ge_eth->port_num); ++ ++ titan_ge_free_tx_rings(netdev); ++ titan_ge_free_rx_rings(netdev); ++ ++ /* Disable the Tx and Rx Interrupts for all channels */ ++ TITAN_GE_WRITE(TITAN_GE_INTR_XDMA_IE, 0x0); ++} ++ ++/* ++ * Update the MAC address. Note that we have to write the ++ * address in three station registers, 16 bits each. And this ++ * has to be done for TMAC and RMAC ++ */ ++static void titan_ge_update_mac_address(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ unsigned int port_num = titan_ge_eth->port_num; ++ u8 p_addr[6]; ++ ++ memcpy(titan_ge_eth->port_mac_addr, netdev->dev_addr, 6); ++ memcpy(p_addr, netdev->dev_addr, 6); ++ ++ /* Update the Address Filtering Match tables */ ++ titan_ge_update_afx(titan_ge_eth); ++ ++ printk("Station MAC : %d %d %d %d %d %d \n", ++ p_addr[5], p_addr[4], p_addr[3], ++ p_addr[2], p_addr[1], p_addr[0]); ++ ++ /* Set the MAC address here for TMAC and RMAC */ ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_HI + (port_num << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_MID + (port_num << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_STATION_LOW + (port_num << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++ ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_HI + (port_num << 12)), ++ ((p_addr[5] << 8) | p_addr[4])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_MID + (port_num << 12)), ++ ((p_addr[3] << 8) | p_addr[2])); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_STATION_LOW + (port_num << 12)), ++ ((p_addr[1] << 8) | p_addr[0])); ++} ++ ++/* ++ * Set the MAC address of the Ethernet device ++ */ ++static int titan_ge_set_mac_address(struct net_device *dev, void *addr) ++{ ++ titan_ge_port_info *tp = netdev_priv(dev); ++ struct sockaddr *sa = addr; ++ ++ memcpy(dev->dev_addr, sa->sa_data, dev->addr_len); ++ ++ spin_lock_irq(&tp->lock); ++ titan_ge_update_mac_address(dev); ++ spin_unlock_irq(&tp->lock); ++ ++ return 0; ++} ++ ++/* ++ * Get the Ethernet device stats ++ */ ++static struct net_device_stats *titan_ge_get_stats(struct net_device *netdev) ++{ ++ titan_ge_port_info *titan_ge_eth = netdev_priv(netdev); ++ ++ return &titan_ge_eth->stats; ++} ++ ++/* ++ * Initialize the Rx descriptor ring for the Titan Ge ++ */ ++static int titan_ge_init_rx_desc_ring(titan_ge_port_info * titan_eth_port, ++ int rx_desc_num, ++ int rx_buff_size, ++ unsigned long rx_desc_base_addr, ++ unsigned long rx_buff_base_addr, ++ unsigned long rx_dma) ++{ ++ volatile titan_ge_rx_desc *rx_desc; ++ unsigned long buffer_addr; ++ int index; ++ unsigned long titan_ge_rx_desc_bus = rx_dma; ++ ++ buffer_addr = rx_buff_base_addr; ++ rx_desc = (titan_ge_rx_desc *) rx_desc_base_addr; ++ ++ /* Check alignment */ ++ if (rx_buff_base_addr & 0xF) ++ return 0; ++ ++ /* Check Rx buffer size */ ++ if ((rx_buff_size < 8) || (rx_buff_size > TITAN_GE_MAX_RX_BUFFER)) ++ return 0; ++ ++ /* 64-bit alignment ++ if ((rx_buff_base_addr + rx_buff_size) & 0x7) ++ return 0; */ ++ ++ /* Initialize the Rx desc ring */ ++ for (index = 0; index < rx_desc_num; index++) { ++ titan_ge_rx_desc_bus += sizeof(titan_ge_rx_desc); ++ rx_desc[index].cmd_sts = 0; ++ rx_desc[index].buffer_addr = buffer_addr; ++ titan_eth_port->rx_skb[index] = NULL; ++ buffer_addr += rx_buff_size; ++ } ++ ++ titan_eth_port->rx_curr_desc_q = 0; ++ titan_eth_port->rx_used_desc_q = 0; ++ ++ titan_eth_port->rx_desc_area = (titan_ge_rx_desc *) rx_desc_base_addr; ++ titan_eth_port->rx_desc_area_size = ++ rx_desc_num * sizeof(titan_ge_rx_desc); ++ ++ titan_eth_port->rx_dma = rx_dma; ++ ++ return TITAN_OK; ++} ++ ++/* ++ * Initialize the Tx descriptor ring. Descriptors in the SRAM ++ */ ++static int titan_ge_init_tx_desc_ring(titan_ge_port_info * titan_ge_port, ++ int tx_desc_num, ++ unsigned long tx_desc_base_addr, ++ unsigned long tx_dma) ++{ ++ titan_ge_tx_desc *tx_desc; ++ int index; ++ unsigned long titan_ge_tx_desc_bus = tx_dma; ++ ++ if (tx_desc_base_addr & 0xF) ++ return 0; ++ ++ tx_desc = (titan_ge_tx_desc *) tx_desc_base_addr; ++ ++ for (index = 0; index < tx_desc_num; index++) { ++ titan_ge_port->tx_dma_array[index] = ++ (dma_addr_t) titan_ge_tx_desc_bus; ++ titan_ge_tx_desc_bus += sizeof(titan_ge_tx_desc); ++ tx_desc[index].cmd_sts = 0x0000; ++ tx_desc[index].buffer_len = 0; ++ tx_desc[index].buffer_addr = 0x00000000; ++ titan_ge_port->tx_skb[index] = NULL; ++ } ++ ++ titan_ge_port->tx_curr_desc_q = 0; ++ titan_ge_port->tx_used_desc_q = 0; ++ ++ titan_ge_port->tx_desc_area = (titan_ge_tx_desc *) tx_desc_base_addr; ++ titan_ge_port->tx_desc_area_size = ++ tx_desc_num * sizeof(titan_ge_tx_desc); ++ ++ titan_ge_port->tx_dma = tx_dma; ++ return TITAN_OK; ++} ++ ++/* ++ * Initialize the device as an Ethernet device ++ */ ++static int __init titan_ge_probe(struct device *device) ++{ ++ titan_ge_port_info *titan_ge_eth; ++ struct net_device *netdev; ++ int port = to_platform_device(device)->id; ++ int err; ++ ++ netdev = alloc_etherdev(sizeof(titan_ge_port_info)); ++ if (!netdev) { ++ err = -ENODEV; ++ goto out; ++ } ++ ++ netdev->open = titan_ge_open; ++ netdev->stop = titan_ge_stop; ++ netdev->hard_start_xmit = titan_ge_start_xmit; ++ netdev->get_stats = titan_ge_get_stats; ++ netdev->set_multicast_list = titan_ge_set_multi; ++ netdev->set_mac_address = titan_ge_set_mac_address; ++ ++ /* Tx timeout */ ++ netdev->tx_timeout = titan_ge_tx_timeout; ++ netdev->watchdog_timeo = 2 * HZ; ++ ++ /* Set these to very high values */ ++ netdev->poll = titan_ge_poll; ++ netdev->weight = 64; ++ ++ netdev->tx_queue_len = TITAN_GE_TX_QUEUE; ++ netif_carrier_off(netdev); ++ netdev->base_addr = 0; ++ ++ netdev->change_mtu = titan_ge_change_mtu; ++ ++ titan_ge_eth = netdev_priv(netdev); ++ /* Allocation of memory for the driver structures */ ++ ++ titan_ge_eth->port_num = port; ++ ++ /* Configure the Tx timeout handler */ ++ INIT_WORK(&titan_ge_eth->tx_timeout_task, ++ (void (*)(void *)) titan_ge_tx_timeout_task, netdev); ++ ++ spin_lock_init(&titan_ge_eth->lock); ++ ++ /* set MAC addresses */ ++ memcpy(netdev->dev_addr, titan_ge_mac_addr_base, 6); ++ netdev->dev_addr[5] += port; ++ ++ err = register_netdev(netdev); ++ ++ if (err) ++ goto out_free_netdev; ++ ++ printk(KERN_NOTICE ++ "%s: port %d with MAC address %02x:%02x:%02x:%02x:%02x:%02x\n", ++ netdev->name, port, netdev->dev_addr[0], ++ netdev->dev_addr[1], netdev->dev_addr[2], ++ netdev->dev_addr[3], netdev->dev_addr[4], ++ netdev->dev_addr[5]); ++ ++ printk(KERN_NOTICE "Rx NAPI supported, Tx Coalescing ON \n"); ++ ++ return 0; ++ ++out_free_netdev: ++ kfree(netdev); ++ ++out: ++ return err; ++} ++ ++static void __devexit titan_device_remove(struct device *device) ++{ ++} ++ ++/* ++ * Reset the Ethernet port ++ */ ++static void titan_ge_port_reset(unsigned int port_num) ++{ ++ unsigned int reg_data; ++ ++ /* Stop the Tx port activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x0001); ++ TITAN_GE_WRITE((TITAN_GE_TMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ /* Stop the Rx port activity */ ++ reg_data = TITAN_GE_READ(TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)); ++ reg_data &= ~(0x0001); ++ TITAN_GE_WRITE((TITAN_GE_RMAC_CONFIG_1 + ++ (port_num << 12)), reg_data); ++ ++ return; ++} ++ ++/* ++ * Return the Tx desc after use by the XDMA ++ */ ++static int titan_ge_return_tx_desc(titan_ge_port_info * titan_ge_eth, int port) ++{ ++ int tx_desc_used; ++ struct sk_buff *skb; ++ ++ tx_desc_used = titan_ge_eth->tx_used_desc_q; ++ ++ /* return right away */ ++ if (tx_desc_used == titan_ge_eth->tx_curr_desc_q) ++ return TITAN_ERROR; ++ ++ /* Now the critical stuff */ ++ skb = titan_ge_eth->tx_skb[tx_desc_used]; ++ ++ dev_kfree_skb_any(skb); ++ ++ titan_ge_eth->tx_skb[tx_desc_used] = NULL; ++ titan_ge_eth->tx_used_desc_q = ++ (tx_desc_used + 1) % TITAN_GE_TX_QUEUE; ++ ++ return 0; ++} ++ ++/* ++ * Coalescing for the Tx path ++ */ ++static unsigned long titan_ge_tx_coal(unsigned long delay, int port) ++{ ++ unsigned long rx_delay; ++ ++ rx_delay = TITAN_GE_READ(TITAN_GE_INT_COALESCING); ++ delay = (delay << 16) | rx_delay; ++ ++ TITAN_GE_WRITE(TITAN_GE_INT_COALESCING, delay); ++ TITAN_GE_WRITE(0x5038, delay); ++ ++ return delay; ++} ++ ++static struct device_driver titan_soc_driver = { ++ .name = titan_string, ++ .bus = &platform_bus_type, ++ .probe = titan_ge_probe, ++ .remove = __devexit_p(titan_device_remove), ++}; ++ ++static void titan_platform_release (struct device *device) ++{ ++ struct platform_device *pldev; ++ ++ /* free device */ ++ pldev = to_platform_device (device); ++ kfree (pldev); ++} ++ ++/* ++ * Register the Titan GE with the kernel ++ */ ++static int __init titan_ge_init_module(void) ++{ ++ struct platform_device *pldev; ++ unsigned int version, device; ++ int i; ++ ++ printk(KERN_NOTICE ++ "PMC-Sierra TITAN 10/100/1000 Ethernet Driver \n"); ++ ++ titan_ge_base = (unsigned long) ioremap(TITAN_GE_BASE, TITAN_GE_SIZE); ++ if (!titan_ge_base) { ++ printk("Mapping Titan GE failed\n"); ++ goto out; ++ } ++ ++ device = TITAN_GE_READ(TITAN_GE_DEVICE_ID); ++ version = (device & 0x000f0000) >> 16; ++ device &= 0x0000ffff; ++ ++ printk(KERN_NOTICE "Device Id : %x, Version : %x \n", device, version); ++ ++#ifdef TITAN_RX_RING_IN_SRAM ++ titan_ge_sram = (unsigned long) ioremap(TITAN_SRAM_BASE, ++ TITAN_SRAM_SIZE); ++ if (!titan_ge_sram) { ++ printk("Mapping Titan SRAM failed\n"); ++ goto out_unmap_ge; ++ } ++#endif ++ ++ if (driver_register(&titan_soc_driver)) { ++ printk(KERN_ERR "Driver registration failed\n"); ++ goto out_unmap_sram; ++ } ++ ++ for (i = 0; i < 3; i++) { ++ titan_ge_device[i] = NULL; ++ ++ if (!(pldev = kmalloc (sizeof (*pldev), GFP_KERNEL))) ++ continue; ++ ++ memset (pldev, 0, sizeof (*pldev)); ++ pldev->name = titan_string; ++ pldev->id = i; ++ pldev->dev.release = titan_platform_release; ++ titan_ge_device[i] = pldev; ++ ++ if (platform_device_register (pldev)) { ++ kfree (pldev); ++ titan_ge_device[i] = NULL; ++ continue; ++ } ++ ++ if (!pldev->dev.driver) { ++ /* ++ * The driver was not bound to this device, there was ++ * no hardware at this address. Unregister it, as the ++ * release fuction will take care of freeing the ++ * allocated structure ++ */ ++ titan_ge_device[i] = NULL; ++ platform_device_unregister (pldev); ++ } ++ } ++ ++ return 0; ++ ++out_unmap_sram: ++ iounmap((void *)titan_ge_sram); ++ ++out_unmap_ge: ++ iounmap((void *)titan_ge_base); ++ ++out: ++ return -ENOMEM; ++} ++ ++/* ++ * Unregister the Titan GE from the kernel ++ */ ++static void __exit titan_ge_cleanup_module(void) ++{ ++ int i; ++ ++ driver_unregister(&titan_soc_driver); ++ ++ for (i = 0; i < 3; i++) { ++ if (titan_ge_device[i]) { ++ platform_device_unregister (titan_ge_device[i]); ++ titan_ge_device[i] = NULL; ++ } ++ } ++ ++ iounmap((void *)titan_ge_sram); ++ iounmap((void *)titan_ge_base); ++} ++ ++MODULE_AUTHOR("Manish Lachwani "); ++MODULE_DESCRIPTION("Titan GE Ethernet driver"); ++MODULE_LICENSE("GPL"); ++ ++module_init(titan_ge_init_module); ++module_exit(titan_ge_cleanup_module); +diff -Nur linux-2.6.34.orig/drivers/net/titan_ge.h linux-loongson/drivers/net/titan_ge.h +--- linux-2.6.34.orig/drivers/net/titan_ge.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/titan_ge.h 2010-05-27 18:12:39.084716399 +0200 +@@ -0,0 +1,415 @@ ++#ifndef _TITAN_GE_H_ ++#define _TITAN_GE_H_ ++ ++#include ++#include ++#include ++#include ++ ++/* ++ * These functions should be later moved to a more generic location since there ++ * will be others accessing it also ++ */ ++ ++/* ++ * This is the way it works: LKB5 Base is at 0x0128. TITAN_BASE is defined in ++ * include/asm/titan_dep.h. TITAN_GE_BASE is the value in the TITAN_GE_LKB5 ++ * register. ++ */ ++ ++#define TITAN_GE_BASE 0xfe000000UL ++#define TITAN_GE_SIZE 0x10000UL ++ ++extern unsigned long titan_ge_base; ++ ++#define TITAN_GE_WRITE(offset, data) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) = (data) ++ ++#define TITAN_GE_READ(offset) *(volatile u32 *)(titan_ge_base + (offset)) ++ ++#ifndef msec_delay ++#define msec_delay(x) do { if(in_interrupt()) { \ ++ /* Don't mdelay in interrupt context! */ \ ++ BUG(); \ ++ } else { \ ++ set_current_state(TASK_UNINTERRUPTIBLE); \ ++ schedule_timeout((x * HZ)/1000); \ ++ } } while(0) ++#endif ++ ++#define TITAN_GE_PORT_0 ++ ++#define TITAN_SRAM_BASE ((OCD_READ(RM9000x2_OCD_LKB13) & ~1) << 4) ++#define TITAN_SRAM_SIZE 0x2000UL ++ ++/* ++ * We may need these constants ++ */ ++#define TITAN_BIT0 0x00000001 ++#define TITAN_BIT1 0x00000002 ++#define TITAN_BIT2 0x00000004 ++#define TITAN_BIT3 0x00000008 ++#define TITAN_BIT4 0x00000010 ++#define TITAN_BIT5 0x00000020 ++#define TITAN_BIT6 0x00000040 ++#define TITAN_BIT7 0x00000080 ++#define TITAN_BIT8 0x00000100 ++#define TITAN_BIT9 0x00000200 ++#define TITAN_BIT10 0x00000400 ++#define TITAN_BIT11 0x00000800 ++#define TITAN_BIT12 0x00001000 ++#define TITAN_BIT13 0x00002000 ++#define TITAN_BIT14 0x00004000 ++#define TITAN_BIT15 0x00008000 ++#define TITAN_BIT16 0x00010000 ++#define TITAN_BIT17 0x00020000 ++#define TITAN_BIT18 0x00040000 ++#define TITAN_BIT19 0x00080000 ++#define TITAN_BIT20 0x00100000 ++#define TITAN_BIT21 0x00200000 ++#define TITAN_BIT22 0x00400000 ++#define TITAN_BIT23 0x00800000 ++#define TITAN_BIT24 0x01000000 ++#define TITAN_BIT25 0x02000000 ++#define TITAN_BIT26 0x04000000 ++#define TITAN_BIT27 0x08000000 ++#define TITAN_BIT28 0x10000000 ++#define TITAN_BIT29 0x20000000 ++#define TITAN_BIT30 0x40000000 ++#define TITAN_BIT31 0x80000000 ++ ++/* Flow Control */ ++#define TITAN_GE_FC_NONE 0x0 ++#define TITAN_GE_FC_FULL 0x1 ++#define TITAN_GE_FC_TX_PAUSE 0x2 ++#define TITAN_GE_FC_RX_PAUSE 0x3 ++ ++/* Duplex Settings */ ++#define TITAN_GE_FULL_DUPLEX 0x1 ++#define TITAN_GE_HALF_DUPLEX 0x2 ++ ++/* Speed settings */ ++#define TITAN_GE_SPEED_1000 0x1 ++#define TITAN_GE_SPEED_100 0x2 ++#define TITAN_GE_SPEED_10 0x3 ++ ++/* Debugging info only */ ++#undef TITAN_DEBUG ++ ++/* Keep the rings in the Titan's SSRAM */ ++#define TITAN_RX_RING_IN_SRAM ++ ++#ifdef CONFIG_64BIT ++#define TITAN_GE_IE_MASK 0xfffffffffb001b64 ++#define TITAN_GE_IE_STATUS 0xfffffffffb001b60 ++#else ++#define TITAN_GE_IE_MASK 0xfb001b64 ++#define TITAN_GE_IE_STATUS 0xfb001b60 ++#endif ++ ++/* Support for Jumbo Frames */ ++#undef TITAN_GE_JUMBO_FRAMES ++ ++/* Rx buffer size */ ++#ifdef TITAN_GE_JUMBO_FRAMES ++#define TITAN_GE_JUMBO_BUFSIZE 9080 ++#else ++#define TITAN_GE_STD_BUFSIZE 1580 ++#endif ++ ++/* ++ * Tx and Rx Interrupt Coalescing parameter. These values are ++ * for 1 Ghz processor. Rx coalescing can be taken care of ++ * by NAPI. NAPI is adaptive and hence useful. Tx coalescing ++ * is not adaptive. Hence, these values need to be adjusted ++ * based on load, CPU speed etc. ++ */ ++#define TITAN_GE_RX_COAL 150 ++#define TITAN_GE_TX_COAL 300 ++ ++#if defined(__BIG_ENDIAN) ++ ++/* Define the Rx descriptor */ ++typedef struct eth_rx_desc { ++ u32 reserved; /* Unused */ ++ u32 buffer_addr; /* CPU buffer address */ ++ u32 cmd_sts; /* Command and Status */ ++ u32 buffer; /* XDMA buffer address */ ++} titan_ge_rx_desc; ++ ++/* Define the Tx descriptor */ ++typedef struct eth_tx_desc { ++ u16 cmd_sts; /* Command, Status and Buffer count */ ++ u16 buffer_len; /* Length of the buffer */ ++ u32 buffer_addr; /* Physical address of the buffer */ ++} titan_ge_tx_desc; ++ ++#elif defined(__LITTLE_ENDIAN) ++ ++/* Define the Rx descriptor */ ++typedef struct eth_rx_desc { ++ u32 buffer_addr; /* CPU buffer address */ ++ u32 reserved; /* Unused */ ++ u32 buffer; /* XDMA buffer address */ ++ u32 cmd_sts; /* Command and Status */ ++} titan_ge_rx_desc; ++ ++/* Define the Tx descriptor */ ++typedef struct eth_tx_desc { ++ u32 buffer_addr; /* Physical address of the buffer */ ++ u16 buffer_len; /* Length of the buffer */ ++ u16 cmd_sts; /* Command, Status and Buffer count */ ++} titan_ge_tx_desc; ++#endif ++ ++/* Default Tx Queue Size */ ++#define TITAN_GE_TX_QUEUE 128 ++#define TITAN_TX_RING_BYTES (TITAN_GE_TX_QUEUE * sizeof(struct eth_tx_desc)) ++ ++/* Default Rx Queue Size */ ++#define TITAN_GE_RX_QUEUE 64 ++#define TITAN_RX_RING_BYTES (TITAN_GE_RX_QUEUE * sizeof(struct eth_rx_desc)) ++ ++/* Packet Structure */ ++typedef struct _pkt_info { ++ unsigned int len; ++ unsigned int cmd_sts; ++ unsigned int buffer; ++ struct sk_buff *skb; ++ unsigned int checksum; ++} titan_ge_packet; ++ ++ ++#define PHYS_CNT 3 ++ ++/* Titan Port specific data structure */ ++typedef struct _eth_port_ctrl { ++ unsigned int port_num; ++ u8 port_mac_addr[6]; ++ ++ /* Rx descriptor pointers */ ++ int rx_curr_desc_q, rx_used_desc_q; ++ ++ /* Tx descriptor pointers */ ++ int tx_curr_desc_q, tx_used_desc_q; ++ ++ /* Rx descriptor area */ ++ volatile titan_ge_rx_desc *rx_desc_area; ++ unsigned int rx_desc_area_size; ++ struct sk_buff* rx_skb[TITAN_GE_RX_QUEUE]; ++ ++ /* Tx Descriptor area */ ++ volatile titan_ge_tx_desc *tx_desc_area; ++ unsigned int tx_desc_area_size; ++ struct sk_buff* tx_skb[TITAN_GE_TX_QUEUE]; ++ ++ /* Timeout task */ ++ struct work_struct tx_timeout_task; ++ ++ /* DMA structures and handles */ ++ dma_addr_t tx_dma; ++ dma_addr_t rx_dma; ++ dma_addr_t tx_dma_array[TITAN_GE_TX_QUEUE]; ++ ++ /* Device lock */ ++ spinlock_t lock; ++ ++ unsigned int tx_ring_skbs; ++ unsigned int rx_ring_size; ++ unsigned int tx_ring_size; ++ unsigned int rx_ring_skbs; ++ ++ struct net_device_stats stats; ++ ++ /* Tx and Rx coalescing */ ++ unsigned long rx_int_coal; ++ unsigned long tx_int_coal; ++ ++ /* Threshold for replenishing the Rx and Tx rings */ ++ unsigned int tx_threshold; ++ unsigned int rx_threshold; ++ ++ /* NAPI work limit */ ++ unsigned int rx_work_limit; ++} titan_ge_port_info; ++ ++/* Titan specific constants */ ++#define TITAN_ETH_PORT_IRQ 3 ++ ++/* Max Rx buffer */ ++#define TITAN_GE_MAX_RX_BUFFER 65536 ++ ++/* Tx and Rx Error */ ++#define TITAN_GE_ERROR ++ ++/* Rx Descriptor Command and Status */ ++ ++#define TITAN_GE_RX_CRC_ERROR TITAN_BIT27 /* crc error */ ++#define TITAN_GE_RX_OVERFLOW_ERROR TITAN_BIT15 /* overflow */ ++#define TITAN_GE_RX_BUFFER_OWNED TITAN_BIT21 /* buffer ownership */ ++#define TITAN_GE_RX_STP TITAN_BIT31 /* start of packet */ ++#define TITAN_GE_RX_BAM TITAN_BIT30 /* broadcast address match */ ++#define TITAN_GE_RX_PAM TITAN_BIT28 /* physical address match */ ++#define TITAN_GE_RX_LAFM TITAN_BIT29 /* logical address filter match */ ++#define TITAN_GE_RX_VLAN TITAN_BIT26 /* virtual lans */ ++#define TITAN_GE_RX_PERR TITAN_BIT19 /* packet error */ ++#define TITAN_GE_RX_TRUNC TITAN_BIT20 /* packet size greater than 32 buffers */ ++ ++/* Tx Descriptor Command */ ++#define TITAN_GE_TX_BUFFER_OWNED TITAN_BIT5 /* buffer ownership */ ++#define TITAN_GE_TX_ENABLE_INTERRUPT TITAN_BIT15 /* Interrupt Enable */ ++ ++/* Return Status */ ++#define TITAN_OK 0x1 /* Good Status */ ++#define TITAN_ERROR 0x2 /* Error Status */ ++ ++/* MIB specific register offset */ ++#define TITAN_GE_MSTATX_STATS_BASE_LOW 0x0800 /* MSTATX COUNTL[15:0] */ ++#define TITAN_GE_MSTATX_STATS_BASE_MID 0x0804 /* MSTATX COUNTM[15:0] */ ++#define TITAN_GE_MSTATX_STATS_BASE_HI 0x0808 /* MSTATX COUNTH[7:0] */ ++#define TITAN_GE_MSTATX_CONTROL 0x0828 /* MSTATX Control */ ++#define TITAN_GE_MSTATX_VARIABLE_SELECT 0x082C /* MSTATX Variable Select */ ++ ++/* MIB counter offsets, add to the TITAN_GE_MSTATX_STATS_BASE_XXX */ ++#define TITAN_GE_MSTATX_RXFRAMESOK 0x0040 ++#define TITAN_GE_MSTATX_RXOCTETSOK 0x0050 ++#define TITAN_GE_MSTATX_RXFRAMES 0x0060 ++#define TITAN_GE_MSTATX_RXOCTETS 0x0070 ++#define TITAN_GE_MSTATX_RXUNICASTFRAMESOK 0x0080 ++#define TITAN_GE_MSTATX_RXBROADCASTFRAMESOK 0x0090 ++#define TITAN_GE_MSTATX_RXMULTICASTFRAMESOK 0x00A0 ++#define TITAN_GE_MSTATX_RXTAGGEDFRAMESOK 0x00B0 ++#define TITAN_GE_MSTATX_RXMACPAUSECONTROLFRAMESOK 0x00C0 ++#define TITAN_GE_MSTATX_RXMACCONTROLFRAMESOK 0x00D0 ++#define TITAN_GE_MSTATX_RXFCSERROR 0x00E0 ++#define TITAN_GE_MSTATX_RXALIGNMENTERROR 0x00F0 ++#define TITAN_GE_MSTATX_RXSYMBOLERROR 0x0100 ++#define TITAN_GE_MSTATX_RXLAYER1ERROR 0x0110 ++#define TITAN_GE_MSTATX_RXINRANGELENGTHERROR 0x0120 ++#define TITAN_GE_MSTATX_RXLONGLENGTHERROR 0x0130 ++#define TITAN_GE_MSTATX_RXLONGLENGTHCRCERROR 0x0140 ++#define TITAN_GE_MSTATX_RXSHORTLENGTHERROR 0x0150 ++#define TITAN_GE_MSTATX_RXSHORTLLENGTHCRCERROR 0x0160 ++#define TITAN_GE_MSTATX_RXFRAMES64OCTETS 0x0170 ++#define TITAN_GE_MSTATX_RXFRAMES65TO127OCTETS 0x0180 ++#define TITAN_GE_MSTATX_RXFRAMES128TO255OCTETS 0x0190 ++#define TITAN_GE_MSTATX_RXFRAMES256TO511OCTETS 0x01A0 ++#define TITAN_GE_MSTATX_RXFRAMES512TO1023OCTETS 0x01B0 ++#define TITAN_GE_MSTATX_RXFRAMES1024TO1518OCTETS 0x01C0 ++#define TITAN_GE_MSTATX_RXFRAMES1519TOMAXSIZE 0x01D0 ++#define TITAN_GE_MSTATX_RXSTATIONADDRESSFILTERED 0x01E0 ++#define TITAN_GE_MSTATX_RXVARIABLE 0x01F0 ++#define TITAN_GE_MSTATX_GENERICADDRESSFILTERED 0x0200 ++#define TITAN_GE_MSTATX_UNICASTFILTERED 0x0210 ++#define TITAN_GE_MSTATX_MULTICASTFILTERED 0x0220 ++#define TITAN_GE_MSTATX_BROADCASTFILTERED 0x0230 ++#define TITAN_GE_MSTATX_HASHFILTERED 0x0240 ++#define TITAN_GE_MSTATX_TXFRAMESOK 0x0250 ++#define TITAN_GE_MSTATX_TXOCTETSOK 0x0260 ++#define TITAN_GE_MSTATX_TXOCTETS 0x0270 ++#define TITAN_GE_MSTATX_TXTAGGEDFRAMESOK 0x0280 ++#define TITAN_GE_MSTATX_TXMACPAUSECONTROLFRAMESOK 0x0290 ++#define TITAN_GE_MSTATX_TXFCSERROR 0x02A0 ++#define TITAN_GE_MSTATX_TXSHORTLENGTHERROR 0x02B0 ++#define TITAN_GE_MSTATX_TXLONGLENGTHERROR 0x02C0 ++#define TITAN_GE_MSTATX_TXSYSTEMERROR 0x02D0 ++#define TITAN_GE_MSTATX_TXMACERROR 0x02E0 ++#define TITAN_GE_MSTATX_TXCARRIERSENSEERROR 0x02F0 ++#define TITAN_GE_MSTATX_TXSQETESTERROR 0x0300 ++#define TITAN_GE_MSTATX_TXUNICASTFRAMESOK 0x0310 ++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESOK 0x0320 ++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESOK 0x0330 ++#define TITAN_GE_MSTATX_TXUNICASTFRAMESATTEMPTED 0x0340 ++#define TITAN_GE_MSTATX_TXBROADCASTFRAMESATTEMPTED 0x0350 ++#define TITAN_GE_MSTATX_TXMULTICASTFRAMESATTEMPTED 0x0360 ++#define TITAN_GE_MSTATX_TXFRAMES64OCTETS 0x0370 ++#define TITAN_GE_MSTATX_TXFRAMES65TO127OCTETS 0x0380 ++#define TITAN_GE_MSTATX_TXFRAMES128TO255OCTETS 0x0390 ++#define TITAN_GE_MSTATX_TXFRAMES256TO511OCTETS 0x03A0 ++#define TITAN_GE_MSTATX_TXFRAMES512TO1023OCTETS 0x03B0 ++#define TITAN_GE_MSTATX_TXFRAMES1024TO1518OCTETS 0x03C0 ++#define TITAN_GE_MSTATX_TXFRAMES1519TOMAXSIZE 0x03D0 ++#define TITAN_GE_MSTATX_TXVARIABLE 0x03E0 ++#define TITAN_GE_MSTATX_RXSYSTEMERROR 0x03F0 ++#define TITAN_GE_MSTATX_SINGLECOLLISION 0x0400 ++#define TITAN_GE_MSTATX_MULTIPLECOLLISION 0x0410 ++#define TITAN_GE_MSTATX_DEFERREDXMISSIONS 0x0420 ++#define TITAN_GE_MSTATX_LATECOLLISIONS 0x0430 ++#define TITAN_GE_MSTATX_ABORTEDDUETOXSCOLLS 0x0440 ++ ++/* Interrupt specific defines */ ++#define TITAN_GE_DEVICE_ID 0x0000 /* Device ID */ ++#define TITAN_GE_RESET 0x0004 /* Reset reg */ ++#define TITAN_GE_TSB_CTRL_0 0x000C /* TSB Control reg 0 */ ++#define TITAN_GE_TSB_CTRL_1 0x0010 /* TSB Control reg 1 */ ++#define TITAN_GE_INTR_GRP0_STATUS 0x0040 /* General Interrupt Group 0 Status */ ++#define TITAN_GE_INTR_XDMA_CORE_A 0x0048 /* XDMA Channel Interrupt Status, Core A*/ ++#define TITAN_GE_INTR_XDMA_CORE_B 0x004C /* XDMA Channel Interrupt Status, Core B*/ ++#define TITAN_GE_INTR_XDMA_IE 0x0058 /* XDMA Channel Interrupt Enable */ ++#define TITAN_GE_SDQPF_ECC_INTR 0x480C /* SDQPF ECC Interrupt Status */ ++#define TITAN_GE_SDQPF_RXFIFO_CTL 0x4828 /* SDQPF RxFifo Control and Interrupt Enb*/ ++#define TITAN_GE_SDQPF_RXFIFO_INTR 0x482C /* SDQPF RxFifo Interrupt Status */ ++#define TITAN_GE_SDQPF_TXFIFO_CTL 0x4928 /* SDQPF TxFifo Control and Interrupt Enb*/ ++#define TITAN_GE_SDQPF_TXFIFO_INTR 0x492C /* SDQPF TxFifo Interrupt Status */ ++#define TITAN_GE_SDQPF_RXFIFO_0 0x4840 /* SDQPF RxFIFO Enable */ ++#define TITAN_GE_SDQPF_TXFIFO_0 0x4940 /* SDQPF TxFIFO Enable */ ++#define TITAN_GE_XDMA_CONFIG 0x5000 /* XDMA Global Configuration */ ++#define TITAN_GE_XDMA_INTR_SUMMARY 0x5010 /* XDMA Interrupt Summary */ ++#define TITAN_GE_XDMA_BUFADDRPRE 0x5018 /* XDMA Buffer Address Prefix */ ++#define TITAN_GE_XDMA_DESCADDRPRE 0x501C /* XDMA Descriptor Address Prefix */ ++#define TITAN_GE_XDMA_PORTWEIGHT 0x502C /* XDMA Port Weight Configuration */ ++ ++/* Rx MAC defines */ ++#define TITAN_GE_RMAC_CONFIG_1 0x1200 /* RMAC Configuration 1 */ ++#define TITAN_GE_RMAC_CONFIG_2 0x1204 /* RMAC Configuration 2 */ ++#define TITAN_GE_RMAC_MAX_FRAME_LEN 0x1208 /* RMAC Max Frame Length */ ++#define TITAN_GE_RMAC_STATION_HI 0x120C /* Rx Station Address High */ ++#define TITAN_GE_RMAC_STATION_MID 0x1210 /* Rx Station Address Middle */ ++#define TITAN_GE_RMAC_STATION_LOW 0x1214 /* Rx Station Address Low */ ++#define TITAN_GE_RMAC_LINK_CONFIG 0x1218 /* RMAC Link Configuration */ ++ ++/* Tx MAC defines */ ++#define TITAN_GE_TMAC_CONFIG_1 0x1240 /* TMAC Configuration 1 */ ++#define TITAN_GE_TMAC_CONFIG_2 0x1244 /* TMAC Configuration 2 */ ++#define TITAN_GE_TMAC_IPG 0x1248 /* TMAC Inter-Packet Gap */ ++#define TITAN_GE_TMAC_STATION_HI 0x124C /* Tx Station Address High */ ++#define TITAN_GE_TMAC_STATION_MID 0x1250 /* Tx Station Address Middle */ ++#define TITAN_GE_TMAC_STATION_LOW 0x1254 /* Tx Station Address Low */ ++#define TITAN_GE_TMAC_MAX_FRAME_LEN 0x1258 /* TMAC Max Frame Length */ ++#define TITAN_GE_TMAC_MIN_FRAME_LEN 0x125C /* TMAC Min Frame Length */ ++#define TITAN_GE_TMAC_PAUSE_FRAME_TIME 0x1260 /* TMAC Pause Frame Time */ ++#define TITAN_GE_TMAC_PAUSE_FRAME_INTERVAL 0x1264 /* TMAC Pause Frame Interval */ ++ ++/* GMII register */ ++#define TITAN_GE_GMII_INTERRUPT_STATUS 0x1348 /* GMII Interrupt Status */ ++#define TITAN_GE_GMII_CONFIG_GENERAL 0x134C /* GMII Configuration General */ ++#define TITAN_GE_GMII_CONFIG_MODE 0x1350 /* GMII Configuration Mode */ ++ ++/* Tx and Rx XDMA defines */ ++#define TITAN_GE_INT_COALESCING 0x5030 /* Interrupt Coalescing */ ++#define TITAN_GE_CHANNEL0_CONFIG 0x5040 /* Channel 0 XDMA config */ ++#define TITAN_GE_CHANNEL0_INTERRUPT 0x504c /* Channel 0 Interrupt Status */ ++#define TITAN_GE_GDI_INTERRUPT_ENABLE 0x5050 /* IE for the GDI Errors */ ++#define TITAN_GE_CHANNEL0_PACKET 0x5060 /* Channel 0 Packet count */ ++#define TITAN_GE_CHANNEL0_BYTE 0x5064 /* Channel 0 Byte count */ ++#define TITAN_GE_CHANNEL0_TX_DESC 0x5054 /* Channel 0 Tx first desc */ ++#define TITAN_GE_CHANNEL0_RX_DESC 0x5058 /* Channel 0 Rx first desc */ ++ ++/* AFX (Address Filter Exact) register offsets for Slice 0 */ ++#define TITAN_GE_AFX_EXACT_MATCH_LOW 0x1100 /* AFX Exact Match Address Low*/ ++#define TITAN_GE_AFX_EXACT_MATCH_MID 0x1104 /* AFX Exact Match Address Mid*/ ++#define TITAN_GE_AFX_EXACT_MATCH_HIGH 0x1108 /* AFX Exact Match Address Hi */ ++#define TITAN_GE_AFX_EXACT_MATCH_VID 0x110C /* AFX Exact Match VID */ ++#define TITAN_GE_AFX_MULTICAST_HASH_LOW 0x1110 /* AFX Multicast HASH Low */ ++#define TITAN_GE_AFX_MULTICAST_HASH_MIDLOW 0x1114 /* AFX Multicast HASH MidLow */ ++#define TITAN_GE_AFX_MULTICAST_HASH_MIDHI 0x1118 /* AFX Multicast HASH MidHi */ ++#define TITAN_GE_AFX_MULTICAST_HASH_HI 0x111C /* AFX Multicast HASH Hi */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_0 0x1120 /* AFX Address Filter Ctrl 0 */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_1 0x1124 /* AFX Address Filter Ctrl 1 */ ++#define TITAN_GE_AFX_ADDRS_FILTER_CTRL_2 0x1128 /* AFX Address Filter Ctrl 2 */ ++ ++/* Traffic Groomer block */ ++#define TITAN_GE_TRTG_CONFIG 0x1000 /* TRTG Config */ ++ ++#endif /* _TITAN_GE_H_ */ ++ +diff -Nur linux-2.6.34.orig/drivers/net/titan_mdio.c linux-loongson/drivers/net/titan_mdio.c +--- linux-2.6.34.orig/drivers/net/titan_mdio.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/titan_mdio.c 2010-05-27 18:12:39.084716399 +0200 +@@ -0,0 +1,217 @@ ++/* ++ * drivers/net/titan_mdio.c - Driver for Titan ethernet ports ++ * ++ * Copyright (C) 2003 PMC-Sierra Inc. ++ * Author : Manish Lachwani (lachwani@pmc-sierra.com) ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version 2 ++ * of the License, or (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ * ++ * Management Data IO (MDIO) driver for the Titan GMII. Interacts with the Marvel PHY ++ * on the Titan. No support for the TBI as yet. ++ * ++ */ + -+ __asm__ __volatile__(".set noat\n"); - ((void (*)(void))ioremap_nocache(LOONGSON_BOOT_BASE, 4)) (); -+ __asm__ __volatile__(".set at\n"); - } - --static void loongson_halt(void) -+static void loongson_poweroff(void) - { - mach_prepare_shutdown(); -- while (1) -- ; -+ unreachable(); -+} ++#include "titan_mdio.h" ++ ++#define MDIO_DEBUG + -+static void loongson_halt(void) ++/* ++ * Local constants ++ */ ++#define MAX_CLKA 1023 ++#define MAX_PHY_DEV 31 ++#define MAX_PHY_REG 31 ++#define WRITEADDRS_OPCODE 0x0 ++#define READ_OPCODE 0x2 ++#define WRITE_OPCODE 0x1 ++#define MAX_MDIO_POLL 100 ++ ++/* ++ * Titan MDIO and SCMB registers ++ */ ++#define TITAN_GE_SCMB_CONTROL 0x01c0 /* SCMB Control */ ++#define TITAN_GE_SCMB_CLKA 0x01c4 /* SCMB Clock A */ ++#define TITAN_GE_MDIO_COMMAND 0x01d0 /* MDIO Command */ ++#define TITAN_GE_MDIO_DEVICE_PORT_ADDRESS 0x01d4 /* MDIO Device and Port addrs */ ++#define TITAN_GE_MDIO_DATA 0x01d8 /* MDIO Data */ ++#define TITAN_GE_MDIO_INTERRUPTS 0x01dC /* MDIO Interrupts */ ++ ++/* ++ * Function to poll the MDIO ++ */ ++static int titan_ge_mdio_poll(void) +{ -+ pr_notice("** You can safely turn off the power ** !\n"); -+ while (1) { -+ if (cpu_wait) -+ cpu_wait(); ++ int i, val; ++ ++ for (i = 0; i < MAX_MDIO_POLL; i++) { ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ ++ if (!(val & 0x8000)) ++ return TITAN_GE_MDIO_GOOD; + } - } - - static int __init mips_reboot_setup(void) - { - _machine_restart = loongson_restart; - _machine_halt = loongson_halt; -- pm_power_off = loongson_halt; -+ pm_power_off = loongson_poweroff; - - return 0; - } -diff -Nur linux-2.6.33/arch/mips/loongson/common/rtc.c linux-lemote/arch/mips/loongson/common/rtc.c ---- linux-2.6.33/arch/mips/loongson/common/rtc.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/rtc.c 2010-03-06 16:43:01.000000000 +0100 -@@ -0,0 +1,43 @@ ++ ++ return TITAN_GE_MDIO_ERROR; ++} ++ ++ +/* -+ * Registration of Loongson RTC platform device. -+ * -+ * Copyright (C) 2007 Yoichi Yuasa -+ * Copyright (C) 2009 Wu Zhangjin -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation; either version 2 of the License, or -+ * (at your option) any later version. ++ * Initialize and configure the MDIO + */ ++int titan_ge_mdio_setup(titan_ge_mdio_config *titan_mdio) ++{ ++ unsigned long val; + -+#include -+#include -+#include -+#include ++ /* Reset the SCMB and program into MDIO mode*/ ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x9000); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CONTROL, 0x1000); + -+static struct resource rtc_cmos_resource[] = { -+ { -+ .start = RTC_PORT(0), -+ .end = RTC_PORT(1), -+ .flags = IORESOURCE_IO, -+ }, -+ { -+ .start = RTC_IRQ, -+ .end = RTC_IRQ, -+ .flags = IORESOURCE_IRQ, -+ }, -+}; ++ /* CLK A */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_SCMB_CLKA); ++ val = ( (val & ~(0x03ff)) | (titan_mdio->clka & 0x03ff)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_SCMB_CLKA, val); + -+static struct platform_device rtc_cmos_device = { -+ .name = "rtc_cmos", -+ .id = -1, -+ .num_resources = ARRAY_SIZE(rtc_cmos_resource), -+ .resource = rtc_cmos_resource -+}; ++ /* Preamble Suppresion */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0001)) | (titan_mdio->mdio_spre & 0x0001)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); + -+static __init int rtc_cmos_init(void) ++ /* MDIO mode */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x4000)) | (titan_mdio->mdio_mode & 0x4000)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ return TITAN_GE_MDIO_GOOD; ++} ++ ++/* ++ * Set the PHY address in indirect mode ++ */ ++int titan_ge_mdio_inaddrs(int dev_addr, int reg_addr) +{ -+ return platform_device_register(&rtc_cmos_device); ++ volatile unsigned long val; ++ ++ /* Setup the PHY device */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ /* Write the new address */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (WRITEADDRS_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ return TITAN_GE_MDIO_GOOD; +} + -+device_initcall(rtc_cmos_init); -diff -Nur linux-2.6.33/arch/mips/loongson/common/serial.c linux-lemote/arch/mips/loongson/common/serial.c ---- linux-2.6.33/arch/mips/loongson/common/serial.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/serial.c 2010-03-06 16:43:01.000000000 +0100 -@@ -7,7 +7,7 @@ - * - * Copyright (C) 2009 Lemote, Inc. - * Author: Yan hua (yanhua@lemote.com) -- * Author: Wu Zhangjin (wuzj@lemote.com) -+ * Author: Wu Zhangjin (wuzhangjin@gmail.com) - */ - - #include -diff -Nur linux-2.6.33/arch/mips/loongson/common/time.c linux-lemote/arch/mips/loongson/common/time.c ---- linux-2.6.33/arch/mips/loongson/common/time.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/time.c 2010-03-06 16:43:01.000000000 +0100 -@@ -2,8 +2,8 @@ - * Copyright (C) 2007 Lemote, Inc. & Institute of Computing Technology - * Author: Fuxin Zhang, zhangfx@lemote.com - * -- * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Copyright (C) 2009 Lemote Inc. -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/loongson/common/uart_base.c linux-lemote/arch/mips/loongson/common/uart_base.c ---- linux-2.6.33/arch/mips/loongson/common/uart_base.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/common/uart_base.c 2010-03-06 16:43:01.000000000 +0100 -@@ -1,6 +1,6 @@ - /* - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/loongson/fuloong-2e/reset.c linux-lemote/arch/mips/loongson/fuloong-2e/reset.c ---- linux-2.6.33/arch/mips/loongson/fuloong-2e/reset.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/fuloong-2e/reset.c 2010-03-06 16:43:01.000000000 +0100 -@@ -1,8 +1,8 @@ - /* Board-specific reboot/shutdown routines - * Copyright (c) 2009 Philippe Vachon - * -- * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Copyright (C) 2009 Lemote Inc. -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/ec_kb3310b.c linux-lemote/arch/mips/loongson/lemote-2f/ec_kb3310b.c ---- linux-2.6.33/arch/mips/loongson/lemote-2f/ec_kb3310b.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/ec_kb3310b.c 2010-03-06 16:43:01.000000000 +0100 -@@ -14,7 +14,7 @@ - #include - #include - --#include "ec_kb3310b.h" -+#include - - static DEFINE_SPINLOCK(index_access_lock); - static DEFINE_SPINLOCK(port_access_lock); -@@ -76,12 +76,9 @@ - } - - if (timeout <= 0) { -- printk(KERN_ERR "%s: deadable error : timeout...\n", __func__); -+ pr_err("%s: deadable error : timeout...\n", __func__); - ret = -EINVAL; -- } else -- printk(KERN_INFO -- "(%x/%d)ec issued command %d status : 0x%x\n", -- timeout, EC_CMD_TIMEOUT - timeout, cmd, status); -+ } - - spin_unlock_irqrestore(&port_access_lock, flags); - -@@ -118,8 +115,7 @@ - udelay(EC_REG_DELAY); - } - if (timeout <= 0) { -- pr_info("%s: get event number timeout.\n", __func__); -- -+ pr_err("%s: get event number timeout.\n", __func__); - return -EINVAL; - } - value = inb(EC_DAT_PORT); -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/ec_kb3310b.h linux-lemote/arch/mips/loongson/lemote-2f/ec_kb3310b.h ---- linux-2.6.33/arch/mips/loongson/lemote-2f/ec_kb3310b.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/ec_kb3310b.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,188 +0,0 @@ --/* -- * KB3310B Embedded Controller -- * -- * Copyright (C) 2008 Lemote Inc. -- * Author: liujl , 2008-03-14 -- * -- * This program is free software; you can redistribute it and/or modify -- * it under the terms of the GNU General Public License as published by -- * the Free Software Foundation; either version 2 of the License, or -- * (at your option) any later version. -- */ -- --#ifndef _EC_KB3310B_H --#define _EC_KB3310B_H -- --extern unsigned char ec_read(unsigned short addr); --extern void ec_write(unsigned short addr, unsigned char val); --extern int ec_query_seq(unsigned char cmd); --extern int ec_query_event_num(void); --extern int ec_get_event_num(void); -- --typedef int (*sci_handler) (int status); --extern sci_handler yeeloong_report_lid_status; -- --#define SCI_IRQ_NUM 0x0A -- --/* -- * The following registers are determined by the EC index configuration. -- * 1, fill the PORT_HIGH as EC register high part. -- * 2, fill the PORT_LOW as EC register low part. -- * 3, fill the PORT_DATA as EC register write data or get the data from it. -- */ --#define EC_IO_PORT_HIGH 0x0381 --#define EC_IO_PORT_LOW 0x0382 --#define EC_IO_PORT_DATA 0x0383 -- --/* -- * EC delay time is 500us for register and status access -- */ --#define EC_REG_DELAY 500 /* unit : us */ --#define EC_CMD_TIMEOUT 0x1000 -- --/* -- * EC access port for SCI communication -- */ --#define EC_CMD_PORT 0x66 --#define EC_STS_PORT 0x66 --#define EC_DAT_PORT 0x62 --#define CMD_INIT_IDLE_MODE 0xdd --#define CMD_EXIT_IDLE_MODE 0xdf --#define CMD_INIT_RESET_MODE 0xd8 --#define CMD_REBOOT_SYSTEM 0x8c --#define CMD_GET_EVENT_NUM 0x84 --#define CMD_PROGRAM_PIECE 0xda -- --/* temperature & fan registers */ --#define REG_TEMPERATURE_VALUE 0xF458 --#define REG_FAN_AUTO_MAN_SWITCH 0xF459 --#define BIT_FAN_AUTO 0 --#define BIT_FAN_MANUAL 1 --#define REG_FAN_CONTROL 0xF4D2 --#define BIT_FAN_CONTROL_ON (1 << 0) --#define BIT_FAN_CONTROL_OFF (0 << 0) --#define REG_FAN_STATUS 0xF4DA --#define BIT_FAN_STATUS_ON (1 << 0) --#define BIT_FAN_STATUS_OFF (0 << 0) --#define REG_FAN_SPEED_HIGH 0xFE22 --#define REG_FAN_SPEED_LOW 0xFE23 --#define REG_FAN_SPEED_LEVEL 0xF4CC --/* fan speed divider */ --#define FAN_SPEED_DIVIDER 480000 /* (60*1000*1000/62.5/2)*/ -- --/* battery registers */ --#define REG_BAT_DESIGN_CAP_HIGH 0xF77D --#define REG_BAT_DESIGN_CAP_LOW 0xF77E --#define REG_BAT_FULLCHG_CAP_HIGH 0xF780 --#define REG_BAT_FULLCHG_CAP_LOW 0xF781 --#define REG_BAT_DESIGN_VOL_HIGH 0xF782 --#define REG_BAT_DESIGN_VOL_LOW 0xF783 --#define REG_BAT_CURRENT_HIGH 0xF784 --#define REG_BAT_CURRENT_LOW 0xF785 --#define REG_BAT_VOLTAGE_HIGH 0xF786 --#define REG_BAT_VOLTAGE_LOW 0xF787 --#define REG_BAT_TEMPERATURE_HIGH 0xF788 --#define REG_BAT_TEMPERATURE_LOW 0xF789 --#define REG_BAT_RELATIVE_CAP_HIGH 0xF492 --#define REG_BAT_RELATIVE_CAP_LOW 0xF493 --#define REG_BAT_VENDOR 0xF4C4 --#define FLAG_BAT_VENDOR_SANYO 0x01 --#define FLAG_BAT_VENDOR_SIMPLO 0x02 --#define REG_BAT_CELL_COUNT 0xF4C6 --#define FLAG_BAT_CELL_3S1P 0x03 --#define FLAG_BAT_CELL_3S2P 0x06 --#define REG_BAT_CHARGE 0xF4A2 --#define FLAG_BAT_CHARGE_DISCHARGE 0x01 --#define FLAG_BAT_CHARGE_CHARGE 0x02 --#define FLAG_BAT_CHARGE_ACPOWER 0x00 --#define REG_BAT_STATUS 0xF4B0 --#define BIT_BAT_STATUS_LOW (1 << 5) --#define BIT_BAT_STATUS_DESTROY (1 << 2) --#define BIT_BAT_STATUS_FULL (1 << 1) --#define BIT_BAT_STATUS_IN (1 << 0) --#define REG_BAT_CHARGE_STATUS 0xF4B1 --#define BIT_BAT_CHARGE_STATUS_OVERTEMP (1 << 2) --#define BIT_BAT_CHARGE_STATUS_PRECHG (1 << 1) --#define REG_BAT_STATE 0xF482 --#define BIT_BAT_STATE_CHARGING (1 << 1) --#define BIT_BAT_STATE_DISCHARGING (1 << 0) --#define REG_BAT_POWER 0xF440 --#define BIT_BAT_POWER_S3 (1 << 2) --#define BIT_BAT_POWER_ON (1 << 1) --#define BIT_BAT_POWER_ACIN (1 << 0) -- --/* other registers */ --/* Audio: rd/wr */ --#define REG_AUDIO_VOLUME 0xF46C --#define REG_AUDIO_MUTE 0xF4E7 --#define REG_AUDIO_BEEP 0xF4D0 --/* USB port power or not: rd/wr */ --#define REG_USB0_FLAG 0xF461 --#define REG_USB1_FLAG 0xF462 --#define REG_USB2_FLAG 0xF463 --#define BIT_USB_FLAG_ON 1 --#define BIT_USB_FLAG_OFF 0 --/* LID */ --#define REG_LID_DETECT 0xF4BD --#define BIT_LID_DETECT_ON 1 --#define BIT_LID_DETECT_OFF 0 --/* CRT */ --#define REG_CRT_DETECT 0xF4AD --#define BIT_CRT_DETECT_PLUG 1 --#define BIT_CRT_DETECT_UNPLUG 0 --/* LCD backlight brightness adjust: 9 levels */ --#define REG_DISPLAY_BRIGHTNESS 0xF4F5 --/* Black screen Status */ --#define BIT_DISPLAY_LCD_ON 1 --#define BIT_DISPLAY_LCD_OFF 0 --/* LCD backlight control: off/restore */ --#define REG_BACKLIGHT_CTRL 0xF7BD --#define BIT_BACKLIGHT_ON 1 --#define BIT_BACKLIGHT_OFF 0 --/* Reset the machine auto-clear: rd/wr */ --#define REG_RESET 0xF4EC --#define BIT_RESET_ON 1 --/* Light the led: rd/wr */ --#define REG_LED 0xF4C8 --#define BIT_LED_RED_POWER (1 << 0) --#define BIT_LED_ORANGE_POWER (1 << 1) --#define BIT_LED_GREEN_CHARGE (1 << 2) --#define BIT_LED_RED_CHARGE (1 << 3) --#define BIT_LED_NUMLOCK (1 << 4) --/* Test led mode, all led on/off */ --#define REG_LED_TEST 0xF4C2 --#define BIT_LED_TEST_IN 1 --#define BIT_LED_TEST_OUT 0 --/* Camera on/off */ --#define REG_CAMERA_STATUS 0xF46A --#define BIT_CAMERA_STATUS_ON 1 --#define BIT_CAMERA_STATUS_OFF 0 --#define REG_CAMERA_CONTROL 0xF7B7 --#define BIT_CAMERA_CONTROL_OFF 0 --#define BIT_CAMERA_CONTROL_ON 1 --/* Wlan Status */ --#define REG_WLAN 0xF4FA --#define BIT_WLAN_ON 1 --#define BIT_WLAN_OFF 0 --#define REG_DISPLAY_LCD 0xF79F -- --/* SCI Event Number from EC */ --enum { -- EVENT_LID = 0x23, /* LID open/close */ -- EVENT_DISPLAY_TOGGLE, /* Fn+F3 for display switch */ -- EVENT_SLEEP, /* Fn+F1 for entering sleep mode */ -- EVENT_OVERTEMP, /* Over-temperature happened */ -- EVENT_CRT_DETECT, /* CRT is connected */ -- EVENT_CAMERA, /* Camera on/off */ -- EVENT_USB_OC2, /* USB2 Over Current occurred */ -- EVENT_USB_OC0, /* USB0 Over Current occurred */ -- EVENT_BLACK_SCREEN, /* Turn on/off backlight */ -- EVENT_AUDIO_MUTE, /* Mute on/off */ -- EVENT_DISPLAY_BRIGHTNESS,/* LCD backlight brightness adjust */ -- EVENT_AC_BAT, /* AC & Battery relative issue */ -- EVENT_AUDIO_VOLUME, /* Volume adjust */ -- EVENT_WLAN, /* Wlan on/off */ -- EVENT_END --}; -- --#endif /* !_EC_KB3310B_H */ -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/machtype.c linux-lemote/arch/mips/loongson/lemote-2f/machtype.c ---- linux-2.6.33/arch/mips/loongson/lemote-2f/machtype.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/machtype.c 2010-03-06 16:43:01.000000000 +0100 -@@ -0,0 +1,45 @@ +/* -+ * Copyright (C) 2009 Lemote Inc. -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * Read the MDIO register. This is what the individual parametes mean: + * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License as published by the -+ * Free Software Foundation; either version 2 of the License, or (at your -+ * option) any later version. ++ * dev_addr : PHY ID ++ * reg_addr : register offset ++ * ++ * See the spec for the Titan MAC. We operate in the Direct Mode. + */ -+#include + -+#include ++#define MAX_RETRIES 2 + -+void __init mach_prom_init_machtype(void) ++int titan_ge_mdio_read(int dev_addr, int reg_addr, unsigned int *pdata) +{ -+ /* We share the same kernel image file among Lemote 2F family -+ * of machines, and provide the machtype= kernel command line -+ * to users to indicate their machine, this command line will -+ * be passed by the latest PMON automatically. and fortunately, -+ * up to now, we can get the machine type from the PMON_VER= -+ * commandline directly except the NAS machine, In the old -+ * machines, this will help the users a lot. -+ * -+ * If no "machtype=" passed, get machine type from "PMON_VER=". -+ * PMON_VER=LM8089 Lemote 8.9'' netbook -+ * LM8101 Lemote 10.1'' netbook -+ * (The above two netbooks have the same kernel support) -+ * LM6XXX Lemote FuLoong(2F) box series -+ * LM9XXX Lemote LynLoong PC series -+ */ -+ if (strstr(arcs_cmdline, "PMON_VER=LM")) { -+ if (strstr(arcs_cmdline, "PMON_VER=LM8")) -+ mips_machtype = MACH_LEMOTE_YL2F89; -+ else if (strstr(arcs_cmdline, "PMON_VER=LM6")) -+ mips_machtype = MACH_LEMOTE_FL2F; -+ else if (strstr(arcs_cmdline, "PMON_VER=LM9")) -+ mips_machtype = MACH_LEMOTE_LL2F; -+ else -+ mips_machtype = MACH_LEMOTE_NAS; ++ volatile unsigned long val; ++ int retries = 0; ++ ++ /* Setup the PHY device */ ++ ++again: ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ val |= 0x4000; ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); ++ ++ udelay(30); ++ ++ /* Issue the read command */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (READ_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); ++ ++ udelay(30); ++ ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; ++ ++ *pdata = (unsigned int)TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DATA); ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS); + -+ strcat(arcs_cmdline, " machtype="); -+ strcat(arcs_cmdline, get_system_type()); -+ strcat(arcs_cmdline, " "); ++ udelay(30); ++ ++ if (val & 0x2) { ++ if (retries == MAX_RETRIES) ++ return TITAN_GE_MDIO_ERROR; ++ else { ++ retries++; ++ goto again; ++ } + } ++ ++ return TITAN_GE_MDIO_GOOD; +} -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/Makefile linux-lemote/arch/mips/loongson/lemote-2f/Makefile ---- linux-2.6.33/arch/mips/loongson/lemote-2f/Makefile 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/Makefile 2010-03-06 16:43:01.000000000 +0100 -@@ -2,7 +2,7 @@ - # Makefile for lemote loongson2f family machines - # - --obj-y += irq.o reset.o ec_kb3310b.o -+obj-y += machtype.o irq.o reset.o ec_kb3310b.o platform.o - - # - # Suspend Support -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/platform.c linux-lemote/arch/mips/loongson/lemote-2f/platform.c ---- linux-2.6.33/arch/mips/loongson/lemote-2f/platform.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/platform.c 2010-03-06 16:43:01.000000000 +0100 -@@ -0,0 +1,48 @@ ++ +/* -+ * Copyright (C) 2009 Lemote Inc. -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com ++ * Write to the MDIO register ++ * ++ * dev_addr : PHY ID ++ * reg_addr : register that needs to be written to + * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License as published by the -+ * Free Software Foundation; either version 2 of the License, or (at your -+ * option) any later version. + */ ++int titan_ge_mdio_write(int dev_addr, int reg_addr, unsigned int data) ++{ ++ volatile unsigned long val; + -+#include -+#include ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; + -+#include ++ /* Setup the PHY device */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS); ++ val = ( (val & ~(0x1f00)) | ( (dev_addr << 8) & 0x1f00)); ++ val = ( (val & ~(0x001f)) | ( reg_addr & 0x001f)); ++ val |= 0x4000; ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DEVICE_PORT_ADDRESS, val); + -+static struct platform_device yeeloong_pdev = { -+ .name = "yeeloong_laptop", -+ .id = -1, -+}; ++ udelay(30); + -+static struct platform_device lynloong_pdev = { -+ .name = "lynloong_pc", -+ .id = -1, -+}; ++ /* Setup the data to write */ ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_DATA, data); + -+static int __init lemote2f_platform_init(void) -+{ -+ struct platform_device *pdev = NULL; ++ udelay(30); + -+ switch (mips_machtype) { -+ case MACH_LEMOTE_YL2F89: -+ pdev = &yeeloong_pdev; -+ break; -+ case MACH_LEMOTE_LL2F: -+ pdev = &lynloong_pdev; -+ break; -+ default: -+ break; ++ /* Issue the write command */ ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_COMMAND); ++ val = ( (val & ~(0x0300)) | ( (WRITE_OPCODE << 8) & 0x0300)); ++ TITAN_GE_MDIO_WRITE(TITAN_GE_MDIO_COMMAND, val); + -+ } ++ udelay(30); + -+ if (pdev != NULL) -+ return platform_device_register(pdev); ++ if (titan_ge_mdio_poll() != TITAN_GE_MDIO_GOOD) ++ return TITAN_GE_MDIO_ERROR; + -+ return -ENODEV; ++ val = TITAN_GE_MDIO_READ(TITAN_GE_MDIO_INTERRUPTS); ++ if (val & 0x2) ++ return TITAN_GE_MDIO_ERROR; ++ ++ return TITAN_GE_MDIO_GOOD; +} + -+arch_initcall(lemote2f_platform_init); -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/pm.c linux-lemote/arch/mips/loongson/lemote-2f/pm.c ---- linux-2.6.33/arch/mips/loongson/lemote-2f/pm.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/pm.c 2010-03-06 16:43:01.000000000 +0100 -@@ -2,7 +2,7 @@ - * Lemote loongson2f family machines' specific suspend support - * - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by -@@ -23,7 +23,7 @@ - #include - - #include --#include "ec_kb3310b.h" -+#include - - #define I8042_KBD_IRQ 1 - #define I8042_CTR_KBDINT 0x01 -@@ -100,7 +100,7 @@ - if (irq < 0) - return 0; - -- printk(KERN_INFO "%s: irq = %d\n", __func__, irq); -+ pr_info("%s: irq = %d\n", __func__, irq); - - if (irq == I8042_KBD_IRQ) - return 1; -diff -Nur linux-2.6.33/arch/mips/loongson/lemote-2f/reset.c linux-lemote/arch/mips/loongson/lemote-2f/reset.c ---- linux-2.6.33/arch/mips/loongson/lemote-2f/reset.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/loongson/lemote-2f/reset.c 2010-03-06 16:43:01.000000000 +0100 -@@ -3,7 +3,7 @@ - * Copyright (c) 2009 Philippe Vachon - * - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU General Public License as published by the -@@ -20,7 +20,7 @@ - #include - - #include --#include "ec_kb3310b.h" -+#include - - static void reset_cpu(void) - { -@@ -32,6 +32,7 @@ - } - - /* reset support for fuloong2f */ -+DEFINE_SPINLOCK(msr_lock); - - static void fl2f_reboot(void) - { -@@ -46,9 +47,13 @@ - */ - { - u32 hi, lo; -+ unsigned long flags; -+ -+ spin_lock_irqsave(&msr_lock, flags); - _rdmsr(DIVIL_MSR_REG(DIVIL_SOFT_RESET), &hi, &lo); - lo |= 0x00000001; - _wrmsr(DIVIL_MSR_REG(DIVIL_SOFT_RESET), hi, lo); -+ spin_unlock_irqrestore(&msr_lock, flags); - } - } - -@@ -56,9 +61,13 @@ - { - u32 hi, lo, val; - int gpio_base; -+ unsigned long flags; - - /* get gpio base */ -+ spin_lock_irqsave(&msr_lock, flags); - _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &lo); -+ spin_unlock_irqrestore(&msr_lock, flags); +diff -Nur linux-2.6.34.orig/drivers/net/titan_mdio.h linux-loongson/drivers/net/titan_mdio.h +--- linux-2.6.34.orig/drivers/net/titan_mdio.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/titan_mdio.h 2010-05-27 18:12:39.084716399 +0200 +@@ -0,0 +1,56 @@ ++/* ++ * MDIO used to interact with the PHY when using GMII/MII ++ */ ++#ifndef _TITAN_MDIO_H ++#define _TITAN_MDIO_H + - gpio_base = lo & 0xff00; - - /* make cs5536 gpio13 output enable */ -diff -Nur linux-2.6.33/arch/mips/Makefile linux-lemote/arch/mips/Makefile ---- linux-2.6.33/arch/mips/Makefile 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/Makefile 2010-03-06 16:42:59.000000000 +0100 -@@ -135,7 +135,10 @@ - cflags-$(CONFIG_CPU_LOONGSON2E) += \ - $(call cc-option,-march=loongson2e,-march=r4600) - cflags-$(CONFIG_CPU_LOONGSON2F) += \ -- $(call cc-option,-march=loongson2f,-march=r4600) -+ $(call cc-option,-march=loongson2f,-march=r4600) \ -+ $(call as-option,-Wa$(comma)-mfix-ls2f-kernel,) \ -+ $(call as-option,-Wa$(comma)-mfix-loongson2f-nop,) \ -+ $(call as-option,-Wa$(comma)-mfix-loongson2f-jump,) - - cflags-$(CONFIG_CPU_MIPS32_R1) += $(call cc-option,-march=mips32,-mips32 -U_MIPS_ISA -D_MIPS_ISA=_MIPS_ISA_MIPS32) \ - -Wa,-mips32 -Wa,--trap -@@ -332,11 +335,11 @@ - # - # Loongson family - # --core-$(CONFIG_MACH_LOONGSON) +=arch/mips/loongson/ -+core-$(CONFIG_MACH_LOONGSON) += arch/mips/loongson/ - cflags-$(CONFIG_MACH_LOONGSON) += -I$(srctree)/arch/mips/include/asm/mach-loongson \ - -mno-branch-likely --load-$(CONFIG_LEMOTE_FULOONG2E) +=0xffffffff80100000 --load-$(CONFIG_LEMOTE_MACH2F) +=0xffffffff80200000 -+load-$(CONFIG_LEMOTE_FULOONG2E) += 0xffffffff80100000 -+load-$(CONFIG_LEMOTE_MACH2F) += 0xffffffff80200000 - - # - # MIPS Malta board -diff -Nur linux-2.6.33/arch/mips/oprofile/common.c linux-lemote/arch/mips/oprofile/common.c ---- linux-2.6.33/arch/mips/oprofile/common.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/oprofile/common.c 2010-03-06 16:43:01.000000000 +0100 -@@ -14,9 +14,9 @@ - - #include "op_impl.h" - --extern struct op_mips_model op_model_mipsxx_ops __attribute__((weak)); --extern struct op_mips_model op_model_rm9000_ops __attribute__((weak)); --extern struct op_mips_model op_model_loongson2_ops __attribute__((weak)); -+extern struct op_mips_model op_model_mipsxx_ops __weak; -+extern struct op_mips_model op_model_rm9000_ops __weak; -+extern struct op_mips_model op_model_loongson2_ops __weak; - - static struct op_mips_model *model; - -diff -Nur linux-2.6.33/arch/mips/oprofile/op_model_loongson2.c linux-lemote/arch/mips/oprofile/op_model_loongson2.c ---- linux-2.6.33/arch/mips/oprofile/op_model_loongson2.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/oprofile/op_model_loongson2.c 2010-03-06 16:43:01.000000000 +0100 -@@ -3,7 +3,7 @@ - * - * Copyright (C) 2009 Lemote Inc. - * Author: Yanhua -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file "COPYING" in the main directory of this archive -diff -Nur linux-2.6.33/arch/mips/pci/fixup-lemote2f.c linux-lemote/arch/mips/pci/fixup-lemote2f.c ---- linux-2.6.33/arch/mips/pci/fixup-lemote2f.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/pci/fixup-lemote2f.c 2010-03-06 16:43:01.000000000 +0100 -@@ -131,7 +131,7 @@ - - /* Serial short detect enable */ - _rdmsr(USB_MSR_REG(USB_CONFIG), &hi, &lo); -- _wrmsr(USB_MSR_REG(USB_CONFIG), (1 << 1) | (1 << 2) | (1 << 3), lo); -+ _wrmsr(USB_MSR_REG(USB_CONFIG), (1 << 1) | (1 << 3), lo); - - /* setting the USB2.0 micro frame length */ - pci_write_config_dword(pdev, PCI_EHCI_FLADJ_REG, 0x2000); -diff -Nur linux-2.6.33/arch/mips/pci/ops-loongson2.c linux-lemote/arch/mips/pci/ops-loongson2.c ---- linux-2.6.33/arch/mips/pci/ops-loongson2.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/pci/ops-loongson2.c 2010-03-06 16:43:01.000000000 +0100 -@@ -1,13 +1,11 @@ - /* -- * fuloong2e specific PCI support. -- * - * Copyright (C) 1999, 2000, 2004 MIPS Technologies, Inc. - * All rights reserved. - * Authors: Carsten Langgaard - * Maciej W. Rozycki - * - * Copyright (C) 2009 Lemote Inc. -- * Author: Wu Zhangjin -+ * Author: Wu Zhangjin - * - * This program is free software; you can distribute it and/or modify it - * under the terms of the GNU General Public License (Version 2) as -diff -Nur linux-2.6.33/arch/mips/power/cpu.c linux-lemote/arch/mips/power/cpu.c ---- linux-2.6.33/arch/mips/power/cpu.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/power/cpu.c 2010-03-06 16:43:01.000000000 +0100 -@@ -3,9 +3,9 @@ - * - * Licensed under the GPLv2 - * -- * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology -+ * Copyright (C) 2009 Lemote Inc. - * Author: Hu Hongbing -- * Wu Zhangjin -+ * Wu Zhangjin - */ - #include - #include -diff -Nur linux-2.6.33/arch/mips/power/hibernate.S linux-lemote/arch/mips/power/hibernate.S ---- linux-2.6.33/arch/mips/power/hibernate.S 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/mips/power/hibernate.S 2010-03-06 16:43:01.000000000 +0100 -@@ -3,9 +3,9 @@ - * - * Licensed under the GPLv2 - * -- * Copyright (C) 2009 Lemote Inc. & Insititute of Computing Technology -+ * Copyright (C) 2009 Lemote Inc. - * Author: Hu Hongbing -- * Wu Zhangjin -+ * Wu Zhangjin - */ - #include - #include -diff -Nur linux-2.6.33/arch/powerpc/include/asm/prom.h linux-lemote/arch/powerpc/include/asm/prom.h ---- linux-2.6.33/arch/powerpc/include/asm/prom.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/arch/powerpc/include/asm/prom.h 2010-03-06 16:43:03.000000000 +0100 -@@ -23,21 +23,8 @@ - #include - #include - --#define OF_ROOT_NODE_ADDR_CELLS_DEFAULT 1 --#define OF_ROOT_NODE_SIZE_CELLS_DEFAULT 1 -- --#define of_compat_cmp(s1, s2, l) strcasecmp((s1), (s2)) --#define of_prop_cmp(s1, s2) strcmp((s1), (s2)) --#define of_node_cmp(s1, s2) strcasecmp((s1), (s2)) -- --extern struct device_node *of_chosen; -- - #define HAVE_ARCH_DEVTREE_FIXUPS - --/* For updating the device tree at runtime */ --extern void of_attach_node(struct device_node *); --extern void of_detach_node(struct device_node *); -- - #ifdef CONFIG_PPC32 - /* - * PCI <-> OF matching functions -@@ -52,11 +39,6 @@ - extern void pci_create_OF_bus_map(void); - #endif - --extern struct resource *request_OF_resource(struct device_node* node, -- int index, const char* name_postfix); --extern int release_OF_resource(struct device_node* node, int index); -- -- - /* - * OF address retreival & translation - */ -diff -Nur linux-2.6.33/drivers/ide/ide-iops.c linux-lemote/drivers/ide/ide-iops.c ---- linux-2.6.33/drivers/ide/ide-iops.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/ide/ide-iops.c 2010-03-06 16:43:16.000000000 +0100 -@@ -27,6 +27,8 @@ - #include - #include - -+#include ++#include ++#include ++#include ++#include "titan_ge.h" + - void SELECT_MASK(ide_drive_t *drive, int mask) - { - const struct ide_port_ops *port_ops = drive->hwif->port_ops; -@@ -300,6 +302,9 @@ - { - const char **list, *m = (char *)&drive->id[ATA_ID_PROD]; - -+ if (mips_machtype != MACH_LEMOTE_YL2F89) -+ return; + - for (list = nien_quirk_list; *list != NULL; list++) - if (strstr(m, *list) != NULL) { - drive->dev_flags |= IDE_DFLAG_NIEN_QUIRK; -diff -Nur linux-2.6.33/drivers/net/wireless/Kconfig linux-lemote/drivers/net/wireless/Kconfig ---- linux-2.6.33/drivers/net/wireless/Kconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/Kconfig 2010-03-06 16:43:20.000000000 +0100 -@@ -267,7 +267,7 @@ ++#define TITAN_GE_MDIO_ERROR (-9000) ++#define TITAN_GE_MDIO_GOOD 0 ++ ++#define TITAN_GE_MDIO_BASE titan_ge_base ++ ++#define TITAN_GE_MDIO_READ(offset) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) ++ ++#define TITAN_GE_MDIO_WRITE(offset, data) \ ++ *(volatile u32 *)(titan_ge_base + (offset)) = (data) ++ ++ ++/* GMII specific registers */ ++#define TITAN_GE_MARVEL_PHY_ID 0x00 ++#define TITAN_PHY_AUTONEG_ADV 0x04 ++#define TITAN_PHY_LP_ABILITY 0x05 ++#define TITAN_GE_MDIO_MII_CTRL 0x09 ++#define TITAN_GE_MDIO_MII_EXTENDED 0x0f ++#define TITAN_GE_MDIO_PHY_CTRL 0x10 ++#define TITAN_GE_MDIO_PHY_STATUS 0x11 ++#define TITAN_GE_MDIO_PHY_IE 0x12 ++#define TITAN_GE_MDIO_PHY_IS 0x13 ++#define TITAN_GE_MDIO_PHY_LED 0x18 ++#define TITAN_GE_MDIO_PHY_LED_OVER 0x19 ++#define PHY_ANEG_TIME_WAIT 45 /* 45 seconds wait time */ ++ ++/* ++ * MDIO Config Structure ++ */ ++typedef struct { ++ unsigned int clka; ++ int mdio_spre; ++ int mdio_mode; ++} titan_ge_mdio_config; ++ ++/* ++ * Function Prototypes ++ */ ++int titan_ge_mdio_setup(titan_ge_mdio_config *); ++int titan_ge_mdio_inaddrs(int, int); ++int titan_ge_mdio_read(int, int, unsigned int *); ++int titan_ge_mdio_write(int, int, unsigned int); ++ ++#endif /* _TITAN_MDIO_H */ +diff -Nur linux-2.6.34.orig/drivers/net/wireless/Kconfig linux-loongson/drivers/net/wireless/Kconfig +--- linux-2.6.34.orig/drivers/net/wireless/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/drivers/net/wireless/Kconfig 2010-05-27 18:15:37.400979385 +0200 +@@ -268,7 +268,7 @@ config RTL8187 tristate "Realtek 8187 and 8187B USB support" @@ -3984,7 +7984,7 @@ diff -Nur linux-2.6.33/drivers/net/wireless/Kconfig linux-lemote/drivers/net/wir select EEPROM_93CX6 ---help--- This is a driver for RTL8187 and RTL8187B based cards. -@@ -294,6 +294,19 @@ +@@ -295,6 +295,19 @@ depends on RTL8187 && MAC80211_LEDS && (LEDS_CLASS = y || LEDS_CLASS = RTL8187) default y @@ -4004,9 +8004,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/Kconfig linux-lemote/drivers/net/wir config ADM8211 tristate "ADMtek ADM8211 support" depends on MAC80211 && PCI && EXPERIMENTAL -diff -Nur linux-2.6.33/drivers/net/wireless/Makefile linux-lemote/drivers/net/wireless/Makefile ---- linux-2.6.33/drivers/net/wireless/Makefile 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/Makefile 2010-03-06 16:43:20.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/Makefile linux-loongson/drivers/net/wireless/Makefile +--- linux-2.6.34.orig/drivers/net/wireless/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/drivers/net/wireless/Makefile 2010-05-27 18:12:39.124712905 +0200 @@ -24,6 +24,7 @@ obj-$(CONFIG_ZD1211RW) += zd1211rw/ obj-$(CONFIG_RTL8180) += rtl818x/ @@ -4015,9 +8015,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/Makefile linux-lemote/drivers/net/wi # 16-bit wireless PCMCIA client drivers obj-$(CONFIG_PCMCIA_RAYCS) += ray_cs.o -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/dot11d.h linux-lemote/drivers/net/wireless/rtl8187b/dot11d.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/dot11d.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/dot11d.h 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/dot11d.h linux-loongson/drivers/net/wireless/rtl8187b/dot11d.h +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/dot11d.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/dot11d.h 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,102 @@ +#ifndef __INC_DOT11D_H +#define __INC_DOT11D_H @@ -4121,9 +8121,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/dot11d.h linux-lemote/drive + +void dump_chnl_map(u8 * channel_map); +#endif // #ifndef __INC_DOT11D_H -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/arc4.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/arc4.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/arc4.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/arc4.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/arc4.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/arc4.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/arc4.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/arc4.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,103 @@ +/* + * Cryptographic API @@ -4228,9 +8228,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/arc4.c linux-lemo +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("ARC4 Cipher Algorithm"); +MODULE_AUTHOR("Jon Oberheide "); -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,244 @@ +#ifdef ENABLE_DOT11D +//----------------------------------------------------------------------------- @@ -4476,9 +8476,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/dot11d.c linux-le +EXPORT_SYMBOL(IsLegalChannel); +EXPORT_SYMBOL(ToLegalChannel); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,102 @@ +#ifndef __INC_DOT11D_H +#define __INC_DOT11D_H @@ -4582,9 +8582,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/dot11d.h linux-le + +void dump_chnl_map(u8 * channel_map); +#endif // #ifndef __INC_DOT11D_H -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,275 @@ +/* + * Host AP crypto routines @@ -4861,9 +8861,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.c +module_init(ieee80211_crypto_init); +module_exit(ieee80211_crypto_deinit); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_ccmp.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,524 @@ +/* + * Host AP crypt: host-based CCMP encryption implementation for Host AP driver @@ -5389,9 +9389,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_c +module_init(ieee80211_crypto_ccmp_init); +module_exit(ieee80211_crypto_ccmp_exit); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,91 @@ +/* + * Original code based on Host AP (software wireless LAN access point) driver @@ -5484,9 +9484,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt.h +#endif + +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_tkip.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,996 @@ +/* + * Host AP crypt: host-based TKIP encryption implementation for Host AP driver @@ -6484,9 +10484,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_t +module_init(ieee80211_crypto_tkip_init); +module_exit(ieee80211_crypto_tkip_exit); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_wep.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,383 @@ +/* + * Host AP crypt: host-based WEP encryption implementation for Host AP driver @@ -6871,9 +10871,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_crypt_w +module_init(ieee80211_crypto_wep_init); +module_exit(ieee80211_crypto_wep_exit); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,1903 @@ +/* + * Merged with mainline ieee80211.h in Aug 2004. Original ieee802_11 @@ -8778,9 +12778,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211.h linux + return escaped; +} +#endif /* IEEE80211_H */ -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,385 @@ +/******************************************************************************* + @@ -9167,9 +13167,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_module. +EXPORT_SYMBOL_NOVERS(alloc_ieee80211); +EXPORT_SYMBOL_NOVERS(free_ieee80211); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,2074 @@ +/* + * Original code based Host AP (software wireless LAN access point) driver @@ -11245,9 +15245,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_rx.c li +EXPORT_SYMBOL_NOVERS(ieee_ext_skb_p80211_to_ether); +#endif +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,4083 @@ +/* IEEE 802.11 SoftMAC layer + * Copyright (c) 2005 Andrea Merello @@ -15332,9 +19332,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac + +#endif +//EXPORT_SYMBOL(ieee80211_sta_ps_send_null_frame); -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac_wx.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,629 @@ +/* IEEE 802.11 SoftMAC layer + * Copyright (c) 2005 Andrea Merello @@ -15965,9 +19965,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_softmac +EXPORT_SYMBOL_NOVERS(ieee80211_wx_get_power); +EXPORT_SYMBOL_NOVERS(ieee80211_wlan_frequencies); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,876 @@ +/****************************************************************************** + @@ -16845,9 +20845,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_tx.c li +#endif // _RTL8187_EXT_PATCH_ +#endif + -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,926 @@ +/****************************************************************************** + @@ -17775,9 +21775,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/ieee80211_wx.c li +EXPORT_SYMBOL_NOVERS(ieee80211_wx_set_encode); +EXPORT_SYMBOL_NOVERS(ieee80211_wx_get_encode); +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/internal.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/internal.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/internal.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/internal.h 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/internal.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/internal.h +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/internal.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/internal.h 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,115 @@ +/* + * Cryptographic API. @@ -17894,9 +21894,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/internal.h linux- + +#endif /* _CRYPTO_INTERNAL_H */ + -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,20 @@ +#ifndef __KMAP_TYPES_H + @@ -17918,9 +21918,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/kmap_types.h linu +#define _ASM_KMAP_TYPES_H + +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/readme linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/readme ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/readme 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/readme 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/readme linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/readme +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/readme 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/readme 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,162 @@ +What this layer should do + @@ -18084,9 +22084,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/readme linux-lemo +function and the stop scan function are called with this semaphore held). + + -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,282 @@ +#ifndef _RTL8187_MESH_H_ +#define _RTL8187_MESH_H_ @@ -18370,9 +22370,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/rtl8187_mesh.h li +extern int rtl8187_patch_ieee80211_softmac_xmit_get_rate (struct ieee80211_device *ieee, struct sk_buff *skb); +extern void ieee80211_start_mesh(struct ieee80211_device *ieee); +#endif // _RTL8187_MESH_H_ -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,399 @@ +/* + * Scatterlist Cryptographic API. @@ -18773,9 +22773,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/rtl_crypto.h linu + +#endif /* _LINUX_CRYPTO_H */ + -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,51 @@ +/* + * Cryptographic API. @@ -18828,9 +22828,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/ieee80211/scatterwalk.h lin +void scatterwalk_done(struct scatter_walk *walk, int out, int more); + +#endif /* _CRYPTO_SCATTERWALK_H */ -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/Makefile linux-lemote/drivers/net/wireless/rtl8187b/Makefile ---- linux-2.6.33/drivers/net/wireless/rtl8187b/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/Makefile 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/Makefile linux-loongson/drivers/net/wireless/rtl8187b/Makefile +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/Makefile 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,41 @@ +obj-$(CONFIG_RTL8187B) += rtl8187b.o + @@ -18873,9 +22873,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/Makefile linux-lemote/drive + +#for dot11d +EXTRA_CFLAGS += -DENABLE_DOT11D -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/msh_class.h linux-lemote/drivers/net/wireless/rtl8187b/msh_class.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/msh_class.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/msh_class.h 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/msh_class.h linux-loongson/drivers/net/wireless/rtl8187b/msh_class.h +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/msh_class.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/msh_class.h 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,117 @@ +/*! \file msh_class.h + \brief msh CLASS extension @@ -18994,9 +22994,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/msh_class.h linux-lemote/dr + + +#endif // _MESH_CLASS_HDR_H_ -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/r8180_93cx6.c linux-lemote/drivers/net/wireless/rtl8187b/r8180_93cx6.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/r8180_93cx6.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/r8180_93cx6.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_93cx6.c linux-loongson/drivers/net/wireless/rtl8187b/r8180_93cx6.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8180_93cx6.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/r8180_93cx6.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,146 @@ +/* + This files contains card eeprom (93c46 or 93c56) programming routines, @@ -19144,9 +23144,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/r8180_93cx6.c linux-lemote/ + (EPROM_CMD_NORMAL<bLedOn = 0; +} + -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/r8187_led.h linux-lemote/drivers/net/wireless/rtl8187b/r8187_led.h ---- linux-2.6.33/drivers/net/wireless/rtl8187b/r8187_led.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/r8187_led.h 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_led.h linux-loongson/drivers/net/wireless/rtl8187b/r8187_led.h +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_led.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/r8187_led.h 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,276 @@ +/*++ + @@ -36105,9 +40105,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/r8187_led.h linux-lemote/dr + + +#endif -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/r8187_rfkill.c linux-lemote/drivers/net/wireless/rtl8187b/r8187_rfkill.c ---- linux-2.6.33/drivers/net/wireless/rtl8187b/r8187_rfkill.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/r8187_rfkill.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_rfkill.c linux-loongson/drivers/net/wireless/rtl8187b/r8187_rfkill.c +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/r8187_rfkill.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/r8187_rfkill.c 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,157 @@ +/* + * rtl8187b specific rfkill support @@ -36266,9 +40266,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/r8187_rfkill.c linux-lemote + } + r8187b_rfkill = NULL; +} -diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/readme linux-lemote/drivers/net/wireless/rtl8187b/readme ---- linux-2.6.33/drivers/net/wireless/rtl8187b/readme 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/net/wireless/rtl8187b/readme 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/wireless/rtl8187b/readme linux-loongson/drivers/net/wireless/rtl8187b/readme +--- linux-2.6.34.orig/drivers/net/wireless/rtl8187b/readme 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/net/wireless/rtl8187b/readme 2010-05-27 18:12:39.532222207 +0200 @@ -0,0 +1,124 @@ +rtl8187 Linux kernel driver +Released under the terms of GNU General Public Licence (GPL) @@ -36394,9 +40394,9 @@ diff -Nur linux-2.6.33/drivers/net/wireless/rtl8187b/readme linux-lemote/drivers + +If you have some question/comments please feel free to write me. + -diff -Nur linux-2.6.33/drivers/platform/Kconfig linux-lemote/drivers/platform/Kconfig ---- linux-2.6.33/drivers/platform/Kconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/platform/Kconfig 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/platform/Kconfig linux-loongson/drivers/platform/Kconfig +--- linux-2.6.34.orig/drivers/platform/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/drivers/platform/Kconfig 2010-05-27 18:12:39.983464277 +0200 @@ -1,3 +1,7 @@ if X86 source "drivers/platform/x86/Kconfig" @@ -36405,17 +40405,17 @@ diff -Nur linux-2.6.33/drivers/platform/Kconfig linux-lemote/drivers/platform/Kc +if MIPS +source "drivers/platform/mips/Kconfig" +endif -diff -Nur linux-2.6.33/drivers/platform/Makefile linux-lemote/drivers/platform/Makefile ---- linux-2.6.33/drivers/platform/Makefile 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/platform/Makefile 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/platform/Makefile linux-loongson/drivers/platform/Makefile +--- linux-2.6.34.orig/drivers/platform/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/drivers/platform/Makefile 2010-05-27 18:12:39.983464277 +0200 @@ -3,3 +3,4 @@ # obj-$(CONFIG_X86) += x86/ +obj-$(CONFIG_MIPS) += mips/ -diff -Nur linux-2.6.33/drivers/platform/mips/Kconfig linux-lemote/drivers/platform/mips/Kconfig ---- linux-2.6.33/drivers/platform/mips/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/platform/mips/Kconfig 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/platform/mips/Kconfig linux-loongson/drivers/platform/mips/Kconfig +--- linux-2.6.34.orig/drivers/platform/mips/Kconfig 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/platform/mips/Kconfig 2010-05-27 18:12:39.983464277 +0200 @@ -0,0 +1,43 @@ +# +# MIPS Platform Specific Drivers @@ -36460,10 +40460,10 @@ diff -Nur linux-2.6.33/drivers/platform/mips/Kconfig linux-lemote/drivers/platfo + its own specific suspend support. + +endif # MIPS_PLATFORM_DEVICES -diff -Nur linux-2.6.33/drivers/platform/mips/lynloong_pc.c linux-lemote/drivers/platform/mips/lynloong_pc.c ---- linux-2.6.33/drivers/platform/mips/lynloong_pc.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/platform/mips/lynloong_pc.c 2010-03-06 16:43:22.000000000 +0100 -@@ -0,0 +1,511 @@ +diff -Nur linux-2.6.34.orig/drivers/platform/mips/lynloong_pc.c linux-loongson/drivers/platform/mips/lynloong_pc.c +--- linux-2.6.34.orig/drivers/platform/mips/lynloong_pc.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/platform/mips/lynloong_pc.c 2010-05-27 18:12:39.993464274 +0200 +@@ -0,0 +1,513 @@ +/* + * Driver for LynLoong PC extras + * @@ -36581,6 +40581,7 @@ diff -Nur linux-2.6.33/drivers/platform/mips/lynloong_pc.c linux-lemote/drivers/ +{ + int ret; + u32 hi; ++ struct backlight_properties props; + + /* Get gpio_base */ + _rdmsr(DIVIL_MSR_REG(DIVIL_LBAR_GPIO), &hi, &gpio_base); @@ -36594,15 +40595,16 @@ diff -Nur linux-2.6.33/drivers/platform/mips/lynloong_pc.c linux-lemote/drivers/ + /* Enable brightness controlling */ + set_gpio_output_high(7); + ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; + lynloong_backlight_dev = backlight_device_register("backlight0", NULL, -+ NULL, &backlight_ops); ++ NULL, &backlight_ops, &props); + + if (IS_ERR(lynloong_backlight_dev)) { + ret = PTR_ERR(lynloong_backlight_dev); + return ret; + } + -+ lynloong_backlight_dev->props.max_brightness = MAX_BRIGHTNESS; + lynloong_backlight_dev->props.brightness = DEFAULT_BRIGHTNESS; + backlight_update_status(lynloong_backlight_dev); + @@ -36975,9 +40977,9 @@ diff -Nur linux-2.6.33/drivers/platform/mips/lynloong_pc.c linux-lemote/drivers/ +MODULE_AUTHOR("Wu Zhangjin ; Xiang Yu "); +MODULE_DESCRIPTION("LynLoong PC driver"); +MODULE_LICENSE("GPL"); -diff -Nur linux-2.6.33/drivers/platform/mips/Makefile linux-lemote/drivers/platform/mips/Makefile ---- linux-2.6.33/drivers/platform/mips/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/platform/mips/Makefile 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/platform/mips/Makefile linux-loongson/drivers/platform/mips/Makefile +--- linux-2.6.34.orig/drivers/platform/mips/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/platform/mips/Makefile 2010-05-27 18:12:39.993464274 +0200 @@ -0,0 +1,7 @@ +# +# Makefile for MIPS Platform-Specific Drivers @@ -36986,9 +40988,9 @@ diff -Nur linux-2.6.33/drivers/platform/mips/Makefile linux-lemote/drivers/platf +obj-$(CONFIG_LEMOTE_YEELOONG2F) += yeeloong_laptop.o + +obj-$(CONFIG_LEMOTE_LYNLOONG2F) += lynloong_pc.o -diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_ecrom.c linux-lemote/drivers/platform/mips/yeeloong_ecrom.c ---- linux-2.6.33/drivers/platform/mips/yeeloong_ecrom.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/platform/mips/yeeloong_ecrom.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/platform/mips/yeeloong_ecrom.c linux-loongson/drivers/platform/mips/yeeloong_ecrom.c +--- linux-2.6.34.orig/drivers/platform/mips/yeeloong_ecrom.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/platform/mips/yeeloong_ecrom.c 2010-05-27 18:12:39.993464274 +0200 @@ -0,0 +1,943 @@ +/* + * Driver for flushing/dumping ROM of EC on YeeLoong laptop @@ -37933,10 +41935,10 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_ecrom.c linux-lemote/drive +MODULE_AUTHOR("liujl "); +MODULE_DESCRIPTION("Driver for flushing/dumping ROM of EC on YeeLoong laptop"); +MODULE_LICENSE("GPL"); -diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/drivers/platform/mips/yeeloong_laptop.c ---- linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-lemote/drivers/platform/mips/yeeloong_laptop.c 2010-03-06 16:43:22.000000000 +0100 -@@ -0,0 +1,1194 @@ +diff -Nur linux-2.6.34.orig/drivers/platform/mips/yeeloong_laptop.c linux-loongson/drivers/platform/mips/yeeloong_laptop.c +--- linux-2.6.34.orig/drivers/platform/mips/yeeloong_laptop.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-loongson/drivers/platform/mips/yeeloong_laptop.c 2010-05-27 18:12:39.993464274 +0200 +@@ -0,0 +1,1200 @@ +/* + * Driver for YeeLoong laptop extras + * @@ -37969,7 +41971,7 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv +/* common function */ +#define EC_VER_LEN 64 + -+static int ec_ver_small_than(char *version) ++static int ec_version_before(char *version) +{ + char *p, ec_ver[EC_VER_LEN]; + @@ -37983,11 +41985,7 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + *p = '\0'; + } + -+ /* Seems EC(>=PQ1D26) does this job for us, we can not do it again, -+ * otherwise, the brightness will not resume to the normal level! */ -+ if (strncasecmp(ec_ver, version, 64) < 0) -+ return 1; -+ return 0; ++ return (strncasecmp(ec_ver, version, 64) < 0); +} + +/* backlight subdriver */ @@ -38030,9 +42028,12 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv +static int yeeloong_backlight_init(void) +{ + int ret; ++ struct backlight_properties props; + ++ memset(&props, 0, sizeof(struct backlight_properties)); ++ props.max_brightness = MAX_BRIGHTNESS; + yeeloong_backlight_dev = backlight_device_register("backlight0", NULL, -+ NULL, &backlight_ops); ++ NULL, &backlight_ops, &props); + + if (IS_ERR(yeeloong_backlight_dev)) { + ret = PTR_ERR(yeeloong_backlight_dev); @@ -38040,7 +42041,6 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + return ret; + } + -+ yeeloong_backlight_dev->props.max_brightness = MAX_BRIGHTNESS; + yeeloong_backlight_dev->props.brightness = + yeeloong_get_brightness(yeeloong_backlight_dev); + backlight_update_status(yeeloong_backlight_dev); @@ -38133,7 +42133,7 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + break; + case POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW: + /* seconds */ -+ val->intval = bat_in ? (curr_cap - 3) * 54 + 142 : 00; ++ val->intval = bat_in ? (curr_cap - 3) * 54 + 142 : 0; + break; + case POWER_SUPPLY_PROP_STATUS: + if (!bat_in) @@ -38168,6 +42168,9 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + } + val->intval = health; + break; ++ case POWER_SUPPLY_PROP_CHARGE_NOW: /* 1/100(%)*1000 µAh */ ++ val->intval = curr_cap * get_bat_info(FULLCHG_CAP) * 10; ++ break; + default: + return -EINVAL; + } @@ -38208,13 +42211,13 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + switch (psp) { + /* Fixed information */ + case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN: -+ val->intval = get_bat_info(DESIGN_CAP) * 1000; /* mV -> µV */ ++ val->intval = get_bat_info(DESIGN_VOL) * 1000; /* mV -> µV */ + break; + case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN: -+ val->intval = get_bat_info(DESIGN_VOL) * 1000; /* mA -> µA */ ++ val->intval = get_bat_info(DESIGN_CAP) * 1000; /* mAh->µAh */ + break; + case POWER_SUPPLY_PROP_CHARGE_FULL: -+ val->intval = get_bat_info(FULLCHG_CAP) * 1000; /* µA */ ++ val->intval = get_bat_info(FULLCHG_CAP) * 1000; /* µAh */ + break; + case POWER_SUPPLY_PROP_MANUFACTURER: + val->strval = (ec_read(REG_BAT_VENDOR) == @@ -38243,6 +42246,8 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + POWER_SUPPLY_PROP_PRESENT, + POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN, + POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN, ++ POWER_SUPPLY_PROP_CHARGE_FULL, ++ POWER_SUPPLY_PROP_CHARGE_NOW, + POWER_SUPPLY_PROP_CURRENT_NOW, + POWER_SUPPLY_PROP_VOLTAGE_NOW, + POWER_SUPPLY_PROP_HEALTH, @@ -38570,10 +42575,8 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + +static void yeeloong_lcd_vo_set(int status) +{ -+ if (ec_ver_small_than("EC_VER=PQ1D27")) { -+ lcd_output_dev->request_state = status; -+ lcd_video_output_set(lcd_output_dev); -+ } ++ lcd_output_dev->request_state = status; ++ lcd_video_output_set(lcd_output_dev); +} + +static void yeeloong_crt_vo_set(int status) @@ -38634,7 +42637,8 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + {KE_SW, EVENT_LID, { SW_LID } }, + {KE_KEY, EVENT_CAMERA, { KEY_CAMERA } }, /* Fn + ESC */ + {KE_KEY, EVENT_SLEEP, { KEY_SLEEP } }, /* Fn + F1 */ -+ {KE_KEY, EVENT_DISPLAY_TOGGLE, { KEY_SWITCHVIDEOMODE } }, /* Fn + F3 */ ++ {KE_KEY, EVENT_DISPLAYTOGGLE, { KEY_DISPLAYTOGGLE } }, /* Fn + F2 */ ++ {KE_KEY, EVENT_SWITCHVIDEOMODE, { KEY_SWITCHVIDEOMODE } }, /* Fn + F3 */ + {KE_KEY, EVENT_AUDIO_MUTE, { KEY_MUTE } }, /* Fn + F4 */ + {KE_KEY, EVENT_WLAN, { KEY_WLAN } }, /* Fn + F5 */ + {KE_KEY, EVENT_DISPLAY_BRIGHTNESS, { KEY_BRIGHTNESSUP } }, /* Fn + up */ @@ -38693,15 +42697,17 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + return status; +} + -+static int black_screen_handler(int status) ++static int displaytoggle_handler(int status) +{ -+ if (ec_ver_small_than("EC_VER=PQ1D26")) ++ /* EC(>=PQ1D26) does this job for us, we can not do it again, ++ * otherwise, the brightness will not resume to the normal level! */ ++ if (ec_version_before("EC_VER=PQ1D26")) + yeeloong_lcd_vo_set(status); + + return status; +} + -+static int display_toggle_handler(int status) ++static int switchvideomode_handler(int status) +{ + static int video_output_status; + @@ -38790,8 +42796,8 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + case EVENT_LID: + reg = REG_LID_DETECT; + break; -+ case EVENT_DISPLAY_TOGGLE: -+ handler = display_toggle_handler; ++ case EVENT_SWITCHVIDEOMODE: ++ handler = switchvideomode_handler; + break; + case EVENT_CRT_DETECT: + reg = REG_CRT_DETECT; @@ -38809,9 +42815,9 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + reg = REG_USB0_FLAG; + handler = usb0_handler; + break; -+ case EVENT_BLACK_SCREEN: ++ case EVENT_DISPLAYTOGGLE: + reg = REG_DISPLAY_LCD; -+ handler = black_screen_handler; ++ handler = displaytoggle_handler; + break; + case EVENT_AUDIO_MUTE: + reg = REG_AUDIO_MUTE; @@ -39022,7 +43028,8 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv +static int yeeloong_suspend(struct device *dev) + +{ -+ yeeloong_lcd_vo_set(BIT_DISPLAY_LCD_OFF); ++ if (ec_version_before("EC_VER=PQ1D27")) ++ yeeloong_lcd_vo_set(BIT_DISPLAY_LCD_OFF); + yeeloong_crt_vo_set(BIT_CRT_DETECT_UNPLUG); + usb_ports_set(BIT_USB_FLAG_OFF); + @@ -39031,7 +43038,8 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv + +static int yeeloong_resume(struct device *dev) +{ -+ yeeloong_lcd_vo_set(BIT_DISPLAY_LCD_ON); ++ if (ec_version_before("EC_VER=PQ1D27")) ++ yeeloong_lcd_vo_set(BIT_DISPLAY_LCD_ON); + yeeloong_crt_vo_set(BIT_CRT_DETECT_PLUG); + usb_ports_set(BIT_USB_FLAG_ON); + @@ -39131,9 +43139,9 @@ diff -Nur linux-2.6.33/drivers/platform/mips/yeeloong_laptop.c linux-lemote/driv +MODULE_AUTHOR("Wu Zhangjin ; Liu Junliang "); +MODULE_DESCRIPTION("YeeLoong laptop driver"); +MODULE_LICENSE("GPL"); -diff -Nur linux-2.6.33/drivers/rtc/rtc-cmos.c linux-lemote/drivers/rtc/rtc-cmos.c ---- linux-2.6.33/drivers/rtc/rtc-cmos.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/rtc/rtc-cmos.c 2010-03-06 16:43:22.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/rtc/rtc-cmos.c linux-loongson/drivers/rtc/rtc-cmos.c +--- linux-2.6.34.orig/drivers/rtc/rtc-cmos.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/drivers/rtc/rtc-cmos.c 2010-05-27 18:15:37.623465175 +0200 @@ -752,9 +752,8 @@ /* FIXME teach the alarm code how to handle binary mode; * doesn't know 12-hour mode either. @@ -39146,1548 +43154,10 @@ diff -Nur linux-2.6.33/drivers/rtc/rtc-cmos.c linux-lemote/drivers/rtc/rtc-cmos. retval = -ENXIO; goto cleanup1; } -diff -Nur linux-2.6.33/drivers/staging/sm7xx/Kconfig linux-lemote/drivers/staging/sm7xx/Kconfig ---- linux-2.6.33/drivers/staging/sm7xx/Kconfig 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/staging/sm7xx/Kconfig 2010-03-06 16:43:30.000000000 +0100 -@@ -6,10 +6,3 @@ - select FB_CFB_IMAGEBLIT - help - Frame Buffer driver for the Silicon Motion SM7XX serial graphic card. -- --config FB_SM7XX_ACCEL -- bool "Siliconmotion Acceleration functions (EXPERIMENTAL)" -- depends on FB_SM7XX && EXPERIMENTAL -- help -- This will compile the Trident frame buffer device with -- acceleration functions. -diff -Nur linux-2.6.33/drivers/staging/sm7xx/smtc2d.c linux-lemote/drivers/staging/sm7xx/smtc2d.c ---- linux-2.6.33/drivers/staging/sm7xx/smtc2d.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/staging/sm7xx/smtc2d.c 1970-01-01 01:00:00.000000000 +0100 -@@ -1,979 +0,0 @@ --/* -- * Silicon Motion SM7XX 2D drawing engine functions. -- * -- * Copyright (C) 2006 Silicon Motion Technology Corp. -- * Author: Boyod boyod.yang@siliconmotion.com.cn -- * -- * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -- * -- * This file is subject to the terms and conditions of the GNU General Public -- * License. See the file COPYING in the main directory of this archive for -- * more details. -- * -- * Version 0.10.26192.21.01 -- * - Add PowerPC support -- * - Add 2D support for Lynx - -- * Verified on 2.6.19.2 -- * Boyod.yang -- */ -- --unsigned char smtc_de_busy; -- --void SMTC_write2Dreg(unsigned long nOffset, unsigned long nData) --{ -- writel(nData, smtc_2DBaseAddress + nOffset); --} -- --unsigned long SMTC_read2Dreg(unsigned long nOffset) --{ -- return readl(smtc_2DBaseAddress + nOffset); --} -- --void SMTC_write2Ddataport(unsigned long nOffset, unsigned long nData) --{ -- writel(nData, smtc_2Ddataport + nOffset); --} -- --/********************************************************************** -- * -- * deInit -- * -- * Purpose -- * Drawing engine initialization. -- * -- **********************************************************************/ -- --void deInit(unsigned int nModeWidth, unsigned int nModeHeight, -- unsigned int bpp) --{ -- /* Get current power configuration. */ -- unsigned char clock; -- clock = smtc_seqr(0x21); -- -- /* initialize global 'mutex lock' variable */ -- smtc_de_busy = 0; -- -- /* Enable 2D Drawing Engine */ -- smtc_seqw(0x21, clock & 0xF8); -- -- SMTC_write2Dreg(DE_CLIP_TL, -- FIELD_VALUE(0, DE_CLIP_TL, TOP, 0) | -- FIELD_SET(0, DE_CLIP_TL, STATUS, DISABLE) | -- FIELD_SET(0, DE_CLIP_TL, INHIBIT, OUTSIDE) | -- FIELD_VALUE(0, DE_CLIP_TL, LEFT, 0)); -- -- if (bpp >= 24) { -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- nModeWidth * 3) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- nModeWidth -- * 3)); -- } else { -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- nModeWidth) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- nModeWidth)); -- } -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- nModeWidth) | FIELD_VALUE(0, -- DE_WINDOW_WIDTH, -- SOURCE, -- nModeWidth)); -- -- switch (bpp) { -- case 8: -- SMTC_write2Dreg(DE_STRETCH_FORMAT, -- FIELD_SET(0, DE_STRETCH_FORMAT, PATTERN_XY, -- NORMAL) | FIELD_VALUE(0, -- DE_STRETCH_FORMAT, -- PATTERN_Y, -- 0) | -- FIELD_VALUE(0, DE_STRETCH_FORMAT, PATTERN_X, -- 0) | FIELD_SET(0, DE_STRETCH_FORMAT, -- PIXEL_FORMAT, -- 8) | FIELD_SET(0, -- DE_STRETCH_FORMAT, -- ADDRESSING, -- XY) | -- FIELD_VALUE(0, DE_STRETCH_FORMAT, -- SOURCE_HEIGHT, 3)); -- break; -- case 24: -- SMTC_write2Dreg(DE_STRETCH_FORMAT, -- FIELD_SET(0, DE_STRETCH_FORMAT, PATTERN_XY, -- NORMAL) | FIELD_VALUE(0, -- DE_STRETCH_FORMAT, -- PATTERN_Y, -- 0) | -- FIELD_VALUE(0, DE_STRETCH_FORMAT, PATTERN_X, -- 0) | FIELD_SET(0, DE_STRETCH_FORMAT, -- PIXEL_FORMAT, -- 24) | FIELD_SET(0, -- DE_STRETCH_FORMAT, -- ADDRESSING, -- XY) | -- FIELD_VALUE(0, DE_STRETCH_FORMAT, -- SOURCE_HEIGHT, 3)); -- break; -- case 16: -- default: -- SMTC_write2Dreg(DE_STRETCH_FORMAT, -- FIELD_SET(0, DE_STRETCH_FORMAT, PATTERN_XY, -- NORMAL) | FIELD_VALUE(0, -- DE_STRETCH_FORMAT, -- PATTERN_Y, -- 0) | -- FIELD_VALUE(0, DE_STRETCH_FORMAT, PATTERN_X, -- 0) | FIELD_SET(0, DE_STRETCH_FORMAT, -- PIXEL_FORMAT, -- 16) | FIELD_SET(0, -- DE_STRETCH_FORMAT, -- ADDRESSING, -- XY) | -- FIELD_VALUE(0, DE_STRETCH_FORMAT, -- SOURCE_HEIGHT, 3)); -- break; -- } -- -- SMTC_write2Dreg(DE_MASKS, -- FIELD_VALUE(0, DE_MASKS, BYTE_MASK, 0xFFFF) | -- FIELD_VALUE(0, DE_MASKS, BIT_MASK, 0xFFFF)); -- SMTC_write2Dreg(DE_COLOR_COMPARE_MASK, -- FIELD_VALUE(0, DE_COLOR_COMPARE_MASK, MASKS, \ -- 0xFFFFFF)); -- SMTC_write2Dreg(DE_COLOR_COMPARE, -- FIELD_VALUE(0, DE_COLOR_COMPARE, COLOR, 0xFFFFFF)); --} -- --void deVerticalLine(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long nX, -- unsigned long nY, -- unsigned long dst_height, unsigned long nColor) --{ -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, -- FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, ADDRESS, -- dst_base)); -- -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, dst_pitch) | -- FIELD_VALUE(0, DE_PITCH, SOURCE, dst_pitch)); -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, DE_WINDOW_WIDTH, -- SOURCE, -- dst_pitch)); -- -- SMTC_write2Dreg(DE_FOREGROUND, -- FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_DESTINATION, X, nX) | -- FIELD_VALUE(0, DE_DESTINATION, Y, nY)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, 1) | -- FIELD_VALUE(0, DE_DIMENSION, Y_ET, dst_height)); -- -- SMTC_write2Dreg(DE_CONTROL, -- FIELD_SET(0, DE_CONTROL, STATUS, START) | -- FIELD_SET(0, DE_CONTROL, DIRECTION, LEFT_TO_RIGHT) | -- FIELD_SET(0, DE_CONTROL, MAJOR, Y) | -- FIELD_SET(0, DE_CONTROL, STEP_X, NEGATIVE) | -- FIELD_SET(0, DE_CONTROL, STEP_Y, POSITIVE) | -- FIELD_SET(0, DE_CONTROL, LAST_PIXEL, OFF) | -- FIELD_SET(0, DE_CONTROL, COMMAND, SHORT_STROKE) | -- FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | -- FIELD_VALUE(0, DE_CONTROL, ROP, 0x0C)); -- -- smtc_de_busy = 1; --} -- --void deHorizontalLine(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long nX, -- unsigned long nY, -- unsigned long dst_width, unsigned long nColor) --{ -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, -- FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, ADDRESS, -- dst_base)); -- -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, dst_pitch) | -- FIELD_VALUE(0, DE_PITCH, SOURCE, dst_pitch)); -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, DE_WINDOW_WIDTH, -- SOURCE, -- dst_pitch)); -- SMTC_write2Dreg(DE_FOREGROUND, -- FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, -- DISABLE) | FIELD_VALUE(0, DE_DESTINATION, X, -- nX) | FIELD_VALUE(0, -- DE_DESTINATION, -- Y, -- nY)); -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, -- dst_width) | FIELD_VALUE(0, DE_DIMENSION, -- Y_ET, 1)); -- SMTC_write2Dreg(DE_CONTROL, -- FIELD_SET(0, DE_CONTROL, STATUS, START) | FIELD_SET(0, -- DE_CONTROL, -- DIRECTION, -- RIGHT_TO_LEFT) -- | FIELD_SET(0, DE_CONTROL, MAJOR, X) | FIELD_SET(0, -- DE_CONTROL, -- STEP_X, -- POSITIVE) -- | FIELD_SET(0, DE_CONTROL, STEP_Y, -- NEGATIVE) | FIELD_SET(0, DE_CONTROL, -- LAST_PIXEL, -- OFF) | FIELD_SET(0, -- DE_CONTROL, -- COMMAND, -- SHORT_STROKE) -- | FIELD_SET(0, DE_CONTROL, ROP_SELECT, -- ROP2) | FIELD_VALUE(0, DE_CONTROL, ROP, -- 0x0C)); -- -- smtc_de_busy = 1; --} -- --void deLine(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long nX1, -- unsigned long nY1, -- unsigned long nX2, unsigned long nY2, unsigned long nColor) --{ -- unsigned long nCommand = -- FIELD_SET(0, DE_CONTROL, STATUS, START) | -- FIELD_SET(0, DE_CONTROL, DIRECTION, LEFT_TO_RIGHT) | -- FIELD_SET(0, DE_CONTROL, MAJOR, X) | -- FIELD_SET(0, DE_CONTROL, STEP_X, POSITIVE) | -- FIELD_SET(0, DE_CONTROL, STEP_Y, POSITIVE) | -- FIELD_SET(0, DE_CONTROL, LAST_PIXEL, OFF) | -- FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | -- FIELD_VALUE(0, DE_CONTROL, ROP, 0x0C); -- unsigned long DeltaX; -- unsigned long DeltaY; -- -- /* Calculate delta X */ -- if (nX1 <= nX2) -- DeltaX = nX2 - nX1; -- else { -- DeltaX = nX1 - nX2; -- nCommand = FIELD_SET(nCommand, DE_CONTROL, STEP_X, NEGATIVE); -- } -- -- /* Calculate delta Y */ -- if (nY1 <= nY2) -- DeltaY = nY2 - nY1; -- else { -- DeltaY = nY1 - nY2; -- nCommand = FIELD_SET(nCommand, DE_CONTROL, STEP_Y, NEGATIVE); -- } -- -- /* Determine the major axis */ -- if (DeltaX < DeltaY) -- nCommand = FIELD_SET(nCommand, DE_CONTROL, MAJOR, Y); -- -- /* Vertical line? */ -- if (nX1 == nX2) -- deVerticalLine(dst_base, dst_pitch, nX1, nY1, DeltaY, nColor); -- -- /* Horizontal line? */ -- else if (nY1 == nY2) -- deHorizontalLine(dst_base, dst_pitch, nX1, nY1, \ -- DeltaX, nColor); -- -- /* Diagonal line? */ -- else if (DeltaX == DeltaY) { -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, -- FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, -- ADDRESS, dst_base)); -- -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- dst_pitch)); -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_WINDOW_WIDTH, -- SOURCE, -- dst_pitch)); -- -- SMTC_write2Dreg(DE_FOREGROUND, -- FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_DESTINATION, X, 1) | -- FIELD_VALUE(0, DE_DESTINATION, Y, nY1)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, 1) | -- FIELD_VALUE(0, DE_DIMENSION, Y_ET, DeltaX)); -- -- SMTC_write2Dreg(DE_CONTROL, -- FIELD_SET(nCommand, DE_CONTROL, COMMAND, -- SHORT_STROKE)); -- } -- -- /* Generic line */ -- else { -- unsigned int k1, k2, et, w; -- if (DeltaX < DeltaY) { -- k1 = 2 * DeltaX; -- et = k1 - DeltaY; -- k2 = et - DeltaY; -- w = DeltaY + 1; -- } else { -- k1 = 2 * DeltaY; -- et = k1 - DeltaX; -- k2 = et - DeltaX; -- w = DeltaX + 1; -- } -- -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, -- FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, -- ADDRESS, dst_base)); -- -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- dst_pitch)); -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_WINDOW_WIDTH, -- SOURCE, -- dst_pitch)); -- -- SMTC_write2Dreg(DE_FOREGROUND, -- FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); -- -- SMTC_write2Dreg(DE_SOURCE, -- FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_SOURCE, X_K1, k1) | -- FIELD_VALUE(0, DE_SOURCE, Y_K2, k2)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_DESTINATION, X, nX1) | -- FIELD_VALUE(0, DE_DESTINATION, Y, nY1)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, w) | -- FIELD_VALUE(0, DE_DIMENSION, Y_ET, et)); -- -- SMTC_write2Dreg(DE_CONTROL, -- FIELD_SET(nCommand, DE_CONTROL, COMMAND, -- LINE_DRAW)); -- } -- -- smtc_de_busy = 1; --} -- --void deFillRect(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long dst_X, -- unsigned long dst_Y, -- unsigned long dst_width, -- unsigned long dst_height, unsigned long nColor) --{ -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, -- FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, ADDRESS, -- dst_base)); -- -- if (dst_pitch) { -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- dst_pitch)); -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_WINDOW_WIDTH, -- SOURCE, -- dst_pitch)); -- } -- -- SMTC_write2Dreg(DE_FOREGROUND, -- FIELD_VALUE(0, DE_FOREGROUND, COLOR, nColor)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_DESTINATION, X, dst_X) | -- FIELD_VALUE(0, DE_DESTINATION, Y, dst_Y)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, dst_width) | -- FIELD_VALUE(0, DE_DIMENSION, Y_ET, dst_height)); -- -- SMTC_write2Dreg(DE_CONTROL, -- FIELD_SET(0, DE_CONTROL, STATUS, START) | -- FIELD_SET(0, DE_CONTROL, DIRECTION, LEFT_TO_RIGHT) | -- FIELD_SET(0, DE_CONTROL, LAST_PIXEL, OFF) | -- FIELD_SET(0, DE_CONTROL, COMMAND, RECTANGLE_FILL) | -- FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | -- FIELD_VALUE(0, DE_CONTROL, ROP, 0x0C)); -- -- smtc_de_busy = 1; --} -- --/********************************************************************** -- * -- * deRotatePattern -- * -- * Purpose -- * Rotate the given pattern if necessary -- * -- * Parameters -- * [in] -- * pPattern - Pointer to DE_SURFACE structure containing -- * pattern attributes -- * patternX - X position (0-7) of pattern origin -- * patternY - Y position (0-7) of pattern origin -- * -- * [out] -- * pattern_dstaddr - Pointer to pre-allocated buffer containing -- * rotated pattern -- * -- **********************************************************************/ --void deRotatePattern(unsigned char *pattern_dstaddr, -- unsigned long pattern_src_addr, -- unsigned long pattern_BPP, -- unsigned long pattern_stride, int patternX, int patternY) --{ -- unsigned int i; -- unsigned long pattern[PATTERN_WIDTH * PATTERN_HEIGHT]; -- unsigned int x, y; -- unsigned char *pjPatByte; -- -- if (pattern_dstaddr != NULL) { -- deWaitForNotBusy(); -- -- if (patternX || patternY) { -- /* Rotate pattern */ -- pjPatByte = (unsigned char *)pattern; -- -- switch (pattern_BPP) { -- case 8: -- { -- for (y = 0; y < 8; y++) { -- unsigned char *pjBuffer = -- pattern_dstaddr + -- ((patternY + y) & 7) * 8; -- for (x = 0; x < 8; x++) { -- pjBuffer[(patternX + -- x) & 7] = -- pjPatByte[x]; -- } -- pjPatByte += pattern_stride; -- } -- break; -- } -- -- case 16: -- { -- for (y = 0; y < 8; y++) { -- unsigned short *pjBuffer = -- (unsigned short *) -- pattern_dstaddr + -- ((patternY + y) & 7) * 8; -- for (x = 0; x < 8; x++) { -- pjBuffer[(patternX + -- x) & 7] = -- ((unsigned short *) -- pjPatByte)[x]; -- } -- pjPatByte += pattern_stride; -- } -- break; -- } -- -- case 32: -- { -- for (y = 0; y < 8; y++) { -- unsigned long *pjBuffer = -- (unsigned long *) -- pattern_dstaddr + -- ((patternY + y) & 7) * 8; -- for (x = 0; x < 8; x++) { -- pjBuffer[(patternX + -- x) & 7] = -- ((unsigned long *) -- pjPatByte)[x]; -- } -- pjPatByte += pattern_stride; -- } -- break; -- } -- } -- } else { -- /*Don't rotate,just copy pattern into pattern_dstaddr*/ -- for (i = 0; i < (pattern_BPP * 2); i++) { -- ((unsigned long *)pattern_dstaddr)[i] = -- pattern[i]; -- } -- } -- -- } --} -- --/********************************************************************** -- * -- * deCopy -- * -- * Purpose -- * Copy a rectangular area of the source surface to a destination surface -- * -- * Remarks -- * Source bitmap must have the same color depth (BPP) as the destination -- * bitmap. -- * --**********************************************************************/ --void deCopy(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long dst_BPP, -- unsigned long dst_X, -- unsigned long dst_Y, -- unsigned long dst_width, -- unsigned long dst_height, -- unsigned long src_base, -- unsigned long src_pitch, -- unsigned long src_X, -- unsigned long src_Y, pTransparent pTransp, unsigned char nROP2) --{ -- unsigned long nDirection = 0; -- unsigned long nTransparent = 0; -- /* Direction of ROP2 operation: -- * 1 = Left to Right, -- * (-1) = Right to Left -- */ -- unsigned long opSign = 1; -- /* xWidth is in pixels */ -- unsigned long xWidth = 192 / (dst_BPP / 8); -- unsigned long de_ctrl = 0; -- -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, -- FIELD_VALUE(0, DE_WINDOW_DESTINATION_BASE, ADDRESS, -- dst_base)); -- -- SMTC_write2Dreg(DE_WINDOW_SOURCE_BASE, -- FIELD_VALUE(0, DE_WINDOW_SOURCE_BASE, ADDRESS, -- src_base)); -- -- if (dst_pitch && src_pitch) { -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- src_pitch)); -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- dst_pitch) | FIELD_VALUE(0, -- DE_WINDOW_WIDTH, -- SOURCE, -- src_pitch)); -- } -- -- /* Set transparent bits if necessary */ -- if (pTransp != NULL) { -- nTransparent = -- pTransp->match | pTransp->select | pTransp->control; -- -- /* Set color compare register */ -- SMTC_write2Dreg(DE_COLOR_COMPARE, -- FIELD_VALUE(0, DE_COLOR_COMPARE, COLOR, -- pTransp->color)); -- } -- -- /* Determine direction of operation */ -- if (src_Y < dst_Y) { -- /* +----------+ -- |S | -- | +----------+ -- | | | | -- | | | | -- +---|------+ | -- | D | -- +----------+ */ -- -- nDirection = BOTTOM_TO_TOP; -- } else if (src_Y > dst_Y) { -- /* +----------+ -- |D | -- | +----------+ -- | | | | -- | | | | -- +---|------+ | -- | S | -- +----------+ */ -- -- nDirection = TOP_TO_BOTTOM; -- } else { -- /* src_Y == dst_Y */ -- -- if (src_X <= dst_X) { -- /* +------+---+------+ -- |S | | D| -- | | | | -- | | | | -- | | | | -- +------+---+------+ */ -- -- nDirection = RIGHT_TO_LEFT; -- } else { -- /* src_X > dst_X */ -- -- /* +------+---+------+ -- |D | | S| -- | | | | -- | | | | -- | | | | -- +------+---+------+ */ -- -- nDirection = LEFT_TO_RIGHT; -- } -- } -- -- if ((nDirection == BOTTOM_TO_TOP) || (nDirection == RIGHT_TO_LEFT)) { -- src_X += dst_width - 1; -- src_Y += dst_height - 1; -- dst_X += dst_width - 1; -- dst_Y += dst_height - 1; -- opSign = (-1); -- } -- -- if (dst_BPP >= 24) { -- src_X *= 3; -- src_Y *= 3; -- dst_X *= 3; -- dst_Y *= 3; -- dst_width *= 3; -- if ((nDirection == BOTTOM_TO_TOP) -- || (nDirection == RIGHT_TO_LEFT)) { -- src_X += 2; -- dst_X += 2; -- } -- } -- -- /* Workaround for 192 byte hw bug */ -- if ((nROP2 != 0x0C) && ((dst_width * (dst_BPP / 8)) >= 192)) { -- /* -- * Perform the ROP2 operation in chunks of (xWidth * -- * dst_height) -- */ -- while (1) { -- deWaitForNotBusy(); -- -- SMTC_write2Dreg(DE_SOURCE, -- FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_SOURCE, X_K1, src_X) | -- FIELD_VALUE(0, DE_SOURCE, Y_K2, src_Y)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, -- DISABLE) | FIELD_VALUE(0, -- DE_DESTINATION, -- X, -- dst_X) -- | FIELD_VALUE(0, DE_DESTINATION, Y, -- dst_Y)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, -- xWidth) | FIELD_VALUE(0, -- DE_DIMENSION, -- Y_ET, -- dst_height)); -- -- de_ctrl = -- FIELD_VALUE(0, DE_CONTROL, ROP, -- nROP2) | nTransparent | FIELD_SET(0, -- DE_CONTROL, -- ROP_SELECT, -- ROP2) -- | FIELD_SET(0, DE_CONTROL, COMMAND, -- BITBLT) | ((nDirection == -- 1) ? FIELD_SET(0, -- DE_CONTROL, -- DIRECTION, -- RIGHT_TO_LEFT) -- : FIELD_SET(0, DE_CONTROL, -- DIRECTION, -- LEFT_TO_RIGHT)) | -- FIELD_SET(0, DE_CONTROL, STATUS, START); -- -- SMTC_write2Dreg(DE_CONTROL, de_ctrl); -- -- src_X += (opSign * xWidth); -- dst_X += (opSign * xWidth); -- dst_width -= xWidth; -- -- if (dst_width <= 0) { -- /* ROP2 operation is complete */ -- break; -- } -- -- if (xWidth > dst_width) -- xWidth = dst_width; -- } -- } else { -- deWaitForNotBusy(); -- SMTC_write2Dreg(DE_SOURCE, -- FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_SOURCE, X_K1, src_X) | -- FIELD_VALUE(0, DE_SOURCE, Y_K2, src_Y)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_DESTINATION, X, dst_X) | -- FIELD_VALUE(0, DE_DESTINATION, Y, dst_Y)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, dst_width) | -- FIELD_VALUE(0, DE_DIMENSION, Y_ET, dst_height)); -- -- de_ctrl = FIELD_VALUE(0, DE_CONTROL, ROP, nROP2) | -- nTransparent | -- FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | -- FIELD_SET(0, DE_CONTROL, COMMAND, BITBLT) | -- ((nDirection == 1) ? FIELD_SET(0, DE_CONTROL, DIRECTION, -- RIGHT_TO_LEFT) -- : FIELD_SET(0, DE_CONTROL, DIRECTION, -- LEFT_TO_RIGHT)) | FIELD_SET(0, DE_CONTROL, -- STATUS, START); -- SMTC_write2Dreg(DE_CONTROL, de_ctrl); -- } -- -- smtc_de_busy = 1; --} -- --/* -- * This function sets the pixel format that will apply to the 2D Engine. -- */ --void deSetPixelFormat(unsigned long bpp) --{ -- unsigned long de_format; -- -- de_format = SMTC_read2Dreg(DE_STRETCH_FORMAT); -- -- switch (bpp) { -- case 8: -- de_format = -- FIELD_SET(de_format, DE_STRETCH_FORMAT, PIXEL_FORMAT, 8); -- break; -- default: -- case 16: -- de_format = -- FIELD_SET(de_format, DE_STRETCH_FORMAT, PIXEL_FORMAT, 16); -- break; -- case 32: -- de_format = -- FIELD_SET(de_format, DE_STRETCH_FORMAT, PIXEL_FORMAT, 32); -- break; -- } -- -- SMTC_write2Dreg(DE_STRETCH_FORMAT, de_format); --} -- --/* -- * System memory to Video memory monochrome expansion. -- * -- * Source is monochrome image in system memory. This function expands the -- * monochrome data to color image in video memory. -- */ -- --long deSystemMem2VideoMemMonoBlt(const char *pSrcbuf, -- long srcDelta, -- unsigned long startBit, -- unsigned long dBase, -- unsigned long dPitch, -- unsigned long bpp, -- unsigned long dx, unsigned long dy, -- unsigned long width, unsigned long height, -- unsigned long fColor, -- unsigned long bColor, -- unsigned long rop2) { -- unsigned long bytePerPixel; -- unsigned long ulBytesPerScan; -- unsigned long ul4BytesPerScan; -- unsigned long ulBytesRemain; -- unsigned long de_ctrl = 0; -- unsigned char ajRemain[4]; -- long i, j; -- -- bytePerPixel = bpp / 8; -- -- /* Just make sure the start bit is within legal range */ -- startBit &= 7; -- -- ulBytesPerScan = (width + startBit + 7) / 8; -- ul4BytesPerScan = ulBytesPerScan & ~3; -- ulBytesRemain = ulBytesPerScan & 3; -- -- if (smtc_de_busy) -- deWaitForNotBusy(); -- -- /* -- * 2D Source Base. Use 0 for HOST Blt. -- */ -- -- SMTC_write2Dreg(DE_WINDOW_SOURCE_BASE, 0); -- -- /* -- * 2D Destination Base. -- * -- * It is an address offset (128 bit aligned) from the beginning of -- * frame buffer. -- */ -- -- SMTC_write2Dreg(DE_WINDOW_DESTINATION_BASE, dBase); -- -- if (dPitch) { -- -- /* -- * Program pitch (distance between the 1st points of two -- * adjacent lines). -- * -- * Note that input pitch is BYTE value, but the 2D Pitch -- * register uses pixel values. Need Byte to pixel convertion. -- */ -- -- SMTC_write2Dreg(DE_PITCH, -- FIELD_VALUE(0, DE_PITCH, DESTINATION, -- dPitch / -- bytePerPixel) | FIELD_VALUE(0, -- DE_PITCH, -- SOURCE, -- dPitch / -- bytePerPixel)); -- -- /* Screen Window width in Pixels. -- * -- * 2D engine uses this value to calculate the linear address in -- * frame buffer for a given point. -- */ -- -- SMTC_write2Dreg(DE_WINDOW_WIDTH, -- FIELD_VALUE(0, DE_WINDOW_WIDTH, DESTINATION, -- (dPitch / -- bytePerPixel)) | FIELD_VALUE(0, -- DE_WINDOW_WIDTH, -- SOURCE, -- (dPitch -- / -- bytePerPixel))); -- } -- /* Note: For 2D Source in Host Write, only X_K1 field is needed, and -- * Y_K2 field is not used. For mono bitmap, use startBit for X_K1. -- */ -- -- SMTC_write2Dreg(DE_SOURCE, -- FIELD_SET(0, DE_SOURCE, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_SOURCE, X_K1, startBit) | -- FIELD_VALUE(0, DE_SOURCE, Y_K2, 0)); -- -- SMTC_write2Dreg(DE_DESTINATION, -- FIELD_SET(0, DE_DESTINATION, WRAP, DISABLE) | -- FIELD_VALUE(0, DE_DESTINATION, X, dx) | -- FIELD_VALUE(0, DE_DESTINATION, Y, dy)); -- -- SMTC_write2Dreg(DE_DIMENSION, -- FIELD_VALUE(0, DE_DIMENSION, X, width) | -- FIELD_VALUE(0, DE_DIMENSION, Y_ET, height)); -- -- SMTC_write2Dreg(DE_FOREGROUND, fColor); -- SMTC_write2Dreg(DE_BACKGROUND, bColor); -- -- if (bpp) -- deSetPixelFormat(bpp); -- /* Set the pixel format of the destination */ -- -- de_ctrl = FIELD_VALUE(0, DE_CONTROL, ROP, rop2) | -- FIELD_SET(0, DE_CONTROL, ROP_SELECT, ROP2) | -- FIELD_SET(0, DE_CONTROL, COMMAND, HOST_WRITE) | -- FIELD_SET(0, DE_CONTROL, HOST, MONO) | -- FIELD_SET(0, DE_CONTROL, STATUS, START); -- -- SMTC_write2Dreg(DE_CONTROL, de_ctrl | deGetTransparency()); -- -- /* Write MONO data (line by line) to 2D Engine data port */ -- for (i = 0; i < height; i++) { -- /* For each line, send the data in chunks of 4 bytes */ -- for (j = 0; j < (ul4BytesPerScan / 4); j++) -- SMTC_write2Ddataport(0, -- *(unsigned long *)(pSrcbuf + -- (j * 4))); -- -- if (ulBytesRemain) { -- memcpy(ajRemain, pSrcbuf + ul4BytesPerScan, -- ulBytesRemain); -- SMTC_write2Ddataport(0, *(unsigned long *)ajRemain); -- } -- -- pSrcbuf += srcDelta; -- } -- smtc_de_busy = 1; -- -- return 0; --} -- --/* -- * This function gets the transparency status from DE_CONTROL register. -- * It returns a double word with the transparent fields properly set, -- * while other fields are 0. -- */ --unsigned long deGetTransparency(void) --{ -- unsigned long de_ctrl; -- -- de_ctrl = SMTC_read2Dreg(DE_CONTROL); -- -- de_ctrl &= -- FIELD_MASK(DE_CONTROL_TRANSPARENCY_MATCH) | -- FIELD_MASK(DE_CONTROL_TRANSPARENCY_SELECT) | -- FIELD_MASK(DE_CONTROL_TRANSPARENCY); -- -- return de_ctrl; --} -diff -Nur linux-2.6.33/drivers/staging/sm7xx/smtc2d.h linux-lemote/drivers/staging/sm7xx/smtc2d.h ---- linux-2.6.33/drivers/staging/sm7xx/smtc2d.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/staging/sm7xx/smtc2d.h 1970-01-01 01:00:00.000000000 +0100 -@@ -1,530 +0,0 @@ --/* -- * Silicon Motion SM712 2D drawing engine functions. -- * -- * Copyright (C) 2006 Silicon Motion Technology Corp. -- * Author: Ge Wang, gewang@siliconmotion.com -- * -- * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -- * -- * This file is subject to the terms and conditions of the GNU General Public -- * License. See the file COPYING in the main directory of this archive for -- * more details. -- */ -- --#ifndef NULL --#define NULL 0 --#endif -- --/* Internal macros */ -- --#define _F_START(f) (0 ? f) --#define _F_END(f) (1 ? f) --#define _F_SIZE(f) (1 + _F_END(f) - _F_START(f)) --#define _F_MASK(f) (((1ULL << _F_SIZE(f)) - 1) << _F_START(f)) --#define _F_NORMALIZE(v, f) (((v) & _F_MASK(f)) >> _F_START(f)) --#define _F_DENORMALIZE(v, f) (((v) << _F_START(f)) & _F_MASK(f)) -- --/* Global macros */ -- --#define FIELD_GET(x, reg, field) \ --( \ -- _F_NORMALIZE((x), reg ## _ ## field) \ --) -- --#define FIELD_SET(x, reg, field, value) \ --( \ -- (x & ~_F_MASK(reg ## _ ## field)) \ -- | _F_DENORMALIZE(reg ## _ ## field ## _ ## value, reg ## _ ## field) \ --) -- --#define FIELD_VALUE(x, reg, field, value) \ --( \ -- (x & ~_F_MASK(reg ## _ ## field)) \ -- | _F_DENORMALIZE(value, reg ## _ ## field) \ --) -- --#define FIELD_CLEAR(reg, field) \ --( \ -- ~_F_MASK(reg ## _ ## field) \ --) -- --/* Field Macros */ -- --#define FIELD_START(field) (0 ? field) --#define FIELD_END(field) (1 ? field) --#define FIELD_SIZE(field) \ -- (1 + FIELD_END(field) - FIELD_START(field)) -- --#define FIELD_MASK(field) \ -- (((1 << (FIELD_SIZE(field)-1)) \ -- | ((1 << (FIELD_SIZE(field)-1)) - 1)) \ -- << FIELD_START(field)) -- --#define FIELD_NORMALIZE(reg, field) \ -- (((reg) & FIELD_MASK(field)) >> FIELD_START(field)) -- --#define FIELD_DENORMALIZE(field, value) \ -- (((value) << FIELD_START(field)) & FIELD_MASK(field)) -- --#define FIELD_INIT(reg, field, value) \ -- FIELD_DENORMALIZE(reg ## _ ## field, \ -- reg ## _ ## field ## _ ## value) -- --#define FIELD_INIT_VAL(reg, field, value) \ -- (FIELD_DENORMALIZE(reg ## _ ## field, value)) -- --#define FIELD_VAL_SET(x, r, f, v) ({ \ -- x = (x & ~FIELD_MASK(r ## _ ## f)) \ -- | FIELD_DENORMALIZE(r ## _ ## f, r ## _ ## f ## _ ## v) \ --}) -- --#define RGB(r, g, b) ((unsigned long)(((r) << 16) | ((g) << 8) | (b))) -- --/* Transparent info definition */ --typedef struct { -- unsigned long match; /* Matching pixel is OPAQUE/TRANSPARENT */ -- unsigned long select; /* Transparency controlled by SRC/DST */ -- unsigned long control; /* ENABLE/DISABLE transparency */ -- unsigned long color; /* Transparent color */ --} Transparent, *pTransparent; -- --#define PIXEL_DEPTH_1_BP 0 /* 1 bit per pixel */ --#define PIXEL_DEPTH_8_BPP 1 /* 8 bits per pixel */ --#define PIXEL_DEPTH_16_BPP 2 /* 16 bits per pixel */ --#define PIXEL_DEPTH_32_BPP 3 /* 32 bits per pixel */ --#define PIXEL_DEPTH_YUV422 8 /* 16 bits per pixel YUV422 */ --#define PIXEL_DEPTH_YUV420 9 /* 16 bits per pixel YUV420 */ -- --#define PATTERN_WIDTH 8 --#define PATTERN_HEIGHT 8 -- --#define TOP_TO_BOTTOM 0 --#define BOTTOM_TO_TOP 1 --#define RIGHT_TO_LEFT BOTTOM_TO_TOP --#define LEFT_TO_RIGHT TOP_TO_BOTTOM -- --/* Constants used in Transparent structure */ --#define MATCH_OPAQUE 0x00000000 --#define MATCH_TRANSPARENT 0x00000400 --#define SOURCE 0x00000000 --#define DESTINATION 0x00000200 -- --/* 2D registers. */ -- --#define DE_SOURCE 0x000000 --#define DE_SOURCE_WRAP 31 : 31 --#define DE_SOURCE_WRAP_DISABLE 0 --#define DE_SOURCE_WRAP_ENABLE 1 --#define DE_SOURCE_X_K1 29 : 16 --#define DE_SOURCE_Y_K2 15 : 0 -- --#define DE_DESTINATION 0x000004 --#define DE_DESTINATION_WRAP 31 : 31 --#define DE_DESTINATION_WRAP_DISABLE 0 --#define DE_DESTINATION_WRAP_ENABLE 1 --#define DE_DESTINATION_X 28 : 16 --#define DE_DESTINATION_Y 15 : 0 -- --#define DE_DIMENSION 0x000008 --#define DE_DIMENSION_X 28 : 16 --#define DE_DIMENSION_Y_ET 15 : 0 -- --#define DE_CONTROL 0x00000C --#define DE_CONTROL_STATUS 31 : 31 --#define DE_CONTROL_STATUS_STOP 0 --#define DE_CONTROL_STATUS_START 1 --#define DE_CONTROL_PATTERN 30 : 30 --#define DE_CONTROL_PATTERN_MONO 0 --#define DE_CONTROL_PATTERN_COLOR 1 --#define DE_CONTROL_UPDATE_DESTINATION_X 29 : 29 --#define DE_CONTROL_UPDATE_DESTINATION_X_DISABLE 0 --#define DE_CONTROL_UPDATE_DESTINATION_X_ENABLE 1 --#define DE_CONTROL_QUICK_START 28 : 28 --#define DE_CONTROL_QUICK_START_DISABLE 0 --#define DE_CONTROL_QUICK_START_ENABLE 1 --#define DE_CONTROL_DIRECTION 27 : 27 --#define DE_CONTROL_DIRECTION_LEFT_TO_RIGHT 0 --#define DE_CONTROL_DIRECTION_RIGHT_TO_LEFT 1 --#define DE_CONTROL_MAJOR 26 : 26 --#define DE_CONTROL_MAJOR_X 0 --#define DE_CONTROL_MAJOR_Y 1 --#define DE_CONTROL_STEP_X 25 : 25 --#define DE_CONTROL_STEP_X_POSITIVE 1 --#define DE_CONTROL_STEP_X_NEGATIVE 0 --#define DE_CONTROL_STEP_Y 24 : 24 --#define DE_CONTROL_STEP_Y_POSITIVE 1 --#define DE_CONTROL_STEP_Y_NEGATIVE 0 --#define DE_CONTROL_STRETCH 23 : 23 --#define DE_CONTROL_STRETCH_DISABLE 0 --#define DE_CONTROL_STRETCH_ENABLE 1 --#define DE_CONTROL_HOST 22 : 22 --#define DE_CONTROL_HOST_COLOR 0 --#define DE_CONTROL_HOST_MONO 1 --#define DE_CONTROL_LAST_PIXEL 21 : 21 --#define DE_CONTROL_LAST_PIXEL_OFF 0 --#define DE_CONTROL_LAST_PIXEL_ON 1 --#define DE_CONTROL_COMMAND 20 : 16 --#define DE_CONTROL_COMMAND_BITBLT 0 --#define DE_CONTROL_COMMAND_RECTANGLE_FILL 1 --#define DE_CONTROL_COMMAND_DE_TILE 2 --#define DE_CONTROL_COMMAND_TRAPEZOID_FILL 3 --#define DE_CONTROL_COMMAND_ALPHA_BLEND 4 --#define DE_CONTROL_COMMAND_RLE_STRIP 5 --#define DE_CONTROL_COMMAND_SHORT_STROKE 6 --#define DE_CONTROL_COMMAND_LINE_DRAW 7 --#define DE_CONTROL_COMMAND_HOST_WRITE 8 --#define DE_CONTROL_COMMAND_HOST_READ 9 --#define DE_CONTROL_COMMAND_HOST_WRITE_BOTTOM_UP 10 --#define DE_CONTROL_COMMAND_ROTATE 11 --#define DE_CONTROL_COMMAND_FONT 12 --#define DE_CONTROL_COMMAND_TEXTURE_LOAD 15 --#define DE_CONTROL_ROP_SELECT 15 : 15 --#define DE_CONTROL_ROP_SELECT_ROP3 0 --#define DE_CONTROL_ROP_SELECT_ROP2 1 --#define DE_CONTROL_ROP2_SOURCE 14 : 14 --#define DE_CONTROL_ROP2_SOURCE_BITMAP 0 --#define DE_CONTROL_ROP2_SOURCE_PATTERN 1 --#define DE_CONTROL_MONO_DATA 13 : 12 --#define DE_CONTROL_MONO_DATA_NOT_PACKED 0 --#define DE_CONTROL_MONO_DATA_8_PACKED 1 --#define DE_CONTROL_MONO_DATA_16_PACKED 2 --#define DE_CONTROL_MONO_DATA_32_PACKED 3 --#define DE_CONTROL_REPEAT_ROTATE 11 : 11 --#define DE_CONTROL_REPEAT_ROTATE_DISABLE 0 --#define DE_CONTROL_REPEAT_ROTATE_ENABLE 1 --#define DE_CONTROL_TRANSPARENCY_MATCH 10 : 10 --#define DE_CONTROL_TRANSPARENCY_MATCH_OPAQUE 0 --#define DE_CONTROL_TRANSPARENCY_MATCH_TRANSPARENT 1 --#define DE_CONTROL_TRANSPARENCY_SELECT 9 : 9 --#define DE_CONTROL_TRANSPARENCY_SELECT_SOURCE 0 --#define DE_CONTROL_TRANSPARENCY_SELECT_DESTINATION 1 --#define DE_CONTROL_TRANSPARENCY 8 : 8 --#define DE_CONTROL_TRANSPARENCY_DISABLE 0 --#define DE_CONTROL_TRANSPARENCY_ENABLE 1 --#define DE_CONTROL_ROP 7 : 0 -- --/* Pseudo fields. */ -- --#define DE_CONTROL_SHORT_STROKE_DIR 27 : 24 --#define DE_CONTROL_SHORT_STROKE_DIR_225 0 --#define DE_CONTROL_SHORT_STROKE_DIR_135 1 --#define DE_CONTROL_SHORT_STROKE_DIR_315 2 --#define DE_CONTROL_SHORT_STROKE_DIR_45 3 --#define DE_CONTROL_SHORT_STROKE_DIR_270 4 --#define DE_CONTROL_SHORT_STROKE_DIR_90 5 --#define DE_CONTROL_SHORT_STROKE_DIR_180 8 --#define DE_CONTROL_SHORT_STROKE_DIR_0 10 --#define DE_CONTROL_ROTATION 25 : 24 --#define DE_CONTROL_ROTATION_0 0 --#define DE_CONTROL_ROTATION_270 1 --#define DE_CONTROL_ROTATION_90 2 --#define DE_CONTROL_ROTATION_180 3 -- --#define DE_PITCH 0x000010 --#define DE_PITCH_DESTINATION 28 : 16 --#define DE_PITCH_SOURCE 12 : 0 -- --#define DE_FOREGROUND 0x000014 --#define DE_FOREGROUND_COLOR 31 : 0 -- --#define DE_BACKGROUND 0x000018 --#define DE_BACKGROUND_COLOR 31 : 0 -- --#define DE_STRETCH_FORMAT 0x00001C --#define DE_STRETCH_FORMAT_PATTERN_XY 30 : 30 --#define DE_STRETCH_FORMAT_PATTERN_XY_NORMAL 0 --#define DE_STRETCH_FORMAT_PATTERN_XY_OVERWRITE 1 --#define DE_STRETCH_FORMAT_PATTERN_Y 29 : 27 --#define DE_STRETCH_FORMAT_PATTERN_X 25 : 23 --#define DE_STRETCH_FORMAT_PIXEL_FORMAT 21 : 20 --#define DE_STRETCH_FORMAT_PIXEL_FORMAT_8 0 --#define DE_STRETCH_FORMAT_PIXEL_FORMAT_16 1 --#define DE_STRETCH_FORMAT_PIXEL_FORMAT_24 3 --#define DE_STRETCH_FORMAT_PIXEL_FORMAT_32 2 --#define DE_STRETCH_FORMAT_ADDRESSING 19 : 16 --#define DE_STRETCH_FORMAT_ADDRESSING_XY 0 --#define DE_STRETCH_FORMAT_ADDRESSING_LINEAR 15 --#define DE_STRETCH_FORMAT_SOURCE_HEIGHT 11 : 0 -- --#define DE_COLOR_COMPARE 0x000020 --#define DE_COLOR_COMPARE_COLOR 23 : 0 -- --#define DE_COLOR_COMPARE_MASK 0x000024 --#define DE_COLOR_COMPARE_MASK_MASKS 23 : 0 -- --#define DE_MASKS 0x000028 --#define DE_MASKS_BYTE_MASK 31 : 16 --#define DE_MASKS_BIT_MASK 15 : 0 -- --#define DE_CLIP_TL 0x00002C --#define DE_CLIP_TL_TOP 31 : 16 --#define DE_CLIP_TL_STATUS 13 : 13 --#define DE_CLIP_TL_STATUS_DISABLE 0 --#define DE_CLIP_TL_STATUS_ENABLE 1 --#define DE_CLIP_TL_INHIBIT 12 : 12 --#define DE_CLIP_TL_INHIBIT_OUTSIDE 0 --#define DE_CLIP_TL_INHIBIT_INSIDE 1 --#define DE_CLIP_TL_LEFT 11 : 0 -- --#define DE_CLIP_BR 0x000030 --#define DE_CLIP_BR_BOTTOM 31 : 16 --#define DE_CLIP_BR_RIGHT 12 : 0 -- --#define DE_MONO_PATTERN_LOW 0x000034 --#define DE_MONO_PATTERN_LOW_PATTERN 31 : 0 -- --#define DE_MONO_PATTERN_HIGH 0x000038 --#define DE_MONO_PATTERN_HIGH_PATTERN 31 : 0 -- --#define DE_WINDOW_WIDTH 0x00003C --#define DE_WINDOW_WIDTH_DESTINATION 28 : 16 --#define DE_WINDOW_WIDTH_SOURCE 12 : 0 -- --#define DE_WINDOW_SOURCE_BASE 0x000040 --#define DE_WINDOW_SOURCE_BASE_EXT 27 : 27 --#define DE_WINDOW_SOURCE_BASE_EXT_LOCAL 0 --#define DE_WINDOW_SOURCE_BASE_EXT_EXTERNAL 1 --#define DE_WINDOW_SOURCE_BASE_CS 26 : 26 --#define DE_WINDOW_SOURCE_BASE_CS_0 0 --#define DE_WINDOW_SOURCE_BASE_CS_1 1 --#define DE_WINDOW_SOURCE_BASE_ADDRESS 25 : 0 -- --#define DE_WINDOW_DESTINATION_BASE 0x000044 --#define DE_WINDOW_DESTINATION_BASE_EXT 27 : 27 --#define DE_WINDOW_DESTINATION_BASE_EXT_LOCAL 0 --#define DE_WINDOW_DESTINATION_BASE_EXT_EXTERNAL 1 --#define DE_WINDOW_DESTINATION_BASE_CS 26 : 26 --#define DE_WINDOW_DESTINATION_BASE_CS_0 0 --#define DE_WINDOW_DESTINATION_BASE_CS_1 1 --#define DE_WINDOW_DESTINATION_BASE_ADDRESS 25 : 0 -- --#define DE_ALPHA 0x000048 --#define DE_ALPHA_VALUE 7 : 0 -- --#define DE_WRAP 0x00004C --#define DE_WRAP_X 31 : 16 --#define DE_WRAP_Y 15 : 0 -- --#define DE_STATUS 0x000050 --#define DE_STATUS_CSC 1 : 1 --#define DE_STATUS_CSC_CLEAR 0 --#define DE_STATUS_CSC_NOT_ACTIVE 0 --#define DE_STATUS_CSC_ACTIVE 1 --#define DE_STATUS_2D 0 : 0 --#define DE_STATUS_2D_CLEAR 0 --#define DE_STATUS_2D_NOT_ACTIVE 0 --#define DE_STATUS_2D_ACTIVE 1 -- --/* Color Space Conversion registers. */ -- --#define CSC_Y_SOURCE_BASE 0x0000C8 --#define CSC_Y_SOURCE_BASE_EXT 27 : 27 --#define CSC_Y_SOURCE_BASE_EXT_LOCAL 0 --#define CSC_Y_SOURCE_BASE_EXT_EXTERNAL 1 --#define CSC_Y_SOURCE_BASE_CS 26 : 26 --#define CSC_Y_SOURCE_BASE_CS_0 0 --#define CSC_Y_SOURCE_BASE_CS_1 1 --#define CSC_Y_SOURCE_BASE_ADDRESS 25 : 0 -- --#define CSC_CONSTANTS 0x0000CC --#define CSC_CONSTANTS_Y 31 : 24 --#define CSC_CONSTANTS_R 23 : 16 --#define CSC_CONSTANTS_G 15 : 8 --#define CSC_CONSTANTS_B 7 : 0 -- --#define CSC_Y_SOURCE_X 0x0000D0 --#define CSC_Y_SOURCE_X_INTEGER 26 : 16 --#define CSC_Y_SOURCE_X_FRACTION 15 : 3 -- --#define CSC_Y_SOURCE_Y 0x0000D4 --#define CSC_Y_SOURCE_Y_INTEGER 27 : 16 --#define CSC_Y_SOURCE_Y_FRACTION 15 : 3 -- --#define CSC_U_SOURCE_BASE 0x0000D8 --#define CSC_U_SOURCE_BASE_EXT 27 : 27 --#define CSC_U_SOURCE_BASE_EXT_LOCAL 0 --#define CSC_U_SOURCE_BASE_EXT_EXTERNAL 1 --#define CSC_U_SOURCE_BASE_CS 26 : 26 --#define CSC_U_SOURCE_BASE_CS_0 0 --#define CSC_U_SOURCE_BASE_CS_1 1 --#define CSC_U_SOURCE_BASE_ADDRESS 25 : 0 -- --#define CSC_V_SOURCE_BASE 0x0000DC --#define CSC_V_SOURCE_BASE_EXT 27 : 27 --#define CSC_V_SOURCE_BASE_EXT_LOCAL 0 --#define CSC_V_SOURCE_BASE_EXT_EXTERNAL 1 --#define CSC_V_SOURCE_BASE_CS 26 : 26 --#define CSC_V_SOURCE_BASE_CS_0 0 --#define CSC_V_SOURCE_BASE_CS_1 1 --#define CSC_V_SOURCE_BASE_ADDRESS 25 : 0 -- --#define CSC_SOURCE_DIMENSION 0x0000E0 --#define CSC_SOURCE_DIMENSION_X 31 : 16 --#define CSC_SOURCE_DIMENSION_Y 15 : 0 -- --#define CSC_SOURCE_PITCH 0x0000E4 --#define CSC_SOURCE_PITCH_Y 31 : 16 --#define CSC_SOURCE_PITCH_UV 15 : 0 -- --#define CSC_DESTINATION 0x0000E8 --#define CSC_DESTINATION_WRAP 31 : 31 --#define CSC_DESTINATION_WRAP_DISABLE 0 --#define CSC_DESTINATION_WRAP_ENABLE 1 --#define CSC_DESTINATION_X 27 : 16 --#define CSC_DESTINATION_Y 11 : 0 -- --#define CSC_DESTINATION_DIMENSION 0x0000EC --#define CSC_DESTINATION_DIMENSION_X 31 : 16 --#define CSC_DESTINATION_DIMENSION_Y 15 : 0 -- --#define CSC_DESTINATION_PITCH 0x0000F0 --#define CSC_DESTINATION_PITCH_X 31 : 16 --#define CSC_DESTINATION_PITCH_Y 15 : 0 -- --#define CSC_SCALE_FACTOR 0x0000F4 --#define CSC_SCALE_FACTOR_HORIZONTAL 31 : 16 --#define CSC_SCALE_FACTOR_VERTICAL 15 : 0 -- --#define CSC_DESTINATION_BASE 0x0000F8 --#define CSC_DESTINATION_BASE_EXT 27 : 27 --#define CSC_DESTINATION_BASE_EXT_LOCAL 0 --#define CSC_DESTINATION_BASE_EXT_EXTERNAL 1 --#define CSC_DESTINATION_BASE_CS 26 : 26 --#define CSC_DESTINATION_BASE_CS_0 0 --#define CSC_DESTINATION_BASE_CS_1 1 --#define CSC_DESTINATION_BASE_ADDRESS 25 : 0 -- --#define CSC_CONTROL 0x0000FC --#define CSC_CONTROL_STATUS 31 : 31 --#define CSC_CONTROL_STATUS_STOP 0 --#define CSC_CONTROL_STATUS_START 1 --#define CSC_CONTROL_SOURCE_FORMAT 30 : 28 --#define CSC_CONTROL_SOURCE_FORMAT_YUV422 0 --#define CSC_CONTROL_SOURCE_FORMAT_YUV420I 1 --#define CSC_CONTROL_SOURCE_FORMAT_YUV420 2 --#define CSC_CONTROL_SOURCE_FORMAT_YVU9 3 --#define CSC_CONTROL_SOURCE_FORMAT_IYU1 4 --#define CSC_CONTROL_SOURCE_FORMAT_IYU2 5 --#define CSC_CONTROL_SOURCE_FORMAT_RGB565 6 --#define CSC_CONTROL_SOURCE_FORMAT_RGB8888 7 --#define CSC_CONTROL_DESTINATION_FORMAT 27 : 26 --#define CSC_CONTROL_DESTINATION_FORMAT_RGB565 0 --#define CSC_CONTROL_DESTINATION_FORMAT_RGB8888 1 --#define CSC_CONTROL_HORIZONTAL_FILTER 25 : 25 --#define CSC_CONTROL_HORIZONTAL_FILTER_DISABLE 0 --#define CSC_CONTROL_HORIZONTAL_FILTER_ENABLE 1 --#define CSC_CONTROL_VERTICAL_FILTER 24 : 24 --#define CSC_CONTROL_VERTICAL_FILTER_DISABLE 0 --#define CSC_CONTROL_VERTICAL_FILTER_ENABLE 1 --#define CSC_CONTROL_BYTE_ORDER 23 : 23 --#define CSC_CONTROL_BYTE_ORDER_YUYV 0 --#define CSC_CONTROL_BYTE_ORDER_UYVY 1 -- --#define DE_DATA_PORT_501 0x110000 --#define DE_DATA_PORT_712 0x400000 --#define DE_DATA_PORT_722 0x6000 -- --/* point to virtual Memory Map IO starting address */ --extern char *smtc_RegBaseAddress; --/* point to virtual video memory starting address */ --extern char *smtc_VRAMBaseAddress; --extern unsigned char smtc_de_busy; -- --extern unsigned long memRead32(unsigned long nOffset); --extern void memWrite32(unsigned long nOffset, unsigned long nData); --extern unsigned long SMTC_read2Dreg(unsigned long nOffset); -- --/* 2D functions */ --extern void deInit(unsigned int nModeWidth, unsigned int nModeHeight, -- unsigned int bpp); -- --extern void deWaitForNotBusy(void); -- --extern void deVerticalLine(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long nX, -- unsigned long nY, -- unsigned long dst_height, -- unsigned long nColor); -- --extern void deHorizontalLine(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long nX, -- unsigned long nY, -- unsigned long dst_width, -- unsigned long nColor); -- --extern void deLine(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long nX1, -- unsigned long nY1, -- unsigned long nX2, -- unsigned long nY2, -- unsigned long nColor); -- --extern void deFillRect(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long dst_X, -- unsigned long dst_Y, -- unsigned long dst_width, -- unsigned long dst_height, -- unsigned long nColor); -- --extern void deRotatePattern(unsigned char *pattern_dstaddr, -- unsigned long pattern_src_addr, -- unsigned long pattern_BPP, -- unsigned long pattern_stride, -- int patternX, -- int patternY); -- --extern void deCopy(unsigned long dst_base, -- unsigned long dst_pitch, -- unsigned long dst_BPP, -- unsigned long dst_X, -- unsigned long dst_Y, -- unsigned long dst_width, -- unsigned long dst_height, -- unsigned long src_base, -- unsigned long src_pitch, -- unsigned long src_X, -- unsigned long src_Y, -- pTransparent pTransp, -- unsigned char nROP2); -- --/* -- * System memory to Video memory monochrome expansion. -- * -- * Source is monochrome image in system memory. This function expands the -- * monochrome data to color image in video memory. -- * -- * @pSrcbuf: pointer to start of source buffer in system memory -- * @srcDelta: Pitch value (in bytes) of the source buffer, +ive means top -- * down and -ive mean button up -- * @startBit: Mono data can start at any bit in a byte, this value should -- * be 0 to 7 -- * @dBase: Address of destination : offset in frame buffer -- * @dPitch: Pitch value of destination surface in BYTE -- * @bpp: Color depth of destination surface -- * @dx, dy: Starting coordinate of destination surface -- * @width, height: width and height of rectange in pixel value -- * @fColor,bColor: Foreground, Background color (corresponding to a 1, 0 in -- * the monochrome data) -- * @rop2: ROP value -- */ -- --extern long deSystemMem2VideoMemMonoBlt( -- const char *pSrcbuf, -- long srcDelta, -- unsigned long startBit, -- unsigned long dBase, -- unsigned long dPitch, -- unsigned long bpp, -- unsigned long dx, unsigned long dy, -- unsigned long width, unsigned long height, -- unsigned long fColor, -- unsigned long bColor, -- unsigned long rop2); -- --extern unsigned long deGetTransparency(void); --extern void deSetPixelFormat(unsigned long bpp); -diff -Nur linux-2.6.33/drivers/staging/sm7xx/smtcfb.c linux-lemote/drivers/staging/sm7xx/smtcfb.c ---- linux-2.6.33/drivers/staging/sm7xx/smtcfb.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/staging/sm7xx/smtcfb.c 2010-03-06 16:43:30.000000000 +0100 -@@ -6,12 +6,14 @@ - * Boyod boyod.yang@siliconmotion.com.cn - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This file is subject to the terms and conditions of the GNU General Public +diff -Nur linux-2.6.34.orig/drivers/staging/sm7xx/smtcfb.c linux-loongson/drivers/staging/sm7xx/smtcfb.c +--- linux-2.6.34.orig/drivers/staging/sm7xx/smtcfb.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/drivers/staging/sm7xx/smtcfb.c 2010-05-27 18:15:38.733462789 +0200 +@@ -12,6 +12,8 @@ * License. See the file COPYING in the main directory of this archive for * more details. * @@ -40696,15 +43166,7 @@ diff -Nur linux-2.6.33/drivers/staging/sm7xx/smtcfb.c linux-lemote/drivers/stagi * Version 0.10.26192.21.01 * - Add PowerPC/Big endian support * - Add 2D support for Lynx -@@ -45,7 +47,6 @@ - struct screen_info smtc_screen_info; - - #include "smtcfb.h" --#include "smtc2d.h" - - #ifdef DEBUG - #define smdbg(format, arg...) printk(KERN_DEBUG format , ## arg) -@@ -107,6 +108,7 @@ +@@ -107,6 +109,7 @@ {"0x307", 1280, 1024, 8}, {"0x311", 640, 480, 16}, @@ -40712,222 +43174,9 @@ diff -Nur linux-2.6.33/drivers/staging/sm7xx/smtcfb.c linux-lemote/drivers/stagi {"0x314", 800, 600, 16}, {"0x317", 1024, 768, 16}, {"0x31A", 1280, 1024, 16}, -@@ -120,10 +122,6 @@ - char __iomem *smtc_RegBaseAddress; /* Memory Map IO starting address */ - char __iomem *smtc_VRAMBaseAddress; /* video memory starting address */ - --char *smtc_2DBaseAddress; /* 2D engine starting address */ --char *smtc_2Ddataport; /* 2D data port offset */ --short smtc_2Dacceleration; -- - static u32 colreg[17]; - static struct par_info hw; /* hardware information */ - -@@ -135,16 +133,6 @@ - - #define numSMTCchipIDs (sizeof(smtc_ChipIDs) / sizeof(u16)) - --void deWaitForNotBusy(void) --{ -- unsigned long i = 0x1000000; -- while (i--) { -- if ((smtc_seqr(0x16) & 0x18) == 0x10) -- break; -- } -- smtc_de_busy = 0; --} -- - static void sm712_set_timing(struct smtcfb_info *sfb, - struct par_info *ppar_info) - { -@@ -324,7 +312,7 @@ - return chan << bf->offset; - } - --static int smtcfb_blank(int blank_mode, struct fb_info *info) -+static int cfb_blank(int blank_mode, struct fb_info *info) - { - /* clear DPMS setting */ - switch (blank_mode) { -@@ -622,93 +610,13 @@ - } - #endif /* ! __BIG_ENDIAN */ - --#include "smtc2d.c" -- --void smtcfb_copyarea(struct fb_info *info, const struct fb_copyarea *area) --{ -- struct par_info *p = (struct par_info *)info->par; -- -- if (smtc_2Dacceleration) { -- if (!area->width || !area->height) -- return; -- -- deCopy(p->BaseAddressInVRAM, 0, info->var.bits_per_pixel, -- area->dx, area->dy, area->width, area->height, -- p->BaseAddressInVRAM, 0, area->sx, area->sy, 0, 0xC); -- -- } else -- cfb_copyarea(info, area); --} -- --void smtcfb_fillrect(struct fb_info *info, const struct fb_fillrect *rect) --{ -- struct par_info *p = (struct par_info *)info->par; -- -- if (smtc_2Dacceleration) { -- if (!rect->width || !rect->height) -- return; -- if (info->var.bits_per_pixel >= 24) -- deFillRect(p->BaseAddressInVRAM, 0, rect->dx * 3, -- rect->dy * 3, rect->width * 3, rect->height, -- rect->color); -- else -- deFillRect(p->BaseAddressInVRAM, 0, rect->dx, rect->dy, -- rect->width, rect->height, rect->color); -- } else -- cfb_fillrect(info, rect); --} -- --void smtcfb_imageblit(struct fb_info *info, const struct fb_image *image) --{ -- struct par_info *p = (struct par_info *)info->par; -- u32 bg_col = 0, fg_col = 0; -- -- if ((smtc_2Dacceleration) && (image->depth == 1)) { -- if (smtc_de_busy) -- deWaitForNotBusy(); -- -- switch (info->var.bits_per_pixel) { -- case 8: -- bg_col = image->bg_color; -- fg_col = image->fg_color; -- break; -- case 16: -- bg_col = -- ((u32 *) (info->pseudo_palette))[image->bg_color]; -- fg_col = -- ((u32 *) (info->pseudo_palette))[image->fg_color]; -- break; -- case 32: -- bg_col = -- ((u32 *) (info->pseudo_palette))[image->bg_color]; -- fg_col = -- ((u32 *) (info->pseudo_palette))[image->fg_color]; -- break; -- } -- -- deSystemMem2VideoMemMonoBlt( -- image->data, -- image->width / 8, -- 0, -- p->BaseAddressInVRAM, -- 0, -- 0, -- image->dx, image->dy, -- image->width, image->height, -- fg_col, bg_col, -- 0x0C); -- -- } else -- cfb_imageblit(info, image); --} -- - static struct fb_ops smtcfb_ops = { - .owner = THIS_MODULE, - .fb_setcolreg = smtc_setcolreg, -- .fb_blank = smtcfb_blank, -- .fb_fillrect = smtcfb_fillrect, -- .fb_imageblit = smtcfb_imageblit, -- .fb_copyarea = smtcfb_copyarea, -+ .fb_blank = cfb_blank, -+ .fb_fillrect = cfb_fillrect, -+ .fb_imageblit = cfb_imageblit, -+ .fb_copyarea = cfb_copyarea, - #ifdef __BIG_ENDIAN - .fb_read = smtcfb_read, - .fb_write = smtcfb_write, -@@ -772,12 +680,6 @@ - hw.height = sfb->fb.var.yres; - hw.hz = 60; - smtc_set_timing(sfb, &hw); -- if (smtc_2Dacceleration) { -- printk("2D acceleration enabled!\n"); -- /* Init smtc drawing engine */ -- deInit(sfb->fb.var.xres, sfb->fb.var.yres, -- sfb->fb.var.bits_per_pixel); -- } - } - - /* -@@ -1004,9 +906,7 @@ - #endif - hw.m_pMMIO = (smtc_RegBaseAddress = - smtc_VRAMBaseAddress + 0x00700000); -- smtc_2DBaseAddress = (hw.m_pDPR = -- smtc_VRAMBaseAddress + 0x00408000); -- smtc_2Ddataport = smtc_VRAMBaseAddress + DE_DATA_PORT_712; -+ hw.m_pDPR = smtc_VRAMBaseAddress + 0x00408000; - hw.m_pVPR = hw.m_pLFB + 0x0040c000; - #ifdef __BIG_ENDIAN - if (sfb->fb.var.bits_per_pixel == 32) { -@@ -1035,27 +935,21 @@ - if (sfb->fb.var.bits_per_pixel == 32) - smtc_seqw(0x17, 0x30); - #endif --#ifdef CONFIG_FB_SM7XX_ACCEL -- smtc_2Dacceleration = 1; --#endif - break; - case 0x720: - sfb->fb.fix.mmio_start = pFramebufferPhysical; - sfb->fb.fix.mmio_len = 0x00200000; - smem_size = SM722_VIDEOMEMORYSIZE; -- smtc_2DBaseAddress = (hw.m_pDPR = -- ioremap(pFramebufferPhysical, 0x00a00000)); -+ hw.m_pDPR = ioremap(pFramebufferPhysical, 0x00a00000); - hw.m_pLFB = (smtc_VRAMBaseAddress = -- smtc_2DBaseAddress + 0x00200000); -+ hw.m_pDPR + 0x00200000); - hw.m_pMMIO = (smtc_RegBaseAddress = -- smtc_2DBaseAddress + 0x000c0000); -- smtc_2Ddataport = smtc_2DBaseAddress + DE_DATA_PORT_722; -- hw.m_pVPR = smtc_2DBaseAddress + 0x800; -+ hw.m_pDPR + 0x000c0000); -+ hw.m_pVPR = hw.m_pDPR + 0x800; - - smtc_seqw(0x62, 0xff); - smtc_seqw(0x6a, 0x0d); - smtc_seqw(0x6b, 0x02); -- smtc_2Dacceleration = 0; - break; - default: - printk(KERN_INFO -diff -Nur linux-2.6.33/drivers/staging/sm7xx/smtcfb.h linux-lemote/drivers/staging/sm7xx/smtcfb.h ---- linux-2.6.33/drivers/staging/sm7xx/smtcfb.h 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/staging/sm7xx/smtcfb.h 2010-03-06 16:43:30.000000000 +0100 -@@ -6,7 +6,7 @@ - * Boyod boyod.yang@siliconmotion.com.cn - * - * Copyright (C) 2009 Lemote, Inc. -- * Author: Wu Zhangjin, wuzj@lemote.com -+ * Author: Wu Zhangjin, wuzhangjin@gmail.com - * - * This file is subject to the terms and conditions of the GNU General Public - * License. See the file COPYING in the main directory of this archive for -diff -Nur linux-2.6.33/drivers/staging/sm7xx/TODO linux-lemote/drivers/staging/sm7xx/TODO ---- linux-2.6.33/drivers/staging/sm7xx/TODO 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/staging/sm7xx/TODO 2010-03-06 16:43:30.000000000 +0100 -@@ -1,5 +1,6 @@ - TODO: - - Dual head support -+- 2D acceleration support - - use kernel coding style - - checkpatch.pl clean - - refine the code and remove unused code -diff -Nur linux-2.6.33/drivers/usb/host/ohci-hcd.c linux-lemote/drivers/usb/host/ohci-hcd.c ---- linux-2.6.33/drivers/usb/host/ohci-hcd.c 2010-02-24 19:52:17.000000000 +0100 -+++ linux-lemote/drivers/usb/host/ohci-hcd.c 2010-03-06 16:43:31.000000000 +0100 +diff -Nur linux-2.6.34.orig/drivers/usb/host/ohci-hcd.c linux-loongson/drivers/usb/host/ohci-hcd.c +--- linux-2.6.34.orig/drivers/usb/host/ohci-hcd.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/drivers/usb/host/ohci-hcd.c 2010-05-27 18:15:39.022214534 +0200 @@ -832,9 +832,13 @@ } @@ -40945,3 +43194,29 @@ diff -Nur linux-2.6.33/drivers/usb/host/ohci-hcd.c linux-lemote/drivers/usb/host } if (quirk_zfmicro(ohci) && (ints & OHCI_INTR_SF)) { +diff -Nur linux-2.6.34.orig/drivers/video/tdfxfb.c linux-loongson/drivers/video/tdfxfb.c +--- linux-2.6.34.orig/drivers/video/tdfxfb.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/drivers/video/tdfxfb.c 2010-05-27 18:12:44.063464481 +0200 +@@ -1571,8 +1571,8 @@ + if (default_par->mtrr_handle >= 0) + mtrr_del(default_par->mtrr_handle, info->fix.smem_start, + info->fix.smem_len); +- release_mem_region(pci_resource_start(pdev, 2), +- pci_resource_len(pdev, 2)); ++ release_region(pci_resource_start(pdev, 2), ++ pci_resource_len(pdev, 2)); + out_err_screenbase: + if (info->screen_base) + iounmap(info->screen_base); +diff -Nur linux-2.6.34.orig/net/rfkill/core.c linux-loongson/net/rfkill/core.c +--- linux-2.6.34.orig/net/rfkill/core.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-loongson/net/rfkill/core.c 2010-05-27 18:15:42.770974885 +0200 +@@ -112,7 +112,7 @@ + static DEFINE_MUTEX(rfkill_global_mutex); + static LIST_HEAD(rfkill_fds); /* list of open fds of /dev/rfkill */ + +-static unsigned int rfkill_default_state = 1; ++static unsigned int rfkill_default_state; /* default: 0 = radio off */ + module_param_named(default_state, rfkill_default_state, uint, 0444); + MODULE_PARM_DESC(default_state, + "Default initial state for all radio types, 0 = radio off"); diff --git a/target/lemote/target.mk b/target/lemote/target.mk index 7293e785e..bc8ee1e27 100644 --- a/target/lemote/target.mk +++ b/target/lemote/target.mk @@ -1,7 +1,7 @@ ARCH:= mips CPU_ARCH:= mips64el -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=loongson2f -mabi=64 diff --git a/target/linux/patches/2.6.34/aufs2.patch b/target/linux/patches/2.6.34/aufs2.patch index 6c40cfb81..58cbc645f 100644 --- a/target/linux/patches/2.6.34/aufs2.patch +++ b/target/linux/patches/2.6.34/aufs2.patch @@ -1,6 +1,6 @@ -diff -Nur linux-2.6.31.5.orig/Documentation/ABI/testing/debugfs-aufs linux-2.6.31.5/Documentation/ABI/testing/debugfs-aufs ---- linux-2.6.31.5.orig/Documentation/ABI/testing/debugfs-aufs 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/Documentation/ABI/testing/debugfs-aufs 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/Documentation/ABI/testing/debugfs-aufs linux-2.6.34/Documentation/ABI/testing/debugfs-aufs +--- linux-2.6.34.orig/Documentation/ABI/testing/debugfs-aufs 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/Documentation/ABI/testing/debugfs-aufs 2010-05-23 23:33:19.223473085 +0200 @@ -0,0 +1,40 @@ +What: /debug/aufs/si_/ +Date: March 2009 @@ -42,9 +42,9 @@ diff -Nur linux-2.6.31.5.orig/Documentation/ABI/testing/debugfs-aufs linux-2.6.3 + When the aufs mount option 'noxino' is specified, it + will be empty. About XINO files, see + Documentation/filesystems/aufs/aufs.5 in detail. -diff -Nur linux-2.6.31.5.orig/Documentation/ABI/testing/sysfs-aufs linux-2.6.31.5/Documentation/ABI/testing/sysfs-aufs ---- linux-2.6.31.5.orig/Documentation/ABI/testing/sysfs-aufs 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/Documentation/ABI/testing/sysfs-aufs 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/Documentation/ABI/testing/sysfs-aufs linux-2.6.34/Documentation/ABI/testing/sysfs-aufs +--- linux-2.6.34.orig/Documentation/ABI/testing/sysfs-aufs 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/Documentation/ABI/testing/sysfs-aufs 2010-05-23 23:33:19.243464626 +0200 @@ -0,0 +1,25 @@ +What: /sys/fs/aufs/si_/ +Date: March 2009 @@ -71,9 +71,9 @@ diff -Nur linux-2.6.31.5.orig/Documentation/ABI/testing/sysfs-aufs linux-2.6.31. + When the aufs mount option 'noxino' is specified, it + will be empty. About XINO files, see + Documentation/filesystems/aufs/aufs.5 in detail. -diff -Nur linux-2.6.31.5.orig/fs/aufs/aufs.h linux-2.6.31.5/fs/aufs/aufs.h ---- linux-2.6.31.5.orig/fs/aufs/aufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/aufs.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/aufs.h linux-2.6.34/fs/aufs/aufs.h +--- linux-2.6.34.orig/fs/aufs/aufs.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/aufs.h 2010-05-23 23:33:19.313473179 +0200 @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -126,9 +126,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/aufs.h linux-2.6.31.5/fs/aufs/aufs.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/branch.c linux-2.6.31.5/fs/aufs/branch.c ---- linux-2.6.31.5.orig/fs/aufs/branch.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/branch.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/branch.c linux-2.6.34/fs/aufs/branch.c +--- linux-2.6.34.orig/fs/aufs/branch.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/branch.c 2010-05-23 23:33:19.351420621 +0200 @@ -0,0 +1,974 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -1104,9 +1104,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/branch.c linux-2.6.31.5/fs/aufs/branch.c + out: + return err; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/branch.h linux-2.6.31.5/fs/aufs/branch.h ---- linux-2.6.31.5.orig/fs/aufs/branch.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/branch.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/branch.h linux-2.6.34/fs/aufs/branch.h +--- linux-2.6.34.orig/fs/aufs/branch.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/branch.h 2010-05-23 23:33:19.393473115 +0200 @@ -0,0 +1,219 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -1327,9 +1327,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/branch.h linux-2.6.31.5/fs/aufs/branch.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_BRANCH_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/cpup.c linux-2.6.31.5/fs/aufs/cpup.c ---- linux-2.6.31.5.orig/fs/aufs/cpup.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/cpup.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/cpup.c linux-2.6.34/fs/aufs/cpup.c +--- linux-2.6.34.orig/fs/aufs/cpup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/cpup.c 2010-05-23 23:33:19.453728246 +0200 @@ -0,0 +1,1048 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -2379,9 +2379,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/cpup.c linux-2.6.31.5/fs/aufs/cpup.c + dput(parent); + return err; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/cpup.h linux-2.6.31.5/fs/aufs/cpup.h ---- linux-2.6.31.5.orig/fs/aufs/cpup.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/cpup.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/cpup.h linux-2.6.34/fs/aufs/cpup.h +--- linux-2.6.34.orig/fs/aufs/cpup.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/cpup.h 2010-05-23 23:33:19.493473084 +0200 @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -2464,9 +2464,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/cpup.h linux-2.6.31.5/fs/aufs/cpup.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_CPUP_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/dbgaufs.c linux-2.6.31.5/fs/aufs/dbgaufs.c ---- linux-2.6.31.5.orig/fs/aufs/dbgaufs.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/dbgaufs.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/dbgaufs.c linux-2.6.34/fs/aufs/dbgaufs.c +--- linux-2.6.34.orig/fs/aufs/dbgaufs.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/dbgaufs.c 2010-05-23 23:33:19.532223041 +0200 @@ -0,0 +1,331 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -2799,9 +2799,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/dbgaufs.c linux-2.6.31.5/fs/aufs/dbgaufs.c + err = 0; + return err; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/dbgaufs.h linux-2.6.31.5/fs/aufs/dbgaufs.h ---- linux-2.6.31.5.orig/fs/aufs/dbgaufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/dbgaufs.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/dbgaufs.h linux-2.6.34/fs/aufs/dbgaufs.h +--- linux-2.6.34.orig/fs/aufs/dbgaufs.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/dbgaufs.h 2010-05-23 23:33:19.573473097 +0200 @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -2882,9 +2882,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/dbgaufs.h linux-2.6.31.5/fs/aufs/dbgaufs.h + +#endif /* __KERNEL__ */ +#endif /* __DBGAUFS_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/dcsub.c linux-2.6.31.5/fs/aufs/dcsub.c ---- linux-2.6.31.5.orig/fs/aufs/dcsub.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/dcsub.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/dcsub.c linux-2.6.34/fs/aufs/dcsub.c +--- linux-2.6.34.orig/fs/aufs/dcsub.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/dcsub.c 2010-05-23 23:33:19.603473096 +0200 @@ -0,0 +1,223 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -3109,9 +3109,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/dcsub.c linux-2.6.31.5/fs/aufs/dcsub.c + out: + return trap; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/dcsub.h linux-2.6.31.5/fs/aufs/dcsub.h ---- linux-2.6.31.5.orig/fs/aufs/dcsub.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/dcsub.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/dcsub.h linux-2.6.34/fs/aufs/dcsub.h +--- linux-2.6.34.orig/fs/aufs/dcsub.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/dcsub.h 2010-05-23 23:33:19.643473001 +0200 @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -3167,9 +3167,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/dcsub.h linux-2.6.31.5/fs/aufs/dcsub.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DCSUB_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/debug.c linux-2.6.31.5/fs/aufs/debug.c ---- linux-2.6.31.5.orig/fs/aufs/debug.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/debug.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/debug.c linux-2.6.34/fs/aufs/debug.c +--- linux-2.6.34.orig/fs/aufs/debug.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/debug.c 2010-05-23 23:33:19.680978144 +0200 @@ -0,0 +1,427 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -3598,9 +3598,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/debug.c linux-2.6.31.5/fs/aufs/debug.c + + return 0; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/debug.h linux-2.6.31.5/fs/aufs/debug.h ---- linux-2.6.31.5.orig/fs/aufs/debug.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/debug.h 2009-11-15 22:16:14.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/debug.h linux-2.6.34/fs/aufs/debug.h +--- linux-2.6.34.orig/fs/aufs/debug.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/debug.h 2010-05-23 23:33:19.723473058 +0200 @@ -0,0 +1,261 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -3863,9 +3863,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/debug.h linux-2.6.31.5/fs/aufs/debug.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DEBUG_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/dentry.c linux-2.6.31.5/fs/aufs/dentry.c ---- linux-2.6.31.5.orig/fs/aufs/dentry.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/dentry.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/dentry.c linux-2.6.34/fs/aufs/dentry.c +--- linux-2.6.34.orig/fs/aufs/dentry.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/dentry.c 2010-05-23 23:33:19.785918972 +0200 @@ -0,0 +1,880 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -4747,9 +4747,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/dentry.c linux-2.6.31.5/fs/aufs/dentry.c + .d_revalidate = aufs_d_revalidate, + .d_release = aufs_d_release +}; -diff -Nur linux-2.6.31.5.orig/fs/aufs/dentry.h linux-2.6.31.5/fs/aufs/dentry.h ---- linux-2.6.31.5.orig/fs/aufs/dentry.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/dentry.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/dentry.h linux-2.6.34/fs/aufs/dentry.h +--- linux-2.6.34.orig/fs/aufs/dentry.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/dentry.h 2010-05-23 23:33:19.820978219 +0200 @@ -0,0 +1,231 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -4982,9 +4982,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/dentry.h linux-2.6.31.5/fs/aufs/dentry.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DENTRY_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/dinfo.c linux-2.6.31.5/fs/aufs/dinfo.c ---- linux-2.6.31.5.orig/fs/aufs/dinfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/dinfo.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/dinfo.c linux-2.6.34/fs/aufs/dinfo.c +--- linux-2.6.34.orig/fs/aufs/dinfo.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/dinfo.c 2010-05-23 23:33:19.863473142 +0200 @@ -0,0 +1,367 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -5353,9 +5353,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/dinfo.c linux-2.6.31.5/fs/aufs/dinfo.c + return bindex; + return -1; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/dir.c linux-2.6.31.5/fs/aufs/dir.c ---- linux-2.6.31.5.orig/fs/aufs/dir.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/dir.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/dir.c linux-2.6.34/fs/aufs/dir.c +--- linux-2.6.34.orig/fs/aufs/dir.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/dir.c 2010-05-23 23:33:19.893473066 +0200 @@ -0,0 +1,538 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -5895,9 +5895,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/dir.c linux-2.6.31.5/fs/aufs/dir.c + .flush = aufs_flush, + .fsync = aufs_fsync_dir +}; -diff -Nur linux-2.6.31.5.orig/fs/aufs/dir.h linux-2.6.31.5/fs/aufs/dir.h ---- linux-2.6.31.5.orig/fs/aufs/dir.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/dir.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/dir.h linux-2.6.34/fs/aufs/dir.h +--- linux-2.6.34.orig/fs/aufs/dir.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/dir.h 2010-05-23 23:33:19.933473101 +0200 @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -6013,10 +6013,10 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/dir.h linux-2.6.31.5/fs/aufs/dir.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_DIR_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/export.c linux-2.6.31.5/fs/aufs/export.c ---- linux-2.6.31.5.orig/fs/aufs/export.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/export.c 2009-11-15 22:27:33.000000000 +0100 -@@ -0,0 +1,746 @@ +diff -Nur linux-2.6.34.orig/fs/aufs/export.c linux-2.6.34/fs/aufs/export.c +--- linux-2.6.34.orig/fs/aufs/export.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/export.c 2010-05-23 23:59:08.473464298 +0200 +@@ -0,0 +1,747 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima + * @@ -6045,6 +6045,7 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/export.c linux-2.6.31.5/fs/aufs/export.c +#include +#include +#include ++#include "../internal.h" +#include "aufs.h" + +union conv { @@ -6763,9 +6764,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/export.c linux-2.6.31.5/fs/aufs/export.c + BUILD_BUG_ON(sizeof(u) != sizeof(int)); + atomic_set(&sbinfo->si_xigen_next, u); +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/file.c linux-2.6.31.5/fs/aufs/file.c ---- linux-2.6.31.5.orig/fs/aufs/file.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/file.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/file.c linux-2.6.34/fs/aufs/file.c +--- linux-2.6.34.orig/fs/aufs/file.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/file.c 2010-05-23 23:33:20.032223033 +0200 @@ -0,0 +1,578 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -7345,9 +7346,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/file.c linux-2.6.31.5/fs/aufs/file.c + .direct_IO = aufs_direct_IO, +#endif /* CONFIG_AUFS_DEBUG */ +}; -diff -Nur linux-2.6.31.5.orig/fs/aufs/file.h linux-2.6.31.5/fs/aufs/file.h ---- linux-2.6.31.5.orig/fs/aufs/file.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/file.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/file.h linux-2.6.34/fs/aufs/file.h +--- linux-2.6.34.orig/fs/aufs/file.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/file.h 2010-05-23 23:33:20.070971333 +0200 @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -7524,9 +7525,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/file.h linux-2.6.31.5/fs/aufs/file.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_FILE_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/finfo.c linux-2.6.31.5/fs/aufs/finfo.c ---- linux-2.6.31.5.orig/fs/aufs/finfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/finfo.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/finfo.c linux-2.6.34/fs/aufs/finfo.c +--- linux-2.6.34.orig/fs/aufs/finfo.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/finfo.c 2010-05-23 23:33:20.161805224 +0200 @@ -0,0 +1,133 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -7661,9 +7662,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/finfo.c linux-2.6.31.5/fs/aufs/finfo.c + + return err; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/f_op.c linux-2.6.31.5/fs/aufs/f_op.c ---- linux-2.6.31.5.orig/fs/aufs/f_op.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/f_op.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/f_op.c linux-2.6.34/fs/aufs/f_op.c +--- linux-2.6.34.orig/fs/aufs/f_op.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/f_op.c 2010-05-23 23:33:20.203473018 +0200 @@ -0,0 +1,802 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -8467,9 +8468,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/f_op.c linux-2.6.31.5/fs/aufs/f_op.c + .aio_splice_read = aufs_aio_splice_read +#endif +}; -diff -Nur linux-2.6.31.5.orig/fs/aufs/fstype.h linux-2.6.31.5/fs/aufs/fstype.h ---- linux-2.6.31.5.orig/fs/aufs/fstype.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/fstype.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/fstype.h linux-2.6.34/fs/aufs/fstype.h +--- linux-2.6.34.orig/fs/aufs/fstype.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/fstype.h 2010-05-23 23:33:20.243464010 +0200 @@ -0,0 +1,474 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -8945,9 +8946,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/fstype.h linux-2.6.31.5/fs/aufs/fstype.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_FSTYPE_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/hinotify.c linux-2.6.31.5/fs/aufs/hinotify.c ---- linux-2.6.31.5.orig/fs/aufs/hinotify.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/hinotify.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/hinotify.c linux-2.6.34/fs/aufs/hinotify.c +--- linux-2.6.34.orig/fs/aufs/hinotify.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/hinotify.c 2010-05-23 23:33:20.283473120 +0200 @@ -0,0 +1,755 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -9704,9 +9705,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/hinotify.c linux-2.6.31.5/fs/aufs/hinotify + if (au_cachep[AuCache_HINOTIFY]) + au_hin_destroy_cache(); +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/iinfo.c linux-2.6.31.5/fs/aufs/iinfo.c ---- linux-2.6.31.5.orig/fs/aufs/iinfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/iinfo.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/iinfo.c linux-2.6.34/fs/aufs/iinfo.c +--- linux-2.6.34.orig/fs/aufs/iinfo.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/iinfo.c 2010-05-23 23:33:20.323473189 +0200 @@ -0,0 +1,283 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -9991,9 +9992,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/iinfo.c linux-2.6.31.5/fs/aufs/iinfo.c + kfree(iinfo->ii_hinode); + AuRwDestroy(&iinfo->ii_rwsem); +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/inode.c linux-2.6.31.5/fs/aufs/inode.c ---- linux-2.6.31.5.orig/fs/aufs/inode.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/inode.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/inode.c linux-2.6.34/fs/aufs/inode.c +--- linux-2.6.34.orig/fs/aufs/inode.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/inode.c 2010-05-23 23:33:20.363473043 +0200 @@ -0,0 +1,380 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -10375,9 +10376,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/inode.c linux-2.6.31.5/fs/aufs/inode.c + mask |= MAY_READ; /* force permission check */ + return au_test_h_perm(h_inode, mask); +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/inode.h linux-2.6.31.5/fs/aufs/inode.h ---- linux-2.6.31.5.orig/fs/aufs/inode.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/inode.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/inode.h linux-2.6.34/fs/aufs/inode.h +--- linux-2.6.34.orig/fs/aufs/inode.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/inode.h 2010-05-23 23:33:20.403473045 +0200 @@ -0,0 +1,484 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -10863,9 +10864,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/inode.h linux-2.6.31.5/fs/aufs/inode.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_INODE_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/ioctl.c linux-2.6.31.5/fs/aufs/ioctl.c ---- linux-2.6.31.5.orig/fs/aufs/ioctl.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/ioctl.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/ioctl.c linux-2.6.34/fs/aufs/ioctl.c +--- linux-2.6.34.orig/fs/aufs/ioctl.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/ioctl.c 2010-05-23 23:33:20.443473159 +0200 @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -10934,9 +10935,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/ioctl.c linux-2.6.31.5/fs/aufs/ioctl.c + out: + return err; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/i_op_add.c linux-2.6.31.5/fs/aufs/i_op_add.c ---- linux-2.6.31.5.orig/fs/aufs/i_op_add.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/i_op_add.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/i_op_add.c linux-2.6.34/fs/aufs/i_op_add.c +--- linux-2.6.34.orig/fs/aufs/i_op_add.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/i_op_add.c 2010-05-23 23:33:20.480978545 +0200 @@ -0,0 +1,649 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -11587,9 +11588,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/i_op_add.c linux-2.6.31.5/fs/aufs/i_op_add + out: + return err; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/i_op.c linux-2.6.31.5/fs/aufs/i_op.c ---- linux-2.6.31.5.orig/fs/aufs/i_op.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/i_op.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/i_op.c linux-2.6.34/fs/aufs/i_op.c +--- linux-2.6.34.orig/fs/aufs/i_op.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/i_op.c 2010-05-23 23:33:20.523473039 +0200 @@ -0,0 +1,872 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -12463,9 +12464,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/i_op.c linux-2.6.31.5/fs/aufs/i_op.c + .getattr = aufs_getattr, + .truncate_range = aufs_truncate_range +}; -diff -Nur linux-2.6.31.5.orig/fs/aufs/i_op_del.c linux-2.6.31.5/fs/aufs/i_op_del.c ---- linux-2.6.31.5.orig/fs/aufs/i_op_del.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/i_op_del.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/i_op_del.c linux-2.6.34/fs/aufs/i_op_del.c +--- linux-2.6.34.orig/fs/aufs/i_op_del.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/i_op_del.c 2010-05-23 23:33:20.563473113 +0200 @@ -0,0 +1,468 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -12935,9 +12936,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/i_op_del.c linux-2.6.31.5/fs/aufs/i_op_del + out: + return err; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/i_op_ren.c linux-2.6.31.5/fs/aufs/i_op_ren.c ---- linux-2.6.31.5.orig/fs/aufs/i_op_ren.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/i_op_ren.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/i_op_ren.c linux-2.6.34/fs/aufs/i_op_ren.c +--- linux-2.6.34.orig/fs/aufs/i_op_ren.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/i_op_ren.c 2010-05-23 23:33:20.600964691 +0200 @@ -0,0 +1,948 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -13887,9 +13888,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/i_op_ren.c linux-2.6.31.5/fs/aufs/i_op_ren + out: + return err; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/Kconfig linux-2.6.31.5/fs/aufs/Kconfig ---- linux-2.6.31.5.orig/fs/aufs/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/Kconfig 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/Kconfig linux-2.6.34/fs/aufs/Kconfig +--- linux-2.6.34.orig/fs/aufs/Kconfig 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/Kconfig 2010-05-23 23:33:20.653473087 +0200 @@ -0,0 +1,132 @@ +config AUFS_FS + tristate "Aufs (Advanced multi layered unification filesystem) support" @@ -14023,9 +14024,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/Kconfig linux-2.6.31.5/fs/aufs/Kconfig + help + Automatic configuration for internal use. +endif -diff -Nur linux-2.6.31.5.orig/fs/aufs/loop.c linux-2.6.31.5/fs/aufs/loop.c ---- linux-2.6.31.5.orig/fs/aufs/loop.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/loop.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/loop.c linux-2.6.34/fs/aufs/loop.c +--- linux-2.6.34.orig/fs/aufs/loop.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/loop.c 2010-05-23 23:33:20.693473078 +0200 @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -14082,9 +14083,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/loop.c linux-2.6.31.5/fs/aufs/loop.c + && '0' <= c && c <= '9' + && strncmp(current->comm, "loop", 4) == 0; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/loop.h linux-2.6.31.5/fs/aufs/loop.h ---- linux-2.6.31.5.orig/fs/aufs/loop.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/loop.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/loop.h linux-2.6.34/fs/aufs/loop.h +--- linux-2.6.34.orig/fs/aufs/loop.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/loop.h 2010-05-23 23:33:20.732223142 +0200 @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -14137,9 +14138,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/loop.h linux-2.6.31.5/fs/aufs/loop.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_LOOP_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/magic.mk linux-2.6.31.5/fs/aufs/magic.mk ---- linux-2.6.31.5.orig/fs/aufs/magic.mk 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/magic.mk 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/magic.mk linux-2.6.34/fs/aufs/magic.mk +--- linux-2.6.34.orig/fs/aufs/magic.mk 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/magic.mk 2010-05-23 23:33:20.773473177 +0200 @@ -0,0 +1,52 @@ + +# defined in ${srctree}/fs/fuse/inode.c @@ -14193,9 +14194,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/magic.mk linux-2.6.31.5/fs/aufs/magic.mk +ifdef CONFIG_UBIFS_FS +ccflags-y += -DUBIFS_SUPER_MAGIC=0x24051905 +endif -diff -Nur linux-2.6.31.5.orig/fs/aufs/Makefile linux-2.6.31.5/fs/aufs/Makefile ---- linux-2.6.31.5.orig/fs/aufs/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/Makefile 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/Makefile linux-2.6.34/fs/aufs/Makefile +--- linux-2.6.34.orig/fs/aufs/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/Makefile 2010-05-23 23:33:20.810978181 +0200 @@ -0,0 +1,23 @@ + +include ${src}/magic.mk @@ -14220,9 +14221,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/Makefile linux-2.6.31.5/fs/aufs/Makefile +aufs-$(CONFIG_AUFS_POLL) += poll.o +aufs-$(CONFIG_AUFS_DEBUG) += debug.o +aufs-$(CONFIG_AUFS_MAGIC_SYSRQ) += sysrq.o -diff -Nur linux-2.6.31.5.orig/fs/aufs/module.c linux-2.6.31.5/fs/aufs/module.c ---- linux-2.6.31.5.orig/fs/aufs/module.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/module.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/module.c linux-2.6.34/fs/aufs/module.c +--- linux-2.6.34.orig/fs/aufs/module.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/module.c 2010-05-23 23:33:20.865206461 +0200 @@ -0,0 +1,173 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -14397,9 +14398,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/module.c linux-2.6.31.5/fs/aufs/module.c + +module_init(aufs_init); +module_exit(aufs_exit); -diff -Nur linux-2.6.31.5.orig/fs/aufs/module.h linux-2.6.31.5/fs/aufs/module.h ---- linux-2.6.31.5.orig/fs/aufs/module.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/module.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/module.h linux-2.6.34/fs/aufs/module.h +--- linux-2.6.34.orig/fs/aufs/module.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/module.h 2010-05-23 23:33:20.903473083 +0200 @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -14479,9 +14480,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/module.h linux-2.6.31.5/fs/aufs/module.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_MODULE_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/opts.c linux-2.6.31.5/fs/aufs/opts.c ---- linux-2.6.31.5.orig/fs/aufs/opts.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/opts.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/opts.c linux-2.6.34/fs/aufs/opts.c +--- linux-2.6.34.orig/fs/aufs/opts.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/opts.c 2010-05-23 23:33:20.941070510 +0200 @@ -0,0 +1,1543 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -16026,9 +16027,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/opts.c linux-2.6.31.5/fs/aufs/opts.c +{ + return au_mntflags(sb) & AuOptMask_UDBA; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/opts.h linux-2.6.31.5/fs/aufs/opts.h ---- linux-2.6.31.5.orig/fs/aufs/opts.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/opts.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/opts.h linux-2.6.34/fs/aufs/opts.h +--- linux-2.6.34.orig/fs/aufs/opts.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/opts.h 2010-05-23 23:33:20.990967055 +0200 @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -16226,9 +16227,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/opts.h linux-2.6.31.5/fs/aufs/opts.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_OPTS_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/plink.c linux-2.6.31.5/fs/aufs/plink.c ---- linux-2.6.31.5.orig/fs/aufs/plink.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/plink.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/plink.c linux-2.6.34/fs/aufs/plink.c +--- linux-2.6.34.orig/fs/aufs/plink.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/plink.c 2010-05-23 23:33:21.033473143 +0200 @@ -0,0 +1,354 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -16584,9 +16585,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/plink.c linux-2.6.31.5/fs/aufs/plink.c + iput(inode); + } +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/poll.c linux-2.6.31.5/fs/aufs/poll.c ---- linux-2.6.31.5.orig/fs/aufs/poll.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/poll.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/poll.c linux-2.6.34/fs/aufs/poll.c +--- linux-2.6.34.orig/fs/aufs/poll.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/poll.c 2010-05-23 23:33:21.073473127 +0200 @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -16644,9 +16645,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/poll.c linux-2.6.31.5/fs/aufs/poll.c + AuTraceErr((int)mask); + return mask; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/rwsem.h linux-2.6.31.5/fs/aufs/rwsem.h ---- linux-2.6.31.5.orig/fs/aufs/rwsem.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/rwsem.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/rwsem.h linux-2.6.34/fs/aufs/rwsem.h +--- linux-2.6.34.orig/fs/aufs/rwsem.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/rwsem.h 2010-05-23 23:33:21.141617129 +0200 @@ -0,0 +1,186 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -16834,9 +16835,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/rwsem.h linux-2.6.31.5/fs/aufs/rwsem.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_RWSEM_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/sbinfo.c linux-2.6.31.5/fs/aufs/sbinfo.c ---- linux-2.6.31.5.orig/fs/aufs/sbinfo.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/sbinfo.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/sbinfo.c linux-2.6.34/fs/aufs/sbinfo.c +--- linux-2.6.34.orig/fs/aufs/sbinfo.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/sbinfo.c 2010-05-23 23:33:21.183473099 +0200 @@ -0,0 +1,208 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -17046,9 +17047,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/sbinfo.c linux-2.6.31.5/fs/aufs/sbinfo.c + di_write_unlock2(d1, d2); + si_read_unlock(d1->d_sb); +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/spl.h linux-2.6.31.5/fs/aufs/spl.h ---- linux-2.6.31.5.orig/fs/aufs/spl.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/spl.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/spl.h linux-2.6.34/fs/aufs/spl.h +--- linux-2.6.34.orig/fs/aufs/spl.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/spl.h 2010-05-23 23:33:21.256309595 +0200 @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -17107,9 +17108,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/spl.h linux-2.6.31.5/fs/aufs/spl.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_SPL_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/super.c linux-2.6.31.5/fs/aufs/super.c ---- linux-2.6.31.5.orig/fs/aufs/super.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/super.c 2009-11-15 22:20:26.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/super.c linux-2.6.34/fs/aufs/super.c +--- linux-2.6.34.orig/fs/aufs/super.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/super.c 2010-05-23 23:33:21.290963488 +0200 @@ -0,0 +1,874 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -17985,9 +17986,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/super.c linux-2.6.31.5/fs/aufs/super.c + /* no need to __module_get() and module_put(). */ + .owner = THIS_MODULE, +}; -diff -Nur linux-2.6.31.5.orig/fs/aufs/super.h linux-2.6.31.5/fs/aufs/super.h ---- linux-2.6.31.5.orig/fs/aufs/super.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/super.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/super.h linux-2.6.34/fs/aufs/super.h +--- linux-2.6.34.orig/fs/aufs/super.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/super.h 2010-05-23 23:33:21.333473217 +0200 @@ -0,0 +1,384 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -18373,9 +18374,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/super.h linux-2.6.31.5/fs/aufs/super.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_SUPER_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/sysaufs.c linux-2.6.31.5/fs/aufs/sysaufs.c ---- linux-2.6.31.5.orig/fs/aufs/sysaufs.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/sysaufs.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/sysaufs.c linux-2.6.34/fs/aufs/sysaufs.c +--- linux-2.6.34.orig/fs/aufs/sysaufs.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/sysaufs.c 2010-05-23 23:33:21.373473051 +0200 @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -18481,9 +18482,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/sysaufs.c linux-2.6.31.5/fs/aufs/sysaufs.c + out: + return err; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/sysaufs.h linux-2.6.31.5/fs/aufs/sysaufs.h ---- linux-2.6.31.5.orig/fs/aufs/sysaufs.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/sysaufs.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/sysaufs.h linux-2.6.34/fs/aufs/sysaufs.h +--- linux-2.6.34.orig/fs/aufs/sysaufs.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/sysaufs.h 2010-05-23 23:33:21.410978037 +0200 @@ -0,0 +1,120 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -18605,9 +18606,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/sysaufs.h linux-2.6.31.5/fs/aufs/sysaufs.h + +#endif /* __KERNEL__ */ +#endif /* __SYSAUFS_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/sysfs.c linux-2.6.31.5/fs/aufs/sysfs.c ---- linux-2.6.31.5.orig/fs/aufs/sysfs.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/sysfs.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/sysfs.c linux-2.6.34/fs/aufs/sysfs.c +--- linux-2.6.34.orig/fs/aufs/sysfs.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/sysfs.c 2010-05-23 23:33:21.472224620 +0200 @@ -0,0 +1,210 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -18819,9 +18820,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/sysfs.c linux-2.6.31.5/fs/aufs/sysfs.c + AuWarn("failed %s under sysfs(%d)\n", br->br_name, err); + } +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/sysrq.c linux-2.6.31.5/fs/aufs/sysrq.c ---- linux-2.6.31.5.orig/fs/aufs/sysrq.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/sysrq.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/sysrq.c linux-2.6.34/fs/aufs/sysrq.c +--- linux-2.6.34.orig/fs/aufs/sysrq.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/sysrq.c 2010-05-23 23:33:21.520978408 +0200 @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -18938,9 +18939,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/sysrq.c linux-2.6.31.5/fs/aufs/sysrq.c + if (unlikely(err)) + AuErr("err %d (ignored)\n", err); +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/vdir.c linux-2.6.31.5/fs/aufs/vdir.c ---- linux-2.6.31.5.orig/fs/aufs/vdir.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/vdir.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/vdir.c linux-2.6.34/fs/aufs/vdir.c +--- linux-2.6.34.orig/fs/aufs/vdir.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/vdir.c 2010-05-23 23:33:21.571845413 +0200 @@ -0,0 +1,882 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -19824,9 +19825,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/vdir.c linux-2.6.31.5/fs/aufs/vdir.c + /* smp_mb(); */ + return 0; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/vfsub.c linux-2.6.31.5/fs/aufs/vfsub.c ---- linux-2.6.31.5.orig/fs/aufs/vfsub.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/vfsub.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/vfsub.c linux-2.6.34/fs/aufs/vfsub.c +--- linux-2.6.34.orig/fs/aufs/vfsub.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/vfsub.c 2010-05-23 23:33:21.621650481 +0200 @@ -0,0 +1,740 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -20568,9 +20569,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/vfsub.c linux-2.6.31.5/fs/aufs/vfsub.c + + return err; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/vfsub.h linux-2.6.31.5/fs/aufs/vfsub.h ---- linux-2.6.31.5.orig/fs/aufs/vfsub.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/vfsub.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/vfsub.h linux-2.6.34/fs/aufs/vfsub.h +--- linux-2.6.34.orig/fs/aufs/vfsub.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/vfsub.h 2010-05-23 23:33:21.663473060 +0200 @@ -0,0 +1,172 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -20744,9 +20745,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/vfsub.h linux-2.6.31.5/fs/aufs/vfsub.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_VFSUB_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/wbr_policy.c linux-2.6.31.5/fs/aufs/wbr_policy.c ---- linux-2.6.31.5.orig/fs/aufs/wbr_policy.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/wbr_policy.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/wbr_policy.c linux-2.6.34/fs/aufs/wbr_policy.c +--- linux-2.6.34.orig/fs/aufs/wbr_policy.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/wbr_policy.c 2010-05-23 23:33:21.703473113 +0200 @@ -0,0 +1,641 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -21389,9 +21390,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/wbr_policy.c linux-2.6.31.5/fs/aufs/wbr_po + .fin = au_wbr_create_fin_mfs + } +}; -diff -Nur linux-2.6.31.5.orig/fs/aufs/whout.c linux-2.6.31.5/fs/aufs/whout.c ---- linux-2.6.31.5.orig/fs/aufs/whout.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/whout.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/whout.c linux-2.6.34/fs/aufs/whout.c +--- linux-2.6.34.orig/fs/aufs/whout.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/whout.c 2010-05-23 23:33:21.740969899 +0200 @@ -0,0 +1,1048 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -22441,9 +22442,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/whout.c linux-2.6.31.5/fs/aufs/whout.c + au_whtmp_rmdir_free(args); + } +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/whout.h linux-2.6.31.5/fs/aufs/whout.h ---- linux-2.6.31.5.orig/fs/aufs/whout.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/whout.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/whout.h linux-2.6.34/fs/aufs/whout.h +--- linux-2.6.34.orig/fs/aufs/whout.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/whout.h 2010-05-23 23:33:21.783473084 +0200 @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -22532,9 +22533,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/whout.h linux-2.6.31.5/fs/aufs/whout.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_WHOUT_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/wkq.c linux-2.6.31.5/fs/aufs/wkq.c ---- linux-2.6.31.5.orig/fs/aufs/wkq.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/wkq.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/wkq.c linux-2.6.34/fs/aufs/wkq.c +--- linux-2.6.34.orig/fs/aufs/wkq.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/wkq.c 2010-05-23 23:33:21.820978231 +0200 @@ -0,0 +1,259 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -22795,9 +22796,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/wkq.c linux-2.6.31.5/fs/aufs/wkq.c + out: + return err; +} -diff -Nur linux-2.6.31.5.orig/fs/aufs/wkq.h linux-2.6.31.5/fs/aufs/wkq.h ---- linux-2.6.31.5.orig/fs/aufs/wkq.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/wkq.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/wkq.h linux-2.6.34/fs/aufs/wkq.h +--- linux-2.6.34.orig/fs/aufs/wkq.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/wkq.h 2010-05-23 23:33:21.863473117 +0200 @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -22881,9 +22882,9 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/wkq.h linux-2.6.31.5/fs/aufs/wkq.h + +#endif /* __KERNEL__ */ +#endif /* __AUFS_WKQ_H__ */ -diff -Nur linux-2.6.31.5.orig/fs/aufs/xino.c linux-2.6.31.5/fs/aufs/xino.c ---- linux-2.6.31.5.orig/fs/aufs/xino.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/fs/aufs/xino.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/aufs/xino.c linux-2.6.34/fs/aufs/xino.c +--- linux-2.6.34.orig/fs/aufs/xino.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/fs/aufs/xino.c 2010-05-23 23:33:21.912293851 +0200 @@ -0,0 +1,1200 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -24085,20 +24086,20 @@ diff -Nur linux-2.6.31.5.orig/fs/aufs/xino.c linux-2.6.31.5/fs/aufs/xino.c + out: + return err; +} -diff -Nur linux-2.6.31.5.orig/fs/Kconfig linux-2.6.31.5/fs/Kconfig ---- linux-2.6.31.5.orig/fs/Kconfig 2009-10-23 00:57:56.000000000 +0200 -+++ linux-2.6.31.5/fs/Kconfig 2009-11-15 22:02:37.000000000 +0100 -@@ -187,6 +187,7 @@ - source "fs/ufs/Kconfig" - source "fs/exofs/Kconfig" +diff -Nur linux-2.6.34.orig/fs/Kconfig linux-2.6.34/fs/Kconfig +--- linux-2.6.34.orig/fs/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/fs/Kconfig 2010-05-23 23:33:21.962123255 +0200 +@@ -44,6 +44,7 @@ + source "fs/ocfs2/Kconfig" + source "fs/btrfs/Kconfig" source "fs/nilfs2/Kconfig" +source "fs/aufs/Kconfig" - endif # MISC_FILESYSTEMS + endif # BLOCK -diff -Nur linux-2.6.31.5.orig/fs/Makefile linux-2.6.31.5/fs/Makefile ---- linux-2.6.31.5.orig/fs/Makefile 2009-10-23 00:57:56.000000000 +0200 -+++ linux-2.6.31.5/fs/Makefile 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/Makefile linux-2.6.34/fs/Makefile +--- linux-2.6.34.orig/fs/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/fs/Makefile 2010-05-23 23:33:22.023473125 +0200 @@ -85,6 +85,7 @@ obj-$(CONFIG_HFS_FS) += hfs/ obj-$(CONFIG_ECRYPT_FS) += ecryptfs/ @@ -24107,10 +24108,10 @@ diff -Nur linux-2.6.31.5.orig/fs/Makefile linux-2.6.31.5/fs/Makefile obj-$(CONFIG_NFS_FS) += nfs/ obj-$(CONFIG_EXPORTFS) += exportfs/ obj-$(CONFIG_NFSD) += nfsd/ -diff -Nur linux-2.6.31.5.orig/fs/namei.c linux-2.6.31.5/fs/namei.c ---- linux-2.6.31.5.orig/fs/namei.c 2009-10-23 00:57:56.000000000 +0200 -+++ linux-2.6.31.5/fs/namei.c 2009-11-15 22:02:37.000000000 +0100 -@@ -337,6 +337,7 @@ +diff -Nur linux-2.6.34.orig/fs/namei.c linux-2.6.34/fs/namei.c +--- linux-2.6.34.orig/fs/namei.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/fs/namei.c 2010-05-23 23:33:22.061750745 +0200 +@@ -348,6 +348,7 @@ return 0; } @@ -24118,7 +24119,7 @@ diff -Nur linux-2.6.31.5.orig/fs/namei.c linux-2.6.31.5/fs/namei.c /** * path_get - get a reference to a path -@@ -1219,7 +1220,7 @@ +@@ -1177,7 +1178,7 @@ * needs parent already locked. Doesn't follow mounts. * SMP-safe. */ @@ -24127,7 +24128,7 @@ diff -Nur linux-2.6.31.5.orig/fs/namei.c linux-2.6.31.5/fs/namei.c { int err; -@@ -1228,8 +1229,9 @@ +@@ -1186,8 +1187,9 @@ return ERR_PTR(err); return __lookup_hash(&nd->last, nd->path.dentry, nd); } @@ -24138,7 +24139,7 @@ diff -Nur linux-2.6.31.5.orig/fs/namei.c linux-2.6.31.5/fs/namei.c struct dentry *base, int len) { unsigned long hash; -@@ -1250,6 +1252,7 @@ +@@ -1208,6 +1210,7 @@ this->hash = end_name_hash(hash); return 0; } @@ -24146,9 +24147,9 @@ diff -Nur linux-2.6.31.5.orig/fs/namei.c linux-2.6.31.5/fs/namei.c /** * lookup_one_len - filesystem helper to lookup single pathname component -diff -Nur linux-2.6.31.5.orig/fs/namespace.c linux-2.6.31.5/fs/namespace.c ---- linux-2.6.31.5.orig/fs/namespace.c 2009-10-23 00:57:56.000000000 +0200 -+++ linux-2.6.31.5/fs/namespace.c 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/fs/namespace.c linux-2.6.34/fs/namespace.c +--- linux-2.6.34.orig/fs/namespace.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/fs/namespace.c 2010-05-23 23:33:22.113473124 +0200 @@ -39,6 +39,7 @@ /* spinlock for vfsmount related operations, inplace of dcache_lock */ @@ -24157,21 +24158,21 @@ diff -Nur linux-2.6.31.5.orig/fs/namespace.c linux-2.6.31.5/fs/namespace.c static int event; static DEFINE_IDA(mnt_id_ida); -diff -Nur linux-2.6.31.5.orig/fs/open.c linux-2.6.31.5/fs/open.c ---- linux-2.6.31.5.orig/fs/open.c 2009-10-23 00:57:56.000000000 +0200 -+++ linux-2.6.31.5/fs/open.c 2009-11-15 22:02:37.000000000 +0100 -@@ -221,6 +221,7 @@ +diff -Nur linux-2.6.34.orig/fs/open.c linux-2.6.34/fs/open.c +--- linux-2.6.34.orig/fs/open.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/fs/open.c 2010-05-23 23:33:22.193472989 +0200 +@@ -225,6 +225,7 @@ mutex_unlock(&dentry->d_inode->i_mutex); - return err; + return ret; } +EXPORT_SYMBOL(do_truncate); static long do_sys_truncate(const char __user *pathname, loff_t length) { -diff -Nur linux-2.6.31.5.orig/fs/splice.c linux-2.6.31.5/fs/splice.c ---- linux-2.6.31.5.orig/fs/splice.c 2009-10-23 00:57:56.000000000 +0200 -+++ linux-2.6.31.5/fs/splice.c 2009-11-15 22:02:37.000000000 +0100 -@@ -1057,8 +1057,8 @@ +diff -Nur linux-2.6.34.orig/fs/splice.c linux-2.6.34/fs/splice.c +--- linux-2.6.34.orig/fs/splice.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/fs/splice.c 2010-05-23 23:33:22.223464538 +0200 +@@ -1054,8 +1054,8 @@ /* * Attempt to initiate a splice from pipe to file. */ @@ -24182,7 +24183,7 @@ diff -Nur linux-2.6.31.5.orig/fs/splice.c linux-2.6.31.5/fs/splice.c { ssize_t (*splice_write)(struct pipe_inode_info *, struct file *, loff_t *, size_t, unsigned int); -@@ -1080,13 +1080,14 @@ +@@ -1078,13 +1078,14 @@ return splice_write(pipe, out, ppos, len, flags); } @@ -24200,7 +24201,7 @@ diff -Nur linux-2.6.31.5.orig/fs/splice.c linux-2.6.31.5/fs/splice.c { ssize_t (*splice_read)(struct file *, loff_t *, struct pipe_inode_info *, size_t, unsigned int); -@@ -1105,6 +1106,7 @@ +@@ -1104,6 +1105,7 @@ return splice_read(in, ppos, pipe, len, flags); } @@ -24208,9 +24209,9 @@ diff -Nur linux-2.6.31.5.orig/fs/splice.c linux-2.6.31.5/fs/splice.c /** * splice_direct_to_actor - splices data directly between two non-pipes -diff -Nur linux-2.6.31.5.orig/include/linux/aufs_type.h linux-2.6.31.5/include/linux/aufs_type.h ---- linux-2.6.31.5.orig/include/linux/aufs_type.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.31.5/include/linux/aufs_type.h 2009-11-15 22:02:37.000000000 +0100 +diff -Nur linux-2.6.34.orig/include/linux/aufs_type.h linux-2.6.34/include/linux/aufs_type.h +--- linux-2.6.34.orig/include/linux/aufs_type.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/include/linux/aufs_type.h 2010-05-23 23:33:22.311715313 +0200 @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2005-2009 Junjiro R. Okajima @@ -24321,9 +24322,9 @@ diff -Nur linux-2.6.31.5.orig/include/linux/aufs_type.h linux-2.6.31.5/include/l +#define AUFS_CTL_PLINK_CLEAN _IO(AuCtlType, AuCtl_PLINK_CLEAN) + +#endif /* __AUFS_TYPE_H__ */ -diff -Nur linux-2.6.31.5.orig/include/linux/Kbuild linux-2.6.31.5/include/linux/Kbuild ---- linux-2.6.31.5.orig/include/linux/Kbuild 2009-10-23 00:57:56.000000000 +0200 -+++ linux-2.6.31.5/include/linux/Kbuild 2009-11-15 22:02:38.000000000 +0100 +diff -Nur linux-2.6.34.orig/include/linux/Kbuild linux-2.6.34/include/linux/Kbuild +--- linux-2.6.34.orig/include/linux/Kbuild 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/include/linux/Kbuild 2010-05-23 23:33:22.351651089 +0200 @@ -34,6 +34,7 @@ header-y += atmsap.h header-y += atmsvc.h @@ -24332,22 +24333,22 @@ diff -Nur linux-2.6.31.5.orig/include/linux/Kbuild linux-2.6.31.5/include/linux/ header-y += auto_fs4.h header-y += ax25.h header-y += b1lli.h -diff -Nur linux-2.6.31.5.orig/include/linux/namei.h linux-2.6.31.5/include/linux/namei.h ---- linux-2.6.31.5.orig/include/linux/namei.h 2009-10-23 00:57:56.000000000 +0200 -+++ linux-2.6.31.5/include/linux/namei.h 2009-11-15 22:02:38.000000000 +0100 -@@ -75,6 +75,9 @@ - extern struct file *nameidata_to_filp(struct nameidata *nd, int flags); - extern void release_open_intent(struct nameidata *); +diff -Nur linux-2.6.34.orig/include/linux/namei.h linux-2.6.34/include/linux/namei.h +--- linux-2.6.34.orig/include/linux/namei.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/include/linux/namei.h 2010-05-23 23:33:22.402167374 +0200 +@@ -73,6 +73,9 @@ + extern struct file *lookup_instantiate_filp(struct nameidata *nd, struct dentry *dentry, + int (*open)(struct inode *, struct file *)); +extern struct dentry *lookup_hash(struct nameidata *nd); +extern int __lookup_one_len(const char *name, struct qstr *this, + struct dentry *base, int len); extern struct dentry *lookup_one_len(const char *, struct dentry *, int); - extern struct dentry *lookup_one_noperm(const char *, struct dentry *); -diff -Nur linux-2.6.31.5.orig/include/linux/splice.h linux-2.6.31.5/include/linux/splice.h ---- linux-2.6.31.5.orig/include/linux/splice.h 2009-10-23 00:57:56.000000000 +0200 -+++ linux-2.6.31.5/include/linux/splice.h 2009-11-15 22:02:38.000000000 +0100 + extern int follow_down(struct path *); +diff -Nur linux-2.6.34.orig/include/linux/splice.h linux-2.6.34/include/linux/splice.h +--- linux-2.6.34.orig/include/linux/splice.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/include/linux/splice.h 2010-05-23 23:33:22.443475345 +0200 @@ -82,4 +82,10 @@ extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *, splice_direct_actor *); @@ -24359,10 +24360,10 @@ diff -Nur linux-2.6.31.5.orig/include/linux/splice.h linux-2.6.31.5/include/linu + unsigned int flags); + #endif -diff -Nur linux-2.6.31.5.orig/security/device_cgroup.c linux-2.6.31.5/security/device_cgroup.c ---- linux-2.6.31.5.orig/security/device_cgroup.c 2009-10-23 00:57:56.000000000 +0200 -+++ linux-2.6.31.5/security/device_cgroup.c 2009-11-15 22:02:38.000000000 +0100 -@@ -513,6 +513,7 @@ +diff -Nur linux-2.6.34.orig/security/device_cgroup.c linux-2.6.34/security/device_cgroup.c +--- linux-2.6.34.orig/security/device_cgroup.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/security/device_cgroup.c 2010-05-23 23:33:22.523473073 +0200 +@@ -515,6 +515,7 @@ return -EPERM; } @@ -24370,42 +24371,42 @@ diff -Nur linux-2.6.31.5.orig/security/device_cgroup.c linux-2.6.31.5/security/d int devcgroup_inode_mknod(int mode, dev_t dev) { -diff -Nur linux-2.6.31.5.orig/security/security.c linux-2.6.31.5/security/security.c ---- linux-2.6.31.5.orig/security/security.c 2009-10-23 00:57:56.000000000 +0200 -+++ linux-2.6.31.5/security/security.c 2009-11-15 22:02:38.000000000 +0100 -@@ -386,6 +386,7 @@ - return 0; - return security_ops->path_mkdir(path, dentry, mode); +diff -Nur linux-2.6.34.orig/security/security.c linux-2.6.34/security/security.c +--- linux-2.6.34.orig/security/security.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/security/security.c 2010-05-23 23:33:22.553464163 +0200 +@@ -385,6 +385,7 @@ + ima_inode_free(inode); + security_ops->inode_free_security(inode); } +EXPORT_SYMBOL(security_path_mkdir); - int security_path_rmdir(struct path *path, struct dentry *dentry) - { -@@ -393,6 +394,7 @@ + int security_inode_init_security(struct inode *inode, struct inode *dir, + char **name, void **value, size_t *len) +@@ -411,6 +412,7 @@ return 0; - return security_ops->path_rmdir(path, dentry); + return security_ops->path_mkdir(dir, dentry, mode); } +EXPORT_SYMBOL(security_path_rmdir); - int security_path_unlink(struct path *path, struct dentry *dentry) + int security_path_rmdir(struct path *dir, struct dentry *dentry) { -@@ -400,6 +402,7 @@ +@@ -418,6 +420,7 @@ return 0; - return security_ops->path_unlink(path, dentry); + return security_ops->path_rmdir(dir, dentry); } +EXPORT_SYMBOL(security_path_unlink); - int security_path_symlink(struct path *path, struct dentry *dentry, - const char *old_name) -@@ -408,6 +411,7 @@ + int security_path_unlink(struct path *dir, struct dentry *dentry) + { +@@ -425,6 +428,7 @@ return 0; - return security_ops->path_symlink(path, dentry, old_name); + return security_ops->path_unlink(dir, dentry); } +EXPORT_SYMBOL(security_path_symlink); - int security_path_link(struct dentry *old_dentry, struct path *new_dir, - struct dentry *new_dentry) -@@ -416,6 +420,7 @@ + int security_path_symlink(struct path *dir, struct dentry *dentry, + const char *old_name) +@@ -441,6 +445,7 @@ return 0; return security_ops->path_link(old_dentry, new_dir, new_dentry); } @@ -24413,7 +24414,7 @@ diff -Nur linux-2.6.31.5.orig/security/security.c linux-2.6.31.5/security/securi int security_path_rename(struct path *old_dir, struct dentry *old_dentry, struct path *new_dir, struct dentry *new_dentry) -@@ -426,6 +431,7 @@ +@@ -451,6 +456,7 @@ return security_ops->path_rename(old_dir, old_dentry, new_dir, new_dentry); } @@ -24421,15 +24422,15 @@ diff -Nur linux-2.6.31.5.orig/security/security.c linux-2.6.31.5/security/securi int security_path_truncate(struct path *path, loff_t length, unsigned int time_attrs) -@@ -434,6 +440,7 @@ - return 0; - return security_ops->path_truncate(path, length, time_attrs); +@@ -479,6 +485,7 @@ + { + return security_ops->path_chroot(path); } +EXPORT_SYMBOL(security_path_truncate); #endif int security_inode_create(struct inode *dir, struct dentry *dentry, int mode) -@@ -505,6 +512,7 @@ +@@ -550,6 +557,7 @@ return 0; return security_ops->inode_readlink(dentry); } @@ -24437,7 +24438,7 @@ diff -Nur linux-2.6.31.5.orig/security/security.c linux-2.6.31.5/security/securi int security_inode_follow_link(struct dentry *dentry, struct nameidata *nd) { -@@ -519,6 +527,7 @@ +@@ -564,6 +572,7 @@ return 0; return security_ops->inode_permission(inode, mask); } @@ -24445,7 +24446,7 @@ diff -Nur linux-2.6.31.5.orig/security/security.c linux-2.6.31.5/security/securi int security_inode_setattr(struct dentry *dentry, struct iattr *attr) { -@@ -619,6 +628,7 @@ +@@ -664,6 +673,7 @@ { return security_ops->file_permission(file, mask); } diff --git a/target/native/Makefile b/target/native/Makefile index 2b279e4ff..21fde248a 100644 --- a/target/native/Makefile +++ b/target/native/Makefile @@ -8,12 +8,19 @@ include $(TOPDIR)/mk/modules.mk include $(TOPDIR)/mk/kernel-build.mk include $(TOPDIR)/mk/image.mk +KERNEL:=$(LINUX_DIR)/arch/x86/boot/bzImage + kernel-install: ifeq ($(FS),initramfs) imageinstall: $(BIN_DIR)/$(INITRAMFS) - @cp $(LINUX_DIR)/arch/x86/boot/bzImage $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel + @cp $(KERNEL) $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel @echo 'The kernel file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo 'The initramfs image is: ${BIN_DIR}/${INITRAMFS}' @echo 'Login as user root with password linux123 via ssh or console' endif +ifeq ($(FS),initramfs-piggyback) +imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinitramfs + @cp $(KERNEL) ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel + @echo 'The kernel+initramfs file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' +endif diff --git a/target/native/target.mk b/target/native/target.mk index c4eb94ace..e0af34dba 100644 --- a/target/native/target.mk +++ b/target/native/target.mk @@ -1,6 +1,6 @@ ARCH:= $(shell uname -m|sed -e "s/i.*86/x86/" -e "s/_\?64//") CPU_ARCH:= $(shell uname -m) -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe diff --git a/target/qemu-arm/Makefile b/target/qemu-arm/Makefile index 4a423a6ef..150d25f9c 100644 --- a/target/qemu-arm/Makefile +++ b/target/qemu-arm/Makefile @@ -11,18 +11,6 @@ kernel-install: @cp $(LINUX_DIR)/arch/arm/boot/zImage \ $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel -createinit: - @-rm $(LINUX_DIR)/usr/initramfs_data.cpio.* $(MAKE_TRACE) - $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="${BUILD_DIR}/${INITRAMFS_PIGGYBACK}"#' $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_UID=0' >> $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_GID=0' >> $(LINUX_DIR)/.config - echo N |$(MAKE) -C $(LINUX_DIR) V=0 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) - $(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" $(MAKE_TRACE) - $(CP) $(LINUX_DIR)/arch/arm/boot/zImage \ - $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel - ifeq ($(FS),archive) imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) @echo @@ -43,7 +31,7 @@ imageinstall: $(BIN_DIR)/$(INITRAMFS) endif ifeq ($(FS),initramfs-piggyback) -imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinit +imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinitramfs @echo 'The kernel file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo "Start qemu with following options:" @echo 'qemu-system-arm -M spitz -portrait -kernel $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel' diff --git a/target/qemu-arm/target.mk b/target/qemu-arm/target.mk index 610123e84..affae5afa 100644 --- a/target/qemu-arm/target.mk +++ b/target/qemu-arm/target.mk @@ -1,7 +1,7 @@ ARCH:= arm CPU_ARCH:= arm -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=armv5te -msoft-float diff --git a/target/qemu-cris/Makefile b/target/qemu-cris/Makefile index 4384edf0e..b83ff2ac4 100644 --- a/target/qemu-cris/Makefile +++ b/target/qemu-cris/Makefile @@ -11,16 +11,6 @@ kernel-install: @cp $(LINUX_DIR)/arch/cris/boot/zImage \ $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel $(MAKE_TRACE) -createinit: - @-rm $(LINUX_DIR)/usr/initramfs_data.cpio.* $(MAKE_TRACE) - $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="${BUILD_DIR}/${INITRAMFS_PIGGYBACK}"#' $(LINUX_DIR)/.config - echo N |$(MAKE) -C $(LINUX_DIR) V=0 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) - $(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" $(MAKE_TRACE) - $(CP) $(LINUX_DIR)/arch/cris/boot/zImage \ - $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel - ifeq ($(FS),archive) imageinstall: $(BIN_DIR)/$(ROOTFSUSERTARBALL) @echo @@ -42,7 +32,7 @@ imageinstall: $(BIN_DIR)/$(INITRAMFS) endif ifeq ($(FS),initramfs-piggyback) -imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinit +imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinitramfs @echo 'The kernel file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo "Start qemu with following command line:" @echo 'qemu-system-cris -nographic -kernel $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel' diff --git a/target/qemu-cris/target.mk b/target/qemu-cris/target.mk index aa7f0a22a..a60214bf3 100644 --- a/target/qemu-cris/target.mk +++ b/target/qemu-cris/target.mk @@ -1,7 +1,7 @@ ARCH:= cris CPU_ARCH:= crisv32 -KERNEL_VERSION:= 2.6.32 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= 260551284ac224c3a43c4adac7df4879 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=v32 diff --git a/target/qemu-mips/Makefile b/target/qemu-mips/Makefile index 30339b49a..878d8562b 100644 --- a/target/qemu-mips/Makefile +++ b/target/qemu-mips/Makefile @@ -10,18 +10,6 @@ include $(TOPDIR)/mk/image.mk kernel-install: @cp $(LINUX_DIR)/vmlinux $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel -createinit: - @-rm $(LINUX_DIR)/usr/initramfs_data.cpio.* $(MAKE_TRACE) - $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="${BUILD_DIR}/${INITRAMFS_PIGGYBACK}"#' \ - $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_UID=0' >> $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_GID=0' >> $(LINUX_DIR)/.config - echo N |$(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) - $(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" $(MAKE_TRACE) - @cp $(LINUX_DIR)/vmlinux $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel - ifeq ($(FS),archive) imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) @echo @@ -42,7 +30,7 @@ imageinstall: $(BIN_DIR)/$(INITRAMFS) endif ifeq ($(FS),initramfs-piggyback) -imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinit +imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinitramfs @echo 'The kernel+initramfs file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo "Start qemu with following command line:" @echo 'qemu-system-mips -nographic -M malta -kernel $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel' diff --git a/target/qemu-mips/target.mk b/target/qemu-mips/target.mk index 9782461ee..fe1919aeb 100644 --- a/target/qemu-mips/target.mk +++ b/target/qemu-mips/target.mk @@ -1,7 +1,7 @@ ARCH:= mips CPU_ARCH:= mips -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=mips32 -mabi=32 diff --git a/target/qemu-mips64/target.mk b/target/qemu-mips64/target.mk index d410410c5..14d945198 100644 --- a/target/qemu-mips64/target.mk +++ b/target/qemu-mips64/target.mk @@ -1,7 +1,7 @@ ARCH:= mips CPU_ARCH:= mips64 -KERNEL_VERSION:= 2.6.32 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= 260551284ac224c3a43c4adac7df4879 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=mips64 -mabi=64 diff --git a/target/qemu-mips64el/target.mk b/target/qemu-mips64el/target.mk index eff18d5d8..eeaf18d1b 100644 --- a/target/qemu-mips64el/target.mk +++ b/target/qemu-mips64el/target.mk @@ -1,7 +1,7 @@ ARCH:= mips CPU_ARCH:= mips64el -KERNEL_VERSION:= 2.6.32 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= 260551284ac224c3a43c4adac7df4879 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=mips64 -mabi=64 diff --git a/target/qemu-mipsel/Makefile b/target/qemu-mipsel/Makefile index 3fd84266c..ed99bcac9 100644 --- a/target/qemu-mipsel/Makefile +++ b/target/qemu-mipsel/Makefile @@ -10,18 +10,6 @@ include $(TOPDIR)/mk/image.mk kernel-install: @cp $(LINUX_DIR)/vmlinux $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel -createinit: - @-rm $(LINUX_DIR)/usr/initramfs_data.cpio.* $(MAKE_TRACE) - $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="${BUILD_DIR}/${INITRAMFS_PIGGYBACK}"#' \ - $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_UID=0' >> $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_GID=0' >> $(LINUX_DIR)/.config - echo N |$(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) - $(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" $(MAKE_TRACE) - @cp $(LINUX_DIR)/vmlinux $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel - ifeq ($(FS),archive) imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) @echo "The RootFS tarball is: $(BIN_DIR)/$(ROOTFSTARBALL)" @@ -42,7 +30,7 @@ imageinstall: $(BIN_DIR)/$(INITRAMFS) endif ifeq ($(FS),initramfs-piggyback) -imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinit +imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinitramfs @echo 'The kernel+initramfs file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo "Start qemu with following command line:" @echo 'qemu-system-mipsel -nographic -M malta -kernel $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel' diff --git a/target/qemu-mipsel/target.mk b/target/qemu-mipsel/target.mk index f3fa7a0e5..70ec38bc4 100644 --- a/target/qemu-mipsel/target.mk +++ b/target/qemu-mipsel/target.mk @@ -1,7 +1,7 @@ ARCH:= mips CPU_ARCH:= mipsel -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=mips32 -mabi=32 diff --git a/target/qemu-x86/Makefile b/target/qemu-x86/Makefile index 9ad697fb5..68e7cb728 100644 --- a/target/qemu-x86/Makefile +++ b/target/qemu-x86/Makefile @@ -7,21 +7,10 @@ include $(TOPDIR)/mk/modules.mk include $(TOPDIR)/mk/kernel-build.mk include $(TOPDIR)/mk/image.mk -kernel-install: - @cp $(LINUX_DIR)/arch/x86/boot/bzImage \ - $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel +KERNEL:=$(LINUX_DIR)/arch/x86/boot/bzImage -createinit: - @-rm $(LINUX_DIR)/usr/initramfs_data.cpio.* $(MAKE_TRACE) - $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="${BUILD_DIR}/${INITRAMFS_PIGGYBACK}"#' \ - $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_UID=0' >> $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_GID=0' >> $(LINUX_DIR)/.config - echo N |$(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) - $(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" $(MAKE_TRACE) - @cp $(LINUX_DIR)/arch/x86/boot/bzImage $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel +kernel-install: + @cp $(KERNEL) $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel ifeq ($(FS),archive) imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) @@ -43,7 +32,8 @@ imageinstall: $(BIN_DIR)/$(INITRAMFS) endif ifeq ($(FS),initramfs-piggyback) -imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinit +imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinitramfs + @cp $(KERNEL) ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel @echo 'The kernel+initramfs file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo "Start qemu with following command line:" @echo 'qemu -nographic -net user,hostfwd=tcp::2222-:22 -net nic,model=e1000 -kernel $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel' diff --git a/target/qemu-x86/target.mk b/target/qemu-x86/target.mk index 39eb1651d..466b646f8 100644 --- a/target/qemu-x86/target.mk +++ b/target/qemu-x86/target.mk @@ -1,7 +1,7 @@ ARCH:= x86 CPU_ARCH:= i586 -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=i586 diff --git a/target/qemu-x86_64/Makefile b/target/qemu-x86_64/Makefile index 0ac3f3ecf..9d6a8f5b4 100644 --- a/target/qemu-x86_64/Makefile +++ b/target/qemu-x86_64/Makefile @@ -7,21 +7,10 @@ include $(TOPDIR)/mk/modules.mk include $(TOPDIR)/mk/kernel-build.mk include $(TOPDIR)/mk/image.mk -kernel-install: - @cp $(LINUX_DIR)/arch/x86/boot/bzImage \ - $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel +KERNEL:=$(LINUX_DIR)/arch/x86/boot/bzImage -createinit: - @-rm $(LINUX_DIR)/usr/initramfs_data.cpio.* $(MAKE_TRACE) - $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="${BUILD_DIR}/${INITRAMFS_PIGGYBACK}"#' \ - $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_UID=0' >> $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_GID=0' >> $(LINUX_DIR)/.config - echo N |$(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) - $(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" $(MAKE_TRACE) - @cp $(LINUX_DIR)/arch/x86/boot/bzImage $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel +kernel-install: + @cp $(KERNEL) $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel ifeq ($(FS),archive) imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) @@ -44,7 +33,8 @@ imageinstall: $(BIN_DIR)/$(INITRAMFS) endif ifeq ($(FS),initramfs-piggyback) -imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinit +imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinitramfs + @cp $(KERNEL) ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel @echo 'The kernel+initramfs file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo "Start qemu with following command line:" @echo 'qemu-system-x86_64 -nographic -net user,hostfwd=tcp::2222-:22 -net nic,model=e1000 -kernel $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel' diff --git a/target/qemu-x86_64/kernel.config b/target/qemu-x86_64/kernel.config index 960d0e965..172cad45e 100644 --- a/target/qemu-x86_64/kernel.config +++ b/target/qemu-x86_64/kernel.config @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Linux kernel version: 2.6.33 -# Fri Feb 26 17:08:24 2010 +# Linux kernel version: 2.6.34 +# Wed May 26 11:59:33 2010 # CONFIG_64BIT=y # CONFIG_X86_32 is not set @@ -19,12 +19,13 @@ CONFIG_STACKTRACE_SUPPORT=y CONFIG_HAVE_LATENCYTOP_SUPPORT=y CONFIG_MMU=y CONFIG_ZONE_DMA=y +CONFIG_NEED_DMA_MAP_STATE=y CONFIG_GENERIC_ISA_DMA=y CONFIG_GENERIC_IOMAP=y CONFIG_GENERIC_HWEIGHT=y CONFIG_ARCH_MAY_HAVE_PC_FDC=y -CONFIG_RWSEM_GENERIC_SPINLOCK=y -# CONFIG_RWSEM_XCHGADD_ALGORITHM is not set +# CONFIG_RWSEM_GENERIC_SPINLOCK is not set +CONFIG_RWSEM_XCHGADD_ALGORITHM=y CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_GENERIC_TIME_VSYSCALL=y @@ -42,6 +43,7 @@ CONFIG_ARCH_POPULATES_NODE_MAP=y CONFIG_AUDIT_ARCH=y CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y +CONFIG_HAVE_EARLY_RES=y CONFIG_GENERIC_HARDIRQS=y CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y CONFIG_GENERIC_IRQ_PROBE=y @@ -87,7 +89,6 @@ CONFIG_RCU_FANOUT=64 # CONFIG_IKCONFIG is not set CONFIG_LOG_BUF_SHIFT=14 CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y -# CONFIG_GROUP_SCHED is not set # CONFIG_CGROUPS is not set # CONFIG_SYSFS_DEPRECATED_V2 is not set # CONFIG_RELAY is not set @@ -97,9 +98,9 @@ CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_SYSCTL=y CONFIG_ANON_INODES=y CONFIG_EMBEDDED=y +CONFIG_UID16=y CONFIG_SYSCTL_SYSCALL=y -CONFIG_KALLSYMS=y -# CONFIG_KALLSYMS_EXTRA_PASS is not set +# CONFIG_KALLSYMS is not set CONFIG_HOTPLUG=y CONFIG_PRINTK=y # CONFIG_BUG is not set @@ -128,13 +129,14 @@ CONFIG_SLAB=y # CONFIG_SLOB is not set # CONFIG_PROFILING is not set CONFIG_HAVE_OPROFILE=y -# CONFIG_KPROBES is not set CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_HAVE_IOREMAP_PROT=y CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_ATTRS=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_DMA_API_DEBUG=y CONFIG_HAVE_HW_BREAKPOINT=y CONFIG_HAVE_USER_RETURN_NOTIFIER=y @@ -156,6 +158,7 @@ CONFIG_MODULE_UNLOAD=y CONFIG_BLOCK=y # CONFIG_BLK_DEV_BSG is not set # CONFIG_BLK_DEV_INTEGRITY is not set +CONFIG_BLOCK_COMPAT=y # # IO Schedulers @@ -205,11 +208,11 @@ CONFIG_INLINE_WRITE_UNLOCK_IRQ=y # CONFIG_HIGH_RES_TIMERS is not set CONFIG_GENERIC_CLOCKEVENTS_BUILD=y # CONFIG_SMP is not set -# CONFIG_SPARSE_IRQ is not set CONFIG_X86_MPPARSE=y # CONFIG_X86_EXTENDED_PLATFORM is not set CONFIG_SCHED_OMIT_FRAME_POINTER=y # CONFIG_PARAVIRT_GUEST is not set +CONFIG_NO_BOOTMEM=y # CONFIG_MEMTEST is not set # CONFIG_M386 is not set # CONFIG_M486 is not set @@ -241,6 +244,7 @@ CONFIG_X86_CPU=y CONFIG_X86_INTERNODE_CACHE_SHIFT=6 CONFIG_X86_CMPXCHG=y CONFIG_X86_L1_CACHE_SHIFT=6 +CONFIG_X86_XADD=y CONFIG_X86_WP_WORKS_OK=y CONFIG_X86_TSC=y CONFIG_X86_CMPXCHG64=y @@ -286,6 +290,7 @@ CONFIG_SPARSEMEM=y CONFIG_HAVE_MEMORY_PRESENT=y CONFIG_SPARSEMEM_EXTREME=y CONFIG_SPARSEMEM_VMEMMAP_ENABLE=y +CONFIG_SPARSEMEM_ALLOC_MEM_MAP_TOGETHER=y CONFIG_SPARSEMEM_VMEMMAP=y # CONFIG_MEMORY_HOTPLUG is not set CONFIG_PAGEFLAGS_EXTENDED=y @@ -312,6 +317,7 @@ CONFIG_HZ=250 CONFIG_PHYSICAL_START=0x200000 # CONFIG_RELOCATABLE is not set CONFIG_PHYSICAL_ALIGN=0x1000000 +CONFIG_COMPAT_VDSO=y CONFIG_CMDLINE_BOOL=y CONFIG_CMDLINE="root=/dev/sda1 console=tty0 console=ttyS0" # CONFIG_CMDLINE_OVERRIDE is not set @@ -343,9 +349,8 @@ CONFIG_PCI_DOMAINS=y # CONFIG_PCIEPORTBUS is not set CONFIG_ARCH_SUPPORTS_MSI=y # CONFIG_PCI_MSI is not set -# CONFIG_PCI_LEGACY is not set # CONFIG_PCI_STUB is not set -CONFIG_HT_IRQ=y +# CONFIG_HT_IRQ is not set # CONFIG_PCI_IOV is not set CONFIG_ISA_DMA_API=y CONFIG_K8_NB=y @@ -356,17 +361,20 @@ CONFIG_K8_NB=y # Executable file formats / Emulations # CONFIG_BINFMT_ELF=y +CONFIG_COMPAT_BINFMT_ELF=y # CONFIG_HAVE_AOUT is not set # CONFIG_BINFMT_MISC is not set -# CONFIG_IA32_EMULATION is not set -# CONFIG_COMPAT_FOR_U64_ALIGNMENT is not set +CONFIG_IA32_EMULATION=y +# CONFIG_IA32_AOUT is not set +CONFIG_COMPAT=y +CONFIG_COMPAT_FOR_U64_ALIGNMENT=y +CONFIG_SYSVIPC_COMPAT=y CONFIG_NET=y # # Networking options # CONFIG_PACKET=y -# CONFIG_PACKET_MMAP is not set CONFIG_UNIX=y # CONFIG_NET_KEY is not set CONFIG_INET=y @@ -479,6 +487,7 @@ CONFIG_HAVE_IDE=y # # SCSI device support # +CONFIG_SCSI_MOD=y # CONFIG_RAID_ATTRS is not set CONFIG_SCSI=y CONFIG_SCSI_DMA=y @@ -552,6 +561,7 @@ CONFIG_ATA_PIIX=y # CONFIG_PATA_IT821X is not set # CONFIG_PATA_IT8213 is not set # CONFIG_PATA_JMICRON is not set +# CONFIG_PATA_LEGACY is not set # CONFIG_PATA_TRIFLEX is not set # CONFIG_PATA_MARVELL is not set # CONFIG_PATA_MPIIX is not set @@ -631,6 +641,8 @@ CONFIG_NETDEV_10000=y # CONFIG_CHELSIO_T1 is not set CONFIG_CHELSIO_T3_DEPENDS=y # CONFIG_CHELSIO_T3 is not set +CONFIG_CHELSIO_T4_DEPENDS=y +# CONFIG_CHELSIO_T4 is not set # CONFIG_ENIC is not set # CONFIG_IXGBE is not set # CONFIG_IXGB is not set @@ -643,6 +655,7 @@ CONFIG_CHELSIO_T3_DEPENDS=y # CONFIG_MLX4_CORE is not set # CONFIG_TEHUTI is not set # CONFIG_BNX2X is not set +# CONFIG_QLCNIC is not set # CONFIG_QLGE is not set # CONFIG_SFC is not set # CONFIG_BE2NET is not set @@ -747,6 +760,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4 CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_JSM is not set +# CONFIG_SERIAL_TIMBERDALE is not set CONFIG_UNIX98_PTYS=y # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set # CONFIG_LEGACY_PTYS is not set @@ -790,6 +804,7 @@ CONFIG_SSB_POSSIBLE=y # CONFIG_MFD_SM501 is not set # CONFIG_HTC_PASIC3 is not set # CONFIG_MFD_TMIO is not set +# CONFIG_LPC_SCH is not set # CONFIG_REGULATOR is not set # CONFIG_MEDIA_SUPPORT is not set @@ -1040,6 +1055,7 @@ CONFIG_MISC_FILESYSTEMS=y # CONFIG_BEFS_FS is not set # CONFIG_BFS_FS is not set # CONFIG_EFS_FS is not set +# CONFIG_LOGFS is not set # CONFIG_CRAMFS is not set # CONFIG_SQUASHFS is not set # CONFIG_VXFS_FS is not set @@ -1054,6 +1070,7 @@ CONFIG_NETWORK_FILESYSTEMS=y # CONFIG_NFS_FS is not set # CONFIG_NFSD is not set # CONFIG_SMB_FS is not set +# CONFIG_CEPH_FS is not set # CONFIG_CIFS is not set # CONFIG_NCP_FS is not set # CONFIG_CODA_FS is not set @@ -1099,7 +1116,7 @@ CONFIG_MAGIC_SYSRQ=y # CONFIG_DEBUG_KERNEL is not set # CONFIG_DEBUG_MEMORY_INIT is not set CONFIG_ARCH_WANT_FRAME_POINTERS=y -CONFIG_FRAME_POINTER=y +# CONFIG_FRAME_POINTER is not set # CONFIG_RCU_CPU_STALL_DETECTOR is not set # CONFIG_LATENCYTOP is not set # CONFIG_SYSCTL_SYSCALL_CHECK is not set diff --git a/target/qemu-x86_64/target.mk b/target/qemu-x86_64/target.mk index ce1192f10..0698dda68 100644 --- a/target/qemu-x86_64/target.mk +++ b/target/qemu-x86_64/target.mk @@ -1,7 +1,7 @@ ARCH:= x86 CPU_ARCH:= x86_64 -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= diff --git a/target/rb4xx/patches/ar71xx.patch b/target/rb4xx/patches/ar71xx.patch index b0a342dfa..477c9e611 100644 --- a/target/rb4xx/patches/ar71xx.patch +++ b/target/rb4xx/patches/ar71xx.patch @@ -1,6 +1,6 @@ -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/ar71xx.c linux-2.6.33.3/arch/mips/ar71xx/ar71xx.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/ar71xx.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/ar71xx.c 2010-04-02 11:07:51.850954806 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/ar71xx.c linux-2.6.34/arch/mips/ar71xx/ar71xx.c +--- linux-2.6.34.orig/arch/mips/ar71xx/ar71xx.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/ar71xx.c 2010-05-25 18:46:03.110979012 +0200 @@ -0,0 +1,177 @@ +/* + * AR71xx SoC routines @@ -179,9 +179,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/ar71xx.c linux-2.6.33.3/arch/mips + mutex_unlock(&ar71xx_flash_mutex); +} +EXPORT_SYMBOL_GPL(ar71xx_flash_release); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap91-eth.c linux-2.6.33.3/arch/mips/ar71xx/dev-ap91-eth.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap91-eth.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-ap91-eth.c 2010-03-23 20:31:04.580708993 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-ap91-eth.c linux-2.6.34/arch/mips/ar71xx/dev-ap91-eth.c +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-ap91-eth.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-ap91-eth.c 2010-05-25 18:46:03.723464300 +0200 @@ -0,0 +1,70 @@ +/* + * Atheros AP91 reference board ethernet initialization @@ -253,9 +253,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap91-eth.c linux-2.6.33.3/arc + + ar71xx_add_device_dsa(1, &ap91_dsa_data); +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap91-eth.h linux-2.6.33.3/arch/mips/ar71xx/dev-ap91-eth.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap91-eth.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-ap91-eth.h 2010-03-12 19:31:46.886045750 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-ap91-eth.h linux-2.6.34/arch/mips/ar71xx/dev-ap91-eth.h +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-ap91-eth.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-ap91-eth.h 2010-05-25 18:46:03.783696759 +0200 @@ -0,0 +1,23 @@ +/* + * Atheros AP91 reference board ethernet initialization @@ -280,9 +280,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap91-eth.h linux-2.6.33.3/arc + +#endif /* _AR71XX_DEV_AP91_ETH_H */ + -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap91-pci.c linux-2.6.33.3/arch/mips/ar71xx/dev-ap91-pci.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap91-pci.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-ap91-pci.c 2009-12-25 12:10:59.596028998 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-ap91-pci.c linux-2.6.34/arch/mips/ar71xx/dev-ap91-pci.c +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-ap91-pci.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-ap91-pci.c 2010-05-25 18:46:03.822223125 +0200 @@ -0,0 +1,114 @@ +/* + * Atheros AP91 reference board PCI initialization @@ -398,9 +398,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap91-pci.c linux-2.6.33.3/arc + + ap91_pci_fixup_enabled = 1; +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap91-pci.h linux-2.6.33.3/arch/mips/ar71xx/dev-ap91-pci.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap91-pci.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-ap91-pci.h 2010-01-05 20:38:52.249392561 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-ap91-pci.h linux-2.6.34/arch/mips/ar71xx/dev-ap91-pci.h +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-ap91-pci.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-ap91-pci.h 2010-05-25 18:46:03.863464064 +0200 @@ -0,0 +1,21 @@ +/* + * Atheros AP91 reference board PCI initialization @@ -423,9 +423,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap91-pci.h linux-2.6.33.3/arc + +#endif /* _AR71XX_DEV_AP91_PCI_H */ + -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap94-pci.c linux-2.6.33.3/arch/mips/ar71xx/dev-ap94-pci.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap94-pci.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-ap94-pci.c 2010-02-13 16:30:07.244691791 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-ap94-pci.c linux-2.6.34/arch/mips/ar71xx/dev-ap94-pci.c +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-ap94-pci.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-ap94-pci.c 2010-05-25 18:46:03.902223120 +0200 @@ -0,0 +1,159 @@ +/* + * Atheros AP94 reference board PCI initialization @@ -586,9 +586,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap94-pci.c linux-2.6.33.3/arc + + ap94_pci_fixup_enabled = 1; +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap94-pci.h linux-2.6.33.3/arch/mips/ar71xx/dev-ap94-pci.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap94-pci.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-ap94-pci.h 2010-02-13 16:30:07.244691791 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-ap94-pci.h linux-2.6.34/arch/mips/ar71xx/dev-ap94-pci.h +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-ap94-pci.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-ap94-pci.h 2010-05-25 18:46:03.941521735 +0200 @@ -0,0 +1,28 @@ +/* + * Atheros AP94 reference board PCI initialization @@ -618,9 +618,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ap94-pci.h linux-2.6.33.3/arc + +#endif /* _AR71XX_DEV_AP94_PCI_H */ + -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ar913x-wmac.c linux-2.6.33.3/arch/mips/ar71xx/dev-ar913x-wmac.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ar913x-wmac.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-ar913x-wmac.c 2010-03-23 20:31:04.941023040 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-ar913x-wmac.c linux-2.6.34/arch/mips/ar71xx/dev-ar913x-wmac.c +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-ar913x-wmac.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-ar913x-wmac.c 2010-05-25 18:46:03.983064993 +0200 @@ -0,0 +1,68 @@ +/* + * Atheros AR913x SoC built-in WMAC device support @@ -690,9 +690,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ar913x-wmac.c linux-2.6.33.3/ + + platform_device_register(&ar913x_wmac_device); +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ar913x-wmac.h linux-2.6.33.3/arch/mips/ar71xx/dev-ar913x-wmac.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ar913x-wmac.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-ar913x-wmac.h 2010-01-05 20:38:52.185278525 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-ar913x-wmac.h linux-2.6.34/arch/mips/ar71xx/dev-ar913x-wmac.h +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-ar913x-wmac.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-ar913x-wmac.h 2010-05-25 18:46:04.023464010 +0200 @@ -0,0 +1,19 @@ +/* + * Atheros AR913x SoC built-in WMAC device support @@ -713,9 +713,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-ar913x-wmac.h linux-2.6.33.3/ +void ar913x_add_device_wmac(u8 *cal_data, u8 *mac_addr) __init; + +#endif /* _AR71XX_DEV_AR913X_WMAC_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-dsa.c linux-2.6.33.3/arch/mips/ar71xx/dev-dsa.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-dsa.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-dsa.c 2010-01-05 20:38:52.058900684 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-dsa.c linux-2.6.34/arch/mips/ar71xx/dev-dsa.c +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-dsa.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-dsa.c 2010-05-25 18:46:04.063473081 +0200 @@ -0,0 +1,50 @@ +/* + * Atheros AR71xx DSA switch device support @@ -767,9 +767,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-dsa.c linux-2.6.33.3/arch/mip + + platform_device_register(&ar71xx_dsa_switch_device); +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-dsa.h linux-2.6.33.3/arch/mips/ar71xx/dev-dsa.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-dsa.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-dsa.h 2010-01-05 20:38:52.137278273 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-dsa.h linux-2.6.34/arch/mips/ar71xx/dev-dsa.h +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-dsa.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-dsa.h 2010-05-25 18:46:04.100970143 +0200 @@ -0,0 +1,20 @@ +/* + * Atheros AR71xx DSA switch device support @@ -791,9 +791,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-dsa.h linux-2.6.33.3/arch/mip + struct dsa_platform_data *d) __init; + +#endif /* _AR71XX_DEV_DSA_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-gpio-buttons.c linux-2.6.33.3/arch/mips/ar71xx/dev-gpio-buttons.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-gpio-buttons.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-gpio-buttons.c 2010-01-05 20:38:52.310262885 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-gpio-buttons.c linux-2.6.34/arch/mips/ar71xx/dev-gpio-buttons.c +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-gpio-buttons.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-gpio-buttons.c 2010-05-25 18:46:04.200967942 +0200 @@ -0,0 +1,58 @@ +/* + * Atheros AR71xx GPIO button support @@ -853,9 +853,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-gpio-buttons.c linux-2.6.33.3 +err_free_buttons: + kfree(p); +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-gpio-buttons.h linux-2.6.33.3/arch/mips/ar71xx/dev-gpio-buttons.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-gpio-buttons.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-gpio-buttons.h 2010-01-05 20:38:52.385278021 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-gpio-buttons.h linux-2.6.34/arch/mips/ar71xx/dev-gpio-buttons.h +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-gpio-buttons.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-gpio-buttons.h 2010-05-25 18:46:04.242223118 +0200 @@ -0,0 +1,25 @@ +/* + * Atheros AR71xx GPIO button support @@ -882,9 +882,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-gpio-buttons.h linux-2.6.33.3 + struct gpio_button *buttons) __init; + +#endif /* _AR71XX_DEV_GPIO_BUTTONS_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/devices.c linux-2.6.33.3/arch/mips/ar71xx/devices.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/devices.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/devices.c 2010-04-02 11:07:51.658955496 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/devices.c linux-2.6.34/arch/mips/ar71xx/devices.c +--- linux-2.6.34.orig/arch/mips/ar71xx/devices.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/devices.c 2010-05-25 18:46:04.280978624 +0200 @@ -0,0 +1,575 @@ +/* + * Atheros AR71xx SoC platform devices @@ -1461,9 +1461,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/devices.c linux-2.6.33.3/arch/mip + return 1; +} +__setup("kmac=", ar71xx_kmac_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/devices.h linux-2.6.33.3/arch/mips/ar71xx/devices.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/devices.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/devices.h 2010-01-05 20:38:52.093279648 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/devices.h linux-2.6.34/arch/mips/ar71xx/devices.h +--- linux-2.6.34.orig/arch/mips/ar71xx/devices.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/devices.h 2010-05-25 18:46:04.736028570 +0200 @@ -0,0 +1,48 @@ +/* + * Atheros AR71xx SoC device definitions @@ -1513,10 +1513,10 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/devices.h linux-2.6.33.3/arch/mip +void ar71xx_add_device_wdt(void) __init; + +#endif /* __AR71XX_DEVICES_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-leds-gpio.c linux-2.6.33.3/arch/mips/ar71xx/dev-leds-gpio.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-leds-gpio.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-leds-gpio.c 2010-01-05 20:38:51.933280770 +0100 -@@ -0,0 +1,56 @@ +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-leds-gpio.c linux-2.6.34/arch/mips/ar71xx/dev-leds-gpio.c +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-leds-gpio.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-leds-gpio.c 2010-05-25 19:12:50.194723129 +0200 +@@ -0,0 +1,57 @@ +/* + * Atheros AR71xx GPIO LED device support + * @@ -1532,6 +1532,7 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-leds-gpio.c linux-2.6.33.3/ar + +#include +#include ++#include + +#include "dev-leds-gpio.h" + @@ -1573,9 +1574,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-leds-gpio.c linux-2.6.33.3/ar +err_free_leds: + kfree(p); +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-leds-gpio.h linux-2.6.33.3/arch/mips/ar71xx/dev-leds-gpio.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-leds-gpio.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-leds-gpio.h 2010-01-05 20:38:51.937279883 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-leds-gpio.h linux-2.6.34/arch/mips/ar71xx/dev-leds-gpio.h +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-leds-gpio.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-leds-gpio.h 2010-05-25 18:46:04.812922530 +0200 @@ -0,0 +1,21 @@ +/* + * Atheros AR71xx GPIO LED device support @@ -1598,9 +1599,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-leds-gpio.h linux-2.6.33.3/ar + struct gpio_led *leds) __init; + +#endif /* _AR71XX_DEV_LEDS_GPIO_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-m25p80.c linux-2.6.33.3/arch/mips/ar71xx/dev-m25p80.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-m25p80.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-m25p80.c 2009-12-25 12:10:59.660426865 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-m25p80.c linux-2.6.34/arch/mips/ar71xx/dev-m25p80.c +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-m25p80.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-m25p80.c 2010-05-25 18:46:04.852223056 +0200 @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2009 Gabor Juhos @@ -1632,9 +1633,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-m25p80.c linux-2.6.33.3/arch/ + ar71xx_add_device_spi(NULL, ar71xx_spi_info, + ARRAY_SIZE(ar71xx_spi_info)); +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-m25p80.h linux-2.6.33.3/arch/mips/ar71xx/dev-m25p80.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-m25p80.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-m25p80.h 2009-12-25 12:10:59.660426865 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-m25p80.h linux-2.6.34/arch/mips/ar71xx/dev-m25p80.h +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-m25p80.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-m25p80.h 2010-05-25 18:46:04.892223453 +0200 @@ -0,0 +1,16 @@ +/* + * Copyright (C) 2009 Gabor Juhos @@ -1652,9 +1653,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-m25p80.h linux-2.6.33.3/arch/ +void ar71xx_add_device_m25p80(struct flash_platform_data *pdata) __init; + +#endif /* _AR71XX_DEV_M25P80_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-pb42-pci.c linux-2.6.33.3/arch/mips/ar71xx/dev-pb42-pci.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-pb42-pci.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-pb42-pci.c 2010-01-05 20:38:52.185278525 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-pb42-pci.c linux-2.6.34/arch/mips/ar71xx/dev-pb42-pci.c +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-pb42-pci.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-pb42-pci.c 2010-05-25 18:46:04.932223237 +0200 @@ -0,0 +1,40 @@ +/* + * Atheros PB42 reference board PCI initialization @@ -1696,9 +1697,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-pb42-pci.c linux-2.6.33.3/arc +{ + ar71xx_pci_init(ARRAY_SIZE(pb42_pci_irqs), pb42_pci_irqs); +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-pb42-pci.h linux-2.6.33.3/arch/mips/ar71xx/dev-pb42-pci.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-pb42-pci.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-pb42-pci.h 2010-01-05 20:38:52.217277854 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-pb42-pci.h linux-2.6.34/arch/mips/ar71xx/dev-pb42-pci.h +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-pb42-pci.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-pb42-pci.h 2010-05-25 18:46:04.972223148 +0200 @@ -0,0 +1,21 @@ +/* + * Atheros PB42 reference board PCI initialization @@ -1721,9 +1722,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-pb42-pci.h linux-2.6.33.3/arc +#endif + +#endif /* _AR71XX_DEV_PB42_PCI_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-pb9x-pci.c linux-2.6.33.3/arch/mips/ar71xx/dev-pb9x-pci.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-pb9x-pci.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-pb9x-pci.c 2010-04-02 11:07:51.650955594 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-pb9x-pci.c linux-2.6.34/arch/mips/ar71xx/dev-pb9x-pci.c +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-pb9x-pci.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-pb9x-pci.c 2010-05-25 18:46:05.003473097 +0200 @@ -0,0 +1,33 @@ +/* + * Atheros PB9x reference board PCI initialization @@ -1758,9 +1759,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-pb9x-pci.c linux-2.6.33.3/arc +{ + ar71xx_pci_init(ARRAY_SIZE(pb9x_pci_irqs), pb9x_pci_irqs); +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-pb9x-pci.h linux-2.6.33.3/arch/mips/ar71xx/dev-pb9x-pci.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-pb9x-pci.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-pb9x-pci.h 2010-04-02 11:07:51.654953031 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-pb9x-pci.h linux-2.6.34/arch/mips/ar71xx/dev-pb9x-pci.h +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-pb9x-pci.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-pb9x-pci.h 2010-05-25 18:46:05.042263698 +0200 @@ -0,0 +1,22 @@ +/* + * Atheros PB9x reference board PCI initialization @@ -1784,9 +1785,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-pb9x-pci.h linux-2.6.33.3/arc +#endif + +#endif /* _AR71XX_DEV_PB9X_PCI_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-usb.c linux-2.6.33.3/arch/mips/ar71xx/dev-usb.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-usb.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-usb.c 2010-04-02 11:07:51.694953375 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-usb.c linux-2.6.34/arch/mips/ar71xx/dev-usb.c +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-usb.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-usb.c 2010-05-25 18:46:05.082223074 +0200 @@ -0,0 +1,181 @@ +/* + * Atheros AR71xx USB host device support @@ -1969,9 +1970,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-usb.c linux-2.6.33.3/arch/mip + BUG(); + } +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-usb.h linux-2.6.33.3/arch/mips/ar71xx/dev-usb.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/dev-usb.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/dev-usb.h 2010-01-05 20:38:52.326200390 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/dev-usb.h linux-2.6.34/arch/mips/ar71xx/dev-usb.h +--- linux-2.6.34.orig/arch/mips/ar71xx/dev-usb.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/dev-usb.h 2010-05-25 18:46:05.123473207 +0200 @@ -0,0 +1,17 @@ +/* + * Atheros AR71xx USB host device support @@ -1990,9 +1991,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/dev-usb.h linux-2.6.33.3/arch/mip +void ar71xx_add_device_usb(void) __init; + +#endif /* _AR71XX_DEV_USB_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/early_printk.c linux-2.6.33.3/arch/mips/ar71xx/early_printk.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/early_printk.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/early_printk.c 2009-12-13 20:45:21.280039916 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/early_printk.c linux-2.6.34/arch/mips/ar71xx/early_printk.c +--- linux-2.6.34.orig/arch/mips/ar71xx/early_printk.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/early_printk.c 2010-05-25 18:46:05.161773008 +0200 @@ -0,0 +1,30 @@ +/* + * Atheros AR71xx SoC early printk support @@ -2024,9 +2025,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/early_printk.c linux-2.6.33.3/arc + while (((UART_READ(UART_LSR)) & UART_LSR_THRE) == 0); +} + -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/gpio.c linux-2.6.33.3/arch/mips/ar71xx/gpio.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/gpio.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/gpio.c 2010-04-02 11:07:51.646954247 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/gpio.c linux-2.6.34/arch/mips/ar71xx/gpio.c +--- linux-2.6.34.orig/arch/mips/ar71xx/gpio.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/gpio.c 2010-05-25 18:46:05.241889944 +0200 @@ -0,0 +1,182 @@ +/* + * Atheros AR71xx SoC GPIO API support @@ -2210,9 +2211,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/gpio.c linux-2.6.33.3/arch/mips/a + if (err) + panic("cannot add AR71xx GPIO chip, error=%d", err); +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/irq.c linux-2.6.33.3/arch/mips/ar71xx/irq.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/irq.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/irq.c 2010-05-16 13:17:31.871599360 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/irq.c linux-2.6.34/arch/mips/ar71xx/irq.c +--- linux-2.6.34.orig/arch/mips/ar71xx/irq.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/irq.c 2010-05-25 18:46:05.283464015 +0200 @@ -0,0 +1,295 @@ +/* + * Atheros AR71xx SoC specific interrupt handling @@ -2509,9 +2510,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/irq.c linux-2.6.33.3/arch/mips/ar + + ar71xx_gpio_irq_init(); +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/Kconfig linux-2.6.33.3/arch/mips/ar71xx/Kconfig ---- linux-2.6.33.3.orig/arch/mips/ar71xx/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/Kconfig 2010-05-16 13:17:31.779600220 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/Kconfig linux-2.6.34/arch/mips/ar71xx/Kconfig +--- linux-2.6.34.orig/arch/mips/ar71xx/Kconfig 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/Kconfig 2010-05-25 18:46:05.333473006 +0200 @@ -0,0 +1,264 @@ +if ATHEROS_AR71XX + @@ -2777,9 +2778,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/Kconfig linux-2.6.33.3/arch/mips/ + def_bool n + +endif -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-ap81.c linux-2.6.33.3/arch/mips/ar71xx/mach-ap81.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-ap81.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-ap81.c 2010-03-23 20:31:04.604705903 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-ap81.c linux-2.6.34/arch/mips/ar71xx/mach-ap81.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-ap81.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-ap81.c 2010-05-25 18:46:05.373464152 +0200 @@ -0,0 +1,140 @@ +/* + * Atheros AP81 board support @@ -2921,9 +2922,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-ap81.c linux-2.6.33.3/arch/m +} + +MIPS_MACHINE(AR71XX_MACH_AP81, "AP81", "Atheros AP81", ap81_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-ap83.c linux-2.6.33.3/arch/mips/ar71xx/mach-ap83.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-ap83.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-ap83.c 2010-05-16 13:17:31.787602077 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-ap83.c linux-2.6.34/arch/mips/ar71xx/mach-ap83.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-ap83.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-ap83.c 2010-05-25 18:46:05.413464137 +0200 @@ -0,0 +1,266 @@ +/* + * Atheros AP83 board support @@ -3191,9 +3192,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-ap83.c linux-2.6.33.3/arch/m +} + +MIPS_MACHINE(AR71XX_MACH_AP83, "AP83", "Atheros AP83", ap83_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-aw-nr580.c linux-2.6.33.3/arch/mips/ar71xx/mach-aw-nr580.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-aw-nr580.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-aw-nr580.c 2010-05-16 13:17:33.024519409 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-aw-nr580.c linux-2.6.34/arch/mips/ar71xx/mach-aw-nr580.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-aw-nr580.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-aw-nr580.c 2010-05-25 18:46:05.443473125 +0200 @@ -0,0 +1,101 @@ +/* + * AzureWave AW-NR580 board support @@ -3296,9 +3297,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-aw-nr580.c linux-2.6.33.3/ar + +MIPS_MACHINE(AR71XX_MACH_AW_NR580, "AW-NR580", "AzureWave AW-NR580", + aw_nr580_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-dir-600-a1.c linux-2.6.33.3/arch/mips/ar71xx/mach-dir-600-a1.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-dir-600-a1.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-dir-600-a1.c 2010-05-16 13:17:31.839599757 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-dir-600-a1.c linux-2.6.34/arch/mips/ar71xx/mach-dir-600-a1.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-dir-600-a1.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-dir-600-a1.c 2010-05-25 18:46:05.483473151 +0200 @@ -0,0 +1,138 @@ +/* + * D-Link DIR-600 rev. A1 board support @@ -3438,9 +3439,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-dir-600-a1.c linux-2.6.33.3/ + +MIPS_MACHINE(AR71XX_MACH_DIR_600_A1, "DIR-600-A1", "D-Link DIR-600 rev. A1", + dir_600_a1_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-dir-615-c1.c linux-2.6.33.3/arch/mips/ar71xx/mach-dir-615-c1.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-dir-615-c1.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-dir-615-c1.c 2010-05-16 13:17:31.775600829 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-dir-615-c1.c linux-2.6.34/arch/mips/ar71xx/mach-dir-615-c1.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-dir-615-c1.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-dir-615-c1.c 2010-05-25 18:46:05.520978530 +0200 @@ -0,0 +1,173 @@ +/* + * D-Link DIR-615 rev C1 board support @@ -3615,9 +3616,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-dir-615-c1.c linux-2.6.33.3/ + +MIPS_MACHINE(AR71XX_MACH_DIR_615_C1, "DIR-615-C1", "D-Link DIR-615 rev. C1", + dir_615c1_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-dir-825-b1.c linux-2.6.33.3/arch/mips/ar71xx/mach-dir-825-b1.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-dir-825-b1.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-dir-825-b1.c 2010-05-16 13:17:32.715628389 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-dir-825-b1.c linux-2.6.34/arch/mips/ar71xx/mach-dir-825-b1.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-dir-825-b1.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-dir-825-b1.c 2010-05-25 18:46:05.560978790 +0200 @@ -0,0 +1,192 @@ +/* + * D-Link DIR-825 rev. B1 board support @@ -3811,9 +3812,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-dir-825-b1.c linux-2.6.33.3/ + +MIPS_MACHINE(AR71XX_MACH_DIR_825_B1, "DIR-825-B1", "D-Link DIR-825 rev. B1", + dir825b1_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-mzk-w04nu.c linux-2.6.33.3/arch/mips/ar71xx/mach-mzk-w04nu.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-mzk-w04nu.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-mzk-w04nu.c 2010-05-16 13:17:31.807598757 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-mzk-w04nu.c linux-2.6.34/arch/mips/ar71xx/mach-mzk-w04nu.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-mzk-w04nu.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-mzk-w04nu.c 2010-05-25 18:46:05.603464127 +0200 @@ -0,0 +1,165 @@ +/* + * Planex MZK-W04NU board support @@ -3980,9 +3981,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-mzk-w04nu.c linux-2.6.33.3/a + +MIPS_MACHINE(AR71XX_MACH_MZK_W04NU, "MZK-W04NU", "Planex MZK-W04NU", + mzk_w04nu_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-mzk-w300nh.c linux-2.6.33.3/arch/mips/ar71xx/mach-mzk-w300nh.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-mzk-w300nh.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-mzk-w300nh.c 2010-05-16 13:17:32.931648635 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-mzk-w300nh.c linux-2.6.34/arch/mips/ar71xx/mach-mzk-w300nh.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-mzk-w300nh.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-mzk-w300nh.c 2010-05-25 18:46:05.666212661 +0200 @@ -0,0 +1,158 @@ +/* + * Planex MZK-W300NH board support @@ -4142,9 +4143,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-mzk-w300nh.c linux-2.6.33.3/ + +MIPS_MACHINE(AR71XX_MACH_MZK_W300NH, "MZK-W300NH", "Planex MZK-W300NH", + mzk_w300nh_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-nbg460n.c linux-2.6.33.3/arch/mips/ar71xx/mach-nbg460n.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-nbg460n.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-nbg460n.c 2010-05-16 13:17:32.947611843 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-nbg460n.c linux-2.6.34/arch/mips/ar71xx/mach-nbg460n.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-nbg460n.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-nbg460n.c 2010-05-25 18:46:05.721448622 +0200 @@ -0,0 +1,222 @@ +/* + * Zyxel NBG 460N/550N/550NH board support @@ -4368,9 +4369,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-nbg460n.c linux-2.6.33.3/arc +} + +MIPS_MACHINE(AR71XX_MACH_NBG460N, "NBG460N", "Zyxel NBG460N/550N/550NH", nbg460n_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-pb42.c linux-2.6.33.3/arch/mips/ar71xx/mach-pb42.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-pb42.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-pb42.c 2010-03-23 20:31:05.092710513 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-pb42.c linux-2.6.34/arch/mips/ar71xx/mach-pb42.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-pb42.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-pb42.c 2010-05-25 18:46:05.763464059 +0200 @@ -0,0 +1,71 @@ +/* + * Atheros PB42 board support @@ -4443,9 +4444,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-pb42.c linux-2.6.33.3/arch/m +} + +MIPS_MACHINE(AR71XX_MACH_PB42, "PB42", "Atheros PB42", pb42_init); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-pb44.c linux-2.6.33.3/arch/mips/ar71xx/mach-pb44.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-pb44.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-pb44.c 2010-05-16 13:17:32.783600171 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-pb44.c linux-2.6.34/arch/mips/ar71xx/mach-pb44.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-pb44.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-pb44.c 2010-05-25 18:46:05.802223137 +0200 @@ -0,0 +1,207 @@ +/* + * Atheros PB44 board support @@ -4654,9 +4655,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-pb44.c linux-2.6.33.3/arch/m +} + +MIPS_MACHINE(AR71XX_MACH_PB44, "PB44", "Atheros PB44", pb44_init); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-pb92.c linux-2.6.33.3/arch/mips/ar71xx/mach-pb92.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-pb92.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-pb92.c 2010-04-14 21:17:12.138345698 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-pb92.c linux-2.6.34/arch/mips/ar71xx/mach-pb92.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-pb92.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-pb92.c 2010-05-25 18:46:05.830967287 +0200 @@ -0,0 +1,109 @@ +/* + * Atheros PB92 board support @@ -4767,9 +4768,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-pb92.c linux-2.6.33.3/arch/m +} + +MIPS_MACHINE(AR71XX_MACH_PB92, "PB92", "Atheros PB92", pb92_init); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-rb4xx.c linux-2.6.33.3/arch/mips/ar71xx/mach-rb4xx.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-rb4xx.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-rb4xx.c 2010-05-16 13:17:32.763620812 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-rb4xx.c linux-2.6.34/arch/mips/ar71xx/mach-rb4xx.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-rb4xx.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-rb4xx.c 2010-05-25 18:46:05.873464062 +0200 @@ -0,0 +1,290 @@ +/* + * MikroTik RouterBOARD 4xx series support @@ -5061,9 +5062,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-rb4xx.c linux-2.6.33.3/arch/ + +MIPS_MACHINE(AR71XX_MACH_RB_493, "493", "MikroTik RouterBOARD 493/AH", + rb493_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-rb750.c linux-2.6.33.3/arch/mips/ar71xx/mach-rb750.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-rb750.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-rb750.c 2010-03-12 19:31:46.886045750 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-rb750.c linux-2.6.34/arch/mips/ar71xx/mach-rb750.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-rb750.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-rb750.c 2010-05-25 18:46:05.912223101 +0200 @@ -0,0 +1,133 @@ +/* + * MikroTik RouterBOARD 750 support @@ -5198,9 +5199,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-rb750.c linux-2.6.33.3/arch/ + +MIPS_MACHINE(AR71XX_MACH_RB_750, "750i", "MikroTik RouterBOARD 750", + rb750_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tew-632brp.c linux-2.6.33.3/arch/mips/ar71xx/mach-tew-632brp.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tew-632brp.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-tew-632brp.c 2010-05-16 13:17:32.899597622 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-tew-632brp.c linux-2.6.34/arch/mips/ar71xx/mach-tew-632brp.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-tew-632brp.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-tew-632brp.c 2010-05-25 18:46:05.952223131 +0200 @@ -0,0 +1,149 @@ +/* + * TrendNET TEW-632BRP board support @@ -5351,9 +5352,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tew-632brp.c linux-2.6.33.3/ + +MIPS_MACHINE(AR71XX_MACH_TEW_632BRP, "TEW-632BRP", "TRENDnet TEW-632BRP", + tew_632brp_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tl-wr1043nd.c linux-2.6.33.3/arch/mips/ar71xx/mach-tl-wr1043nd.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tl-wr1043nd.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-tl-wr1043nd.c 2010-05-16 13:17:31.779600220 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-tl-wr1043nd.c linux-2.6.34/arch/mips/ar71xx/mach-tl-wr1043nd.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-tl-wr1043nd.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-tl-wr1043nd.c 2010-05-25 18:46:05.990964132 +0200 @@ -0,0 +1,156 @@ +/* + * TP-LINK TL-WR1043ND board support @@ -5511,9 +5512,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tl-wr1043nd.c linux-2.6.33.3 + +MIPS_MACHINE(AR71XX_MACH_TL_WR1043ND, "TL-WR1043ND", "TP-LINK TL-WR1043ND", + tl_wr1043nd_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tl-wr741nd.c linux-2.6.33.3/arch/mips/ar71xx/mach-tl-wr741nd.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tl-wr741nd.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-tl-wr741nd.c 2010-05-16 13:17:33.043600332 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-tl-wr741nd.c linux-2.6.34/arch/mips/ar71xx/mach-tl-wr741nd.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-tl-wr741nd.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-tl-wr741nd.c 2010-05-25 18:46:06.033464057 +0200 @@ -0,0 +1,115 @@ +/* + * TP-LINK TL-WR741ND board support @@ -5630,9 +5631,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tl-wr741nd.c linux-2.6.33.3/ +} +MIPS_MACHINE(AR71XX_MACH_TL_WR741ND, "TL-WR741ND", "TP-LINK TL-WR741ND", + tl_wr741nd_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tl-wr841n.c linux-2.6.33.3/arch/mips/ar71xx/mach-tl-wr841n.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tl-wr841n.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-tl-wr841n.c 2010-05-16 13:17:32.951604530 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-tl-wr841n.c linux-2.6.34/arch/mips/ar71xx/mach-tl-wr841n.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-tl-wr841n.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-tl-wr841n.c 2010-05-25 18:46:06.091873727 +0200 @@ -0,0 +1,143 @@ +/* + * TP-LINK TL-WR841N board support @@ -5777,9 +5778,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tl-wr841n.c linux-2.6.33.3/a + +MIPS_MACHINE(AR71XX_MACH_TL_WR841N_V1, "TL-WR841N-v1.5", "TP-LINK TL-WR841N v1", + tl_wr841n_v1_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tl-wr941nd.c linux-2.6.33.3/arch/mips/ar71xx/mach-tl-wr941nd.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tl-wr941nd.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-tl-wr941nd.c 2010-05-16 13:17:33.088566117 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-tl-wr941nd.c linux-2.6.34/arch/mips/ar71xx/mach-tl-wr941nd.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-tl-wr941nd.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-tl-wr941nd.c 2010-05-25 18:46:06.132223001 +0200 @@ -0,0 +1,142 @@ +/* + * TP-LINK TL-WR941ND board support @@ -5923,9 +5924,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-tl-wr941nd.c linux-2.6.33.3/ + +MIPS_MACHINE(AR71XX_MACH_TL_WR941ND, "TL-WR941ND", "TP-LINK TL-WR941ND", + tl_wr941nd_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/machtype.h linux-2.6.33.3/arch/mips/ar71xx/machtype.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/machtype.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/machtype.h 2010-05-16 13:17:32.799599694 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/machtype.h linux-2.6.34/arch/mips/ar71xx/machtype.h +--- linux-2.6.34.orig/arch/mips/ar71xx/machtype.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/machtype.h 2010-05-25 18:46:06.170978587 +0200 @@ -0,0 +1,60 @@ +/* + * Atheros AR71xx machine type definitions @@ -5987,9 +5988,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/machtype.h linux-2.6.33.3/arch/mi +}; + +#endif /* _AR71XX_MACHTYPE_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-ubnt.c linux-2.6.33.3/arch/mips/ar71xx/mach-ubnt.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-ubnt.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-ubnt.c 2010-05-16 13:17:31.783601847 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-ubnt.c linux-2.6.34/arch/mips/ar71xx/mach-ubnt.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-ubnt.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-ubnt.c 2010-05-25 18:46:06.210978842 +0200 @@ -0,0 +1,281 @@ +/* + * Ubiquiti RouterStation support @@ -6272,9 +6273,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-ubnt.c linux-2.6.33.3/arch/m + +MIPS_MACHINE(AR71XX_MACH_UBNT_NANO_M, "UBNT-NM", "Ubiquiti Nanostation M", + ubnt_nano_m_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wndr3700.c linux-2.6.33.3/arch/mips/ar71xx/mach-wndr3700.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wndr3700.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-wndr3700.c 2010-05-16 13:17:33.059599577 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-wndr3700.c linux-2.6.34/arch/mips/ar71xx/mach-wndr3700.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-wndr3700.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-wndr3700.c 2010-05-25 18:46:06.250979126 +0200 @@ -0,0 +1,209 @@ +/* + * Netgear WNDR3700 board support @@ -6485,9 +6486,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wndr3700.c linux-2.6.33.3/ar + +MIPS_MACHINE(AR71XX_MACH_WNDR3700, "WNDR3700", "NETGEAR WNDR3700", + wndr3700_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wnr2000.c linux-2.6.33.3/arch/mips/ar71xx/mach-wnr2000.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wnr2000.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-wnr2000.c 2010-05-16 13:17:31.783601847 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-wnr2000.c linux-2.6.34/arch/mips/ar71xx/mach-wnr2000.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-wnr2000.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-wnr2000.c 2010-05-25 18:46:06.290978653 +0200 @@ -0,0 +1,148 @@ +/* + * NETGEAR WNR2000 board support @@ -6637,9 +6638,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wnr2000.c linux-2.6.33.3/arc +} + +MIPS_MACHINE(AR71XX_MACH_WNR2000, "WNR2000", "NETGEAR WNR2000", wnr2000_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wp543.c linux-2.6.33.3/arch/mips/ar71xx/mach-wp543.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wp543.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-wp543.c 2010-03-23 20:31:05.506280502 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-wp543.c linux-2.6.34/arch/mips/ar71xx/mach-wp543.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-wp543.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-wp543.c 2010-05-25 18:46:06.340979863 +0200 @@ -0,0 +1,99 @@ +/* + * Compex WP543/WPJ543 board support @@ -6740,9 +6741,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wp543.c linux-2.6.33.3/arch/ +} + +MIPS_MACHINE(AR71XX_MACH_WP543, "WP543", "Compex WP543", wp543_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wrt160nl.c linux-2.6.33.3/arch/mips/ar71xx/mach-wrt160nl.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wrt160nl.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-wrt160nl.c 2010-05-16 13:17:32.731626515 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-wrt160nl.c linux-2.6.34/arch/mips/ar71xx/mach-wrt160nl.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-wrt160nl.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-wrt160nl.c 2010-05-25 18:46:06.390978782 +0200 @@ -0,0 +1,158 @@ +/* + * Linksys WRT160NL board support @@ -6902,9 +6903,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wrt160nl.c linux-2.6.33.3/ar + +MIPS_MACHINE(AR71XX_MACH_WRT160NL, "WRT160NL", "Linksys WRT160NL", + wrt160nl_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wrt400n.c linux-2.6.33.3/arch/mips/ar71xx/mach-wrt400n.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wrt400n.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-wrt400n.c 2010-05-16 13:17:31.823599676 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-wrt400n.c linux-2.6.34/arch/mips/ar71xx/mach-wrt400n.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-wrt400n.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-wrt400n.c 2010-05-25 18:46:06.432223100 +0200 @@ -0,0 +1,168 @@ +/* + * Linksys WRT400N board support @@ -7074,9 +7075,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wrt400n.c linux-2.6.33.3/arc +} + +MIPS_MACHINE(AR71XX_MACH_WRT400N, "WRT400N", "Linksys WRT400N", wrt400n_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wzr-hp-g300nh.c linux-2.6.33.3/arch/mips/ar71xx/mach-wzr-hp-g300nh.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wzr-hp-g300nh.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/mach-wzr-hp-g300nh.c 2010-05-16 13:17:31.855600117 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/mach-wzr-hp-g300nh.c linux-2.6.34/arch/mips/ar71xx/mach-wzr-hp-g300nh.c +--- linux-2.6.34.orig/arch/mips/ar71xx/mach-wzr-hp-g300nh.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/mach-wzr-hp-g300nh.c 2010-05-25 18:46:06.480978988 +0200 @@ -0,0 +1,265 @@ +/* + * Buffalo WZR-HP-G300NH board support @@ -7343,9 +7344,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/mach-wzr-hp-g300nh.c linux-2.6.33 + +MIPS_MACHINE(AR71XX_MACH_WZR_HP_G300NH, "WZR-HP-G300NH", + "Buffalo WZR-HP-G300NH", wzrhpg300nh_setup); -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/Makefile linux-2.6.33.3/arch/mips/ar71xx/Makefile ---- linux-2.6.33.3.orig/arch/mips/ar71xx/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/Makefile 2010-05-17 21:19:51.539114190 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/Makefile linux-2.6.34/arch/mips/ar71xx/Makefile +--- linux-2.6.34.orig/arch/mips/ar71xx/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/Makefile 2010-05-25 18:46:06.523464007 +0200 @@ -0,0 +1,54 @@ +# +# Makefile for the Atheros AR71xx SoC specific parts of the kernel @@ -7401,9 +7402,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/Makefile linux-2.6.33.3/arch/mips +obj-$(CONFIG_AR71XX_MACH_WP543) += mach-wp543.o +obj-$(CONFIG_AR71XX_MACH_WRT160NL) += mach-wrt160nl.o +obj-$(CONFIG_AR71XX_MACH_WRT400N) += mach-wrt400n.o -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/nvram.c linux-2.6.33.3/arch/mips/ar71xx/nvram.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/nvram.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/nvram.c 2010-01-05 20:38:52.061278082 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/nvram.c linux-2.6.34/arch/mips/ar71xx/nvram.c +--- linux-2.6.34.orig/arch/mips/ar71xx/nvram.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/nvram.c 2010-05-25 18:46:06.563464058 +0200 @@ -0,0 +1,75 @@ +/* + * Atheros AR71xx minimal nvram support @@ -7480,9 +7481,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/nvram.c linux-2.6.33.3/arch/mips/ + vfree(buf); + return ret; +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/nvram.h linux-2.6.33.3/arch/mips/ar71xx/nvram.h ---- linux-2.6.33.3.orig/arch/mips/ar71xx/nvram.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/nvram.h 2010-01-05 20:38:52.137278273 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/nvram.h linux-2.6.34/arch/mips/ar71xx/nvram.h +--- linux-2.6.34.orig/arch/mips/ar71xx/nvram.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/nvram.h 2010-05-25 18:46:06.602223088 +0200 @@ -0,0 +1,19 @@ +/* + * Atheros AR71xx minimal nvram support @@ -7503,9 +7504,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/nvram.h linux-2.6.33.3/arch/mips/ + const char *name, char *mac) __init; + +#endif /* _AR71XX_NVRAM_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/pci.c linux-2.6.33.3/arch/mips/ar71xx/pci.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/pci.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/pci.c 2010-04-02 11:07:51.847025813 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/pci.c linux-2.6.34/arch/mips/ar71xx/pci.c +--- linux-2.6.34.orig/arch/mips/ar71xx/pci.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/pci.c 2010-05-25 18:46:06.641506945 +0200 @@ -0,0 +1,93 @@ +/* + * Atheros AR71xx PCI setup code @@ -7600,9 +7601,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/pci.c linux-2.6.33.3/arch/mips/ar + + return ret; +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/prom.c linux-2.6.33.3/arch/mips/ar71xx/prom.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/prom.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/prom.c 2010-05-20 17:47:32.151849828 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/prom.c linux-2.6.34/arch/mips/ar71xx/prom.c +--- linux-2.6.34.orig/arch/mips/ar71xx/prom.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/prom.c 2010-05-25 18:46:06.682223087 +0200 @@ -0,0 +1,105 @@ +/* + * Atheros AR71xx SoC specific prom routines @@ -7709,9 +7710,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/prom.c linux-2.6.33.3/arch/mips/a +{ + /* We do not have to prom memory to free */ +} -diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/setup.c linux-2.6.33.3/arch/mips/ar71xx/setup.c ---- linux-2.6.33.3.orig/arch/mips/ar71xx/setup.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/ar71xx/setup.c 2010-04-02 11:07:51.650955594 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/ar71xx/setup.c linux-2.6.34/arch/mips/ar71xx/setup.c +--- linux-2.6.34.orig/arch/mips/ar71xx/setup.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/ar71xx/setup.c 2010-05-25 18:46:06.747917885 +0200 @@ -0,0 +1,310 @@ +/* + * Atheros AR71xx SoC specific setup @@ -8023,9 +8024,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/ar71xx/setup.c linux-2.6.33.3/arch/mips/ + +MIPS_MACHINE(AR71XX_MACH_GENERIC, "Generic", "Generic AR71xx board", + ar71xx_generic_init); -diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/ar71xx.h linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/ar71xx.h ---- linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/ar71xx.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/ar71xx.h 2010-04-02 11:07:50.806953666 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/ar71xx.h linux-2.6.34/arch/mips/include/asm/mach-ar71xx/ar71xx.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/ar71xx.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/include/asm/mach-ar71xx/ar71xx.h 2010-05-25 18:46:06.783464047 +0200 @@ -0,0 +1,514 @@ +/* + * Atheros AR71xx SoC specific definitions @@ -8541,9 +8542,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/ar71xx.h linux-2 +#endif /* __ASSEMBLER__ */ + +#endif /* __ASM_MACH_AR71XX_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/ar91xx_flash.h linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/ar91xx_flash.h ---- linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/ar91xx_flash.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/ar91xx_flash.h 2009-12-13 20:45:20.439922318 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/ar91xx_flash.h linux-2.6.34/arch/mips/include/asm/mach-ar71xx/ar91xx_flash.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/ar91xx_flash.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/include/asm/mach-ar71xx/ar91xx_flash.h 2010-05-25 18:46:06.842223171 +0200 @@ -0,0 +1,26 @@ +/* + * AR91xx parallel flash driver platform data definitions @@ -8571,9 +8572,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/ar91xx_flash.h l +}; + +#endif /* __AR91XX_FLASH_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/cpu-feature-overrides.h linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/cpu-feature-overrides.h ---- linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/cpu-feature-overrides.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/cpu-feature-overrides.h 2009-12-13 20:45:20.471921431 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/cpu-feature-overrides.h linux-2.6.34/arch/mips/include/asm/mach-ar71xx/cpu-feature-overrides.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/cpu-feature-overrides.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/include/asm/mach-ar71xx/cpu-feature-overrides.h 2010-05-25 18:46:06.883464235 +0200 @@ -0,0 +1,56 @@ +/* + * Atheros AR71xx specific CPU feature overrides @@ -8631,9 +8632,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/cpu-feature-over +#define cpu_icache_line_size() 32 + +#endif /* __ASM_MACH_AR71XX_CPU_FEATURE_OVERRIDES_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/gpio.h linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/gpio.h ---- linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/gpio.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/gpio.h 2009-12-13 20:45:20.471921431 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/gpio.h linux-2.6.34/arch/mips/include/asm/mach-ar71xx/gpio.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/gpio.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/include/asm/mach-ar71xx/gpio.h 2010-05-25 18:46:06.922223109 +0200 @@ -0,0 +1,53 @@ +/* + * Atheros AR71xx GPIO API definitions @@ -8688,9 +8689,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/gpio.h linux-2.6 +#define gpio_cansleep __gpio_cansleep + +#endif /* __ASM_MACH_AR71XX_GPIO_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/irq.h linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/irq.h ---- linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/irq.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/irq.h 2009-12-13 20:45:20.447923983 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/irq.h linux-2.6.34/arch/mips/include/asm/mach-ar71xx/irq.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/irq.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/include/asm/mach-ar71xx/irq.h 2010-05-25 18:46:06.961120355 +0200 @@ -0,0 +1,17 @@ +/* + * Copyright (C) 2008-2009 Gabor Juhos @@ -8709,9 +8710,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/irq.h linux-2.6. +#include_next + +#endif /* __ASM_MACH_AR71XX_IRQ_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/kernel-entry-init.h linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/kernel-entry-init.h ---- linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/kernel-entry-init.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/kernel-entry-init.h 2009-12-13 20:45:20.611920954 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/kernel-entry-init.h linux-2.6.34/arch/mips/include/asm/mach-ar71xx/kernel-entry-init.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/kernel-entry-init.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/include/asm/mach-ar71xx/kernel-entry-init.h 2010-05-25 18:46:07.003473055 +0200 @@ -0,0 +1,32 @@ +/* + * Atheros AR71xx specific kernel entry setup @@ -8745,9 +8746,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/kernel-entry-ini + .endm + +#endif /* __ASM_MACH_AR71XX_KERNEL_ENTRY_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/mach-rb750.h linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/mach-rb750.h ---- linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/mach-rb750.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/mach-rb750.h 2010-03-12 19:31:45.750044904 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/mach-rb750.h linux-2.6.34/arch/mips/include/asm/mach-ar71xx/mach-rb750.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/mach-rb750.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/include/asm/mach-ar71xx/mach-rb750.h 2010-05-25 18:46:07.040970889 +0200 @@ -0,0 +1,66 @@ +/* + * MikroTik RouterBOARD 750 definitions @@ -8816,9 +8817,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/mach-rb750.h lin + +#endif /* _MACH_RB750_H */ \ No newline at end of file -diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/mangle-port.h linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/mangle-port.h ---- linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/mangle-port.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/mangle-port.h 2009-12-13 20:45:20.615923464 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/mangle-port.h linux-2.6.34/arch/mips/include/asm/mach-ar71xx/mangle-port.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/mangle-port.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/include/asm/mach-ar71xx/mangle-port.h 2010-05-25 18:46:07.080975596 +0200 @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2008 Gabor Juhos @@ -8865,9 +8866,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/mangle-port.h li +#endif + +#endif /* __ASM_MACH_AR71XX_MANGLE_PORT_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/pci.h linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/pci.h ---- linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/pci.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/pci.h 2009-12-13 20:45:20.471921431 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/pci.h linux-2.6.34/arch/mips/include/asm/mach-ar71xx/pci.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/pci.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/include/asm/mach-ar71xx/pci.h 2010-05-25 18:46:07.122223041 +0200 @@ -0,0 +1,39 @@ +/* + * Atheros AR71xx SoC specific PCI definitions @@ -8908,9 +8909,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/pci.h linux-2.6. +int ar71xx_pci_init(unsigned nr_irqs, struct ar71xx_pci_irq *map) __init; + +#endif /* __ASM_MACH_AR71XX_PCI_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/platform.h linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/platform.h ---- linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/platform.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/platform.h 2009-12-13 20:45:20.611920954 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/platform.h linux-2.6.34/arch/mips/include/asm/mach-ar71xx/platform.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/platform.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/include/asm/mach-ar71xx/platform.h 2010-05-25 18:46:07.171468638 +0200 @@ -0,0 +1,61 @@ +/* + * Atheros AR71xx SoC specific platform data definitions @@ -8973,9 +8974,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/platform.h linux +#define AR71XX_SPI_CS_ACTIVE 1 + +#endif /* __ASM_MACH_AR71XX_PLATFORM_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/war.h linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/war.h ---- linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/war.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/include/asm/mach-ar71xx/war.h 2009-12-13 20:45:20.443925666 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/war.h linux-2.6.34/arch/mips/include/asm/mach-ar71xx/war.h +--- linux-2.6.34.orig/arch/mips/include/asm/mach-ar71xx/war.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/include/asm/mach-ar71xx/war.h 2010-05-25 18:46:07.220978398 +0200 @@ -0,0 +1,25 @@ +/* + * This file is subject to the terms and conditions of the GNU General Public @@ -9002,9 +9003,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mach-ar71xx/war.h linux-2.6. +#define MIPS34K_MISSED_ITLB_WAR 0 + +#endif /* __ASM_MACH_AR71XX_WAR_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mips_machine.h linux-2.6.33.3/arch/mips/include/asm/mips_machine.h ---- linux-2.6.33.3.orig/arch/mips/include/asm/mips_machine.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/include/asm/mips_machine.h 2010-05-17 19:36:16.051124934 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/mips_machine.h linux-2.6.34/arch/mips/include/asm/mips_machine.h +--- linux-2.6.34.orig/arch/mips/include/asm/mips_machine.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/include/asm/mips_machine.h 2010-05-25 18:46:07.270971848 +0200 @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2008-2009 Gabor Juhos @@ -9060,9 +9061,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/mips_machine.h linux-2.6.33. +pure_initcall(register_machine_##_type) + +#endif /* __ASM_MIPS_MACHINE_H */ -diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/time.h linux-2.6.33.3/arch/mips/include/asm/time.h ---- linux-2.6.33.3.orig/arch/mips/include/asm/time.h 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/arch/mips/include/asm/time.h 2010-05-18 19:33:35.811338021 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/include/asm/time.h linux-2.6.34/arch/mips/include/asm/time.h +--- linux-2.6.34.orig/arch/mips/include/asm/time.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/mips/include/asm/time.h 2010-05-25 18:46:07.320975755 +0200 @@ -52,6 +52,7 @@ */ #ifdef CONFIG_CEVT_R4K_LIB @@ -9071,9 +9072,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/include/asm/time.h linux-2.6.33.3/arch/m extern int r4k_clockevent_init(void); #endif -diff -Nur linux-2.6.33.3.orig/arch/mips/Kconfig linux-2.6.33.3/arch/mips/Kconfig ---- linux-2.6.33.3.orig/arch/mips/Kconfig 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/arch/mips/Kconfig 2010-05-20 16:39:56.083849540 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/Kconfig linux-2.6.34/arch/mips/Kconfig +--- linux-2.6.34.orig/arch/mips/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/mips/Kconfig 2010-05-25 18:46:07.382337624 +0200 @@ -48,6 +48,23 @@ Support for the Texas Instruments AR7 System-on-a-Chip family: TNETD7100, 7200 and 7300. @@ -9096,9 +9097,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/Kconfig linux-2.6.33.3/arch/mips/Kconfig + Support for Atheros AR71xx based boards. + config BCM47XX - bool "BCM47XX based boards" + bool "Broadcom BCM47XX based boards" select CEVT_R4K -@@ -682,6 +699,7 @@ +@@ -684,6 +701,7 @@ endchoice source "arch/mips/alchemy/Kconfig" @@ -9106,7 +9107,7 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/Kconfig linux-2.6.33.3/arch/mips/Kconfig source "arch/mips/bcm63xx/Kconfig" source "arch/mips/jazz/Kconfig" source "arch/mips/lasat/Kconfig" -@@ -848,9 +866,15 @@ +@@ -850,9 +868,15 @@ config MIPS_DISABLE_OBSOLETE_IDE bool @@ -9122,21 +9123,21 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/Kconfig linux-2.6.33.3/arch/mips/Kconfig config NO_IOPORT def_bool n -diff -Nur linux-2.6.33.3.orig/arch/mips/kernel/Makefile linux-2.6.33.3/arch/mips/kernel/Makefile ---- linux-2.6.33.3.orig/arch/mips/kernel/Makefile 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/arch/mips/kernel/Makefile 2010-05-17 18:51:38.331117283 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/kernel/Makefile linux-2.6.34/arch/mips/kernel/Makefile +--- linux-2.6.34.orig/arch/mips/kernel/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/mips/kernel/Makefile 2010-05-25 19:00:48.342223057 +0200 @@ -93,6 +93,7 @@ obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o obj-$(CONFIG_EARLY_PRINTK) += early_printk.o +obj-$(CONFIG_MIPS_MACHINE) += mips_machine.o + obj-$(CONFIG_SPINLOCK_TEST) += spinlock_test.o CFLAGS_cpu-bugs64.o = $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi) - -diff -Nur linux-2.6.33.3.orig/arch/mips/kernel/mips_machine.c linux-2.6.33.3/arch/mips/kernel/mips_machine.c ---- linux-2.6.33.3.orig/arch/mips/kernel/mips_machine.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/kernel/mips_machine.c 2010-05-17 19:36:16.035122334 +0200 -@@ -0,0 +1,120 @@ +diff -Nur linux-2.6.34.orig/arch/mips/kernel/mips_machine.c linux-2.6.34/arch/mips/kernel/mips_machine.c +--- linux-2.6.34.orig/arch/mips/kernel/mips_machine.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/kernel/mips_machine.c 2010-05-25 19:08:53.143473119 +0200 +@@ -0,0 +1,121 @@ +/* + * Copyright (C) 2008-2009 Gabor Juhos + * @@ -9146,6 +9147,7 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/kernel/mips_machine.c linux-2.6.33.3/arc + * + */ +#include ++#include +#include + +#include @@ -9257,9 +9259,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/kernel/mips_machine.c linux-2.6.33.3/arc +} + +core_initcall(mips_machtype_init); -diff -Nur linux-2.6.33.3.orig/arch/mips/kernel/proc.c linux-2.6.33.3/arch/mips/kernel/proc.c ---- linux-2.6.33.3.orig/arch/mips/kernel/proc.c 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/arch/mips/kernel/proc.c 2010-05-17 18:51:38.335115558 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/kernel/proc.c linux-2.6.34/arch/mips/kernel/proc.c +--- linux-2.6.34.orig/arch/mips/kernel/proc.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/mips/kernel/proc.c 2010-05-25 18:46:08.072223162 +0200 @@ -12,6 +12,7 @@ #include #include @@ -9282,18 +9284,18 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/kernel/proc.c linux-2.6.33.3/arch/mips/k seq_printf(m, "processor\t\t: %ld\n", n); sprintf(fmt, "cpu model\t\t: %%s V%%d.%%d%s\n", -diff -Nur linux-2.6.33.3.orig/arch/mips/kernel/traps.c linux-2.6.33.3/arch/mips/kernel/traps.c ---- linux-2.6.33.3.orig/arch/mips/kernel/traps.c 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/arch/mips/kernel/traps.c 2010-05-18 19:33:35.691116007 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/kernel/traps.c linux-2.6.34/arch/mips/kernel/traps.c +--- linux-2.6.34.orig/arch/mips/kernel/traps.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/mips/kernel/traps.c 2010-05-25 19:01:23.272222993 +0200 @@ -50,6 +50,7 @@ #include #include #include +#include + #include extern void check_wait(void); - extern asmlinkage void r4k_wait(void); -@@ -1496,6 +1497,8 @@ +@@ -1506,6 +1507,8 @@ if (cpu_has_mips_r2) { cp0_compare_irq_shift = CAUSEB_TI - CAUSEB_IP; cp0_compare_irq = (read_c0_intctl() >> INTCTLB_IPTI) & 7; @@ -9302,10 +9304,10 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/kernel/traps.c linux-2.6.33.3/arch/mips/ cp0_perfcount_irq = (read_c0_intctl() >> INTCTLB_IPPCI) & 7; if (cp0_perfcount_irq == cp0_compare_irq) cp0_perfcount_irq = -1; -diff -Nur linux-2.6.33.3.orig/arch/mips/Makefile linux-2.6.33.3/arch/mips/Makefile ---- linux-2.6.33.3.orig/arch/mips/Makefile 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/arch/mips/Makefile 2010-05-20 17:40:10.159860905 +0200 -@@ -166,6 +166,13 @@ +diff -Nur linux-2.6.34.orig/arch/mips/Makefile linux-2.6.34/arch/mips/Makefile +--- linux-2.6.34.orig/arch/mips/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/mips/Makefile 2010-05-25 18:46:08.530007292 +0200 +@@ -179,6 +179,13 @@ cflags-$(CONFIG_CPU_CAVIUM_OCTEON) += -Wa,-march=octeon endif @@ -9319,9 +9321,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/Makefile linux-2.6.33.3/arch/mips/Makefi cflags-$(CONFIG_CPU_R4000_WORKAROUNDS) += $(call cc-option,-mfix-r4000,) cflags-$(CONFIG_CPU_R4400_WORKAROUNDS) += $(call cc-option,-mfix-r4400,) cflags-$(CONFIG_CPU_DADDI_WORKAROUNDS) += $(call cc-option,-mno-daddi,) -diff -Nur linux-2.6.33.3.orig/arch/mips/pci/Makefile linux-2.6.33.3/arch/mips/pci/Makefile ---- linux-2.6.33.3.orig/arch/mips/pci/Makefile 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/arch/mips/pci/Makefile 2010-05-17 16:28:23.988293766 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/pci/Makefile linux-2.6.34/arch/mips/pci/Makefile +--- linux-2.6.34.orig/arch/mips/pci/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/arch/mips/pci/Makefile 2010-05-25 18:46:08.712416500 +0200 @@ -18,6 +18,7 @@ obj-$(CONFIG_BCM47XX) += pci-bcm47xx.o obj-$(CONFIG_BCM63XX) += pci-bcm63xx.o fixup-bcm63xx.o \ @@ -9330,9 +9332,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/pci/Makefile linux-2.6.33.3/arch/mips/pc # # These are still pretty much in the old state, watch, go blind. -diff -Nur linux-2.6.33.3.orig/arch/mips/pci/pci-ar71xx.c linux-2.6.33.3/arch/mips/pci/pci-ar71xx.c ---- linux-2.6.33.3.orig/arch/mips/pci/pci-ar71xx.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/pci/pci-ar71xx.c 2010-03-23 20:31:05.824706267 +0100 +diff -Nur linux-2.6.34.orig/arch/mips/pci/pci-ar71xx.c linux-2.6.34/arch/mips/pci/pci-ar71xx.c +--- linux-2.6.34.orig/arch/mips/pci/pci-ar71xx.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/pci/pci-ar71xx.c 2010-05-25 18:46:08.752223161 +0200 @@ -0,0 +1,409 @@ +/* + * Atheros AR71xx PCI host controller driver @@ -9743,9 +9745,9 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/pci/pci-ar71xx.c linux-2.6.33.3/arch/mip + + return 0; +} -diff -Nur linux-2.6.33.3.orig/arch/mips/pci/pci-ar724x.c linux-2.6.33.3/arch/mips/pci/pci-ar724x.c ---- linux-2.6.33.3.orig/arch/mips/pci/pci-ar724x.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/arch/mips/pci/pci-ar724x.c 2010-04-02 11:07:52.002954061 +0200 +diff -Nur linux-2.6.34.orig/arch/mips/pci/pci-ar724x.c linux-2.6.34/arch/mips/pci/pci-ar724x.c +--- linux-2.6.34.orig/arch/mips/pci/pci-ar724x.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/arch/mips/pci/pci-ar724x.c 2010-05-25 18:46:08.793464075 +0200 @@ -0,0 +1,395 @@ +/* + * Atheros AR724x PCI host controller driver @@ -10142,10 +10144,10 @@ diff -Nur linux-2.6.33.3.orig/arch/mips/pci/pci-ar724x.c linux-2.6.33.3/arch/mip + err: + return ret; +} -diff -Nur linux-2.6.33.3.orig/drivers/char/Kconfig linux-2.6.33.3/drivers/char/Kconfig ---- linux-2.6.33.3.orig/drivers/char/Kconfig 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/char/Kconfig 2010-05-17 20:29:49.263661210 +0200 -@@ -1016,6 +1016,14 @@ +diff -Nur linux-2.6.34.orig/drivers/char/Kconfig linux-2.6.34/drivers/char/Kconfig +--- linux-2.6.34.orig/drivers/char/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/char/Kconfig 2010-05-25 18:46:08.833464040 +0200 +@@ -1024,6 +1024,14 @@ If compiled as a module, it will be called cs5535_gpio. @@ -10160,9 +10162,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/char/Kconfig linux-2.6.33.3/drivers/char/K config RAW_DRIVER tristate "RAW driver (/dev/raw/rawN)" depends on BLOCK -diff -Nur linux-2.6.33.3.orig/drivers/char/Makefile linux-2.6.33.3/drivers/char/Makefile ---- linux-2.6.33.3.orig/drivers/char/Makefile 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/char/Makefile 2010-05-17 20:29:49.267113605 +0200 +diff -Nur linux-2.6.34.orig/drivers/char/Makefile linux-2.6.34/drivers/char/Makefile +--- linux-2.6.34.orig/drivers/char/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/char/Makefile 2010-05-25 18:46:08.873463967 +0200 @@ -95,6 +95,7 @@ obj-$(CONFIG_PC8736x_GPIO) += pc8736x_gpio.o obj-$(CONFIG_NSC_GPIO) += nsc_gpio.o @@ -10171,9 +10173,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/char/Makefile linux-2.6.33.3/drivers/char/ obj-$(CONFIG_GPIO_TB0219) += tb0219.o obj-$(CONFIG_TELCLOCK) += tlclk.o -diff -Nur linux-2.6.33.3.orig/drivers/gpio/nxp_74hc153.c linux-2.6.33.3/drivers/gpio/nxp_74hc153.c ---- linux-2.6.33.3.orig/drivers/gpio/nxp_74hc153.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/gpio/nxp_74hc153.c 2010-01-19 19:26:38.721436935 +0100 +diff -Nur linux-2.6.34.orig/drivers/gpio/nxp_74hc153.c linux-2.6.34/drivers/gpio/nxp_74hc153.c +--- linux-2.6.34.orig/drivers/gpio/nxp_74hc153.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/gpio/nxp_74hc153.c 2010-05-25 18:46:08.913464115 +0200 @@ -0,0 +1,246 @@ +/* + * NXP 74HC153 - Dual 4-input multiplexer GPIO driver @@ -10421,9 +10423,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/gpio/nxp_74hc153.c linux-2.6.33.3/drivers/ +MODULE_DESCRIPTION("GPIO expander driver for NXP 74HC153"); +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:" NXP_74HC153_DRIVER_NAME); -diff -Nur linux-2.6.33.3.orig/drivers/input/misc/gpio_buttons.c linux-2.6.33.3/drivers/input/misc/gpio_buttons.c ---- linux-2.6.33.3.orig/drivers/input/misc/gpio_buttons.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/input/misc/gpio_buttons.c 2010-05-16 13:16:51.715600731 +0200 +diff -Nur linux-2.6.34.orig/drivers/input/misc/gpio_buttons.c linux-2.6.34/drivers/input/misc/gpio_buttons.c +--- linux-2.6.34.orig/drivers/input/misc/gpio_buttons.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/input/misc/gpio_buttons.c 2010-05-25 18:46:08.953464216 +0200 @@ -0,0 +1,216 @@ +/* + * Driver for buttons on GPIO lines not capable of generating interrupts @@ -10641,10 +10643,10 @@ diff -Nur linux-2.6.33.3.orig/drivers/input/misc/gpio_buttons.c linux-2.6.33.3/d +MODULE_VERSION(DRV_VERSION); +MODULE_DESCRIPTION("Polled buttons driver for CPU GPIOs"); + -diff -Nur linux-2.6.33.3.orig/drivers/input/misc/Kconfig linux-2.6.33.3/drivers/input/misc/Kconfig ---- linux-2.6.33.3.orig/drivers/input/misc/Kconfig 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/input/misc/Kconfig 2010-05-17 20:29:41.363933213 +0200 -@@ -319,4 +319,20 @@ +diff -Nur linux-2.6.34.orig/drivers/input/misc/Kconfig linux-2.6.34/drivers/input/misc/Kconfig +--- linux-2.6.34.orig/drivers/input/misc/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/input/misc/Kconfig 2010-05-25 18:46:08.990963497 +0200 +@@ -340,4 +340,20 @@ To compile this driver as a module, choose M here: the module will be called pcap_keys. @@ -10665,18 +10667,18 @@ diff -Nur linux-2.6.33.3.orig/drivers/input/misc/Kconfig linux-2.6.33.3/drivers/ + module will be called gpio-buttons. + endif -diff -Nur linux-2.6.33.3.orig/drivers/input/misc/Makefile linux-2.6.33.3/drivers/input/misc/Makefile ---- linux-2.6.33.3.orig/drivers/input/misc/Makefile 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/input/misc/Makefile 2010-05-17 20:29:41.363933213 +0200 -@@ -30,4 +30,5 @@ +diff -Nur linux-2.6.34.orig/drivers/input/misc/Makefile linux-2.6.34/drivers/input/misc/Makefile +--- linux-2.6.34.orig/drivers/input/misc/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/input/misc/Makefile 2010-05-25 18:46:09.023464096 +0200 +@@ -32,4 +32,5 @@ obj-$(CONFIG_INPUT_WISTRON_BTNS) += wistron_btns.o obj-$(CONFIG_INPUT_WM831X_ON) += wm831x-on.o obj-$(CONFIG_INPUT_YEALINK) += yealink.o +obj-$(CONFIG_INPUT_GPIO_BUTTONS) += gpio_buttons.o -diff -Nur linux-2.6.33.3.orig/drivers/leds/leds-rb750.c linux-2.6.33.3/drivers/leds/leds-rb750.c ---- linux-2.6.33.3.orig/drivers/leds/leds-rb750.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/leds/leds-rb750.c 2010-03-12 19:31:47.358041350 +0100 +diff -Nur linux-2.6.34.orig/drivers/leds/leds-rb750.c linux-2.6.34/drivers/leds/leds-rb750.c +--- linux-2.6.34.orig/drivers/leds/leds-rb750.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/leds/leds-rb750.c 2010-05-25 18:46:09.073472968 +0200 @@ -0,0 +1,140 @@ +/* + * LED driver for the RouterBOARD 750 @@ -10818,9 +10820,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/leds/leds-rb750.c linux-2.6.33.3/drivers/l +MODULE_DESCRIPTION("LED driver for the RouterBOARD 750"); +MODULE_AUTHOR("Gabor Juhos "); +MODULE_LICENSE("GPL v2"); -diff -Nur linux-2.6.33.3.orig/drivers/leds/leds-wndr3700-usb.c linux-2.6.33.3/drivers/leds/leds-wndr3700-usb.c ---- linux-2.6.33.3.orig/drivers/leds/leds-wndr3700-usb.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/leds/leds-wndr3700-usb.c 2009-12-13 20:45:24.579920576 +0100 +diff -Nur linux-2.6.34.orig/drivers/leds/leds-wndr3700-usb.c linux-2.6.34/drivers/leds/leds-wndr3700-usb.c +--- linux-2.6.34.orig/drivers/leds/leds-wndr3700-usb.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/leds/leds-wndr3700-usb.c 2010-05-25 18:46:09.111217247 +0200 @@ -0,0 +1,75 @@ +/* + * USB LED driver for the NETGEAR WNDR3700 @@ -10897,9 +10899,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/leds/leds-wndr3700-usb.c linux-2.6.33.3/dr +MODULE_AUTHOR("Gabor Juhos "); +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:" DRIVER_NAME); -diff -Nur linux-2.6.33.3.orig/drivers/mtd/maps/ar91xx_flash.c linux-2.6.33.3/drivers/mtd/maps/ar91xx_flash.c ---- linux-2.6.33.3.orig/drivers/mtd/maps/ar91xx_flash.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/mtd/maps/ar91xx_flash.c 2009-12-13 20:45:22.067931737 +0100 +diff -Nur linux-2.6.34.orig/drivers/mtd/maps/ar91xx_flash.c linux-2.6.34/drivers/mtd/maps/ar91xx_flash.c +--- linux-2.6.34.orig/drivers/mtd/maps/ar91xx_flash.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/mtd/maps/ar91xx_flash.c 2010-05-25 18:46:09.152223170 +0200 @@ -0,0 +1,310 @@ +/* + * Parallel flash driver for the Atheros AR91xx SoC @@ -11211,12 +11213,12 @@ diff -Nur linux-2.6.33.3.orig/drivers/mtd/maps/ar91xx_flash.c linux-2.6.33.3/dri +MODULE_AUTHOR("Gabor Juhos "); +MODULE_DESCRIPTION("Parallel flash driver for the Atheros AR91xx SoC"); +MODULE_ALIAS("platform:" DRV_NAME); -diff -Nur linux-2.6.33.3.orig/drivers/mtd/maps/Kconfig linux-2.6.33.3/drivers/mtd/maps/Kconfig ---- linux-2.6.33.3.orig/drivers/mtd/maps/Kconfig 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/mtd/maps/Kconfig 2010-05-17 16:28:48.419315145 +0200 -@@ -257,6 +257,13 @@ +diff -Nur linux-2.6.34.orig/drivers/mtd/maps/Kconfig linux-2.6.34/drivers/mtd/maps/Kconfig +--- linux-2.6.34.orig/drivers/mtd/maps/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/mtd/maps/Kconfig 2010-05-25 18:46:09.183472999 +0200 +@@ -251,6 +251,13 @@ help - Flash memory access on AMD Alchemy Pb/Db/RDK Reference Boards + Support for flash chips on NETtel/SecureEdge/SnapGear boards. +config MTD_AR91XX_FLASH + tristate "Atheros AR91xx parallel flash support" @@ -11228,20 +11230,20 @@ diff -Nur linux-2.6.33.3.orig/drivers/mtd/maps/Kconfig linux-2.6.33.3/drivers/mt config MTD_DILNETPC tristate "CFI Flash device mapped on DIL/Net PC" depends on X86 && MTD_CONCAT && MTD_PARTITIONS && MTD_CFI_INTELEXT && BROKEN -diff -Nur linux-2.6.33.3.orig/drivers/mtd/maps/Makefile linux-2.6.33.3/drivers/mtd/maps/Makefile ---- linux-2.6.33.3.orig/drivers/mtd/maps/Makefile 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/mtd/maps/Makefile 2010-05-17 16:28:48.419315145 +0200 -@@ -41,6 +41,7 @@ - obj-$(CONFIG_MTD_SOLUTIONENGINE)+= solutionengine.o - obj-$(CONFIG_MTD_PCI) += pci.o - obj-$(CONFIG_MTD_ALCHEMY) += alchemy-flash.o +diff -Nur linux-2.6.34.orig/drivers/mtd/maps/Makefile linux-2.6.34/drivers/mtd/maps/Makefile +--- linux-2.6.34.orig/drivers/mtd/maps/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/mtd/maps/Makefile 2010-05-25 19:02:05.812223036 +0200 +@@ -7,6 +7,7 @@ + endif + + # Chip mappings +obj-$(CONFIG_MTD_AR91XX_FLASH) += ar91xx_flash.o - obj-$(CONFIG_MTD_AUTCPU12) += autcpu12-nvram.o - obj-$(CONFIG_MTD_EDB7312) += edb7312.o - obj-$(CONFIG_MTD_IMPA7) += impa7.o -diff -Nur linux-2.6.33.3.orig/drivers/mtd/nand/Kconfig linux-2.6.33.3/drivers/mtd/nand/Kconfig ---- linux-2.6.33.3.orig/drivers/mtd/nand/Kconfig 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/mtd/nand/Kconfig 2010-05-17 16:29:54.255116284 +0200 + obj-$(CONFIG_MTD_CDB89712) += cdb89712.o + obj-$(CONFIG_MTD_ARM_INTEGRATOR)+= integrator-flash.o + obj-$(CONFIG_MTD_CFI_FLAGADM) += cfi_flagadm.o +diff -Nur linux-2.6.34.orig/drivers/mtd/nand/Kconfig linux-2.6.34/drivers/mtd/nand/Kconfig +--- linux-2.6.34.orig/drivers/mtd/nand/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/mtd/nand/Kconfig 2010-05-25 18:46:09.253473064 +0200 @@ -488,4 +488,8 @@ This enables the driver for the NAND Flash on evaluation board based on w90p910. @@ -11251,9 +11253,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/mtd/nand/Kconfig linux-2.6.33.3/drivers/mt + depends on MTD_NAND && AR71XX_MACH_RB4XX + endif # MTD_NAND -diff -Nur linux-2.6.33.3.orig/drivers/mtd/nand/Makefile linux-2.6.33.3/drivers/mtd/nand/Makefile ---- linux-2.6.33.3.orig/drivers/mtd/nand/Makefile 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/mtd/nand/Makefile 2010-05-17 16:29:54.255116284 +0200 +diff -Nur linux-2.6.34.orig/drivers/mtd/nand/Makefile linux-2.6.34/drivers/mtd/nand/Makefile +--- linux-2.6.34.orig/drivers/mtd/nand/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/mtd/nand/Makefile 2010-05-25 18:46:09.291161582 +0200 @@ -30,6 +30,7 @@ obj-$(CONFIG_MTD_NAND_PXA3xx) += pxa3xx_nand.o obj-$(CONFIG_MTD_NAND_TMIO) += tmio_nand.o @@ -11262,10 +11264,10 @@ diff -Nur linux-2.6.33.3.orig/drivers/mtd/nand/Makefile linux-2.6.33.3/drivers/m obj-$(CONFIG_MTD_ALAUDA) += alauda.o obj-$(CONFIG_MTD_NAND_PASEMI) += pasemi_nand.o obj-$(CONFIG_MTD_NAND_ORION) += orion_nand.o -diff -Nur linux-2.6.33.3.orig/drivers/mtd/nand/rb4xx_nand.c linux-2.6.33.3/drivers/mtd/nand/rb4xx_nand.c ---- linux-2.6.33.3.orig/drivers/mtd/nand/rb4xx_nand.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/mtd/nand/rb4xx_nand.c 2010-05-19 18:58:03.499116406 +0200 -@@ -0,0 +1,512 @@ +diff -Nur linux-2.6.34.orig/drivers/mtd/nand/rb4xx_nand.c linux-2.6.34/drivers/mtd/nand/rb4xx_nand.c +--- linux-2.6.34.orig/drivers/mtd/nand/rb4xx_nand.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/mtd/nand/rb4xx_nand.c 2010-05-25 19:20:29.870979934 +0200 +@@ -0,0 +1,513 @@ +/* + * NAND flash driver for the MikroTik RouterBoard 4xx series + * @@ -11288,6 +11290,7 @@ diff -Nur linux-2.6.33.3.orig/drivers/mtd/nand/rb4xx_nand.c linux-2.6.33.3/drive +#include +#include +#include ++#include + +#include + @@ -11778,9 +11781,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/mtd/nand/rb4xx_nand.c linux-2.6.33.3/drive +MODULE_AUTHOR("Gabor Juhos "); +MODULE_AUTHOR("Imre Kaloz "); +MODULE_LICENSE("GPL v2"); -diff -Nur linux-2.6.33.3.orig/drivers/mtd/nand/rb750_nand.c linux-2.6.33.3/drivers/mtd/nand/rb750_nand.c ---- linux-2.6.33.3.orig/drivers/mtd/nand/rb750_nand.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/mtd/nand/rb750_nand.c 2010-03-12 19:31:47.026043474 +0100 +diff -Nur linux-2.6.34.orig/drivers/mtd/nand/rb750_nand.c linux-2.6.34/drivers/mtd/nand/rb750_nand.c +--- linux-2.6.34.orig/drivers/mtd/nand/rb750_nand.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/mtd/nand/rb750_nand.c 2010-05-25 18:46:09.381633487 +0200 @@ -0,0 +1,360 @@ +/* + * NAND flash driver for the MikroTik RouterBOARD 750 @@ -12142,9 +12145,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/mtd/nand/rb750_nand.c linux-2.6.33.3/drive +MODULE_VERSION(DRV_VERSION); +MODULE_AUTHOR("Gabor Juhos "); +MODULE_LICENSE("GPL v2"); -diff -Nur linux-2.6.33.3.orig/drivers/mtd/wrt160nl_part.c linux-2.6.33.3/drivers/mtd/wrt160nl_part.c ---- linux-2.6.33.3.orig/drivers/mtd/wrt160nl_part.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/mtd/wrt160nl_part.c 2010-04-02 11:07:52.154964482 +0200 +diff -Nur linux-2.6.34.orig/drivers/mtd/wrt160nl_part.c linux-2.6.34/drivers/mtd/wrt160nl_part.c +--- linux-2.6.34.orig/drivers/mtd/wrt160nl_part.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/mtd/wrt160nl_part.c 2010-05-25 18:46:09.413464327 +0200 @@ -0,0 +1,181 @@ +/* + * Copyright (C) 2009 Christian Daniel @@ -12327,9 +12330,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/mtd/wrt160nl_part.c linux-2.6.33.3/drivers + +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Christian Daniel "); -diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_ar8216.c linux-2.6.33.3/drivers/net/ag71xx/ag71xx_ar8216.c ---- linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_ar8216.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/net/ag71xx/ag71xx_ar8216.c 2010-05-16 13:17:33.387600561 +0200 +diff -Nur linux-2.6.34.orig/drivers/net/ag71xx/ag71xx_ar8216.c linux-2.6.34/drivers/net/ag71xx/ag71xx_ar8216.c +--- linux-2.6.34.orig/drivers/net/ag71xx/ag71xx_ar8216.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/net/ag71xx/ag71xx_ar8216.c 2010-05-25 18:46:09.453464158 +0200 @@ -0,0 +1,44 @@ +/* + * Atheros AR71xx built-in ethernet mac driver @@ -12375,9 +12378,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_ar8216.c linux-2.6.33.3/ + skb_pull(skb, AR8216_HEADER_LEN); + return 0; +} -diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_debugfs.c linux-2.6.33.3/drivers/net/ag71xx/ag71xx_debugfs.c ---- linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_debugfs.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/net/ag71xx/ag71xx_debugfs.c 2010-01-11 19:25:55.893395656 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/ag71xx/ag71xx_debugfs.c linux-2.6.34/drivers/net/ag71xx/ag71xx_debugfs.c +--- linux-2.6.34.orig/drivers/net/ag71xx/ag71xx_debugfs.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/net/ag71xx/ag71xx_debugfs.c 2010-05-25 18:46:09.493464124 +0200 @@ -0,0 +1,197 @@ +/* + * Atheros AR71xx built-in ethernet mac driver @@ -12576,9 +12579,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_debugfs.c linux-2.6.33.3 + debugfs_remove(ag71xx_debugfs_root); + ag71xx_debugfs_root = NULL; +} -diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_ethtool.c linux-2.6.33.3/drivers/net/ag71xx/ag71xx_ethtool.c ---- linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_ethtool.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/net/ag71xx/ag71xx_ethtool.c 2010-01-05 20:38:53.433277722 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/ag71xx/ag71xx_ethtool.c linux-2.6.34/drivers/net/ag71xx/ag71xx_ethtool.c +--- linux-2.6.34.orig/drivers/net/ag71xx/ag71xx_ethtool.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/net/ag71xx/ag71xx_ethtool.c 2010-05-25 18:46:09.523473138 +0200 @@ -0,0 +1,71 @@ +/* + * Atheros AR71xx built-in ethernet mac driver @@ -12651,9 +12654,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_ethtool.c linux-2.6.33.3 + .set_msglevel = ag71xx_ethtool_set_msglevel, + .get_link = ethtool_op_get_link, +}; -diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx.h linux-2.6.33.3/drivers/net/ag71xx/ag71xx.h ---- linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/net/ag71xx/ag71xx.h 2010-04-14 21:17:13.718345809 +0200 +diff -Nur linux-2.6.34.orig/drivers/net/ag71xx/ag71xx.h linux-2.6.34/drivers/net/ag71xx/ag71xx.h +--- linux-2.6.34.orig/drivers/net/ag71xx/ag71xx.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/net/ag71xx/ag71xx.h 2010-05-25 18:46:09.553473141 +0200 @@ -0,0 +1,500 @@ +/* + * Atheros AR71xx built-in ethernet mac driver @@ -13155,9 +13158,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx.h linux-2.6.33.3/drivers +#endif /* CONFIG_AG71XX_DEBUG_FS */ + +#endif /* _AG71XX_H */ -diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_main.c linux-2.6.33.3/drivers/net/ag71xx/ag71xx_main.c ---- linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_main.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/net/ag71xx/ag71xx_main.c 2010-05-16 13:17:33.403605954 +0200 +diff -Nur linux-2.6.34.orig/drivers/net/ag71xx/ag71xx_main.c linux-2.6.34/drivers/net/ag71xx/ag71xx_main.c +--- linux-2.6.34.orig/drivers/net/ag71xx/ag71xx_main.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/net/ag71xx/ag71xx_main.c 2010-05-25 18:46:09.593464126 +0200 @@ -0,0 +1,1184 @@ +/* + * Atheros AR71xx built-in ethernet mac driver @@ -14343,9 +14346,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_main.c linux-2.6.33.3/dr +MODULE_AUTHOR("Imre Kaloz "); +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:" AG71XX_DRV_NAME); -diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_mdio.c linux-2.6.33.3/drivers/net/ag71xx/ag71xx_mdio.c ---- linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_mdio.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/net/ag71xx/ag71xx_mdio.c 2010-01-05 20:38:53.413280204 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/ag71xx/ag71xx_mdio.c linux-2.6.34/drivers/net/ag71xx/ag71xx_mdio.c +--- linux-2.6.34.orig/drivers/net/ag71xx/ag71xx_mdio.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/net/ag71xx/ag71xx_mdio.c 2010-05-25 18:46:09.633464081 +0200 @@ -0,0 +1,243 @@ +/* + * Atheros AR71xx built-in ethernet mac driver @@ -14590,9 +14593,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_mdio.c linux-2.6.33.3/dr +{ + platform_driver_unregister(&ag71xx_mdio_driver); +} -diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_phy.c linux-2.6.33.3/drivers/net/ag71xx/ag71xx_phy.c ---- linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_phy.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/net/ag71xx/ag71xx_phy.c 2010-03-23 20:31:06.040706961 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/ag71xx/ag71xx_phy.c linux-2.6.34/drivers/net/ag71xx/ag71xx_phy.c +--- linux-2.6.34.orig/drivers/net/ag71xx/ag71xx_phy.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/net/ag71xx/ag71xx_phy.c 2010-05-25 18:46:09.663473144 +0200 @@ -0,0 +1,213 @@ +/* + * Atheros AR71xx built-in ethernet mac driver @@ -14807,9 +14810,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/ag71xx_phy.c linux-2.6.33.3/dri + if (ag->phy_dev) + phy_disconnect(ag->phy_dev); +} -diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/Kconfig linux-2.6.33.3/drivers/net/ag71xx/Kconfig ---- linux-2.6.33.3.orig/drivers/net/ag71xx/Kconfig 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/net/ag71xx/Kconfig 2010-04-02 11:07:52.574971060 +0200 +diff -Nur linux-2.6.34.orig/drivers/net/ag71xx/Kconfig linux-2.6.34/drivers/net/ag71xx/Kconfig +--- linux-2.6.34.orig/drivers/net/ag71xx/Kconfig 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/net/ag71xx/Kconfig 2010-05-25 18:46:09.693473072 +0200 @@ -0,0 +1,33 @@ +config AG71XX + tristate "Atheros AR71xx built-in ethernet mac support" @@ -14844,9 +14847,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/Kconfig linux-2.6.33.3/drivers/ + Atheros AR8216 switch found on some boards. + +endif -diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/Makefile linux-2.6.33.3/drivers/net/ag71xx/Makefile ---- linux-2.6.33.3.orig/drivers/net/ag71xx/Makefile 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/net/ag71xx/Makefile 2010-01-05 20:38:53.413280204 +0100 +diff -Nur linux-2.6.34.orig/drivers/net/ag71xx/Makefile linux-2.6.34/drivers/net/ag71xx/Makefile +--- linux-2.6.34.orig/drivers/net/ag71xx/Makefile 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/net/ag71xx/Makefile 2010-05-25 18:46:09.733464200 +0200 @@ -0,0 +1,14 @@ +# +# Makefile for the Atheros AR71xx built-in ethernet macs @@ -14862,10 +14865,10 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/ag71xx/Makefile linux-2.6.33.3/drivers + +obj-$(CONFIG_AG71XX) += ag71xx.o + -diff -Nur linux-2.6.33.3.orig/drivers/net/Kconfig linux-2.6.33.3/drivers/net/Kconfig ---- linux-2.6.33.3.orig/drivers/net/Kconfig 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/net/Kconfig 2010-05-17 16:28:38.519115009 +0200 -@@ -2005,6 +2005,8 @@ +diff -Nur linux-2.6.34.orig/drivers/net/Kconfig linux-2.6.34/drivers/net/Kconfig +--- linux-2.6.34.orig/drivers/net/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/net/Kconfig 2010-05-25 18:46:09.773464179 +0200 +@@ -2038,6 +2038,8 @@ The safe and default value for this is N. @@ -14874,10 +14877,10 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/Kconfig linux-2.6.33.3/drivers/net/Kco config DL2K tristate "DL2000/TC902x-based Gigabit Ethernet support" depends on PCI -diff -Nur linux-2.6.33.3.orig/drivers/net/Makefile linux-2.6.33.3/drivers/net/Makefile ---- linux-2.6.33.3.orig/drivers/net/Makefile 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/net/Makefile 2010-05-17 16:28:38.519115009 +0200 -@@ -106,6 +106,7 @@ +diff -Nur linux-2.6.34.orig/drivers/net/Makefile linux-2.6.34/drivers/net/Makefile +--- linux-2.6.34.orig/drivers/net/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/net/Makefile 2010-05-25 18:46:09.813473236 +0200 +@@ -109,6 +109,7 @@ # end link order section # @@ -14885,12 +14888,12 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/Makefile linux-2.6.33.3/drivers/net/Ma obj-$(CONFIG_SUNDANCE) += sundance.o obj-$(CONFIG_HAMACHI) += hamachi.o obj-$(CONFIG_NET) += Space.o loopback.o -diff -Nur linux-2.6.33.3.orig/drivers/net/phy/Kconfig linux-2.6.33.3/drivers/net/phy/Kconfig ---- linux-2.6.33.3.orig/drivers/net/phy/Kconfig 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/net/phy/Kconfig 2010-05-17 22:25:24.119127715 +0200 -@@ -88,6 +88,10 @@ +diff -Nur linux-2.6.34.orig/drivers/net/phy/Kconfig linux-2.6.34/drivers/net/phy/Kconfig +--- linux-2.6.34.orig/drivers/net/phy/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/net/phy/Kconfig 2010-05-25 18:46:09.863473083 +0200 +@@ -93,6 +93,10 @@ ---help--- - Supports the LSI ET1011C PHY. + Supports the KSZ9021, VSC8201, KS8001 PHYs. +config IP175C_PHY + tristate "Driver for IC+ IP175C/IP178C switches" @@ -14899,96 +14902,10 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/phy/Kconfig linux-2.6.33.3/drivers/net config FIXED_PHY bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs" depends on PHYLIB=y -diff -Nur linux-2.6.33.3.orig/drivers/net/phy/micrel.c linux-2.6.33.3/drivers/net/phy/micrel.c ---- linux-2.6.33.3.orig/drivers/net/phy/micrel.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/net/phy/micrel.c 2009-12-13 20:45:24.083925758 +0100 -@@ -0,0 +1,82 @@ -+/* -+ * Driver for Micrel/Kendin PHYs -+ * -+ * Copyright (c) 2008-2009 Gabor Juhos -+ * Copyright (C) 2008 Imre Kaloz -+ * -+ * This program is free software; you can redistribute it and/or modify it -+ * under the terms of the GNU General Public License version 2 as published -+ * by the Free Software Foundation. -+ * -+ */ -+ -+#include -+#include -+#include -+ -+#define KSZ_REG_INT_CTRL 0x1b -+ -+#define KSZ_INT_LU_EN (1 << 8) /* enable Link Up interrupt */ -+#define KSZ_INT_RF_EN (1 << 9) /* enable Remote Fault interrupt */ -+#define KSZ_INT_LD_EN (1 << 10) /* enable Link Down interrupt */ -+ -+#define KSZ_INT_INIT (KSZ_INT_LU_EN | KSZ_INT_LD_EN) -+ -+static int ksz8041_ack_interrupt(struct phy_device *phydev) -+{ -+ int err; -+ -+ err = phy_read(phydev, KSZ_REG_INT_CTRL); -+ -+ return (err < 0) ? err : 0; -+} -+ -+static int ksz8041_config_intr(struct phy_device *phydev) -+{ -+ int err; -+ -+ if (phydev->interrupts == PHY_INTERRUPT_ENABLED) -+ err = phy_write(phydev, KSZ_REG_INT_CTRL, -+ KSZ_INT_INIT); -+ else -+ err = phy_write(phydev, KSZ_REG_INT_CTRL, 0); -+ -+ return err; -+} -+ -+static struct phy_driver ksz8041_phy_driver = { -+ .phy_id = 0x00221512, -+ .name = "Micrel KSZ8041", -+ .phy_id_mask = 0x001fffff, -+ .features = PHY_BASIC_FEATURES, -+ .flags = PHY_HAS_INTERRUPT, -+ .config_aneg = genphy_config_aneg, -+ .read_status = genphy_read_status, -+ .ack_interrupt = ksz8041_ack_interrupt, -+ .config_intr = ksz8041_config_intr, -+ .driver = { -+ .owner = THIS_MODULE, -+ }, -+}; -+ -+static int __init micrel_phy_init(void) -+{ -+ return phy_driver_register(&ksz8041_phy_driver); -+} -+ -+static void __exit micrel_phy_exit(void) -+{ -+ phy_driver_unregister(&ksz8041_phy_driver); -+} -+ -+#ifdef MODULE -+module_init(micrel_phy_init); -+module_exit(micrel_phy_exit); -+#else -+subsys_initcall(micrel_phy_init); -+#endif -+ -+MODULE_DESCRIPTION("Micrel/Kendin PHY driver"); -+MODULE_AUTHOR("Gabor Juhos "); -+MODULE_AUTHOR("Imre Kaloz "); -+MODULE_LICENSE("GPL v2"); -diff -Nur linux-2.6.33.3.orig/drivers/net/phy/phy.c linux-2.6.33.3/drivers/net/phy/phy.c ---- linux-2.6.33.3.orig/drivers/net/phy/phy.c 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/net/phy/phy.c 2010-05-17 21:40:09.635111896 +0200 -@@ -299,6 +299,50 @@ +diff -Nur linux-2.6.34.orig/drivers/net/phy/phy.c linux-2.6.34/drivers/net/phy/phy.c +--- linux-2.6.34.orig/drivers/net/phy/phy.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/net/phy/phy.c 2010-05-25 18:46:12.573473234 +0200 +@@ -298,6 +298,50 @@ } EXPORT_SYMBOL(phy_ethtool_gset); @@ -15039,7 +14956,7 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/phy/phy.c linux-2.6.33.3/drivers/net/p /** * phy_mii_ioctl - generic PHY MII ioctl interface * @phydev: the phy_device struct -@@ -352,7 +396,7 @@ +@@ -351,7 +395,7 @@ } phy_write(phydev, mii_data->reg_num, val); @@ -15048,7 +14965,7 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/phy/phy.c linux-2.6.33.3/drivers/net/p if (mii_data->reg_num == MII_BMCR && val & BMCR_RESET && phydev->drv->config_init) { -@@ -466,7 +510,7 @@ +@@ -465,7 +509,7 @@ int idx; idx = phy_find_setting(phydev->speed, phydev->duplex); @@ -15057,9 +14974,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/phy/phy.c linux-2.6.33.3/drivers/net/p idx++; idx = phy_find_valid(idx, phydev->supported); -diff -Nur linux-2.6.33.3.orig/drivers/net/phy/phy_device.c linux-2.6.33.3/drivers/net/phy/phy_device.c ---- linux-2.6.33.3.orig/drivers/net/phy/phy_device.c 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/net/phy/phy_device.c 2010-05-17 21:40:17.019371728 +0200 +diff -Nur linux-2.6.34.orig/drivers/net/phy/phy_device.c linux-2.6.34/drivers/net/phy/phy_device.c +--- linux-2.6.34.orig/drivers/net/phy/phy_device.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/net/phy/phy_device.c 2010-05-25 18:46:12.660978620 +0200 @@ -146,6 +146,18 @@ } EXPORT_SYMBOL(phy_scan_fixups); @@ -15088,9 +15005,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/net/phy/phy_device.c linux-2.6.33.3/driver mutex_init(&dev->lock); INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine); -diff -Nur linux-2.6.33.3.orig/drivers/spi/ap83_spi.c linux-2.6.33.3/drivers/spi/ap83_spi.c ---- linux-2.6.33.3.orig/drivers/spi/ap83_spi.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/spi/ap83_spi.c 2009-12-13 20:45:24.855922705 +0100 +diff -Nur linux-2.6.34.orig/drivers/spi/ap83_spi.c linux-2.6.34/drivers/spi/ap83_spi.c +--- linux-2.6.34.orig/drivers/spi/ap83_spi.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/spi/ap83_spi.c 2010-05-25 18:46:12.703464112 +0200 @@ -0,0 +1,282 @@ +/* + * Atheros AP83 board specific SPI Controller driver @@ -15374,9 +15291,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/spi/ap83_spi.c linux-2.6.33.3/drivers/spi/ +MODULE_VERSION(DRV_VERSION); +MODULE_AUTHOR("Gabor Juhos "); +MODULE_LICENSE("GPL v2"); -diff -Nur linux-2.6.33.3.orig/drivers/spi/ar71xx_spi.c linux-2.6.33.3/drivers/spi/ar71xx_spi.c ---- linux-2.6.33.3.orig/drivers/spi/ar71xx_spi.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/spi/ar71xx_spi.c 2009-12-13 20:45:24.851921034 +0100 +diff -Nur linux-2.6.34.orig/drivers/spi/ar71xx_spi.c linux-2.6.34/drivers/spi/ar71xx_spi.c +--- linux-2.6.34.orig/drivers/spi/ar71xx_spi.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/spi/ar71xx_spi.c 2010-05-25 18:46:12.743464042 +0200 @@ -0,0 +1,283 @@ +/* + * Atheros AR71xx SPI Controller driver @@ -15661,9 +15578,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/spi/ar71xx_spi.c linux-2.6.33.3/drivers/sp +MODULE_AUTHOR("Gabor Juhos "); +MODULE_AUTHOR("Imre Kaloz "); +MODULE_LICENSE("GPL v2"); -diff -Nur linux-2.6.33.3.orig/drivers/spi/Kconfig linux-2.6.33.3/drivers/spi/Kconfig ---- linux-2.6.33.3.orig/drivers/spi/Kconfig 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/spi/Kconfig 2010-05-17 16:28:32.431125868 +0200 +diff -Nur linux-2.6.34.orig/drivers/spi/Kconfig linux-2.6.34/drivers/spi/Kconfig +--- linux-2.6.34.orig/drivers/spi/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/spi/Kconfig 2010-05-25 18:46:12.800978217 +0200 @@ -53,6 +53,13 @@ comment "SPI Master Controller Drivers" @@ -15678,9 +15595,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/spi/Kconfig linux-2.6.33.3/drivers/spi/Kco config SPI_ATMEL tristate "Atmel SPI Controller" depends on (ARCH_AT91 || AVR32) -diff -Nur linux-2.6.33.3.orig/drivers/spi/Makefile linux-2.6.33.3/drivers/spi/Makefile ---- linux-2.6.33.3.orig/drivers/spi/Makefile 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/spi/Makefile 2010-05-17 16:28:32.431125868 +0200 +diff -Nur linux-2.6.34.orig/drivers/spi/Makefile linux-2.6.34/drivers/spi/Makefile +--- linux-2.6.34.orig/drivers/spi/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/spi/Makefile 2010-05-25 18:46:12.843464070 +0200 @@ -11,6 +11,7 @@ obj-$(CONFIG_SPI_MASTER) += spi.o @@ -15689,9 +15606,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/spi/Makefile linux-2.6.33.3/drivers/spi/Ma obj-$(CONFIG_SPI_ATMEL) += atmel_spi.o obj-$(CONFIG_SPI_BFIN) += spi_bfin5xx.o obj-$(CONFIG_SPI_BITBANG) += spi_bitbang.o -diff -Nur linux-2.6.33.3.orig/drivers/spi/pb44_spi.c linux-2.6.33.3/drivers/spi/pb44_spi.c ---- linux-2.6.33.3.orig/drivers/spi/pb44_spi.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/spi/pb44_spi.c 2009-12-13 20:45:24.847920760 +0100 +diff -Nur linux-2.6.34.orig/drivers/spi/pb44_spi.c linux-2.6.34/drivers/spi/pb44_spi.c +--- linux-2.6.34.orig/drivers/spi/pb44_spi.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/spi/pb44_spi.c 2010-05-25 18:46:12.882113964 +0200 @@ -0,0 +1,299 @@ +/* + * Atheros PB44 board SPI controller driver @@ -15992,9 +15909,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/spi/pb44_spi.c linux-2.6.33.3/drivers/spi/ +MODULE_VERSION(DRV_VERSION); +MODULE_AUTHOR("Gabor Juhos "); +MODULE_LICENSE("GPL v2"); -diff -Nur linux-2.6.33.3.orig/drivers/spi/spi_vsc7385.c linux-2.6.33.3/drivers/spi/spi_vsc7385.c ---- linux-2.6.33.3.orig/drivers/spi/spi_vsc7385.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/spi/spi_vsc7385.c 2009-12-13 20:45:24.863922134 +0100 +diff -Nur linux-2.6.34.orig/drivers/spi/spi_vsc7385.c linux-2.6.34/drivers/spi/spi_vsc7385.c +--- linux-2.6.34.orig/drivers/spi/spi_vsc7385.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/spi/spi_vsc7385.c 2010-05-25 18:46:12.923471407 +0200 @@ -0,0 +1,620 @@ +/* + * SPI driver for the Vitesse VSC7385 ethernet switch @@ -16616,9 +16533,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/spi/spi_vsc7385.c linux-2.6.33.3/drivers/s +MODULE_AUTHOR("Gabor Juhos "); +MODULE_LICENSE("GPL v2"); + -diff -Nur linux-2.6.33.3.orig/drivers/usb/host/ehci-ar71xx.c linux-2.6.33.3/drivers/usb/host/ehci-ar71xx.c ---- linux-2.6.33.3.orig/drivers/usb/host/ehci-ar71xx.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/usb/host/ehci-ar71xx.c 2010-02-09 00:28:55.636370581 +0100 +diff -Nur linux-2.6.34.orig/drivers/usb/host/ehci-ar71xx.c linux-2.6.34/drivers/usb/host/ehci-ar71xx.c +--- linux-2.6.34.orig/drivers/usb/host/ehci-ar71xx.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/usb/host/ehci-ar71xx.c 2010-05-25 18:46:12.962223093 +0200 @@ -0,0 +1,242 @@ +/* + * Bus Glue for Atheros AR71xx built-in EHCI controller. @@ -16862,10 +16779,10 @@ diff -Nur linux-2.6.33.3.orig/drivers/usb/host/ehci-ar71xx.c linux-2.6.33.3/driv + .name = "ar71xx-ehci", + } +}; -diff -Nur linux-2.6.33.3.orig/drivers/usb/host/ehci-hcd.c linux-2.6.33.3/drivers/usb/host/ehci-hcd.c ---- linux-2.6.33.3.orig/drivers/usb/host/ehci-hcd.c 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/usb/host/ehci-hcd.c 2010-05-17 16:28:28.159113855 +0200 -@@ -1158,6 +1158,11 @@ +diff -Nur linux-2.6.34.orig/drivers/usb/host/ehci-hcd.c linux-2.6.34/drivers/usb/host/ehci-hcd.c +--- linux-2.6.34.orig/drivers/usb/host/ehci-hcd.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/usb/host/ehci-hcd.c 2010-05-25 18:46:13.003464099 +0200 +@@ -1159,6 +1159,11 @@ #define PLATFORM_DRIVER ehci_atmel_driver #endif @@ -16877,9 +16794,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/usb/host/ehci-hcd.c linux-2.6.33.3/drivers #if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \ !defined(PS3_SYSTEM_BUS_DRIVER) && !defined(OF_PLATFORM_DRIVER) #error "missing bus glue for ehci-hcd" -diff -Nur linux-2.6.33.3.orig/drivers/usb/host/Kconfig linux-2.6.33.3/drivers/usb/host/Kconfig ---- linux-2.6.33.3.orig/drivers/usb/host/Kconfig 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/usb/host/Kconfig 2010-05-17 16:28:28.155130666 +0200 +diff -Nur linux-2.6.34.orig/drivers/usb/host/Kconfig linux-2.6.34/drivers/usb/host/Kconfig +--- linux-2.6.34.orig/drivers/usb/host/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/usb/host/Kconfig 2010-05-25 18:46:13.040970869 +0200 @@ -109,6 +109,13 @@ support both high speed and full speed devices, or high speed devices only. @@ -16908,9 +16825,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/usb/host/Kconfig linux-2.6.33.3/drivers/us config USB_OHCI_HCD_PPC_SOC bool "OHCI support for on-chip PPC USB controller" depends on USB_OHCI_HCD && (STB03xxx || PPC_MPC52xx) -diff -Nur linux-2.6.33.3.orig/drivers/usb/host/ohci-ar71xx.c linux-2.6.33.3/drivers/usb/host/ohci-ar71xx.c ---- linux-2.6.33.3.orig/drivers/usb/host/ohci-ar71xx.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/usb/host/ohci-ar71xx.c 2009-12-13 20:45:24.747935158 +0100 +diff -Nur linux-2.6.34.orig/drivers/usb/host/ohci-ar71xx.c linux-2.6.34/drivers/usb/host/ohci-ar71xx.c +--- linux-2.6.34.orig/drivers/usb/host/ohci-ar71xx.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/usb/host/ohci-ar71xx.c 2010-05-25 18:46:13.093473080 +0200 @@ -0,0 +1,165 @@ +/* + * OHCI HCD (Host Controller Driver) for USB. @@ -17077,10 +16994,10 @@ diff -Nur linux-2.6.33.3.orig/drivers/usb/host/ohci-ar71xx.c linux-2.6.33.3/driv + .owner = THIS_MODULE, + }, +}; -diff -Nur linux-2.6.33.3.orig/drivers/usb/host/ohci-hcd.c linux-2.6.33.3/drivers/usb/host/ohci-hcd.c ---- linux-2.6.33.3.orig/drivers/usb/host/ohci-hcd.c 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/usb/host/ohci-hcd.c 2010-05-17 16:28:28.163114085 +0200 -@@ -1085,6 +1085,11 @@ +diff -Nur linux-2.6.34.orig/drivers/usb/host/ohci-hcd.c linux-2.6.34/drivers/usb/host/ohci-hcd.c +--- linux-2.6.34.orig/drivers/usb/host/ohci-hcd.c 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/usb/host/ohci-hcd.c 2010-05-25 18:46:13.132223090 +0200 +@@ -1090,6 +1090,11 @@ #define TMIO_OHCI_DRIVER ohci_hcd_tmio_driver #endif @@ -17092,9 +17009,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/usb/host/ohci-hcd.c linux-2.6.33.3/drivers #if !defined(PCI_DRIVER) && \ !defined(PLATFORM_DRIVER) && \ !defined(OF_PLATFORM_DRIVER) && \ -diff -Nur linux-2.6.33.3.orig/drivers/watchdog/ar71xx_wdt.c linux-2.6.33.3/drivers/watchdog/ar71xx_wdt.c ---- linux-2.6.33.3.orig/drivers/watchdog/ar71xx_wdt.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/drivers/watchdog/ar71xx_wdt.c 2009-12-13 20:45:21.895926395 +0100 +diff -Nur linux-2.6.34.orig/drivers/watchdog/ar71xx_wdt.c linux-2.6.34/drivers/watchdog/ar71xx_wdt.c +--- linux-2.6.34.orig/drivers/watchdog/ar71xx_wdt.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/drivers/watchdog/ar71xx_wdt.c 2010-05-25 18:46:13.163473025 +0200 @@ -0,0 +1,270 @@ +/* + * Driver for the Atheros AR71xx SoC's built-in hardware watchdog timer. @@ -17366,10 +17283,10 @@ diff -Nur linux-2.6.33.3.orig/drivers/watchdog/ar71xx_wdt.c linux-2.6.33.3/drive +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:" DRV_NAME); +MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR); -diff -Nur linux-2.6.33.3.orig/drivers/watchdog/Kconfig linux-2.6.33.3/drivers/watchdog/Kconfig ---- linux-2.6.33.3.orig/drivers/watchdog/Kconfig 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/watchdog/Kconfig 2010-05-17 16:28:43.991113674 +0200 -@@ -840,6 +840,13 @@ +diff -Nur linux-2.6.34.orig/drivers/watchdog/Kconfig linux-2.6.34/drivers/watchdog/Kconfig +--- linux-2.6.34.orig/drivers/watchdog/Kconfig 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/watchdog/Kconfig 2010-05-25 18:46:13.203464018 +0200 +@@ -857,6 +857,13 @@ help Hardware driver for the built-in watchdog timer on TXx9 MIPS SoCs. @@ -17383,10 +17300,10 @@ diff -Nur linux-2.6.33.3.orig/drivers/watchdog/Kconfig linux-2.6.33.3/drivers/wa # PARISC Architecture # POWERPC Architecture -diff -Nur linux-2.6.33.3.orig/drivers/watchdog/Makefile linux-2.6.33.3/drivers/watchdog/Makefile ---- linux-2.6.33.3.orig/drivers/watchdog/Makefile 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/drivers/watchdog/Makefile 2010-05-17 16:28:43.991113674 +0200 -@@ -112,6 +112,7 @@ +diff -Nur linux-2.6.34.orig/drivers/watchdog/Makefile linux-2.6.34/drivers/watchdog/Makefile +--- linux-2.6.34.orig/drivers/watchdog/Makefile 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/drivers/watchdog/Makefile 2010-05-25 18:46:13.242223206 +0200 +@@ -113,6 +113,7 @@ obj-$(CONFIG_SIBYTE_WDOG) += sb_wdog.o obj-$(CONFIG_AR7_WDT) += ar7_wdt.o obj-$(CONFIG_TXX9_WDT) += txx9wdt.o @@ -17394,9 +17311,9 @@ diff -Nur linux-2.6.33.3.orig/drivers/watchdog/Makefile linux-2.6.33.3/drivers/w # PARISC Architecture -diff -Nur linux-2.6.33.3.orig/include/linux/ath9k_platform.h linux-2.6.33.3/include/linux/ath9k_platform.h ---- linux-2.6.33.3.orig/include/linux/ath9k_platform.h 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/include/linux/ath9k_platform.h 2010-02-13 16:30:06.932691714 +0100 +diff -Nur linux-2.6.34.orig/include/linux/ath9k_platform.h linux-2.6.34/include/linux/ath9k_platform.h +--- linux-2.6.34.orig/include/linux/ath9k_platform.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/include/linux/ath9k_platform.h 2010-05-25 18:46:13.283473018 +0200 @@ -1,19 +1,11 @@ /* - * Copyright (c) 2008 Atheros Communications Inc. @@ -17432,9 +17349,9 @@ diff -Nur linux-2.6.33.3.orig/include/linux/ath9k_platform.h linux-2.6.33.3/incl }; #endif /* _LINUX_ATH9K_PLATFORM_H */ -diff -Nur linux-2.6.33.3.orig/include/linux/gpio_buttons.h linux-2.6.33.3/include/linux/gpio_buttons.h ---- linux-2.6.33.3.orig/include/linux/gpio_buttons.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/include/linux/gpio_buttons.h 2010-05-17 20:56:04.279120442 +0200 +diff -Nur linux-2.6.34.orig/include/linux/gpio_buttons.h linux-2.6.34/include/linux/gpio_buttons.h +--- linux-2.6.34.orig/include/linux/gpio_buttons.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/include/linux/gpio_buttons.h 2010-05-25 18:46:13.322223192 +0200 @@ -0,0 +1,33 @@ +/* + * Definitions for the GPIO buttons interface driver @@ -17469,9 +17386,9 @@ diff -Nur linux-2.6.33.3.orig/include/linux/gpio_buttons.h linux-2.6.33.3/includ +}; + +#endif /* _GPIO_BUTTONS_H_ */ -diff -Nur linux-2.6.33.3.orig/include/linux/gpio_dev.h linux-2.6.33.3/include/linux/gpio_dev.h ---- linux-2.6.33.3.orig/include/linux/gpio_dev.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/include/linux/gpio_dev.h 2010-05-17 20:56:04.293291521 +0200 +diff -Nur linux-2.6.34.orig/include/linux/gpio_dev.h linux-2.6.34/include/linux/gpio_dev.h +--- linux-2.6.34.orig/include/linux/gpio_dev.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/include/linux/gpio_dev.h 2010-05-25 18:46:13.380969951 +0200 @@ -0,0 +1,11 @@ +#ifndef _GPIODEV_H__ +#define _GPIODEV_H__ @@ -17484,10 +17401,10 @@ diff -Nur linux-2.6.33.3.orig/include/linux/gpio_dev.h linux-2.6.33.3/include/li +#define GPIO_DIR_OUT _IO(IOC_GPIODEV_MAGIC, 14) + +#endif -diff -Nur linux-2.6.33.3.orig/include/linux/netdevice.h linux-2.6.33.3/include/linux/netdevice.h ---- linux-2.6.33.3.orig/include/linux/netdevice.h 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/include/linux/netdevice.h 2010-05-17 21:40:17.027115732 +0200 -@@ -844,6 +844,7 @@ +diff -Nur linux-2.6.34.orig/include/linux/netdevice.h linux-2.6.34/include/linux/netdevice.h +--- linux-2.6.34.orig/include/linux/netdevice.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/include/linux/netdevice.h 2010-05-25 18:46:13.412222988 +0200 +@@ -863,6 +863,7 @@ void *ax25_ptr; /* AX.25 specific data */ struct wireless_dev *ieee80211_ptr; /* IEEE 802.11 specific data, assign before registering */ @@ -17495,9 +17412,9 @@ diff -Nur linux-2.6.33.3.orig/include/linux/netdevice.h linux-2.6.33.3/include/l /* * Cache line mostly used on receive path (including eth_type_trans()) -diff -Nur linux-2.6.33.3.orig/include/linux/nxp_74hc153.h linux-2.6.33.3/include/linux/nxp_74hc153.h ---- linux-2.6.33.3.orig/include/linux/nxp_74hc153.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/include/linux/nxp_74hc153.h 2010-01-19 19:26:36.441435904 +0100 +diff -Nur linux-2.6.34.orig/include/linux/nxp_74hc153.h linux-2.6.34/include/linux/nxp_74hc153.h +--- linux-2.6.34.orig/include/linux/nxp_74hc153.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/include/linux/nxp_74hc153.h 2010-05-25 18:46:13.463473072 +0200 @@ -0,0 +1,24 @@ +/* + * NXP 74HC153 - Dual 4-input multiplexer defines @@ -17523,9 +17440,9 @@ diff -Nur linux-2.6.33.3.orig/include/linux/nxp_74hc153.h linux-2.6.33.3/include +}; + +#endif /* _NXP_74HC153_H */ -diff -Nur linux-2.6.33.3.orig/include/linux/phy.h linux-2.6.33.3/include/linux/phy.h ---- linux-2.6.33.3.orig/include/linux/phy.h 2010-04-26 16:48:30.000000000 +0200 -+++ linux-2.6.33.3/include/linux/phy.h 2010-05-17 21:40:17.023114663 +0200 +diff -Nur linux-2.6.34.orig/include/linux/phy.h linux-2.6.34/include/linux/phy.h +--- linux-2.6.34.orig/include/linux/phy.h 2010-05-16 23:17:36.000000000 +0200 ++++ linux-2.6.34/include/linux/phy.h 2010-05-25 18:46:13.503473452 +0200 @@ -325,6 +325,20 @@ void (*adjust_link)(struct net_device *dev); @@ -17547,7 +17464,7 @@ diff -Nur linux-2.6.33.3.orig/include/linux/phy.h linux-2.6.33.3/include/linux/p }; #define to_phy_device(d) container_of(d, struct phy_device, dev) -@@ -491,6 +505,7 @@ +@@ -492,6 +506,7 @@ void phy_stop_machine(struct phy_device *phydev); int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd); int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd); @@ -17555,9 +17472,9 @@ diff -Nur linux-2.6.33.3.orig/include/linux/phy.h linux-2.6.33.3/include/linux/p int phy_mii_ioctl(struct phy_device *phydev, struct mii_ioctl_data *mii_data, int cmd); int phy_start_interrupts(struct phy_device *phydev); -diff -Nur linux-2.6.33.3.orig/include/linux/spi/vsc7385.h linux-2.6.33.3/include/linux/spi/vsc7385.h ---- linux-2.6.33.3.orig/include/linux/spi/vsc7385.h 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/include/linux/spi/vsc7385.h 2009-12-13 20:45:19.923921372 +0100 +diff -Nur linux-2.6.34.orig/include/linux/spi/vsc7385.h linux-2.6.34/include/linux/spi/vsc7385.h +--- linux-2.6.34.orig/include/linux/spi/vsc7385.h 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/include/linux/spi/vsc7385.h 2010-05-25 18:46:13.540971583 +0200 @@ -0,0 +1,19 @@ +/* + * Platform data definition for the Vitesse VSC7385 ethernet switch driver @@ -17578,9 +17495,9 @@ diff -Nur linux-2.6.33.3.orig/include/linux/spi/vsc7385.h linux-2.6.33.3/include + u32 clk_sel:3; + } mac_cfg; +}; -diff -Nur linux-2.6.33.3.orig/net/dsa/ar7240.c linux-2.6.33.3/net/dsa/ar7240.c ---- linux-2.6.33.3.orig/net/dsa/ar7240.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/net/dsa/ar7240.c 2010-03-12 19:31:45.562053091 +0100 +diff -Nur linux-2.6.34.orig/net/dsa/ar7240.c linux-2.6.34/net/dsa/ar7240.c +--- linux-2.6.34.orig/net/dsa/ar7240.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/net/dsa/ar7240.c 2010-05-25 18:46:13.583464107 +0200 @@ -0,0 +1,736 @@ +/* + * DSA driver for the built-in ethernet switch of the Atheros AR7240 SoC @@ -18318,9 +18235,9 @@ diff -Nur linux-2.6.33.3.orig/net/dsa/ar7240.c linux-2.6.33.3/net/dsa/ar7240.c + unregister_switch_driver(&ar7240_dsa_driver); +} +module_exit(dsa_ar7240_cleanup); -diff -Nur linux-2.6.33.3.orig/net/dsa/mv88e6063.c linux-2.6.33.3/net/dsa/mv88e6063.c ---- linux-2.6.33.3.orig/net/dsa/mv88e6063.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/net/dsa/mv88e6063.c 2009-12-25 12:10:58.524031002 +0100 +diff -Nur linux-2.6.34.orig/net/dsa/mv88e6063.c linux-2.6.34/net/dsa/mv88e6063.c +--- linux-2.6.34.orig/net/dsa/mv88e6063.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/net/dsa/mv88e6063.c 2010-05-25 18:46:13.623464081 +0200 @@ -0,0 +1,294 @@ +/* + * net/dsa/mv88e6063.c - Driver for Marvell 88e6063 switch chips @@ -18616,9 +18533,9 @@ diff -Nur linux-2.6.33.3.orig/net/dsa/mv88e6063.c linux-2.6.33.3/net/dsa/mv88e60 + unregister_switch_driver(&mv88e6063_switch_driver); +} +module_exit(mv88e6063_cleanup); -diff -Nur linux-2.6.33.3.orig/net/dsa/tag_qinq.c linux-2.6.33.3/net/dsa/tag_qinq.c ---- linux-2.6.33.3.orig/net/dsa/tag_qinq.c 1970-01-01 01:00:00.000000000 +0100 -+++ linux-2.6.33.3/net/dsa/tag_qinq.c 2010-03-06 12:19:54.255959609 +0100 +diff -Nur linux-2.6.34.orig/net/dsa/tag_qinq.c linux-2.6.34/net/dsa/tag_qinq.c +--- linux-2.6.34.orig/net/dsa/tag_qinq.c 1970-01-01 01:00:00.000000000 +0100 ++++ linux-2.6.34/net/dsa/tag_qinq.c 2010-05-25 18:46:13.663473277 +0200 @@ -0,0 +1,127 @@ +/* + * net/dsa/tag_qinq.c - QinQ tag format handling diff --git a/target/rb4xx/target.mk b/target/rb4xx/target.mk index 7d2f312ba..6304faf39 100644 --- a/target/rb4xx/target.mk +++ b/target/rb4xx/target.mk @@ -1,7 +1,7 @@ ARCH:= mips CPU_ARCH:= mips -KERNEL_VERSION:= 2.6.33.3 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= f651e9aafb2f910812257a63bcd639f2 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=mips32 diff --git a/target/rb532/target.mk b/target/rb532/target.mk index 68d194940..90a85803e 100644 --- a/target/rb532/target.mk +++ b/target/rb532/target.mk @@ -1,7 +1,7 @@ ARCH:= mips CPU_ARCH:= mipsel -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=mips32 diff --git a/target/rescue-x86/Makefile b/target/rescue-x86/Makefile index 0d7d19d48..94f5a6742 100644 --- a/target/rescue-x86/Makefile +++ b/target/rescue-x86/Makefile @@ -11,18 +11,6 @@ kernel-install: @cp $(LINUX_DIR)/arch/x86/boot/bzImage \ $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel -createinit: - @-rm $(LINUX_DIR)/usr/initramfs_data.cpio.* - $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="${BUILD_DIR}/${INITRAMFS_PIGGYBACK}"#' \ - $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_UID=0' >> $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_GID=0' >> $(LINUX_DIR)/.config - echo N |$(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) - $(MAKE) -C $(LINUX_DIR) V=1 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" $(MAKE_TRACE) - @cp $(LINUX_DIR)/arch/x86/boot/bzImage $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel - ifeq ($(FS),initramfs) imageinstall: $(BIN_DIR)/$(INITRAMFS) @echo 'The kernel file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @@ -31,7 +19,7 @@ imageinstall: $(BIN_DIR)/$(INITRAMFS) endif ifeq ($(FS),initramfs-piggyback) -imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinit +imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinitramfs @echo 'The kernel+initramfs file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo 'Login as user root with password linux123 via ssh or console' endif diff --git a/target/rescue-x86/target.mk b/target/rescue-x86/target.mk index 0bd943db7..303f276c0 100644 --- a/target/rescue-x86/target.mk +++ b/target/rescue-x86/target.mk @@ -1,7 +1,7 @@ ARCH:= x86 CPU_ARCH:= i686 -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -O2 -pipe TARGET_CFLAGS_ARCH:= -march=i686 diff --git a/target/rescue-x86_64/Makefile b/target/rescue-x86_64/Makefile index 6e4f275ee..3636045dd 100644 --- a/target/rescue-x86_64/Makefile +++ b/target/rescue-x86_64/Makefile @@ -9,19 +9,6 @@ include $(TOPDIR)/mk/image.mk kernel-install: -createinit: - @-rm $(LINUX_DIR)/usr/initramfs_data.cpio.* - $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="${BUILD_DIR}/${INITRAMFS_PIGGYBACK}"#' $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_UID=0' >> $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_GID=0' >> $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_COMPRESSION_LZMA=y' >> $(LINUX_DIR)/.config - echo N |$(MAKE) -C $(LINUX_DIR) V=0 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) - $(MAKE) -C $(LINUX_DIR) V=0 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" $(MAKE_TRACE) - $(CP) $(LINUX_DIR)/arch/x86/boot/bzImage \ - $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel - ifeq ($(FS),initramfs) imageinstall: $(BIN_DIR)/$(INITRAMFS) @cp $(LINUX_DIR)/arch/x86/boot/bzImage $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel @@ -31,7 +18,7 @@ imageinstall: $(BIN_DIR)/$(INITRAMFS) endif ifeq ($(FS),initramfs-piggyback) -imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinit +imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinitramfs @echo 'The kernel file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo 'Login as user root with password linux123 via ssh or console' endif diff --git a/target/rescue-x86_64/target.mk b/target/rescue-x86_64/target.mk index 8ed9f234a..4033eed32 100644 --- a/target/rescue-x86_64/target.mk +++ b/target/rescue-x86_64/target.mk @@ -1,7 +1,7 @@ ARCH:= x86 CPU_ARCH:= x86_64 -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -O2 -pipe TARGET_CFLAGS_ARCH:= diff --git a/target/shuttle/Makefile b/target/shuttle/Makefile index 53ab59227..b60ebe9d3 100644 --- a/target/shuttle/Makefile +++ b/target/shuttle/Makefile @@ -7,32 +7,20 @@ include $(TOPDIR)/mk/modules.mk include $(TOPDIR)/mk/kernel-build.mk include $(TOPDIR)/mk/image.mk -kernel-install: +KERNEL:=$(LINUX_DIR)/arch/x86/boot/bzImage -createinit: - @-rm $(LINUX_DIR)/usr/initramfs_data.cpio.* - $(SED) 's#^CONFIG_INITRAMFS_SOURCE.*#CONFIG_INITRAMFS_SOURCE="${BUILD_DIR}/${INITRAMFS_PIGGYBACK}"#' $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_UID=0' >> $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_ROOT_GID=0' >> $(LINUX_DIR)/.config - echo 'CONFIG_INITRAMFS_COMPRESSION_LZMA=y' >> $(LINUX_DIR)/.config - echo N |$(MAKE) -C $(LINUX_DIR) V=0 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" oldconfig $(MAKE_TRACE) - $(MAKE) -C $(LINUX_DIR) V=0 CROSS_COMPILE="$(TARGET_CROSS)" ARCH=$(ARCH) \ - CC="$(TARGET_CC)" $(MAKE_TRACE) - $(CP) $(LINUX_DIR)/arch/x86/boot/bzImage \ - $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel +kernel-install: + @cp $(KERNEL) $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel ifeq ($(FS),archive) imageinstall: $(BIN_DIR)/$(ROOTFSTARBALL) - @cp $(LINUX_DIR)/arch/x86/boot/bzImage \ - $(BIN_DIR)/${ADK_TARGET}-${FS}-kernel @echo 'The kernel file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo 'The initramfs image is: ${BIN_DIR}/${ROOTFSTARBALL}' @echo 'Login as user root with password linux123 via ssh or console' endif ifeq ($(FS),initramfs-piggyback) -imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinit +imageinstall: ${BUILD_DIR}/${INITRAMFS_PIGGYBACK} createinitramfs @echo 'The kernel file is: ${BIN_DIR}/${ADK_TARGET}-${FS}-kernel' @echo 'Login as user root with password linux123 via ssh or console' endif diff --git a/target/shuttle/target.mk b/target/shuttle/target.mk index 671265a3b..368062b46 100644 --- a/target/shuttle/target.mk +++ b/target/shuttle/target.mk @@ -1,7 +1,7 @@ ARCH:= x86 CPU_ARCH:= x86_64 -KERNEL_VERSION:= 2.6.32 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= 260551284ac224c3a43c4adac7df4879 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -O2 -pipe TARGET_CFLAGS_ARCH:= -march=amdfam10 diff --git a/target/toolchain-arm/target.mk b/target/toolchain-arm/target.mk index 64327fb30..301e37037 100644 --- a/target/toolchain-arm/target.mk +++ b/target/toolchain-arm/target.mk @@ -1,7 +1,7 @@ ARCH:= arm CPU_ARCH:= arm -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -msoft-float diff --git a/target/toolchain-armel/target.mk b/target/toolchain-armel/target.mk index a15355b74..e7000339c 100644 --- a/target/toolchain-armel/target.mk +++ b/target/toolchain-armel/target.mk @@ -1,7 +1,7 @@ ARCH:= arm CPU_ARCH:= armle -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -msoft-float diff --git a/target/toolchain-mips/target.mk b/target/toolchain-mips/target.mk index 9782461ee..fe1919aeb 100644 --- a/target/toolchain-mips/target.mk +++ b/target/toolchain-mips/target.mk @@ -1,7 +1,7 @@ ARCH:= mips CPU_ARCH:= mips -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=mips32 -mabi=32 diff --git a/target/toolchain-mipsel/target.mk b/target/toolchain-mipsel/target.mk index f3fa7a0e5..70ec38bc4 100644 --- a/target/toolchain-mipsel/target.mk +++ b/target/toolchain-mipsel/target.mk @@ -1,7 +1,7 @@ ARCH:= mips CPU_ARCH:= mipsel -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=mips32 -mabi=32 diff --git a/target/toolchain-ppc/target.mk b/target/toolchain-ppc/target.mk index 15cdfc213..fe2e67ad5 100644 --- a/target/toolchain-ppc/target.mk +++ b/target/toolchain-ppc/target.mk @@ -1,7 +1,7 @@ ARCH:= powerpc CPU_ARCH:= ppc -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= diff --git a/target/toolchain-sparc/target.mk b/target/toolchain-sparc/target.mk index 372bb1323..f91c716f4 100644 --- a/target/toolchain-sparc/target.mk +++ b/target/toolchain-sparc/target.mk @@ -1,7 +1,7 @@ ARCH:= sparc CPU_ARCH:= sparc -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -mcpu=v8 diff --git a/target/toolchain-x86/target.mk b/target/toolchain-x86/target.mk index 39eb1651d..466b646f8 100644 --- a/target/toolchain-x86/target.mk +++ b/target/toolchain-x86/target.mk @@ -1,7 +1,7 @@ ARCH:= x86 CPU_ARCH:= i586 -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=i586 diff --git a/target/toolchain-x86_64/target.mk b/target/toolchain-x86_64/target.mk index ce1192f10..0698dda68 100644 --- a/target/toolchain-x86_64/target.mk +++ b/target/toolchain-x86_64/target.mk @@ -1,7 +1,7 @@ ARCH:= x86 CPU_ARCH:= x86_64 -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= diff --git a/target/wag54g/target.mk b/target/wag54g/target.mk index 95f01766b..90a85803e 100644 --- a/target/wag54g/target.mk +++ b/target/wag54g/target.mk @@ -1,7 +1,7 @@ ARCH:= mips CPU_ARCH:= mipsel -KERNEL_VERSION:= 2.6.32 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= 260551284ac224c3a43c4adac7df4879 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=mips32 diff --git a/target/wrap/target.mk b/target/wrap/target.mk index 372c3cfe3..547c89094 100644 --- a/target/wrap/target.mk +++ b/target/wrap/target.mk @@ -1,7 +1,7 @@ ARCH:= x86 CPU_ARCH:= i486 -KERNEL_VERSION:= 2.6.33 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= c3883760b18d50e8d78819c54d579b00 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=i486 diff --git a/target/zaurus/target.mk b/target/zaurus/target.mk index 4d6ae897e..affae5afa 100644 --- a/target/zaurus/target.mk +++ b/target/zaurus/target.mk @@ -1,7 +1,7 @@ ARCH:= arm CPU_ARCH:= arm -KERNEL_VERSION:= 2.6.32 +KERNEL_VERSION:= 2.6.34 KERNEL_RELEASE:= 1 -KERNEL_MD5SUM:= 260551284ac224c3a43c4adac7df4879 +KERNEL_MD5SUM:= 10eebcb0178fb4540e2165bfd7efc7ad TARGET_OPTIMIZATION:= -Os -pipe TARGET_CFLAGS_ARCH:= -march=armv5te -msoft-float diff --git a/toolchain/gcc/Makefile b/toolchain/gcc/Makefile index 9ad2a3b05..bd1c69678 100644 --- a/toolchain/gcc/Makefile +++ b/toolchain/gcc/Makefile @@ -28,7 +28,7 @@ ifeq ($(ADK_TARGET_NO_FPU),y) GCC_CONFOPTS+= --with-float=soft endif -ifeq ($(ADK_LINUX_64),y) +ifeq ($(ADK_LINUX_MIPS64_LEMOTE),y) GCC_CONFOPTS+= --with-abi=64 endif -- cgit v1.2.3