diff -ruN linux-2.6.17-vanilla/CVS/Entries linux-2.6.17/CVS/Entries
--- linux-2.6.17-vanilla/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/CVS/Entries	2006-07-12 16:54:18.000000000 +0000
@@ -0,0 +1,21 @@
+/.cvsignore/1.1/Wed May 12 13:52:16 2004/-ko/
+/ChangeLog-1999/1.1.1.1/Mon Oct 15 20:44:29 2001//
+/ChangeLog-2000/1.1.1.1/Mon Oct 15 20:44:31 2001//
+/ChangeLog-2001/1.1/Mon Jan  7 03:57:47 2002/-ko/
+/ChangeLog-2002/1.3/Sun May  4 19:29:45 2003//
+/ChangeLog-2003/1.2/Sun Jan  4 18:29:21 2004//
+/ChangeLog-2004/1.1/Mon Jan 31 12:17:59 2005/-ko/
+/ChangeLog-2005/1.1/Fri Jan 27 16:07:15 2006/-ko/
+D/Documentation////
+D/arch////
+D/drivers////
+D/include////
+D/lib////
+D/mm////
+D/net////
+D/scripts////
+D/sound////
+/AGAINST-2.6.17/1.1/Wed Jul  5 08:46:47 2006/-ko/
+/ChangeLog/1.366/Wed Jul  5 07:19:04 2006/-ko/
+/Makefile/1.102/Wed Jul  5 14:49:57 2006/-ko/
+/localversion-sh/1.1/Wed Jul  5 07:22:47 2006/-ko/
diff -ruN linux-2.6.17-vanilla/CVS/Entries.Log linux-2.6.17/CVS/Entries.Log
--- linux-2.6.17-vanilla/CVS/Entries.Log	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/CVS/Entries.Log	2006-07-12 16:54:18.000000000 +0000
@@ -0,0 +1,6 @@
+A D/fs////
+A D/init////
+A D/kernel////
+R D/kernel////
+R D/init////
+R D/fs////
diff -ruN linux-2.6.17-vanilla/CVS/Repository linux-2.6.17/CVS/Repository
--- linux-2.6.17-vanilla/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/CVS/Repository	2006-07-12 16:54:18.000000000 +0000
@@ -0,0 +1 @@
+linux
diff -ruN linux-2.6.17-vanilla/CVS/Root linux-2.6.17/CVS/Root
--- linux-2.6.17-vanilla/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/CVS/Root	2006-07-12 16:54:18.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/ChangeLog linux-2.6.17/ChangeLog
--- linux-2.6.17-vanilla/ChangeLog	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/ChangeLog	2006-07-12 16:54:18.000000000 +0000
@@ -0,0 +1,19 @@
+2006-06-05	Adrian McMenamin <adrian@mcmen.demon.co.uk>
+
+	Dreamcast AICA driver tidy
+
+	* sound/sh/aica.c: code tidying of whitespace and returns
+	* sound/sh/Kconfig: tidying
+
+
+2006-06-04	Adrian McMenamin <adrian@mcmen.demon.co.uk>
+
+	Dreamcast AICA sound support added
+
+	* sound/Kconfig: Added here and updated to support ALSA SH devices
+	* sound/Makefile: Added here and updated to support ALSA SH devices
+	* sound/sh: New directory to hold ALSA files for SH devices
+	* sound/sh/aica.c: New file to add AICA sound support
+	* sound/sh/aica.h: Header to upport AICA sound
+	* sound/sh/Kconfig: New file to add AICA sound support
+	* sound/sh/Makefile: New file required to add AICA sound support
diff -ruN linux-2.6.17-vanilla/ChangeLog-1999 linux-2.6.17/ChangeLog-1999
--- linux-2.6.17-vanilla/ChangeLog-1999	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/ChangeLog-1999	2006-07-12 16:54:18.000000000 +0000
@@ -0,0 +1,902 @@
+1999-12-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/sys_sh.c (do_mmap2, old_mmap, sys_mmap2): Follow
+	the change of 2.3.32.
+
+	* arch/sh/kernel/head.S (_start): Change the name of label from _stext.
+
+	* include/linux/linkage.h: Dont prepend "_" for label.
+	* arch/sh/vmlinux.lds.S: Likewise.
+	* include/asm-sh/system.h (switch_to): Likewise.
+
+	* include/asm-sh/stat.h: Follow the change of 2.3.34.
+
+	* arch/sh/kernel/entry.S: Added getrlimit, mmap2, truncate64,
+	ftruncate64, stat64, lstat64, and fstat64.
+	* include/asm-sh/unistd.h: Likewise.
+
+1999-12-22  John Hassey  <hassey@gte.net>
+
+	* arch/sh/kernel/irq_onchip.c (init_IRQ): Initialize the interrupt
+	controller.
+
+1999-12-19  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/defconfig: Updated.
+	* arch/sh/config.in (CONFIG_SUPERH): Defined.
+	(CONFIG_CF_ENABLER): New config.
+
+	* arch/sh/kernel/irq_imask.c: New file.
+	* arch/sh/kernel/entry.S (restore_all): Inherit IMASK of SR.
+	* arch/sh/kernel/Makefile: Use CONFIG_CF_ENABLER.
+	* arch/sh/kernel/cf-enabler.c: New file.
+
+	* include/asm-sh/irq.h (TIMER_PRIORITY): Changed from 1.
+	The reason is for my board.  Should consider later.
+
+1999-12-14  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/string.h (struct_cpy): Follow the changes of
+	2.3.32.
+	* arch/sh/kernel/process.c (copy_thread): Use struct_cpy.
+
+1999-12-12  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/config.in: Added PCI support configuration.
+	* arch/sh/kernel/time.c (get_cpu_mhz): New function.
+
+1999-12-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/cache.h: Follow the change of 2.3.30.
+
+1999-12-09  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/irq.h (TIMER_IPR_OFFSET): Spell fixed.
+
+1999-12-07  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgtable.h: Updated for 2.3.30.
+	* include/asm-sh/pgtable-2level.h (set_pte, set_pmd, set_pgd): Added.
+	* include/asm-sh/page.h (__pte, __pmd, __pgd): Added.
+	* include/asm-sh/hardirq.h: Follow the change of 2.3.30.
+
+	* arch/sh/mm/init.c (__handle_bad_pmd, __handle_bad_pmd_kernel, 
+	get_pte_kernel_slow, get_pte_slow): Use set_pmd.
+	* include/asm-sh/pgalloc.h (pte_alloc_kernel, pte_alloc): Ditto.
+
+1999-11-30  Toshiharu Nozawa <nozawat@hitachi-ul.co.jp>
+
+	* arch/sh/kernel/time.c (time_init): Implement better mesurement
+	using RTC interrupt.
+
+1999-11-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/setup.c (setup_arch): Updated for 2.3.30.
+	* include/asm-sh/io.h (IO_SPACE_LIMIT): Added for 2.3.30.
+	(inw_p, outw_p): Added.
+
+	* include/asm-sh/ide.h (ide_default_io_base): Changed for my board.
+	* include/asm-sh/hdreg.h (ide_ioreg_t): Changed to unsigend int.
+
+	* arch/sh/config.in: Added block device configuration.
+
+1999-11-26  Toshiharu Nozawa <nozawat@hitachi-ul.co.jp>
+
+	* drivers/char/sh-scif.c (sci_receive_chars): Add dummy read
+	before clearing flag.
+
+	* arch/sh/kernel/time.c (time_init): Implement better mesurement.
+
+1999-11-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgalloc.h: New file.
+	* include/asm-sh/pgalloc-2level.h: New file.
+	* arch/sh/kernel/pci-sh.c: New file.
+	* include/asm-sh/pci.h: New file.
+	* arch/sh/kernel/irq.c: Follow the changes of 2.3.29.
+	* arch/sh/mm/init.c, arch/sh/mm/fault.c, arch/sh/mm/ioremap.c: 
+	Likewise.
+
+	* include/asm-sh/highmem.h: Removed.
+
+1999-11-23  Toshiharu Nozawa <nozawat@hitachi-ul.co.jp>
+
+	* arch/sh/kernel/time.c (time_init): Implement getting clock
+	(system clock and module clock) information.
+
+1999-11-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/char/{sh-scif.c,sh-sci.c}: Avoid race conditions.
+	Don't initialize the module if c_cflags is same.
+	
+1999-11-17  Toshiharu Nozawa <nozawat@hitachi-ul.co.jp>
+
+	* drivers/char/sh-scif.c: Use ctrl_in, ctrl_out for SCSCR, SCSMR
+	and SCFCR.  It's accessed as byte for SH-3.
+
+1999-11-16  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/io.h (ctrl_in, ctrl_out): New macro.
+
+1999-11-15  Sugioka Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/entry.S (system_call): Bug fix.  Change
+	cmp/ge --> cmp/hs.
+
+1999-11-14  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/irq_onchip.c: Include <linux/config.h>.
+
+	* include/asm-sh/dma.h: Include <asm/io.h>.
+
+	* include/asm-sh/div64.h: New file.
+
+	* arch/sh/kernel/process.c (get_wchan): New function.
+
+	* arch/sh/mm/init.c (paging_init,mem_init,si_meminfo): Follow the
+	changes of 2.2.27.
+	* include/asm-sh/processor.h (KSTK_EIP, KSTK_ESP): Ditto.
+
+	* drivers/char/sh-scif.c: Incorporate changes of sh-sci.c,
+	to be real TTY support.
+
+1999-11-10  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache.c (__flush_page_to_ram): Renamed from
+	flush_page_to_ram.
+
+	* include/asm-sh/dma.h (MAX_DMA_ADDRESS): Add __MEMORY_START.
+	* include/asm-sh/pgtable.h (page_pte_prot): Removed.
+	(__flush_page_to_ram): Renamed from flush_page_to_ram.
+	(flush_page_to_ram): New Macro.
+
+1999-11-10  YAEGASHI Takeshi  <yaegashi@ma.kcom.ne.jp>
+
+	* include/asm-sh/pgtable.h (_PAGE_CHG_MASK, PAGE_NONE,
+	PAGE_SHARED, PAGE_COPY, PAGE_READONLY, PAGE_KERNEL,
+	PAGE_KERNEL_RO): Add _PAGE_CACHABLE.
+
+1999-11-06  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/mmu_context.h (set_asid): Don't change
+	the value of other part of PTEH.
+
+	* include/asm-sh/shmparam.h (SHMLBA): Incorporate the changes
+	of pre-2.3.26-2.
+
+1999-11-05  YAEGASHI Takeshi  <yaegashi@ma.kcom.ne.jp>
+
+	* arch/sh/kernel/sys_sh.c (sys_mmap): Bug fix for arguments.
+
+1999-11-03  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/page.h (__pa,__va,MAP_NR): Changed not using
+	__PAGE_OFFSET.
+
+	* arch/sh/kernel/setup.c (parse_mem_cmdline): Followed the changes
+	of __pa and __va.
+
+	* include/asm-sh/pgtable-2level.h (SWP_ENTRY): Moved to pgtable.h.
+	* include/asm-sh/page.h (__pte,__pmd,__pgd): Removed.
+
+	Do we need getrlimit changes?
+
+1999-10-31  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/fault.c (__flush_tlb_page): Bug fix.  Set ASID before
+	doing the flush of TLB.
+
+	Cosmetic changes around SuperH MM.
+	* arch/sh/mm/fault.c (update_mmu_cache): Don't set PTEH register.
+
+	* arch/sh/kernel/process.c (copy_thread): Removed setting
+	p->mm->context.  It's done in copy_mm.
+	* include/asm-sh/mmu_context.h (destroy_context): Don't
+	need to reset mm->context.
+
+1999-10-30  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/fault.c: Handle TLB miss of vmalloc area.
+
+	* drivers/char/sh-sci.c: Include serialP.h, not include
+	serial_reg.h.
+	(sci_transmit_chars): Bug fix.  Clear GS_TX_INTEN flag
+	when clearing TIE flag.
+
+1999-10-29  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/resource.h (INIT_RLIMITS): Follow the change
+	of 2.3.24.
+	* include/asm-sh/pgtable-2level.h (pgd_clear): Do nothing.
+	* arch/sh/kernel/setup.c (setup_arch): Follow the changes of
+	2.3.24.
+
+	* include/asm-sh/uaccess.h (__strnlen_user): Minor fix.
+
+1999-10-28  YAEGASHI Takeshi  <yaegashi@ma.kcom.ne.jp>
+
+	* arch/sh/lib/checksum.S: Bug fix.  Change bf/s --> bt/s.
+
+1999-10-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/uaccess.h (__strnlen_user): Bug fix.  Don't
+	fetch the memory over the boundary.
+	(strnlen_user): Bug fix. 'n ' could be large value when it's
+	used through strlen_user.  Don't use access_ok with 'n'.
+
+1999-10-27  YAEGASHI Takeshi  <yaegashi@ma.kcom.ne.jp>
+
+	* arch/sh/kernel/irq_onchip.c: Support extended on-chip I/O.
+	* include/asm-sh/irq.h (NR_IRQS): Ditto.
+
+	* include/asm-sh/io.h (outsb,outsw,outsl,insb,insw,insl): Added.
+
+	* drivers/char/sh-scif.c: Add SH-3 support.
+
+	* arch/sh/kernel/time.c (do_timer_interrupt): Increment the
+	register.
+
+	* arch/sh/kernel/entry.S (INTEVT): Use INTEVTE2 for SH7709.
+
+	* arch/sh/config.in: Introduce CONFIG_CPU_SUBTYPE.
+	Config added for Network device drivers.
+
+1999-10-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/string.h (memscan): Bug fix.  Use memchr.
+
+	* include/asm-sh/bitops.h (ext2_set_bit and others): Little
+	endian support.
+
+	* arch/sh/kernel/head.S: Remove entry for MEMORY_END, followed
+	changes of setup.c.  Reported by Jiu Zheng.
+
+1999-10-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/spinlock.h: This file is used only for SMP.
+	Reported by Manfred Spraul.
+
+1999-10-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/ioctls.h
+	(TCGETS,TCSETS,TCSETSW,TCSETSF,TIOCGLCKTRMIOS,TIOCSLCKTRMIOS): Use
+	Immediate 0x54XX value as struct termios is different between
+	kernel and glibc.
+
+	* arch/sh/kernel/entry.S (system_call): Add debug output to LED.
+
+	* drivers/char/sh-sci.c (sci_set_real_termios): Bug fix.
+	Enable receive interrupt, or we lose inputs.
+
+1999-10-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgtable.h (pte_pagenr): substract the offset
+	__MEMORY_START.
+	(mk_pte): add the offset __MEMORY_START.
+
+1999-10-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/setup.c (setup_arch): Follow the change of 2.3.23.
+	* arch/sh/mm/init.c (show_mem, pageing_init, mem_init, and bad
+	page handling): Follow the change of 2.3.23.
+	* include/asm-sh/highmem.h, include/asm-sh/pgtable-2level.h: New
+	headers.
+	* include/asm-sh/dma.h (MAX_DMA_ADDRESS): Defined.
+	* include/asm-sh/pgtable.h: Follow the changes of 2.3.23.
+	* drivers/char/{sh-scif.c,sh-sci.c} (serial_console_init): 
+	Follow the interface change of 2.3.23.
+
+	* arch/sh/kernel/setup.c (MEMORY_END): Removed.
+
+1999-10-21  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (restore_all, debug): Bug fix.  Fix SSR
+	race condition (SSR could be modified by interrupts).
+
+1999-10-20  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/system.h (__sti,__cli,__save_and_cli): Relax the
+	register constraints.
+	(__save_and_cli): Improve a bit.
+
+1999-10-19  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/char/{sh-scif.c,sh-sci.c}: Bug fix.  FLAGS is long
+	instead of short.  Fix typo for cli (not cil).
+	Thanks to Alexei Minayev and Jiu Zheng.
+
+	* arch/sh/kernel/irq_onchip.c (disable_onChip_irq,
+	enable_onChip_irq): Protect critical regions.
+
+1999-10-17  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/string.h (__HAVE_ARCH_MEMCHR): Defined.
+	* arch/sh/lib/memchr.S: New file.
+
+	* include/asm-sh/spinlock.h: Merged with Kaz'.
+
+	* arch/sh/kernel/setup.c (setup_arch): Set command_line.
+
+	* arch/sh/kernel/entry.S (exception_handling_table): Set
+	'none' for entry #0, to avoid spurious interrupt.  Questionable.
+
+1999-10-16  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/char/{sh-scif.c,sh-sci.c}: Protect critical regions.
+	Bug fix for sci_chars_in_buffer (it's for *transmit* not receive).
+
+1999-10-15 Tetsuya Okada <okayan@c-creators.co.jp>
+
+	* arch/sh/config.in, arch/sh/kernel/time.c (set_rtc_time):
+	Implemented.
+
+1999-10-14  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (system_call): Bug fix of the case
+	with arguments on the stack.
+
+1999-10-12  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/uaccess.h (__strnlen_user,strnlen_user): Changed
+	from {__,}strlen_user.
+
+	* arch/sh/kernel/entry.S (sys_call_table): sys_mmap.
+	* arch/sh/kernel/sys_sh.c (sys_mmap): Implemented.
+
+1999-10-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/char/{sh-scif.c,sh-sci.c} (gdb_detach):
+	Conditionalize the interaction with the value of in_gdb.
+
+	* arch/sh/mm/init.c (paging_init): Initialize asid.
+
+	* arch/sh/kernel/irq_onchip.c (no_irq_type): Moved to irq.c.
+
+	* include/asm-sh/checksum.h (ip_fast_csum): cmp/eq works only
+	for register "r0".
+	Thanks to Mikhail Sogrine <sogrine@Informatik.Uni-Tuebingen.De>
+	and Tetsuya Okada <okayan@c-creators.co.jp>
+
+1999-10-10 Tetsuya Okada <okayan@c-creators.co.jp>
+
+	* arch/sh/kernel/time.c (get_rtc_time): Implemented for on chip
+	RTC.
+
+1999-10-09  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (none): Do nothing for NMI.
+
+	* drivers/char/sh-scif.c (sci_transmit_chars,sci_receive_chars):
+	Bug fix for counting room.
+
+1999-10-06  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/{signal.h,socket.h,termbits.h,termios.h,types.h}:
+	Updated.
+
+	* include/asm-sh/smplock.h: Merge Kaz's.  And rename it from
+	smp_lock.h.
+
+1999-10-05  Sugioka Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/mm/init.c: Initialized to MMU_CONTEXT_FIRST_VERSION.
+
+1999-10-05  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/vmlinux.lds.S: New section ".empty_zero_page".
+
+	* drivers/char/sh-scif.c (gdb_detach): Change trap #.
+	(SCSCR_INIT): New macro.
+	(SCI_IRP_OFFSET): Bug fix.
+
+	* arch/sh/kernel/entry.S (fixup_syscall_argerr): Implemented.
+
+	* include/asm-sh/uaccess.h: Use .balign.
+
+1999-10-04  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/char/sh-sci.c: Implement TTY.
+
+	* drivers/char/sh-scif.c (sci_enable_tx_interrupts): Handle
+	interrupt request flag correctly.
+	(sci_interrupt): Call sci_enable_tx_interrupts.
+
+1999-10-03  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/irq_onchip.c
+	(enable_onChip_irq,disable_onChip_irq): Fixed the address
+	calculation.
+
+1999-10-02  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/ioctls.h (TIOCMBIS,TIOCMBIC,TIOCMSET): Fixed the
+	typo of type.
+
+	* arch/sh/kernel/entry.S (handle_exception): Fixed the entry
+	position.
+
+	* drivers/char/sh-scif.c: Implement serial TTY.
+
+1999-10-01 Tetsuya Okada <okayan@c-creators.co.jp>
+
+	* drivers/char/sh-scif.c: Conditionalize with
+	CONFIG_DEBUG_KERNEL_WITH_GDB_STUB.
+
+1999-09-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/config.in(CONFIG_MEMORY_END): Removed.
+
+	* arch/sh/vmlinux.lds.S (section .data.disk_image): Removed.
+
+	* arch/sh/kernel/test-img.c: Removed.
+	* arch/sh/kernel/Makefile(O_OBJS): Remove test-img.o.
+
+	* arch/sh/kernel/signal.c (setup_frame,setup_rt_frame): Bug fix
+	for little endian machine.
+
+	* arch/sh/lib/memcpy.S: Bug fix: CONFIG_LITTLE_ENDIAN -->
+	__LITTLE_ENDIAN__.
+
+1999-09-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/defconfig: Updated.
+
+	* arch/sh/kernel/head.S: Assumes arguments come with register R4&R5.
+	* arch/sh/kernel/setup.c (setup_arch): Introduce new boot interface
+	"BabeFace".
+
+	* include/asm-sh/bugs.h (check_bugs): Set loops_per_sec, and display
+	CPU type.
+
+	* include/asm-sh/processor.h: New enumeration for CPU type.
+
+	* arch/sh/mm/cache.c (detect_cpu_and_cache_system): New function.
+
+	* arch/sh/config.in: Follow the change of the name of sh-sci.c and
+	sh-scif.c.
+
+	* driver/char/{sh-sci.c,sh-scif.c}: Renamed since they're
+	almost same between SH-3 and SH-4.
+	Thanks to Mikhail Sogrine <sogrine@Informatik.Uni-Tuebingen.De>.
+
+1999-09-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S, include/asm-sh/ptrace.h: Stack layout change.
+	(error): Bug fix.
+
+	* arch/sh/kernel/signal.c, arch/sh/kernel/process.c: Follow the
+	interface change of ptrace.h.
+
+	* include/asm-sh/ptrace.h: Rename the member u_regs to regs.
+	Introduce new member "sp".
+
+	* include/asm-sh/sigcontext.h(struct sigcntext): Rename the members.
+
+	* include/asm-sh/elf.h (ELF_PLAT_INIT): Taken from Kaz'
+	Implementation.  Don't know if it's really needed or not.
+
+1999-09-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/head.S: Set SR register.
+
+	* arch/sh/mm/cache.c (flush_icache_range): Bug fix.  Tag address
+	for IC Address Array is virtual address, not physical.
+	(flush_cache_range): Likewise.
+	(cache_flush_area): Likewise.
+	(follow_page): Removed.
+
+1999-09-21  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/process.c (show_regs): Format change a bit.
+
+	* include/asm-sh/delay.h (__delay,__udelay): Kaz' Implementatin.
+
+	* arch/sh/lib/memmove.S: Don't include <linux/config.h>, use
+	__LITTLE_ENDIAN__ instead.
+	* arch/sh/lib/memcpy.S: Likewise.
+	* arch/sh/kernel/signal.c: Likewise.
+	* include/asm-sh/elf.h: Likewise.
+	* include/asm-sh/byteorder.h: Likewise.
+	* include/asm-sh/checksum.h: Likewise.
+	(csum_tcpudp_nofold,csum_ipv6_magic): Improve a bit. (Don't branch)
+	(ip_fast_csum,csum_fold): Merge Kaz' Implementation.
+
+1999-09-20  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/{atomic.h,bitops.h}: Use save_and_cli.
+
+1999-09-19  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (ret_from_irq): Just return when
+	interrupted from kernel space.
+
+	* arch/sh/kernel/irq.c (do_IRQ): set syscall_nr = -1.
+
+	* arch/sh/mm/fault.c (update_mmu_cache): Flush icache when needed.
+
+	* arch/sh/kernel/process.c (show_regs): Display TEA value.
+	* arch/sh/kernel/traps.c (show_registers): Removed.
+
+1999-09-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (system_call): Bug fix: TRA contains
+	the value = imm x 4.
+
+	* arch/sh/mm/init.c (paging_init): Use ctrl_outl.
+
+	* arch/sh/config.in (CONFIG_MEMORY_END): New config variable.
+
+	* arch/sh/kernel/{entry.S,head.S,irq_onchip.c,setup.c,time.c},
+	arch/sh/mm/{cache.c,fault.c}: Use __sh3__ and __SH4__ to
+	distinguish CPU.
+
+	* include/asm-sh/addrspace.h, include/asm-sh/cache.h,
+	include/asm-sh/elf.h, include/asm-sh/mmu_context.h,
+	include/asm-sh/pgtable.h: Likewise.
+
+	* arch/sh/Makefile (AFLAGS): Add processor specific flag.
+
+	* arch/sh/kernel/head.S: Merge Kaz' implementation of SH-4 FPU
+	initialization.
+
+	* arch/sh/kernel/time.c: SH-4 Support.
+
+	* drivers/char/sh4scif.c: New file.
+
+	* include/asm-sh/io.h (ctrl_in{b,w,l},ctrl_out{b,w,l}): New
+	Interfaces for memory mapped control register access.
+
+1999-09-17  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/fault.c (__flush_tlb_page): SH-4 Support.
+
+	* arch/sh/kernel/signal.c (setup_frame, setup_rt_frame): 
+	Add flush_icache_range.
+
+	* arch/sh/mm/cache.c: SH-4 Support.
+
+1999-09-15  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/mmu_context.h (MMU_TTB): Change for SH-4.
+	* arch/sh/kernel/entry.S (MMU_TEA): Change for SH-4.
+
+	* arch/sh/Makefile (LIBS): Nuke the 'gniibe' dependency.
+	Suggested by Mikhail Sogrine <sogrine@Informatik.Uni-Tuebingen.De>.
+
+1999-09-13  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/traps.c, include/asm-sh/semaphore.h,
+	 include/asm-sh/spinlock.h: Updated to 2.3.18.
+
+	* arch/sh/Makefile (HOSTCC): Removed.
+	Suggested by Mikhail Sogrine <sogrine@Informatik.Uni-Tuebingen.De>.
+
+1999-09-12  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S: Add SH-4 Support.
+
+1999-09-09  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/hardirq.h (synchronize_irq): barrier.
+
+1999-09-08  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/delay.h (__delay): Fixed.
+
+	* include/asm-sh/checksum.h (csum_tcpudp_nofold): Support both
+	endianess.
+
+	* include/asm-sh/bugs.h, arch/sh/mm/fault.c,
+	arch/sh/kernel/traps.c, arch/sh/kernel/time.c,
+	arch/sh/kernel/ptrace.c, arch/sh/kernel/irq_onchip.c: 
+	Update to 2.3.17.
+
+1999-09-07  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/atomic.h (__atomic_fool_gcc): Add "volatile".
+
+	SH4 Merge.  Phase #1.
+	* include/asm-sh/io.h,arch/sh/Makefile: Merged.
+
+	* include/asm-sh/addrspace.h: Replaced to Kaz's Implementation.
+
+	* arch/sh/kernel/process.c (dump_thread,dump_fpu): Use Kaz's
+	Implementation.
+	(copy_thread,flush_thread,exit_thread): Merged.
+	(last_task_used_math): New Variable.
+
+1999-09-06  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache.c (cache_flush_all): Rename from
+	__fluch_cache_all, to distinguish the cache-flush-function for TLB
+	handling.  This is the mere function to flush cache, with no
+	relation to TLB handling.
+	(cache_flush_area,cache_purge_area,cache_wback_area): Implemented,
+	not works as expected on SH7708S, though.
+
+	* include/asm-sh/cache.h
+	(cache_flush_area,cache_purge_areacache_wback_area):
+	Add declarations.
+
+	* include/asm-sh/io.h (dma_cache_inv,dma_cache_wback,
+	dma_cache_wback_inv): Define appropriate functions.
+
+1999-09-05  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/checksum.h (ip_fast_csum): Fix bug.
+
+	* arch/sh/kernel/head.S: Call cache_init.
+
+	* arch/sh/mm/cache.c: New file.
+
+	* arch/sh/vmlinux.lds.S: Include <linux/config.h>.
+	* arch/sh/Makefile: Don't use -imacros.
+
+	* arch/sh/lib/memmove.S: New Implementation.
+	* arch/sh/lib/wordcopy.S: Removed.
+
+1999-09-04  Toshi Morita  <tm2@best.com>
+
+	* include/asm-sh/unistd.h (_syscall0,1,2,3,4): Add "memory" clobber.
+
+1999-09-04  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/system.h (switch_to): Save/restore GBR, so that
+	driver can use GBR.  Suggested by Toshi Morita  <tm2@best.com>.
+
+	* include/asm-sh/{hdreg.h,ide.h}: New file (Updated to 2.3.16).
+	* arch/sh/kernel/irq.c (free_irq): Update to 2.3.16 (of i386
+	version).
+	* include/asm-sh/uaccess.h (__range_ok: SIZE): Coerce to interger.
+	* include/asm-sh/system.h (__xchg): Add volatile qualifier for PTR.
+
+	* include/asm-sh/bugs.h (check_bugs): Use __init instead of
+	__initfunc.
+
+	* arch/sh/lib/memcpy.S: New implementation.
+	* arch/sh/lib/memset.S: New implementation.
+
+1999-09-03  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/sys_sh.c (sys_oldmmap, sys_oldselect,
+	sys_olduname): Removed.
+
+	* arch/sh/kernel/head.S: Implement SH4 cache initialization.
+	When clearing BSS, utilize predecrement feature of SuperH.
+
+1999-09-03  John Hassey  <hassey@gte.net>
+
+	* arch/sh/kernel/head.S (CACHE_INIT): Fix to appropriate value 0xd.
+
+1999-09-02  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/Makefile (archmrproper): Delete vmlinux.lds on "mrproper".
+
+1999-09-01  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/checksum.h, arch/sh/lib/checksum.S: 
+	Implemented with the interface of i386 version.
+	* arch/sh/lib/csum_partial_copy.c, arch/sh/lib/checksum.c: Removed.
+
+1999-08-29  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/processor.h (thread_saved_pc): Implemented.
+
+	* arch/sh/kernel/entry.S (interrupt_table): Fill `do_IRQ'.
+
+1999-08-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/char/sh3sci.c (put_char): Wow! GCC 2.95.1 does super
+	optimization!  Introduce barrier between asm statement.
+
+	* arch/sh/kernel/test-img.c: New image.
+	* arch/sh/kernel/setup.c (setup_arch): Set initrd_end to
+	__bss_start.
+
+	New System Call Interface.  Thanks to YAEGASHI Takeshi for
+	the discussion.
+	* arch/sh/kernel/entry.S (system_call): Implement systemcall
+	which has more than five arguments.
+
+	* include/asm-sh/unistd.h (_syscall0,1,2,3,4): Use trapa #0.
+	* arch/sh/kernel/process.c (kernel_thread): Ditto.
+	* arch/sh/kernel/signal.c (setup_frame, setup_rt_frame): Ditto.
+
+	* arch/sh/kernel/entry.S
+	(general_exception,tlb_miss,interrupt,handle_exception): Avoid
+	potential races.  We should stay BL=1 to avoid breakage of
+	hardware registers (such as TRA, MMU_TEA, k2, or k3).
+
+	* arch/sh/kernel/traps.c (DO_ERROR): Add STI.
+
+	New IRQ Programming Interface.
+	* arch/sh/kernel/irq.c, include/asm-sh/irq.h: Implemented.
+	* arch/sh/kernel/irq_onchip.c: New file.
+
+	* arch/sh/kernel/time.c (time_init): Use new scheme.
+
+1999-08-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/Makefile (arch/sh/vmlinux.lds): Add support for
+	a generation of the ldscript.
+
+	* arch/sh/vmlinux.lds.S: Renemed from vmlinux.lds.S, and
+	introduce using CONFIG_MEMORY_START, and CONFIG_LITTLE_ENDIAN.
+
+	* include/asm-sh/elf.h (EM_SH): Delete and...
+	* include/linux/elf.h (EM_SH): Add here.
+
+	Updated to 2.3.15.
+	* include/asm/sh/pgtable.h (io_remap_page_range): Added.
+
+1999-08-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* asm-sh/pgtable.h (SET_PAGE_DIR): Removed.
+
+	* mm/fault.c (do_page_fault): Store the address to thread
+	structure.
+
+	* asm-sh/processor.h (start_thread): Make it macro, instead of
+	inline function to avoid inclusion of ptrace.h.
+	Add the member "address" to store the memory address to be paged.
+
+	* asm-sh/system.h (rmb, wmb): Added.
+
+	* defconfig: New file.
+	* config.in: Add processor type selection, endianness, and memory
+	start address.
+
+1999-08-25  John Hassey  <hassey@gte.net>
+
+	* asm-sh/byteorder.h: Add little endian support.
+
+	* kernel/head.S: Check if cache is enabled already.
+	Don't flush it, if it is the case.
+
+	* vmlinux.lds(___bss_start,__end): Aligned to 4-byte.
+
+1999-08-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* asm-sh/elf.h (ELF_DATA): Support little endian.
+
+	* drivers/block/rd.c (rd_request): Add minimum hack to
+	support ramdisk for root filesystem.
+
+1999-08-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* mm/init.c (mem_init): Bug fix for counting datapages.
+
+	* asm-sh/string.h (strncpy,strncmp): Clean up.
+	* asm-sh/system.h (xchg_u32): Bug fix.
+	* kernel/process.c (__switch_to, copy_thread): Handle the case where
+	mm == 0.
+
+	* kernel/head.S(_stext:1): Fixed to correct mask value.
+	Reported by John Hassey  <hassey@gte.net>.
+
+1999-08-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* asm-sh/cache.h, asm-sh/hardirq.h, asm-sh/init.h, asm-sh/io.h,
+	asm-sh/mmu_context.h, asm-sh/page.h, asm-sh/pgtable.h,
+	asm-sh/processor.h, asm-sh/semaphore.h, asm-sh/softirq.h,
+	asm-sh/spinlock.h, asm-sh/system.h, asm-sh/unistd.h: 
+	Update to 2.3.14.
+
+	* asm-sh/hw_irq.h: New file (2.3.14).
+
+	* kernel/entry.S (sys_idle), kernel/process.c (sys_idle): Removed
+	(Update to 2.3.14).
+
+	* mm/init.c, mm/fault.c, kernel/init_task.c: Updated to 2.3.14.
+	* kernel/signal.c (do_signal): Update to 2.3.14.
+	* kernel/traps.c (DO_ERROR): Updated to 2.3.14.
+
+	* config.in: Remove support of JAVA binaries.
+
+1999-08-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* kernel/entry.S (signal_return): Revert the changes of	08-19.
+	(DO_FAULT): Remove unblocking of interrupt (not needed).
+	(interrupt): Set return address ret_from_irq, instead of
+	ret_from_syscall.
+
+	* string.h (strncpy): Fix uninitialized __limit.
+
+	* kernel/signal.c (setup_frame,setup_rt_frame): Support both endians.
+
+1999-08-19  Niibe Yutaka  <gniibe@m17n.org>
+
+	* Second version, named "OSHIDASHI".
+		Linux 2.2.11.
+
+	* system.h (__sti, __cli, __save_and_cli): Bug fix.
+	* kernel/entry.S (signal_return, DO_FAULT): Bug fix.
+
+	* string.h: Remove useless "earlyclobber" constraints from asm
+	statements.
+	* uaccess.h,string.h,system.h: Don't write "r0" directly, instead
+	use %n specification.
+
+	* socket.h, pgtable.h (ZERO_PAGE), mm/ioremap.c (__ioremap), mm/init.c
+	(show_mem): Updated to 2.2.11.
+
+	* kernel/traps.c: Implement exception handling for address error,
+	reserved instruction and illegal slot instruction.
+
+	* kernel/test-img.c (root_fs_image): compressed by GNU zip.
+	* kernel/setup.c (setup_arch), kernel/test-img.c: New root file
+	system image which includes executable using signal.
+
+	* kernel/entry.S (ret_with_reschedule): Bug fix for access
+	tsk->sigpending.
+	(nmi, debug): Removed (because this is only for my board).
+
+	* kernel/entry.S (exception_handling_table): set sys_ni_syscall
+	for ioperm, iopl, and vm86.
+	* kernel/ioport.c, kernel/vm86.c: Removed.
+
+	* sigcontext.h, kernel/signal.c: Signal handling implemented.
+
+	* sh3sci.c (put_char): Clean up a bit.
+
+1999-08-18  Niibe Yutaka  <gniibe@m17n.org>
+
+	* Initial version, named "YORIKIRI".
+
+	It boots!  It runs ELF executable! It forks!
+
+	Environment:
+		Linux 2.2.10.
+		Kyoto Micro Computer's SH-3 Evaluation Board (SH7708 60MHz).
+		GDB 4.18 with patch for the board.
+		GNU binutils snapshot 1999-08-17.
+		EGCS 1.1.2.
+
+	Start writing ChangeLog:
+	* vmlinux.lds: Linker script for vmlinux.
+
+	* kernel/vm86.c, kernel/traps.c, kernel/time.c, kernel/sys_sh.c,
+	  kernel/sh_ksyms.c, kernel/setup.c, kernel/irq.c,
+	  kernel/ioport.c, kernel/init_task.c, kernel/head.S,
+	  kernel/entry.S, kernel/signal.c, kernel/ptrace.c,
+	  kernel/process.c:  It works!
+
+	* kernel/test-img.c: Root fs image with
+		/dev/console --> /dev/tty0 (4,0)
+		/linuxrc printing "Hello World!.
+
+	* lib/checksum.c, lib/csum_partial_copy.c, lib/delay.c, lib/memcpy.S,
+	lib/memmove.S, lib/memset.S, lib/old-checksum.c, lib/wordcopy.S:
+	Taken from GCC outputs, newlib-1.8.0, and other part of Linux.
+
+	* mm/extable.c, mm/fault.c, mm/init.c, mm/ioremap.c:
+	Implement SH-3 MMU.
+
+	* semaphore-helper.h, atomic.h, current.h, mman.h, processor.h,
+	unistd.h, bugs.h, softirq.h, user.h, bitops.h, shmparam.h,
+	namei.h, elf.h, ioctls.h, posix_types.h, statfs.h, termios.h,
+	termbits.h, signal.h, siginfo.h, unaligned.h, semaphore.h,
+	uaccess.h, system.h, cache.h, pgtable.h: Header files.
+
+	* mmu_context.h: New file.  Idea taken from MIPS Implementation.
+
+Little History:
+
+I've started the project which ports Linux to SuperH in the summer of
+1998.  Got the CPU programming manual and hardware manual from
+Hitachi, prepared GNU tool-chains (binutils, gcc) on my Intel box.
+
+I've asked Hitachi for hardware information of thier Windows CE
+machine, but it seemed that it was difficult for Hitachi to disclose
+the information (NDA wrt Microsoft???).  Anyway, I've started writing
+some code with Linux version 2.1.63.
+
+As there's no platform running the code, I got bored.  Hence, in June
+1999, I bought "SH-3 Evaluation Kit" made by Kyoto Micro Computer,
+which is available from CQ publishing company (in Japan).  At first,
+I've port GDB for that board, it helps me much for understanding the
+CPU.  Then, I port Linux 2.2.10.
+
+			-- Niibe Yutaka
+				at ETL, Tsukuba, Japan.
+				1999-08-18
diff -ruN linux-2.6.17-vanilla/ChangeLog-2000 linux-2.6.17/ChangeLog-2000
--- linux-2.6.17-vanilla/ChangeLog-2000	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/ChangeLog-2000	2006-07-12 16:54:18.000000000 +0000
@@ -0,0 +1,2069 @@
+2000-12-28  Mitch Davis  <mdavis@pocketpenguins.com>
+
+	* Changelog, arch/sh/kernel/Makefile,
+	arch/sh/kernel/mach_foobar.c: Replaced FOOBAR with DMIDA.
+
+2000-12-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/char/Makefile: Added CONFIG_SH_DREAMCAST.
+	* drivers/char/maple.{h,c}: New files.
+	* drivers/char/dc_keyb.c: New file.
+
+	* drivers/video/Config.in (CONFIG_FB_DC): Added.
+	* drivers/video/Makefile (obj-$(CONFIG_FB_DC)): Added.
+	* drivers/video/dcfb.c: New file.
+	* drivers/video/fbmem.c: Added CONFIG_FB_DC.
+
+	* include/asm-sh/io.h: Added CONFIG_SH_DREAMCAST.
+	* include/asm-sh/io_dc.h: New file.
+	* include/asm-sh/machvec.h: Added MACH_DREAMCAST.
+	* include/asm-sh/keyboard.h (kbd_init_hw): Added code for
+	MACH_DREAMCAST.
+
+	* arch/sh/kernel/Makefile (obj-$(CONFIG_SH_DREAMCAST)): Added.
+	* arch/sh/kernel/setup_dc.c: New file.
+	* arch/sh/kernel/io_dc.c: New file.
+	* arch/sh/kernel/mach_dc.c: New file.
+
+	* arch/sh/config.in: Added Dreamcast support, whatever it means.
+
+2000-12-25  Philipp Rumpf <prumpf@tux.org>
+
+	* arch/sh/kernel/rtc.c, include/asm-sh/rtc.h: New files.
+	* arch/sh/config.in [CONFIG_SH_RTC]: made SH onchip RTC support
+	conditional.
+	* arch/sh/kernel/Makefile [CONFIG_SH_RTC]: Likewise.
+	* arch/sh/kernel/mach_dmida.c, arch/sh/kernel/mach_se.c,
+	arch/sh/kernel/mach_hp600.c, arch/sh/kernel/mach_unknown.c: Likewise.
+	* arch/sh/kernel/time.c (get_timer_frequency): modified to work with
+	non-standard RTCs.
+	(do_timer_interrupt): Likewise.
+	(set_rtc_time) (get_rtc_time): removed functions
+
+2000-12-25  Philipp Rumpf <prumpf@tux.org>
+
+	* arch/sh/kernel/mach_ec3104.c, arch/sh/kernel/io_ec3104.c,
+	arch/sh/kernel/setup_ec3104.c, include/asm-sh/ec3104.h,
+	include/asm-sh/io_ec3104.h, include/asm-sh/serial-ec3104.h,
+	include/asm-sh/keyboard-ec3104.h,
+	drivers/char/ec3104_keyb.c: New files
+
+	* arch/sh/config.in, arch/sh/kernel/Makefile, include/asm-sh/io.h,
+	include/asm-sh/irq.h, include/asm-sh/machvec.h: Added support for
+	the EC3104 companion chip.
+
+	* include/asm-sh/serial.h [CONFIG_SH_EC3104]: Use alternate header
+	file for EC3104.
+	* include/asm-sh/keyboard.h [CONFIG_SH_EC3104]: Likewise.
+
+2000-12-25  Philipp Rumpf <prumpf@tux.org>
+
+	* drivers/video/epson1355fb.c: New file
+	* drivers/video/Config.in, drivers/video/Makefile,
+	drivers/video/fbmem.c: added epson 1355 support
+
+2000-12-24  Philipp Rumpf <prumpf@tux.org>
+
+	* arch/sh/boot/compressed/head.S (init_sr): initialize imask to 15
+	* arch/sh/kernel/fpu.c: Remove '$' for register specification.
+
+2000-12-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/Makefile, arch/sh/mm/Makefile, arch/sh/lib/Makefile
+	arch/sh/overdrive/Makefile: New style Makefile. 
+
+	* Updated to 2.4.0-test13-pre4.  
+
+	* Updated to 2.4.0-test12.  Mostyly done by Greg Banks.
+
+2000-11-26  Takashi Yoshii  <yoshii-takashi@hitachi-ul.co.jp>
+
+	* arch/sh/boot/compressed/head.S (fake_headers_as_bzImage): Added.
+
+2000-11-23  David Howells <dhowells@redhat.com>
+
+	* arch/sh/kernel/traps.c (handle_unaligned_ins): 
+	Use copy_from_user, copy_to_user (were __copy_user).
+	(handle_unaligned_delayslot): Likewise.
+	(do_address_error): Likewise.
+
+2000-11-23  David Howells <dhowells@redhat.com>
+
+	* arch/sh/kernel/traps.c: New Variable.
+	(die_if_no_fixup): Return integer.
+	(handle_unaligned_ins): Retern integer.
+	(handle_unaligned_delayslot, handle_unaligned_access): New
+	functions.
+
+2000-11-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.4.0-test11.
+	* arch/sh/kernel/time.c (set_rtc_time): Add declaration of abs.
+	(time_init): Remove unused variable 'i'.
+	* arch/sh/kernel/setup_hd64461.c (setup_hd64461): Ifdef-out
+	access of INTC_ICR1.
+
+	* include/asm-sh/pgtable.h(module_map, module_umap): Removed.
+	* include/asm-sh/xor.h, include/asm-sh/module.h: New files.
+	* arch/sh/config.in (CONFIG_EISA, CONFIG_MCA): Added.
+
+2000-11-17  YAEGASHI Takeshi  <yaegashi@ma.kcom.ne.jp>
+
+	* arch/sh/config.in: Add HP620/680/690 support.
+
+	* include/asm-sh/machvec.h, arch/sh/kenrnel/mach_hp600.c: Add
+	HP620/680/690 machine vectors.
+
+	* arch/sh/kernel/setup.c: Add struct screen_info.
+
+	* drivers/char/scan_keyb.[ch], drivers/char/hp600_keyb.c: Add HP620
+	keyboard support.  Reverse bit order of scan table.  Use kernel
+	timer instead of task queue.
+
+	* drivers/net/smc9194.c: Bug fix.
+
+	* drivers/video/hitfb.c: API clean up.  Add 8bpp support for HP620.
+
+	* include/asm-sh/ide.h, arch/sh/kernel/io_hd64461.c: Add ide1 ports.
+
+	* include/asm-sh/hd64461.h: Add more register definitions.
+
+2000-11-15  SUGIOKA Toshinobu <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/time.c (time_init): clock calculation bug fixed.
+
+	* arch/sh/io_generic.c: Follow the change of I/O func.
+
+2000-11-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/Makefile (CFLAGS, AFLAGS): Use -m4-nofpu.
+
+	* arch/sh/kernel/io.c, arch/sh/kernel/io_generic.c,
+	arch/sh/kernel/io_hd64461.c, arch/sh/kernel/io_hd64465.c,
+	arch/sh/kernel/io_se.c, arch/sh/kernel/setup_hd64461.c,
+	arch/sh/overdrive/io.c, include/asm-sh/io.h,
+	include/asm-sh/io_generic.h, include/asm-sh/io_hd64461.h,
+	include/asm-sh/io_hd64465.h, include/asm-sh/io_od.h,
+	include/asm-sh/io_se.h, include/asm-sh/io_unknown.h,
+	include/asm-sh/machvec.h: Clean up the API.
+	arch/sh/kernel/process.c: Follow the change of I/O func.
+
+	* include/asm-sh/pgtable-2level.h (pgd_none, pgd_bad, pgd_present,
+	pmd_offset): Make them static inline.
+	* include/asm-sh/pgtable.h (pte_read, pte_exec, pte_dirty,
+	pte_young, pte_write, pte_shared, pte_rdprotect, pte_exprotect,
+	pte_mkclean, pte_mkold, pte_wrprotect, pte_mkread, pte_mkexec,
+	pte_mkdirty, pte_mkyoung, pte_mkwrite, pte_modify): Likewise.
+	* include/asm-sh/siginfo.h (copy_siginfo): Likewise.
+	* include/asm-sh/uaccess.h (verify_area): Likewise.
+
+	* include/asm-sh/io.h(___raw_readq, ___raw_writeq): Removed.
+
+	* arch/sh/kernel/entry.S (call_dae): Remove STI().
+	* arch/sh/kernel/traps.c (handle_unaligned): Use __LITTLE_ENDIAN__
+	instead.
+
+2000-11-11  Jesper Skov  <jskov@redhat.com>
+
+	* arch/sh/kernel/traps.c (handle_unaligned, do_address_error): 
+	New functions.
+	Added bad alignment handling, based on original code by Philipp
+	Rumpf, bug fixed, and enhanced to handle r0-indexed access as well.
+	(DO_ERROR(7), DO_ERROR(8)): Removed.
+	(trap_init): Dont' set exception_handling_table[7] and [8].
+	* arch/sh/kernel/entry.S (address_error_load, address_error_store,
+	call_dae): New entries.
+
+2000-11-11  Philipp Rumpf <prumpf@parcelfarce.linux.theplanet.co.uk>
+
+	* arch/sh/kernel/time.c (get_cpu_mhz, rtc_interrupt, irq1): Removed.
+	(get_timer_frequency): New function.
+	(time_init): New way of get the frequency.
+
+2000-11-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/Makefile (arch/sh/vmlinux.lds): Add -traditional.
+	(O_OBJS): Add io_generic.o unconditionally.
+
+2000-11-11  Jesper Skov  <jskov@redhat.com>
+
+	* arch/sh/kernel/entry.S, arch/sh/kernel/head.S,
+	arch/sh/kernel/irq.c, arch/sh/kernel/irq_imask.c,
+	arch/sh/kernel/process.c, arch/sh/kernel/traps.c,
+	arch/sh/lib/checksum.S, include/asm-sh/current.h,
+	include/asm-sh/delay.h, include/asm-sh/processor.h,
+	include/asm-sh/system.h: Remove '$' for register specification.
+	* arch/sh/lib/checksum.S (SRC, DST): Use "..." for CPP.
+	* arch/sh/kernel/Makefile (.S.o): Remove -traditional flag.
+	* arch/sh/lib/Makefile: Ditto.
+
+2000-11-07  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/irq_ipr.c (ipr_irq_demux): Set port mode register
+	before read data register.
+
+	* include/asm-sh/irq.h (PORT_PxCR): Defined.
+
+2000-11-04  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/time.c (do_gettimeoffset): Implemented.
+	(time_init): TMU0 counter value changed.
+
+	* include/asm-sh/timex.h (CLOCK_TICK_RATE) Changed.
+
+2000-11-03  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/irq_ipr.c Add PINT interrupt hanlers.
+	(ipr_irq_demux): IPR/PINT interrupt demux added.
+	(pint_irq_type, pint_map): Added.
+	(init_IRQ): Add PINT initializer.
+	(*_IPR_*): Fixed typo.
+
+	* arch/sh/kernel/setup_hd64461.c (hd64461_irq_demux): use __irq_demux
+
+	* include/asm-sh/irq.h (NR_IRQS): changed.
+	(irq_demux): Changed.
+	(__irq_demux): Defined.
+	(PINT_IRQ_BASE, PINT0_IRQ, PINT8_IRQ, PINT0_IPR_ADDR, PINT8_IPR_ADDR,
+	PINT0_IPR_POS, PINT8_IPR_POS, PINT0_PRIORITY, PINT8_PRIORITY): added.
+	(PORT_PADR, PORT_PBDR, PORT_PCDR, PORT_PFDR): added.
+	(*_IPR_*): Fixed typo.
+
+2000-11-02  Takashi Yoshii  <yoshii-takashi@hitachi-ul.co.jp>
+
+	* arch/sh/kernel/dma.c: New file.
+
+	* include/asm-sh/dma.h (SH_MAX_DMA_CHANNELS): Added.
+	(SAR, DAR, DMATCR, CHCR, DMAOR, DMTE_IRQ, DMA_MODE_READ,
+	DMA_MODE_WRITE, DMA_AUTOINIT, REQ_L, REQ_E, RACK_H, RACK_L, ACK_R,
+	ACK_W, ACK_H, ACK_L, DM_INC, DM_DEC, SM_INC, SM_DEC, RS_DUAL, RS_IN,
+	RS_OUT, TM_BURST, TS_8, TS_16, TS_32, TS_64, TS_BLK, CHCR_DE,
+	CHCR_TE, CHCR_IE, DMAOR_COD, DMAOR_AE, DMAOR_NMIF, DMAOR_DME):
+	Added.
+	(struct dma_info_t): defined.
+	(clear_dma_ff, claim_dma_lock, release_dma_lock, setup_dma,
+	enable_dma,disable_dma, set_dma_mode, set_dma_addr, set_dma_count,
+	get_dma_residue): Declared.
+
+	* include/asm-sh/irq.h (DMTE0_IRQ, DMTE1_IRQ, DMTE2_IRQ, DMTE3_IRQ,
+	DMAE_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY): Added macros.
+
+2000-11-02  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.4.0-test10.
+	* include/asm-sh/ptrace.h (PTRACE_SETOPTIONS): Added
+	(PTRACE_O_TRACESYSGOOD): Added.
+	* include/asm-sh/param.h (CLOCKS_PER_SEC): Added.
+	* arch/sh/kernel/ptrace.c (sys_ptrace:PTRACE_DETACH): Set
+	child->ptrace =0.
+	(sys_ptrace): Add the case of PTRACE_SETOPTIONS.
+	(syscall_trace): Handle ptrace flag 0x80.
+
+2000-10-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/mach_unknown.c (mv_ioremap_nocache): Removed.
+	* arch/sh/kernel/mach_se.c (mv_ioremap_nocache): Removed.
+	* arch/sh/kernel/io_unknown.c (ioremap_nocache): Removed.
+	* arch/sh/kernel/io_generic.c (generic_ioremap_nocache): Removed.
+
+	* include/asm-sh/io_unknown.h (unknown_ioremap_nocache,
+	__ioremap_nocache): Removed.
+	* include/asm-sh/io_se.h (__ioremap_nocache): Removed.
+	* include/asm-sh/io_od.h (__ioremap_nocache): Removed.
+	* include/asm-sh/io_hd64465.h (__ioremap_nocache): Removed.
+	* include/asm-sh/io_generic.h (generic_ioremap_nocache): Removed.
+	* include/asm-sh/io.h (__ioremap_nocache): Removed.
+	* include/asm-sh/io.h (ioremap_nocache): Removed.
+	* include/asm-sh/machvec.h (struct sh_machine_vector): Removed
+	ioremap_nocache.
+
+	* arch/sh/mm/fault.c (update_mmu_cache): SH-3 doesn't have PTEA.
+
+2000-10-27  Bryan Rittmeyer <bryan@ixiacom.com>
+
+	* arch/sh/kernel/setup.c (setup_arch): Declare mv_unknown.
+	* arch/sh/kernel/sh_ksyms.c: Removed comment for memcmp.
+
+2000-10-27  David Woodhouse <dwmw2@infradead.org>
+
+	* arch/sh/kernel/time.c (get_cpu_mhz): Add .align 2 for speed
+	detection.
+
+2000-10-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/fault.c (__do_page_fault): Removed (now it's call_dpf
+	in entry.S).
+	(__do_page_fault): Rename from __do_page_fault1.
+
+	* arch/sh/kernel/entry.S (call_dpf): New entry.
+	(tlb_miss_load, tlb_miss_store, initial_page_write,
+	tlb_protection_violation_load, tlb_protection_violation_store): Use
+	call_dpf.
+
+	* include/asm-sh/pgalloc-2level.h (get_pmd_fast, free_pmd_fast,
+	free_pmd_slow, pmd_alloc): Make them static inline.
+
+	* arch/sh/mm/ioremap.c (remap_area_pages): Use pgd_offset_k.
+	(remap_area_pte): Use _PAGE_HW_SHARED.
+	(remap_area_pages): Remove set_pgdir.
+
+	* include/asm-sh/pgalloc.h (set_pgdir): Removed.
+	(get_pgd_slow, get_pgd_fast, free_pgd_fast, free_pgd_slow, 
+	get_pte_fast, free_pte_fast, free_pte_slow, pte_alloc_kernel, 
+	pte_alloc, pmd_free, flush_tlb_pgtables): Make them static inline.
+	(get_pgd_slow, free_pgd_slow): Use 2KB PGD.
+
+2000-10-13  Greg Banks  <gbanks@pocketpenguins.com>
+
+	* arch/sh/config.in: HD64465 PCMCIA support.  These changes
+	needed for the PCMCIA host bridge driver currently submitted
+	to the PCMCIA maintainer.
+	* arch/sh/kernel/io_hd64465.c: IO routines for HD64465.
+	* arch/sh/kernel/mach_dmida.c: Added machine DMIDA.
+	* arch/sh/kernel/Makefile:  Added machine DMIDA.  Added HD64465.
+	Reorged how O_OBJS list is built.
+	* arch/sh/kernel/setup_hd64465.c: Setup and IRQ handling for HD64465.
+	* arch/sh/kernel/sh_ksyms.c:  Exported various symbols to make
+	PCMCIA modules work.
+	* arch/sh/mm/fault.c: TLB miss handler sets TC/SA bits of
+	PTEA according to bits in PTE.
+	* include/asm-sh/hd64465.h: Register defines for HD64465.
+	* include/asm-sh/io.h:  Added machine DMIDA
+	* include/asm-sh/io_hd64461.h:  Function declaration.
+	* include/asm-sh/io_hd64465.h: IO declarations for HD64465.
+	* include/asm-sh/machvec.h:  HD64465 support.
+	* include/asm-sh/mmu_context.h: PTEA define.
+	* include/asm-sh/pgtable.h: PAGE_KERNEL_PCC(slot, type) is a
+	pgprot_t which can be used to setup SH7750 PCMCIA space mappings.
+	
+2000-09-29  Bryan Rittmeyer  <bryan@ixiacom.com>
+
+	* arch/sh/kernel/sh_ksyms.c (memcpy, memset, memmove, memcmp,
+	flush_dcache_page): Added.
+
+2000-09-29  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/unistd.h (setup): Removed.
+
+2000-09-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/system.h (switch_to): Add T-flag to the clobber
+	list of asm statements.
+
+2000-09-28  Jesper Skov  <jskov@redhat.com>
+
+	* include/asm-sh/string.h: Add T-flag to the clobber list of asm
+	statements.
+	* include/asm-sh/delay.h: Same.
+	* include/asm-sh/checksum.h: Same.
+	* include/asm-sh/bitops.h: Same.
+	* arch/sh/kernel/time.c: Same.
+	* arch/sh/kernel/irq_imask.c: Same.
+	* arch/sh/kernel/process.c: Same.
+	* include/asm-sh/uaccess.h: Same. Plus clobber memory in
+	copy_to_user and clear_user.
+
+2000-09-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (sys_fcntl64): Added.
+	* include/asm/unistd.h (__NR_fcntl64): Added.
+
+2000-09-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm/unistd.h (_syscall0, _syscall1, _syscall2, _syscall3,
+	_syscall4, _syscall5): Don't put "$" prefix for register name.
+	* include/asm-sh/system.h (switch_to): Likewise.
+	* arch/sh/kernel/sh_bios.c (sh_bios_call): Likewise.
+	* arch/sh/kernel/process.c (kernel_thread): Likewise.
+	Use __sc0 and __sc3.
+
+	* arch/sh/lib/checksum.S (SRC, DST): Don't use variable arguments.
+
+	* drivers/char/sh-sci.c (sci_set_termios_cflag): Call init_pins
+	AFTER setting baud.
+
+2000-09-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/system.h (smp_mb, smp_rmb, smp_wmb): Use CONFIG_SMP
+	instead of __SMP__.
+
+2000-09-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/system.h (smp_mb, smp_rmb, smp_wmb): New macros.
+	(__sti, __cli, (xchg_u32, xchg_u8): Make them static inline.
+
+	* include/asm-sh/bitops.h (set_bit, clear_bit, change_bit,
+	test_and_set_bit, test_and_clear_bit, test_and_change_bit, test_bit,
+	ffz, find_next_zero_bit, ext2_set_bit, ext2_clear_bit,
+	ext2_test_bit, ext2_find_next_zero_bit): Make them static inline.
+	(smp_mb__before_clear_bit, smp_mb__after_clear_bit): New macros.
+
+	* include/asm-sh/atomic.h (atomic_t): Use volatile int member
+	regardless of CONFIG_SMP or not.
+	(__atomic_fool_gcc): Removed.
+	(atomic_add, atomic_sub, atomic_add_return, atomic_sub_return,
+	atomic_clear_mask, atomic_set_mask): Make them static inline.
+
+2000-09-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the change of test9-pre6.
+	* include/asm-sh/resource.h (RLIMIT_LOCKS): Added.
+	(INIT_RLIMITS): Added new entry for LOCKS.
+
+	* include/asm-sh/fcntl.h (F_INPROGRESS, LOCK_MAND, LOCK_READ,
+	LOCK_WRITE, LOCK_RW, F_LINUX_SPECIFIC_BASE): Added.
+
+2000-09-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pci.h (pcibios_set_master,
+	pcibios_penalize_isa_irq, (pci_map_single, pci_unmap_single,
+	pci_map_sg, pci_unmap_sg, pci_dma_sync_single, pci_dma_sync_sg):
+	Make them static.
+
+2000-09-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/setup_cqreek.c: Remove mv_port_2addr.
+	* include/asm/io_hd64461.h (__isa_port2addr, __ioremap, __iounmap):
+	Added.
+
+2000-09-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow new cache handling scheme.  Because now is the transition
+	time (I think it's not fully changed to use "flush_dcache_page"),
+	let's leave flush_page_to_ram.
+
+	* arch/sh/mm/cache.c (clear_user_page, copy_user_page): Implemented.
+	(__flush_page_to_ram): New function.
+	(flush_page_to_ram): Use __flush_page_to_ram.
+
+	* include/asm-sh/page.h (clear_user_page, copy_user_page): Define
+	function for SH-4.
+
+	Revert the changes of 2000-09-09.
+	* arch/sh/mm/cache.c (flush_cache_page): Reverted.
+	* include/asm-sh/pgtable.h (flush_cache_page): Ditto.
+
+2000-09-18  YAEGASHI Takeshi  <yaegashi@ma.kcom.ne.jp>
+
+	SCI error handling(frame/parity/overrun error, BREAK)
+
+	* include/asm-sh/irq.h: Add *_BRI_IRQ definitions.
+
+	* arch/sh/kernel/irq_ipr.c (init_IRQ): Add make_ipr_irq() calls for
+	*_BRI_IRQ.
+
+	* drivers/char/sh-sci.h : Add BRI to irq table, new macros.
+
+	* drivers/char/sh-sci.h (sci_handle_errors, sci_handle_breaks,
+	sci_br_interrupt): added.
+	(sci_receive_chars): Add error handling for SCIF(checking SCxSR).
+	(sci_er_interrupt): Add error handling for SCI(sci_handle_errors).
+	(sci_init): Add BRI initialization.
+
+2000-09-09  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgtable.h (flush_cache_page): Do nothing.
+	* arch/sh/mm/cache.c (flush_cache_page): Removed.
+
+2000-09-08  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/irq_imask.c (startup_imask_irq,
+	shutdown_imask_irq): Don't do anything.  When used with
+	proble_irq, interrupt may be masked.
+	NOTE: For IMASK, default is "all enabled"
+
+	* arch/sh/kernel/irq_ipr.c (make_ipr_irq): Revert the changes on
+	09-05.  It's done with disable_irq_nosync.
+
+2000-09-06  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the changes of 2.4.0-test8-pre5.
+
+	* arch/sh/kernel/process.c (copy_thread): Add "unused" argument.
+	It's "stack_top" from do_fork.
+	(sys_fork, sys_clone, sys_vfork): Add last argument 0.
+
+2000-09-05  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/irq_ipr.c (make_ipr_irq): Initialize status, action
+	and depth field.
+
+2000-09-04  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* drivers/char/sh-sci.h (SCIF_ORER): Added.
+	* drivers/char/sh-sci.c (sci_er_interrupt): Handle overrun error
+	for SH-4 SCIF.
+	(sci_set_baud): Set SCSMR bit0,1(clock select) every time.
+
+2000-09-04  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the changes of 2.4.0-test8-pre3.
+
+	* arch/sh/kernel/signal.c (do_signal): Use pending.signal, instead
+	of signal (taskstruct structure chane for siganal).
+
+	* include/asm-sh/uaccess.h (put_user_ret, get_user_ret,
+	__put_user_ret, __get_user_ret, copy_to_user_ret,
+	__copy_to_user_ret, copy_from_user_ret, __copy_from_user_ret):
+	Removed.
+
+2000-09-04  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache.c (cache_init): Re-initialize the cache system,
+	even if it's already initialized.
+	(detect_cpu_and_cache_system): Be conservative.
+
+2000-09-03  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgtable.h (_PAGE_PRESENT): Use hardware V-bit.
+	(_PAGE_U0_SHARED): New macro to implement user space shared page.
+	(_PAGE_HW_SHARED): We need this hardware setting.
+	(_PAGE_FLAGS_HARDWARE_DEFAULT): Removed.
+	(_PAGE_FLAGS_HARDWARE_MASK): Include SZ-bit, SH-bit and WT-bit.
+	(_PAGE_FLAGS_HARD): Hardware PTE flags setting (for SZ=4KB).
+	(_PAGE_SHARED): Use U0_SHARED for SH-4, HW_SHARED for SH-3, because 
+	there's alias issue on SH-4.
+	(PAGE_NONE, PAGE_SHARED, PAGE_COPY, PAGE_READONLY, PAGE_KERNEL,
+	PAGE_KERNEL_RO): Includd _PAGE_FLAGS_HARD.
+
+	(PAGE_KERNEL, PAGE_KERNEL_RO): Include _PAGE_HW_SHARED.
+
+	(_PAGE_ACCESSED, _PAGE_PROTNONE): Layout changed.
+	(SWP_TYPE, SWP_OFFSET, SWP_ENTRY): Likewise.
+
+	* arch/sh/mm/fault.c (update_mmu_cache): Don't OR the hardware value
+	to PTE.  It's now already included.
+
+2000-08-31  Jesper Skov  <jskov@redhat.com>
+
+	* arch/sh/mm/fault.c (__do_page_fault): Fixed bug that caused
+	  infinite cycle of faults when writing to a page for the first time.
+
+2000-08-30  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/head.S: Move the alignment expression before .text
+	directive.
+
+2000-08-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.0-test7.
+
+2000-08-25  Jesper Skov  <jskov@redhat.com>
+
+	* arch/sh/vmlinux.lds.S: Discard .exitcalls from modules.
+
+	* Documentation/Configure.help: Fixed CPU selection description.
+
+2000-08-24  Bryan Rittmeyer  <bryan@ixiacom.com>
+
+	* drivers/char/sh-sci.h (BPS_57600): Added.
+	* drivers/char/sh-sci.c (sci_set_baud): Support 57600 baud.
+
+2000-08-24  Toshinobu Sugioka  <sugioka@itonet.co.jp>
+
+	* net/ipv4/ip_sockglue.c: Include
+	<linux/netfilter_ipv4/ipchains_core.h>.
+
+2000-08-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* net/ipv4/ip_sockglue.c (ip_setsockopt): Bug fix.  Ipchains didn't
+	work.  When IP_FW_XXX command is invoked, we don't need to get the
+	VAL with get_user, it might got EFAULT when the optval is not
+	aligned as 4-byte. (Ipchains uses string as OPTVAL).
+
+2000-08-23  Greg Banks  <gbanks@pocketpenguins.com>
+
+	(These entries were written by gniibe.)
+	* arch/sh/kernel/entry.S (system_call): Remove setting of return
+	value.
+
+	* arch/sh/kernel/sh_ksyms.c (strlen): Exported.
+	(DECLARE_EXPORT): New macro.
+	(__udivsi3_i4, __sdivsi3_i4, __movstr_i4_even, __movstr_i4_odd, 
+	__ashrdi3, __ashldi3): Exported.
+
+2000-08-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the change of 2.4.0-test7-pre7.
+	* include/asm-sh/fcntl.h (F_GETLK64, F_SETLK64, F_SETLKW64): New
+	macros.
+	(flock64): Added.
+
+	Updated to 2.4.0-test7-pre7.
+	* include/asm-sh/unistd.h (__NR_getdents64): Added.
+	* include/asm-sh/mmu_context.h (init_new_context): Return 0.
+
+	* arch/sh/kernel/mach_se.c: Include <linux/config.h>.
+	* arch/sh/kernel/mach_unknown.c: Likewise.
+	* arch/sh/kernel/setup_cqreek.c: Likewise.
+	* include/asm-sh/dma.h: Likewise.
+	* include/asm-sh/machvec_init.h: Likewise.
+
+	* arch/sh/kernel/entry.S (sys_getdents64): Added.
+
+	* arch/sh/kernel/cf-enabler.c: Don't include <linux/config.h>.
+	* arch/sh/kernel/io.c: Ditto.
+	* arch/sh/kernel/io_generic.c: Likewise.
+
+2000-08-20  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/fault.c (update_mmu_cache): Bug fix.  This routine
+	is called by ptrace when PTE does not have information.
+
+2000-08-19  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/setup_cqreek.c (setup_cqreek): Work around.
+	Let it not sleep.
+
+	* arch/sh/kernel/setup_cqreek.c (struct cqreek_irq_data): New
+	structure.
+	(disable_cqreek_irq, enable_cqreek_irq, mask_and_ack_cqreek,
+	init_cqreek_IRQ): Generalized to handle both cases of IDE and ISA.
+
+	* mm/vmscan.c (try_to_swap_out): We need to call flush_page_to_ram.
+
+	* arch/sh/mm/cache.c (flush_page_to_ram): Semantics change.
+	We invalidate the cache line too.
+	(flush_cache_page): No need to do any for physically tagged cache.
+
+	* mm/memory.c (break_cow, do_anonymous_page, do_no_page): Revert the
+	changes of 2000-08-17.  NOTE: In fact, we need to flush I-cache at
+	break_cow and do_anonymous_page, but it's buggy software if it's
+	goes fetch the instruction from that page...
+	(do_swap_page): flush_page_to_ram instead of flush_dcache_page.
+
+2000-08-17  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* mm/memory.c (do_anonymous_page): We need to flush I-cache and
+	D-cache here, as it's newly allocated page.
+	(do_no_page): We need to flush D-cache.
+	(do_swap_page): Flush D-cache & I-cache here.  There're cases
+	where read_swap_cache is called asynchronously and pages are
+	cached.
+
+	* Revert the change for fs/buffer.c (end_buffer_io_async).  It's
+	more than needed.  We only need to flush when kernel WRITES to the
+	page (from I/O), not READ (to I/O).
+
+	* Revert the changes for mm/memory.c (do_wp_page: case 1): We have
+	valid PTE here (it's read-only but works).
+
+2000-08-16  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* fs/buffer.c (end_buffer_io_async): Flush D-cache.  When kernel
+	writes to the page, we should flush USER cache so that USER doesn't
+	read stale data.
+
+	* mm/memory.c (do_swap_page): Bug fix.  We need to flush D-cache.
+	For newly allocated page, D-cache may contain stale USER data.
+	(break_cow): Likewise.  Note that flush_cache_page is not good for
+	physically tagged architecture. (For old implementation, flushing
+	routine was called before setting PTE.)
+	(do_wp_page: case 1): Likewise.
+
+2000-08-13  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* mm/memory.c (break_cow): Bug fix.  We need to flush I-cache.
+	For newly allocated page, I-cache may contain stale USER data.
+
+	* arch/sh/mm/init.c (mem_init): Flush empty_zero_page.
+
+2000-08-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache.c (check_cache_page): Renamed from
+	check_dcache_page.
+
+2000-08-10  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.0-test6.
+
+	* arch/sh/mm/cache.c (check_dcache_page): New debug function.
+	* arch/sh/kernel/traps.c (dump_stack): Only output call trace.
+
+	Cosmetic changes for TLB handling.
+	* arch/sh/mm/fault.c (__flush_tlb_page): First argument is ASID now
+	(instead of MM).
+	(__flush_tlb_page): Don't take MM as argument.	
+	(handle_vmalloc_fault): Removed.
+	(do_page_fault): Don't call handle_vmalloc_fault.
+	(__do_page_fault1, __do_page_fault): New functions.
+	(update_mmu_cache): Use pte_shared.
+	(flush_tlb_page): Handle the case where	MM != CURRENT->MM.
+	(flush_tlb_range): Likewise.
+
+	* include/asm-sh/pgtable.h (pte_shared): New inline function.
+	(_PAGE_SHARED): New macro.
+	(PAGE_SHARED): Added _PAGE_SHARED.
+
+	* arch/sh/kernel/entry.S (tlb_miss_load, tlb_miss_store,
+	initial_page_write, tlb_protection_violation_load,
+	tlb_protection_violation_store): Call __do_page_fault.
+	Don't call STI().
+
+	Follow the change of 2.4.0-test6-pre10.
+	* include/asm-sh/page.h (virt_to_page, VALID_PAGE): New macro.
+	(MAP_NR): Removed.
+
+2000-08-09  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.0-test6-pre9.
+
+	* arch/sh/mm/cache.c (flush_cache_page): Call flush_dcache_page.
+	(flush_cache_range): Call flush_cache_all.
+	(flush_dcache_page): New function.  Flush D-cache for the page.
+
+	* arch/sh/mm/fault.c (update_mmu_cache): Use flush_dcache_page.
+
+	* arch/sh/mm/cache.c (flush_icache_page, flush_page_to_ram): Revert
+	the changes on 08-05.
+
+	* include/asm-sh/pgtable.h (flush_dcache_page): Added declaration
+	for SH-4.
+
+	Import changes from 2.4.0-test6-pre8.
+	* arch/sh/mm/init.c: Use virt_to_page to get page.
+	* include/asm-sh/processor.h: Likewise.
+	* include/asm-sh/pgtable.h (ZERO_PAGE): Likewise.
+	(pte_pagenr): Removed.
+
+2000-08-09  Toshinobu Sugioka <sugioka@itonet.co.jp>.
+
+	* arch/sh/kernel/signal.c (save_sigcontext_fpu): Bug fix.
+	We can't use immediate value for __copy_to_user.
+
+2000-08-08  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Import changes from 2.4.0-test6-pre7. (by Keith Owens)
+	* include/asm-sh/hardirq.h (irq_cpustat_t, in_interrupt, in_irq,
+	hardirq_trylock, irq_enter, irq_exit): Clean them up. 
+	* include/asm-sh/softirq.h (cpu_bh_disable, cpu_bh_enable,
+	in_softirq): Likewise.
+	* arch/sh/kernel/irq.c: Likewise.
+	* arch/sh/kernel/entry.S (ret_from_syscall): Use __irq_stat.
+
+	Import changes from 2.4.0-test6-pre7. (Perhaps, by David S. Miller)
+	* include/asm-sh/pgtable.h (flush_dcache_page): Added.
+	(page_address): Remove debug functionality.
+	* include/asm-sh/system.h: Remove set_rmb.
+
+2000-08-05  Jesper Skov <jskov@redhat.com>
+
+	Changes to use SCI/F for PPP.
+	* drivers/char/sh-sci.c (sci_sched_event, do_softint): Added.
+	(sci_transmit_chars): Call sci_sched_event.
+	(SCI_EVENT_WRITE_WAKEUP): New definition.
+	(sci_port): Added members 'tqueue' and 'event'.
+
+	Cosmetic changes.
+	* include/asm-sh/irq.h (SCIF_ERI_IRQ and others): Add condition for
+	CONFIG_CPU_SUBTYPE_SH7707.
+	* arch/sh/kernel/semaphore.c (semaphore_wake_lock): Added.
+	* arch/sh/config.in (CONFIG_GDB_STUB_VBR): We need this regardless
+	of CONFIG_DEBUG_KERNEL_WITH_GDB_STUB.
+
+2000-08-05  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache.c (flush_page_to_ram): Use save_and_cli.
+	(flush_icache_page, flush_icache_range): Ditto.
+
+2000-08-04  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache.c (icache_purge_range, flush_cache_range): 
+	Use of A-bit was wrong.  We need better way to handle this...
+
+	* arch/sh/mm/fault.c (update_mmu_cache): Bug fix.  Don't deref
+	vma, when it's NULL.
+	(handle_vmalloc_fault): Work around.  Don't call __flush_tlb_page
+	when mm==NULL.
+
+2000-08-04  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Machvec support.
+	* arch/sh/kernel/setup.c: Remove WEAK references.
+	(get_mv_byname): Use .macvec.init. section.
+	* include/asm-sh/machvec_init.h (__initmv): Use
+	.macvec.init. section.
+	* arch/sh/vmlinux.lds.S (.machvec.init): Added new section for
+	Machine Vector.
+
+	CqREEK support.
+	* arch/sh/config.in: Added CONFIG_SH_CQREEK.
+	* arch/sh/kernel/Makefile (O_OBJS): Added CqREEK Bridge support.
+	* arch/sh/kernel/setup_cqreek.c: New file.
+
+2000-08-02  Stuart Menefy <stuart.menefy@st.com>
+
+	(These entries were written by gniibe.)
+	* arch/sh/kernel/Makefile: Add io_generic.o for UNKNOWN.
+
+	* arch/sh/kernel/io_generic.c (generic_io_base): New variable.
+	(generic_inw_p, generic_inl_p, generic_outw_p, generic_outl_p):
+	New functions.
+	* include/asm-sh/io_generic.h: Likewise.
+
+	* arch/sh/kernel/io_unknown.c: Remove unused inclusions.
+	* arch/sh/kernel/setup.c (parse_cmdline): Added I/O base and
+	MMIO enable feature.
+
+	* include/asm-sh/machvec_init.h: UNKNOWN could use GENERIC feature.
+
+2000-08-01  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/overdrive/io.c: Include <asm/processor.h>.
+
+	* arch/sh/kernel/irq_ipr.c (init_IRQ): Remove the variable 'i'.
+	* arch/sh/kernel/setup_se.c (init_se_IRQ): Likewise.
+
+	* include/asm-sh/machvec.h (struct sh_machine_vector): Bit field
+	int should be unsigned.
+
+	* include/asm-sh/ide.h (ide_default_irq_hp600,
+	ide_default_io_base_hp600): Make them static.  No reason for
+	"static", matter of taste, but all other functions in this
+	file use "static".
+
+	* include/asm-sh/keyboard.h: Added "extern" qualifier.  Removed
+	__init for declaration.  Remove <linux/config.h>.
+
+	* include/asm-sh/irq.h (irq_demux, hd64461_irq_demux): Make them
+	extern.
+
+	* include/asm-sh/{io_hd64461.h,io_od.h,io_generic.h,io_se.h,
+	io_unknown.h}:	Added "extern" qualifier.
+
+	* arch/sh/kernel/mach_hp600.c (hd64461_irq_demux): Removed.
+	Include asm/irq.h.
+
+	* arch/sh/defconfig: Updated.
+
+2000-08-01  Jesper Skov  <jskov@redhat.com>
+
+       * arch/sh/config.in: Add SH7707 support.
+       * arch/sh/defconfig: Ditto.
+       * arch/sh/kernel/entry.S: Ditto.
+       * arch/sh/kernel/irq_ipr.c: Ditto.
+       * drivers/char/sh-sci.c: Ditto.
+       * drivers/char/sh-sci.h: Ditto.
+       * include/asm-sh/bugs.h: Ditto.
+       * include/asm-sh/irq.h: Ditto.
+       * include/asm-sh/processor.h: Ditto.
+
+2000-08-01  YAEGASHI Takeshi  <yaegashi@ma.kcom.ne.jp>
+
+	* arch/sh/config.in, arch/sh/kernel/entry.S,
+	Documentation/Concigure.help: Add CONFIG_GDB_STUB_VBR.
+
+	* include/asm-sh/delay.h: Fix __udelay_val.
+
+	* drivers/video/hitfb.c (hitfb_encode_fix): Add break;
+
+	* drivers/char/hp600_keyb.c, drivers/char/scan_keyb.c: Fix key scan
+	tables and routines.
+
+2000-08-01  Stuart Menefy <stuart.menefy@st.com>
+
+	(These entries were written by gniibe.)
+	* Documentation/sh/new-machine.txt, arch/sh/kernel/io.c,
+	arch/sh/kernel/io_unknown.c, arch/sh/kernel/led_se.c,
+	arch/sh/kernel/mach_hp600.c, arch/sh/kernel/mach_se.c,
+	arch/sh/kernel/mach_unknown.c, arch/sh/lib/strcasecmp.c,
+	include/asm-sh/io_generic.h, include/asm-sh/io_hp600.h,
+	include/asm-sh/io_od.h, include/asm-sh/io_se.h,
+	include/asm-sh/io_unknown.h, include/asm-sh/machvec.h,
+	include/asm-sh/machvec_init.h: New files.
+
+	Overdrive support.
+	* arch/sh/overdrive/Makefile, arch/sh/overdrive/fpga.c,
+	arch/sh/overdrive/fpga.h, arch/sh/overdrive/galileo.c,
+	arch/sh/overdrive/gt64111.h, arch/sh/overdrive/io.c,
+	arch/sh/overdrive/irq.c, arch/sh/overdrive/led.c,
+	arch/sh/overdrive/mach.c, arch/sh/overdrive/overdrive.h,
+	arch/sh/overdrive/overdrive.ttf, arch/sh/overdrive/pcidma.c
+	arch/sh/overdrive/setup.c: New files
+
+	arch/sh/Makefile: Added support for OverDrive.
+
+	arch/sh/config.in: Remove CONFIG_IOPORT_START.
+	Added CONFIG_HEARTBEAT.
+
+	arch/sh/kernel/Makefile: Set O_OBJS for each machines.
+
+	arch/sh/kernel/cf-enabler.c (cf_init): Make it static.
+	arch/sh/kernel/io_generic.c: Make the functions generic.
+	arch/sh/kernel/io_hd64461.c: Make the functions specific.
+	arch/sh/kernel/io_se.c: Likewise.
+
+	arch/sh/kernel/irq.c (do_IRQ): Call irq_demux.
+
+	arch/sh/kernel/irq_imask.c (disable_imask_irq): Make it static.
+	arch/sh/kernel/irq_ipr.c: (disable_ipr_irq) Likewise.
+
+	arch/sh/kernel/pci-sh.c (pcibios_init, pcibios_setup): New functions.
+
+	arch/sh/kernel/setup.c (sh_mv): New variable.
+	(parse_cmdline): Support machine selection.
+
+	arch/sh/kernel/setup_hd64461.c (hd64461_irq_demux): New function.
+
+	arch/sh/kernel/setup_se.c (init_se_IRQ): Use new make_ipr_irq.
+
+	arch/sh/kernel/time.c: Support CONFIG_HEARTBEAT.  Check MACH_HP600
+	at runtime.
+
+	arch/sh/lib/Makefile: Don't add -D__ASSEMBLY__.  Add strcasecmp.o.
+
+	arch/sh/lib/checksum.S: Alignment fix.
+
+	arch/sh/mm/Makefile: Don't include ioremap.o.
+
+	include/asm-sh/dma.h: Added isa_dma_bridge_buggy.
+
+	include/asm-sh/hd64461.h: Added CONFIG_HD64461_IRQ.
+	include/asm-sh/ide.h: Added _hp600 functions.
+
+	include/asm-sh/io.h: Introduce Alpha convention.
+
+	include/asm-sh/irq.h: Added ACTUAL_NR_IRQS.
+
+	include/asm-sh/keyboard.h: Use MACH_HP600.
+
+	include/asm-sh/pci.h: Updated.
+
+	drivers/char/sh-sci.c, drivers/char/sh-sci.h: Counter support.
+	Don't set IPR in the driver.
+
+	drivers/net/Config.in: Remove condition CONFIG_SH_SOLUTION_ENGINE
+	for CONFIG_STNIC.
+
+	drivers/net/stnic.c: Check MACH_SE at runtime.
+
+	drivers/pci/pci.ids: Add GT-64111.
+	include/linux/pci_ids.h: Likewise.
+
+2000-07-31  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/bugs.h (check_bugs): Distinguish CPU type.
+
+2000-07-30  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.4.0-test5.
+
+2000-07-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.4.0-test5-pre6.
+
+	* include/asm-sh/sh_bios.h: Don't include
+	<config/sh/standard/bios.h>.
+
+2000-07-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.4.0-test5-pre5.
+
+	* include/asm-sh/mmu_context.h (switch_mm): Setting the bit only
+	when prev != next.
+
+	* arch/sh/kernel/sh_bios.c: Include <linux/config.h> instead of
+	<config/sh/standard/bios.h>.
+
+	* arch/sh/kernel/setup.c: We (already) include <linux/console.h>,
+	don't need including for CONFIG_SH_EARLY_PRINTK again.
+
+	* include/asm-sh/checksum.h: Include <linux/config.h>.
+
+	* include/asm-sh/serial.h: Not include <linux/config.h>.
+
+	* mm/mmap.c (exit_mmap): Flushing TLB is not needed.
+
+2000-07-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.4.0-test5-pre4.
+
+	* drivers/char/sh-sci.c: IRDA is for SH7709 only.
+
+2000-07-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (debug_trap, debug_kernel):
+	#ifdef/#endif change, this is needed for SH BIOS call too.
+
+	* arch/sh/boot/compressed/head.S (init_sr): Set Block=0, 
+	so that we can use BIOS call.
+
+2000-07-21  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Documentation/Configure.help (CONFIG_CPU_SUBTYPE_SH7708,
+	CONFIG_CF_ENABLER, CONFIG_SH_SCI): Updated.
+
+	(CONFIG_SH_SCIF): Removed.
+
+	* arch/sh/defconfig (CONFIG_SH_EARLY_PRINTK): Updated.
+
+	* drivers/char/tty_io.c (console_init): Don't call
+	sh_console_unregister.
+
+	* drivers/char/sh-sci.c (sci_console_init): Call
+	sh_console_unregister here, instead.
+
+2000-07-20  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the changes of 2.4.0-test5-pre3.
+	* arch/sh/defconfig: Updated.
+
+2000-07-20  YAEGASHI Takeshi  <yaegashi@ma.kcom.ne.jp>
+
+	* sh-sci.h (PORT_IRDA, SH3_IRDA_IRQS): New definition.
+	(SCI_INIT, SCI_NPORTS): Fixed for CONFIG_CPU_SUBTYPE_SH7708.
+
+	* sh-sci.c (sci_init_pins_irda): New Function.
+
+2000-07-19  Hiroshi Ito  <ito@mlb.co.jp>
+
+	* arch/sh/mm/cache.c (detect_cpu_and_cache_system): Add __init
+	attribute.
+	* arch/sh/mm/cache.c (cache_system_info) Initialize it.
+
+2000-07-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/fault.c (update_mmu_cache): Bug fix.  Avoid aliases
+	for shared page.
+	Reported by Stuart Menefy <stuart.menefy@st.com> on June 23th.
+
+	* arch/sh/mm/fault.c (__flush_tlb_phys): New function.  Flush
+	TLB which corresponds the PHYS physical page.
+
+	* include/asm-sh/mmu_context.h (MMU_ITLB_DATA_ARRAY,
+	MMU_UTLB_DATA_ARRAY, MMU_UTLB_ENTRIES, MMU_U_ENTRY_SHIFT,
+	MMU_UTLB_VALID, MMU_ITLB_ENTRIES, MMU_U_ENTRY_SHIFT,
+	MMU_ITLB_VALID): New definition.
+
+2000-07-18  Stuart Menefy <stuart.menefy@st.com>
+
+	* mm/mmap.c (exit_mmap): Bug fix.  Added flush_cache_range and
+	flush_tlb_range.
+
+	* arch/sh/kernel/entry.S (restore_all): Bug fix.  Correct the
+	handling IMASK-bits.
+
+2000-07-13  Yutarou Ebihara <ebiharaml@si-linux.com>
+
+	* arch/sh/kernel/io_generic.c (insw, insl, outsw, outsl): Work
+	around implemented.
+
+2000-07-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/boot/compressed/Makefile (ZIMAGE_OFFSET): Add more
+	64KB for the use of program loader which loads the image from
+	second storage.
+
+	Follow the changes of test3-pre9.
+	* arch/sh/kernel/time.c (do_settimeofday): Updated.
+	(do_gettimeofday): Use wall_jiffies.
+
+	* arch/sh/kernel/process.c (cpu_idle): Follow the change of
+	2.4.0-test3-pre9.
+
+	* include/asm-sh/timex.h (cycles_t): Type changed to long long.
+
+	* arch/sh/kernel/entry.S (tsk_ptrace): Change the offset value,
+	following the change of linux/sched.h:(struct task_struct).
+
+2000-07-08  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/sh_ksyms.c (drive_info): Removed.
+	It's x86 specific code.
+
+	Follow the change of test3-pre5.
+	* include/asm-sh/bitops.h (minix_test_and_set_bit): Added.
+	* arch/sh/kernel/process.c (sys_execve): Remove lock_kernel and
+	unlock_kernel.
+	* arch/sh/kernel/signal.c (do_signal): Likewise.
+
+2000-07-07  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/bitops.h (set_bit, clear_bit, change_bit, 
+	test_and_set_bit, test_and_clear_bit, test_and_change_bit, 
+	test_bit, ext2_set_bit, ext2_clear_bit, ext2_test_bit): 
+	Add qualifier `volatile'.
+
+2000-07-06  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the change of test3-pre4.
+	* arch/sh/kernel/sys_sh.c (do_mmap2): Remove
+	lock_kernel/unlock_kernel.
+	(sys_pipe): Likewise.
+
+2000-07-04  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Use CONFIG_CPU_LITTLE_ENDIAN (it's used for MIPS).
+	* Documentation/Configure.help: Merge the help message.
+	* arch/sh/Makefile: Use CONFIG_CPU_LITTLE_ENDIAN, instead of
+	CONFIG_LITTLE_ENDIAN.
+	* arch/sh/defconfig: Likewise.
+	* arch/sh/vmlinux.lds.S: Likewise.
+
+	Follow the chane of test3-pre2.
+	* arch/sh/kernel/setup.c (rom_resources): Removed.
+
+	* include/asm-sh/softirq.h (in_softirq, cpu_bh_disable,
+	cpu_bh_enable): Use __local_bh_count and __local_irq_count.
+
+	* include/asm-sh/hardirq.h (local_irq_count, local_bh_count): 
+	Define Macros.
+
+	* arch/sh/kernel/sh_ksyms.c (local_bh_count, local_irq_count):
+	Removed.
+
+	* arch/sh/kernel/irq.c (__local_bh_count): Renamed from
+	local_bh_count.
+	(__local_irq_count): Renamed from local_irq_count.
+
+2000-06-27  Yutarou Ebihara <ebiharaml@si-linux.com>
+
+	* arch/sh/kernel/cf-enabler.c (cf_init): Use ctrl_outw instead
+	of outw.
+
+2000-06-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the change of 2.4.0-test2.
+	* arch/sh/kernel/time.c: Include <linux/config.h>.
+	* include/asm-sh/keyboard.h: Likewise.
+	* arch/sh/defconfig: Updated.
+
+2000-06-22  Stuart Menefy <stuart.menefy@st.com>
+
+	* driver/char/{sh-sci.c,sh-sci.h}, include/asm-sh/io.h: Changes to
+	support multiple SCI/SCIF ports concurrently. NOTE: new major device
+	number for on-chip serial ports.
+
+	* drivers/char/{Makefile,tty_io.c}, include/asm-sh/serial.h,
+	arch/sh/config.in, arch/sh/kernel/serup_se.c: Add support for 16550
+	compatible UARTS.
+
+2000-06-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/boot/compressed/misc.c (puts): Don't call put_string.
+
+	* arch/sh/Makefile (tool_prefix): Renamed from tool-prefix.
+
+	* include/asm/checksum.h (csum_ipv6_magic): Define only when
+	CONFIG_IPV6 is enabled.
+
+	Follow the change of 2.4.0-test1-ac20.
+	* arch/sh/kernel/setup.c (memparse): Removed.
+
+2000-06-17  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/defconfig: Updated.
+
+	Follow the change of 2.4.0-test1-ac19.
+	* arch/sh/kernel/entry.S (tsk_ptrace): Use ptrace field and
+	PT_TRACESYS.
+	* arch/sh/kernel/ptrace.c (sys_ptrace, syscall_trace): Likewise.
+	* arch/sh/kernel/signal.c (do_signal): Likewise.
+	* arch/sh/kernel/process.c (sys_execve): Likewise.
+
+2000-06-13  Stuart Menefy <stuart.menefy@st.com>
+
+	* include/asm-sh/uaccess.h: Fixed __copy_user to return the number
+	of bytes not copied rather than EFAULT when an error occurs.
+
+	* arch/sh/config.in, arch/sh/kernel/Makefile,
+	arch/sh/kernel/setup_od.c:
+	Added STMicroelectronics Overdrive support.
+
+	* arch/sh/kernel/setup.c, arch/sh/kernel/time.c,
+	drivers/char/sh-sci.h, include/asm-sh/processor.h:
+	Added recording of the various clock frequencies, and use the
+	module clock frequency when setting the serial port baud rate.
+
+	* drivers/char/sh-sci.c: Modifications to set the baud rate
+	when used as the console.
+
+2000-06-11  YAEGASHI Takeshi  <yaegashi@ma.kcom.ne.jp>
+
+	* include/asm-sh/linux_logo.h: Needed for the frame buffer console.
+	Would anyone design and contribute our logo? :->
+
+	* net/ipv4/ipconfig.c: Remove inclusion of <asm/segment.h>.
+
+	* drivers/char/Makefile, include/asm-sh/keyboard.h,
+	drivers/char/scan_keyb.c, drivers/char/scan_keyb.h,
+	drivers/char/hp600_keyb.c: Add generic scan keyboard driver and
+	HP690 scan code table.
+
+	* arch/sh/kernel/Makefile, arch/sh/kernel/irq.c,
+	arch/sh/kernel/io_hd64461.c, arch/sh/kernel/setup_hd64461.c,
+	include/asm-sh/hd64461.h,: Add support for HD64461 companion chip.
+
+	* drivers/video/Config.in, drivers/video/Makefile,
+	drivers/video/fbmem.c, drivers/video/hitfb.c: Add support for
+	HD64461 frame buffer.
+
+	* drivers/char/vt.c: Add !defined(__sh__) to the #if conditionals to
+	avoid sys_ioperm().
+
+	* arch/sh/kernel/time.c, drivers/char/sh-sci.h,
+	include/asm-sh/ide.h: ad hoc work around for HP690...
+	
+	* arch/sh/config.in: introduce new configs: CONFIG_SH_HP600,
+	CONFIG_HD64461, and so on.
+
+	* arch/sh/boot/compressed/Makefile: my kernel is now bigger than
+	1MB...
+
+2000-06-09  Tadashi Kadowaki <kadowaki@white.plala.or.jp>
+
+	* arch/sh/Makefile (CFLAGS, AFLAGS, LDFLAGS): Support big endian.
+
+2000-06-08  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/ptrace.c (sys_ptrace): Bug fix.  Change the
+	last argument of access_process_vm.
+
+	(ubc_set_tracing): Handle SH7709's UBC. I don't know it's right.
+	I see SH7729 manual.
+
+2000-06-08  YAEGASHI Takeshi <yaegashi@ma.kcom.ne.jp>
+
+	* include/asm-sh/pgtable.h (mk_pte_phys): Don't add + __MEMORY_START.
+	2000-05-18 change is wrong.
+
+2000-06-07  Toshiharu Nozawa <nozawat@hitachi-ul.co.jp>
+
+	Compact Flash Support for SolutionEngine.
+	* arch/sh/kernel/cf-enabler.c (cf_init): Implemented for
+	SolutionEngine.
+
+	* include/asm-sh/hitachi_se.h (PA_MRSHPC_*, MRSHPC_*): Added.
+
+	* arch/sh/config.in: SolutionEngine may use enabler.
+
+2000-06-02  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (Throughout): Use ".align 2" instead
+	of ".balign 4".
+	(debug_kernel): Renamed from "debug".
+	(debug_trap): Implemented.
+	(system_call): Call debug_trap.
+
+	* arch/sh/kernel/process.c (break_point_trap_software): New
+	function.
+	(break_point_trap): Define arguments.
+
+	* arch/sh/kernel/entry.S (system_call): Push/Pop registers
+	against syscall_trace, those may be clobbered.
+
+2000-06-01  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* net/sunrpc/clnt.c, fs/nfs/read.c, fs/nfs/proc.c,
+	fs/nfs/nfs3proc.c, fs/nfs/file.c, fs/nfs/dir.c: Remove inclusion
+	of <asm/segment.h>, as Trond agreed to do that.
+
+	* drivers/net/stnic.c (stnic_reset): Add last "\n".
+	(stnic_block_output): Added magic curses from oaknet.c.
+
+2000-05-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the change of pre10-2.
+	* include/asm-sh/ide.h (ide_init_hwif_ports): set IDE_IRQ_OFFSET=0.
+
+2000-05-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/Makefile (OBJCOPY): Added -R .stab and -R .stabstr too.
+
+	* arch/sh/vmlinux.lds.S: Fill nop (=0x0009) for .text section.
+	(.empty_zero_page): Make it independent section.
+
+	* arch/sh/boot/compressed/Makefile: Remove setting of CFLAGS here.
+	(ZIMAGE_OFFSET): Calculate the value by shell.
+	(piggy.o: OBJCOPY): Added -R .empty_zero_page.
+
+	* arch/sh/boot/compressed/head.S (kernel_start_addr): Use _text.
+	Remove __ASSEMBLY__ for newer kernel.
+
+	* arch/sh/boot/compressed/misc.c (decompress_kernel): Return type
+	changed to void (was: int).
+	(memcpy): Let it return value.
+	(memset): Ditto.
+	(HEAP_SIZE): Make it big enough.
+	(decompress_kernel): Use _text for initialization of output_ptr.
+
+	* drivers/char/sh-sci.c (put_char, put_string, get_char,
+	handle_error, lowhex, highhex, hexchars): Moved to ...
+	drivers/char/sh-sci.h: ...here.
+	drivers/char/sh-sci.c (gdb_detach): Added __init qualifier.
+
+	Bug fix.
+	* include/asm-sh/uaccess.h (__copy_user): Bug fix for __N == 0.
+	Reported by Toshinobu Sugioka <sugioka@itonet.co.jp>.
+
+2000-05-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgtable.h (mk_pte_phys): Bug fix.  Added
+	__MEMORY_START.
+
+	Bug fixes for swap entry encoding and pte encoding.
+	(_PAGE_FLAGS_HARDWARE_MASK): Mask V-bit.
+	(_PAGE_FLAGS_HARDWARE_DEFAULT): Enable V-bit.
+	Make _PAGE_PRESENT as software flag, and let it be the b0-bit.
+
+2000-05-17  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/fault.c (update_mmu_cache): We don't need to call
+	__flush_tlb_page.  See the implementation of establish_pte in
+	mm/memory.c.
+	(handle_vmalloc_fault): Instead, call __flush_tlb_page here.
+	(update_mmu_cache): Conditionalize the setting of PTEH.
+	(handle_vmalloc_fault): Change the first argument type.
+
+2000-05-16  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/boot/compressed/Makefile (head.o): Remove dependency
+	to $(TOPDIR)/include/linux/tasks.h.
+
+	* arch/sh/boot/compressed/head.S: Removed #include <asm/segment.h>.
+
+2000-05-16  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Compressed vmlinux support by Stuart Menefy.
+	ftp.uk.linux.org:/pub/superh/linux-2.2.13-shpatch-0.03.gz
+	* arch/sh/boot/Makefile,
+	  arch/sh/boot/compressed/Makefile,
+	  arch/sh/boot/compressed/misc.c,
+	  arch/sh/boot/compressed/install.sh,
+	  arch/sh/boot/compressed/head.S: New files imported.
+
+2000-05-14  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/lib/checksum.S (csum_partial): Improved a bit.
+	* include/asm-sh/checksum.h (ip_fast_csum): Improved implementation
+	for both of code size and speed.
+	(csum_fold): Removed last line: "extu.w %0, %0".  It's not needed,
+	as it always cast to unsigned short.  Caution: the result value as
+	"unsigned int" is different.
+
+2000-05-13  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/time.c (time_init): Bug fix for SH-3's CPG.
+	Not fully implementation yet.
+
+	* include/asm-sh/smc37c93x.h (GPIO46_INDEX, GPIO47_INDEX): Added.
+	* arch/sh/kernel/setup_se.c (init_smsc): Added setting of
+	nIO{R,W}OP.  Suggested by Toshiharu Nozawa <nozawat@hitachi-ul.co.jp>.
+
+	* include/asm-sh/unistd.h (_syscall5): Bug fix.
+
+	* arch/sh/kernel/irq.c (init_irq_proc): Added.
+
+2000-05-09  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/lib/checksum.S: Bug fix for big endian.
+
+	* arch/sh/kernel/ptrace.c (sys_ptrace): Follow the change of
+	2.3.99-pre7-6.
+	* arch/sh/mm/fault.c (do_page_fault): Likewise.
+
+2000-05-08  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/net/stnic.c: New file by Kazumoto Kojima.
+	(stnic_probe): Changed the prototype.
+	(stnic_probe): Use new style probing API.
+
+	* include/asm-sh/hitachi_se.h (IRQ_STNIC): Added.
+
+	* arch/sh/kernel/time.c (time_init): New variable `bus_clock'.
+
+2000-05-08  Toshinobu Sugioka <sugioka@itonet.co.jp>
+
+	* include/asm-sh/checksum.h (csum_fold): Change the implementation
+	for readability and in case it is used with no cast to ushort.
+
+	* arch/sh/lib/checksum.S: Shift 8-bit when it's big endian.
+
+2000-05-06  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm/io.h (outb, outb_p, outw, outl): Fix the prototype.
+	* arch/sh/kernel/io_se.c (outb, outb_p, outw, outl): Follow the
+	change of io.h.
+
+	* arch/sh/kernel/io_generic.c (inb, inb_p, inw, inl, insb, insw,
+	insl, outb, outb_p, outw, outl, outsb, outsw, outsl): Fix the
+	prototype.
+
+	* arch/sh/kernel/setup_se.c (init_smsc): Removed setting of
+	POWER_CONTROL, since it is done by ACTIVATE.
+
+2000-05-05  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/char/sh-sci.h (SCI_IPR_ADDR): Fixed typo.
+	* arch/sh/kernel/setup_se.c (init_se_IRQ): Fixed the value, it is
+	inverted.
+
+2000-05-03  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/irq.c (do_IRQ): Don't call sti.
+
+	* arch/sh/kernel/irq_ipr.c (make_ipr_irq): Don't enable it at this
+	time.  It will be enabled when request_irq is called.
+
+	Fixes for I/O handling.
+	* arch/sh/kernel/setup_se.c (smsc_config): Use outb_p.
+	(init_smsc): Set Power Control register.
+
+	* include/asm-sh/io.h (inb_p, outb_p): Added.
+	(inb, inw, inl): Fix the return value type.
+
+	* arch/sh/kernel/io_generic.c (delay, inb_p, outb_p): New functions.
+	* arch/sh/kernel/io_se.c (delay, inb_p, outb_p): New functions.
+
+	* include/asm/irq.h (INTC_IPRB): Fix typo.
+
+2000-05-03  NIIBE Yutaka  <gniibe@m17n.org>
+
+	New I/O handling.
+	* arch/sh/kernel/io_generic.c: New file.
+
+	* arch/sh/config.in (CONFIG_IOPORT_START): New CONFIG variable.
+	(CONFIG_CF_ENABLER): Conditionalize it (Not for SolutionEngine). 
+
+	* include/asm-sh/ide.h (ide_default_irq, ide_default_io_base): 
+	Use PORT, instead of ADDR.
+
+	* include/asm-sh/io.h (inb_local, outb_local): Removed.
+	(inb,inw,inl,insb,insw,insl,outb,outw,outl,outsb,outsw,outsl):
+	Make them real function.
+	(sh_isa_slot,isa_readb,isa_readw,isa_readl,isa_writeb,
+	isa_writew,isa_writel,isa_memset_io,isa_memcpy_fromio): Added.
+
+	SolutionEngine support.
+	* include/asm-sh/smc37c93x.h: New file by Kazumoto Kojima.
+	* arch/sh/kernel/setup_se.c: New file by Kazumoto Kojima.
+	* include/asm-sh/hitachi_se.h: Ditto.
+
+	* arch/sh/kernel/Makefile (O_OBJS): Added irq_ipr.o, removing
+	irq_onchip.c.  Added setup_se.c.
+
+2000-05-02  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/fault.c (do_page_fault): Bug fix.  When "Oops", we
+	don't try to follow the page handling data when PGDIR==0.
+
+	* arch/sh/kernel/time.c (time_init): Removed IPR setting.
+	* arch/sh/kernel/irq_ipr.c (init_IRQ): ... moved to here.
+
+	* drivers/char/sh-sci.c (sci_init): Use new calling of set_ipr_data.
+	* drivers/char/sh-sci.h (SCI_IPR_POS, SCI_IPR_ADDR): New macros.
+	(SCI_IPR_OFFSET): Removed.
+
+	* arch/sh/kernel/irq_ipr.c (startup_ipr_irq, ipr_irq_type, 
+	disable_ipr_irq, enable_ipr_irq, make_ipr_irq, mask_and_ack_ipr,
+	end_ipr_irq): Renamed from *_onChip_*.
+	(struct ipr_data): Added member POS.  Remove OFFSET, and added ADDR.
+	(startup_onChip2_irq, onChip2_irq_type, disable_onChip2_irq,
+	enable_onChip2_irq, mask_and_ack_onChip2, end_onChip2_irq): Removed.
+
+	* include/asm-sh/irq.h (make_ipr_irq): Renamed from make_onChip_irq.
+	(set_ipr_data): Change the prototype for address.
+
+	* arch/sh/kernel/irq_ipr.c: Renamed from irq_onchip.c.
+
+2000-05-01  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Support of SH7709A.
+	* arch/sh/kernel/time.c (do_timer_interrupt): Remove Takeshi's
+	debugging code (output to Port C).
+
+	* drivers/char/sh-sci.h (PCLK): Added value for my SH7709A board.
+	* drivers/char/sh-sci.c (sci_set_termios_cflag): Added SH7709's
+	SCPCR/SCPDR handling.
+	(put_char, get_char): Added dummy read of SC_SR, Without this, some
+	garbage characters would appear on SH7709A.
+
+2000-04-30  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (restore_all): Bug fix.  We should consider
+	FPU exception within the critical region.  We should not change the
+	IMASK value in this case.  Or else, we would introduce a "hole" in
+	the critical region.
+
+	* arch/sh/mm/fault.c (update_mmu_cache): Bug fix.  We need to flush
+	ITLB.
+
+	* arch/sh/kernel/time.c (time_init): Bug fix.  The interval should
+	depend on HZ.
+
+2000-04-29  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache.c (flush_cache_all): Don't touch CCR.
+	(flush_cache_range): Don't call icache_purge_range.
+	(dcache_flush_range, dcache_purge_range): Removed.
+
+	* arch/sh/kernel/entry.S (system_call): Bug fix.  Substract 0x40
+	from TRA number.
+
+	* arch/sh/kernel/signal.c (save_sigcontext_fpu): Cosmetic fix.
+	Use __copy_to_user as it's user-space value.
+
+2000-04-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Bug fixes of cache handling of SH-4.
+	* arch/sh/mm/cache.c (dcache_flush_range, dcache_purge_range,
+	dcache_wback_range): Renamed from cache_flush_area,
+	cache_purge_area, cache_wback_area, and only handle D-cache.
+
+	(icache_purge_range): New function.
+	(flush_icache_range): Use icache_purge_range.
+
+	(flush_icache_page): Bug fix.  Rewritten.
+	(flush_cache_range): Bug fix.  Rewritten.
+	(flush_page_to_ram): Implemented.
+
+	(cache_wback_all): Assumes it is called P2 area, and make
+	it inline function.
+	(cache_init): Jump to P2-area before calling cache_wback_all.
+	(flush_cache_all): Likewise.
+
+	(CACHE_IC_ENTRY_SHIFT, CACHE_IC_NUM_ENTRIES,
+	CACHE_OC_ENTRY_PHYS_MASK): New macros.
+
+	* include/asm-sh/cache.h (cache_flush_area, cache_purge_area,
+	cache_wback_area): Hide them as cache.c static function.
+
+2000-04-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Bug fix of cache handling of SH-4.
+	* arch/sh/mm/cache.c (flush_page_to_ram): Replaced from
+	__flush_page_to_ram.
+	* include/asm-sh/pgtable.h (__flush_page_to_ram): Removed.
+	(flush_page_to_ram): Declare directly.
+	* include/asm-sh/system.h (back_to_P1): Added one more nop.
+
+	Cosmetic change for TLB handling of SH-4.
+	* arch/sh/mm/fault.c (__flush_tlb_page): Removed useless
+	ITLB handling.
+
+	Updated to 2.3.99-pre6.
+	* include/asm-sh/{atomic.h,delay.h,hardirq.h,smplock.h,system.h}:
+	Follow the change of 2.3.99-pre6-7.
+	* arch/sh/mm/fault.c (__verify_write, do_page_fault): Follow the
+	change of 2.3.99-pre6-6.
+
+2000-04-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.3.99-pre6-5.
+
+2000-04-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (debug, system_call, restore_all,
+	handle_exception): Change the order of push/pop, and accessing
+	memory on the stack.  Introduce new syscall ABI.
+
+	* include/asm-sh/ptrace.h (struct pt_regs): Reorganize the
+	structure.
+	* include/asm-sh/sigcontext.h: Likewise.
+
+	* arch/sh/kernel/signal.c (setup_frame, setup_rt_frame): 
+	Use New ABI.
+	* arch/sh/kernel/process.c (kernel_thread): Use New ABI.
+	* include/asm-sh/unistd.h (_syscall0, _syscall1, _syscall2,
+	_syscall3, _syscall4, _syscall5): Use New ABI.
+
+	* arch/sh/kernel/process.c (sys_execve, sys_vfork, sys_clone, 
+	sys_fork): Follow the change of syscall ABI.
+	* arch/sh/kernel/signal.c (sys_sigsuspend, sys_rt_sigsuspend, 
+	sys_sigaltstack, sys_sigreturn, sys_rt_sigreturn): Likewise.
+	* arch/sh/kernel/sys_sh.c (sys_pipe): Likewise.
+
+2000-04-21  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/time.c (RCR1_*, RCR2_*): Defined.
+	(set_rtc_time, get_rtc_time, get_cpu_mhz): Use them.
+
+	* arch/sh/kernel/time.c (get_rtc_time): Bug fix.  Clear CF-bit every
+	time.  Set RCR2_RTCEN to start RTC.
+
+	* include/asm-sh/elf.h (SET_PERSONALITY): Follow the change
+	of 2.3.99-pre6-3.
+
+2000-04-20  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Change how to set syscall_nr.
+	* arch/sh/kernel/entry.S (handle_exception): Set syscall_nr = -1,
+	as default.
+	(system_call): Set syscall_nr.
+	* arch/sh/kernel/entry.S (tlb_miss_load, tlb_miss_store,
+	initial_page_write, tlb_protection_violation_load,
+	tlb_protection_violation_store, error): Don't touch syscall_nr.
+	* arch/sh/kernel/fpu.c (do_fpu_state_restore, do_fpu_error): Likewise.
+	* arch/sh/kernel/traps.c (DO_ERROR): Likewise.
+	* arch/sh/kernel/irq.c (do_IRQ): Likewise.
+
+	Change IMASK irq handling implementation.
+	* arch/sh/kernel/entry.S (restore_all, STI): Use r6_bank, instead
+	of r5_bank.
+	* arch/sh/kernel/irq_imask.c (set_interrupt_registers): Likewise.
+	* arch/sh/kernel/head.S (_stext): Likewise.
+	* include/asm-sh/system.h (__sti): Likewise.
+
+	Change CURRENT implementation.  Use $r7_bank1 to have pointer to
+	"current" task, instead of having stack pointer in $r4_bank1.
+	* include/asm-sh/current.h (get_current): Use $r7_bank.
+	* arch/sh/kernel/process.c (__switch_to): Save to $r7_bank.
+	* arch/sh/kernel/entry.S (system_call, ret_with_reschedule,
+	handle_exception): Use $r7_bank.
+	* arch/sh/kernel/traps.c (dump_stack): Likewise.
+	* arch/sh/kernel/head.S (_stext): Likewise.
+
+	Bug fix.
+	* arch/sh/mm/cache.c (flush_cache_all): Assume that it is called in
+	interrupt disabled state.
+	(flush_cache_all): Fixed race condition.
+
+	* arch/sh/kernel/fpu.c (do_fpu_state_restore): Release FPU.
+
+2000-04-16  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/fpu.c (do_fpu_state_restore, fpu_prepare_fd):
+	Handle complicated situation where it gets inconsistent.  It would
+	be good if SH has some atomic op-code for handling SR register, 
+	or ll/sc.
+
+	* arch/sh/kernel/process.c (__switch_to, dump_fpu, copy_thread): 
+	Fix race conditions where FPU registers may be corrupted. I.e.,
+	protect unlazy_fpu.
+	* arch/sh/kernel/signal.c (save_sigcontext_fpu): Likewise.
+
+2000-04-14  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (STI): It was wrong.  Replace from
+	RESTORE_FLAGS.
+
+	* include/asm-sh/system.h (__restore_flags): Use __sti.
+
+	* arch/sh/kernel/irq_imask.c (set_interrupt_registers): Bug fix.
+	We do compare the b7-b4 bits.
+
+2000-04-09  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/irq_imask.c (imask_irq_type) : Change the name
+	so that output of /proc/interrupt looks good.
+	* arch/sh/kernel/irq_onchip.c (onChip_irq_type, onChip2_irq_type): 
+	Likewise.
+
+	* arch/sh/kernel/entry.S (RESTORE_FLAGS): Bug fix.  Compare
+	four bits properly.
+
+	* drivers/char/sh-sci.c (sci_init_drivers): Add CRTSCTS flag.
+
+	* include/asm-sh/elf.h (ELF_PLAT_INIT): Initialize SR register.
+
+	* arch/sh/kernel/signal.c (sys_sigsuspend, sys_rt_sigsuspend,
+	sys_sigaltstack, sys_sigreturn, sys_rt_sigreturn): Follow new
+	syscall ABI.
+
+	* arch/sh/kernel/sys_sh.c (sys_pipe): Follow new syscall ABI.
+
+	* arch/sh/kernel/entry.S (system_call): Bug fix.  Access SP+8, since
+	$r2 and $r3 are on the stack.
+
+	* include/asm-sh/unistd.h (_syscall5): Follow the change of ABI.
+
+2000-04-08  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/config.in: Updated to 2.3.99-pre4-pre5.
+	* arch/sh/kernel/Makefile (.S.o, head.o): Likewise.
+	* arch/sh/lib/Makefile (.S.o): Likewise.
+	* arch/sh/mm/init.c (paging_init): Likewise.
+	* include/asm-sh/namei.h (__emul_prefix): Likewise.
+
+	* arch/sh/defconfig: Updated.
+
+	Syscall ABI changes suggested by Stuart Menefy.
+	* arch/sh/kernel/process.c (sys_fork, sys_clone, sys_vfork,
+	sys_execve): Follow new syscall ABI.
+
+	* arch/sh/kernel/entry.S: New macro COMPAT_OLD_SYSCALL_ABI.
+	New syscall ABI which use $r2 and $r3.
+
+2000-04-05  Kazumoto Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/kernel/head.S: Initialize FPU.
+	* arch/sh/kernel/fpu.c (save_fpu, restore_fpu): Set FPSCR
+	register (SZ=0) before FMOV.S operation.
+	* arch/sh/kernel/entry.S (handle_exception, restore_all): Likewise.
+	* arch/sh/kernel/entry.S (handle_exception): Bug fix for setting $k1.
+	We should better not use delay slot for PC-relative-load.
+
+	* arch/sh/kernel/signal.c (restore_sigcontext): Fix the tsk.
+	(restore_sigcontext_fpu): Fix the structure member name.
+	(save_sigcontext_fpu): Likewise.
+
+2000-04-03 Ludovic LANGE  <ludovic.lange@free.fr>
+
+	* include/asm-sh/ptrace.h (UBC_*): Fix the values.
+
+2000-04-01  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/hardirq.h (in_interrupt): Bug fix.
+	(local_bh_count): Moved from softirq.h.
+
+2000-03-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/char/sh-sci.c: Use module_init.
+
+	* arch/sh/defconfig: Updated.
+
+	* include/asm-sh/sigcontext.h(struct sigcontext): Following the
+	usage of GCC, change sc_xfpregs --> sc_xdregs.
+
+	* arch/sh/kernel/process.c (copy_thread): Don't use struct_cpy.
+	* include/asm-sh/string.h (struct_cpy): Removed.  As we have memcpy
+	implementation.
+
+2000-03-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Merge "ptrace" by Kaz.
+	* arch/sh/kernel/ptrace.c (ubc_set_tracing, compute_next_pc):
+	New functions.  Implemented by Kaz Kojima.
+
+	* arch/sh/kernel/process.c (break_point_trap): New function.
+	Implemented by Kaz Kojima.
+
+2000-03-21  Sugioka Toshinobu  <sugioka@itonet.co.jp>
+
+	* include/asm-sh/uaccess.h (__clear_user): Bug fix.
+	(__strncpy_from_user): Bug fix.
+
+2000-03-20  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/unistd.h (__NR_mincore, __NR_madvise): Follow
+	the change of 2.33.99-pre2.
+	* include/asm-sh/mman.h (MADV_*): Likewise.
+	* arch/sh/kernel/entry.S: Likewise.
+
+	* drivers/char/sh-sci.c (sci_set_real_termios): Follow the change of
+	interface of generic_serial.h of 2.33.99-pre2.
+
+	* include/asm-sh/page.h (clear_user_page, copy_user_page): Follow
+	the change of 2.33.99-pre2.
+	* include/asm-sh/pci.h: Likewise.
+
+2000-03-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/ptrace.h: Change the order of the member, 
+	so that implementation of ptrace gets straight.
+	Remove SP and use REGS[15] instead.
+	* include/asm-sh/sigcontext.h: Likewise.
+
+	* arch/sh/kernel/entry.S (debug, system_call, restore_all,
+	handle_exception): Change the order of push/pop, and reference.
+
+	* arch/sh/kernel/signal.c: Follow the change of struct pt_regs.
+	* arch/sh/kernel/process.c: Likewise.
+
+2000-03-10  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/config.in: Follow the change of 2.3.51.
+	* arch/sh/defconfig: Updated.
+
+	* arch/sh/kernel/signal.c (restore_sigcontext_fpu): New function.
+	(restore_sigcontext): Restore FPU context when used.
+	(save_sigcontext_fpu): New function.
+	(setup_sigcontext): Save FPU context.
+	Based on Kaz' implementation, preserving API of sigcontext.h.
+
+2000-03-09  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/sigcontext.h: Added members for FPU registers.
+	(Originally done by Kaz Kojima)
+
+2000-03-07  Terumitsu Kohama <tkohama@hipro.hitachi-hipro.co.jp>
+
+	* drivers/char/sh-sci.h (SCBRR_VALUE): Fix the expression.
+
+2000-03-07  Sugioka Toshinobu  <sugioka@itonet.co.jp>
+
+	* include/asm-sh/system.h (jump_to_P2, back_to_P1): Improved.
+	* arch/sh/mm/fault.c (__flush_tlb_page): Bug fix for SH-4.
+	Change TLB from P2.
+
+	* include/asm-sh/processor.h (TASK_SIZE): Change the value
+	for SH7709/SH7750 (was: 0x80000000).
+
+2000-03-07  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/defconfig: Updated.
+
+	* include/asm-sh/system.h (jump_to_P2, back_to_P1): Moved
+	from cache.c.
+
+	* arch/sh/mm/cache.c: Use new macro.
+
+	* arch/sh/kernel/entry.S: Replace STI with RESTORE_FLAGS,
+	to allow exception in critical region (interrupt stopped).
+
+	Follow the changes of 2.3.49.
+	* include/asm-sh/pgtable.h (FIRST_USER_PGD_NR): New macro.
+	* include/asm-sh/socket.h (SO_PEERNAME): New macro.
+
+2000-03-06  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Use IMASK for cli/sti (instead of BL).
+	Suggested by Sugioka Toshinobu  <sugioka@itonet.co.jp>.
+	(Initial implementation was done by Kaz Kojima for SH-4.)
+
+	* arch/sh/kernel/entry.S: Use r5_bank to hold the imask value.
+	* arch/sh/kernel/irq_imask.c: Likewise.
+	* arch/sh/kernel/head.S: Likewise.
+	* include/asm-sh/system.h (__sti, __cli, __save_flags,
+	__save_and_cli, __restore_flags): New Implementation.
+
+2000-03-06  Sugioka Toshinobu  <sugioka@itonet.co.jp>
+
+	* drivers/char/sh-sci.h: Add SH-4 support.
+	* drivers/char/sh-sci.c (sci_set_baud, sci_set_termios_cflag):
+	Support lower baudrate.
+	(sci_rx_interrupt, sci_tx_interrupt): Always clear out interrupt
+	source to avoid interrupt loop.
+
+2000-03-05  Greg Banks <gregory.banks@nstc.nec.com.au>
+
+	* drivers/char/sh-sci.c (sci_set_baud), drivers/char/sh-sci.h
+	(BPS_*): Support more BPSs.
+
+2000-03-05  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the changes of 2.3.48.
+	* arch/sh/kernel/setup.c (setup_arch): Call paging_init.
+	* include/asm-sh/pgtable.h: Declare paging_init.
+
+2000-03-04  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/lib/div.S: New file.
+	* arch/sh/kernel/fpu.c (enable_fpu_in_danger): New function.
+
+2000-03-03  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/system.h (__restore_flags): Inherit IMASK and SR.
+
+2000-03-02  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/processor.h (clear_fpu): Don't release_fpu().
+
+2000-03-01  Sugioka Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/mm/fault.c (__flush_tlb_page): Bug fix.  The mask value
+	was wrong (was: 0x30).
+
+2000-02-29  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/process.c (kernel_thread): Call unlazy_fpu.
+
+	* arch/sh/kernel/fpu.c (do_fpu_state_restore): Bug fix. Grab FPU
+	before restore/unlazy_fpu/fpu_init or else, it causes system reset.
+
+	* arch/sh/kernel/irq.c (do_IRQ): Add __sti() before calling softirq.
+
+2000-02-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/char/sh-sci.h (SC_SR): Bug fix.  It's 16-bit for SH-4.
+
+	* arch/sh/kernel/head.S: Removed initalization of FPU.
+	* arch/sh/kernel/setup.c (setup_arch): ...Moved here.
+	Besides, set used_math and flags of init_task.
+
+2000-02-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/user.h (struct user): Add u_fpvalid.
+
+	* arch/sh/kernel/head.S: SR.FD=1 on initialization.
+
+	* arch/sh/kernel/fpu.c (fpu_prepare_fd, do_fpu_state_restore,
+	do_fpu_error, fpu_init): Implemented.
+
+	* arch/sh/kernel/entry.S (restore_all, handle_exception): Handle FPU.
+
+2000-02-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/process.c (__switch_to): Call unlazy_fpu.
+	(last_task_used_math): Removed.
+
+	* include/asm-sh/elf.h (elf_fpregset_t): Change the definition.
+	* include/asm-sh/user.h (user_fpu_struct): Added.
+	(struct user): Added fpu support.
+
+	* arch/sh/kernel/Makefile (O_OBJS): Add fpu.o for CONFIG_CPU_SH4.
+
+2000-02-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/fault.c (do_page_fault): Bug fix. (The value
+	stored in MMU_TTB is kernel address (not physical address)).
+
+	* include/asm-sh/unistd.h (_syscall5): Added.
+	(_syscall4): Bug fix of register __sc7.
+
+2000-02-20  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the changes of 2.3.45-47.
+	* include/asm-sh/page.h (get_order): Added.
+
+2000-02-14  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the changes of 2.3.44.
+	* arch/sh/mm/init.c (paging_init): Use free_area_init_node.
+	* include/asm-sh/pgtable.h (__pgd_offset): Use pgd_index.
+	* arch/sh/mm/cache.c (flush_icache_page): Implemented.
+
+2000-02-13  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/time.c (time_init, get_rtc_time): Don't depend on
+	CONFIG_SH_CPU_RTC (Always enabled).
+
+	* arch/sh/config.in: Serial interface is "choice" (at least for now).
+	(CONFIG_SH_CPU_RTC): Removed.
+
+2000-02-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the change of 2.3.43.
+	Softirq change:
+	* arch/sh/kernel/irq.c (do_IRQ): Change bottom half interface to
+	softirq.
+	* include/asm/softirq.h (local_bh_enable): Ditto.
+	Remove unused macros.
+	* arch/sh/kernel/entry.S (handle_softirq): Ditto.
+	(ret_from_irq): Branch to ret_from_syscall, so that softirq will
+	be called.
+	* arch/sh/kernel/signal.c (do_signal): Go back if kernel mode.
+	(setup_rt_frame): Bug fix.  The number is NR_rt_sigreturn.
+	* include/asm-sh/hardirq.h (in_irq): Moved from softirq.h.
+
+	Memory management change:
+	* include/asm-sh/pgalloc.h (flush_tlb_pgtables): Added.
+	* include/asm-sh/mmu_context.h (enter_lazy_tlb): Added.
+	(switch_mm): Set bit of cpu_vm_mask befor activate_context.
+	* arch/sh/mm/init.c (show_mem): Remove calling show_net_buffers.
+	* include/asm-sh/page.h (PTE_MASK): Added.
+	* include/asm-sh/pgtable.h (_PAGE_CHG_MASK): Use PTE_MASK.
+
+2000-02-10  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/chare/sh-sci.h: New file.
+	* drivers/chare/sh-sci.c: Try to merge sh-scif.c.
+
+	* arch/sh/{config.in,defconfig}: Updated.
+
+2000-02-08  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/setup.c (setup_arch): Use init_bootmem_node,
+	instead of init_bootmem.
+
+	* arch/sh/mm/init.c (paging_init, mem_init): Get memory info from
+	NODE_DATA.  See bootmem.c for detail.  Use free_area_init_core,
+	instead of free_area_init.
+
+2000-02-06  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the change of 2.3.42.
+	* arch/sh/defconfig: Updated.
+	* include/asm-sh/checksum.h: Include changes from 2.3.42.
+	* arch/sh/config.in: Change the semantics of CONFIG_SERIAL.
+	* drivers/char/Makefile: Likewise.
+
+	* drivers/chare/sh-sci.c: Remove locks, actually this *was* the
+	cause of the race condition!
+	(my_hd): Removed.
+
+2000-02-05  Peter Orem <pmorem@iptcorp.com>
+
+	* arch/sh/mm/fault.c (update_mmu_cache): Set PTEH register.
+
+2000-01-30  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the changes of 2.3.41.
+	* include/asm-sh/system.h (xchg_u8): Added.
+	* include/asm-sh/pci.h: Added Dynamic DMA mapping stuff.
+	* include/asm-sh/scatterlist: Added.
+	* arch/sh/kernel/semaphore.c (Read-Write semaphoe): Implemented.
+	* include/asm-sh/semaphore.h (Read-Write semaphoe): Added.
+	* include/asm-sh/unistd.h (__NR_pivot_root): Added.
+	* include/asm-sh/types.h (dma_addr_t): Added.
+	* include/asm-sh/termios.h (TIOCM_LOOP): Added.
+	* include/asm-sh/siginfo.h (NSIGCHLD): Define as 6.
+	* arch/sh/kernel/entry.S (sys_pivot_root): Added.
+	* arch/sh/kernel/sys_sh.c (sys_uname): Apply change of 2.3.41.
+
+	* include/asm-sh/dma.h (MAX_DMA_ADDRESS): Remove +__MEMORY_START,
+	and set it 256MB.
+
+2000-01-29  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (tlb_miss,general_exception): Set
+	return address to ret_from_irq.  In case of system call,
+	it is overwritten to ret_from_syscall.
+
+2000-01-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/dma.h (MAX_DMA_ADDRESS): All area (512MB) can
+	be used with DMA.
+
+2000-01-25  Toshiharu Nozawa <nozawat@hitachi-ul.co.jp>
+
+	* arch/sh/mm/init.c (paging_init): Bug fix for
+	zones_size[ZONE_NORMAL].
+
+2000-01-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/siginfo.h: Follow the changes of 2.3.41-pre2.
+	* arch/sh/kernel/signal.c (do_signal): Likewise.
+
+2000-01-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/sys_sh.c (sys_pipe): Follow the ABI of Kaz'
+	Implementation.
+
+2000-01-21  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/fault.c (do_page_fault): Bug fix for OOPS.
+
+	* include/asm-sh/posix_types.h: Follow the changes of 2.3.40.
+
+2000-01-16  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/char/sh-sci.c (sci_er_interrupt): Kick transmission.
+
+2000-01-15  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/unistd.h (__NR_getrlimit, __NR_umount): Compatibility
+	change for libc.
+
+2000-01-13  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/signal.c (do_signal): set si_uid16.
+
+	* arch/sh/kernel/entry.S: Changed to support *16.
+
+	* include/asm-sh/unistd.h (*32): Added.
+
+	* include/asm-sh/msgbuf.h, include/asm-sh/ipcbuf.h,
+	include/asm-sh/sembuf.h, include/asm-sh/shmbuf.h: New files.
+
+	* include/asm-sh/siginfo.h: Support uid32/gid32.
+
+	* include/asm-sh/posix_types.h: Introduce uid16/32, gid16/32.
+
+2000-01-09  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/time.c (time_init): Remove INTERVAL.
+
+	Follow the changes of 2.3.35--2.3.38.
+	* include/asm/checksum.h (csum_partial_copy_to_user): Removed.
+	* include/sh/processor.h (get_task_struct): Added.
+	* arch/sh/kernel/setup.c (setup_arch): Add condition for
+	INITRD_START.
+
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 76
+version-control: never
+End:
diff -ruN linux-2.6.17-vanilla/ChangeLog-2001 linux-2.6.17/ChangeLog-2001
--- linux-2.6.17-vanilla/ChangeLog-2001	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/ChangeLog-2001	2006-07-12 16:54:18.000000000 +0000
@@ -0,0 +1,1827 @@
+2001-12-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/fpu.c (do_fpu_error): Handle denormalized floating
+	point number.  Remove un-needed grab_fpu.
+
+	* arch/sh/kernel/head.S (_stext): Don't initialize FPU, as FPU is
+	not used by kernel.
+	(SR): Initial value with FD=1 (no FPU use).
+
+	* include/asm-sh/processor.h (unlazy_fpu): Don't need to grab_fpu.
+	(clear_fpu): Call release_fpu.
+
+	* arch/sh/kernel/entry.S (PF_USEDFPU, __PF_USEDFPU): Removed.
+	(restore_all, handle_exception): Simplified.
+	(__fpu_prepare_fd, __init_task_flags): Removed
+
+	* arch/sh/kernel/fpu.c (enable_fpu_in_danger): Removed.
+	(fpu_prepare_fd): Removed.
+
+2001-12-28  Kazumoto Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* include/asm-sh/processor.h (FPSCR_ENABLE_MASK, FPSCR_FLAG_MASK):
+	New macros.
+
+	* arch/sh/kernel/fpu.c (denormal_to_double, ieee_fpe_handler): 
+	New functions.
+
+2001-12-26  Jeremy Siegel  <jsiegel@mvista.com>
+	
+	* arch/sh/kernel/traps.c: fix handle_unaligned_access() branch offsets
+	* arch/sh/mm/fault.c: check for null mmap when handling page fault
+
+2001-12-20  Takashi Yoshii  <yoshii-takashi@hitachi-ul.co.jp>
+
+	* include/asm-sh/pgtable.h (pgprot_noncached): Defined and
+	implemented.
+
+2001-12-16  Paul Mundt  <lethal@chaoticdreams.org>
+
+	* drivers/char/shwdt.c: Added a proper timer for pinging the device
+	periodically. Clock division ratio is now settable at load time ..
+	Numerous other small bug fixes.
+
+2001-12-14  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/hitachi_se.h (PA_BCR): Comment fix to sync mainline.
+
+	* drivers/block/rd.c (initrd_read): Don't need to flush the cache.
+	(This file can be removed.)
+	* include/linux/highmem.h (memclear_highpage_flush): Likewise.
+
+2001-12-12  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/rtc.c (sh_rtc_gettimeofday): Fix SH-4 RTC bug work
+	around.
+	(set_rtc_time, sh_rtc_settimeofday): Likewise. Remove schedule_timeout
+	call and merged to sh_rtc_settimeofday.
+
+2001-12-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/sys_sh.c-1.7: Removed.
+
+2001-12-10  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* mm/memory.c (do_wp_page): Re-introduce ifdef-out-ing
+	flush_cache_page.
+
+2001-12-06  M. R. Brown  <mrbrown@0xd6.org>
+
+        * drivers/char/maple_keyb.c (dc_scan_kbd): Replaced calls to
+	memscan() with calls to memchr().  Credit goes to Robert M. Love for
+	the patch.
+
+2001-12-04  Jeremy Siegel  <jsiegel@mvista.com>
+	* Include gdrom compile patch from Robert M. Love <rml@tech9.net>
+	* drivers/net/gdrom.c: as per patch
+	* include/asm-sh/segment.h: new file as per patch
+
+2001-12-03  Jeremy Siegel  <jsiegel@mvista.com>
+	* init/main.c: Robert Love's <rml@tech9.net> patch adding gdrom
+	  to bootable device list, as per M.R. Brown (mrbrown@0xd6.org)
+	* init/main.c: new file
+
+2001-11-30  Jeremy Siegel  <jsiegel@mvista.com>
+	* drivers/char/shwdt.c: missing file copied from full tree
+	* updated to 2.5.0 (same as 2.4.15)
+	
+2001-11-02  Jeremy Siegel  <jsiegel@mvista.com>
+
+	* arch/sh/config.in: allow setting of CONFIG_SH_PCIDMA_NONCOHERENT
+	* include/asm-sh/stat.h: consistency w/glibc using either endian
+	* include/asm-sh/uaccess.h: add Tomoyoshi ASANO's big-endian fix
+	* arch/sh/kernel/{io_,pci-}7751se.c: minor cleanup
+
+2001-10-30  Jeremy Siegel  <jsiegel@mvista.com> 
+
+	* arch/sh/kernel/io_7751se.c: get pci.h from linux, not asm
+	* include/asm-sh/pci.h: define pci_dac_dma_supported()
+
+2001-10-16  M. R. Brown  <mrbrown@0xd6.org>
+
+	* Branch merge of linux-2_4-branch.
+
+	* Added treelink.sh and treeunlink.sh to the scripts/ directory.
+
+	* Merged in NIIBE's updates from kernel/.
+
+2001-10-15  M. R. Brown  <mrbrown@0xd6.org>
+
+	* Brought HEAD to a state ready for 2.5 development.
+
+	* linux-2_4-branch branch created.  This allows for concurrent
+	development of the 2.4 and 2.5 trees.
+
+2001-10-14  NIIBE Yutaka  <gniibe@server1.m17n.org>
+
+	* drivers/net/8139too.c (rtl8139_start_xmit): Fix merge gerbage.
+
+	* arch/sh/kernel/setup_se.c (init_se_IRQ): Remove
+	CONFIG_SH_7751_SOLUTION_ENGINE section.
+	* include/asm-sh/hitachi_se.h (PA_BCR): Likewise.
+
+2001-10-13  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/Makefile (CFLAGS, AFLAGS): Use -m4 -mno-implicit-fp for
+	SH4 compile.  We used to use -m4-nofpu but it's not compatible
+	to -m4 (differs in calling convention).
+
+2001-10-13  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.13-pre2.
+
+2001-10-12  David Woodhouse  <dwmw2@redhat.com>
+
+	* arch/sh/config.in: Set default memory sizes for Solution Engines
+
+2001-10-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.12.
+	* Updated to 2.4.11.
+
+2001-10-04  Paul Mundt  <lethal@chaoticdreams.org>
+
+	* arch/sh/mm/fault.c (do_page_fault): Don't kill init when out
+	of memory.
+
+2001-10-01  M. R. Brown  <mrbrown@0xd6.org>
+
+	* drivers/video/pvr2fb.c (pvr2fb_init): Make fb_find_mode() default
+	to 16bpp instead of 32bpp.
+
+2001-09-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/uaccess.h (__put_user_u64): New macro.
+	* arch/sh/kernel/signal.c: Include <linux/personality.h>.
+	* drivers/char/sh-sci.c (banner): Fix __initdata.
+
+	* Updated to 2.4.10.
+
+2001-09-15  Paul Mundt  <lethal@chaoticdreams.org>
+
+	* arch/sh/Makefile: Remove usage of $(tool_prefix) and needless
+	redefinition of CROSS_COMPILE. Obey toplevel CROSS_COMPILE
+	instead.
+
+2001-09-13  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/sys_sh.c (arch_get_unmapped_area): Don't
+	COLOUR_ALIGN when it comes with MAP_PRIVATE.
+
+2001-09-13  Paul Mundt  <lethal@chaoticdreams.org>
+
+	* Documentation/Configure.help: Add CONFIG_SH_WDT description.
+	* arch/sh/config.in: Add watchdog card menu, and watchdog driver.
+	* drivers/char/Makefile: Add CONFIG_SH_WDT support.
+	* drivers/char/shwdt.c: New file.
+
+2001-09-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/softirq.h (__cpu_raise_softirq): Removed.
+	* Updated to 2.4.10-pre6.
+
+2001-09-10  David Woodhouse <dwmw2@infradead.org>
+
+	* arch/sh/mm/cache-sh3.c: Clearer definitions of CCR_CACHE_VAL and
+	CCR_CACHE_INIT.
+	* arch/sh/mm/cache-sh4.c: Likewise.
+
+2001-09-03  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/keyboard.h (kbd_rate): Removed.
+	* Updated to 2.4.10-pre4.
+
+2001-08-31  M. R. Brown <mrbrown@0xd6.org>
+
+        * arch/sh/kernel/Makefile: Add dependency for rtc-aica.o for
+        CONFIG_SH_DREAMCAST.
+        * arch/sh/kernel/mach_dc.c: Add prototypes and pointers for the AICA
+        RTC routines to the machvec.
+        * arch/sh/kernel/time.c (time_init): Remove checks for
+        MACH_DREAMCAST as we can just use the RTC routines defined in the
+        machvec.
+        * arch/sh/kernel/rtc-aica.c: New file.
+
+2001-08-31  Jeremy Siegel <jsiegel@mvista.com>
+
+	* include/asm-sh/system.h: make __cli_and_save() volatile again
+
+2001-08-24  David Woodhouse  <dwmw2@infradead.org>
+
+	* arch/sh/mm/cache-sh3.c: We were missing a loop over the ways in
+	__flush_wback_region(). Also disable interrupts between reading
+	an entry and writing it back modified.
+	* arch/sh/kernel/pcibios.c: Generic versions of five pcibios_xxx()
+	functions which can be shared between platforms.
+	* arch/sh/kernel/pci_st40.c: Use $1.
+	* arch/sh/kernel/pci-dc.c: Use $1.
+	* arch/sh/kernel/pci-sh7751.c: Use $1.
+	* arch/sh/kernel/Makefile: Use $1.
+
+2001-08-23  David Woodhouse  <dwmw2@infradead.org>
+
+	* arch/sh/config.in: Add CONFIG_MEMORY_SIZE, clean up 
+	platform-specific memory start/size definitions.
+	* include/asm-sh/page.h: Define __MEMORY_SIZE.
+	* arch/sh/kernel/setup.c: Use __MEMORY_SIZE instead of hardcoded 4MiB.
+
+2001-08-22  David Woodhouse  <dwmw2@infradead.org>
+
+	* drivers/net/via-rhine.c: Update to version LK1.1.11 from
+	2.4.9-ac9 (set dev->base_addr before first call to wait_for_reset()
+	and free the bounce buffers only if we allocated any in the first
+	place.
+
+2001-08-20  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/elf.h: Removed inclusion of <asm/byteorder.h>.
+
+2001-08-17  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/net/8139too.c: Include <linux/completion.h>.
+	* drivers/maple/maple.c: Likewise.
+	(kmapled_exited, maple_exit, kmapled_thread): Use new "completion"
+	interface.
+
+	* include/asm-sh/keyboard.h (kbd_rate): New function.
+	* include/asm-sh/io.h (page_to_bus): New macro.
+	* include/asm-sh/mmzone.h (page_to_phys): Defined.
+
+	* Updated to 2.4.9.
+
+2001-08-14  David Woodhouse  <dwmw2@infradead.org>
+
+	* arch/sh/kernel/pci-dma.c: Use dma_cache_wback_inv() in 
+	pci_alloc_consistent instead of flush_cache_all(), which is
+	a nop on SH3. If the size is so large that it's quicker just 
+	to flush the whole cache, that's a decision for the
+	arch-specific cache management code to make.
+
+2001-08-11  David Woodhouse  <dwmw2@infradead.org>
+
+	* arch/sh/config.in: New CONFIG_SH_PCIDMA_NONCOHERENT option
+	* include/asm-sh/pci.h: Include cache management calls for the
+	case where the above option is set.
+	* arch/sh/kernel/sh_ksyms.c: include linux/pci.h not asm/pci.h
+
+2001-08-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.8.
+
+2001-08-10  Jeremy Siegel <jsiegel@mvista.com>
+	Change SH7751 to separate machine type.
+	Added new files:
+	* arch/sh/kernel/{io,setup,mach,led}_7751se.c
+	* include/asm-sh/{io,hitachi}_7751se.h
+	Modified files:	
+	* arch/sh/kernel/Makefile, arh/sh/kernel/{io,led}_se.c
+	* arch/sh/kernel/pci-{7751se,sh7751}.c
+	* include/asm-sh/{io,pci,machvec}.h
+
+2001-08-10  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache-sh4.c (__flush_wback_region,
+	__flush_purge_region): Comment fix for the arguments.
+	* arch/sh/mm/cache-sh3.c (__flush_wback_region,
+	__flush_purge_region): Likewise.
+
+2001-08-10  David Woodhouse  <dwmw2@infradead.org>
+
+	* arch/sh/mm/cache-sh3.c: Implementation of cache management
+	routines __flush_{wback,invalidate,purge}_region. Required for
+	SH3 platforms which have DMA hardware.
+	* include/asm-sh/pgtable.h: Take the 'extern' definitions of the
+	above out of #ifdef __SH4__
+
+2001-08-10  David Woodhouse  <dwmw2@infradead.org>
+
+	* drivers/mtd/maps/solutionengine.c: Map driver for flash chips
+	and PROM on Solution Engine and similar boards.
+	* drivers/mtd/maps/Config.in: Appropriate magic.
+	* drivers/mtd/maps/Makefile: Ditto.
+
+2001-08-10  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.8-pre8.
+
+	Bug fix for dis-contiguous page handling.
+	* include/asm-sh/mmzone.h (is_valid_page): New inline function.
+	(VALID_PAGE): Use is_valid_page.
+
+2001-08-09  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.8-pre7.
+
+	* arch/sh/mm/fault.c (update_mmu_cache): Use __set_bit (was:
+	set_bit).
+	* arch/sh/mm/cache-sh4.c (copy_user_page): Set PG_mapped flag
+	in advance.  Because it will be mapped real soon now.
+	(clear_user_page): Ditto.
+
+	* include/asm-sh/pgtable.h (__flush_cache_page): Removed.
+	* arch/sh/mm/cache-sh4.c (__flush_dcache_page): Renamed from
+	__flush_cache_page and make it static.  Removed u0, as it's
+	always 0.  Removed the statements of case u0!=0.
+	(flush_dcache_page): Call __flush_dcache_page.
+
+	* arch/sh/mm/fault.c (update_mmu_cache): We only need to flush
+	cache of kernel mapped address.
+
+2001-08-08  YAEGASHI Takeshi  <t@keshi.org>
+
+	* drivers/video/pvr2fb.c:
+	(pvr2_modedb): fix "vga_640x480" entry.
+	(pvr2fb_set_var): set SCROLL_YREDRAW to speed up scroll.
+	(pvr2_setcolreg): fix bit field manipulation for RGB565.
+	(pvr2fb_init, pvr2fb_setup): correct number of entries of
+	cable_type and video_output.
+	* drivers/char/dc_keyb.c: New file: implement kbd_translate().
+	* drivers/char/Makefile: Ditto.
+	* include/asm-sh/keyboard.h: Ditto.
+	* arch/sh/kernel/pci-dc.c (pci_free_consistent): reset
+	gapspci_dma_used in order to allocate PCI buffer again.
+
+2001-08-08  Greg Banks  <gnb@alphalink.com.au>
+
+	* include/asm-sh/linux_logo.h: New logo.
+
+2001-08-08  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.8-pre6.
+	* Updated to 2.4.8-pre5.
+
+	* arch/sh/mm/cache-sh4.c (ptep_get_and_clear): Moved to ...
+	(check_cache_page): Removed.
+	(__flush_icache_page): Removed.
+	* include/asm-sh/pgtable.h (__flush_icache_page): Removed.
+
+	* include/asm-sh/pgalloc.h (ptep_get_and_clear): ... here. 
+	(ptep_test_and_clear_young, ptep_test_and_clear_dirty,
+	ptep_set_wrprotect, ptep_mkdirty): Moved from pgtable.h.
+	(ptep_get_and_clear needs definition of mm.h).
+
+	* include/asm-sh/pgtable.h (PG_mapped): Renamed from
+	PG_mapped_with_alias.
+	(__flush_cache_page): Removed last argument, and add first arg.
+	* arch/sh/mm/cache-sh4.c (__flush_cache_page): Take u0 address
+	as first argument.  Don't care about I-cache.
+	(flush_dcache_page): Follow the change.
+
+	* include/asm-sh/ide.h (ide_insw): Removed.
+	* drivers/cdrom/gdrom.c (gdrom_intr): Remove __flush_wback_region.
+
+	* arch/sh/mm/fault.c (update_mmu_cache): Flush the cache when first
+	mapped, even if it has no alias.  (We needed this to for NFS).
+
+2001-08-07  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/net/8139too.c (rtl8139_hw_start): Added tp->rx_config = 0.
+
+2001-08-07  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgtable.h (PG_mapped_with_alias): New macro.
+	(PG_dcache_dirty: Deleted.
+	(ptep_get_and_clear, ptep_test_and_clear_young,
+	ptep_test_and_clear_dirty, ptep_set_wrprotect, ptep_mkdirty,
+	pte_same): Define here (was: included by <asm-generic/pgtable.h>).
+
+	* arch/sh/mm/cache-sh4.c (flush_dcache_page): New implementation.
+	Check if it's mapped or not.
+	(ptep_get_and_clear): New function (was: generic implementation).
+
+	* arch/sh/mm/fault.c (update_mmu_cache): Flush the cache when
+	it's mapped at first, and mark the page as it's mapped.
+	Bug fix: check the page is VALID or not.
+
+	* arch/sh/mm/cache-sh4.c (CACHE_ALIAS): Moved to ...
+	* include/asm-sh/pgtable.h (CACHE_ALIAS): ... here.
+
+	* arch/sh/kernel/setup.c (boot_cpu_data): Have initial value for
+	loops_per_jiffy.
+
+2001-08-06  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/clear_page.S: Use aligned address for write back.
+	* arch/sh/mm/__copy_user_page-sh4.S: Likewise.
+	* arch/sh/mm/copy_page.S: Likewise.
+
+	* arch/sh/mm/cache-sh4.c (CACHE_IC_NUM_WAYS, CACHE_OC_NUM_WAYS): 
+	Removed.
+	(cache_wback_all): Removed and integrate to cache_init.
+
+	* arch/sh/mm/copy_page.S: Write back TO,
+	* arch/sh/mm/clear_page.S: Write back TO.
+
+	* arch/sh/mm/cache-sh3.c (cache_init): Read CCR at P2.
+	* arch/sh/mm/cache-sh4.c (cache_init): Likewise.
+	(__flush_cache_page): Fix bug.  Call restore_flags.
+	(flush_cache_page): New implementation.
+	(clear_user_page, copy_user_page): Do it in assembler routines.
+
+2001-08-05  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgtable.h (PTE_PHYS_MASK): Defined.
+	(pte_page): Bug fix.  Use PTE_PHYS_MASK.
+
+	* mm/vmscan.c (try_to_swap_out): Bug fix.  Flush the page before we
+	clear the PTE.
+
+	* Updated to 2.4.8-pre4.
+
+2001-08-04  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache-sh4.c (__flush_wback_region): Fix bug of
+	expression of END.
+	(__flush_purge_region): Likewise.
+	(__flush_invalidate_region): Likewise.
+
+2001-08-03  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/cdrom/gdrom.c (gdrom_init): Restrict merging request.
+	(dont_merge_requests_fn, dont_bh_merge_fn): New functions.
+
+	* arch/sh/kernel/sys_sh.c (arch_get_unmapped_area): Always align
+	to 16KB.
+
+	* arch/sh/mm/cache-sh4.c (flush_cache_sigtramp): Protect from
+	interrupt.
+	(__flush_cache_page, __flush_icache_page): Likewise.
+	(check_cache_page): Likewise.
+
+2001-08-02  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/maple/maple.c (maple_send): Bug fix.  Call
+	dma_cache_wback_inv. (was: __flush_wback_region).
+
+	* include/asm-sh/io.h (dma_cache_wback_inv, dma_cache_inv,
+	dma_cache_wback): Defined with new __flush_XXX_region functions.
+	(was: bogus cache_XXX_area functions, not implemented).
+
+	* drivers/cdrom/gdrom.c (gdrom_intr): Follow the change of
+	the last argument of __flush_wback_region.
+	* include/asm-sh/ide.h (ide_insw): Likewise.
+
+	* arch/sh/mm/cache-sh4.c (__flush_purge_region): New function.
+	(__flush_icache_page): New function. 
+	(__flush_wback_region, __flush_invalidate_region): Last argument
+	is SIZE (was: END).
+
+	* include/asm-sh/pgtable.h (__flush_purge_region,
+	__flush_icache_page): Added.
+
+2001-07-31  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/system.h (switch_to): Revert changes of 07-30.
+	In schedule(), switch_to() is always called with interrupt enabled.
+
+	* drivers/cdrom/gdrom.c (DEVICE_NAME): Shorter name (when error).
+	(gdrom_do_command): Protect from interrupts.
+	(do_gdrom_request): Handle the case where a request is made up
+	from multple chunks.
+
+	* Updated to 2.4.8-pre3.
+
+	* drivers/cdrom/gdrom.c: New file.
+	* drivers/cdrom/Makefile, drivers/cdrom/Config.in, arch/sh/config.in:
+	Support SEGA Dreamcast GD-ROM Driver (CD-R).
+
+2001-07-30  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/pci-dc.c (pci_alloc_consistent): Format arg change
+	to stop warning.
+	* drivers/maple/maple.c: Likewise.
+
+	* arch/sh/kernel/pci-sh7751.c (pci_conf1_read_config_byte,
+	pci_conf1_read_config_word, pci_conf1_read_config_dword,
+	pci_conf1_write_config_byte, pci_conf1_write_config_word,
+	pci_conf1_write_config_dword): Use no underscore version
+	of save_and_cli and restore_flags.
+
+	* arch/sh/overdrive/led.c (mach_led): Likewise.
+
+	* include/asm-sh/system.h (switch_to): Alternative implementation
+	which maintain interrupt-disabled state.
+	(__save_flags, __save_and_cli): New implementations.
+	(__restore_flags): Debuuging implementation.
+	(really_restore_flags): New define.
+
+	* include/asm-sh/softirq.h (local_bh_enable): Add barrier and
+	remove __sti.
+
+	* arch/sh/kernel/setup_dc.c (disable_systemasic_irq,
+	enable_systemasic_irq): Protect critical region.  Driver
+	can call disable_irq.
+
+	* arch/sh/kernel/setup_cqreek.c (setup_cqreek): Remove declaration
+	of disable_hlt.
+
+	* arch/sh/kernel/process.c (cpu_idle): Match __cli/__sti.  Avoid
+	sleeping with interrupt disabled.
+
+2001-07-30  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* include/asm-sh/pgtable.h (__flush_wback_region): Defined for SH3.
+
+2001-07-29  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/char/sh-sci.c (put_char, put_string): Only for
+	CONFIG_SERIAL_CONSOLE.
+
+	* Updated to 2.4.8-pre2.
+
+2001-07-28  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/mm/__copy_user_page-sh4.S (__copy_user_page): Bug fix.
+	Do not clobber r10,r11.
+	* arch/sh/mm/copy_page.S (copy_page): Bug fix. Do not clobber r10,r11.
+	* arch/sh/mm/cache-sh4.c (clear_user_page, copy_user_page): Bug fix.
+	Call __flush_tlb_page with interrupt disabled.
+
+2001-07-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/Makefile (arch/sh/vmlinux.lds): Revert the change of
+	2001-07-27.  GCC complains (misunderstand) it.
+
+2001-07-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/vmlinux.lds.in (.data.cacheline_aligned): Align 16 for SH3.
+	Reported by Masahiro ABE <m-abe@aandd.co.jp>.
+	* arch/sh/vmlinux.lds.in: Rename from vmlinux.lds.S, since
+	it's not written in assembler.
+	* arch/sh/Makefile (arch/sh/vmlinux.lds): Follow the change.
+
+	* drivers/ide/ide.c (ide_wait_cmd): Revert the change to sync
+	mainline.  IIRC, it was needed for SolutionEngine, but such
+	timing issue shoule be solved target specific way.
+
+	* scripts/Configure: Revert the change to sync mainline.
+
+	Follow the changes of 2.4.8-pre1.
+	* include/asm-sh/irq.h (irq_demux): Make them static inline.
+	* include/asm-sh/mmu_context.h (get_new_mmu_context, get_mmu_context,
+	init_new_context, destroy_context, set_asid, get_asid,
+	activate_context, switch_mm, enter_lazy_tlb): Likewise.
+	* include/asm-sh/io.h (isa_port2addr, ctrl_inb, ctrl_inl, ctrl_outb,
+	ctrl_outw, virt_to_phys, phys_to_virt): Likewise.
+	* include/asm-sh/processor.h (thread_saved_pc, grab_fpu,(release_fpu): 
+	Likewise.
+	* include/asm-sh/uaccess.h (__strncpy_from_user, __clear_user, 
+	__copy_user): Likewise.
+	* include/asm-sh/semaphore.h (sema_init): Likewise.
+	* include/asm-sh/pci.h (pci_dma_supported): Likewise.
+	* include/asm-sh/page.h (get_order): Likewise.
+	* include/asm-sh/checksum.h (csum_partial_copy_nocheck,
+	csum_partial_copy_from_user): Likewise.
+
+	* include/asm-sh/smplock.h: Remove bogus SMP lock implementation.
+
+	* Updated to 2.4.8-pre1.
+
+	* arch/sh/kernel/entry.S (ret_from_fork): Call schedule_tail.
+	by Stuart Menefy <stuart.menefy@st.com>.
+
+2001-07-26  Takashi YOSHII  <yoshii-takashi@hitachi-ul.co.jp>
+
+	* include/asm-sh/irq.h, include/asm-sh/dma.h, arch/sh/kernel/dma.c,
+	arch/sh/kernel/Makefile, arch/sh/config.in,
+	Documentation/Configure.help: DMA support update.
+
+2001-07-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/setup_cqreek.c (mask_and_ack_cqreek): Move the
+	inw after the masking.
+	(setup_cqreek): Remove call of disable_hlt.
+
+	* arch/sh/mm/cache-sh4.c (flush_cache_sigtramp): Access from P2
+	area.
+
+2001-07-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache-sh4.c (__flush_wback_region): Rename from
+	__flush_dcache_region, as it's confusing.
+	(__flush_invalidate_region): Make it externally visible.
+	* include/asm-sh/pgtable.h: Follow the change.
+	* drivers/maple/maple.c (maple_send): Follow the change.
+
+2001-07-24  Masahiro ABE <m-abe@aandd.co.jp>
+
+	* arch/sh/kernel/setup.c (setup_arch): #ifdef mv_unknown to eliminate
+	warning.
+
+2001-07-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/segment.h: Removed.
+	* arch/sh/kernel/pci-sh7751.c: Remove inclusion of <asm/segment.h>.
+
+2001-07-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/time.c (do_timer_interrupt): Remove #if 0 for
+	sh_do_profile.
+
+2001-07-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/copy_page.S, arch/sh/mm/clear_page.S: Bug fix.
+	SH-3 doesn't have movca op-code.
+
+	* include/asm-sh/page.h (clear_page, copy_page): Declared.
+	* arch/sh/mm/clear_page.S, arch/sh/mm/copy_page.S: New files.
+	* arch/sh/mm/Makefile (obj-y): Added.
+
+	* include/asm-sh/page.h (__clear_user_page, __copy_user_page):
+	Declared.
+	* arch/sh/mm/cache-sh4.c: Use them.
+	* arch/sh/mm/__clear_user_page-sh4.S,
+	arch/sh/mm/__copy_user_page-sh4.S: New files.
+	* arch/sh/mm/Makefile: Added.
+
+2001-07-23  David Woodhouse <dwmw2@infradead.org>
+
+	* arch/sh/mm/Makefile (CONFIG_CPU_SH3, CONFIG_CPU_SH4): Conditionally
+	defined.
+	* arch/sh/mm/cache-sh3.c, arch/sh/mm/cache-sh4.c: New files.
+	* arch/sh/mm/cache.c: Removed.
+
+2001-07-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/io_adx.h: Copyright notice fix.
+
+	* Documentation/Configure.help (CONFIG_CPU_LITTLE_ENDIAN): Revert the
+	change to sync mainline.
+	* README (ON WHAT HARDWARE DOES IT RUN?): Likewise.
+
+	* Documentation/Configure.help (CONFIG_8139TOO_DREAMCAST): Added.
+	* drivers/net/Config.in (CONFIG_8139TOO_DREAMCAST): New config.
+	* drivers/net/8139too.c (CONFIG_8139TOO_DREAMCAST): New config.
+	(RX_BUF_LEN_IDX): Depends CONFIG_8139TOO_DREAMCAST.
+	(rtl8139_rx_config): Likewise.
+	(rtl8139_start_xmit): Use USE_NO_DMAMAP.
+
+	* arch/sh/config.in: Fix the indentation.
+
+2001-07-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.7.
+
+2001-07-20  Masahiro ABE <m-abe@aandd.co.jp>
+
+	* Documentation/Configure.help (CONFIG_CF_AREA5): Edit text.
+
+2001-07-19  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.7-pre8.
+
+	* arch/sh/kernel/process.c (cpu_idle): Remove not-needed __sti.
+	As it was asymmetric, may cause trouble.
+
+2001-07-18  Masahiro ABE <m-abe@aandd.co.jp>
+
+	* Documentation/Configure.help (CONFIG_CF_ENABLER): Support area 5 too.
+	(CONFIG_CF_AREA5): Added.
+	* arch/sh/config.in: Added selection of CompactFlash area.
+	* arch/sh/kernel/cf-enabler.c (allocate_cf_area): Added to support
+	directly connected CompactFlash for SH4.
+	(cf_init_default): call allocate_cf_area if SH4.
+
+	* Documentation/Configure.help (CONFIG_SH_GENERIC): Added ADX.
+	* arch/sh/config.in (CONFIG_SH_ADX): Added for ADX support.
+	(CONFIG_MEMORY_START): Added definition for ADX.
+	(CONFIG_CF_ENABLER): Added ADX.
+	* arch/sh/kernel/Makefile: Added ADX support.
+	* include/asm-sh/io.h: Added ADX support.
+	* include/asm-sh/machvec.h: Added ADX support.
+
+	* arch/sh/kernel/{io_adx.c,mach_adx.c,setup_adx.c}: New files.
+	* include/asm-sh/io_adx.h: New file.
+
+	* arch/sh/kernel/irq_maskreg.c: New file.
+	Add support for simple word-size IRQ mask register.
+	* include/asm-sh/irq.h : Likewise.
+
+2001-07-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/fault.c (__do_page_fault): Use pte_not_present.
+	* include/asm-sh/pgtable.h (pte_not_present): New inline function.
+
+2001-07-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Don't use pgd/pte memory pool.
+	* include/asm-sh/pgalloc.h (do_check_pgt_cache): Defined.
+	(pgd_quicklist, pte_quicklist, pgtable_cache_size): Null definition.
+	(pgd_alloc): Renamed from pgd_alloc_slow.
+	(pgd_free): Renamed from free_pgd_slow.
+	(get_pgd_fast, free_pgd_fast): Removed.
+	(pte_alloc_one_fast): Just return 0.
+	(pte_free_fast): Removed.
+	(pte_free): Defined as pte_free_slow.
+
+	* arch/sh/mm/init.c (do_check_pgt_cache): Removed.
+	(show_mem): Removed showing pgtable_cache_size.
+
+	* include/asm-sh/processor.h (pte_quick, pgtable_cache_sz): Removed.
+	(hard_math): Change the order.
+	* arch/sh/kernel/setup.c: Follow the change.
+
+	* include/asm-sh/pgtable-2level.h (pgd_clear): Do nothing.
+
+	* mm/memory.c (free_one_pgd): Revert change of 2001-07-16.
+	(As it's not accepted by Linus.)
+
+
+	* Updated to 2.4.7-pre7.
+
+	* arch/sh/mm/cache.c (__flush_cache_page): Don't disable interrupt.
+
+2001-07-17  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache.c (p3map_sem): New variable.
+	(p3_cache_init): Initialize p3map_sem.
+	(clear_user_page, copy_user_page): Use semaphore(s) to protect
+	critical section.
+	(flush_cache_all): New implementation.
+
+	* arch/sh/mm/fault.c (update_mmu_cache): Make the critical section
+	shorter.
+
+2001-07-17  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/mm/cache.c (clear_user_page, copy_user_page): Bug fix.
+	Disable interrupt until __flush_dcache_region() is done.
+
+2001-07-17  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/fault.c (__do_page_fault): Bug fix.  Don't allow
+	PGD overrun.
+
+	* arch/sh/kernel/dma.c: Remove inclusion of <asm/smp.h>.
+	* arch/sh/kernel/setup.c, arch/sh/kernel/irq.c: Ditto.
+	* arch/sh/kernel/process.c: Include file clean up.
+
+	* arch/sh/kernel/process.c (machine_restart, machine_halt): New
+	implementations.
+
+2001-07-16  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* mm/memory.c (free_one_pgd): Bug fix.  Do pgd_clear _after_
+	free_one_pmd.
+
+	* arch/sh/kernel/setup.c (boot_cpu_data): Bug fix.  0 for
+	pgtable_cache_sz.
+
+	* arch/sh/mm/cache.c (clear_user_page, copy_user_page): Clear PTE 
+	after use.
+
+2001-07-16  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* include/asm-sh/pgalloc.h (__flush_tlb_page): Declared.  
+	* arch/sh/mm/cache.c : Add inclusion <asm/pgalloc.h>,
+	<asm/mmu_context.h>
+	(clear_user_page, copy_user_page): Do __flush_tlb_page() before
+	update_mmu_cache().
+	* arch/sh/mm/fault.c (__flush_tlb_page): Make it global.
+
+2001-07-16  Takashi YOSHII  <yoshii-takashi@hitachi-ul.co.jp>
+
+	* arch/sh/kernel/ptrace.c (ubc_set_tracing): Bug fix for SH7709A.
+
+	* include/asm-sh/ptrace.h (UBC_TYPE_SH7729, BBR_CPU, BBR_DMA,
+	BRCR_PCTE): Defined.
+	(BBR_WRITE): Change the value. 
+
+2001-07-16  Masahiro Abe <m-abe@aandd.co.jp>
+
+	IRQ handling update.
+	* arch/sh/kernel/setup_bigsur.c (end_bigsur_irq): Don't enable IRQ
+	when it is disabled.
+	* arch/sh/kernel/setup_ec3104.c (end_ec3104_irq): Likewise.
+	* arch/sh/kernel/setup_hd64465.c (end_hd64465_irq): Likewise.
+	* arch/sh/kernel/setup_hd64461.c (end_hd64461_irq): Likewise.
+	* arch/sh/kernel/setup_dc.c (end_systemasic_irq): Likewise.
+	* arch/sh/kernel/irq_ipr.c (end_pint_irq): Likewise.
+
+2001-07-16  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/mmzone.h: Remove inclusion of bootmem.h.
+
+2001-07-12  NIIBE Yutaka  <gniibe@m17n.org>
+
+	IRQ handling bug fix.  Reported by Masahiro Abe <m-abe@aandd.co.jp>
+	* arch/sh/kernel/irq_intc2.c (end_intc2_irq): Don't enable IRQ
+	when it is disabled.
+	* arch/sh/kernel/irq_ipr.c (end_ipr_irq): Likewise.
+	* arch/sh/kernel/irq_imask.c (end_imask_irq): Likewise.
+
+	* arch/sh/kernel/irq.c (setup_irq): Clear desc->status.
+	(probe_irq_on): Removed unmatched spin_unlock_irq().
+
+2001-07-12  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache.c (copy_user_page, clear_user_page): Bug fix.
+	Call __flush_dcache_region so that the data goes to memory, to
+	maintain cache coherency between I and D.
+
+2001-07-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/config.in (CONFIG_DEBUG_KERNEL_WITH_GDB_STUB): Removed.
+
+	* arch/sh/kernel/entry.S (call_dae, debug_trap): Only for
+	CONFIG_SH_STANDARD_BIOS (was: also CONFIG_DEBUG_KERNEL_WITH_GDB_STUB).
+	* arch/sh/kernel/traps.c (gdb_vbr_vector, trap_init): Likewise.
+	* drivers/char/sh-sci.c: Likewise.
+
+	* Documentation/Configure.help (CONFIG_GDB_STUB_VBR): Removed.
+	(CONFIG_DEBUG_KERNEL_WITH_GDB_STUB): Removed.
+	(CONFIG_STNIC): Added.
+	(CONFIG_SH_RTC): Added.
+	(CONFIG_SH_GENERIC): Added.
+
+2001-07-11  Masahiro Abe <m-abe@aandd.co.jp>
+
+	* include/asm-sh/machvec.h: Bug fix.  Move #endif.
+
+2001-07-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/hardirq.h (irq_cpustat_t): Added __ksoftirqd_task.
+	* include/asm-sh/atomic.h (smp_mb__before_atomic_dec): Defined.
+
+	* Updated to 2.4.7-pre6.
+	* Documentation/fb/pvr2fb.txt (Advantages): Typo fix.
+
+2001-07-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.7-pre5.
+
+	Follow the change of 2.4.7-pre5.
+	* include/asm-sh/softirq.h (raise_softirq): Removed.
+
+2001-07-10  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.4.6.
+
+	Follow the change of 2.4.6.
+	* arch/sh/vmlinux.lds.S (.rodata): Added .rodata.*.
+	* include/asm-sh/hitachi_se.h (PA_MRSHPC): Spell fix for comment.
+
+2001-07-10  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/init.c (paging_init): Use __MEMORY_SIZE_2ND.
+
+2001-07-08  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/config.in (CONFIG_DISCONTIGMEM): Bug fix.  Added "then".
+	By ISHIKAWA Mutsumi <ishikawa@linux.or.jp>.
+
+	* include/asm-sh/page.h (phys_to_page): Bug fixed for paren.
+	By YAEGASHI Takeshi  <t@keshi.org>.
+
+	Discontiguous memory support.  
+	* arch/sh/config.in (CONFIG_DISCONTIGMEM): New config.
+	* arch/sh/kernel/setup.c (setup_arch): Setup NODE_DATA, and NODE(1).
+	* arch/sh/mm/init.c (discontig_page_data, discontig_node_bdata):
+	New variables.
+	(paging_init): Initialize NODE(1).
+	(mem_init): Initialize NODE(1).
+	* include/asm-sh/mmzone.h: New file.
+	* include/asm-sh/pgtable.h (pte_page): Use phys_to_page.
+	* include/asm-sh/page.h (__MEMORY_START_2ND, __MEMORY_SIZE_2ND):
+	Defined.
+	(VALID_PAGE, phys_to_page): #ifdef/#endif-out.
+
+2001-07-07  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/page.h (phys_to_page): New macro.
+	(virt_to_page): Use phys_to_page.
+	* include/asm-sh/pgtable.h (pte_page): Use phys_to_page.
+
+2001-07-07  YAEGASHI Takeshi  <t@keshi.org>
+
+	HD64461 IRQ number fix for HP600.
+	 93:      10076     HD64461-IRQ  ide0	# CF slot
+	 94:      15095     HD64461-IRQ  NE2000	# PC-card slot
+
+	* include/asm-sh/hd64461.h (HD64461_IRQ_NUM): Added.
+	* include/asm-sh/ide.h (ide_default_irq_hp600): Fix irq number.
+	* arch/sh/kernel/mach_hp600.c (mv_hp620, mv_hp680, mv_hp690): Fix
+	mv_nr_irqs.
+
+2001-07-06  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache.c (flush_icache_page, flush_dcache_page,
+	flush_page_to_ram, check_cache_page): Use page_address.
+	* arch/sh/mm/fault.c (update_mmu_cache): Use page_address.
+	(and Bug fix.)
+	* include/asm-sh/pgtable.h (mk_pte): Use page_address.
+
+2001-07-04  Jeremy Siegel <jsiegel@mvista.com>
+
+	* arch/sh/lib/checksum.S: Bug fix.  Update R1's value.
+
+2001-07-04  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* include/asm-sh/pgtable.h (__flush_dcache_region): Defined for SH-3.
+	* drivers/net/Config.in (CONFIG_CS89x0): Can be enabled even when PCI
+	is disabled.
+
+2001-07-03  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/setup.c: Bug fix.  0 for pte_quick.
+
+2001-07-02  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache.c (__flush_invalidate_region): New function.
+	(copy_user_page, clear_user_page): Bug fix.  Use
+	__flush_invalidate_region.
+
+	* include/asm-sh/pgtable.h (PG_dcache_dirty): Defined.
+	* arch/sh/mm/cache.c (flush_dcache_page): Defer flushing the cache
+	if possible.
+	* arch/sh/mm/fault.c (update_mmu_cache): Handle the deferred
+	flushing.
+
+2001-07-01  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/net/stnic.c (stnic_probe): Set endian.
+	Reported by <yshimizu@ic-software.co.jp>.
+
+2001-06-30  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache.c (__flush_cache_page): Protect against
+	interrupt.
+	(flush_cache_all): Just clear the address array.
+	(detect_cpu_and_cache_system): Likewise.
+	(flush_cache_page): Bug fix.  Tag is physical address.
+
+	* Updated to 2.4.6-pre8.
+
+	SH-4 cache handling improvement.
+	* arch/sh/mm/cache.c (flush_icache_page, flush_page_to_ram): 
+	#if 0/#endfi out.
+	* include/asm-sh/pgtable.h (flush_page_to_ram, flush_icache_page):
+	Define as NULL.
+	* kernel/ptrace.c (access_one_page): Add flush_dcache_page.
+
+	* arch/sh/mm/cache.c (flush_cache_page): Remove bogus comment.
+	Change comment as we also need to let I-cache to flush.
+	(flush_dcache_page): Mention I-cache in comment.
+	(__flush_cache_page): New function. (Use 0 to invalidate.)
+	(flush_dcache_page): Use __flush_cache_page.
+
+	* arch/sh/mm/Makefile (obj-y): Added ioremap.o.
+	* arch/sh/mm/ioremap.c (remap_area_pages): Use pgd_offset_k.
+	(p3_ioremap): Renamed from __ioremap.
+	(p3_iounmap): Renamed from iounmap.
+	(remap_area_pages): Make it global.
+
+	* arch/sh/mm/fault.c (__do_page_fault): Use P3SEG and P4SEG
+	instead of VMALLOC_START and VMALLOC_END.
+	* include/asm-sh/pgtable.h (p3_cache_init): New function.
+	(VMALLOC_START): Change the value.
+	* arch/sh/mm/cache.c (p3_cache_init): New function.
+	(icache_purge_region): Removed.
+	(flush_icache_range): Just call flush_cache_all.  It's efficient
+	because the range would be so large (Usually it's larger than
+	cache size itself).  And it's OK, because it's rarely used.
+	(clear_user_page, copy_user_page): New implementations.
+
+	* arch/sh/mm/init.c (mem_init): Use __flush_dcache_region
+	(was: flush_page_to_ram.  The obsolete interface).
+	(mem_init): Call p3_cache_init.
+
+	* arch/sh/mm/cache.c (icache_purge_region): Renamed from
+	icache_purge_range.
+	(__flush_dcache_region): Renamed (was: __flush_dcache_range).
+	(flush_icache_range): Follow the changes.
+	* include/asm/ide.h (ide_insw): Use __flush_dcache_region.
+	* include/asm-sh/pgtable.h: Ditto.
+
+	* drivers/maple/maple.c (maple_send): Use __flush_dcache_region
+	(was: flush_page_to_ram.  The obsolete interface). 
+	(maple_sendbuf_page): Removed.
+
+	* include/asm-sh/pgtable.h (HAVE_ARCH_UNMAPPED_AREA): Defined for
+	SH-4.
+	* arch/sh/kernel/sys_sh.c (arch_get_unmapped_area): New function.
+	* include/asm-sh/shmparam.h (SHMLBA): 16kB for SH-4.
+	* arch/sh/mm/fault.c (update_mmu_cache): Removed pte_shared
+	handling.
+	(__flush_tlb_phys): Removed.
+	* include/asm-sh/pgtable.h (pte_shared): Removed.
+
+2001-06-29  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/io_se.c (se_outb_p): Bug fix.  Remove duplicated
+	`if' clause.
+
+2001-06-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/string.h (strlen): Declared.
+	(__HAVE_ARCH_STRLEN): Defined.
+	* arch/sh/lib/strlen.S: New file.
+	* arch/sh/lib/Makefile (obj-y): Added strlen.o. 
+
+	* Updated to 2.4.6-pre6.
+
+	Implement cache flush on I/O completion.
+	* include/asm-sh/pgtable.h (__flush_dcache_range): Declared.
+	* arch/sh/mm/cache.c (__flush_dcache_range): Rename from
+	dcache_wback_range.  And make it visible (not-static).
+	* include/asm-sh/ide.h (ide_insw): New macro to handle cache flush
+	for I/O.
+
+	* Revert the patch of 2001-06-26.  It should be done by driver
+	layer not VM layer.
+
+2001-06-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/lib/checksum.S (csum_partial_copy_generic): Performance
+	tweak.  Use @(<DISP>,RN) addressing mode.  Consider pipeline
+	of SH-3.  Perhaps we need different implementation for SH-4.
+
+2001-06-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	New implementation of flush-ing the page on swap.
+
+	* include/linux/mm.h (PG_flush_after, PageFlushAfter,
+	SetPageFlushAfter, PageTestandClearFlushAfter): New bit.
+	* mm/page_io.c (rw_swap_page_base): Set flush-after bit.
+	* fs/buffer.c (end_buffer_io_async): Implement flush-ing
+	with PG_flush_after.
+
+	* mm/memory.c (do_swap_page): Remove flush-ing the page.
+
+2001-06-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/ide/ide-geometry.c: Revert change of 2001-03-08.
+	It's not needed as we have the header file now .
+
+	* include/linux/netdevice.h include/net/checksum.h,
+	net/core/datagram.c, net/core/iovec.c, net/core/scm.c,
+	net/core/skbuff.c, net/core/sock.c, net/socket.c: Revert changes to
+	sync standard kernel (was: Changes to support no CONFIG_NET).
+
+2001-06-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.6-pre5.
+
+2001-06-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgtable.h (_PAGE_FLAGS_HARDWARE_MASK): Drop SH-bit
+	on SH-3.
+
+2001-06-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgtable.h (__pmd_offset): Removed.  It's only
+	valid for x86.
+
+	* include/asm-sh/string.h (strcpy, strncpy, strcmp, strncmp): Make
+	them static inline.
+
+	* include/asm-sh/processor.h (INIT_MMAP): Bug fix.  Set vm_start
+	and vm_end to 0.  (was: 0x80000000--0xa0000000).
+
+	* include/asm-sh/pgtable.h: Revert changes of 2001-06-20.
+	Atomic update is for SMP machine.  We don't need it for SuperH.
+
+2001-06-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Enable use of pgd_quicklist and pte_quicklist (was: not used).
+	* include/asm-sh/pgalloc.h (pgd_free): Use free_pgd_fast (was: slow).
+	(pte_free): Use pte_free_fast (was: slow).
+	(pte_alloc_one_fast): Clear the first entry (was: assign ret[1]).
+	* include/asm-sh/pgtable-2level.h (pgd_clear): Zero clear for reuse.
+
+2001-06-21  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/irq.c (do_IRQ): Bug fix. Clear IRQ_INPROGRESS bit.
+
+	* include/asm-sh/pgtable.h: Include <asm/pgtable-2level.h> earlier.
+	* include/asm-sh/pgtable-2level.h: Add #ifndef/#endif for
+	__ASSEMBLY__.
+
+	* arch/sh/mm/init.c (paging_init): Fixed to PTRS_PER_PGD.
+	(was: USER_PTRS_PER_PGD*2)
+	(swapper_pg_dir): Use PTRS_PER_PGD (was: 1024 directly).
+
+	* include/asm-sh/pgtable.h (TWOLEVEL_PGDIR_SHIFT,
+	BOOT_USER_PGD_PTRS, BOOT_KERNEL_PGD_PTRS, USER_PGD_PTRS,
+	KERNEL_PGD_PTRS): Removed. (only valid for x86)
+
+	* Updated to 2.4.6-pre4.
+
+2001-06-20  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgtable.h (_PAGE_BIT_DIRTY, _PAGE_BIT_RW,
+	_PAGE_BIT_ACCESSED): Defined.
+	(ptep_test_and_clear_dirty, ptep_test_and_clear_young,
+	ptep_set_wrprotect, ptep_mkdirty, ptep_get_and_clear): Implement
+	atomic update of PTE.
+
+2001-06-19  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/irq_ipr.c (init_IRQ): Removed initialization
+	of INTC_IRRX, INTC_ICRX.
+
+	* include/asm-sh/softirq.h (local_bh_enable): Follow the change of
+	semantics of softirq (of IA-32).
+
+	* arch/sh/kernel/entry.S (ret_from_syscall): Don't call softirq.
+	(handle_softirq): Removed.
+	(ret_with_reschedule): Label removed.
+
+	* arch/sh/kernel/irq.c (do_IRQ): Follow the change of IA-32 version.
+	(irq_controller_lock): Removed.
+
+	* include/asm-sh/hardirq.h: Remove __softirq_active, __softirq_mask.
+	Add softirq_pending.
+
+
+	* Updated 2.4.6-pre3.
+
+2001-05-28  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* include/asm-sh/bitops.h (__change_bit,__test_and_set_bit,
+	__test_and_clear_bit,__test_and_change_bit): Added.
+
+2001-05-28  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/config.in (CONFIG_SH_SH2000): Added.
+	* arch/sh/kernel/Makefile: Likewise.
+	* include/asm-sh/io.h: Likewise.
+	* include/asm-sh/machvec.h: Likewise.
+	* arch/sh/kernel/{setup_sh2000.c,io_sh2000.c}: New file.
+	* include/asm-sh/io_sh2000.h: New file.
+
+	* arch/sh/kernel/sh_ksyms.c (strnlen): Exported.
+
+2001-05-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.5.
+	* arch/sh/kernel/rtc.c (set_rtc_time): Removed declaration
+	of the function abs.
+
+2001-05-24  Stuart Menefy <stuart.menefy@st.com>
+
+	* arch/sh/config.in: Change to ST40STB1 config, moved char/pcmcia to
+	char menu, and added joystick and media options
+
+2001-05-24  Stuart Menefy <stuart.menefy@st.com>
+
+	* arch/sh/kernel/{time,setup}.c include/asm-sh/processor.h: Added
+	support for for ST40STB1 memory clock
+	* arch/sh/overdrive/irq.c: Set up INTC to use encoded interrupt pins,
+	and set up non-Overdrive interrupts as imask type.
+	* include/asm-sh/pci.h: Move declaration of struct pci_dev so declared
+	before used
+	* arch/sh/kernel/io_se.c: Typo fix
+	* arch/sh/stboards/{led.c,harp.h}: Add LED_ON and LED_OFF macros
+
+2001-05-24  M. R. Brown <mrbrown@linuxdc.org>
+
+	LinuxDC drivers merge.
+
+	* Documentation/Configure.help: Added documentation for CONFIG_FB_PVR2
+	and CONFIG_FB_PVR2_DEBUG.
+	* Documentation/fb/00-INDEX: Added line for pvr2fb.txt.
+	* Documentation/fb/pvr2fb.txt: New file, document features of the pvr2
+	frame buffer.
+	* arch/sh/config.in: Conditionalized Maple driver options, set
+	CONFIG_SH_RTC to "n" when configuring for Dreamcast.
+	* arch/sh/kernel/mach_dc.c: Machine vector: Use NR_IRQS standard
+	(reflects new IRQ count), added systemasic_irq_demux.
+	* arch/sh/kernel/pci-dc.c: Include new asm/dc_sysasic.h.  Removed
+	definition of GAPSPCI_INTC and updated GAPSPCI_IRQ to new IRQ
+	convention. (disable_gapspci_irq, enable_gapspci_irq,
+	mask_and_gapspci_irq, end_gapspci_irq, startup_gapspci_irq,
+	shutdown_gapspci_irq, gapspci_irq_type): Removed.  (gapspci_init):
+	Removed assignment of gapspci_irq_type.
+	* arch/sh/kernel/setup_dc.c: New includes to reflect IRQ standard.
+	(disable_systemasic_irq, enable_systemasic_irq, ack_systemasic_irq,
+	end_systemasic_irq, startup_systemasic_irq, shutdown_systemasic_irq,
+	systemasic_int, systemasic_irq_demux): New routines.
+	(setup_dreamcast): Assign systemasic_int to respective irq_desc IRQs.
+	* drivers/video/Config.in: Added configuration options for
+	CONFIG_FB_PVR2, removed options for CONFIG_FB_DC.
+	* drivers/video/Makefile: Added dependency for CONFIG_FB_PVR2, removed
+	dependancy for CONFIG_FB_DC.
+	* drivers/video/dcfb.c: Removed file.
+	* drivers/video/fbmem.c: Added externs for pvr2fb routintes, removed
+	declaration of dcfb_init().  Added pvr2 to the list of framebuffers,
+	removed dcfb from that list.
+	* drivers/video/pvr2fb.c: New file, PowerVR 2 frame buffer support,
+	replaces generic DC fb support.
+	* include/asm-sh/dc_sysasic.h: New file, Definitions for Dreamcast
+	hardware events.
+	* include/asm-sh/irq.h: Added OFFCHIP_NR_IRQS def. for Dreamcast,
+	added declaration of systemasic_irq_demux().
+
+2001-05-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.5-pre5.
+
+	* arch/sh/kernel/hd64465_gpio.c, arch/sh/kernel/io_cat68701.c,
+	arch/sh/kernel/io_dc.c, arch/sh/kernel/io_ec3104.c,
+	arch/sh/kernel/irq_intc2.c, arch/sh/kernel/mach_dc.c,
+	arch/sh/kernel/setup_dc.c, arch/sh/kernel/setup_ec3104.c,
+	arch/sh/mm/cache.c, include/asm-sh/hd64465_gpio.h: Follow the
+	change of 2.4.5-pre5.  Inclusion of config.h.
+
+2001-05-24 Stuart Menefy <stuart.menefy@st.com>
+
+	* arch/sh/kernel/pci_st40.c
+	arch/sh/overdrive/{Makefile,galileo.c,mach.c,pcidma.c}
+	arch/sh/stboards/{Makefile,mach.c,pcidma.c}: Changes for new style
+	of PCI set up
+
+	* arch/sh/kernel/entry.S include/asm-sh/irq.h: Updated the number of
+	interrupts for ST40STB1
+
+2001-05-22  M. R. Brown <mrbrown@linuxdc.org>
+
+	Preliminary Dreamcast Maple Bus driver restructuring.
+
+	* drivers/dreamcast/maple/Config.in, drivers/dreamcast/maple/Makefile
+	drivers/dreamcast/maple/maple.c, drivers/dreamcast/maple/maple.h,
+	drivers/dreamcast/maple/dckbd.c, drivers/dreamcast/maple/dcmouse.c,
+	drivers/dreamcast/maple/dcpad.c: Files moved to consistent kernel
+	directories and renamed.
+	* drivers/dreamcast/Config.in, drivers/dreamcast/Makefile: Removed.
+	* drivers/maple/Config.in, drivers/maple/Makefile,
+	drivers/maple/maple.c: New files, moved from drivers/dreamcast/maple.
+	* include/linux/maple.h: New file, was
+	drivers/dreamcast/maple/maple.h.
+	* drivers/char/maple_keyb.c: New file, was
+	drivers/dreamcast/maple/dckbd.c.
+	* drivers/char/maplemouse.c: New file, was
+	drivers/dreamcast/maple/dcmouse.c.
+	* drivers/char/Makefile: Added dependencies for CONFIG_MAPLE_KEYBOARD
+	and CONFIG_MAPLE_MOUSE
+	* drivers/char/joystick/maplecontrol.c: New file, was
+	drivers/dreamcast/maple/dcpad.c.
+	* drivers/char/joystick/Config.in: Added config options for
+	CONFIG_MAPLE_CONTROL.
+	* drivers/char/joystick/Makefile: Added dependency for
+	CONFIG_MAPLE_CONTROL.
+	* Makefile: Added DRIVERS dependency for CONFIG_MAPLE.
+	* drivers/Makefile: Added dependencies for CONFIG_MAPLE.
+	* arch/sh/Makefile: Removed Dreamcast driver dependencies.
+	* arch/sh/config.in: Check for CONFIG_SH_DREAMCAST for
+	CONFIG_MEMORY_START.  Added config options for CONFIG_MAPLE_*, added
+	sources to drivers/maple/Config.in and
+	drivers/char/joystick/Config.in.
+
+2001-05-21  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.5-pre4.
+
+2001-05-17  YAEGASHI Takeshi  <t@keshi.org>
+
+	* arch/sh/kernel/pci-dc.c: New file: Dreamcast PCI routines.
+	* arch/sh/kernel/setup_dc.c: Moved PCI code to pci-dc.c.
+	* arch/sh/kernel/mach_dc.c (mv_init_pci): Removed.
+	* arch/sh/kernel/Makefile: Added rules for pci-dc.o.
+	* include/asm-sh/pci.h (PCIBIOS_MIN_IO, PCIBIOS_MIN_MEM): Added 
+	definitions for Dreamcast.
+	* drivers/net/8139too.c (rtl8139_hw_start): Keep RxConfig register's
+	cache(tp->rx_config) dirty.
+
+2001-05-16  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/pci-sh7751.c (pcibios_set_master, pci_check_direct,
+	pcibios_fixup_peer_bridges, pcibios_enable_device,
+	pcibios_set_master): Prepend KERN_INFO for printk.
+
+	* Updated to 2.4.5-pre2.
+
+2001-05-14  Dustin McIntire  <dustin@sensoria.com>
+
+	* arch/sh/kernel/sh_ksyms.c: Move CONFIG_PCI above the
+	pci_alloc_consistent.
+	* arch/sh/kernel/pci-irq.c: Removed.
+
+	Big Sur support update.
+	* include/asm-sh/pci-sh7751.h (SH7751_PCICONF13): Change the value.
+	It was 0x40.
+	(PLATFORM_ASPEN, PLATFORM_BIGSUR): Removed.
+	* arch/sh/kernel/setup_bigsur.c: Calculation change of mask and bit.
+	* arch/sh/kernel/pci-bigsur.c: Turn the clocks and clear powerdown
+	IRQ earlier.
+	* arch/sh/kernel/Makefile: Remove pci-bigsur.o.
+
+2001-05-14  Jeremy Siegel <jsiegel@mvista.com>
+
+	* include/asm-sh/machvec.h: Bug fix.  Don't overwrite the
+	definition of MACH_SE.
+
+2001-05-09  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Remove support of 7750 Overdrive.
+
+	* include/asm-sh/io_od.h: Removed.
+	* arch/sh/overdrive/io_od.h: Moved from include/asm-sh, 
+	as a reference.
+
+	* include/asm-sh/pci.h: Removed the case of
+	defined(CONFIG_SH_7750_OVERDRIVE).
+	* include/asm-sh/io.h: Likewise.
+
+	* arch/sh/Makefile (SUBDIRS): Don't add arch/sh/overdrive.
+	(archclean): Don't go to overdrive subdirs, but stboards.
+
+	* arch/sh/config.in (CONFIG_SH_7750_OVERDRIVE): Deleted.
+
+2001-05-09  Ian da Silva <idasilva@mvista.com>
+
+	Solution Engine 7751 support.
+
+	* include/asm-sh/hitachi_se.h, include/asm-sh/io.h,
+	include/asm-sh/machvec.h, include/asm-sh/pci.h:
+	Add the case of CONFIG_SH_7751_SOLUTION_ENGINE.
+
+	* arch/sh/kernel/setup_se.c (init_se_IRQ): Handle the case of
+	CONFIG_SH_7751_SOLUTION_ENGINE differentry.
+
+	* arch/sh/kernel/pci-7751se.c: New file.
+
+	* arch/sh/kernel/io_se.c: Include <asm/pci.h> and <asm/pci-sh7751.h>.
+	(TOP_PCIC, PCIIOBR, PCIMBR, PCI_IO_AREA, PCI_MEM_AREA) New macros.
+	(port2adr): Fixed.  Don't include 0x2000 as MRSHPC address.
+	(se_inb, se_inb_p, se_inw, se_inl, se_outb, se_outb_p, se_outw,
+	se_outl): Handle the case of PXSEG and CONFIG_PCI.
+	(se_readb, se_readw, se_readl, se_writeb, se_writew, se_writel):
+	Handle the case of CONFIG_PCI.
+
+	* arch/sh/kernel/Makefile: Define objects for
+	CONFIG_SH_7751_SOLUTION_ENGINE.
+
+	* arch/sh/config.in (CONFIG_SH_7751_SOLUTION_ENGINE): Added.
+
+2001-05-09  Dustin McIntire  <dustin@sensoria.com>
+
+	SH7751 support and New target BIGSUR.
+
+	* include/asm-sh/bigsur.h, include/asm-sh/io_bigsur.h,
+	include/asm-sh/pci-sh7751.h, include/asm-sh/serial-bigsur.h: New
+	files.
+	* include/asm-sh/serial.h: Added inclusion of serial-bigsur.h.
+	* include/asm-sh/processor.h: Add comment for SH7751.
+	* include/asm-sh/pci.h (PCIBIOS_MIN_IO, PCIBIOS_MIN_MEM): Handle
+	cases of ST40STB1, SH7751 and BIGSUR.
+	(pcibios_set_master): Comment it out.
+	* include/asm-sh/machvec.h: Added mv_hw_bigsur bit.
+	(MACH_BIGSUR): Added.
+
+	* include/asm-sh/irq.h: Added CONFIG_CPU_SUBTYPE_SH7751 and
+	CONFIG_SH_BIGSUR.
+
+	* include/asm-sh/io.h: Added CONFIG_SH_BIGSUR.
+	* include/asm-sh/bugs.h (check_bugs): Print SH7750/SH7750.  (was:
+	only SH7750).
+
+	* drivers/pcmcia/hd64465_ss.c (hs_set_io_map): Added last argument 0,
+	for the call of hd64465_port_map.
+
+	* drivers/net/smc9194.h (chip_ids): Added SMC91C100FD.
+	* drivers/net/smc9194.c (smc_probe): The semantics IRQ2==IRQ9 is
+	only valid in PC (__i386__).
+
+	* drivers/char/sh-sci.h (CONFIG_CPU_SUBTYPE_SH7751): Added.
+
+	* arch/sh/mm/cache.c (detect_cpu_and_cache_system): SH7751 is
+	CPU_SH7750.
+
+	* arch/sh/kernel/sh_ksyms.c (__lshrdi3, flush_cache_range,
+	flush_dcache_page): Added.
+
+	* arch/sh/kernel/led_bigsur.c, arch/sh/kernel/mach_bigsur.c,
+	arch/sh/kernel/pci-bigsur.c, arch/sh/kernel/pci-irq.c,
+	arch/sh/kernel/pci-sh7751.c, arch/sh/kernel/setup_bigsur.c:
+	New files.
+
+	* arch/sh/kernel/io_hd64465.c (hd64465_isa_port2addr): Renamed
+	from POT2ADDR.  
+	(PORT2ADDR): Define as macro.
+
+	* include/asm-sh/io_bigsur.c: New file.
+	* arch/sh/kernel/entry.S (exception_handling_table): Added entries
+	for CONFIG_CPU_SUBTYPE_SH7751.
+
+	* arch/sh/kernel/pci-dma.c: New file.  Copied from stboards/pcidma.c.
+	* arch/sh/kernel/pci-sh.c: Removed.
+
+	* arch/sh/kernel/Makefile (machine-specific-objs): Added for
+	CONFIG_SH_BIGSUR.
+	(obj-$(CONFIG_SH_BIGSUR)): Added.
+	(obj-$(CONFIG_CPU_SUBTYPE_SH7751)): Added.
+	(obj-$(CONFIG_SH_BIGSUR)): Added.
+
+	* arch/sh/config.in (CONFIG_SH_BIGSUR): New target.
+	(CONFIG_CPU_SUBTYPE_SH7751): New subtype.
+
+	* arch/sh/Makefile (CFLAGS for CONFIG_DEBUG_KERNEL_WITH_GDB_STUB):
+	Added as comment.
+
+2001-05-07  Masahiro Abe <m-abe@aandd.co.jp>
+
+	* include/asm-sh/processor.h (struct sh_fpu_hard_struct): Rename
+	xd_regs to xfp_regs, and change type from long long to long.
+	(struct sh_fpu_soft_struct): Likewise.
+	* include/asm-sh/user.h (struct user_fpu_struct): Likewise.
+
+2001-05-04  YAEGASHI Takeshi  <t@keshi.org>
+
+	* drivers/dreamcast/maple/maple.h: Fixed typo.
+	* include/asm-sh/bitops.h (ffs, hweightN): Added definitions.
+	* drivers/char/sh-sci.c (sci_init_drivers): Added driver names used
+	with devfs.
+
+2001-04-30  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.4.
+
+2001-04-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.4-pre8.
+
+2001-04-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.4-pre7.
+
+2001-04-24  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* config.in: Added CONFIG_RTC.
+	* arch/sh/rtc.c: Moved some definitions to include/asm-sh/rtc.h.
+	* include/asm-sh/rtc.h: Likewise
+	* include/asm-sh/mc146818rtc.h (RTC_PORT, RTC_IRQ, CMOS_READ,
+	  CMOS_WRITE, __CMOS_READ, __CMOS_WRITE): Defined.
+	* arch/sh/sh_ksyms.c (__movstr): EXPORT-ed.
+	  (__ashrdi3, __ashldi3): EXPORT-ed even if SH-3.
+
+2001-04-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* lib/rwsem.c: Remove inclusion of linux/bitops.h.
+
+	* Updated to 2.4.4-pre6.
+
+2001-04-20  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/config.in (CONFIG_RWSEM_GENERIC): Removed.
+	* include/linux/rwsem.h (down_write): Conflict merged.
+	* include/asm-sh/semaphore.h: Only valid for __KERNEL__.
+
+	* Updated to 2.4.4-pre5.
+
+2001-04-20  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/config.in: define CONFIG_RWSEM_GENERIC.
+	* include/asm-sh/bitops.h (__set_bit, __clear_bit): defined.
+	* include/asm-sh/semaphore.h: Follow i386 implementation.
+	* include/linux/rwsem.h: small fix.
+	* lib/rwsem.c: Added include linux/bitops.h.
+
+2001-04-19  YAEGASHI Takeshi  <t@keshi.org>
+
+	* drivers/dreamcast/maple/maple.h: Added copyright notice.
+
+	* arch/sh/kernel/setup_dc.c: Added prototype for gapspci_init().
+	(pci_alloc_consistent): Fixed printk format string.
+
+2001-04-18  YAEGASHI Takeshi  <t@keshi.org>
+
+	* arch/sh/kernel/time.c, drivers/net/8139too.c: MACH_DREAMCAST
+	should be used to keep the generic kernel working.
+
+	* drivers/net/8139too.c (rtl8139_start_xmit): Force to use the
+	dedicated SRAM buffer for bus-mastering.
+
+	* include/asm-sh/mc146818rtc.h: New file: Added to satisfy the
+	include from drivers/char/rtc.c.
+
+2001-04-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.4-pre4.
+
+2001-04-14  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.4-pre3.
+
+2001-04-12  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.4-pre2.
+
+2001-04-09  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.4-pre1.
+
+2001-04-01  YAEGASHI Takeshi  <t@keshi.org>
+
+	Added SEGA Dreamcast support with the code released from the FFII
+	(http://www.ffii.org/).
+
+	* arch/sh/config.in: Added Dreamcast Configuration.
+	* arch/sh/Makefile: Added build rules of Dreamcast drivers.
+	* arch/sh/kernel/Makefile: Added Dreamcast platform support.
+	* arch/sh/kernel/io_dc.c: New file: Likewise.
+	* arch/sh/kernel/mach_dc.c: New file: Likewise.
+	* arch/sh/setup_dc.c: New file: Likewise
+	* include/asm-sh/io_dc.h: New file: Likewise.
+	* arch/sh/kernel/time.c (time_init): Added Dreamcast RTC override.
+	* drivers/video/dcfb.c: New file: Dreamcast framebuffer driver.
+	* drivers/pci/pci.ids: Updated vendor/device ids for SEGA Broadband
+	Adapter.
+	* drivers/net/8139too.c(board_t, board_info, rtl8139_pci_tbl,
+	rtl8139_rx_config, RX_BUF_LEN_IDX): Added SEGA Broadband Adapter
+	support.
+	* drivers/dreamcast/Config.in: New file: Dreamcast driver support.
+	* drivers/dreamcast/Makefile: New file: Likewise.
+	* drivers/dreamcast/maple/Config.in: New file: MAPLE Bus driver
+	support.
+	* drivers/dreamcast/maple/Makefile: New file: Likewise.
+	* drivers/dreamcast/maple/maple.[ch]: New files: MAPLE Bus core driver.
+	* drivers/dreamcast/maple/dckbd.c: New file: Dreamcast Keyboard driver.
+	* drivers/dreamcast/maple/dcmouse.c: New file: Dreamcast Mouse driver.
+	* drivers/dreamcast/maple/dcpad.c: New file: Dreamcast Controller.
+	driver
+	* include/linux/input.h (BUS_MAPLE): Added new bus type.
+	* drivers/char/Makefile (KEYBD): Removed older Dreamcast keyboard
+	support.
+	* include/asm-sh/keyboard.h (dreamcast_kbd_init_hw): likewise.
+
+	* arsh/sh/kernel/sh_ksyms.c: Include asm/pgalloc.h for
+	flush_tlb_page prototype.
+
+2001-03-31  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow the change in 2.4.3. 
+	* include/asm-sh/pgtable.h (__handle_bad_pmd,
+	__handle_bad_pmd_kernel): Removed.
+
+	* arch/sh/kernel/ptrace.c (sys_ptrace): Follow the change of x86
+	version.
+	* arch/sh/mm/extable.c (search_exception_table): Likewise.
+	* arch/sh/mm/init.c (do_check_pgt_cache): Likewise.
+	* arch/sh/mm/init.c (get_pte_slow, get_pte_kernel_slow,
+	__handle_bad_pmd_kernel, __handle_bad_pmd, get_bad_pte_table,
+	empty_bad_pte_table): Removed.
+	* include/asm-sh/pgtable-2level.h (pgd_clear): Be Function.
+	* include/asm-sh/pgalloc-2level.h: Removed.
+	* arch/sh/mm/ioremap.c (remap_area_pmd): Use pte_alloc with init_mm
+	(was pte_alloc_kernel).
+	(remap_area_pte): Add checks to BUG.
+	Check address!=0 for the condition of do-while.
+	(remap_area_pmd): Add check to BUG.
+	Use pte_alloc with init_mm (was pte_alloc_kernel).
+	Check address!=0 for the condition of do-while.
+	(remap_area_pages): Use pgd_offset (was pgd_offset_k).
+	Add check to BUG, spin_lock/unlock.
+	Use pmd_alloc of init_mm instead of pmd_alloc_kernel.
+	(__ioremap): Change the compare to 0x100000 to '<' (was: '<=').
+	Return error.
+
+	Updated to 2.4.3.
+	* arch/sh/mm/fault.c (do_page_fault): Use up_read/down_read
+	(was: up/down).
+	* arch/sh/kernel/sys_sh.c (do_mmap2): Use up_write/down_write
+	(was: up/down).
+	* arch/sh/kernel/sh_ksyms.c (flush_tlb_page): EXPORT-ed.
+
+2001-03-09  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* include/asm-sh/sigcontext.h (struct sigcontext): Make it
+	compatible with glibc-2.2.2.
+
+2001-03-08  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* drivers/ide/ide-geometry.c: Added '#ifdef __i386__'
+	for i386 specific include file.
+
+2001-03-04  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (call_dpf): Cosmetic changes.
+	Use "tst r0, r0" instead of "tst #0xff, r0".
+	(ret_with_reschedule): Likewise.
+
+2001-03-04  Philipp Rumpf  <prumpf@tux.org>
+
+	* arch/sh/kernel/process.c (kernel_thread): Remove bogus comment.
+	Bug fix.  Use "tst r0, r0" instead of "tst #0xff, r0".
+
+2001-02-24  Bryan Rittmeyer <bryan@ixiacom.com>
+
+	* arch/sh/kernel/sh_ksyms.c (strncat): Added.
+
+2001-02-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/rtc.c (RTC_BIT_INVERTED): New macro.
+	(sh_rtc_gettimeofday): Use RTC_BIT_INVERTED.
+	(sh_rtc_settimeofday): Work around implemented.
+
+	Updated to 2.4.2.
+	* include/asm-sh/termios.h (N_IRDA): Incorporate changes of 2.4.2.
+	* include/asm-sh/socket.h, arch/sh/kernel/irq.c,
+	arch/sh/kernel/process.c, arch/sh/kernel/setup.c: Likewise.
+
+2001-02-14  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/setup_cqreek.c (mv_ioremap, mv_iounmap,
+	mv_rtc_gettimeofday, mv_rtc_settimeofday): Define.
+
+2001-02-07  Stuart Menefy <stuart.menefy@st.com>
+
+	Added support for ST40STB1
+	* arch/sh/kernel/pci_st40.[ch]: New files
+	* arch/sh/kernel/irq_intc2.c: New file
+	* arch/sh/kernel/Makefile: Added build of ST40 files
+	* arch/sh/kernel/irq_ipr.c: Added support for second SCIF
+	* arch/sh/kernel/time.c: Added support for FRQCR changes
+	* arch/sh/mm/cache.c: Added ST40 to list of chip types
+	* arch/sh/config.in: Added ST40 CPU and ST boards
+	* arch/sh/overdrive/Makefile: Renamed config option
+	* include/asm-sh/bugs.h: Added ST40STB1 to list of chips
+	* include/asm-sh/pci.h: Added DMA support
+	* include/asm-sh/processor.h: Added ST40STB1 to list of chips
+
+	Added support for ST40STB1 HARP and Overdrive platforms
+	* arch/sh/Makefile: Build in stboards directory if needed
+	* include/asm-sh/io.h: Added HARP and Overdrive IO
+	* arch/sh/stboards/{harp.h,irq.c,led.c,mach.c,pcidma.c,setup.c},
+	arch/sh/stboards/Makefile: New files
+
+	* arch/sh/kernel/io_hd64465.c, include/asm-sh/io_hd64465.h: Added 
+	logical shift capability to address mapping code.
+
+	* arch/sh/kernel/setup_hd64465.c, include/asm-sh/serial.h: Fixed
+	support for 16550 serial port.
+
+	* arch/sh/kernel/rtc.c: Fix 1/128 second support.
+
+	* arch/sh/kernel/setup.c: Added some global variables needed for
+	frame buffer support.
+
+	* drivers/char/sh-sci.[ch]: Added ST40STB1 support, and claim
+	interrupt on open, allowing SCI(F) to be shared by drivers.
+
+	* drivers/net/tulip/tulip_core.c: Added SH specific defines
+
+	* drivers/pci/pci.ids: Added STE10/100 device ID
+
+	* include/asm-sh/irq.h: Added ST40STB1 defines, and reworked
+	defintion of NR_IRQS to make easier to manage
+
+	* include/asm-sh/hd64461.h, include/asm-sh/hd64465.h: Use new
+	irq.h defines for peripherial chip interrupts
+
+2001-02-02  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.1.
+	* arch/sh/kernel/traps.c: Include linux/config.h.
+
+2001-01-31  Philipp Rumpf  <prumpf@tux.org>
+
+	* arch/sh/kernel/setup_ec3104.c (get_pending_interrupts):
+	New function.
+
+	* drivers/char/ec3104_keyb.c (ec3104_keyb_receive): Removed.
+	(e5_checksum, e5_wait_for_cts, e5_send_byte, e5_send_packet,
+	e5_receive): New functions.
+	(struct e5_struct): Renamed from ec3104_keyb_struct.
+
+	* drivers/video/Config.in (CONFIG_E1355_REG_BASE, 
+	CONFIG_E1355_FB_BASE): New config variables.
+	* drivers/video/epson1355fb.c (e1355fb_init): Don't call
+	disable_hw_cursor from here.
+	(AERO_HACKS): Undefined.
+
+2001-01-30  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.1-pre12.
+
+2001-01-29  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.1-pre11.
+	* arch/sh/kernel/signal.c: Remove the decl. of sys_wait4.
+
+2001-01-27  Yutaro Ebihara  <ebiharaml@si-linux.com>
+
+	* arch/sh/config.in (CONFIG_CF_ENABLER): Valid when
+	CONFIG_SH_CAT68701.
+
+2001-01-26  Yutaro Ebihara  <ebiharaml@si-linux.com>
+
+	Add support for CAT68701 board computer.
+	* arch/sh/config.in (CONFIG_SH_CAT68701): Added.
+	* arch/sh/kernel/Makefile (obj-$(CONFIG_SH_CAT68701)): Added.
+	* arch/sh/kernel/io_cat68701.c: New file.
+	* arch/sh/kernel/mach_cat68701.c: New file.
+	* include/asm-sh/io.h (CONFIG_SH_CAT68701): Include
+	asm/io_cat68701.h.
+	* inlude/asm/io_cat68701.h: New file.
+	* include/asm-sh/irq.h (cat68701_irq_demux): New function.
+
+2001-01-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.1-pre10.
+
+2001-01-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/signal.c (setup_frame, setup_rt_frame): 
+	Use flush_cache_sigtramp.
+
+	* arch/sh/mm/cache.c (flush_cache_sigtramp): Implemented.
+
+	* include/asm-sh/pgtable.h (_PAGE_SHARED): Always _PAGE_U0_SHARED.
+	(was conditionally _PAGE_HW_SHARED on SH-3).  With _PAGE_HW_SHARED,
+	all processes share the page, while proper semantics is "some
+	processes share the page".
+	(flush_cache_sigtramp): New function.
+
+	* Updated to 2.4.1-pre9.
+
+	* arch/sh/kernel/sh_ksyms.c (__udivsi3, __sdivsi3): Added.
+
+2001-01-13  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.1-pre3.
+
+2001-01-10  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/sh_ksyms.c (__udivsi3_i4, __sdivsi3_i4): Removed.
+
+2001-01-10  Bryan Rittmeyer <bryan@ixiacom.com>
+
+	* arch/sh/kernel/entry.S: Fixed typo for SR and added "OFF_" for SP.
+
+2001-01-10  Denis Dowling <dpd@preston.net>
+
+	* arch/sh/kernel/entry.S: Change RX-->OFF_RX.
+
+2001-01-08  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/net/stnic.c (stnic_probe): Set the MAC address from BIOS.
+
+	* include/asm-sh/sh_bios.h (sh_bios_shutdown): New function.
+	* arch/sh/kernel/sh_bios.c (BIOS_CALL_ETH_NODE_ADDR): Added.
+	(sh_bios_get_node_addr): New function.
+
+2001-01-06  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.0.
+	* arch/sh/kernel/rtc.c: Remove the inclusion of <linux/config.h>.
+
+2001-01-04  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/process.c (machine_halt, machine_restart): 
+	Call sh_bios_shutdown.
+	* include/asm-sh/sh_bios.h (sh_bios_shutdown): New function.
+	* arch/sh/kernel/sh_bios.c (sh_bios_shutdown): New function.
+	(BIOS_CALL_SHUTDOWN): Added.
+
+	* arch/sh/kernel/sh_bios.c (CONFIG_SH_STANDARD_BIOS): No conditional
+	compilation, since it's done in Makefile.
+	(linux/config.h): Not included.
+
+	* drivers/net/stnic.c (STNIC_DELAY): We need more delay for
+	SolutionEngine 7709A.
+
+	* arch/sh/lib/delay.c (__const_udelay): Fixed.  Use DMULU.
+
+2001-01-03  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Updated to 2.4.0-prerelease.
+	* include/asm-sh/{bugs.h,delay.h}: Follow 2.4.0-prerelease.
+	* arch/sh/lib/delay.c: Ditto.
+
+2001-01-03  Mitch Davis  <mdavis@pocketpenguins.com>
+
+	* arch/sh/config.in, arch/sh/kernel/entry.S, 
+	arch/sh/kernel/traps.c: Get the setting of the VBR from
+	the previous value (set by bootloader) instead of explicitly
+	hard-coding it.
+	* arch/sh/config.in: Pull in the Linux Kernel Input (LKI)
+	device configuration.
+	* arch/sh/kernel/sh_ksyms.c: Export some symbols we need.
+	* include/asm-sh/segment.h: Some old header files expect this
+	file to exist.
+	* drivers/char/Makefile: Added an entry for DMIDA keyboard
+	support.
+	* kernel-official/drivers/input/keybdev.c: Added an entry
+	for SuperH LKI support.
+	* drivers/char/sh-sci.h: The SCI port on the DMIDA is used
+	to drive an SPI bus in synchronous mode.  So it's not available
+	as a general-purpose async serial port.  Disable it.
+
+2001-01-03  Mitch Davis  <mdavis@pocketpenguins.com>
+
+	* include/asm-sh/hd64465_gpio.h,
+	arch/sh/kernel/hd64465_gpio.c,
+	arch/sh/kernel/Makefile: Added support for the 5
+	8-bit GPIO ports on the HD64465.
+	* arch/sh/kernel/io_hd64465.c: Added some debugging DIPRINTKs.
+	* include/asm-sh/hd64465.h: Added register definitions
+	for the HD64465's onboard PS/2 mouse/keyboard and USB
+	controllers.
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 76
+version-control: never
+End:
diff -ruN linux-2.6.17-vanilla/ChangeLog-2002 linux-2.6.17/ChangeLog-2002
--- linux-2.6.17-vanilla/ChangeLog-2002	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/ChangeLog-2002	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,1750 @@
+2002-12-21  Paul Mundt  <lethal@linux-sh.org>
+
+	* Makefile: Fix-up TOPDIR so it again references /bin/pwd
+	instead of the non-existant CURDIR .. now we can build a
+	zImage again.
+
+	* arch/sh/kernel/setup.c (get_cpu_subtype): Added.
+	(show_cpuinfo): General cleanup/rewrite. Get rid of the ifdef mess.
+	* arch/sh/kernel/time.c: Add profiling definitions.
+
+	* arch/sh/mm/cache-sh4.c (flush_icache_range): Drop the usage of
+	__flush_wback_region() in favor of __flush_dcache_all() -- suboptimal,
+	but does the Right Thing(tm).
+
+	* drivers/net/Kconfig: Add 8139TOO_DREAMCAST. Seems this got
+	lost along the merges and caused pci_alloc_consistent() to fail.
+
+	* include/asm-sh/bugs.h (check_bugs): Lots of cleanup, do
+	the utsname update per-family, and leave the subtype notification
+	to get_cpu_subtype().
+
+2002-12-19  Paul Mundt  <lethal@linux-sh.org>
+
+	* Makefile: Bump up the inline-limit to 5000.
+
+2002-12-16  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/boards/saturn/Makefile: Add smp.c.
+	* arch/sh/boards/saturn/smp.c: New file.
+	* include/asm-sh/saturn/smpc.h: New file.
+
+2002-12-15  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/vmlinux.lds.S: Add __per_cpu_{start,end}.
+
+	* arch/sh/kernel/smp.c: New file.
+	(smp_cpus_done, smp_send_reschedule, stop_this_cpu, smp_send_stop,
+	smp_call_function, __smp_call_function): Added.
+	* arch/sh/kernel/setup.c: Add platform_setup() and get_system_type()
+	references .. fixes compile-time warnings.
+	
+	* include/asm-sh/bitops.h (find_first_bit, find_next_bit): Added.
+	* include/asm-sh/smp.h (cpu_online, cpu_possible, num_online_cpus):
+	Added.
+	* include/asm-sh/spinlock.h: Change rwlock/spinlock lock type to
+	long. Add spinlock/rwlock debugging.
+	(spin_lock_init): Fixed up invalid lock reference.
+	(spin_unlock_wait): Use spin_is_locked().
+	(_raw_spin_trylock): Added.
+	(rwlock_init, rwlock_is_locked): Added.
+	Add a SMP_MSG_RESCHEDULE definition.
+
+2002-12-14  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Add CONFIG_SMP and NR_CPUS definitions.
+
+	* arch/sh/kernel/Makefile: Add smp.c if CONFIG_SMP is set.
+	* arch/sh/kernel/irq.c (probe_irq_on): Get rid of synchronize_irq()
+	calls, since they weren't doing anything anyways .. use barrier()
+	for our delay instead.
+	* arch/sh/kernel/time.c: Clean up profiling definitions.
+
+	* include/asm-sh/processor.h: Track cpu_data for each processor.
+
+	* include/asm-sh/smp.h: Make it do something.
+	* include/asm-sh/spinlock.h: Ditto.
+	* include/asm-sh/system.h: Clean up some left-over cruft that we
+	don't have any use for anymore.
+
+2002-12-13  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/mm/init.c (enable_mmu, disable_mmu): Moved ..
+	* include/asm-sh/mmu_context.h: .. here. Make it a nop for non-SH3/4.
+
+2002-12-12  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/mm/init.c (paging_init): Largely rewritten to support
+	CONFIG_MMU being set or not while still taking discontig into
+	consideration. -- Allows SH-3/4 to boot with the MMU turned off.
+	(mem_init): Cleaned up remaining MAX_LOW_PFN/START_PFN references.
+	(enable_mmu): Added.
+	(disable_mmu): Added.
+	(pgd_alloc, pgd_free, pte_alloc_one_kernel, pte_alloc_one): Moved ..
+
+	* arch/sh/kernel/time.c (sh_do_profile): New function.
+
+	* include/asm-sh/pgalloc.h: .. here.
+	* include/asm-sh/page.h (MAP_NR): Re-added. This was removed about
+	2 years ago .. but we actually have a real use for it now.
+	* include/asm-sh/hw-irq.h (sh_do_profile): Removed.
+
+2002-12-04  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Add CPU_SH2/CPU_SUBTYPE_SH7604. Don't set MMU if
+	CPU_SH2 is set. Default SH_WRITETHROUGH on for SH-2.
+	* arch/sh/Makefile: Add SH-2 CFLAGS/AFLAGS.
+	* arch/sh/vmlinux.lds.S: Fix SH-2 alignment.
+
+	* arch/sh/kernel/cpu/Makefile: Add sh2/
+	* arch/sh/kernel/cpu/sh2/Makefile: New file.
+
+	* arch/sh/kernel/setup.c (show_cpuinfo): Get rid of SH-3/4
+	distinction. Print everything out dynamically .. look at the dcache
+	flags for combined caches (in the case of SH-2 and SH-3).
+
+	* arch/sh/mm/Makefile: Add SH-2 cache file.
+	* arch/sh/mm/cache-sh3.c (detect_cpu_and_cache_system): Default cache
+	flags to CACHE_COMBINED.
+	* arch/sh/mm/cache-sh2.c: New file.
+	* arch/sh/mm/init.c (sh_cache_init): Use __get_oc_addr() to get
+	the OC address (this is CPU specific).
+
+	* include/asm-sh/bugs.h (check_bugs): Add a CPU_SH7604 case.
+	* include/asm-sh/cache.h: Add SH-2 definitions. Add a flags variable
+	to the cache_info struct. Also add a __get_oc_addr() fallback.
+	* include/asm-sh/processor.h: Add CPU_SH7604 definition.
+
+2002-12-01  Paul Mundt  <lethal@linux-sh.org>
+
+	* TODO: More removals .. write-through caching, probing,
+	config.in/Makefile cleanup, etc.
+
+	* arch/sh/Kconfig: Clean up CPU_LITTLE_ENDIAN definition (which was
+	blatantly ripped off from MIPS, but neglected to change the MIPS
+	reference). Clean up SH_WDT definition, we're not just for SH-3/4
+	anymore.. And finally, added SH_WRITETHROUGH and SH_OCRAM definitions.
+
+	* arch/sh/kernel/setup.c (show_cpuinfo): Calculate I/D cache sizes
+	dynamically.
+	* arch/sh/kernel/sh_ksyms.c: dump_fpu() now takes a pt_regs arg.
+
+	* arch/sh/mm/cache-sh3.c: Moved out cache definitions to asm/cache.h
+	Nuked cache_wback_all() and sh_cache_init, reworked much of
+	detect_cpu_and_cache_system(), as well as various other cleanups.
+	* arch/sh/mm/cache-sh4.c: Folded detect_cpu() back into
+	detect_cpu_and_cache_system() and did more rework. Added a proper
+	flush_icache_range() and made flush_cache_sigtramp() wrap by
+	blowing out a line. Removed sh_cache_init().
+	* arch/sh/mm/init.c (sh_cache_init): Added.
+
+	* include/asm-sh/cache.h: Move SH-3/4 cache definitions here. Also
+	add __cacheline_aligned stuff and a generic cache_info structure
+	for I/D cache representation per-CPU.
+	* include/asm-sh/cacheflush.h: Comment on write-through.
+	* include/asm-sh/mman.h: Added MAP_POPULATE and MAP_NONBLOCK.
+	* include/asm-sh/mmu_context.h: Drag in asm/uaccess.h..
+	* include/asm-sh/processor.h: Add i/d-cache entries to sh_cpuinfo.
+
+2002-11-16  Paul Mundt  <lethal@linux-sh.org>
+
+	* TODO: Blow another one off the list. (SH-4 run-time probing).
+
+	* arch/sh/kernel/time.c: Rip out the PVR defines ..
+	* include/asm-sh/processor.h: Move them here, instead. Also add
+	definitions for 7750S and 7750R.
+
+	* arch/sh/mm/cache-sh4.c: detect_cpu_and_cache_system() gutted.
+	Replaced by detect_cpu(), which does version/revision probing 
+	at run-time instead of at preprocessing time. Kill off remaining
+	ifdef abuse in flush_cache_4096() .. also add sanity checks for
+	7751R.
+
+2002-11-15  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/mm/cache-sh3.c, arch/sh/mm/cache-sh4.c: If the OC is in RAM
+	mode, we only have half the entries to flush.. so tear down
+	CACHE_OC_NUM_ENTRIES accordingly.
+
+2002-11-14  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/video/pvr2fb.c (pvr2fb_init): Move ID assignment down a bit,
+	so we don't inadvertently dereference NULL..
+
+2002-11-13  Paul Mundt  <lethal@linux-sh.org>
+
+	* AGAINST-2.5.44: Really remove it.
+
+	* arch/sh/boards/se/7751/Makefile, arch/sh/boards/adx/Makefile,
+	arch/sh/boards/bigsur/Makefile, arch/sh/boards/cat68701/Makefile,
+	arch/sh/boards/cqreek/Makefile, arch/sh/boards/dmida/Makefile,
+	arch/sh/boards/ec3104/Makefile, arch/sh/boards/harp/Makefile,
+	arch/sh/boards/overdrive/Makefile, arch/sh/boards/sh2000/Makefile,
+	arch/sh/boards/unknown/Makefile, arch/sh/boards/hp6xx/hp620/Makefile,
+	arch/sh/boards/hp6xx/hp680/Makefile,
+	arch/sh/boards/hp6xx/hp690/Makefile: Kill off O_TARGET.
+
+	* arch/sh/cchips/hd6446x/hd64461/Makefile,
+	arch/sh/cchips/hd6446x/hd64465/Makefile: Here too.
+
+	* arch/sh/Kconfig: Support crypto. Add CONFIG_SWAP, CONFIG_MMU, and
+	CONFIG_VIPT definitions.
+
+	* mm/memory.c: Use CONFIG_VIVT for flush_cache_page() check. Could
+	probably use a CONFIG_ARM check, but screw it.
+
+2002-11-05  M. R. Brown  <mrbrown@linux-sh.org>
+
+	Branch merge of Linux-SH HEAD (2.5.45)
+
+	* AGAINST-2.5.45: New file.
+	* AGAINST-2.5.44: Remove.
+
+	* arch/sh/Kconfig, drivers/cdrom/Kconfig, drivers/char/Kconfig,
+	drivers/input/joystick/Kconfig, drivers/input/keyboard/Kconfig,
+	drivers/net/Kconfig: Add files.
+	* arch/sh/Config.help, arch/sh/config.in, drivers/cdrom/Config.help,
+	drivers/cdrom/Config.in, drivers/char/Config.help,
+	drivers/input/joystick/Config.help, drivers/input/joystick/Config.in,
+	drivers/maple/Config.in, drivers/mtd/Config.help,
+	drivers/mtd/maps/Config.help, drivers/mtd/maps/Config.in,
+	drivers/net/Config.help, drivers/net/Config.in: Remove files.
+	* Makefile, arch/sh/kernel/cf-enabler.c, arch/sh/mm/cache-sh4.c,
+	arch/sh/mm/fault.c, drivers/block/rd.c, drivers/char/Makefile,
+	drivers/char/maple_keyb.c, drivers/char/shwdt.c,
+	drivers/net/8139too.c, drivers/pci/pci.ids, fs/mpage.c,
+	include/asm-sh/uaccess.h, init/do_mounts.c, kernel/timer.c: Modified
+	files.
+
+2002-11-05  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/irq.c (do_IRQ): Add kstat_cpu() hooks.
+
+	* arch/sh/kernel/ptrace.c, arch/sh/kernel/process.c,
+	include/asm-sh/process.h: Death to PTRACE_O_TRACESYSGOOD as well as
+	PTRACE_SETOPTIONS.
+
+	* include/asm-sh/processor.h (copy_segments, release_segments):
+	Removed.
+
+	Sync with 2.5.46 non-Kconfig updates.
+
+2002-11-04  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/cpufreq.c (sh_cpufreq_setstate): Do a bit of rework
+	here so we use the read/write routines provided by the watchdog.h.
+
+	* drivers/char/shwdt.c: WDT update. Merge in some bits from mainline,
+	as well as some additional cleanup. SH-2 support. Move all of the
+	read/write garbage out..
+
+	* include/asm-sh/watchdog.h: Add support for the SH-2. And dump the
+	read/write stuff here.. then inline it.
+
+	* arch/sh/boards/bigsur/irq.c, arch/sh/boards/cqreek/irq.c,
+	arch/sh/boards/dreamcast/irq.c, arch/sh/boards/harp/irq.c,
+	arch/sh/boards/overdrive/irq.c, arch/sh/boards/overdrive/led.c,
+	arch/sh/kernel/irq_intc2.c, arch/sh/kernel/irq_ipr.c,
+	arch/sh/kernel/irq_maskreg.c, arch/sh/kernel/pci-sh7751.c,
+	arch/sh/mm/cache-sh3.c, arch/sh/mm/cache-sh4.c,
+	arch/sh/mm/fault.c, drivers/cdrom/gdrom.c,
+	drivers/char/sh-sci.c, drivers/maple/maple.c,
+	drivers/pcmcia/hd64465_ss.c, include/asm-sh/atomic.h,
+	arch/sh/cchips/hd6446x/hd64461/setup.c,
+	arch/sh/cchips/hd6446x/hd64465/gpio.c,
+	arch/sh/cchips/hd6446x/hd64465/setup.c,
+	include/asm-sh/bitops.h:
+	
+	Global save_and_cli()/restore_flags() death, make everyone use
+	local_irq_save()/local_irq_restore().
+
+	* include/asm-sh/system.h: Kill the rest of the save_and_cli badness
+	here.
+
+2002-11-02  M. R. Brown  <mrbrown@linux-sh.org>
+
+	* arch/sh/kernel/cpufreq.c (sh_cpufreq_update_clocks): Update
+	loops_per_jiffy for the current CPU.
+	(sh_cpufreq_setstate): Add cpu parameter.  Call
+	cpufreq_notify_transition() before and after the frequency changes.
+	(sh_cpufreq_setpolicy): Pass cpu to sh_cpufreq_setstate().
+	(sh_cpufreq_init): Oops, we need kHz, not Hz.
+
+	* drivers/char/sh-sci.c (sci_notifier): New function. Attempt to
+	update baud rate when our peripheral clock changes.
+	(sci_init_drivers): Add notifier.
+
+2002-11-02  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/time.c: Fix up some of the frequency table
+	declarations, move the divisor/values accessors into the same
+	macro.
+	* arch/sh/kernel/cpufreq.c (sh_cpufreq_setstate): Clean up some
+	watchdog definitions.
+	* drivers/char/shwdt.c: Move some of the watchdog definitions
+	out of the way.
+
+	* include/asm-sh/watchdog.h: New file.
+
+2002-11-01  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/cpufreq.c: New file.
+	* arch/sh/kernel/time.c: Countless hacks for cpufreq.
+
+	* include/asm-sh/freq.h: New file.
+
+
+2002-11-01  M. R. Brown  <mrbrown@linux-sh.org>
+
+	* drivers/cdrom/Kconfig, drivers/char/Kconfig,
+	drivers/input/joystick/Kconfig, drivers/input/keyboard/Kconfig,
+	drivers/net/Kconfig: Add from stock 2.5.45.
+	* drivers/cdrom/Config.help, drivers/char/Config.help,
+	drivers/input/joystick/Config.help: Remove.
+
+	Linux 2.5.45.
+
+	* AGAINST-2.5.45: New file.
+	* AGAINST-2.5.44: Remove.
+
+	* arch/sh/Kconfig: New file.
+	* arch/sh/Config.help, drivers/cdrom/Config.help,
+	drivers/cdrom/Config.in, drivers/char/Config.help,
+	drivers/input/joystick/Config.help, drivers/input/joystick/Config.in,
+	drivers/maple/Config.in, drivers/mtd/maps/Config.help,
+	drivers/mtd/maps/Config.in, drivers/mtd/Config.help,
+	drivers/net/Config.help, drivers/net/Config.in, arch/sh/config.in:
+	Remove.
+
+	* Makefile, arch/sh/mm/fault.c, drivers/char/Makefile,
+	drivers/net/8139too.c, fs/mpage.c, init/do_mounts.c, kernel/timer.c:
+	Merge changes from Linux 2.5.45.
+
+
+2002-10-28  M. R. Brown  <mrbrown@linux-sh.org>
+
+	Restructure PCI code / PCI auto implementation
+
+	* TODO: Update.
+
+	* arch/sh/config.in: Disable CONFIG_PCI_AUTO for the Dreamcast.
+
+	* arch/sh/boards/dreamcast/pci.c: Implement board_pci_channels.
+	(pcibios_fixup, pcibios_fixup_irqs): New routines.
+	(pcibios_init): Remove.
+	* arch/sh/boards/dreamcast/setup.c (platform_setup): Add call to
+	gapspci_init() if CONFIG_PCI is enabled.
+
+	* arch/sh/kernel/pci.c (pcibios_init): New routine.
+	* arch/sh/kernel/pci_auto.c (pciauto_setup_bars,
+	pciauto_prescan_setup_bridge, pciauto_postscan_setup_bridge,
+	pciauto_prescan_setup_cardbus_bridge,
+	pciauto_postscan_setup_cardbus_bridge, pciauto_bus_scan): Change
+	declaration to static.
+
+	* include/asm-sh/pci.h: Add struct pci_channel; add prototypes for
+	board-specific fixup routines; add prototype for
+	pciauto_assign_resources().
+
+	* arch/sh/kernel/pcibios.c: Move...
+	* arch/sh/kernel/pci.c: ...here.
+	* arch/sh/kernel/pci_auto.c: New file.  Import
+	arch/mips/kernel/pci_auto.c from linux-mips.
+	* arch/sh/kernel/Makefile: Rename rule for pcibios.o; add rule for
+	pci_auto.o.
+
+2002-10-28  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/video/pvr2fb.c: Rather extensive rewrite for new API.
+
+	* arch/sh/boards/se/770x/Makefile: Remove O_TARGET.
+	* arch/sh/boards/se/770x/irq.c: Drag in hitachi_se.h for
+	definitions.
+
+	* drivers/char/sh-sci.c (sci_receive_chars): Fix handle_sysrq()
+	invokation.
+	* drivers/char/sysrq.c (send_sig_all): for_each_task renamed to
+	for_each_process.
+
+2002-10-27  M. R. Brown  <mrbrown@linux-sh.org>
+
+	* arch/sh/vmlinux.lds.S: Major cleanups, more in-line with the i386
+	port.
+
+	* arch/sh/kernel/setup.c (setup_arch): Get rid of hack console init.
+	The full hack is scheduled to be removed at a later date.
+
+	* drivers/video/pvr2fb.c: Comment out unused structure definitions so
+	it builds.
+
+	* arch/sh/Makefile: Make boards build properly.
+
+	* arch/sh/boards/dreamcast/Makefile: 2.5-ify.
+	* arch/sh/boards/dreamcast/pci.c, arch/sh/boards/dreamcast/rtc.c,
+	arch/sh/boards/dreamcast/setup.c: Finish merging 2.5.44 changes from
+	HEAD.
+
+	* arch/sh/kernel/Makefile: Remove O_TARGET.
+	* arch/sh/kernel/time.c: Fix rtc_{get,set}_time() initializations.
+	(time_init): Make sure we call board_time_init() before calling any
+	routines that depend on it.  Make sure we always get the cpu and bus
+	clock from the CPU.
+	* drivers/char/tty_io.c: Merge from 2.5.44.
+
+2002-10-24  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/Makefile: Kill off the SE7751 LED code, use
+	SE generic code instead.
+	* arch/sh/kernel/led_se.c: Bring in SE7751 definitions if
+	CONFIG_SH_7751_SOLUTION_ENGINE is set.
+	* arch/sh/kernel/mach_7751se.c: Change heartbeat_7751se references
+	to heartbeat_se.
+	* arch/sh/kernel/led_7751se.c: Removed.
+
+2002-10-23  Paul Mundt  <lethal@linuxdc.org>
+
+	* arch/sh/config.in: Added CONFIG_CMDLINE_BOOL/CONFIG_CMDLINE.
+	Can now manually hard-code an intial kernel command line.
+
+	* arch/sh/kernel/setup.c (setup_arch): Append CONFIG_CMDLINE
+	to the kernel command line when CONFIG_CMDLINE_BOOL is set.
+	* arch/sh/kernel/rtc.c (sh_rtc_gettimeofday): Timespec pointer
+	changed name, reflect that in the rest of the code..
+
+	* include/asm-sh/ide.h (ide_init_default_hwifs): Fix the
+	ide_register_hw() call so it gets passed the correct number of
+	arguments.
+
+2002-10-22  Paul Mundt  <lethal@linuxdc.org>
+
+	* include/asm-sh/bugs.h (check_bugs): Added a CPU_SH7751R check.
+
+2002-10-21  Paul Mundt  <lethal@linuxdc.org>
+
+	* arch/sh/Makefile: Kill off LOADADDR cruft.
+	
+	* arch/sh/boot/compressed/Makefile: Fixup ZLDFLAGS so we use
+	vmlinux.lds.s.
+
+	* arch/sh/kernel/entry.S: Rename sys_pread/pwrite to
+	sys_pread64/pwrite64.
+	* arch/sh/kernel/time.c: Define jiffies_64. Redefine TICK_SIZE to
+	use TICK_NSEC instead of tick_nsec.
+
+	* drivers/block/rd.c (rd_blkdev_pagecache_IO): Make sure we
+	flush_dcache_page() on the associated page from the BIO vector
+	instead of the buffer head.
+
+	* drivers/char/maple_keyb.c (dc_kbd_connect): Fix bustype
+	assignment and make it build again.
+
+	* drivers/input/keyboard/maple_keyb.c (dc_kbd_connect): Build fix.
+
+	* drivers/video/pv2fb.c (pvr2fb_set_var): Comment out offending
+	sections. Clean this up later and make things work again.
+
+	* fs/mpage.c: Add mm.h header.
+
+	* include/asm-sh/param.h: Define USER_HZ and redefine 
+	CLOCKS_PER_SEC.
+	* include/asm-sh/pgalloc.h (pte_free_tlb): Renamed to
+	__pte_free_tlb. Likewise for pmd.
+	* include/asm-sh/system.h (irqs_disabled): Added.
+	* include/asm-sh/tlb.h (tlb_remove_tlb_entry): Renamed to
+	__tlb_remove_tlb_entry.
+	* include/asm-sh/kmap_types.h: New file -- generic skeletal
+	stuff required by AIO.
+
+	* kernel/time.c (do_adjtimex): Protect tick_nsec reference with
+	CONFIG_VARIABLE_CLOCK_TICK_RATE.
+	* kernel/timer.c (update_wall_time_one_tick): Use TICK_NSEC
+	instead of tick_nsec for systems with a non-static clock tick
+	rate.
+	
+	Also protect the tick_nsec declaration with the
+	CONFIG_VARIABLE_CLOCK_TICK_RATE -- fixup all other tick_nsec
+	references with TICK_NSEC instead.
+
+2002-10-21  M. R. Brown  <mrbrown@linuxdc.org>
+
+	* arch/sh/config.in: Massive cleanups in preparation of the
+	linux-2_5-restructure merge.
+
+	* arch/sh/kernel/head.S: Rename cache_init to sh_cache_init to
+	prevent conflict with sunrpc code (net/sunrpc/cache.c).
+	* arch/sh/kernel/mach_dc.c: Rename aica_rtc_* routines to sh_rtc_*.
+	Temporary stop-gap until restructure where RTC is cleaned up.
+	* arch/sh/kernel/pci-dc.c (pcibios_init): Call gapspci_init()
+	directly.  Properly initialize PCI subsystem via subsys_initcall().
+	* arch/sh/kernel/rtc-aica.c: Rename aica_rtc* routines to sh_rtc_*.
+	Temporary stop-gap until restructure where RTC is cleaned up.
+	* arch/sh/kernel/setup.c (scif_sercon_putc, scif_sercon_flush,
+	scif_sercon_write, scif_sercon_device, scif_sercon_setup,
+	scif_sercon_init, scif_sercon_unregister): New routines.  Implement a
+	hacked SH4 SCIF console until normal consoles are rewritten and
+	CONFIG_VT is handled properly.
+	(setup_arch): Inititalize SCIF serial console.
+	* arch/sh/kernel/setup_dc.c (setup_dreamcast): Remove call to
+	gapspci_init; minor cleanups.
+
+	* arch/sh/mm/cache-sh3.c: Rename cache_init to sh_cache_init to
+	prevent conflict with sunrpc code (net/sunrpc/cache.c).
+	* arch/sh/mm/cache-sh4.c: Rename cache_init to sh_cache_init to
+	prevent conflict with sunrpc code (net/sunrpc/cache.c).
+	* arch/sh/mm/init.c (paging_init): Initialize mem_map.
+	CONFIG_DISCONTIGMEM case is not implemented yet.
+
+	* drivers/pci/pci.ids: Remove duplicate entry.
+
+	* include/asm-sh/hw_irq.h (sh_do_profile): New function.  Holdover
+	until restructure is in place.
+
+2002-10-19  M. R. Brown  <mrbrown@linuxdc.org>
+
+	* arch/sh/kernel/init_task.c: Fix init_signals initialization.
+	* arch/sh/kernel/irq.c (handle_IRQ_event): Remove unused SMP crud; fix
+	irq_enter() and irq_exit() macros.
+	(disable_irq): Call synchronize_irq().
+	(synchronize_irq): New funtion; available if CONFIG_SMP is defined.
+	* arch/sh/kernel/pcibios.c (pcibios_align_resource,
+	pcibios_enable_device): Fix function declarations.
+	* arch/sh/kernel/rtc-aica.c (aica_rtc_gettimeofday): Convert to struct
+	timespec.
+	(aica_rtc_settimeofday): Now accepts time_t instead of
+	timeval/timespec.
+	* arch/sh/kernel/rtc.c (sh_rtc_gettimeofday): Convert to struct
+	timespec.
+	(sh_rtc_settimeofday): Now accepts time_t instead of timeval/timespec.
+	* arch/sh/kernel/sh_ksyms.c Commented out screen_info symbol until
+	it's replacement is determined; Export synchronize_irq().
+	* arch/sh/kernel/time.c: Merged from restructure.
+	(do_gettimeoffset): Convert to nanoseconds/update for timespec.
+	(do_settimeofday): Same here.
+	(sh_do_profile): Removed.
+	(do_timer_interrupt): More usec->nsec conversion.
+	(get_timer_frequency): Use nanoseconds instead of usecs.  Not so sure
+	about this one.
+	(time_init): CONFIG_CPU_SUBTYPE_ST40STB1 hack gutted; KGDB is
+	initialized from here.
+
+	* include/asm-sh/hardirq.h: Converted to 2.5 series.
+	* include/asm-sh/machvec.h: mv_rtc_gettimeofday and
+	mv_rtc_settimeofday prototypes updated.
+	* include/asm-sh/rtc.h: Update prototypes.
+	* include/asm-sh/softirq.h: Converted to 2.5 series.
+	* include/asm-sh/system.h: Comment out macros now included in
+	kernel/sched.c by default (no need to override).
+	
+
+	* arch/sh/kernel/process.c (sys_fork, sys_clone, sys_vfork): Add
+	missing user_tid parameter, set to NULL for all calls.
+	* arch/sh/kernel/signal.c (sys_sigsuspend, sys_rt_sigsuspend,
+	sys_sigreturn, sys_rt_sigreturn, handle_signal): Replace obsolete
+	field sigmask_lock with sig->siglock.
+
+	* include/asm-sh/system.h: Fix definition of save_and_cli() for UP.
+
+	* include/asm-sh/linkage.h, include/asm-sh/percpu.h,
+	include/asm-sh/rmap.h, include/asm-sh/topology.h: Add missing header
+	files from 2.5 series.
+
+	Linux 2.5.44
+
+	* AGAINST-2.5.44: New file.
+	* AGAINST-2.5.43: Removed.
+
+	* Makefile, arch/sh/lib/old-checksum.c, drivers/block/rd.c,
+	drivers/char/Makefile, drivers/char/Config.help, fs/nfs/inode.c,
+	include/asm-sh/checksum.h, include/asm-sh/system.h: Merge changes from
+	Linux 2.5.44.
+
+2002-10-18  M. R. Brown  <mrbrown@linuxdc.org>
+
+	* fs/nfs/inode.c: Fix merge breakage.
+
+	Linux 2.5.43
+
+	* AGAINST-2.5.43: New file.
+	* AGAINST-2.5.42: Removed.
+
+	* Makefile, arch/sh/kernel/mach_7751se.c, arch/sh/kernel/mach_adx.c,
+	arch/sh/kernel/mach_bigsur.c, arch/sh/kernel/mach_cat68701.c,
+	arch/sh/kernel/mach_dc.c, arch/sh/kernel/mach_dmida.c,
+	arch/sh/kernel/mach_ec3104.c, arch/sh/kernel/mach_hp600.c,
+	arch/sh/kernel/mach_se.c, arch/sh/kernel/mach_unknown.c,
+	arch/sh/kernel/setup.c, arch/sh/kernel/setup_cqreek.c,
+	arch/sh/kernel/setup_dc.c, arch/sh/kernel/setup_ec3104.c,
+	arch/sh/kernel/setup_hd64465.c, arch/sh/kernel/setup_sh2000.c,
+	arch/sh/stboards/mach.c, drivers/block/rd.c, drivers/Makefile,
+	drivers/char/Makefile, drivers/char/Config.help,
+	drivers/mtd/maps/Config.in, drivers/mtd/maps/Config.help,
+	drivers/mtd/Config.help, fs/nfs/inode.c, mm/memory.c: Merge changes
+	from Linux 2.5.43.
+
+	Linux 2.5.42
+
+	* AGAINST-2.5.42: New file.
+	* AGAINST-2.5.41: Removed.
+
+	* Makefile, drivers/block/rd.c, drivers/char/Config.help,
+	fs/nfs/inode.c, include/linux/input.h: Merge changes from Linux
+	2.5.42.
+
+	* Makefile: Fix merge breakage.
+
+	5Linux 2.5.41
+
+	* AGAINST-2.5.41: New file.
+	* AGAINST-2.5.40: Removed.
+
+	* Makefile, drivers/block/rd.c, drivers/char/Makefile,
+	drivers/char/Config.help, drivers/char/sh-sci.c,
+	drivers/char/sh-sci.h, drivers/mtd/maps/Config.in,
+	drivers/mtd/maps/Config.help, drivers/net/Config.in,
+	drivers/pci/pci.ids, drivers/pcmcia/hd64465_ss.c, fs/nfs/inode.c,
+	include/asm-sh/unistd.h, init/do_mounts.c, mm/memory.c: Merge changes
+	from Linux 2.5.41.
+
+	Linux 2.5.40
+
+	* AGAINST-2.5.40: New file.
+	* AGAINST-2.5.39: Removed.
+
+	* Makefile, drivers/block/rd.c, drivers/net/8139too.c, mm/memory.c:
+	Merge changes from Linux 2.5.40.
+
+	Linux 2.5.39
+
+	* AGAINST-2.5.39: New file.
+	* AGAINST-2.5.38: Removed.
+
+	* Makefile, arch/sh/Makefile, arch/sh/kernel/Makefile,
+	arch/sh/mm/Makefile, arch/sh/stboards/Makefile, drivers/block/rd.c,
+	mm/memory.c: Merge changes from Linux 2.5.39.
+
+	Linux 2.5.38
+
+	* AGAINST-2.5.38: New file.
+	* AGAINST-2.5.37: Removed.
+
+	* Makefile, drivers/block/rd.c: Merge changes from Linux 2.5.38.
+
+	Linux 2.5.37
+
+	* AGAINST-2.5.37: New file.
+	* AGAINST-2.5.36: Removed.
+
+	* Makefile, drivers/block/rd.c, drivers/net/8139too.c,
+	drivers/net/Config.in, drivers/net/Config.help, fs/nfs/inode.c,
+	mm/memory.c: Merge changes from Linux 2.5.37.
+
+	Linux 2.5.36
+
+	* AGAINST-2.5.36: New file.
+	* AGAINST-2.5.35: Removed.
+
+	* Makefile, arch/sh/Makefile, drivers/char/Makefile, kernel/ptrace.c,
+	mm/memory.c: Merge changes from Linux 2.5.36.
+
+	* Makefile: Fix merge breakage.
+
+	Linux 2.5.35
+
+	* AGAINST-2.5.35: New file.
+	* AGAINST-2.5.34: Removed.
+
+	* Makefile, arch/sh/Makefile, drivers/char/Makefile,
+	drivers/char/Config.help, drivers/pci/pci.ids, fs/nfs/inode.c,
+	include/asm-sh/hdreg.h, include/asm-sh/pgtable.h: Merge changes from
+	Linux 2.5.35.
+
+	Linux 2.5.34
+
+	* AGAINST-2.5.34: New file.
+	* AGAINST-2.5.33: Removed.
+
+	* Makefile, arch/sh/mm/init.c, drivers/block/rd.c,
+	drivers/char/Makefile, drivers/net/8139too.c, init/do_mounts.c,
+	kernel/ptrace.c, mm/memory.c: Merge changes from Linux 2.5.34.
+
+	Linux 2.5.33
+
+	* AGAINST-2.5.33: New file.
+	* AGAINST-2.5.32: Removed.
+
+	* Makefile, arch/sh/kernel/irq_intc2.c, arch/sh/kernel/pci-dc.c,
+	arch/sh/kernel/pci-sh7751.c, arch/sh/kernel/pci_st40.c,
+	drivers/char/Makefile, drivers/char/Config.help,
+	drivers/net/8139too.c, drivers/net/Config.in, drivers/net/Config.help,
+	fs/nfs/inode.c, include/asm-sh/cache.h: Merge changes from Linux
+	2.5.33.
+
+	* drivers/pci/pci.ids, drivers/char/Makefile: Fix merge breakage.
+
+	Linux 2.5.32
+
+	* AGAINST-2.5.32: New file.
+	* AGAINST-2.5.31: Removed.
+
+	* Makefile, arch/sh/Makefile, arch/sh/config.in,
+	drivers/char/Makefile, drivers/char/Config.help,
+	drivers/input/joystick/Config.help, drivers/input/joystick/Config.in,
+	drivers/mtd/maps/Config.in, drivers/pci/pci.ids,
+	drivers/video/epson1355fb.c, drivers/video/hitfb.c,
+	drivers/video/pvr2fb.c, include/asm-sh/keyboard.h,
+	include/asm-sh/smplock.h, include/linux/input.h, init/do_mounts.c,
+	kernel/ptrace.c, mm/memory.c: Merge changes from Linux 2.5.32.
+
+	Linux 2.5.31
+
+	* AGAINST-2.5.31: New file.
+	* AGAINST-2.5.30: Removed.
+
+	* Makefile, arch/sh/config.in, drivers/char/Makefile,
+	drivers/net/8139too.c, mm/memory.c: Merge changes from Linux 2.5.31.
+
+	* init/do_mounts.c, mm/memory.c: Fix merge breakage.
+
+	Linux 2.5.30
+
+	* AGAINST-2.5.30: New file.
+	* AGAINST-2.5.29: Removed.
+
+	* Makefile, arch/sh/kernel/Makefile, drivers/block/rd.c,
+	drivers/Makefile, drivers/char/Makefile, drivers/char/Config.help,
+	drivers/net/Config.in, fs/nfs/inode.c, include/asm-sh/processor.h,
+	include/asm-sh/socket.h, include/asm-sh/unistd.h,
+	include/linux/input.h, init/do_mounts.c, kernel/ptrace.c, mm/memory.c:
+	Merge changes from Linux 2.5.30.
+
+	Linux 2.5.29
+
+	* AGAINST-2.5.29: New file.
+	* AGAINST-2.5.28: Removed.
+
+	* Makefile, arch/sh/config.in, drivers/input/joystick/Config.help,
+	drivers/input/joystick/Config.in, drivers/input/joystick/Makefile,
+	fs/nfs/inode.c, include/linux/input.h, init/do_mounts.c: Merge changes
+	from Linux 2.5.29.
+
+	Linux 2.5.28
+
+	* AGAINST-2.5.28: New file.
+	* AGAINST-2.5.27: Removed.
+
+	* Makefile, arch/sh/kernel/irq.c, arch/sh/kernel/process.c,
+	drivers/block/rd.c, drivers/Makefile, drivers/char/Makefile,
+	drivers/net/8139too.c, include/asm-sh/system.h, kernel/ptrace.c,
+	mm/memory.c: Merge changes from Linux 2.5.28.
+
+	Linux 2.5.27
+
+	* AGAINST-2.5.27: New file.
+	* AGAINST-2.5.26: Removed.
+
+	* Makefile, include/asm-sh/ide.h, kernel/ptrace.c, mm/memory.c: Merge
+	changes from Linux 2.5.27.
+
+	Linux 2.5.26
+
+	* AGAINST-2.5.26: New file.
+	* AGAINST-2.5.25: Removed.
+
+	* Makefile, arch/sh/config.in, drivers/char/Makefile,
+	drivers/char/Config.help, drivers/input/joystick/Config.help,
+	drivers/input/joystick/Config.in, drivers/input/joystick/Makefile,
+	fs/nfs/inode.c, include/asm-sh/pgtable-2level.h,
+	include/linux/input.h: Merge changes from Linux 2.5.26.
+
+	* include/linux/input.h: Fix merge breakage.
+
+	Linux 2.5.25
+
+	* AGAINST-2.5.25: New file.
+	* AGAINST-2.5.24: Removed.
+	
+	* Makefile, arch/sh/Makefile, arch/sh/boot/compressed/Makefile,
+	arch/sh/boot/Makefile, drivers/char/Makefile,
+	drivers/input/joystick/Config.help, drivers/input/joystick/Config.in,
+	drivers/input/joystick/Makefile, fs/nfs/inode.c,
+	include/linux/input.h, mm/memory.c: Merge changes from Linux 2.5.25.
+
+2002-08-28  Matt Boytim <matt@boytim.org>
+
+	* drivers/char/sh-sci.c (sci_receive_chars): Add dummy read
+	when copied==0 to clear interrupt.
+
+2002-06-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/Makefile (archclean): Remove invoking make under
+	subdirectory.
+	(LINKFLAGS): Add adding 'jiffies' definition.
+
+	* arch/sh/vmlinux.lds.S (jiffies): Removed.
+
+	* arch/sh/mm/ioremap.c: Include <linux/mm.h> and <asm/page.h>.
+
+	* arch/sh/mm/cache-sh4.c (copy_user_page, clear_user_page): Follow
+	new API.
+
+	* arch/sh/kernel/irq.c (show_interrupts): Use NR_CPUS (was:
+	smp_num_cpus).
+
+	* arch/sh/kernel/sh_ksyms.c: Don't include <asm/pgalloc.h>.
+
+	* include/asm-sh/signal.h: Declare struct pt_regs.
+
+	* include/asm-sh/pgtable.h (mk_pte): New definition using pfn_pte.
+
+	* include/asm-sh/pgalloc.h (pmd_free_tlb): Fixed to have a argument
+	tlb.
+	(ptep_get_and_clear): Fixed the argurment to pfn_to_page.
+
+	* include/asm-sh/pgtable-2level.h (pte_pfn): Fixed to access the
+	member pte (was: pte_low).
+
+	* include/asm-sh/page.h (VALID_PAGE): Removed.
+	(PFN_START, pfn_to_page, page_to_pfn, virt_to_page, pfn_valid,
+	virt_addr_valid): Defined.
+
+	* include/asm-sh/siginfo.h: Remove unmatched #endif.
+
+2002-06-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* AGAINST-2.5.24: New file.
+	* AGAINST-2.5.24: Removed.
+	* Makefile: Version 2.5.24.
+
+	* arch/sh/kernel/sys_sh.c, drivers/Makefile, drivers/char/Makefile,
+	drivers/mtd/maps/Config.in, drivers/net/8139too.c,
+	drivers/net/Config.in, drivers/pcmcia/hd64465_ss.c: Incorporate
+	changes in 2.5.23.
+
+2002-06-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* AGAINST-2.5.23: New file.
+	* AGAINST-2.5.22: Removed.
+	* Makefile: Version 2.5.23.
+
+	* arch/sh/Makefile, arch/sh/boot/Makefile, arch/sh/kernel/time.c,
+	drivers/block/rd.c: Incorporate changes in 2.5.23.
+
+2002-06-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/system.h (prepare_to_switch): Removed.
+	(prepare_arch_schedule, finish_arch_schedule, prepare_arch_switch,
+	finish_arch_switch): Added.
+	(switch_to): New API.
+
+	* AGAINST-2.5.22: New file.
+	* AGAINST-2.5.21: Removed.
+	* Makefile: Version 2.5.22.
+
+	* arch/sh/kernel/setup.c, drivers/Makefile, drivers/block/rd.c,
+	drivers/char/Makefile, drivers/pci/pci.ids, fs/nfs/inode.c,
+	init/do_mounts.c, mm/memory.c: Incorporate changes in 2.5.22.
+
+2002-06-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* AGAINST-2.5.21: New file.
+	* AGAINST-2.5.20: Removed.
+	* Makefile: Version 2.5.21.
+
+	* arch/sh/boot/Makefile, drivers/block/rd.c, drivers/char/Makefile,
+	fs/nfs/inode.c: Incorporate changes in 2.5.21.
+
+2002-06-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/page.h (clear_user_page, copy_user_page): New API.
+
+	* AGAINST-2.5.20: New file.
+	* AGAINST-2.5.19: Removed.
+	* Makefile: Version 2.5.20.
+
+	* drivers/cdrom/Config.help, drivers/cdrom/Config.in,
+	drivers/cdrom/Makefile, drivers/char/Config.help,
+	drivers/char/Makefile, drivers/net/Config.help, fs/nfs/inode.c,
+	include/asm-sh/pgtable.h, init/do_mounts.c, mm/memory.c: Incorporate
+	changes in 2.5.20.
+
+2002-06-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgtable-2level.h (pte_pfn, pfn_pte, pfn_pmd): Added.
+
+	* AGAINST-2.5.19: New file.
+	* AGAINST-2.5.18: Removed.
+	* Makefile: Version 2.5.19.
+
+	* arch/sh/kernel/Makefile, arch/sh/kernel/signal.c,
+	arch/sh/stboards/Makefile, drivers/Makefile, drivers/block/rd.c,
+	drivers/cdrom/Makefile, drivers/char/Makefile,
+	drivers/video/hitfb.c, include/asm-sh/errno.h, include/asm-sh/ide.h,
+	include/asm-sh/siginfo.h, init/do_mounts.c, mm/memory.c: Incorporate
+	changes in 2.5.19.
+
+2002-06-18  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/bitops.h (fls): Added.
+	* arch/sh/kernel/signal.c: Include <linux/suspend.h>.
+	(do_signal): Handle PF_FREEZE.
+
+	* AGAINST-2.5.18: New file.
+	* AGAINST-2.5.17: Removed.
+	* Makefile: Version 2.5.18.
+
+	* arch/sh/defconfig, arch/sh/kernel/Makefile, arch/sh/lib/Makefile,
+	arch/sh/mm/Makefile, arch/sh/mm/init.c, drivers/block/rd.c,
+	drivers/char/Makefile, drivers/char/shwdt.c,
+	drivers/input/joystick/Makefile, drivers/pci/pci.ids,
+	fs/nfs/inode.c, init/do_mounts.c, mm/memory.c: Incorporate changes
+	in 2.5.18.
+
+2002-05-24  Paul Mundt  <lethal@chaoticdreams.org>
+
+	* arch/sh/Config.help, arch/sh/config.in, arch/sh/kernel/Makefile:
+	Add CONFIG_UBC_WAKEUP definitions.
+	* arch/sh/kernel/setup.c (setup_arch): Call ubc_wakeup() if
+	CONFIG_UBC_WAKEUP=y.
+	* arch/sh/kernel/ubc.S: New file.
+
+	* include/asm-sh/ptrace.h: Move UBC definitions out to a UBC
+	specific header.
+	* include/asm-sh/ubc.h: New file.
+
+2002-05-23  Paul Mundt  <lethal@chaoticdreams.org>
+
+	* drivers/char/shwdt.c: SH-5 support. Various other cleanups.
+
+2002-05-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/tlb.h (tlb_start_vma, tlb_end_vma,
+	tlb_remove_tlb_entry, tlb_flush): To be implemented.
+
+	* AGAINST-2.5.17: New file.
+	* AGAINST-2.5.16: Removed.
+	* Makefile: Version 2.5.17.
+
+	* drivers/block/rd.c, fs/nfs/inode.c, include/asm-sh/ioctls.h,
+	mm/memory.c: Incorporate changes in 2.5.17.
+
+2002-05-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgalloc.h (pte_free_tlb, pmd_free_tlb): Added.
+
+	* AGAINST-2.5.16: New file.
+	* AGAINST-2.5.15: Removed.
+	* Makefile: Version 2.5.16.
+
+	* arch/sh/kernel/process.c, arch/sh/vmlinux.lds.S,
+	drivers/net/8139too.c, include/asm-sh/ide.h, include/linux/input.h,
+	mm/memory.c: Incorporate changes in 2.5.16.
+
+2002-05-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/signal.c (do_signal): Added SIGURG case.
+
+	* AGAINST-2.5.15: New file.
+	* AGAINST-2.5.14: Removed.
+	* Makefile: Version 2.5.15.
+
+	* arch/sh/kernel/pci_st40.c, arch/sh/kernel/pcibios.c,
+	drivers/Makefile, drivers/char/Makefile, include/asm-sh/ide.h,
+	kernel/ptrace.c: Incorporate changes in 2.5.15.
+
+2002-05-07  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgtable.h (mk_pte_phys): Removed.
+
+	* AGAINST-2.5.14: New file.
+	* AGAINST-2.5.13: Removed.
+	* Makefile: Version 2.5.14.
+
+	* arch/sh/mm/cache-sh4.c, arch/sh/mm/fault.c, arch/sh/mm/init.c, 
+	arch/sh/mm/ioremap.c, drivers/pci/pci.ids, include/asm-sh/pgalloc.h, 
+	init/do_mounts.c, mm/memory.c: Incorporate changes in 2.5.14.
+
+2002-05-06  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* AGAINST-2.5.13: New file.
+	* AGAINST-2.5.12: Removed.
+	* Makefile: Version 2.5.13.
+
+	* Makefile, drivers/block/rd.c, drivers/net/Config.in, 
+	drivers/pci/pci.ids: Incorporate changes in 2.5.13.
+
+2002-05-01  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* AGAINST-2.5.12: New file.
+	* AGAINST-2.5.11: Removed.
+	* Makefile: Version 2.5.12.
+
+	* arch/sh/mm/init.c, drivers/block/rd.c, drivers/char/Makefile,
+	drivers/pci/pci.ids, fs/nfs/inode.c, mm/memory.c: Incorporate
+	changes in 2.5.12.
+
+2002-04-30  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow up to 2.5.11.
+	* arch/sh/mm/clear_page.S: Remove SYMBOL_NAME.
+	* arch/sh/kernel/head.S, arch/sh/kernel/entry.S,
+	arch/sh/lib/memmove.S: Likewise.
+
+	* AGAINST-2.5.11: New file.
+	* AGAINST-2.5.10: Removed.
+	* Makefile: Version 2.5.11.
+
+	* Documentation/cachetlb.txt: Incorporate changes in 2.5.11.
+	* arch/sh/defconfig, drivers/block/rd.c, drivers/char/Config.help,
+	drivers/char/Makefile, drivers/video/epson1355fb.c, 
+	drivers/video/hitfb.c, drivers/video/pvr2fb.c, 
+	include/asm-sh/ide.h, mm/memory.c: Likewise.
+
+2002-04-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* AGAINST-2.5.10: New file.
+	* AGAINST-2.5.9: Removed.
+	* Makefile: Version 2.5.10.
+	* drivers/pci/pci.ids: Incorporate changes in 2.5.10.
+
+2002-04-25  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/mm/cache-sh4.c (CACHE_ASSOC): Defined.
+	(flush_cache_4096_all): Moved to clear_page.S.
+	(flush_cache_4096): Rewritten. Use __flush_cache_4096.
+	(flush_dcache_page,__flush_cache_page): Don't protect from interrupt.
+	(flush_cache_all): Rewritten. Use __flush_dcache_all.
+	(flush_cache_range): Follow change of flush_cache_4096_all.
+	* arch/sh/mm/clear_page.S (__flush_cache_4096_all): Removed.
+	(flush_cache_4096_all): New implementation.
+	(__flush_cache_4096): Optimized. Use ASSOC bit.
+	(__flush_dcache_all): New function.
+	(__clear_user): Clean-up local label.
+
+	* copy_page.S (__copy_user): Clean-up local label.
+
+	* arch/sh/kernel/time.c (sh_do_profile): Add profile even if PC is in
+	P2 area.
+
+2002-04-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* AGAINST-2.5.9: New file.
+	* AGAINST-2.5.8: Removed.
+	* Makefile: Version 2.5.9.
+	* drivers/char/Makefile: Incorporate changes in 2.5.9.
+	* drivers/pci/pci.ids: Likewise.
+	* include/asm-sh/errno.h (E2BIG): Follow the change of i386 version.
+
+2002-04-17  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/mm/copy_page.S (__copy_user): New function.
+	* include/asm-sh/uaccess.h (__copy_user): Remove macro,
+	declared as external function.
+
+2002-04-15  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Makefile: Version 2.5.8.
+	* AGAINST-2.5.8: New file.
+	* AGAINST-2.5.8-pre3: Removed.
+
+	* drivers/block/rd.c: Incorporate changes in 2.5.8-pre3 -> final.
+
+2002-04-13  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/mm/clear_page.S (__clear_user): Bug fix.
+	
+2002-04-12  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow up to 2.5.8-pre3.
+	* include/asm-sh/tlbflush.h (flush_tlb_kernel_range): New API.
+	* arch/sh/mm/fault.c (flush_tlb_kernel_range): New function.
+
+	* arch/sh/kernel/entry.S (sys_sched_setaffinity,
+	sys_sched_getaffinity): New syscall entries.
+	* include/asm-sh/unistd.h (__NR_sched_setaffinity,
+	__NR_sched_getaffinity): New macros.
+
+2002-04-11  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Follow up to 2.5.8-pre2.
+	* arch/sh/kernel/process.c: Include <linux/platform.h>.
+	(default_idle): New function.
+	(cpu_idle): Call default_idle.
+
+	* arch/sh/kernel/signal.c: Include <linux/binfmt.h>.
+
+	* include/asm-sh/pgalloc.h: Inline functions move to real functions.
+	* arch/sh/mm/init.c (pgd_alloc, pgd_free, pte_alloc_one_kernel, 
+	pte_alloc_one): Moved to here.
+
+	* include/asm-sh/thread_info.h (PREEMPT_ACTIVE): Defined.
+
+	* include/asm-sh/cacheflush.h, include/asm-sh/tlbflush.h: New files.
+
+	* include/asm-sh/mmu_context.h: Include asm/tlbflush.h.
+
+	* arch/sh/kernel/signal.c: Include asm/cacheflush.h.
+	* arch/sh/mm/cache-sh3.c: Likewise.
+	* arch/sh/mm/cache-sh4.c: Likewise.
+	* arch/sh/mm/fault.c: Likewise.
+
+	* arch/sh/kernel/sh_ksyms.c: Include asm/tlbflush.h,
+	asm/cacheflush.h.
+	* arch/sh/mm/ioremap.c: Likewise.
+
+2002-04-10  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* Makefile: Version 2.5.8-pre3.
+	* AGAINST-2.5.8-pre3: New file.
+	* AGAINST-2.5.8-pre1: Removed.
+
+	* include/asm-sh/unistd.h: Incorporate changes in 2.5.8-pre2 -> pre3.
+	* drivers/block/rd.c: Likewise.
+
+	* mm/memory.c: Incorporate changes in 2.5.8-pre1 -> pre2.
+	* fs/nfs/inode.c: Incorporate changes in 2.5.8-pre1 -> pre2.
+
+2002-04-07  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/traps.c (show_task): Don't use __get_user, 
+	it's kernel space.  Assume 80-columns.
+
+2002-04-06  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/semaphore.c: Inlcude <linux/errno.h>.
+
+2002-04-05  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Bug fix for thread_info.
+	* arch/sh/kernel/ptrace.c (get_stack_long): Use task->thread_info.
+	(put_stack_long): Likewise.
+	(sys_ptrace): Likewise.
+
+2002-04-05  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* fs/nfs/inode.c: Added.
+	(nfs_find_actor): Return 0 when the type of file is not same.
+
+2002-04-05  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/input/joystick/Config.in: Updated to 2.5.8-pre1.
+	* drivers/input/joystick/Config.help: Ditto.
+	* drivers/input/joystick/Makefile: Ditto.
+	* drivers/net/Config.in: Ditto.
+	* arch/sh/kernel/pci-sh7751.c: Martin's e-mail change to ucw.cz.
+	(follow the change of arch/i386/*.)
+	* drivers/video/epson1355fb.c (e1355fb_init): Use NODEV Instead of -1.
+
+2002-04-04  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Update to 2.5.8-pre1.
+	* AGAINST-2.5.8-pre1: New file.
+	* AGAINST-2.5.7: Removed.
+	* Makefile: Version 2.5.8-pre1.
+	* Makefile, arch/sh/kernel/sh_ksyms.c, drivers/block/rd.c,
+	drivers/char/shwdt.c, drivers/net/Config.in, drivers/pci/pci.ids,
+	init/do_mounts.c: Include changes from mainline (2.5.8-pre1).
+	* arch/sh/kernel/sh_ksyms.c (simple_strtol, strtok): Removed.
+	* drivers/char/shwdt.c (nowayout): New module option (to be
+	configured at runtime by Matt Domsch).
+
+2002-04-03  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache-sh4.c (flush_cache_4096_all, flush_cache_4096):
+	Changed the compile time condition for ST40 and SH7751.  OC can be
+	handled in P2, while IC must be handled at P1.
+
+	* arch/sh/mm/clear_page.S (__flush_cache_4096_all): Renamed
+	from __flush_cache_4096_nocheck.
+
+2002-03-29  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache-sh4.c (flush_cache_4096_nocheck): New function.
+	(flush_icache_all): New function.
+	(flush_cache_all): Use flush_icache_all.  Don't need to protect 
+	from interrupt as we don't flush dcache by writing CCR.
+	(flush_cache_range): Don't call __flush_cache_page, but
+	call flush_cache_4096_nocheck.
+
+	* arch/sh/mm/clear_page.S (__flush_cache_4096_nocheck): New function.
+
+2002-03-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (work_notifysig): One cycle optimization.
+
+2002-03-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/process.c (cpu_idle): Bug fix.  Don't exit loop
+	when hlt_counter != 0.
+
+	* include/asm-sh/uaccess.h (__access_ok): Added missing inline
+	qualifier.
+
+	* arch/sh/kernel/entry.S (OFF_TRA): Renamed from IS_SYSCALL.
+	(system_call, handle_exception): Set tra.
+
+	* arch/sh/kernel/signal.c (restore_sigcontext, handle_signal,
+	do_signal): Use tra.
+
+	* include/asm-sh/ptrace.h (tra): Renamed from is_syscall.
+
+2002-03-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/signal.c (save_sigcontext_fpu): Don't need
+	to protect from interrupt.
+	* arch/sh/kernel/process.c (dump_fpu, __switch_to, copy_thread):
+	Likewise.
+
+2002-03-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache-sh4.c (flush_dcache_page): Merged with
+	__flush_dcache_page.
+
+2002-03-28  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/clear_page.S (__flush_cache_4096): Only define for
+	SH7750.
+
+	* arch/sh/mm/cache-sh4.c (flush_cache_4096): Plain loop for SH7751
+	and ST40 (no need to go P2).
+
+2002-03-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (IS_SYSCALL): Renamed from SYSCALL_NR.
+	(system_call, handle_exception): Set is_syscall.
+
+	* arch/sh/kernel/signal.c (restore_sigcontext, handle_signal,
+	do_signal): Use is_syscall.
+
+	* include/asm-sh/ptrace.h (is_syscall): Renamed from syscall_nr.
+
+	* arch/sh/kernel/signal.c (save_sigcontext_fpu): Use __put_user
+	(was: __copy_to_user).
+	(handle_signal, do_signal): Bug fix.  Don't set register 0.
+
+	* include/asm-sh/hw_irq.h (sh_do_profile): Removed from here.
+	* arch/sh/kernel/time.c (sh_do_profile): But implemented here.
+
+2002-03-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/copy_page.S: File merged with __copy_user_page-sh4.S.
+	* arch/sh/mm/clear_page.S: File merged with __clear_user.S.
+	(__flush_cache_4096): New function.
+	* arch/sh/mm/Makefile: Remove __copy_user_page-sh4.S and
+	__clear_user.S.
+
+	* arch/sh/mm/cache-sh4.c (__flush_icache_page): Removed.
+	(flush_cache_4096): New function.
+
+2002-03-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache-sh4.c (__flush_cache_page): New function.
+	(flush_cache_range, flush_cache_page, flush_icache_user_range): Use
+	__flush_cache_page.
+
+2002-03-26  NIIBE Yutaka  <gniibe@server1.m17n.org>
+
+	* arch/sh/mm/cache-sh4.c (flush_cache_mm): Don't check
+	mm->context, it's for TLB handling.
+	(flush_cache_range): Likewise.
+	(flush_cache_mm): Fix the comment.  The alias issue is there
+	for write-through cache too. 
+	(flush_cache_range): Don't handle in P2.
+
+2002-03-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache-sh4.c (flush_cache_range): Bug fix.
+	Handle the case where PMD is none or bad.
+	The argument to __flush_icache_page/__flush_dcache_page
+	is physical address (was: virtual address).
+
+2002-03-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/mmu_context.h (switch_mm): Remove setting/resetting
+	of mm->cpu_vm_mask.  It's for SMP implementation.
+	(get_new_mmu_context): Removed.
+	(get_mmu_context): Merved with get_new_mmu_context.
+
+2002-03-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/lib/Makefile (obj-y): Removed old-checksum.o as
+	it seems nothing depends on that.
+
+	* arch/sh/kernel/sh_ksyms.c (csum_partial_copy): 
+	Don't export old (possibly obsolete) function.
+
+2002-03-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/uaccess.h (__clear_user): Make it external
+	function.  (Was: inline function).
+
+	* arch/sh/mm/Makefile: Added the entry for __clear_user.o.
+	* arch/sh/mm/__clear_user.S: File name change.  As it's also used by
+	SH-3, renamed from __clear_user_page-sh4.S,
+	(__clear_user): New function.
+
+2002-03-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/system.h (mm_segment_t): Move the definition to...
+	* include/asm-sh/uaccess.h: ... here.  And change it to have boolean
+	is_user_space.
+	(KERNEL_DS, USER_DS): New value domain: 0 or 1.
+	(get_fs): Simplified.
+	(set_fs): Optimized by asm.
+	(__get_user_check): New implementation.
+	(__get_user_1, __get_user_2, __get_user_4): New macros.
+	(strnlen_user): Use __access_ok function.
+	(strlen_user): Implemented as inline function.
+
+2002-03-23  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/uaccess.h (__range_ok): Removed.
+	(__access_ok, access_ok): New implementation.
+
+	* include/asm-sh/thread_info.h (TIF_USERSPACE): Change to 31,
+	so that expression can be simple (was: 18).
+
+2002-03-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/thread_info.h: Define cpu and preempt_count as
+	16-bit to fit cache (for SH-3).
+	(INIT_THREAD_INFO): Initialize the member 'cpu'.
+
+	* include/asm-sh/system.h (switch_to): Use __dummy output argument
+	for r0.
+
+	* include/asm-sh/pgtable.h (pte_offset): Removed.
+	(pte_offset_map, pte_offset_map_nested): Define as pte_offset_kernel.
+
+	* include/asm-sh/pgalloc.h (pte_alloc_one): Bug fix for clear_page.
+
+	* arch/sh/mm/cache-sh4.c (flush_cache_range): Don't need to check
+	find_vma.
+
+	* arch/sh/mm/cache-sh4.c (flush_cache_range, flush_cache_page,
+	clear_user_page, copy_user_page): Use pte_offset_kernel.
+	* arch/sh/mm/fault.c (__do_page_fault): Likewise.
+
+	* arch/sh/kernel/signal.c (restore_sigcontext): Use tsk.
+
+	* arch/sh/kernel/setup.c (setup_arch): Bug fix for FPU
+	initialization.
+
+	* arch/sh/kernel/ptrace.c (sys_ptrace): Remove unused variable tsk.
+	(do_syscall_trace): Use tsk.
+
+	* arch/sh/kernel/process.c (alloc_task_struct, free_task_struct): 
+	Removed.
+	(copy_thread): Bug fix for thread_info.  Clear TIF_USEDFPU flag.
+	(copy_thread, dump_thread): Don't distingush init_task specially.  
+	(switch_to): Bug fix, use next->thread_info.
+
+	* arch/sh/kernel/entry.S (work_resched, resume_userspace,
+	syscall_exit): Use r8 for current_thread_info.
+	(syscall_exit_work): Bug fix, load do_syscall_trace.
+	(system_call): Don't need to ext.u.  Micro opt. for syscall_nr.
+	(syscall_trace_entry, syscall_badsys): Bug fix for error return
+	value.
+
+2002-03-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/mman.h (PROT_SEM): Added.
+
+	* arch/sh/kernel/signal.c (do_signal): Follow the name change of
+	p_ptr -> parent of the task.
+
+	* include/asm-sh/unistd.h (__NR_futex): Added.
+	* arch/sh/kernel/entry.S (sys_call_table): Added sys_futex.
+	(syscall_exit_work): Move up.  (Near work_pending.)
+	(sys_nfsservctl): Define to sys_ni_syscall, when not NFSD.
+
+	* include/asm-sh/pgalloc.h (check_pgt_cache): New macro.
+
+2002-03-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Update to 2.5.7.
+	* AGAINST-2.5.7: New file.
+	* AGAINST-2.5.6: Removed.
+	* Makefile: Version 2.5.7.
+	* Makefile, arch/sh/Config.help, arch/sh/config.in,
+	drivers/Makefile, drivers/pci/pci.ids, kernel/ptrace.c, mm/memory.c:
+	Include changes from mainline (2.5.7).
+
+2002-03-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgalloc.h (ptep_get_and_clear): Follow the change of
+	type of member i_map_shared.
+	* include/asm-sh/unistd.h (__NR_tkill, __NR_sendfile64): Added.
+	* include/asm-sh/siginfo.h (SI_DETHREAD): Added.
+	* arch/sh/kernel/entry.S (sys_call_table): Added sys_sendfile64.
+
+2002-03-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Update to 2.5.6.
+	* AGAINST-2.5.6: New file.
+	* AGAINST-2.5.5: Removed.
+	* Makefile: Version 2.5.6.
+	* Makefile, drivers/Makefile, drivers/block/rd.c,
+	drivers/char/Config.help, drivers/char/Makefile,
+	drivers/net/8139too.c, drivers/net/Config.help,
+	drivers/net/Config.in, drivers/pci/pci.ids, init/do_mounts.c,
+	mm/memory.c: Include changes from mainline (2.5.6).
+
+2002-03-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pgtable.h (pmd_page_kernel): Renamed from pmd_page.
+	(pmd_page): New macro for user page.
+	(pte_offset_kernel): New macro.
+	(pte_offset_map, pte_offset_map_nested, pte_unmap, pte_unmap_nested): 
+	New macros.
+
+	* arch/sh/mm/ioremap.c (remap_area_pmd): Use pte_alloc_kernel
+	(was: pte_alloc).
+
+2002-03-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/process.c (cpu_idle): Don't call check_pgt_cache.
+
+	* include/asm-sh/pgalloc.h (pmd_populate_kernel): Renemed from
+	pmd_populate.
+	(pmd_populate): New function for U0 page.
+	(do_check_pgt_cache): Removed.
+	(pmd_free_slow, pmd_free_fast): Removed.
+	(pmd_alloc_one_fast): Removed.
+	(pte_free_slow): Renamed to pte_free.  Macro removed.
+	(pte_alloc_one_fast): Removed.
+	(pte_alloc_one_kernel, pte_free_kernel): New function.
+	(pte_alloc_one): Call schedule_timeout and try again.
+
+2002-03-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/entry.S (ret_from_fork): Follow the change of
+	switch_to.  Don't call schedule_tail (it's now SMP only function).
+	Move the label to syscall_exit.
+
+	* include/asm-sh/system.h (switch_to): Change the API (removing
+	last argument).
+
+	* include/asm-sh/page.h (VM_DATA_DEFAULT_FLAGS): Defined.
+
+	* include/asm-sh/bitops.h (sched_find_first_bit): 140-bit
+	implementation.  It's moved to here...
+	* include/asm-sh/mmu_context.h: ... from here. (Removed). 
+
+2002-03-22  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache-sh4.c (flush_icache_user_range): New function.
+	* include/asm-sh/pgtable.h (flush_icache_user_range): Declared.
+
+	* kernel/ptrace.c (access_process_vm): Remove flush_dcache_page
+	as we do flush_icache_user_range here.  (No difference now.)
+
+2002-03-20  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Update to 2.5.5.
+	* AGAINST-2.5.5: New file.
+	* AGAINST-2.5.4: Removed.
+	* Documentation/cachetlb.txt: Include the change.
+	* Makefile: Version 2.5.5.  Merged.
+	* arch/sh/config.in, drivers/Makefile: Sound driver move.
+	* arch/sh/kernel/signal.c: recalc_sigpending API change.
+	* drivers/net/8139too.c, drivers/net/Config.in: Update.
+	* drivers/pci/pci.ids: Update.
+	* include/asm-sh/pgtable.h: New API flush_icache_user_range, 
+	Removed page_address API here (move to linux/mm.h).
+	* include/net/inet_ecn.h: Update. 
+	* kernel/ptrace.c: Use new API flush_icache_user_range. 
+	* mm/memory.c: Update.
+
+2002-03-09  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/mm/cache-sh4.c (flush_cache_range): New auto variable mm.
+
+	* arch/sh/kernel/process.c (get_wchan): Follow the API change of
+	thread_saved_pc.
+
+	* include/asm-sh/thread_info.h (cpu): Added the member, not
+	meaningful though (SuperH doesn't support SMP).
+
+	* include/asm-sh/semaphore.h: Include <linux/wait.h>.
+
+	* include/asm-sh/processor.h (thread_saved_pc): Make it a macro,
+	so that we don't need the implementation of struct task.
+	Fixed, thread is not a pointer.
+
+	* arch/sh/config.in: joystick driver is now under drivers/input.
+
+	* arch/sh/kernel/entry.S (flags, work, syscall_trace): Removed.
+	(k_current): Removed.
+	(work_pending): Use _TIF_NEED_RESCHED.
+	(work_resched): Use GET_THREAD_INFO and _TIF_WORK_MASK.
+	(work_notifysig): Use _TIF_SIGPENDING.
+	(resume_userspace): Use GET_THREAD_INFO and _TIF_WORK_MASK.
+	(system_call): Use GET_THREAD_INFO and _TIF_SYSCALL_TRACE.
+	(system_exit): Use GET_THREAD_INFO and _TIF_ALLWORK_MASK.
+	(system_trace_entry): Use _TIF_SYSCALL_TRACE.
+
+	* include/asm-sh/thread_info.h (_TIF_WORK_MASK, _TIF_ALLWORK_MASK): 
+	Change the value to 8-bit.
+
+2002-03-05  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/fpu.c (save_fpu, ieee_fpe_handler,
+	do_fpu_state_restore): Use set_tsk_thread_flag and
+	clear_tsk_thread_flag.
+
+	* arch/sh/kernel/process.c (print_syscall): Removed.
+
+	* include/asm-sh/processor.h (thread_saved_pc): Follow the change
+	of API (argument type).
+	(THREAD_SIZE): Removed from here (will be in thread_info.h).
+	(alloc_task_struct, free_task_struct, get_task_struct, init_task,
+	init_stack): Removed.
+	(unlazy_fpu, clear_fpu): Use test_tsk_thread_flag and
+	clear_tsk_thread_flag.
+
+	* include/asm-sh/uaccess.h (KERN_ADDR_LIMIT, USER_ADDR_LIMIT): New
+	macros.
+	(KERNEL_DS, USER_DS): Use KERN_ADDR_LIMIT, USER_ADDR_LIMIT.
+	(get_fs, set_fs): New functions using thread flag.
+	(__addr_ok, __range_ok): Use get_fs().seg.
+
+	* include/asm-sh/thread_info.h: New file.
+
+2002-02-28  Paul Mundt  <lethal@chaoticdreams.org>
+
+	* arch/sh/kernel/traps.c (dump_stack): Removed.
+	(show_task): Added.
+	(show_trace_task): Hand off actual stack pointer to show_task()
+	to do a real backtrace.
+
+2002-02-28  M. R. Brown  <mrbrown@0xd6.org>
+
+	* Makefile: Added -sh to EXTRAVERSION.
+
+2002-02-27  Paul Mundt  <lethal@chaoticdreams.org>
+
+	* arch/sh/mm/cache-sh4.c (__flush_icache_page): Added back in.
+	(flush_cache_range): Rewritten entirely.
+	(flush_cache_mm): Only flush caches on a valid mm context.
+
+2002-02-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.5.4.
+	* Makefile: Version 2.5.4
+	* AGAINST-2.5.4: New file.
+	* AGAINST-2.5.3: Removed.
+
+	* arch/sh/kernel/signal.c (setup_frame): Use current_thread_info.
+	(setup_rt_frame): Likewise.
+	* include/asm-sh/uaccess.h (get_fs,set_fs,__addr_ok,__range_ok):
+	Likewise.
+
+	* arch/sh/kernel/setup.c (setup_arch): Use set_thread_flag.
+	* arch/sh/kernel/fpu.c
+	(save_fpu,ieee_fpe_handler,do_fpu_state_restore): Likewise.
+
+	* arch/sh/kernel/ptrace.c (sys_ptrace): Use set_tsk_thread_flag and
+	clear_tsk_thread_flag.
+	(do_syscall_trace): Follow the change of i386.
+
+	* arch/sh/kernel/pci-dma.c (pci_alloc_consistent): Use virt_to_phys
+	instead of virt_to_bus.
+
+	* arch/sh/kernel/init_task.c (init_thread_union): New variable.
+
+	* arch/sh/kernel/entry.S (syscall_call): Rename from syscall_traced.
+
+2002-02-27  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* drivers/char/joystick -> drivers/input/joystick.
+	* include/linux/input.h: Updated to version 1.57.
+
+	* include/asm-sh/siginfo.h (SI_TKILL): Added.
+	* include/asm-sh/scatterlist.h (struct scatterlist): Remove member
+	address.
+	* include/asm-sh/pci.h (pci_map_sg, pci_dma_sync_sg): Follow struct
+	scatterlist interface change.
+
+	* drivers/net/8139too.c: Merged version 0.9.24.
+
+	* drivers/char/sh-sci.c (sci_ioctl TIOCGSERIAL): Set return code.
+
+	* arch/sh/vmlinux.lds.S (.text.lock): Removed.
+	* arch/sh/kernel/signal.c (do_signal): Use sig_exit.
+	* Makefile: Version 2.5.4.  Merged.
+	* arch/sh/kernel/entry.S (sys_tkill): Added.
+	* drivers/char/Makefile: Merged (Removed joystick).
+	* drivers/Makefile (subdir-$(CONFIG_SERIO),
+	subdir-$(CONFIG_GAMEPORT)): Merged.
+
+2002-02-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.5.3.
+	* Makefile: Version 2.5.3
+	* AGAINST-2.5.3: New file.
+	* AGAINST-2.5.3-pre5: Removed.
+
+	* include/asm-sh/bitops.h (__ffs): Implemented.
+
+	* include/asm-sh/mmu_context.h (sched_find_first_bit): Implemented
+	(copied i386 implementation).
+	(sched_find_first_zero_bit): Removed.
+
+	* arch/sh/kernel/ptrace.c (sys_ptrace): Use ptrace_check_attach.
+	Replace PT_TRACESYS ->	PT_SYSCALLTRACE.
+
+	* arch/sh/kernel/entry.S (sys_call_table): Added entries.
+	Remove COMPAT_OLD_SYSCALL_ABI things.
+	Follow up to new member "task_work" in task_struct.
+
+	* include/asm-sh/unistd.h (__NR_security, __NR_gettid,
+	__NR_setxattr, __NR_lsetxattr, __NR_fsetxattr, __NR_getxattr,
+	__NR_lgetxattr, __NR_fgetxattr, __NR_listxattr, __NR_llistxattr,
+	__NR_flistxattr, __NR_removexattr, __NR_lremovexattr,
+	__NR_fremovexattr): Added.
+
+2002-02-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Merge changes in 2.5.3-pre6.
+	* Makefile (Drivers-y): Added drivers/base/base.o.
+	* drivers/Makefile (subdir-y): Added "base".
+	* drivers/char/Config.help (CONFIG_WATCHDOG): Added.
+	* arch/sh/Config.help (CONFIG_PCI_GOBIOS, CONFIG_KCORE_ELF,
+	CONFIG_SH_GENERIC, CONFIG_SH_SOLUTION_ENGINE,
+	CONFIG_SH_7751_SOLUTION_ENGINE, CONFIG_SH_HP620, CONFIG_SH_HP680,
+	CONFIG_SH_HP690, CONFIG_SH_CQREEK, CONFIG_SH_DMIDA, CONFIG_SH_EC3104,
+	CONFIG_SH_DREAMCAST, CONFIG_SH_UNKNOWN): Added.
+
+2002-02-26  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/io_se.c (delay): More delay needed for
+	SolutionEngine SH7709A.
+
+2002-01-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* init/main.c: Removed as it's same (2.5.2-pre10).
+	* include/linux/highmen.h: Removed as it's same (2.5.1).
+
+2002-01-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/Config.help (CONFIG_CPU_SUBTYPE_SH7751,
+	CONFIG_CPU_SUBTYPE_ST40STB1) Added subtypes.
+	(CONFIG_SH_SH2000): Added a machine.
+	(CONFIG_SH_7751_SOLUTION_ENGINE,CONFIG_SH_CQREEK,CONFIG_SH_DMIDA,
+	CONFIG_SH_DREAMCAST,CONFIG_SH_EC3104,CONFIG_SH_GENERIC,
+	CONFIG_SH_HP620,CONFIG_SH_HP680,CONFIG_SH_HP690,
+	CONFIG_SH_OVERDRIVE,CONFIG_SH_SOLUTION_ENGINE,CONFIG_SH_UNKNOWN):
+	Added entries lost in transition to divided Config.help.
+
+	* drivers/net/Config.help (CONFIG_8139TOO_DREAMCAST): Added.
+
+2002-01-25  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.5.3-pre5.
+	* Documentation/Configure.help: Removed.
+	* arch/sh/Config.help: New file.
+	* drivers/cdrom/Config.help: New file.
+	* drivers/char/Config.help: New file.
+	* drivers/char/joystick/Config.help: New file.
+	* drivers/mtd/Config.help: New file.
+	* drivers/mtd/maps/Config.help: New file.
+	* drivers/net/Config.help: New file.
+	* drivers/net/8139too.c: Include changes from mainline (2.5.3-pre5).
+	* arch/sh/config.in: Include changes from mainline (2.5.3-pre5).
+	* Makefile: Version 2.5.3-pre5.
+
+	* AGAINST-2.5.3-pre5: New file.
+	* AGAINST-2.5.3-pre4: Removed.
+
+2002-01-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* arch/sh/kernel/process.c: Include <linux/a.out.h>.
+	* arch/sh/kernel/signal.c: <linux/tty.h>.
+	* include/asm-sh/mmu_context.h (sched_find_first_zero_bit): Follow
+	the change of i386 version in 2.5.3-pre4.
+
+2002-01-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.5.3-pre4.
+	* Documentation/Configure.help, Documentation/cachetlb.txt,
+	arch/sh/vmlinux.lds.S, arch/sh/kernel/init_task.c,
+	arch/sh/kernel/process.c, arch/sh/mm/cache-sh4.c,
+	arch/sh/mm/fault.c, arch/sh/vmlinux.lds.S, drivers/net/Config.in,
+	drivers/pcmcia/hd64465_ss.c, drivers/video/hitfb.c,
+	drivers/video/pvr2fb.c, include/asm-sh/ide.h, include/asm-sh/pci.h,
+	include/asm-sh/pgalloc.h, include/asm-sh/pgtable.h,
+	include/linux/highmem.h, init/main.c, mm/memory.c:
+	Include changes from mainline (2.5.3-pre4).
+
+	* AGAINST-2.5.3-pre4: New file.
+	* AGAINST-2.5.2: Removed.
+
+2002-01-24  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* kernel/ptrace.c (access_process_vm): Added flush_dcache_page
+	lost in 2.5.2 merge.
+
+2002-01-19  Paul Mundt  <lethal@chaoticdreams.org>
+
+	* arch/sh/kernel/io_7751se.c: Typo. Rename CHECK_SH_7751_PCIIO to
+	CHECK_SH7751_PCIIO, so 7751se can build with CONFIG_PCI=n.
+
+	* include/net/inet_ecn.h: Addin #ifdef sanity that was lost in 2.4.14.
+	This allows us to build with CONFIG_INET=n.
+
+2002-01-20  NIIBE Yutaka  <gniibe@m17n.org>
+
+	* include/asm-sh/pci.h (PCI_DMA_BUS_IS_PHYS): Added.
+
+2002-01-15  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.5.2.
+	* init/main.c (rest_init): Remove call of init_idle().
+	* drivers/net/8139too.c: Include <linux/crc32.h>, remove
+	ether_crc and ethernet_polynomial.
+	* arch/sh/config.in: source lib/Config.in.
+
+	* AGAINST-2.5.2: New file.
+	* AGAINST-2.5.1: Removed.
+
+2002-01-08  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.5.2-pre10.
+	* Makefile, Documentation/Configure.help, arch/sh/kernel/process.c,
+	arch/sh/kernel/setup.c, drivers/block/rd.c, drivers/char/sh-sci.c,
+	drivers/char/shwdt.c, init/do_mounts.c, init/main.c, kernel/ptrace.c,
+	mm/memory.c: Include changes from mainline (2.5.2-pre10).
+
+	* drivers/cdrom/gdrom.c (DEVICE_NR): MINOR -> minor.
+	(gdrom_init): MKDEV -> mk_kdev.
+	* arch/sh/mm/fault.c (do_page_fault): Use yield.
+
+	* include/asm-sh/mmu_context.h (sched_find_first_zero_bit):
+	Implemented.  (Just copied from x86 implementation.)
+
+	* arch/sh/kernel/setup.c (sh_console_device): Returns /dev/null.
+
+	* arch/sh/kernel/irq.c: Include <linux/mm.h>.
+	* arch/sh/kernel/process.c: Include <linux/mm.h>.
+	(cpu_idle): Don't call init_idle here.  Remove setting of ->nice.
+
+2002-01-05  NIIBE Yutaka  <gniibe@m17n.org>
+
+	Updated to 2.5.1.
+	* Makefile, arch/sh/kernel/irq.c, drivers/block/rd.c,
+	drivers/net/8139too.c, include/linux/highmem.h, init/main.c,
+	mm/memory.c: Include changes from mainline (2.5.1).
+
+	* init/do_mounts.c: New file from mainline with changes for GD-ROM.
+
+	* AGAINST-2.5.1: New file.
+	* AGAINST-2.5.0: Removed.
+
+	* include/asm-sh/scatterlist.h: Followed x86 version.
+
+Local Variables:
+mode: change-log
+left-margin: 8
+fill-column: 76
+version-control: never
+End:
diff -ruN linux-2.6.17-vanilla/ChangeLog-2003 linux-2.6.17/ChangeLog-2003
--- linux-2.6.17-vanilla/ChangeLog-2003	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/ChangeLog-2003	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,1409 @@
+2003-12-18  Paul Mundt  <lethal@linux-sh.org>
+
+	* mm/mmap.c, Makefile: Merge 2.6.0.
+
+2003-11-28  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* include/asm-sh/ptrace.h (struct pt_regs): Remove expevt field.
+	* arch/sh/kernel/ptrace.c (get_stack_long): Count EXPEVT slot and
+	DSP case.
+	(put_stack_long): Likewise.
+	* arch/sh/kernel/process.c (dump_task_regs): Likewise.
+	(copy_thread): Likewise.
+
+2003-11-28  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* include/asm-sh/kgdb.h (kgdb_flush_icache_range): Define.
+	* arch/sh/kernel/kgdb_stub.c (get_step_address): Use it.
+	(do_single_step, undo_single_step, write_mem_msg): Likewise.
+	* include/asm-sh/processor.h (struct thread_struct): Add
+	ubc_pc field.
+	* arch/sh/kernel/process.c (ubc_usercnt): New variable.
+	(exit_thread): Clear ubc_pc if required.
+	(copy_thread): Initialize ubc_pc.
+	(ubc_set_tracing): New.
+	(__switch_to): Call ubc_set_tracing if needed.
+	(break_point_trap): Clear ubc_pc.
+	* arch/sh/kernel/ptrace.c (compute_next_pc): Remove.
+	(ubc_set_tracing): Likewise.
+	(sys_ptrace) [PTRACE_SINGLESTEP]: Only set ubc_pc here.
+
+2003-11-26  Paul Mundt  <lethal@linux-sh.org>
+
+	* Makefile: Merge 2.6.0-test11.
+
+2003-11-25  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* include/asm-sh/ptrace.h (struct pt_regs): Add expevt field.
+
+2003-11-23  Paul Mundt  <lethal@linux-sh.org>
+
+	* Makefile, drivers/ide/Kconfig, drivers/ide/pci/alim15x3.c,
+	drivers/net/8139too.c, include/linux/pci_ids.h, mm/memory.c:
+	Merge 2.6.0-test10.
+
+2003-11-18  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/entry.S (tlb_miss_load, tlb_miss_store,
+	initial_page_write, tlb_protection_violation_load,
+	tlb_protection_violation_store, address_error_load,
+	address_error_store, system_call): Make these global, so we can
+	reference them externally for the exception handling table.
+	(none): Renamed to exception_none.
+	(error): Renamed to exception_error.
+	(exception_handling_table): Removed. Now defined per-processor
+	family.
+
+	* arch/sh/kernel/cpu/sh3/Makefile: Add ex.o rule.
+	* arch/sh/kernel/cpu/sh3/ex.S: SH-3 exception handling table.
+
+	* arch/sh/kernel/cpu/sh4/Makefile: Add ex.o rule.
+	* arch/sh/kernel/cpu/sh4/ex.S: SH-4 exception handling table.
+
+2003-11-17  PAul van Gool <pvangool@mimotech.com>
+
+	* arch/sh/configs/defconfig-se7751: Changed default config for
+	SolutionEngine 7751(R) boards so default Linux 2.6.0-test9 builds
+	run on those boards.
+
+2003-11-14  Richard Curnow  <richard.curnow@superh.com>
+
+	* arch/sh/kernel/traps.c (trap_init): If there's no FPU (or it's
+	disabled) on the SH-4, treat the FPUDIS and SLOTFPUDIS exceptions
+	as reserved.
+
+2003-11-11  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* include/asm-sh/cpu-sh2/sigcontext.h: New file.
+	* include/asm-sh/cpu-sh3/sigcontext.h: Likewise.
+	* include/asm-sh/cpu-sh4/sigcontext.h: Likewise.
+	* include/asm-sh/sigcontext.h: Remove the definition of
+	sigcontext struct and include cpu specific sigcontext.h.
+
+2003-11-10  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/cpu/sh4/sq.c (__sq_remap, sq_unmap): Build fixes
+	for MMUless.
+
+2003-10-31  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/mm/init.c (paging_init): Clear the size of normal zone
+	if all pages are in dma zone.
+
+2003-10-29  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/entry.S (CLI): Added. Consolidate CLI.
+	(resume_kernel, preempt_stop): Added. CONFIG_PREEMPT works again.
+	(ret_from_exception): Move above ret_from_irq and call preempt_stop().
+
+	* TODO: Preemption works now, take it off the TODO list..
+
+2003-10-29  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* include/asm-sh/ptrace.h (REG_FPREG0, REG_FPREG15, REG_XFREG0,
+	REG_FPSCR, REG_FPUL): Change so to match user.h struct.
+
+2003-10-25  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/char/keyboard.c, drivers/char/Makefile, Makefile,
+	drivers/char/tty_io.c, mm/memory.c, mm/mmap.c: Merge 2.6.0-test9.
+
+	* arch/sh/mm/Makefile: Don't build regular copy/clear_page.S when
+	we don't have an MMU.
+	* arch/sh/mm/pg-nommu.c: New file. clear_page()/copy_page() without
+	an MMU.
+
+	* include/asm-sh/page.h: Wrap clear_user_page()/copy_user_page()
+	to clear_page()/copy_page() when building for !CONFIG_MMU.
+
+2003-10-18  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Add CONFIG_MAPLE back in.
+
+	* drivers/maple/Makefile: Fix for 2.6.
+	* drivers/maple/maple.c (maple_freeq): Removed. This is only called
+	once, and kfree() does all of this for us already..
+	(kmapled_thread): Drop the BKL, fixup damonize() / tsk->comm for 2.6,
+	and finally, allow for SIGKILL from userspace.
+
+2003-10-18  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/kernel/entry.S (sys_call_table): Reserve an entry.
+	* include/asm-sh/unistd.h (__NR_vserver): Define.
+	(NR_syscalls): Update.
+	* arch/sh/kernel/irq.c (disable_irq): Call synchronize_irq only
+	if the action is not NULL.
+	(enable_irq): Drop IRQ_INPROGRESS bit from status if depth is 1.
+	* arch/sh/kernel/traps.c (show_stack): Use kstack_end.
+
+2003-10-17  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/char/tty_io.c, drivers/net/8139too.c, Makefile:
+	Merge 2.6.0-test8.
+
+	* net/sunrpc/clnt.c: Deleted, merged into mainline..
+
+2003-10-14  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/entry.S, arch/sh/kernel/sh_ksyms.c,
+	arch/sh/kernel/cpu/sh4/sq.c: MMUless cleanups.
+
+	* include/asm-sh/flat.h: New file (needed for binfmt_flat).
+
+2003-10-13  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/boards/dreamcast/setup.c, arch/sh/kernel/irq.c,
+	arch/sh/kernel/process.c, arch/sh/kernel/setup.c,
+	arch/sh/kernel/signal.c, arch/sh/kernel/sys_sh.c,
+	drivers/char/sh-sci.c, include/asm-sh/ipc.h, include/asm-sh/irq.h,
+	include/asm-sh/uaccess.h, include/asm-sh/unistd.h: Random cleanup
+	of bugs encountered by sparse (mostly __user annotations).
+
+2003-10-12  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/entry.S (exception_handling_table): Label exception
+	codes, thoroughly. Add TMU3 and TMU4 vectors for 7751, and also add
+	7760 vectors.
+
+	* drivers/char/sh-sci.[ch]: Add 7760 support.
+
+	* arch/sh/Kconfig, arch/sh/Makefile, arch/sh/tools/mach-types: Add
+	CONFIG_SH_7751_SYSTEMH rules.
+
+	* arch/sh/boards/systemh/Makefile, arch/sh/boards/systemh/io.c,
+	arch/sh/boards/systemh/irq.c, arch/sh/boards/systemh/setup.c,
+	include/asm-sh/systemh/7751systemh.h, include/asm-sh/systemh/io.h:
+	Add SystemH 7751R support (ported from MPC Data's 2.4.18 tree).
+
+	* arch/sh/configs/defconfig-systemh: Provide a rough defconfig.
+
+2003-10-10  Paul van Gool  <pvangool@mimotech.com>
+
+	* arch/sh/boards/se/7751/pci.c: Replaced compile-time check
+	'PCIBIOS_MIN_MEM != SH7751_PCI_MEMORY_BASE' with a runtime
+	check (BUG_ON()).
+
+2003-10-09  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/drivers/dma/dma-pvr2.c (pvr2_get_dma_residue): Added.
+	(pvr2_dma_interrupt): Set xfer_complete when the completion
+	interrupt fires.
+
+	* drivers/video/pvr2fb.c (pvr2fb_open, pvr2fb_release): Removed.
+	(pvr2fb_dc_init): Do request_dma() for pvr2 channel here instead.
+	(pvr2fb_dc_exit): Likewise for free_dma().
+
+	* arch/sh/kernel/time.c (sched_clock): Cloned from v850.
+
+	* net/sunrpc/clnt.c (call_verify): Compile fix. Make all users of
+	task->tk_pid use dprintk().
+
+	* Makefile, Documentation/cachetlb.txt, arch/sh/kernel/init_task.c,
+	arch/sh/kernel/irq.c, arch/sh/kernel/process.c, arch/sh/kernel/time.c,
+	arch/sh/kernel/traps.c, arch/sh/mm/init.c, arch/sh/mm/ioremap.c,
+	drivers/char/generic_serial.c, drivers/char/tty_io.c,
+	drivers/ide/Kconfig, drivers/serial/Kconfig, drivers/video/Kconfig,
+	fs/nfs/inode.c, include/asm-sh/cacheflush.h, include/asm-sh/mmzone.h,
+	include/asm-sh/pgtable.h, include/asm-sh/bigsur/serial.h,
+	include/asm-sh/ec3104/serial.h, include/linux/mm.h, mm/memory.c,
+	mm/mmap.c: Merge 2.6.0-test7.
+
+	* Makefile, arch/sh/Kconfig, arch/sh/kernel/setup.c,
+	drivers/char/Makefile, drivers/char/keyboard.c, drivers/char/sysrq.c,
+	drivers/char/tty_io.c, drivers/ide/Kconfig, drivers/serial/Kconfig,
+	drivers/serial/Makefile, drivers/video/Kconfig, include/asm-sh/mman.h,
+	include/asm-sh/posix_types.h, include/asm-sh/processor.h,
+	include/asm-sh/signal.h include/linux/input.h,
+	include/linux/miscdevice.h, include/linux/mm.h, mm/memory.c,
+	mm/mmap.c: Merge 2.6.0-test6.
+
+2003-10-08  Paul van Gool  <pvangool@mimotech.com>
+
+	* arch/sh/boards/se/7751/pci.c: Since PCIBIOS_MIN_MEM is no
+	longer a hardcoded define, we can no longer use it with the
+	preprocessor.
+
+	* arch/sh/drivers/pci/pci-sh7751.c: Include linux/delay.h to get
+	definition of mdelay.
+
+2003-10-08  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/video/pvr2fb.c (pvr2fb_open, pvr2fb_release, pvr2fb_write):
+	Added zero-copy DMA when CONFIG_SH_DMA is set.
+	(pvr2fb_common_init): Map through the store queues when we have
+	CONFIG_SH_STORE_QUEUES set.
+
+2003-10-01  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+            Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/kernel/signal.c (OR_R0_R0): Define.
+	(struct sigframe): Extend retcode to hold 8 instructions.
+	(struct rt_sigframe): Likewise.
+	(setup_frame): Put 5 "or r0,r0" instructions to avoid an SH-4
+	core bug.  Flush more cache line if needed.
+	(setup_rt_frame): Likewise.
+
+2003-09-30  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/drivers/dma/Kconfig: Add a couple of options, clean up
+	channel number selection for both on-chip and off-chip channels.
+
+	* arch/sh/drivers/dma/dma-sh.c: Relatively large batch of changes.
+	Dropped SAR/DAR/CHCR/DMATCR[] usage and went to a direct mapping of
+	the registers directly. We now support all 8 channels of the 7751R.
+
+	* arch/sh/drivers/dma/dma-sh.h: Define MAX_DMAC_CHANNELS (wrap to
+	CONFIG_NR_ONCHIP_DMA_CHANNELS).
+
+	* arch/sh/entry.S (interrupt_table): Add hooks for DMTE4-7 on the
+	7751R.
+
+	* include/asm-sh/dma.h: Cleanup MAX_DMA_CHANNELS definition based
+	off of config options.
+
+	* include/asm-sh/irq.h: Add DMTE4-7 definitions.
+
+	* include/asm-sh/cpu-sh3/dma.h: Kill off old definitions. Define
+	SH_DMAC_BASE.
+	* include/asm-sh/cpu-sh4/dma.h: Same here.
+
+2003-09-23  Sean McGoogan  <Sean.McGoogan@superh.com>
+
+	* arch/sh/kernel/entry.S: preserve EXPEVT across nested interrupts.
+
+	* arch/sh/kernel/cpu/sh4/fpu.c: Ensure that FPSCR.PR == FPSCR.SZ == 1
+	never occurs.
+
+2003-09-22  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/drivers/pci/pci-sh7751.c: Fixup pci-sh7751.h path.
+
+	* arch/sh/boards/snapgear/io.c: Same here.
+
+	* arch/sh/mm/cache-sh4.c (detect_cpu_and_cache_system): Add run-time
+	probing for the SH7760 and the SH4-202. Force EMODE on subtypes that
+	have it available.
+
+	* include/asm-sh/processor.h: Add CPU_SH7760 and CPU_SH4_202
+	definitions.
+
+2003-09-22  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/kernel/signal.c (MOVW, TRAP16): Define.
+	(struct sigframe): Change retcode so to hold 3 words.
+	(struct rt_sigframe): Likewise.  Remove pinfo and puc members.
+	(setup_frame): Use mov.w 1f,r3; trap #0x10; 1: .word N sequence
+	in trampoline.
+	(setup_rt_frame): Likewise.  Don't set pinfo and puc of frame.
+
+2003-09-21  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Add a sane default for SH7751 PCLK value.
+
+	* arch/sh/boards/bigsur/Makefile: Remove pci.o
+	* arch/sh/boards/bigsur/pci.c: Ported for new SH7751 PCI changes, and
+	moved ..
+	* arch/sh/drivers/pci/ops-bigsur.c: here.
+
+	* arch/sh/boards/snapgear/Makefile, arch/sh/boards/snapgear/pci.c,
+	arch/sh/drivers/pci/ops-snapgear.c: Same changes as for BigSur.
+
+	* arch/sh/drivers/pci/Makefile: Add bigsur/snapgear ops.
+
+	* arch/sh/mm/init.c: Include linux/pagemap.h, shut up compiler.
+
+	* include/asm-sh/pci-sh7751.h: Added changes for new interface, and
+	moved ..
+	* arch/sh/drivers/pci/pci-sh7751.h: here.
+
+	* arch/sh/drivers/pci/pci-sh7751.c: Fixup pci_probe definition, we
+	don't deal with anything other then conf1 access, so drop the unused
+	flags.
+	(__area_sdram_check): Added. Responsible for BCR1/BCR2 validation
+	for a given area.
+	(sh7751_pcic_init): Added. Do general purpose initialization here.
+	window0/window1 values are passed in in the form of an address map
+	structure. Any boards doing this type of general initialization
+	should be using this code instead (so far BigSur and SnapGear boards,
+	though this will also include the SystemH 7751R).
+	(pcibios_setup): Get rid of conf1 and rom args, as they aren't used.
+	
+	* include/asm-sh/pci.h: Get rid of hardcoded PCIBIOS_MIN_{IO,MEM}
+	definitions. Wrap these to their respective resources in
+	board_pci_channels instead.
+
+	* drivers/serial/sh-sci.c: Updates for new SH-SCI driver.
+
+2003-09-18  David McCullough <davidm@snapgear.com>
+
+	* arch/sh/boards/snapgear/pci/pci.c: fixup the memory and IO regions
+	  to get PCI working.
+
+2003-09-17  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/drivers/pci/pci-sh7751.c (sh7751_pci_write): Fixup error
+	path where interrupts weren't getting reenabled.
+
+2003-09-16  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/drivers/dma/Makefile: Add dma-isa.o and dma-g2.o.
+	* arch/sh/drivers/dma/dma-isa.c: New file (provides wrapper for old
+	ISA DMA API to new DMA API).
+
+	* arch/sh/drivers/dma/dma-g2.c: New file (adds preliminary support
+	for G2 DMA -- currently being tested for SPU DMA, though there
+	are still some issues with the interrupt not firing correctly).
+
+	* include/asm-sh/dma.h (claim_dma_lock, release_dma_lock): Moved to
+	dma-isa.c.
+
+2003-09-08  Paul Mundt  <lethal@linux-sh.org>
+
+	* Makefile, arch/sh/Kconfig, arch/sh/boards/dmida/mach.c,
+	arch/sh/boards/dreamcast/irq.c, arch/sh/boards/ec3104/irq.c,
+	arch/sh/boards/harp/mach.c, arch/sh/boards/hp6xx/hp620/mach.c,
+	arch/sh/boards/hp6xx/hp680/mach.c, arch/sh/boards/hp6xx/hp690/mach.c,
+	arch/sh/boards/overdrive/mach.c, arch/sh/boards/saturn/irq.c,
+	arch/sh/boards/unknown/mach.c, arch/sh/kernel/cpufreq.c,
+	drivers/Makefile, drivers/char/generic_serial.c,
+	drivers/char/tty_io.c, drivers/ide/Kconfig, drivers/video/Kconfig,
+	drivers/ide/pci/alim15x3.c, drivers/net/8139too.c,
+	drivers/pci/pci.ids, drivers/serial/Kconfig, drivers/serial/Makefile,
+	drivers/video/Makefile, drivers/video/fbmem.c, fs/nfs/inode.c,
+	include/asm-sh/semaphore.h, include/linux/miscdevice.h,
+	include/linux/mm.h, include/linux/pci_ids.h, mm/memory.c,
+	mm/mmap.c: Merge 2.6.0-test5.
+
+2003-09-06  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Reorder CPU family / subtype selection.
+
+2003-09-06  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/lib/div64-generic.c (__div64_32): Bug fix.
+
+2003-09-03  TAKANO Nobuyuki  <n_takano@sas-tokyo.co.jp>
+	    Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* drivers/char/sh-sci.c (sci_init_pins_scif): Mask correct
+	bits of SCPCR.
+	(sci_set_real_termios): Don't change TTY_HW_COOK_IN and
+	TTY_HW_COOK_OUT flags.
+	* drivers/char/sh-sci.h (O_OTHER, I_OTHER): Remove.
+
+2003-09-02  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/kernel/signal.c (setup_frame): Set additional arguments
+	for the signal handler correctly.
+	(setup_rt_frame): Likewise.
+
+2003-09-01  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Add CONFIG_SH_DSP.
+	
+	* arch/sh/kernel/entry.S: Save and restore DSP registers when
+	CONFIG_SH_DSP is set.
+	* arch/sh/kernel/head.S: Do initial callin to sh_cpu_init instead
+	of sh_cache_init.
+
+	* arch/sh/kernel/ptrace.c: Add PTRACE_SETDSPREGS/PTRACE_GETDSPREGS
+	cases to copyin/out dsp regs.
+
+	* arch/sh/kernel/setup.c (setup_arch): Remove UBC and FPU setup,
+	this is done at sh_cpu_init() time instead.
+
+	* arch/sh/kernel/traps.c (is_dsp_init): Added.
+	(do_reserved_inst, do_illegal_slot_inst): Check for DSP instruction
+	when CONFIG_SH_DSP is set.
+
+	* arch/sh/kernel/cpu/Makefile: Add init.o.
+	* arch/sh/kernel/cpu/init.c: New file. Do initial CPU init here.
+	Add DSP init code.
+
+	* arch/sh/mm/init.c (sh_cache_init): Moved to arch/sh/kernel/cpu/init.c
+
+	* include/asm-sh/processor.h: Add CPU_HAS_DSP flag.
+	* include/asm-sh/ptrace.h: Add DSP regs.
+
+	* arch/sh/kernel/irq.c (probe_irq_on): Convert the last remaining
+	synchronize_irq() to barrier().
+
+	* arch/sh/kernel/smp.c: Convert cpu_online_map and cpu_possible_map
+	to cpumask_t. 
+	(__cpu_up): Use copy_process() instead of do_fork() to manually fork
+	idle task on cpu.
+	(start_secondary): Setup VBR properly for secondary cpu, and also
+	increment cpus_booted.
+	(stop_this_cpu): cpu_relax() in busy loop.
+
+	* include/asm-sh/spinlock.h: Add a RW_LOCK_BIAS definition, update
+	RW_LOCK_UNLOCKED to initialize the counter with the bias.
+	(rwlock_is_locked): Use atomic_read() to look at counter value.
+	(_raw_write_trylock): New function. Mostly cloned from x86_64.
+
+	* include/asm-sh/smp.h (cpu_online, cpu_possible): Use cpu_isset()
+	to work with new cpumask_t types for the maps.
+	(num_online_cpus): Removed.
+
+2003-08-31  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/kernel/entry.S (sys_call_table): Add fadvise64_64 syscall.
+	* arch/sh/kernel/sys_sh.c (sys_fadvise64_64_wrapper): New.
+	* include/asm-sh/unistd.h: Add fadvise64_64 syscall.
+
+2003-08-27  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/net/Kconfig: Kill off CONFIG_8139TOO_DREAMCAST.
+	* drivers/net/8139too.c: Likewise. Get rid of SEGABBA references,
+	use RTL8139 instead. Also use USE_BUF16K for rx ring buffer size
+	selection.
+
+2003-08-25  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/drivers/dma/Makefile, arch/sh/drivers/dma/dma-api.c,
+	arch/sh/drivers/dma/Kconfig, arch/sh/drivers/dma/dma-pvr2.c,
+	arch/sh/drivers/dma/dma-sh.[ch]: Added new DMA subsystem with
+	drivers for the SH DMAC and the DC PVR2.
+
+	* arch/sh/kernel/cpu/Makefile: Remove dma.c.
+	* arch/sh/kernel/cpu/dma.c: Deleted.
+
+	* arch/sh/mm/Makefile: Add rule for pg-dma.c.
+	* arch/sh/mm/pg-dma.c: Added. This implemented optimized versions
+	of copy_page() and clear_page() using the SH DMAC (selectable with
+	CONFIG_DMA_PAGE_OPS).
+	* arch/sh/mm/clear_page.S (clear_page): Renamed to clear_page_slow.
+	* arch/sh/mm/copy_page.S (copy_page): Renamed to copy_page_slow.
+	* arch/sh/mm/init.c: Add copy_page/clear_page function pointers,
+	assign these to the _slow routines at startup, override them later
+	when something better (ie, DMA) comes along.
+	
+	* include/asm-sh/dma.h: Rewritten entirely.
+	* include/asm-sh/page.h: Fixup copy/clear_page definitions.
+	* include/asm-sh/processor.h (cpu_relax): Get rid of the barrier()
+	wrapper, use sleep instead, this tends to be more friendly when
+	it comes to power consumption, and gives us something meaningful
+	to do in a busy loop.
+
+2003-08-23  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/pci/pci.c (pcibios_enable_device): Use pci_name() instead
+	of dev->dev.name/slot_name.
+	(pcibios_set_master): Likewise.
+	
+	* arch/sh/vmlinux.lds.S: Moved ..
+	* arch/sh/kernel/vmlinux.lds.S: here.
+
+	* arch/sh/boot/compressed/Makefile: Fixup vmlinux.lds.s path.
+
+	* Makefile, arch/sh/kernel/Makefile, drivers/Makefile,
+	drivers/char/keyboard.c, drivers/ide/Kconfig,
+	drivers/ide/pci/alim15x3.c, drivers/mtd/maps/Kconfig,
+	drivers/net/8139too.c, drivers/net/Kconfig,
+	drivers/pcmcia/hd64465_ss.c, fs/nfs/inode.c,
+	include/linux/mm.h, include/linux/pci_ids.h,
+	kernel/timer.c, mm/memory.c: Merge 2.6.0-test4.
+
+2003-08-22  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/Kconfig: Rename BOOT_LINK_ADDR to BOOT_LINK_OFFSET.
+	* arch/sh/boot/compressed/Makefile: Likewise.
+
+2003-08-14  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/Kconfig: Add BOOT_LINK_ADDR. Add '0x' prefix to hex
+	parameters.
+	* arch/sh/Makefile: Remove bzImage target.
+	* arch/sh/boot/Makefile: Likewise.
+	* arch/sh/boot/compressed/Makefile: Likewise. Compute IMAGE_OFFSET
+	with BOOT_LINK_ADDR option.
+	* arch/sh/configs/defconfig-adx: Add '0x' prefix to hex	parameters.
+	* arch/sh/configs/defconfig-cqreek: Likewise.
+	* arch/sh/configs/defconfig-dreamcast: Likewise.
+	* arch/sh/configs/defconfig-se7751: Likewise.
+
+2003-08-11  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/Makefile: Add bzImage support.
+	* arch/sh/boot/Makefile: Likewise.
+	* arch/sh/boot/compressed/Makefile: Likewise.
+	* arch/sh/boot/compressed/head.S: Likewise. Revived.
+
+2003-08-09  Paul Mundt  <lethal@linux-sh.org>
+
+	* Makefile, arch/sh/defconfig, arch/sh/boards/dreamcast/pci.c,
+	arch/sh/boards/mpc1211/pci.c, arch/sh/boards/overdrive/galileo.c,
+	arch/sh/configs/defconfig-adx, arch/sh/configs/defconfig-cqreek,
+	arch/sh/mm/cache-sh2.c, arch/sh/mm/cache-sh3.c,
+	drivers/char/tty_io.c, drivers/char/watchdog/shwdt.c,
+	drivers/ide/Kconfig, drivers/ide/pci/alim15x3.c,
+	drivers/net/8139too.c, drivers/net/Kconfig, drivers/pci/pci.ids,
+	drivers/serial/Kconfig, include/asm-sh/processor.h,
+	include/linux/pci_ids.h, mm/memory.c: Merge 2.6.0-test3.
+
+2003-08-05  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Add CONFIG_PCI_AUTO_UPDATE_RESOURCES to
+	have the PCI auto code update BARs automatically. This is
+	the default for just about everyone, read the help text for
+	more information.
+
+	* arch/sh/kernel/pci.c (pcibios_init): Remove pcibios_fixup().
+	(pcibios_update_resource): Use pci_name() to access dev->slot_name.
+	(pcibios_enable_device): Same here.
+
+	* arch/sh/kernel/pci_auto.c (pciauto_setup_bars): Manually preserve
+	the existing BAR value when trying to figure out the BAR size. Only
+	change the BAR value when CONFIG_PCI_AUTO_UPDATE_RESOURCES is set.
+
+	* arch/sh/boards/dreamcast/pci.c: Rewritten.
+
+	* include/linux/pci_ids.h: Add PCI_DEVICE_ID_SEGA_BBA as well as
+	PCI_VENDOR_ID_SEGA.
+
+2003-08-04  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Makefile: Add arch/sh/pci/.
+
+	* arch/sh/kernel/cpu/sh4/pci-sh7751.c: Moved to arch/sh/pci/.
+	* arch/sh/kernel/cpu/sh4/pci-st40.[ch]: Same here.
+
+2003-08-02  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/cchips/hd6446x/hd6446{1,5}/io.c (hd6446{1,5}_insb,
+	hd6446{1,5}_insw, hd6446{1,5}_insl, hd6446{1,5}_outsb,
+	hd6446{1,5}_outsw, hd6446{1,5}_outsl): Deleted. Use the generic
+	functions.
+	
+	* arch/sh/cchips/hd6446x/hd6446{1,5}/setup.c: Cleanup irq
+	return values for new API.
+
+	* include/asm-sh/hd6446{1,5}/io.h: Remove unused I/O functions.
+
+	* arch/sh/boards/snapgear/io.c (snapgear_insb, snapgear_insw,
+	snapgear_outsb, snapgear_outsw): Deleted. We can use the
+	generic functions here as well.
+
+	* include/asm-sh/snapgear/io.h: Remove unused I/O functions.
+
+	* arch/sh/boards/se/77{0x,51}/io.c (se_readb, se_readw, se_readl,
+	se_writeb, se_writew, se_writel): Deleted. We can use the
+	generic interface for this instead.
+
+	* arch/sh/boards/se/77{0x,51}/mach.c: Remove the aforementioned
+	I/O functions + c99 initializers.
+
+	* include/asm-sh/se{,7751}/io.h: Remove unused I/O functions.
+
+	* arch/sh/kernel/cpu/sh4/pci-sh7751.c
+	(sh7751_pci_read, sh7751_pci_write): Do general cleanup,
+	simplify read and write operations in general. Fixes a
+	bug with getting bogus data back on my 7751R board.
+
+2003-08-01  Paul van Gool  <pvangool@mimotech.com>
+
+	* arch/sh/boards/se/7751/pci.c: Should allow for more than
+	1 PCI device. Changed last devfn from 1 to 0xff.
+
+2003-07-31  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Makefile, arch/sh/boards/snapgear/Makefile,
+	arch/sh/boards/snapgear/io.c, arch/sh/boards/snapgear/pci.c
+	arch/sh/boards/snapgear/rtc.c, arch/sh/boards/snapgear/setup.c,
+	arch/sh/tools/mach-types, drivers/net/8139too.c,
+	include/asm-sh/irq.h, include/asm-sh/mc146818rtc.h,
+	include/asm-sh/pci.h, include/asm-sh/rtc.h,
+	include/asm-sh/snapgear/io.h: Add SecureEdge5410 support.
+
+	* arch/sh/kernel/cpu/sh4/pci-sh7751.c: Ported to new PCI Auto
+	API.
+
+2003-07-31  Paul van Gool  <pvangool@mimotech.com>
+
+	* arch/sh/boards/se/7751/pci.c: Added empty pcibios_fixup
+	function. Added pci_channel definition for SE7751(R) board.
+
+2003-07-29  Paul Mundt  <lethal@linux-sh.org>
+
+	* include/asm-sh/bigsur/io.h, include/asm-sh/mpc1211/io.h,
+	include/asm-sh/hd64465/io.h, include/asm-sh/overdrive/io.h,
+	include/asm-sh/hd64461/io.h, include/asm-sh/adx/io.h,
+	include/asm-sh/ec3104/io.h, include/asm-sh/cat68701/io.h,
+	include/asm-sh/dreamcast/io.h, include/asm-sh/se/io.h,
+	include/asm-sh/saturn/io.h, include/asm-sh/sh2000/io.h,
+	include/asm-sh/se7751/io.h: Kill off I/O definitions and
+	general __WANT_IO_DEF mess, we grab these implicitly through
+	the machvec now.
+
+	* include/asm-sh/io.h: Bit of a policy change, we now force
+	_everything_ through the machine vector. Each board already
+	provides its own definitions for what it wants, there's no
+	reason to have to repeat this in every board's io.h.
+
+	(__set_io_port_base): Added. We use this for setting a
+	common port base that can then be used by the generic
+	isa_port2addr implementation.
+
+	* arch/sh/kernel/setup.c (sh_mv_setup): Wrap the mv_io_base
+	assignment to use __set_io_port_base().
+
+	* arch/sh/boards/dreamcast/Makefile: Remove io.c
+	* arch/sh/boards/dreamcast/setup.c: Get rid of dreamcast
+	specific isa_port2addr implementation, we use the generic
+	one now.
+
+	(platform_setup): Init the port base with __set_io_port_base().
+
+	* arch/sh/boards/dreamcast/io.c: Deleted.
+
+	* include/asm-sh/dreamcast/io.h: Deleted.
+
+2003-07-28  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/char/watchdog/shwdt.c (sh_wdt_open): Get rid of
+	MOD_INC_USE_COUNT. Use __module_get() for module refcounting
+	instead.
+
+	* arch/sh/kernel/setup.c (setup_arch): Get rid of machvec
+	setup code.
+	(sh_mv_setup): Added. Move setup code here. Also walk the
+	sh_mv and manually load up generic routines for anything
+	that board-specific code hasn't filled in.
+
+	* arch/sh/boards/dreamcast/Makefile: Remove mach.c
+	* arch/sh/boards/dreamcast/mach.c: Deleted.
+	* arch/sh/boards/dreamcast/setup.c: Move mv definition here,
+	also clean it up for the new changes.
+
+	* arch/sh/boards/saturn/Makefile: Remove mach.c
+	* arch/sh/boards/saturn/mach.c: Deleted.
+	* arch/sh/boards/saturn/setup.c: Follow the dreamcast change
+	here as well.
+
+	* arch/sh/boards/mpc1211/Makefile: Remove mach.c
+	* arch/sh/boards/mpc1211/rtc.c (mpc1211_time_init): Added.
+	Wrap rtc definitions to rtc_{get,set}_time, and init them
+	properly.
+	* arch/sh/boards/mpc1211/setup.c: Add rtc timer init code,
+	and follow the other boards for mv changes.
+	* arch/sh/boards/mpc1211/mach.c: Deleted.
+
+	* arch/sh/boards/cqreek/Makefile, arch/sh/boards/cqreek/mach.c,
+	arch/sh/boards/cqreek/setup.c: Follow mv changes.
+
+	* arch/sh/boards/sh2000/Makefile, arch/sh/boards/sh2000/mach.c,
+	arch/sh/boards/sh2000/setup.c: Follow mv changes.
+
+	* arch/sh/boards/hp6xx/hp680/mach.c: Remove generic_ and
+	sh_rtc_xxx references, since this is handled for us now.
+	* arch/sh/boards/hp6xx/hp690/mach.c: Same here.
+
+	* arch/sh/boards/overdrive/mach.c: And here.
+
+	... and the same for the rest of the boards, so we won't bother
+	listing them all here again. Look at linuxsh-cvs for this date
+	if you really care.
+
+	* include/asm-sh/machvec.h: Remove several unused functions.
+
+2003-07-28  Paul van Gool  <pvangool@mimotech.com>
+
+	* arch/sh/configs/defconfig-se7751: Added new 2.6.0-test2 
+	config settings:
+
+	CONFIG_IOSCHED_AS
+	CONFIG_IOSCHED_DEADLINE
+	CONFIG_LBD
+
+2003-07-27  Paul van Gool  <pvangool@mimotech.com>
+
+	* include/asm-sh/pci-sh7751.h: Re-added in order to add
+	SH7751R_DEVICE_ID definition.
+
+	* arch/sh/kernel/cpu/sh4/pci-sh7751.c: Initialized mask
+	variable to prevent compiler from complaining.
+
+	Changed PCIDBG statement to use new variable name instead
+	of old Linux 2.4 one.
+
+	Changed PCI hardware check to also check for 7751R hardware
+	and not just 7751.
+
+2003-07-27  Paul Mundt  <lethal@linux-sh.org>
+
+	* Makefile, arch/sh/Makefile, arch/sh/mm/init.c,
+	drivers/ide/Kconfig, drivers/net/8139too.c, drivers/net/Kconfig,
+	drivers/pci/pci.ids, drivers/serial/Kconfig,
+	drivers/serial/Makefile, drivers/video/Makefile, fs/nfs/inode.c,
+	include/linux/pci_ids.h, kernel/time.c: Merge 2.6.0-test2.
+
+	* arch/sh/kernel/cpu/sh4/pci-sh7751.c: Merge changes from
+	mainline with a few fixes.
+
+	 (pcibios_allocate_resources): Deprecate pci_for_each_dev(),
+	 use pci_find_device() instead.
+	 (pcibios_assign_resources): Same here.
+
+	* arch/sh/kernel/setup.c: Use asm/sections.h.
+	* arch/sh/kernel/traps.c: Same here.
+
+	* arch/sh/configs/defconfig-dreamcast: Update defconfig.
+
+	* include/asm-sh/local.h: New file.
+	* include/asm-sh/sections.h: New file.
+
+2003-07-27  SUGIOKA Toshinobu <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/ptrace.c: Fix single step.
+
+2003-07-26  Paul van Gool  <paul.vangool@rinconnetworks.com>
+
+	* arch/sh/Makefile: Fix for defconfig-% rules when there's no
+	prior .config.
+	
+	* arch/sh/configs/defconfig-se7751: Add SE7751 defconfig.
+
+2003-07-25  Paul Mundt  <lethal@linux-sh.org>
+
+	* Documentation/sh/new-machine.txt: Added documentation on how to
+	work with the new tree.
+
+2003-07-22  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Add KGDB options back in.
+
+	* arch/sh/configs/defconfig-dreamcast: Update DC defconfig.
+
+	* arch/sh/Makefile: Add support for building a defconfig out of
+	arch/sh/configs/. Also add a 'make help' text for SH. And finally,
+	also rename cpu- to cflags- to make the KGDB options look a bit
+	saner.
+
+	Builds for provided defconfigs can now be launched in the format
+	of: 'make defconfig-$(boardname)' followed by vmlinux/zImage/etc.
+
+2003-07-21  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/cpu/sh4/Makefile: Remove irq_intc2.o for generic
+	7751 builds, leave this as ST40 specific for now.
+
+	* arch/sh/Kconfig: Get rid of CONFIG_PCI_BIOS cruft.
+
+	* arch/sh/kernel/cpu/sh4/pci-sh7751.c: Same here (forward port of
+	changes from David Woodhouse against 2.4 branch).
+
+	* arch/sh/Makefile: Link in arch/sh/lib/ before any of the other
+	libs-y directories.
+
+	* arch/sh/lib/Makefile: Add div64-generic.o
+	* arch/sh/lib/div64-generic.c: New file. Provide a compliant
+	__div64_32 interface that wraps to our __xdiv64_32.
+
+	* include/asm-sh/div64.h (do_div): Removed. Wrap to the generic
+	interface at asm-generic/div64.h instead.
+
+2003-07-19  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/video/pvr2fb.c: Rewrite. Use the hardware palette, and add
+	support for PCI-based PVR2 boards (such as the neon250 in my case).
+
+2003-07-19  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/kernel/entry.S (sys_call_table): Add new syscalls.
+	* arch/sh/kernel/irq.c (do_IRQ): Use kstat_this_cpu.
+	* include/asm-sh/hardirq.h (irq_cpustat_t): Remove unused members.
+	* include/asm-sh/unistd.h: Add new syscalls.
+
+2003-07-17  Paul Mundt  <lethal@linux-sh.org>
+
+	Merge with 2.5.74 ... 2.6.0-test1.
+
+2003-07-16  Paul Mundt  <lethal@linux-sh.org>
+
+	* include/asm-sh/segment.h: Re-added (some headers unfortunately still
+	seem to require this..).
+	* include/asm-sh/cache.h: Fixup L1_CACHE_BYTES definition (use the shift
+	defined per-cpu family).
+	* include/asm-sh/cpu-sh2/cache.h: Remove L1_CACHE_BYTES definition, and
+	add a L1_CACHE_SHIFT definition instead.
+	* include/asm-sh/cpu-sh3/cache.h: Same here.
+	* include/asm-sh/cpu-sh4/cache.h: and here.
+
+2003-07-15  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/mm/cache-sh4.c: Add a cpu flag for p2 cache restriction
+	for users who need it (7750, 7750S/7750R?) and test that instead
+	of the subtype.
+
+	* include/asm-sh/processor.h: Define CPU_HAS_P2_FLUSH_BUG.
+
+2003-07-14  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/kernel/entry.S (sys_call_table): Add new syscalls.
+	* arch/sh/kernel/irq.c (__report_bad_irq, report_bad_irq): New.
+	(noirqdebug_setup): Likewise.
+	(note_interrupt): Likewise.
+	(do_IRQ): Call note_interrupt if required.
+	* arch/sh/kernel/module.c (module_arch_cleanup): new.
+	* arch/sh/mm/fault.c (do_page_fault): Use in_atomic.  Use
+	VM_FAULT_xxx symbolic constants.  Use fixup_exception.
+	* arch/sh/mm/ioremap.c: Fix so to follow i386 changes.
+	* drivers/char/sh-sci.c (sci_hungup, sci_close): Add again.
+	(sci_real_drive): Add sci_hungup and sci_close.
+	(sci_rx_interrupt): Return IRQ_HANDLED.
+	(sci_tx_interrupt, sci_br_interrupt, sci_br_interrupt): Likewise.
+	(sci_init_drivers): Change return type of handlers.
+	* drivers/net/stnic.c (do_stnic_intr):  Return the result of
+	ei_interrupt.
+	* include/asm-sh/hardirq.h: Remove commented out part.
+	* include/asm-sh/pgalloc.h (pte_alloc_one_kernel): Use
+	__GFP_REPEAT feature.
+	(pte_alloc_one): Likewise.
+	* include/asm-sh/unistd.h: Update for new syscalls.
+
+2003-07-14  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* include/asm-sh/system.h (switch_to): Set LAST properly.
+
+2003-07-06  Dominik Brodowski  <linux@brodo.de>
+	    Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/pcmcia/hd64465_ss.c: Update for new PCMCIA API.
+
+2003-06-29  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig, drivers/serial/Kconfig, drivers/serial/Makefile,
+	drivers/char/keyboard.c, fs/nfs/inode.c, include/linux/highmem.h,
+	include/linux/input.h, include/linux/pci_ids.h, kernel/timer.c,
+	Makefile: Merge 2.5.73.
+
+	* arch/sh/Kconfig, arch/sh/kernel/time.c, drivers/char/keyboard.c,
+	drivers/ide/Kconfig, include/linux/input.h, kernel/sysctl.c,
+	kernel/time.c, kernel/timer.c, Makefile: Merge 2.5.72.
+
+2003-06-15  Paul Mundt  <lethal@linux-sh.org>
+
+	* Makefile, arch/sh/kernel/irq.c, arch/sh/lib/Makefile,
+	drivers/Makefile, drivers/char/Makefile,
+	drivers/char/generic_serial.c, drivers/char/sh-sci.c,
+	drivers/char/tty_io.c, drivers/ide/Kconfig, drivers/mtd/mtdcore.c,
+	drivers/mtd/mtdpart.c, drivers/mtd/chips/cfi_cmdset_0002.c,
+	drivers/mtd/chips/jedec_probe.c, drivers/mtd/maps/Kconfig,
+	drivers/mtd/maps/Makefile, drivers/mtd/maps/solutionengine.c,
+	drivers/net/8139too.c, drivers/net/Kconfig, drivers/pci/pci.ids,
+	drivers/serial/Kconfig, drivers/serial/Makefile,
+	drivers/video/Kconfig, drivers/video/Makefile, include/asm-sh/bug.h,
+	include/asm-sh/pci.h, include/linux/highmem.h,
+	include/linux/pci_ids.h, include/linux/mtd/partitions.h,
+	kernel/sys.c, kernel/sysctl.c, kernel/time.c, kernel/timer.c,
+	mm/memory.c: Merge 2.5.71.
+
+2003-06-13  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/cpu/dma.c: Fix up exports so modules can use dma
+	functions without resulting in undefined symbols.
+
+2003-06-01  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/irq.c (handle_IRQ_event): Check handler return value,
+	also report if no one cared about the interrupt.
+
+2003-05-27  Paul Mundt  <lethal@linux-sh.org>
+
+	* Makefile, arch/sh/mm/init.c, drivers/Makefile,
+	  drivers/char/keyboard.c, drivers/char/sh-sci.c,
+	  drivers/char/sysrq.c, drivers/char/tty_io.c,
+	  drivers/net/8139too.c, drivers/net/Kconfig,
+	  drivers/pci/pci.ids, drivers/video/fbmem.c
+	  fs/locks.c, fs/nfs/inode.c, include/linux/elf.h,
+	  include/linux/input.h, include/linux/mm.h,
+	  include/linux/pci_ids.h, kernel/sys.c, kernel/sysctl.c,
+	  kernel/timer.c, mm/memory.c: Merge 2.5.70.
+
+	* include/asm-sh/elf.h: Move ELF relocation definitions here.
+
+	* arch/sh/kernel/process.c (kernel_thread): Use the new do_fork() API.
+	(sys_clone, sys_fork, sys_vfork) : Same here.
+
+	* arch/sh/kernel/cpu/dma.c (dma_err, dma_tei): Use new irq API.
+
+2003-05-24  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Add note for CONFIG_SH_WDT about HZ scaling.
+
+	* drivers/char/watchdog/shwdt.c: General updates.. add note about
+	HZ scaling here as well.
+
+	* drivers/serial/Kconfig: Add SCI definitions.
+	* drivers/serial/Makefile: Same here.
+
+	* drivers/serial/sh-sci.c, drivers/serial/sh-sci.h: Add rewrite
+	of SH-SCI driver for new serial API.
+
+	* include/asm-sh/param.h: Set HZ to 1000 when the WDT is enabled.
+
+	* include/asm-sh/watchdog.h: Move cpu-specific functions and
+	definitions out of the way.
+	* include/asm-sh/cpu-sh[234]/watchdog.h: .. and put them here.
+
+	* arch/sh/kernel/pci.c (pcibios_align_resource): Define this as a
+	weak symbol, so we can override it.
+
+	* arch/sh/boards/mpc1211/pci.c (pcibios_align_resource): Added.
+
+2003-05-19  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/setup.c (topology_init): Added.
+	(c_start, c_next): Add support for NR_CPUS > 1.
+
+	* arch/sh/kernel/cpu/sh4/pci-st40.c: Cleanup irq handler return type.
+
+	* arch/sh/cchips/hd6446x/hd64465/gpio.c: Various cleanups.. modules,
+	resource allocation, etc. Also fixup irq handler return type.
+
+	* drivers/video/pvr2fb.c: Further cleanups.
+
+	* include/asm-sh/machvec.h: Get rid of machvec machtype tracking,
+	do this dynamically through the new mach-type generation interface.
+
+	* arch/sh/boards: Get rid of all mv_hw_* references.
+
+	* arch/sh/Makefile: Add rule to build arch/sh/tools.
+
+	* arch/sh/tools/Makefile, arch/sh/tools/machgen.sh,
+	  arch/sh/tools/mach-types: Added.
+
+	This completes the initial mach-type generation code. From now on,
+	definitions that previously were hardcoded in machvec.h will be
+	automatically generated as include/asm-sh/machtypes.h.
+
+2003-05-17  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/cpufreq.c (sh_cpufreq_setstate): Add rudimentary SMP
+	support, also verify that CPU is online.
+	(sh_cpufreq_cpu_init): Remove the policy->cpu != 0 check, look at
+	cpu_online() instead.
+
+2003-05-16  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/setup.c (scif_sercon_device): Remove.
+	* arch/sh/kernel/time.c (timer_interrupt): Use irqreturn_t for return
+	type.
+	* arch/sh/kernel/Makefile: Make SH cpufreq driver independant of
+	cpufreq core. Use CONFIG_SH_CPU_FREQ instead.
+	* arch/sh/kernel/cpufreq.c: Rewritten for new API.
+
+	* arch/sh/Kconfig: Add cpufreq definitions.
+
+	* include/asm-sh/thread_info.h: Drop redefinition of TI_PRE_COUNT.
+
+2003-05-16  Saito.K  <ksaito@interface.co.jp>
+
+	* arch/sh/Kconfig: Add mpc1211 support.
+	* arch/sh/Makefile: Add mpc1211 support.
+	* arch/sh/vmlinux.lds.S: Add mpc1211 support.
+
+	* arch/sh/boards/mpc1211/Makefile: New file.
+	* arch/sh/boards/mpc1211/io.c: New file.
+	* arch/sh/boards/mpc1211/led.c: New file.
+	* arch/sh/boards/mpc1211/mach.c: New file.
+	* arch/sh/boards/mpc1211/pci.c: New file.
+	* arch/sh/boards/mpc1211/rtc.c: New file.
+	* arch/sh/boards/mpc1211/setup.c: New file.
+
+	* arch/sh/kernel/sh_ksyms.c (memscan, __copy_user, __udivdi3,
+	__flush_purge_region, __down_trylock): Add to exported symbols.
+
+	* drivers/char/keyboard.c: Add mpc1211 support.
+
+	* drivers/ide/Kconfig: Add mpc1211 support.
+	* drivers/ide/pci/alim15x3.c: Add mpc1211 support.
+
+	* drivers/mtd/chips/jedec_probe.c: Add Fujitsu MBM29F040C support.
+
+	* drivers/mtd/maps/Kconfig: Add mpc1211 support.
+	* drivers/mtd/maps/Makefile: Add mpc1211 support.
+	* drivers/mtd/maps/mpc1211.c: Add mpc1211 support.
+
+	* drivers/video/Kconfig: Add Chips 69000 display support.
+	* drivers/video/Makefile: Add Chips 69000 display support.
+	* drivers/video/asiliantfb.c: New file.
+	* drivers/video/fbmem.c: Add Chips 69000 display support.
+
+	* include/asm-sh/dma.h: Add mpc1211 support.
+	* include/asm-sh/floppy.h: New file.
+	* include/asm-sh/irq.h: Add mpc1211 support.
+	(irq_canonicalize): here as an inline function.
+	* include/asm-sh/keyboard.h: Add mpc1211 support.
+	* include/asm-sh/machvec.h: Add mpc1211 support.
+	* include/asm-sh/mc146818rtc.h: Add mpc1211 support.
+
+	* include/asm-sh/mpc1211/dma.h: New file.
+	* include/asm-sh/mpc1211/io.h: New file.
+	* include/asm-sh/mpc1211/keyboard.h: New file.
+	* include/asm-sh/mpc1211/m1543c.h: New file.
+	* include/asm-sh/mpc1211/mc146818rtc.h: New file.
+	* include/asm-sh/mpc1211/mpc1211.h: New file.
+	* include/asm-sh/mpc1211/pci.h: New file.
+
+	* include/asm-sh/pci.h: Add mpc1211 support.
+	(sg_dma_address): Fix typo.
+	* include/asm-sh/scatterlist.h: Copy from kernel.org.
+
+	* include/linux/pci_ids.h: Add Chips 69000 display support.
+
+2003-05-12  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/boards/Makefile: Removed.
+	* arch/sh/Makefile: Include top-level .config for rules that don't set
+	include_config in the top-level Makefile. (ie, make clean/mrproper).
+
+2003-05-12  SUGIOKA Toshinobu <sugioka@itonet.co.jp>
+
+	* arch/sh/boards/Makefile: New file.
+
+2003-05-10  SUGIOKA Toshinobu <sugioka@itonet.co.jp>
+
+	* include/asm-sh/cpu-sh4/cache.h (CCR_CACHE_EMODE): Defined.
+	* arch/sh/mm/cache-sh4.c (detect_cpu_and_cache_system): Check CCR_CACHE_EMODE setting.
+	(__flush_dcache_all_ex): New function.
+	(__flush_cache_4096_all_ex): New function.
+	(flush_cache_4096_all): Moved from clear_page.S, changed for 2-way cache.
+	(flush_icache_range): Do flush-cache-all.
+	(flush_cache_sigtramp): Don't use flush_icache_range for efficiency.
+	(flush_cache_all): Check cache ways and use relevant function.
+	(flush_dcache_page): Reverted to previous version (2.4.20).
+	(__flush_cache_page): Likewise.
+	(flush_cache_range): External function declaration moved to the top.
+	* arch/sh/mm/clear_page.S (__clear_user): Bug fix from 2.4 branch.
+	(flush_cache_4096_all): Renamed to __flush_cache_4096_all.
+	* arch/sh/mm/init.c (sh_cache_init): Don't change CCR_CACHE_EMODE bit of CCR.
+
+	* arch/sh/Makefile: Follow i386 changes.
+	* arch/sh/boot/compressed/Makefile: Likewise.
+	* arch/sh/boot/Makefile: Restored and follow i386 changes.
+	* arch/sh/boot/compressed/vmlinux.scr: New.
+	* arch/sh/.cvsignore: ignore vmlinux.lds.s
+	* arch/sh/boot/compressed/.cvsignore: Add sub-target files.
+
+	* include/asm-sh/bug.h: Restore and follow i386 changes.
+	* mm/memory.c: Follow 2.5.69.
+	* include/net/inet_ecn.h: Removed.
+	* include/asm-sh/ide.h (ide_init_default_hwifs): Bug fix from 2.4 branch.
+	* include/asm-sh/kmap_types.h: Follow i386 changes.
+
+2003-05-07  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/lib/udivdi3.c: New file.
+	* arch/sh/lib/Makefile (obj-y): Add udivdi3.o.
+
+2003-05-07  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/cpu/sh4/pci-sh7751.c (pci_conf1_read): General
+	cleanup. Should now build and read values correctly.
+	* arch/sh/kernel/cpu/sh4/pci-st40.c (st40pci_read): Same here.
+
+	* arch/sh/mm/cache-sh4.c (flush_icache_range): Clear out valid
+	bit for each way in the icache.
+
+	* drivers/video/Makefile: Make pvr2fb use cfb files.
+	* drivers/video/pvr2fb.c: Updates.
+
+2003-05-07  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+	    Paul Mundt  <lethal@linux-sh.org>
+
+	* Makefile  (CFLAGS): Use -O1 to avoid miss compiling by gcc-3.2.
+	(core-y): Add usr/.
+
+	* arch/sh/Makefile (LDFLAGS_BLOB): Define.
+
+	* arch/sh/kernel/cpu/rtc.c (sh_rtc_gettimeofday): Don't make
+	overflow.
+	* arch/sh/kernel/entry.S: Add gUSA support.  Call syscall_tail
+	only when returning from fork.  Add new syscalls.
+	* arch/sh/kernel/io_7751se.c: Fix typo.
+	* arch/sh/kernel/io_se.c (delay): Wait more.
+	* arch/sh/kernel/irq.c: Follow i386 changes.
+	* arch/sh/kernel/module.c: Rewriting.
+	* arch/sh/kernel/process.c (kernel_thread_helper): New.
+	(kernel_thread): Use kernel_thread_helper.  Return error value also.
+	(dump_task_regs, dump_task_fpu): New.
+	(copy_thread): Handle CLONE_SETTLS flag and initialize child tids.
+	(__switch_to): Return PREV pointer.
+	(sys_clone): Handle tid pointers.
+	* arch/sh/kernel/ptrace.c: Cleanup and follow i386 changes.
+	* arch/sh/kernel/signal.c (handle_signal): Add gUSA support.
+	(do_signal): Handle ERESTART_RESTARTBLOCK case.
+	* arch/sh/kernel/sys_sh.c (sys_ipc): Use sys_semtimedop and
+	handle SEMTIMEDOP.
+	* arch/sh/kernel/time.c (TICK_SIZE): Use tick_nsec.
+	(do_gettimeoffset): Lock critical region.
+	(do_gettimeofday): Follow i386 changes.
+	(time_init): Override tick_nsec here.
+
+	* arch/sh/lib/Makefile (obj-y): Add div64.o.
+	* arch/sh/lib/div64.S: New file.
+
+	* arch/sh/mm/cache-sh2.c (detect_cpu_and_cache_system): Use
+	SH_CACHE_* instead of CACHE_* because CACHE_VALID collides with
+	the one in NFS header file.
+	* arch/sh/mm/cache-sh3.c (detect_cpu_and_cache_system): Likewise.
+	(__flush_wback_region): Likewise.
+	(__flush_purge_region): Likewise.
+	* arch/sh/mm/cache-sh4.c (flush_cache_4096): Likewise.
+	* arch/sh/mm/init.c (sh_cache_init): Likewise.
+	* arch/sh/mm/extable.c (fixup_exception): New.
+	* arch/sh/mm/tlb-sh4.c (update_mmu_cache): Set write through
+	bit of PTEL if CONFIG_SH_WRITETHROUGH defined.
+
+	* drivers/net/stnic.c (ei_interrupet): Change return type.
+
+	* include/asm-sh/byteorder.h (___arch__swab64): New.
+	(__arch__swab64): Define.
+	* include/asm-sh/cache.h: Rename CACHE_* to SH_CACHE_*.
+	* include/asm-sh/delay.h (ndelay): Define.
+	* include/asm-sh/div64.h (do_div): Implement a real 64/32-bit
+	division.
+	* include/asm-sh/elf.h: Follow i386 change.
+	* include/asm-sh/hardirq.h: Likewise.
+	* include/asm-sh/ide.h: Include generic definitions.
+	* include/asm-sh/ipc.h (SEMTIMEDOP): Define.
+	* include/asm-sh/module.h (MODULE_PROC_FAMILY): Define.
+	* include/asm-sh/param.h: Follow i386 changes.
+	* include/asm-sh/pci.h (pci_map_sg): Fix dma_address in loop.
+	(pci_dma_sync_sg): Likewise.
+	* include/asm-sh/pgtable.h: Change _PAGE_FILE to 0x80 and drop this
+	bit from _PAGE_FLAGS_HARDWARE_MASK.
+	* include/asm-sh/processor.h: Follow i386 changes.
+	* include/asm-sh/ptrace.h: Remove PTRACE_OLDSETOPTIONS and
+	define PTRACE_O_TRACESYSGOOD.
+	* include/asm-sh/rwsem.h: Cut&copy from i386.
+	* include/asm-sh/semaphore.h: Follow i386 changes.
+	* include/asm-sh/thread_info.h: Follow i386 changes.
+	(struct thread_info): Make CPU and PREEMPT_COUNT 32-bit.
+	* include/asm-sh/tlb.h (tlb_start_vma): Call flush_cache_range.
+	(tlb_end_vma): Call flush_tlb_range.
+	* include/asm-sh/types.h: Follow i386 changes.
+	* include/asm-sh/uaccess.h: Remove fixup_exception.
+	* include/asm-sh/unistd.h: Define new system call numbers.
+
+	* include/linux/elf.h: Define SH relocation types.
+
+	* kernel/timer.c (tick_sec): Don't use static initializer.
+	(tick_nsec): Likewise.
+	(init_timers): Initialize tick_sec and tick_nsec here.
+
+2003-05-05  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/setup.c (sh_console_device): Removed.
+
+	* drivers/char/sh-sci.c: General tty cleanup, get rid of minor() and
+	mk_kdev() usage.
+	
+	* drivers/video/hitfb.c (hitfb_init): fb_info.node cleanups, get rid
+	of NODEV and minor().
+	* drivers/video/pvr2fb.c (pvr2fb_interrupt): Use new irqreturn_t type.
+	(pvr2fb_init): get rid of NODEV and minor().
+
+	* include/asm-sh/pgalloc.h (pte_alloc_one_kernel): Use __GFP_REPEAT
+	for pte allocation.
+
+	Merge 2.5.69.
+
+2003-05-01  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/entry.S (ret_from_fork): Add back in. Invoke
+	schedule_tail(), since its not just for SMP anymore.
+	* arch/sh/kernel/traps.c (dump_stack): Added.
+	* arch/sh/kernel/module.c: New file.
+
+	* include/asm-sh/module.h: Rework for new module interface.
+
+2003-04-22  Paul Mundt  <lethal@linux-sh.org>
+
+	Merge with 2.5.67 and 2.5.68.
+
+2003-04-18  SUGIOKA Toshinobu <sugioka@itonet.co.jp>
+
+	* arch/sh/mm/clear_page.S (__flush_cache_4096): Revert previous change
+	and modified for efficiency.
+
+2003-04-17  SUGIOKA Toshinobu <sugioka@itonet.co.jp>
+
+	* arch/sh/mm/clear_page.S (__flush_cache_4096): Don't change associated
+	data that is to be flushed.
+
+2003-04-01  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Move the CONFIG_MMU option further down and
+	add some rudimentary help text.
+
+	* arch/sh/vmlinux.lds.s: Add __param and __initramfs sections.
+
+	* arch/sh/kernel/entry.S: Deprecate sys_create_module,
+	sys_query_module, and sys_get_kernel_syms.
+
+	* arch/sh/mm/extable.c (search_extable): Added. Use the unified
+	extable handling code.
+	(search_one_table, search_exception_table): Removed.
+	* arch/sh/mm/fault.c (do_page_fault): Use the unified extable
+	search.
+	* arch/sh/kernel/traps.c (die_if_no_fixup): Same here.
+
+	* include/asm-sh/uaccess.h (search_exception_table): Removed.
+
+	* drivers/block/rd.c: Include linux/mm.h for page_address().
+
+2003-03-31  Paul Mundt  <lethal@linux-sh.org>
+
+	* include/asm-sh/pgtable.h (pte_file, pte_to_pgoff,
+	pgoff_to_pte): Added. Also set PTE_FILE_MAX_BITS.
+
+	* drivers/char/watchdog/shwdt.c: Cleanup.
+
+	* drivers/video/pvr2fb.c: Further API fixes.
+
+	Merge with 2.5.62 ... 2.5.66.
+
+2003-03-30  Paul Mundt  <lethal@linux-sh.org>
+
+	Merge with 2.5.47 ... 2.5.61.
+
+2003-03-29  Paul Mundt  <lethal@linux-sh.org>
+
+	Merge with 2.5.46.
+
+2003-03-24  Daniel Jacobowitz  <drow@false.org>
+	    Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/kernel/ptrace.c (ubc_set_tracing): Break before executing
+	instruction.
+
+2003-03-24  SUGIOKA Toshinobu <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/entry.S: Call sys_pread_wrapper/sys_pwrite_wrapper
+	instead of sys_pread64/sys_pwrite64.
+	* arch/sh/kernel/sys_sh.c (sys_pread_wrapper,sys_pwrite_wrapper):
+	New function.
+
+	* arch/sh/mm/copy_page.S (__copy_user): Add missing exception handling
+	point.
+
+2003-01-28  Paul Mundt  <lethal@linux-sh.org>
+
+	* Makefile, arch/sh/Kconfig, drivers/block/rd.c,
+	drivers/Makefile, drivers/char/Makefile,
+	drivers/char/tty_io.c, drivers/net/8139too.c,
+	drivers/net/Kconfig, drivers/video/epson1355fb.c,
+	drivers/video/hitfb.c, drivers/video/pvr2fb.c,
+	include/asm-sh/signal.h, init/do_mounts.c, kernel/ptrace.c,
+	kernel/timer.c, mm/memory.c: Merge 2.5.51.
+
+	* Makefile, drivers/Makefile, drivers/char/Makefile,
+	drivers/pci/pci.ids, include/asm-sh/processor.h,
+	init/do_mounts.c, kernel/ptrace.c, kernel/timer.c: Merge 2.5.50.
+
+	* Makefile, drivers/char/Makefile, drivers/char/Kconfig,
+	drivers/char/tty_io.c, drivers/pcmcia/hd64465_ss.c,
+	fs/nfs/inode.c, fs/mpage.c: Merge 2.5.49.
+
+	* drivers/char/shwdt.c: Move to watchdog/
+
+	* arch/sh/Kconfig, drivers/char/tty_io.c, init/do_mounts.c,
+	drivers/input/keyboard/Kconfig, fs/nfs/inode.c, fs/mpage.c,
+	include/asm-sh/stat.h, include/linux/input.h, kernel/time.c,
+	kernel/timer.c, Makefile: Merge 2.5.48.
+
+	* Makefile, arch/sh/Kconfig, arch/sh/kernel/pci-sh7751.c,
+	arch/sh/kernel/pci_st40.c, drivers/block/rd.c,
+	drivers/char/sh-sci.c, drivers/char/shwdt.c,
+	drivers/char/sysrq.c, drivers/char/tty_io.c,
+	drivers/net/Kconfig, drivers/pci/pci.ids, fs/nfs/inode.c,
+	fs/mpage.c, kernel/timer.c: Merge 2.5.47.
+
+	* Makefile, arch/sh/Kconfig, arch/sh/kernel/irq.c,
+	arch/sh/kernel/process.c, arch/sh/kernel/ptrace.c,
+	drivers/Makefile, drivers/block/rd.c, drivers/char/Makefile,
+	drivers/char/sysrq.c, drivers/net/Kconfig, init/do_mounts.c,
+	include/asm-sh/processor.h, include/asm-sh/ptrace.h,
+	kernel/ptrace.c, kernel/timer.c, mm/memory.c: Merge 2.5.46.
+
+2003-01-16  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Add CONFIG_DEBUG_SPINLOCK.
+
+	* arch/sh/kernel/traps.c (per_cpu_trap_init, gdb_vbr_init): Added.
+	(trap_init): Do some generic exception table setup, and wrap to
+	per_cpu_trap_init() to setup boot cpu.
+
+	* include/asm-sh/spinlock.h (_raw_spin_lock, _raw_spin_unlock,
+	_raw_read_lock, _raw_read_unlock, _raw_write_lock,
+	_raw_write_unlock): And preliminary spin/read/write locks.
+
+	Clean up CONFIG_DEBUG_SPINLOCK stuff.
+
+2003-01-15  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/vmlinux.lds.S: Don't use static values for cacheline or
+	page size. Use L1_CACHE_BYTES/PAGE_SIZE accordingly.
+
+2003-01-13  Paul Mundt  <lethal@linux-sh.org>
+
+	* include/asm-sh/uaccess.h (__access_ok, set_fs, get_fs): Added for
+	CONFIG_MMU=n.
+
+2003-01-10  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/entry.S: Wrap sys_madvise and sys_readahead
+	to sys_ni_syscall if !CONFIG_MMU. Fixup exception handling
+	when we don't have an MMU (or if its disabled).
+
+2003-01-09  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Add CONFIG_BINFMT_FLAT.
+
+	* mm/Makefile, mm/filemap.c, mm/mmap.c, mm/nommu.c,
+	mm/page_alloc.c, mm/slab.c, mm/vmscan.c, kernel/fork.c,
+	kernel/sys.c, kernel/sysctl.c, fs/exec.c, fs/locks.c,
+	fs/mpage.c, fs/proc/array.c, fs/proc/base.c,
+	fs/proc/proc_misc.c, drivers/char/mem.c,
+	include/linux/blkdev.h, include/linux/mm.h,
+	include/linux/page-flags.h, include/linux/slab.h,
+	include/linux/swap.h: Merge uClinux 2.5.45-uc1-mm patch.
+
+	* fs/Makefile: Add binfmt_flat.
+	* fs/binfmt_flat.c: New file.
+
+	* include/linux/flat.h: New file.
+  
+2003-01-05  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Makefile: Do a bit of cleaning, and lay the groundwork
+	for include/asm-sh/cpu/
+
+2003-01-01  Paul Mundt  <lethal@linux-sh.org>
+
+	* ChangeLog-2002: New file, move the old one out of the way.
+
+	* arch/sh/boot/compressed/Makefile: Add top-level include dir
+	to CFLAGS/AFLAGS.
+
+	* arch/sh/kernel/process.c (sys_fork): Can't fork() properly
+	with no MMU (at least under uClinux), return -EINVAL instead.
+
+	* arch/sh/mm/Makefile: Build pg-sh4.c for all SH-4, not just
+	ones with an MMU.
+	* arch/sh/mm/tlb-nommu.c (update_mmu_cache): Added.
+
+	* include/asm-sh/bugs.h (check_bugs): Add a default rule for
+	CPU subtype.
+	* include/asm-sh/pgtable.h: Fixup page protection flags for
+	systems without an MMU .. wrap to __pgprot(0).
+	* include/asm-sh/processor.h (save_fpu): Make it work on
+	SH-4 again.
+
+	* include/asm-sh/addrspace.h: Move CPU specific definitions out of
+	the way.. reference asm/cpu/addrspace.h instead.
+	* include/asm-sh/cpu-sh3/addrspace.h,
+	include/asm-sh/cpu-sh4/addrspace.h: Added.
+
diff -ruN linux-2.6.17-vanilla/ChangeLog-2004 linux-2.6.17/ChangeLog-2004
--- linux-2.6.17-vanilla/ChangeLog-2004	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/ChangeLog-2004	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,930 @@
+2004-12-03  Tom Rini  <trini@kernel.crashing.org>
+
+	* arch/sh/configs/se7750_defconfig: Add defconfig for ms7750sse01
+	* include/asm-sh/system.h (__cmpxchg_u32, __cmpxchg, cmpxchg): Add
+	so that we provide a simple cmpxchg().  Borrowed from MIPS.
+
+2004-12-03  Saito.K  <ksaito@interface.co.jp>
+
+	* include/asm-sh/irq.h: Add CTP/PCI-SH03 IDE.
+	* include/asm-sh/sh03/ide.h: New file.
+
+2004-10-25  Paul Mundt  <paul.mundt@nokia.com>
+
+	* arch/sh/kernel/signal.c (handle_signal): Modify to take a
+	struct k_sigaction arg.
+	(do_signal): get_signal_to_deliver() now fills in the k_sigaction
+	struct, pass this into handle_signal().
+
+	* arch/sh/kernel/entry.S (sys_call_table): Update for 2.6.9 syscalls,
+	sys_waitid in particular.
+
+	* include/asm-sh/bitops.h (ext2_find_next_zero_bit): addr is specified
+	as a char *, which causes find_next_zero_bit() to complain. Cast it.
+
+	* include/asm-sh/pgtable.h (ptep_get_and_clear): Get rid of inline
+	bogosity causing compile death.
+
+	* include/asm-sh/system.h: Kill off linux/kernel.h include, as it's
+	both unecessary and causes a circular dependency.
+
+	* include/asm-sh/unistd.h: syscall updates.
+
+2004-10-24  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/signal.c (get_sigframe): Fix sigaltstack behavior.
+
+2004-10-15  Tom Rini  <trini@kernel.crashing.org>
+
+	* arch/sh/ramdisk/Makefile: Fix for usage with O=
+
+2004-10-15  Tom Rini  <trini@kernel.crashing.org>
+
+	* include/asm-sh/bitops.h (find_next_zero_bit): First parameter is
+	now a const unsigned long.
+	(sched_find_first_bit): Likewise.
+
+2004-10-14  Paul Mundt  <paul.mundt@nokia.com>
+
+	* arch/sh/Kconfig: Cleanup PCLK values.
+
+	* arch/sh/configs/microdev_defconfig: Add microdev defconfig.
+
+	* arch/sh/boards/superh/microdev/setup.c (smc91x_setup): Added
+	smc91x platform device registration.
+
+	* arch/sh/kernel/early_printk.c (scif_sercon_init): Fixup SCBRR
+	calculations to use CONFIG_SH_PCLK_FREQ value.
+	* arch/sh/kernel/sh_ksyms.c (__div64_32, strcpy): Exported to
+	satisfy module builds.
+	(csum_ipv6_magic, clear_page): Likewise.
+
+	* include/asm-sh/bug.h: Make BUG() oops.
+	* include/asm-sh/checksum.h: Fix IPv6 compile.
+	* include/asm-sh/unistd.h (_exit): Removed.
+
+	* drivers/net/Kconfig: Enable smc91x for SuperH.
+	* drivers/net/smc91x.[ch]: Cleanup ISA support, add support for
+	SH4-202 MicroDev.
+
+2004-10-13  Masahiro Miyake  <miya@lineo.co.jp>
+
+	* arch/sh/boards/snapgear/setup.c: Use asm/cpu/timer.h for TMU
+	definitions.
+
+	* arch/sh/kernel/time.c: Likewise.
+
+	* include/asm-sh/cpu-sh3/freq.h: Add FRQCR definition for SH7300.
+
+	* include/asm-sh/cpu-sh3/timer.h: New file, TMU definitions.
+	* include/asm-sh/cpu-sh4/timer.h: New file.
+
+2004-10-04  Saito.K  <ksaito@interface.co.jp>
+
+	* arch/sh/Kconfig: Add CTP/PCI-SH03 support.
+	* arch/sh/Makefile: Add CTP/PCI-SH03 support.
+	* arch/sh/boards/sh03/Makefile: New file.
+	* arch/sh/boards/sh03/led.c: New file.
+	* arch/sh/boards/sh03/pci.c: New file.
+	* arch/sh/boards/sh03/rtc.c: New file.
+	* arch/sh/boards/sh03/setup.c: New file.
+	* arch/sh/config/sh03_defconfig: New file.
+	* arch/sh/drivers/pci/pci-sh7751.c: Add CTP/PCI-SH03 support.
+	* drivers/char/Kconfig: Add CTP/PCI-SH03 support.
+	* drivers/char/Makefile: Add CTP/PCI-SH03 support.
+	* drivers/char/sh03rtc.c: New file.
+	* include/asm-sh/sh03/io.h: New file.
+	* include/asm-sh/sh03/sh03.h: New file.
+
+2004-10-01  Paul Mundt  <paul.mundt@nokia.com>
+
+	* arch/sh/drivers/pci/pci-sh7751.c (pcibios_fixup_irqs): Define as a
+	weak symbol so other boards can overload the fixups.
+
+2004-09-24  Tom Rini  <trini@kernel.crashing.org>
+
+	* arch/sh/Makefile: Test for machdir-y not being empty before
+	adding to core-y.
+
+2004-09-24  Tom Rini  <trini@kernel.crashing.org>
+
+	* drivers/net/8139too.c: Revert changes that moved asserts() around.
+
+2004-09-24  Tom Rini  <trini@kernel.crashing.org>
+
+	* arch/sh/boards/se/7751/io.c: pci-sh7751.h has moved, update include.
+	* arch/sh/boards/se/7751/pci.c: pci-sh7751.h has moved, update include.
+
+2004-09-24  Tom Rini  <trini@kernel.crashing.org>
+
+	* arch/sh/tools/Makefile: Switch from machgen.sh to gen-mach-types
+	* arch/sh/tools/machgen.sh: Remove
+	* arch/sh/tools/gen-mach-types: Add
+	* arch/sh/Makefile: Update the cpu and mach symlink rules to match
+	how ARM does it.
+	* This updates our symlink and machtypes.h stuff to match what
+	ARM does today which fixes O= building.
+
+2004-09-24  Tom Rini  <trini@kernel.crashing.org>
+
+	* include/asm-sh: adc.h, addrspace.h, cache.h, cacheflush.h, dma.h,
+	freq.h, mmu_context.h, processor.h, rtc.h, shmparam.h, ubc.h,
+	watchdog.h: Protect all contents with #ifdef __KERNEL__
+	* include/asm-sh/user.h: remove <linux/types.h> and <asm/processor.h>
+	from the #include list.
+	* The net result is that glibc can now compile with these headers.
+
+2004-08-19  Alex Bennee <kernel-hacker@bennee.com>
+
+	* arch/sh/drivers/pci/pci-st40.c Updated PLL calculation
+	* arch/sh/drivers/pci/pci-st40.c Fixes to init  
+	* arch/sh/drivers/pci/pci-st40.[ch] Updated RBAR
+
+2004-08-19  Alex Bennee <kernel-hacker@bennee.com>
+
+	* Forward porting of INTC2 IRQ Handling from 2.4
+	* added intc2 irq initialisation
+	* removed make_intc2_irq call from from pci
+	* updated intc2 irq functions
+	* updated st40 pci irq code
+	* fixed pcibios_init to return ok
+
+2004-08-19  Alex Bennee <kernel-hacker@bennee.com>
+
+	* moved map_harp_irq -> pcibios_map_platform_irq in harp/setup.c
+	* added subsys_initcall(pcibios_init) to ST40 PCI code.
+
+2004-08-03  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/cpu/sh4/probe.c (detect_cpu_and_cache_system): Add
+	CPU_HAS_PERF_COUNTER for SH7750/SH7750S.
+
+	* arch/sh/kernel/setup.c (cpu_flags): Add perfctr flag.
+
+	* arch/sh/oprofile/Makefile: Add op_model_sh7750 rule.
+	* arch/sh/oprofile/op_model_sh7750.c: New file, OProfile support for
+	SH7750/SH7750S performance counters.
+
+	* include/asm-sh/processor.h: Add CPU_HAS_PERF_COUNTER.
+
+2004-07-28  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/drivers/dma/dma-pvr2.c: Update for DMA API changes.
+	* arch/sh/drivers/dma/dma-g2.c: Likewise.
+
+2004-07-26  Paul Mundt  <lethal@linux-sh.org>
+
+	More fixups by Hosokawa-san <hosokawa@ace-jp.com>
+
+	* arch/sh/drivers/pci/fixups-rts7751r2d.c (pci_fixup_pcic): Use
+	PCI_REG() for proper register offsets. Additional PCIC init.
+
+	* arch/sh/drivers/pci/ops-rts7751r2d.c (sh7751_pci_map): Fix window0
+	size, add dummy window1.
+
+	* arch/sh/drivers/pci/pci-sh7751.c (pci_fixup_ide_bases): Enable this
+	for RTS7751R2D/HS7751RVoIP.
+	(pcibios_fixups): Likewise.
+
+	* arch/sh/drivers/pci/pci.c (pcibios_enable_device): Add mask check.
+
+2004-07-07  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/mm/cache-sh[234].c (detect_cpu_and_cache_system): Moved ..
+	* arch/sh/kernel/cpu/sh[234]/probe.c: here.
+	* arch/sh/kernel/cpu/sh[234]/Makefile: Add probe.o rule.
+
+2004-07-05  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/time.c (time_init): RTS7751R2D and HS7751RVoIP don't
+	need special handling for the interval value..
+
+2004-06-28  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/asm-offsets.c: New file.
+	* arch/sh/kernel/entry.S: Include asm/asm-offsets.h.
+
+	* arch/sh/Makefile: Add asm-offsets rules.
+
+	* include/asm-sh/thread_info.h: Remove struct elem references, do
+	them dynamically at build time via asm-offsets instead.
+
+	* arch/sh/lib/memcpy-sh4.S: Merge Stuart's SH-4 optimized memcpy().
+	* arch/sh/lib/Makefile: Use memcpy-sh4 for CONFIG_CPU_SH4.
+
+2004-06-28  Hiroshi DOYU  <Hiroshi_DOYU@montavista.co.jp>
+
+	* arch/sh/Kconfig, arch/sh/Makefile,arch/sh/kernel/process.c,
+	arch/sh/kernel/setup.c,arch/sh/kernel/signal.c,arch/sh/kernel/time.c,
+	arch/sh/kernel/cpu/sh4/Makefile,arch/sh/kernel/cpu/sh4/ex.S,
+	arch/sh/mm/cache-sh4.c, arch/sh/tools/mach-types, drivers/serial/sh-sci.c
+	drivers/serial/sh-sci.h, include/asm-sh/irq.h include/asm-sh/processor.h,
+	include/asm-sh/cpu-sh4/freq.h: Modified for sh73180cp01
+
+	* arch/sh/boards/se/73180/Makefile, arch/sh/configs/se73180_defconfig
+	arch/sh/boards/se/73180/io.c, arch/sh/boards/se/73180/irq.c,
+	arch/sh/boards/se/73180/led.c, arch/sh/boards/se/73180/setup.c,
+	include/asm-sh/se73180/io.h, include/asm-sh/se73180/se73180.h,
+	include/asm-sh/irq-sh73180.h: New files for sh73180cp01
+	
+2004-06-26  Paul Mundt  <lethal@linux-sh.org>
+
+	* sound/oss/voyagergx_sound.c (request_dma2): Use irqreturn_t for irq
+	callback.
+	(do_irq): Convert to irqreturn_t.
+	(init_voyagergx): s/\(INT_MASK\)/VOYAGER_\1/, likewise for INT_MASK_AC.
+
+	* arch/sh/drivers/dma/dma-api.c: Don't export unregister_dmac().
+
+	* arch/sh/boards/dreamcast/setup.c: Wrap dreamcast_consistent_alloc
+	and dreamcast_consistent_free into the machvec.
+
+	* arch/sh/boards/renesas/rts7751r2d/mach.c: consistent API wrappers
+	in the machvec are only built in if CONFIG_USB_OHCI_HCD is set,
+	check this in the machvec assignment so we don't get undefined symbols
+	at link time (Noted by Hosokawa-san <hosokawa@ace-jp.com>).
+
+	* arch/sh/cchips/voyagergx/consistent.c (voyagergx_consistent_alloc):
+	return NULL when we aren't capable of doing the allocation (this will
+	then wrap to consistent_alloc() in the generic path).
+	(voyagergx_consistent_free): return non-0 to have the generic path
+	wrap to consistent_free(), and get rid of its invocation here.
+
+	* arch/sh/drivers/pci/dma-dreamcast.c (__pci_alloc_consistent):
+	Renamed to dreamcast_consistent_alloc().
+	(__pci_free_consistent): Renamed to dreamcast_consistent_free().
+	Both cleaned up to work with new model.
+
+	* include/asm-sh/dma-mapping.h: Get rid of dreamcast-specific hacks,
+	these are now wrapped properly through the machvec.
+	(dma_alloc_coherent): Check return val of mv_consistent_alloc(),
+	wrap to consistent_alloc() if the former isn't interested in the
+	mapping.
+	(dma_free_coherent): Likewise, but for mv_consistent_free() and
+	consistent_free().
+
+	* include/asm-sh/machvec.h (mv_consistent_free): Change return-type
+	to int.
+
+	* arch/sh/kernel/cpu/irq_ipr.c: export make_ipr_irq to satisfy module
+	dependancies.
+	* arch/sh/mm/consistent.c: export consistent_alloc/consistent_free.
+	* sound/oss/voyagergx_8051.c: export init_8051/command_8051.
+
+	* arch/sh/configs/rts7751r2d_defconfig: Update RTS7751R2D defconfig.
+
+2004-06-25  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/time.c (sh_do_profile): Add oprofile hook.
+	Change to take pt_regs.
+	(do_timer_interrupt): Hand off regs to sh_do_profile()
+	instead of just PC value (profile_hook() expects this).
+
+2004-06-15  Paul Mundt  <lethal@linux-sh.org>
+
+ 	* arch/sh/Kconfig: Add CONFIG_CPU_SUBTYPE_SH7705.
+
+	* arch/sh/kernel/cpu/irq_ipr.c, arch/sh/kernel/cpu/sh3/ex.S,
+	arch/sh/kernel/entry.S, arch/sh/kernel/setup.c,
+	arch/sh/kernel/time.c: Add support for SH7705.
+
+	* include/asm-sh/irq.h, include/asm-sh/processor.h: Likewise.
+
+	* arch/sh/boards/systemh: Moved ..
+	* arch/sh/boards/renesas/systemh: here.
+
+	* arch/sh/Makefile: Update systemh path.
+	* arch/sh/boards/renesas/systemh/Makefile: Adjust pci.o path.
+
+2004-06-10  Hiroshi DOYU  <Hiroshi_DOYU@montavista.co.jp>
+	
+	* arch/sh/Kconfig, arch/sh/Makefile,
+	arch/sh/kernel/entry.S, arch/sh/kernel/setup.c,
+	arch/sh/kernel/time.c, arch/sh/kernel/cpu/irq_ipr.c,
+	arch/sh/kernel/cpu/sh3/ex.S, arch/sh/tools/mach-types,
+	drivers/serial/sh-sci.c, drivers/serial/sh-sci.h,
+	include/asm-sh/bugs.h, include/asm-sh/irq.h,
+	include/asm-sh/ubc.h: modified for sh7300cp01
+	
+	* arch/sh/boards/se/7300/Makefile, arch/sh/boards/se/7300/io.c,
+	arch/sh/boards/se/7300/irq.c, arch/sh/boards/se/7300/led.c,
+	arch/sh/boards/se/7300/mach.c, arch/sh/boards/se/7300/setup.c,
+	arch/sh/configs/se7300_defconfig, include/asm-sh/se7300/io.h,
+	include/asm-sh/se7300/irq-sh7300.h, include/asm-sh/se7300/se7300.h:
+	New files for sh7300cp01 
+
+2004-06-08  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/ide/Kconfig: Add CONFIG_IDE_SH.
+	* drivers/ide/Makefile: Add CONFIG_IDE_SH rule.
+	* drivers/ide/ide.c: Merge from mainline.
+	(probe_for_hwifs): Add ide_sh_init().
+	* drivers/ide/sh/ide-sh.c: New file, generic host driver for SuperH.
+
+	* include/asm-sh/ide.h: Update for new API.
+	* include/asm-sh/irq.h: Only load asm/mach/ide.h on platforms where
+	the irq definitions vary from the standard 14/15.
+
+2004-06-07  Hiroshi DOYU  <Hiroshi_DOYU@montavista.co.jp>
+
+	* arch/sh/Kconfig: Added support for embedded ramdisk
+	* arch/sh/Makefile: Likewise
+	* arch/sh/kernel/setup.c (setup_arch): Likewise
+	* arch/sh/ramdisk/Makefile: New file. Likewise
+	* arch/sh/ramdisk/ld.script: New file. Likewise
+	* arch/sh/kernel/vmlinux.lds.S: Likewise
+
+2004-06-04  Andriy Skulysh  <askulysh@image.kiev.ua>
+
+	* arch/sh/mm/cache-sh3.c (detect_cpu_and_cache_system): use 
+	way_incr instead of way_shift.
+	* arch/sh/mm/cache-sh3.c (__flush_wback_region): Likewise.
+	
+	* include/asm-sh/ide.h (ide_init_hwif_ports): Removed.
+	* include/asm-sh/hp6xx/ide.h: Fix typo.
+	* include/asm-sh/hp6xx/hp6xx.h: hp680 updates.
+	* include/asm-sh/cpu-sh3/dac.h: Likewise.
+	* arch/sh/kernel/sh_ksyms.c: Export consistent_sync.
+	
+	* arch/sh/kernel/cpu/adc.c: New file. Added simple SH ADC support.
+	* include/asm-sh/adc.h: Likewise.
+	* arch/sh/Kconfig: Likewise.
+	* arch/sh/kernel/cpu/Makefile: Likewise.
+	
+	* drivers/input/touchscreen/hp680_ts_input.c: New file. Added Jornada 680
+	touchscreen support.
+	* drivers/input/touchscreen/Makefile: Likewise.
+	* drivers/input/touchscreen/Kconfig: Likewise.
+
+2004-06-02  Alex Bennee <kernel-hacker@bennee.com>
+
+	* arch/sh/KConfig: Added ST subtypes from ST Tree (Dave McKay)
+	* arch/sh/KConfig: Added CONFIG_DEBUG_INFO from other arch's                          	
+
+2004-06-02  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/setup.c (show_cpuflags): Fix off-by-1 index
+	for flag names.
+
+2004-05-28  Paul Mundt  <lethal@linux-sh.org>
+
+	* include/asm-sh/pgalloc.h (ptep_test_and_clear_young): Removed.
+	(ptep_test_and_clear_dirty): Removed.
+	(ptep_set_wrprotect): Likewise.
+	(ptep_mkdirty): Likewise.
+	(ptep_get_and_clear): Removed for SH-3.
+
+	* include/asm-sh/pgtable.h (pte_same): Removed.
+
+	Use generic ptep_xxx() routines for everything other than the SH-4
+	version of ptep_get_and_clear().
+
+2004-05-25  Alex Bennee <kernel-hacker@bennee.com>
+
+	* arch/sh/kernel/time.c: Fixed clock detection for ST40
+
+2004-05-07  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/ptrace.c (sys_ptrace): Handle PTRACE_SETOPTIONS in
+	default case.
+
+2004-05-05  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/process.c (default_idle): Add hlt_counter check to
+	determine if we can use sleep or not. Use cpu_sleep() instead of
+	cpu_relax().
+	* include/asm-sh/processor.h (cpu_relax): Renamed to cpu_sleep().
+	Add dummy definition for cpu_relax().
+
+2004-05-02  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/traps.c (is_dsp_inst,trap_init): Don't use bit operation
+	macros for cpu_data->flags.
+	* arch/sh/kernel/cpu/init.c (dsp_init,sh_cpu_init): Likewise.
+	* arch/sh/mm/tlb-sh3.c (__flush_tlb_page): Likewise.
+	* arch/sh/mm/cache-sh3.c (detect_cpu_and_cache_system): Likewise.
+	* arch/sh/mm/cache-sh4.c (detect_cpu_and_cache_system): Likewise.
+	(flush_cache_4096): Likewise. Jump to P2 area when accessing I-cache
+	array.
+
+2004-04-30  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* include/asm-sh/checksum.h (csum_ipv6_magic): Remove #ifdef CONFIG_IPV6.
+
+	* arch/sh/boot/compressed/Makefile (CONFIG_MEMORY_START,
+	CONFIG_BOOT_LINK_OFFSET): Add '0x' prefix to dummy value.
+
+2004-04-28  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* drivers/serial/sh-sci.h: Fix typo.
+	* drivers/serial/sh-sci.c (sci_handle_breaks): Test SCIF_ORER definition
+	instead of sub cpu type.
+	(sci_er_interrupt): Fix compile error.
+
+	* arch/sh/boot/compressed/Makefile (CONFIG_MEMORY_START,
+	CONFIG_BOOT_LINK_OFFSET): Assign dummy values if these 2 variables are
+	not defined, in order to suppress error message.
+
+	* include/asm-sh/sigcontext.h: Do not include asm/cpu/sigcontext.h.
+	(struct sigcontext): Moved from asm-sh/cpu*/sigcontext.h.
+	* include/asm-sh/cpu-sh2/sigcontext.h,include/asm-sh/cpu-sh3/sigcontext.h,
+	include/asm-sh/cpu-sh4/sigcontext.h: Removed.
+
+2004-04-23  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/boot/compressed/misc.c: New file. Fix for gcc-3.4.
+
+2004-04-21  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* include/asm-sh/user.h: New file. Don't include linux/types.h.
+
+2004-04-15  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/mm/consistent.c: Export consistent_sync.
+
+	* arch/sh/kernel/time.c (time_init): Allow 1% mismatch for auto detected
+	clock frequency.
+
+	* include/asm-sh/serial.h: New file. Remove irq_canonicalize.
+
+	* arch/sh/Makefile: Target 'all' depends on zImage.
+
+2004-04-13  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* drivers/serial/sh-sci.h (SCI_CTRL_FLAGS_REIE): Defined.
+	* drivers/serial/sh-sci.c (sci_er_interrupt): Add handling scif overrun
+	error.
+	(sci_start_rx): Enable Rx error interrupt.
+	(sci_stop_rx): Disable Rx error interrupt.
+
+	* arch/sh/mm/cache-sh4.c (detect_cpu_and_cache_system): Don't force set
+	EMODE before flushing all D-cache. Refer CVR on SH4_501/SH4-202 only.
+	* arch/sh/kernel/cpu/init.c (cache_init): Flush only 1 way if EMODE is
+	not set. Writing 0 to address array is enough for flushing. Force EMODE
+	here (after flushing data cache).
+
+	* include/asm-sh/unistd.h: Include linux/linkage.h.
+
+	* drivers/char/rtc.c: New file. Fix ioctl return code when RTC_IRQ==0.
+
+2004-04-13  Yoshinori Sato  <ysato@users.sourceforge.jp>
+
+	* drivers/serial/Kconfig: New file. Add SERIAL_SH_SCI dependency on
+	H8300.
+	* drivers/serial/sh-sci.h (CPU_SCI_FNS, sci_rxd_in): Fix compilation
+	error.
+	* drivers/serial/sh-sci.c (sci_init_pins_sci, serial_console_setup,
+	sci_transmit_chars, sci_receive_chars, sci_set_termios, sci_init):
+	Fix compilation error on H8300.
+
+2004-04-08  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* include/asm-sh/pgtable.h (__pte_to_swp_entry): Take into account
+	_PAGE_WT bit.
+	(__swp_entry_to_pte, pte_to_pgoff, pgoff_to_pte): Likewise.
+
+2004-03-29  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/mm/consistent.c (consistent_alloc): Fix page freeing logic.
+
+2004-03-26  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/mm/init.c (set_pte_phys): Added.
+	(__set_fixmap): Added. Use set_pte_phys() to set fixmap translation.
+
+	* include/asm-sh/fixmap.h: New file.
+
+	* include/asm-sh/pgtable.h: Adjust VMALLOC_END to play nicely with
+	fixmap. Add PAGE_KERNEL_NOCACHE.
+
+2004-03-21  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Makefile: Remove defconfig- parsing, this is now done in a
+	generic fashion by the top-level Makefile.
+
+	Remove -Os on CONFIG_EMBEDDED, this is now done already by
+	CONFIG_CC_OPTIMIZE_FOR_SIZE.
+
+	* arch/sh/configs/defconfig-%: Renamed to %_defconfig.
+	* arch/sh/configs/dreamcast_defconfig: Update dreamcast defconfig.
+	
+	* Documentation/sh/new-machine.txt: Update notes about defconfigs.
+
+	* arch/sh/Kconfig: Re-order the cpufreq options, move them into their
+	own menu in the same way i386 does.
+
+	* arch/sh/drivers/dma/Kconfig: Place DMA options inside their own menu.
+	* arch/sh/cchips/Kconfig: Likewise.
+
+	* drivers/video/pvr2fb.c (pvr2fb_setcolreg): Work still needs to be
+	done on the hardware palette, use the pseudo_palette as a fallback for
+	16/32bpp modes for the time being (this could be worked around with
+	getcolreg(), but as that's gone now...).
+
+	* drivers/maple/Kconfig: Removed.
+
+	* drivers/input/mouse/maplemouse.c (dc_mouse_connect): init input dev,
+	cleanup compile warnings. Don't use MOD_INC_USE_COUNT.
+	(dc_mouse_disconnect): Don't use MOD_DEC_USE_COUNT.
+
+	* drivers/input/keyboard/maple_keyb.c (dc_kbd_connect): Same as for
+	maplemouse.
+	(dc_kbd_disconnect): Likewise.
+
+	* drivers/input/joystick/maplecontrol.c: Likewise.
+
+	* include/asm-sh/pgtable.h (pgprot_writecombine): Added.
+
+	* drivers/video/fbmem.c (fb_mmap): Add sh as a pgprot_writecombine()
+	user.
+
+2004-03-16  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Add HugeTLB page size selection.
+
+	* arch/sh/mm/Makefile: Add hugetlbpage.o
+	* arch/sh/mm/hugetlbpage.c: Cloned from sparc64.
+	* arch/sh/mm/tlb-sh4.c (update_mmu_cache): Use _PAGE_WT in the
+	CONFIG_SH_WRITETHROUGH case.
+
+	* fs/Kconfig: Add SuperH to the list of platforms that support
+	hugetlbfs.
+
+	* include/asm-sh/page.h: Add huge page support.
+	* include/asm-sh/pgtable.h: Make PAGE_FILE use _PAGE_WT to free
+	up _PAGE_SZ[0-1] bits and add huge page support that makes use
+	of these.
+
+2004-03-15  Andriy Skulysh  <askulysh@image.kiev.ua>
+
+	* arch/sh/boards/hp6xx/hp680/mach.c,
+	arch/sh/boards/hp6xx/hp680/setup.c, arch/sh/cchips/hd6446x/hd64461/io.c,
+	arch/sh/cchips/hd6446x/hd64461/setup.c, arch/sh/kernel/cpu/irq_ipr.c,
+	arch/sh/kernel/sh_ksyms.c, drivers/ide/legacy/ide-cs.c,
+	drivers/input/keyboard/Kconfig, drivers/input/keyboard/Makefile,
+	drivers/input/keyboard/hp600_keyb.c, drivers/input/keyboard/scan_keyb.c,
+	drivers/input/keyboard/scan_keyb.h, drivers/pcmcia/Kconfig,
+	drivers/pcmcia/Makefile, drivers/pcmcia/hd64461_ss.c,
+	drivers/serial/sh-sci.c, drivers/video/hitfb.c,
+	include/asm-sh/cpu-sh3/dac.h, include/asm-sh/hd64461/hd64461.h,
+	include/asm-sh/hd64461/io.h, include/asm-sh/hp6xx/hp6xx.h,
+	include/asm-sh/irq.h, sound/oss/Kconfig, sound/oss/Makefile,
+	sound/oss/sh_dac_audio.c: hp680 updates.
+
+2004-03-13  Peter Garrone  <pgarrone@linuxmail.org>
+
+	* arch/sh/kernel/traps.c (show_stack): Set stack pointer from
+	task structure so that sysrq dumps stack calltrace for each task
+	rather than N repeats of current task.
+
+2004-03-11  Yutaro Ebihara  <ebiharaml@si-linux.com>
+	    Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/kernel/sys_sh.c (arch_get_unmapped_area): #ifdef'ed
+	for HAVE_ARCH_UNMAPPED_AREA.  Speedup searching.
+	* include/asm-sh/cpu-sh3/cacheflush.h (HAVE_ARCH_UNMAPPED_AREA):
+	Define.
+	
+2004-03-11  Paul Mundt  <lethal@linux-sh.org>
+
+	* include/asm-sh/dma-mapping.h (dma_set_mask): Cloned from MIPS.
+	(dma_sync_single_range): Added.
+
+	* arch/sh/boards/adx/Makefile, arch/sh/boards/bigsur/Makefile,
+	arch/sh/boards/cat68701/Makefile, arch/sh/boards/cqreek/Makefile,
+	arch/sh/boards/dmida/Makefile, arch/sh/boards/dreamcast/Makefile,
+	arch/sh/boards/ec3104/Makefile, arch/sh/boards/harp/Makefile,
+	arch/sh/boards/hp6xx/hp620/Makefile, arch/sh/boards/hp6xx/hp680/Makefile,
+	arch/sh/boards/hp6xx/hp690/Makefile, arch/sh/boards/mpc1211/Makefile,
+	arch/sh/boards/overdrive/Makefile, arch/sh/boards/saturn/Makefile,
+	arch/sh/boards/se/770x/Makefile, arch/sh/boards/se/7751/Makefile,
+	arch/sh/boards/sh2000/Makefile, arch/sh/boards/snapgear/Makefile,
+	arch/sh/boards/systemh/Makefile, arch/sh/boards/unknown/Makefile,
+	arch/sh/Kconfig, arch/sh/cchips/hd6446x/hd64461/Makefile,
+	arch/sh/cchips/hd6446x/hd64465/Makefile, arch/sh/kernel/sys_sh.c,
+	drivers/Makefile, drivers/cdrom/Makefile, drivers/char/sh-sci.c,
+	drivers/char/tty_io.c, drivers/ide/pci/alim15x3.c, drivers/ide/Kconfig,
+	drivers/pci/pci.ids, drivers/serial/Makefile, drivers/serial/Kconfig,
+	drivers/video/Makefile, drivers/video/Kconfig, drivers/video/fbmem.c,
+	drivers/Kconfig, include/asm-sh/cache.h, include/asm-sh/hardirq.h,
+	include/asm-sh/kmap_types.h, include/asm-sh/param.h,
+	include/asm-sh/unistd.h, include/linux/pci_ids.h, include/linux/mm.h,
+	include/linux/fb.h, include/linux/serial_core.h, Makefile,
+	mm/memory.c, mm/mmap.c, net/ipv4/ipconfig.c: Merge 2.6.4.
+
+	* arch/sh/drivers/pci/Kconfig: Remove CONFIG_PCI_DMA.
+	* arch/sh/drivers/pci/Makefile: Remove pci-dma.o
+	* arch/sh/drivers/pci/pci-dma.c: Deleted.
+	* arch/sh/drivers/pci/dma-dreamcast.c (pci_alloc_consistent):
+	Renamed to __pci_alloc_consistent().
+	(pci_free_consistent): Renamed to __pci_free_consistent().
+
+	* arch/sh/mm/Makefile: Add consistent.o
+	* arch/sh/mm/consistent.c: New file.
+
+	* include/asm-sh/dma-mapping.h: Implement DMA mapping support using
+	consistent_xxxx() interface.
+	* include/asm-sh/pci.h: Wrap PCI DMA routines to DMA mapping API.
+	
+	* TODO: DMA mapping is done, knock it off the list..
+
+2004-02-28  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/Kconfig: Merged from mainline. Add maple.
+	
+	* drivers/maple/Kconfig: New file.
+
+	* arch/sh/Kconfig: Get rid of the majority of drivers/ sources, use
+	the top-level drivers/Kconfig instead. Move maple definitions out
+	to their own Kconfig.
+
+	* drivers/serial/sh-sci.c (sci_receive_chars): Fixup break_flag
+	references to satisfy SH-3 build.
+
+2004-02-26  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/configs/defconfig-hp680: Update defconfig.
+
+	* arch/sh/cchips/Kconfig: Add CONFIG_HD6446X_SERIES option, make this
+	selectable by anyone instead of relying on individual boards to select.
+
+	* arch/sh/kernel/time.c: Fixup IFC/BFC/STC tables for SH-3.
+	
+	* arch/sh/boards/hp6xx/hp680/setup.c: Include asm/io.h.
+
+	* drivers/video/hitfb.c (hitfb_set_par): Doesn't exist, don't reference
+	it in fb ops.
+
+	* include/asm-sh/dma-mapping.h (dma_alloc_coherent): Added dummy
+	code to satisfy new dmapool interface when CONFIG_PCI=n.
+	(dma_free_coherent): Likewise.
+
+2004-02-24  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/cpu/sh4/sq.c (sq_flush): Fix thinko, addr is input,
+	not output.
+	(sq_flush_range): Fix completion wait, read from P4SEG_STORE_QUE
+	instead of the base address of a given SQ mapping.
+	(__sq_alloc_map): Add 1 to map->size to fix an off by one issue
+	that induced an unhandled address translation fault.
+	(__sq_remap): Revamp locking to be saner for SMP and preempt.
+	Get rid of old page table setup code, setup a SQ VMA instead.
+	(sq_remap): Add sanity checks on phys addr. PAGE_ALIGN() size.
+	(sq_unmap): Get rid of old code that only worked for a single
+	translation, wrap to vfree() instead to undo the work done by
+	remap_area_pages() in __sq_remap().
+
+	* arch/sh/mm/ioremap.c (p3_iounmap): void function doesn't return.
+
+2004-02-22  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/boards/se/770x/io.c (se_insb): Don't use casted object
+	as lvalue.
+	(se_insw, se_outsb, se_outsw): Likewise.
+	* arch/sh/kernel/io.c (memcpy_fromio, memcpy_toio): Likewise.
+	* arch/sh/kernel/module.c (COPY_UNALIGNED_WORD): Likewise.
+
+2004-02-22  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/boards/se/770x/irq.c: Include the correct machine
+	specific header file.
+	* arch/sh/kernel/cf-enabler.c: Likewise.
+	* drivers/net/stnic.c: Likewise.
+
+2004-02-21  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/entry.S (sys_call_table): Kill off .rept usage for
+	padding. Use sys_ni_syscall directly for NR_syscalls.
+
+2004-02-20  Yoshinori Sato  <ysato@users.sourceforge.jp>
+
+	* drivers/char/sh-sci.c (sci_request_irq): Don't reference
+	sci_br_interrupt on SCI_ONLY systems.
+
+2004-02-20  Yutaro Ebihara  <ebiharaml@si-linux.com>
+
+	* arch/sh/mm/init.c (mem_init): Set max_mapnr and num_physpages
+	correctly.
+
+2004-02-19  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/char/watchdog/shwdt.c (sh_wdt_init): Fix build error.
+	* drivers/serial/sh-sci.h: Move PORT_SCI/SCIF/IRDA definitions ..
+
+	* include/linux/serial_core.h: .. here.
+
+	* include/asm-sh/pci.h (pci_map_page, pci_unmap_page): Added.
+
+	* arch/sh/drivers/pci/Kconfig: Set CONFIG_SH_PCIDMA_NONCOHERENT by
+	default.
+	* arch/sh/mm/extable.c (search_extable): Deleted. We use the generic
+	one instead.
+
+	* drivers/serial/sh-sci.[ch]: Add h8 support.
+
+2004-02-19  Peter Garrone  <pgarrone@linuxmail.org>
+
+	* drivers/serial/sh-sci.c, drivers/serial/sh-sci.h: Fix rx interrupt
+	and sysrq handling.
+
+2004-02-19  Paul Mundt  <lethal@linux-sh.org>
+	    Richard Curnow  <richard.curnow@superh.com>
+
+	* arch/sh/mm/cache-sh4.c (detect_cpu_and_cache_system): Add effective
+	CCN CVR probing so that the way_shift/entry_mask/sets are probed
+	from CVR.ICS/CVR.OCS at run-time on anything that isn't a direct-mapped
+	cache.
+
+	* include/asm-sh/processor.h: Define CCN_CVR.
+
+2004-02-19  SUGIOKA Toshinobu  <sugioka@itonet.co.jp>
+
+	* arch/sh/mm/cache-sh4.c (flush_cache_range): Fix pte-table boundary
+	check logic.
+	(detect_cpu_and_cache_system): Don't set CPU_HAS_P2_FLUSH_BUG for
+	SH7750R.
+
+2004-02-18  Paul Mundt  <lethal@linux-sh.org>
+
+	* Makefile, arch/sh/Kconfig, drivers/char/Makefile,
+	drivers/char/keyboard.c, drivers/char/tty_io.c,
+	drivers/char/watchdog/shwdt.c, drivers/ide/Kconfig,
+	drivers/ide/pci/alim15x3.c, drivers/net/8139too.c,
+	drivers/net/stnic.c, drivers/pci/pci.ids, drivers/video/Kconfig,
+	drivers/video/Makefile, drivers/video/fbmem.c, fs/nfs/inode.c,
+	include/asm-sh/io.h, include/asm-sh/pci.h, include/linux/fb.h,
+	include/linux/input.h, include/linux/mm.h, include/linux/pci_ids.h,
+	mm/memory.c: Merge 2.6.3.
+
+2004-02-10  Yoshinori Sato  <ysato@users.sourceforge.jp>
+
+	* drivers/char/sh-sci.c, drivers/char/sh-sci.h: Add H8/300 support.
+
+2004-02-06  Kaz Kojima  <kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/kernel/process.c (copy_thread): Don't clear TIF_USEDFPU
+	here.
+
+	* include/asm-sh/signal.h: Hide kernel stuff from userland.
+
+2004-02-04  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig, drivers/char/keyboard.c, drivers/char/Makefile,
+	drivers/char/sysrq.c, drivers/char/tty_io.c,
+	drivers/char/watchdog/shwdt.c, drivers/ide/Kconfig,
+	drivers/input/keyboard/maple_keyb.c, drivers/net/8139too.c,
+	drivers/pci/pci.ids, drivers/serial/Kconfig, drivers/video/Makefile,
+	drivers/video/Kconfig, drivers/video/fbmem.c, fs/nfs/inode.c,
+	include/asm-sh/byteorder.h, include/asm-sh/floppy.h,
+	include/asm-sh/pgtable.h, include/asm-sh/smp.h,
+	include/asm-sh/spinlock.h, include/linux/miscdevice.h,
+	include/linux/input.h, include/linux/pci_ids.h, include/linux/mm.h,
+	Makefile, mm/memory.c, mm/mmap.c, mm/msync.c: Merge 2.6.2.
+
+2004-02-01  Andriy Skulysh  <askulysh@image.kiev.ua>
+
+	* drivers/video/hitfb.c (hitfb_set_base, hitfb_accel_wait,
+	hitfb_accel_start, hitfb_accel_set_dest, hitfb_accel_solidfill,
+	hitfb_accel_bitblt, hitfb_fillrect, hitfb_copyarea,
+	hitfb_pan_display, hitfb_blank): Add hitfb acceleration.
+	
+	* arch/sh/boards/hp6xx/hp680/setup.c: Added.
+
+	* arch/sh/cchips/hd6446x/hd64461/io.c (hd64461_insb,
+	hd64461_insw, hd64461_insl, hd64461_outsb, hd64461_outsw,
+	hd64461_outsl): Added.
+
+	* arch/sh/configs/defconfig-hp680: Added.
+
+	* include/asm-sh/hd64461/hd64461.h: Add definitions.
+	* include/asm-sh/hd64461/io.h: Add io definitions.
+
+2004-02-01  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/video/pvr2fb.c (pvr2fb_check_var): Fix typo in pixclock
+	verification. Clean up FB_SYNC_BROADCAST mess being set even with
+	VO_VGA. And finally, don't clobber the margins when being invoked
+	through __fb_try_mode().
+	(pvr2fb_common_init): Use fb_memset() instead of memset_io().
+	We always have 256 cmap entries, alloc accordingly.
+
+	* drivers/video/hitfb.c (hitfb_init): Move color bitfield setting ..
+	(hitfb_check_var): here.
+
+	Also get rid of hd64461_xxx() IO routine usage, use fb_readX/writeX()
+	instead, use the generic routines outright, and take care of the
+	port2mem issues in the board setup code.
+
+	* drivers/video/Makefile: Yank cfbcopyarea.o from the hitfb objs,
+	we don't use it anymore.
+
+	* arch/sh/boards/hp6xx/hp680/setup.c (platform_setup): Setup the
+	io port base, use generic io routines.
+
+2004-01-18  Paul Mundt  <lethal@linux-sh.org>
+
+	* include/linux/fb.h: Merged from stock 2.6.1. Add sh to the list of
+	platforms to wrap fb_xxx to __raw_xxx.
+
+2004-01-12  Kaz Kojima	<kkojima@rr.iij4u.or.jp>
+
+	* arch/sh/kernel/signal.c (handle_signal): Disable interrupts
+	in gUSA handling when enabling preemption.
+	* arch/sh/kernel/process.c (__switch_to): Do gUSA handling
+	when enabling preemption.
+	* arch/sh/kernel/entry.S: Jump to resume_userspace if it's
+	return to user space also in preemption case.  Don't use short
+	branches with far labels to avoid the assembler warnings.
+	Correct the condition for exception path.
+
+2004-01-12  SUGIOKA Toshinobu <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/cpu/sh4/fpu.c (save_fpu): Clear PF_USEDFPU before
+	saving fpu to avoid fpscr corruption while preemption.
+	* arch/sh/kernel/process.c (copy_thread): Remove setting SR_FD
+	already done in unlazy_fpu.
+
+2004-01-12  SUGIOKA Toshinobu <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/entry.S (restore_all): Don't inherit current FD-bit,
+	resotore saved FD-bit instead.
+	(handle_exception): Set FD-bit when entering kernel.
+	* arch/sh/kernel/cpu/sh4/fpu.c (save_fpu): Add 2nd argument 'regs'.
+	Reset FD-bit while fpu proccesing. Add 'regs' parameter for
+	release_fpu.
+	(restore_fpu): Reset FD-bit while fpu proccesing.
+	(fpu_init): Likewise.
+	(do_fpu_error): Add 'regs' parameter for save_fpu.
+	(do_fpu_state_restore): Add 'regs' parameter for grab_fpu.
+	* arch/sh/kernel/process.c (flush_thread):  Add 'regs' parameter for
+	clear_fpu.
+	(dump_fpu): Add 'regs' parameter for unlazy_fpu.
+	(copy_thread): Likewise.
+	(__switch_to): Likewise.
+	* arch/sh/kernel/signal.c (save_sigcontext_fpu): Add 'regs' argument.
+	Add 'regs' parameter for unlazy_fpu.
+	(restore_sigcontext):  Add 'regs' parameter for clear_fpu.
+	(setup_sigcontext): Add 'regs' parameter for save_sigcontext_fpu.
+	* arch/sh/kernel/cpu/init.c (sh_cpu_init): Use disable_fpu instead
+	of release_fpu.
+	* include/asm-sh/processor.h: Include asm/ptrace.h for struct pt_regs.
+	(start_thread): Set FD bit.
+	(enable_fpu): New function.
+	(disable_fpu): New function.
+	(release_fpu):  Set FD-bit of saved SR instead of current SR.
+	(grub_fpu): Clear FD-bit of saved SR instead of current SR.
+	(unlazy_fpu): Add 'regs' argument. Pass 'regs' to save_fpu.
+	(clear_fpu): Add 'regs' argument. Pass 'regs' to release_fpu.
+	* include/asm-sh/ptrace.h: Don't include asm/processor.h
+
+2004-01-12  SUGIOKA Toshinobu <sugioka@itonet.co.jp>
+
+	* arch/sh/kernel/cpu/rtc.c (sh_rtc_gettimeofday): Don't call
+	schedule_timeout. Re-read RTC registers if MSB of R64CNT was changed
+	while reading them on SH-4 which has unreliable CF bit. Reduce
+	interrupt disabled area.
+
+2004-01-12  Masaki Saitoh <masaki-saitoh@aandd.co.jp>
+
+	* arch/sh/kernel/cpu/rtc.c (sh_rtc_gettimeofday): Protect RTC
+	from interrupt.
+	(sh_rtc_settimeofday): Likewise.
+	* arch/sh/kernel/irq.c (do_IRQ): Prevent any preemption while
+	the handler called.
+
+2004-01-12  SUGIOKA Toshinobu <sugioka@itonet.co.jp>
+
+	* arch/sh/mm/fault.c (update_mmu_cache): Protect __flush_tlb_page
+	from interrupt.
+
+2004-01-09  Paul Mundt  <lethal@linux-sh.org>
+
+	* Makefile, arch/sh/Kconfig, arch/sh/kernel/irq.c,
+	drivers/char/keyboard.c, drivers/ide/Kconfig,
+	drivers/mtd/chips/jedec_probe.c, drivers/net/8139too.c,
+	drivers/pci/pci.ids, include/linux/input.h, include/linux/mm.h,
+	include/linux/pci_ids.h, mm/memory.c, mm/mmap.c: Merge 2.6.1.
+
+2004-01-08  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/video/Kconfig: Drop CONFIG_FB_PVR2_DEBUG, we use the
+	standard pr_debug() facility these days.
+	* drivers/video/pvr2fb.c (pvr2fb_write): Cleanup return semantics.
+	We manually need to page_cache_release() each pinned page, regardless
+	of whether we get everything we asked for or not.
+
+2004-01-07  Paul Mundt  <lethal@linux-sh.org>
+
+	* drivers/video/pvr2fb.c (pvr2fb_write): If we get a contiguous
+	region from get_user_pages(), do the write in one giant transfer.
+	Kill the flush_dcache_page(), this is already done in generic code.
+	(pvr2fb_init): Fix allocation typo, make sure we allocate the
+	proper size.. this was inadvertently trampling the cmap.
+	(pvr2fb_common_init): Actually allocate the cmap by way of
+	fb_alloc_cmap().
+
+2004-01-04  Paul Mundt  <lethal@linux-sh.org>
+
+	* scripts/treelink.sh, scripts/treeunlink.sh: Add arch and BK dirs
+	to the prune list.
+
diff -ruN linux-2.6.17-vanilla/ChangeLog-2005 linux-2.6.17/ChangeLog-2005
--- linux-2.6.17-vanilla/ChangeLog-2005	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/ChangeLog-2005	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,162 @@
+2005-10-31  Andriy Skulysh <askulysh@image.kiev.ua>
+
+	Hitfb update. 
+	
+	* drivers/video/hitfb.c: Fix pannig and bitblt.
+	(hitfb_sync): New function. 
+	(hitfb_check_var): New function. 
+	(hitfb_set_par): New function. 
+	* drivers/video/backlight/hp680_bl.c: Use platform device id -1.
+
+2005-08-22  Andriy Skulysh <askulysh@image.kiev.ua>
+
+	Add SH3 DMA support.
+	
+	* include/asm-sh/cpu-sh3/dma-sh.h: New file.
+	* include/asm-sh/cpu-sh4/dma-sh.h: New file.
+	* arch/sh/drivers/dma/dma-sh.c: Add SH3 DMA.
+	* arch/sh/drivers/dma/dma-sh.h: Likewise.
+	* include/asm-sh/cpu-sh3/dma.h: Likewise.
+	* include/asm-sh/dma.h: Likewise.
+
+2005-08-15  Andriy Skulysh <askulysh@image.kiev.ua>
+
+	Fix bug in hd64461 pcmcia module.
+	
+	* drivers/pcmcia/hd64461_ss.c: Better init procedure.
+	* arch/sh/boards/hp6xx/setup.c: Disable hd64461 pcmcia and DAC at boot.
+
+2005-07-25  SUGIOKA Toshinobu <sugioka@itonet.co.jp>
+
+	* arch/sh/lib/memset.S (memset): Correct 2nd argument handling.
+
+2005-06-15  Andriy Skulysh <askulysh@image.kiev.ua>
+
+	Add linux backlight support for HP Jornada 680.
+	
+	* drivers/video/hitfb.c: Remove jornada's backlight stuff.
+	* drivers/video/backlight/Makefile: New file.
+	* drivers/video/backlight/Kconfig: New file.
+	* drivers/video/backlight/hp680_bl.c: New file.
+
+2005-06-10  Andriy Skulysh <askulysh@image.kiev.ua>
+
+	Add sh7709 clock support.
+
+	* arch/sh/kernel/cpu/clock.c: Propagate bus clock.
+	* arch/sh/kernel/cpu/sh3/clock-sh7709.c: New file.
+	* arch/sh/kernel/cpu/sh3/Makefile: Add clock-sh7709.o.
+	* sound/oss/sh_dac_audio.c: Update to clock framework.
+
+2005-06-10  Andriy Skulysh <askulysh@image.kiev.ua>
+
+	Fix hp6xx changes. Split HP600 keyboard routine for 620 and 680/690. 
+
+	* include/asm-sh/irq.h: Fix hp6xx changes.
+	* drivers/input/touchscreen/Kconfig: Likewise.
+	* drivers/video/hitfb.c: HP690 seems to have only 512 Kb video memory.
+	* drivers/input/keyboard/hp620_keyb.c: New file.
+	* drivers/input/keyboard/hp680_keyb.c: New file.
+	* drivers/input/keyboard/hp600_keyb.c: Removed file.
+	* drivers/input/keyboard/Makefile: Split update.
+	* drivers/input/keyboard/Kconfig: Split update.
+
+2005-05-21  Paul Mundt  <lethal@linux-sh.org>
+
+	Patches from Hosokawa-san <hosokawa@ace-jp.com>:
+
+	* drivers/char/Makefile: Add rtc9701_rtc rule that was dropped.
+	* drivers/char/rtc9701_rtc.c: Update rtc_lock definition.
+	(rtc9701_rtc_interrupt): Modify for irqreturn_t type.
+
+2005-03-26  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/Kconfig: Make TMU selectable (CONFIG_SH_TMU).
+	Drop CONFIG_SH_PCLK_CALC, we make this the default if we
+	have an RTC and no set PCLK value.
+
+	* arch/sh/boards/overdrive/Makefile: Drop time.o
+	* arch/sh/boards/overdrive/time.c: Deleted.
+	* arch/sh/boards/overdrive/setup.c (platform_setup): Drop
+	od_time_init usage, rely on the clock framework instead.
+
+	* arch/sh/kernel/Makefile: Add timers/
+	* arch/sh/kernel/time.c: Rip out clock and TMU code.
+	* arch/sh/kernel/setup.c: Remove clock reporting, use the generic
+	show_clocks() provided by the clock framework instead.
+
+	* arch/sh/kernel/timers/timer.c: New file, common bits for timer
+	framework.
+	* arch/sh/kernel/timers/timer-tmu.c: Move TMU system timer code
+	here, hook into common timer framework.
+
+	* arch/sh/kernel/cpu/Makefile: Add clock.o
+	* arch/sh/kernel/cpu/clock.c: New file, adding clock framework.
+
+	* arch/sh/kernel/cpu/sh3/Makefile: Add clock support.
+	* arch/sh/kernel/cpu/sh3/clock-sh3.c,
+	  arch/sh/kernel/cpu/sh3/clock-sh7300.c,
+	  arch/sh/kernel/cpu/sh3/clock-sh7705.c: SH-3 clock support.
+
+	* arch/sh/kernel/cpu/sh4/Makefile: Add clock support.
+	* arch/sh/kernel/cpu/sh4/clock-sh4-202.c,
+	  arch/sh/kernel/cpu/sh4/clock-sh4.c,
+	  arch/sh/kernel/cpu/sh4/clock-sh73180.c: SH-4 clock support.
+
+	* drivers/serial/sh-sci.c: Update for clock framework.
+	* drivers/serial/sh-sci.h: Likewise.
+
+	* include/asm-sh/clock.h: New file for clock framework.
+	* include/asm-sh/timer.h: New file for timer framework.
+
+	* include/asm-sh/freq.h: Remove unused cruft.
+	* include/asm-sh/processor.h: Remove clocks from struct sh_cpuinfo.
+
+	* include/asm-sh/timex.h: Update CLOCK_TICK_RATE to match HZ.
+
+2005-03-10 Andriy Skulysh <askulysh@image.kiev.ua>
+
+	* drivers/pcmcia/hd64461_ss.c (hd64461_init_soket): Update 
+	for 2.6.11.
+
+2005-03-06  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/mm/cache-sh4.c (flush_cache_range): page align the
+	end address, this was causing an unaligned fault in some cases.
+
+	Also check the size of the range, of the range >= 64 pages,
+	just purge the entire dcache instead of manually walking the
+	page tables and checking for aliases. This gives a noticeable
+	performance win, as per sh64.
+
+2005-03-02  Paul Mundt  <lethal@linux-sh.org>
+
+	Merge 2.6.11.
+
+	* TODO: Get rid of the in-kernel TODO list, we will use the wiki
+	instead.
+	
+	* arch/sh/configs/*_defconfig: Update for 2.6.11.
+
+2005-02-02  Kristoffer Ericson  <kristoffer@jlime.com>
+
+	* arch/sh/boards/hp6xx/hp620/Makefile: Add setup.o rule.
+	* arch/sh/boards/hp6xx/hp620/setup.c: New file adding hp620 setup
+	code (cloned from hp680 with some minor modification).
+
+2005-02-01  Kristoffer Ericson  <kristoffer@jlime.com>
+
+	* drivers/pcmcia/hd64461_ss.c (hd64461_set_mem_map): Fix build problem
+	with start address.
+
+2005-01-31  Paul Mundt  <lethal@linux-sh.org>
+
+	* arch/sh/kernel/cpufreq.c (sh_cpufreq_setstate): Update for cpumask
+	changes.
+
+2005-01-31  Paul Mundt  <lethal@linux-sh.org>
+	    Christoph Hellwig <hch@lst.de>
+
+	* arch/sh/Kconfig, arch/sh/kernel/irq.c, include/asm-sh/hardirq.h:
+	Patch from Christoph Hellwig implementing generic hardirq support.
+	Initial testing done by Tom Rini on SE7750.
diff -ruN linux-2.6.17-vanilla/Documentation/CVS/Entries linux-2.6.17/Documentation/CVS/Entries
--- linux-2.6.17-vanilla/Documentation/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/Documentation/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+D/sh////
diff -ruN linux-2.6.17-vanilla/Documentation/CVS/Repository linux-2.6.17/Documentation/CVS/Repository
--- linux-2.6.17-vanilla/Documentation/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/Documentation/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/Documentation
diff -ruN linux-2.6.17-vanilla/Documentation/CVS/Root linux-2.6.17/Documentation/CVS/Root
--- linux-2.6.17-vanilla/Documentation/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/Documentation/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/Documentation/sh/CVS/Entries linux-2.6.17/Documentation/sh/CVS/Entries
--- linux-2.6.17-vanilla/Documentation/sh/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/Documentation/sh/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,4 @@
+/kgdb.txt/1.2/Fri Nov  1 17:19:12 2002//
+/new-machine.txt/1.6/Sun Jan 15 17:32:05 2006//
+/register-banks.txt/1.1/Sat Jan  7 20:22:21 2006//
+D
diff -ruN linux-2.6.17-vanilla/Documentation/sh/CVS/Repository linux-2.6.17/Documentation/sh/CVS/Repository
--- linux-2.6.17-vanilla/Documentation/sh/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/Documentation/sh/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/Documentation/sh
diff -ruN linux-2.6.17-vanilla/Documentation/sh/CVS/Root linux-2.6.17/Documentation/sh/CVS/Root
--- linux-2.6.17-vanilla/Documentation/sh/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/Documentation/sh/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/Documentation/sh/new-machine.txt linux-2.6.17/Documentation/sh/new-machine.txt
--- linux-2.6.17-vanilla/Documentation/sh/new-machine.txt	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/Documentation/sh/new-machine.txt	2006-07-12 16:54:19.000000000 +0000
@@ -41,11 +41,6 @@
         |
 	.. more boards here ...
 
-It should also be noted that each board is required to have some certain
-headers. At the time of this writing, io.h is the only thing that needs
-to be provided for each board, and can generally just reference generic
-functions (with the exception of isa_port2addr).
-
 Next, for companion chips:
 .
 `-- arch
@@ -104,12 +99,13 @@
 Both the Solution Engine and the hp6xx boards are an example of this.
 
 After you have setup your new arch/sh/boards/ directory, remember that you
-also must add a directory in include/asm-sh for headers localized to this
-board. In order to interoperate seamlessly with the build system, it's best
-to have this directory the same as the arch/sh/boards/ directory name,
-though if your board is again part of a family, the build system has ways
-of dealing with this, and you can feel free to name the directory after
-the family member itself.
+should also add a directory in include/asm-sh for headers localized to this
+board (if there are going to be more than one). In order to interoperate
+seamlessly with the build system, it's best to have this directory the same
+as the arch/sh/boards/ directory name, though if your board is again part of
+a family, the build system has ways of dealing with this (via incdir-y
+overloading), and you can feel free to name the directory after the family
+member itself.
 
 There are a few things that each board is required to have, both in the
 arch/sh/boards and the include/asm-sh/ heirarchy. In order to better
@@ -122,6 +118,7 @@
  * arch/sh/boards/vapor/setup.c - Setup code for imaginary board
  */
 #include <linux/init.h>
+#include <asm/rtc.h> /* for board_time_init() */
 
 const char *get_system_type(void)
 {
@@ -152,79 +149,57 @@
 }
 
 Our new imaginary board will also have to tie into the machvec in order for it
-to be of any use. Currently the machvec is slowly on its way out, but is still
-required for the time being. As such, let us take a look at what needs to be
-done for the machvec assignment.
+to be of any use. 
 
 machvec functions fall into a number of categories:
 
  - I/O functions to IO memory (inb etc) and PCI/main memory (readb etc).
- - I/O remapping functions (ioremap etc)
- - some initialisation functions
- - a 'heartbeat' function
- - some miscellaneous flags
-
-The tree can be built in two ways:
- - as a fully generic build. All drivers are linked in, and all functions
-   go through the machvec
- - as a machine specific build. In this case only the required drivers
-   will be linked in, and some macros may be redefined to not go through
-   the machvec where performance is important (in particular IO functions).
-
-There are three ways in which IO can be performed:
- - none at all. This is really only useful for the 'unknown' machine type,
-   which us designed to run on a machine about which we know nothing, and
-   so all all IO instructions do nothing.
- - fully custom. In this case all IO functions go to a machine specific
-   set of functions which can do what they like
- - a generic set of functions. These will cope with most situations,
-   and rely on a single function, mv_port2addr, which is called through the
-   machine vector, and converts an IO address into a memory address, which
-   can be read from/written to directly.
-
-Thus adding a new machine involves the following steps (I will assume I am
-adding a machine called vapor):
+ - I/O mapping functions (ioport_map, ioport_unmap, etc).
+ - a 'heartbeat' function.
+ - PCI and IRQ initialization routines.
+ - Consistent allocators (for boards that need special allocators,
+   particularly for allocating out of some board-specific SRAM for DMA
+   handles).
+
+There are machvec functions added and removed over time, so always be sure to
+consult include/asm-sh/machvec.h for the current state of the machvec.
+
+The kernel will automatically wrap in generic routines for undefined function
+pointers in the machvec at boot time, as machvec functions are referenced
+unconditionally throughout most of the tree. Some boards have incredibly
+sparse machvecs (such as the dreamcast and sh03), whereas others must define
+virtually everything (rts7751r2d).
+
+Adding a new machine is relatively trivial (using vapor as an example):
+
+If the board-specific definitions are quite minimalistic, as is the case for
+the vast majority of boards, simply having a single board-specific header is
+sufficient.
 
- - add a new file include/asm-sh/vapor/io.h which contains prototypes for
+ - add a new file include/asm-sh/vapor.h which contains prototypes for
    any machine specific IO functions prefixed with the machine name, for
    example vapor_inb. These will be needed when filling out the machine
    vector.
 
-   This is the minimum that is required, however there are ample
-   opportunities to optimise this. In particular, by making the prototypes
-   inline function definitions, it is possible to inline the function when
-   building machine specific versions. Note that the machine vector
-   functions will still be needed, so that a module built for a generic
-   setup can be loaded.
-
- - add a new file arch/sh/boards/vapor/mach.c. This contains the definition
-   of the machine vector. When building the machine specific version, this
-   will be the real machine vector (via an alias), while in the generic
-   version is used to initialise the machine vector, and then freed, by
-   making it initdata. This should be defined as:
-
-     struct sh_machine_vector mv_vapor __initmv = {
-       .mv_name = "vapor",
-     }
-     ALIAS_MV(vapor)
-
- - finally add a file arch/sh/boards/vapor/io.c, which contains
-   definitions of the machine specific io functions.
-
-A note about initialisation functions. Three initialisation functions are
-provided in the machine vector:
- - mv_arch_init - called very early on from setup_arch
- - mv_init_irq - called from init_IRQ, after the generic SH interrupt
-   initialisation
- - mv_init_pci - currently not used
-
-Any other remaining functions which need to be called at start up can be
-added to the list using the __initcalls macro (or module_init if the code
-can be built as a module). Many generic drivers probe to see if the device
-they are targeting is present, however this may not always be appropriate,
-so a flag can be added to the machine vector which will be set on those
-machines which have the hardware in question, reducing the probe to a
-single conditional.
+   Note that these prototypes are generated automatically by setting
+   __IO_PREFIX to something sensible. A typical example would be:
+
+	#define __IO_PREFIX vapor
+   	#include <asm/io_generic.h>
+
+   somewhere in the board-specific header. Any boards being ported that still
+   have a legacy io.h should remove it entirely and switch to the new model.
+
+ - Add machine vector definitions to the board's setup.c. At a bare minimum,
+   this must be defined as something like:
+
+	struct sh_machine_vector mv_vapor __initmv = {
+		.mv_name = "vapor",
+	};
+	ALIAS_MV(vapor)
+
+ - finally add a file arch/sh/boards/vapor/io.c, which contains definitions of
+   the machine specific io functions (if there are enough to warrant it).
 
 3. Hooking into the Build System
 ================================
@@ -303,4 +278,3 @@
 oldconfig (prompting you for any new options since the time of creation),
 and start you on your way to having a functional kernel for your new
 board.
-
diff -ruN linux-2.6.17-vanilla/Documentation/sh/register-banks.txt linux-2.6.17/Documentation/sh/register-banks.txt
--- linux-2.6.17-vanilla/Documentation/sh/register-banks.txt	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/Documentation/sh/register-banks.txt	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,33 @@
+	Notes on register bank usage in the kernel
+	==========================================
+
+Introduction
+------------
+
+The SH-3 and SH-4 CPU families traditionally include a single partial register
+bank (selected by SR.RB, only r0 ... r7 are banked), whereas other families
+may have more full-featured banking or simply no such capabilities at all.
+
+SR.RB banking
+-------------
+
+In the case of this type of banking, banked registers are mapped directly to
+r0 ... r7 if SR.RB is set to the bank we are interested in, otherwise ldc/stc
+can still be used to reference the banked registers (as r0_bank ... r7_bank)
+when in the context of another bank. The developer must keep the SR.RB value
+in mind when writing code that utilizes these banked registers, for obvious
+reasons. Userspace is also not able to poke at the bank1 values, so these can
+be used rather effectively as scratch registers by the kernel.
+
+Presently the kernel uses several of these registers.
+
+	- r0_bank, r1_bank (referenced as k0 and k1, used for scratch
+	  registers when doing exception handling).
+	- r2_bank (used to track the EXPEVT/INTEVT code)
+		- Used by do_IRQ() and friends for doing irq mapping based off
+		  of the interrupt exception vector jump table offset
+	- r6_bank (global interrupt mask)
+		- The SR.IMASK interrupt handler makes use of this to set the
+		  interrupt priority level (used by local_irq_enable())
+	- r7_bank (current)
+
diff -ruN linux-2.6.17-vanilla/Makefile linux-2.6.17/Makefile
--- linux-2.6.17-vanilla/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/Makefile	2006-07-12 16:54:19.000000000 +0000
@@ -172,7 +172,7 @@
 # Default value for CROSS_COMPILE is not to prefix executables
 # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
 
-ARCH		?= $(SUBARCH)
+ARCH		?= sh
 CROSS_COMPILE	?=
 
 # Architecture as present in compile.h
diff -ruN linux-2.6.17-vanilla/arch/CVS/Entries linux-2.6.17/arch/CVS/Entries
--- linux-2.6.17-vanilla/arch/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+D/sh////
diff -ruN linux-2.6.17-vanilla/arch/CVS/Repository linux-2.6.17/arch/CVS/Repository
--- linux-2.6.17-vanilla/arch/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/arch
diff -ruN linux-2.6.17-vanilla/arch/CVS/Root linux-2.6.17/arch/CVS/Root
--- linux-2.6.17-vanilla/arch/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/CVS/Entries linux-2.6.17/arch/sh/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,14 @@
+/Kconfig.debug/1.4/Mon Jan 30 16:05:57 2006/-ko/
+D/boards////
+D/boot////
+D/cchips////
+D/configs////
+D/drivers////
+D/kernel////
+D/lib////
+D/mm////
+D/oprofile////
+D/tools////
+/Kconfig/1.100/Wed Jul 12 16:51:50 2006/-ko/
+/Makefile/1.65/Wed Jul 12 16:51:50 2006/-ko/
+D/math-emu////
diff -ruN linux-2.6.17-vanilla/arch/sh/CVS/Repository linux-2.6.17/arch/sh/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh
diff -ruN linux-2.6.17-vanilla/arch/sh/CVS/Root linux-2.6.17/arch/sh/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/Kconfig linux-2.6.17/arch/sh/Kconfig
--- linux-2.6.17-vanilla/arch/sh/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/Kconfig	2006-07-12 16:54:19.000000000 +0000
@@ -255,7 +255,7 @@
 	  value on any of the known systems will only lead to disaster.
 
 config MEMORY_SIZE
-	hex "Physical memory size"
+	hex "Physical memory size" 
 	default "0x00400000"
 	help
 	  This sets the default memory size assumed by your SH kernel. It can
@@ -335,10 +335,19 @@
 	default y
 	help
 	  Selecting this option will enable support for SH processors that
-	  have FPU units (ie, SH77xx).
+	  have FPU units (ie, SH77xx). 
 
 	  This option must be set in order to enable the FPU.
 
+config SH_FPU_EMU
+	bool "FPU emulation support"
+	depends on !SH_FPU && EXPERIMENTAL
+	default n
+	help
+	  Selecting this option will enable support for software FPU emulation.
+	  Most SH-3 users will want to say Y here, whereas most SH-4 users will
+	  want to say N.
+
 config SH_DSP
 	bool "DSP support"
 	depends on !CPU_SH4
@@ -400,9 +409,11 @@
 
 endmenu
 
-#source "arch/sh/boards/renesas/hs7751rvoip/Kconfig"
+source "arch/sh/boards/renesas/hs7751rvoip/Kconfig"
+
+source "arch/sh/boards/renesas/rts7751r2d/Kconfig"
 
-#source "arch/sh/boards/renesas/rts7751r2d/Kconfig"
+source "arch/sh/boards/renesas/r7780rp/Kconfig"
 
 config SH_PCLK_FREQ
 	int "Peripheral clock frequency (in Hz)"
@@ -454,7 +465,7 @@
 
 config ISA_DMA_API
 	bool
-	depends on SH_MPC1211
+	depends on MPC1211
 	default y
 
 menu "Kernel features"
@@ -636,6 +647,16 @@
 
 endmenu
 
+menu "Power management options (EXPERIMENTAL)"
+depends on EXPERIMENTAL
+
+source kernel/power/Kconfig
+
+config APM
+	bool "Advanced Power Management Emulation"
+	depends on PM
+endmenu
+
 source "net/Kconfig"
 
 source "drivers/Kconfig"
diff -ruN linux-2.6.17-vanilla/arch/sh/Kconfig.debug linux-2.6.17/arch/sh/Kconfig.debug
--- linux-2.6.17-vanilla/arch/sh/Kconfig.debug	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/Kconfig.debug	2006-07-12 16:54:21.000000000 +0000
@@ -32,6 +32,7 @@
 
 config KGDB
 	bool "Include KGDB kernel debugger"
+	select FRAME_POINTER
 	help
 	  Include in-kernel hooks for kgdb, the Linux kernel source level
 	  debugger.  See <http://kgdb.sourceforge.net/> for more information.
@@ -112,13 +113,4 @@
 
 endmenu
 
-config FRAME_POINTER
-	bool "Compile the kernel with frame pointers"
-	default y if KGDB
-	help
-	  If you say Y here the resulting kernel image will be slightly larger
-	  and slower, but it will give very useful debugging information.
-	  If you don't debug the kernel, you can say N, but we may not be able
-	  to solve problems without frame pointers.
-
 endmenu
diff -ruN linux-2.6.17-vanilla/arch/sh/Makefile linux-2.6.17/arch/sh/Makefile
--- linux-2.6.17-vanilla/arch/sh/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/Makefile	2006-07-12 16:54:19.000000000 +0000
@@ -79,6 +79,7 @@
 LIBGCC := $(shell $(CC) $(CFLAGS) -print-libgcc-file-name)
 
 core-y				+= arch/sh/kernel/ arch/sh/mm/
+core-$(CONFIG_SH_FPU_EMU)	+= arch/sh/math-emu/
 
 # Boards
 machdir-$(CONFIG_SH_SOLUTION_ENGINE)		:= se/770x
@@ -104,16 +105,14 @@
 machdir-$(CONFIG_SH_RTS7751R2D)			:= renesas/rts7751r2d
 machdir-$(CONFIG_SH_7751_SYSTEMH)		:= renesas/systemh
 machdir-$(CONFIG_SH_EDOSK7705)			:= renesas/edosk7705
+machdir-$(CONFIG_SH_R7780RP)			:= renesas/r7780rp
 machdir-$(CONFIG_SH_SH4202_MICRODEV)		:= superh/microdev
+machdir-$(CONFIG_SH_LANDISK)			:= landisk
+machdir-$(CONFIG_SH_TITAN)			:= titan
 machdir-$(CONFIG_SH_UNKNOWN)			:= unknown
 
 incdir-y			:= $(notdir $(machdir-y))
-
-incdir-$(CONFIG_SH_SOLUTION_ENGINE)		:= se
-incdir-$(CONFIG_SH_7751_SOLUTION_ENGINE)	:= se7751
-incdir-$(CONFIG_SH_7300_SOLUTION_ENGINE)        := se7300
-incdir-$(CONFIG_SH_73180_SOLUTION_ENGINE)	:= se73180
-incdir-$(CONFIG_SH_HP600)			:= hp6xx
+incdir-$(CONFIG_SH_HP6XX)			:= hp6xx
 
 ifneq ($(machdir-y),)
 core-y				+= arch/sh/boards/$(machdir-y)/
@@ -137,17 +136,14 @@
 
 CPPFLAGS_vmlinux.lds := -traditional
 
-ifneq ($(KBUILD_SRC),)
 incdir-prefix	:= $(srctree)/include/asm-sh/
-else
-incdir-prefix	:=
-endif
 
 #	Update machine arch and proc symlinks if something which affects
 #	them changed.  We use .arch and .mach to indicate when they were
 #	updated last, otherwise make uses the target directory mtime.
 
-include/asm-sh/.cpu: $(wildcard include/config/cpu/*.h) include/config/MARKER
+include/asm-sh/.cpu: $(wildcard include/config/cpu/*.h) \
+		     include/config/MARKER FORCE
 	@echo '  SYMLINK include/asm-sh/cpu -> include/asm-sh/$(cpuincdir-y)'
 	$(Q)if [ ! -d include/asm-sh ]; then mkdir -p include/asm-sh; fi
 	$(Q)ln -fsn $(incdir-prefix)$(cpuincdir-y) include/asm-sh/cpu
@@ -157,7 +153,8 @@
 #	don't, just reference the parent directory so the semantics are
 #	kept roughly the same.
 
-include/asm-sh/.mach: $(wildcard include/config/sh/*.h) include/config/MARKER
+include/asm-sh/.mach: $(wildcard include/config/sh/*.h) \
+		      include/config/MARKER FORCE
 	@echo -n '  SYMLINK include/asm-sh/mach -> '
 	$(Q)if [ ! -d include/asm-sh ]; then mkdir -p include/asm-sh; fi
 	$(Q)if [ -d $(incdir-prefix)$(incdir-y) ]; then \
@@ -170,7 +167,7 @@
 	fi
 	@touch $@
 
-archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach
+archprepare: include/asm-sh/.cpu include/asm-sh/.mach maketools
 
 PHONY += maketools FORCE
 maketools:  include/linux/version.h FORCE
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/CVS/Entries linux-2.6.17/arch/sh/boards/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,21 @@
+D/adx////
+D/bigsur////
+D/cat68701////
+D/cqreek////
+D/dmida////
+D/dreamcast////
+D/ec3104////
+D/harp////
+D/hp6xx////
+D/landisk////
+D/mpc1211////
+D/overdrive////
+D/renesas////
+D/saturn////
+D/se////
+D/sh03////
+D/sh2000////
+D/snapgear////
+D/superh////
+D/titan////
+D/unknown////
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/CVS/Repository linux-2.6.17/arch/sh/boards/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/CVS/Root linux-2.6.17/arch/sh/boards/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/adx/CVS/Entries linux-2.6.17/arch/sh/boards/adx/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/adx/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/adx/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,5 @@
+/Makefile/1.5/Thu Mar 11 18:08:01 2004//
+/irq.c/1.2/Fri Nov  1 17:19:14 2002//
+/irq_maskreg.c/1.3/Fri Oct 28 13:12:47 2005/-ko/
+/setup.c/1.4/Mon Aug  4 01:38:06 2003//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/adx/CVS/Repository linux-2.6.17/arch/sh/boards/adx/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/adx/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/adx/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/adx
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/adx/CVS/Root linux-2.6.17/arch/sh/boards/adx/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/adx/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/adx/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/bigsur/CVS/Entries linux-2.6.17/arch/sh/boards/bigsur/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/bigsur/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/bigsur/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,6 @@
+/Makefile/1.6/Thu Mar 11 18:08:02 2004//
+/io.c/1.4/Tue Mar  8 06:46:55 2005//
+/irq.c/1.5/Fri Oct 28 13:12:47 2005//
+/led.c/1.2/Fri Nov  1 17:19:14 2002//
+/setup.c/1.5/Mon Dec 27 23:14:24 2004//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/bigsur/CVS/Repository linux-2.6.17/arch/sh/boards/bigsur/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/bigsur/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/bigsur/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/bigsur
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/bigsur/CVS/Root linux-2.6.17/arch/sh/boards/bigsur/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/bigsur/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/bigsur/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cat68701/CVS/Entries linux-2.6.17/arch/sh/boards/cat68701/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/cat68701/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/cat68701/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,4 @@
+/Makefile/1.5/Thu Mar 11 18:08:02 2004//
+/irq.c/1.2/Fri Nov  1 17:19:15 2002//
+/setup.c/1.3/Mon Aug  4 01:44:39 2003//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cat68701/CVS/Repository linux-2.6.17/arch/sh/boards/cat68701/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/cat68701/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/cat68701/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/cat68701
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cat68701/CVS/Root linux-2.6.17/arch/sh/boards/cat68701/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/cat68701/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/cat68701/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cqreek/CVS/Entries linux-2.6.17/arch/sh/boards/cqreek/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/cqreek/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/cqreek/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,4 @@
+/Makefile/1.6/Thu Mar 11 18:08:02 2004//
+/irq.c/1.4/Fri Oct 28 13:12:47 2005/-ko/
+/setup.c/1.5/Mon Aug  4 01:51:58 2003//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cqreek/CVS/Repository linux-2.6.17/arch/sh/boards/cqreek/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/cqreek/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/cqreek/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/cqreek
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cqreek/CVS/Root linux-2.6.17/arch/sh/boards/cqreek/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/cqreek/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/cqreek/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cqreek/irq.c linux-2.6.17/arch/sh/boards/cqreek/irq.c
--- linux-2.6.17-vanilla/arch/sh/boards/cqreek/irq.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/cqreek/irq.c	2006-07-12 16:54:19.000000000 +0000
@@ -1,4 +1,4 @@
-/* $Id: irq.c,v 1.1.2.4 2002/11/04 20:33:56 lethal Exp $
+/* $Id: irq.c,v 1.3 2003/05/04 19:29:46 lethal Exp $
  *
  * arch/sh/boards/cqreek/irq.c
  *
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dmida/CVS/Entries linux-2.6.17/arch/sh/boards/dmida/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/dmida/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/dmida/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,3 @@
+/Makefile/1.4/Thu Mar 11 18:08:02 2004//
+/mach.c/1.5/Tue Sep  9 00:14:07 2003//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dmida/CVS/Repository linux-2.6.17/arch/sh/boards/dmida/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/dmida/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/dmida/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/dmida
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dmida/CVS/Root linux-2.6.17/arch/sh/boards/dmida/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/dmida/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/dmida/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dreamcast/CVS/Entries linux-2.6.17/arch/sh/boards/dreamcast/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/dreamcast/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/dreamcast/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,5 @@
+/Makefile/1.7/Thu Mar 11 18:08:02 2004//
+/irq.c/1.5/Fri Aug 26 20:12:14 2005//
+/setup.c/1.8/Wed Jan  4 13:24:06 2006//
+/rtc.c/1.6/Sat Jul  8 20:16:03 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dreamcast/CVS/Repository linux-2.6.17/arch/sh/boards/dreamcast/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/dreamcast/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/dreamcast/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/dreamcast
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dreamcast/CVS/Root linux-2.6.17/arch/sh/boards/dreamcast/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/dreamcast/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/dreamcast/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dreamcast/irq.c linux-2.6.17/arch/sh/boards/dreamcast/irq.c
--- linux-2.6.17-vanilla/arch/sh/boards/dreamcast/irq.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/dreamcast/irq.c	2006-07-12 16:54:19.000000000 +0000
@@ -26,10 +26,10 @@
    event.
 
    There are three 32-bit ESRs located at 0xa05f8900 - 0xa05f6908.  Event
-   types can be found in include/asm-sh/dc_sysasic.h.  There are three groups
-   of EMRs that parallel the ESRs.  Each EMR group corresponds to an IRQ, so
-   0xa05f6910 - 0xa05f6918 triggers IRQ 13, 0xa05f6920 - 0xa05f6928 triggers
-   IRQ 11, and 0xa05f6930 - 0xa05f6938 triggers IRQ 9.
+   types can be found in include/asm-sh/dreamcast/sysasic.h. There are three
+   groups of EMRs that parallel the ESRs.  Each EMR group corresponds to an
+   IRQ, so 0xa05f6910 - 0xa05f6918 triggers IRQ 13, 0xa05f6920 - 0xa05f6928
+   triggers IRQ 11, and 0xa05f6930 - 0xa05f6938 triggers IRQ 9.
 
    In the kernel, these events are mapped to virtual IRQs so that drivers can
    respond to them as they would a normal interrupt.  In order to keep this
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dreamcast/rtc.c linux-2.6.17/arch/sh/boards/dreamcast/rtc.c
--- linux-2.6.17-vanilla/arch/sh/boards/dreamcast/rtc.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/dreamcast/rtc.c	2006-07-12 16:54:19.000000000 +0000
@@ -1,4 +1,5 @@
-/* arch/sh/kernel/rtc-aica.c
+/*
+ * arch/sh/boards/dreamcast/rtc.c
  *
  * Dreamcast AICA RTC routines.
  *
@@ -10,15 +11,12 @@
  */
 
 #include <linux/time.h>
-
+#include <asm/rtc.h>
 #include <asm/io.h>
 
-extern void (*rtc_get_time)(struct timespec *);
-extern int (*rtc_set_time)(const time_t);
-
 /* The AICA RTC has an Epoch of 1/1/1950, so we must subtract 20 years (in
-   seconds to get the standard Unix Epoch when getting the time, and add 20
-   years when setting the time. */
+   seconds) to get the standard Unix Epoch when getting the time, and add
+   20 years when setting the time. */
 #define TWENTY_YEARS ((20 * 365LU + 5) * 86400)
 
 /* The AICA RTC is represented by a 32-bit seconds counter stored in 2 16-bit
@@ -32,7 +30,8 @@
  *
  * Grabs the current RTC seconds counter and adjusts it to the Unix Epoch.
  */
-void aica_rtc_gettimeofday(struct timespec *ts) {
+void aica_rtc_gettimeofday(struct timespec *ts)
+{
 	unsigned long val1, val2;
 
 	do {
@@ -55,7 +54,8 @@
  *
  * Adjusts the given @tv to the AICA Epoch and sets the RTC seconds counter.
  */
-int aica_rtc_settimeofday(const time_t secs) {
+int aica_rtc_settimeofday(const time_t secs)
+{
 	unsigned long val1, val2;
 	unsigned long adj = secs + TWENTY_YEARS;
 
@@ -75,7 +75,7 @@
 
 void aica_time_init(void)
 {
-	rtc_get_time = aica_rtc_gettimeofday;
-	rtc_set_time = aica_rtc_settimeofday;
+	rtc_sh_get_time = aica_rtc_gettimeofday;
+	rtc_sh_set_time = aica_rtc_settimeofday;
 }
 
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dreamcast/setup.c linux-2.6.17/arch/sh/boards/dreamcast/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/dreamcast/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/dreamcast/setup.c	2006-07-12 16:54:19.000000000 +0000
@@ -25,18 +25,16 @@
 
 #include <asm/io.h>
 #include <asm/irq.h>
+#include <asm/rtc.h>
 #include <asm/machvec.h>
-#include <asm/machvec_init.h>
 #include <asm/mach/sysasic.h>
 
 extern struct hw_interrupt_type systemasic_int;
-/* XXX: Move this into it's proper header. */
-extern void (*board_time_init)(void);
 extern void aica_time_init(void);
 extern int gapspci_init(void);
 extern int systemasic_irq_demux(int);
 
-void *dreamcast_consistent_alloc(struct device *, size_t, dma_addr_t *, int);
+void *dreamcast_consistent_alloc(struct device *, size_t, dma_addr_t *, gfp_t);
 int dreamcast_consistent_free(struct device *, size_t, void *, dma_addr_t);
 
 const char *get_system_type(void)
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/ec3104/CVS/Entries linux-2.6.17/arch/sh/boards/ec3104/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/ec3104/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/ec3104/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,5 @@
+/Makefile/1.5/Thu Mar 11 18:08:02 2004//
+/io.c/1.2/Fri Nov  1 17:19:17 2002//
+/irq.c/1.3/Tue Sep  9 00:14:07 2003//
+/setup.c/1.3/Tue Jul 29 03:11:49 2003//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/ec3104/CVS/Repository linux-2.6.17/arch/sh/boards/ec3104/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/ec3104/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/ec3104/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/ec3104
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/ec3104/CVS/Root linux-2.6.17/arch/sh/boards/ec3104/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/ec3104/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/ec3104/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/harp/CVS/Entries linux-2.6.17/arch/sh/boards/harp/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/harp/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/harp/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,7 @@
+/Makefile/1.4/Thu Mar 11 18:08:02 2004//
+/irq.c/1.4/Fri Oct 28 13:12:47 2005//
+/led.c/1.2/Fri Nov  1 17:19:17 2002//
+/mach.c/1.4/Tue Sep  9 00:14:07 2003//
+/pcidma.c/1.2/Fri Nov  1 17:19:17 2002//
+/setup.c/1.3/Thu Aug 19 12:24:27 2004//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/harp/CVS/Repository linux-2.6.17/arch/sh/boards/harp/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/harp/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/harp/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/harp
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/harp/CVS/Root linux-2.6.17/arch/sh/boards/harp/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/harp/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/harp/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/CVS/Entries linux-2.6.17/arch/sh/boards/hp6xx/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/hp6xx/CVS/Entries	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,7 @@
+/Makefile/1.2/Sun Jan 29 17:46:23 2006/-ko/
+/hp6xx_apm.c/1.2/Mon Jan 30 15:57:17 2006//
+/mach.c/1.4/Wed Jan  4 14:53:18 2006/-ko/
+/pm.c/1.2/Mon Jan 30 15:57:17 2006//
+/pm_wakeup.S/1.2/Mon Jan 30 15:57:17 2006//
+/setup.c/1.4/Sun Jan 29 22:13:39 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/CVS/Repository linux-2.6.17/arch/sh/boards/hp6xx/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/hp6xx/CVS/Repository	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/hp6xx
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/CVS/Root linux-2.6.17/arch/sh/boards/hp6xx/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/hp6xx/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/Makefile linux-2.6.17/arch/sh/boards/hp6xx/Makefile
--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/hp6xx/Makefile	2006-07-12 16:54:19.000000000 +0000
@@ -2,5 +2,8 @@
 # Makefile for the HP6xx specific parts of the kernel
 #
 
-obj-y	 := mach.o setup.o
+obj-y	 		:= mach.o setup.o
+obj-$(CONFIG_PM)	+= pm.o pm_wakeup.o
+obj-$(CONFIG_APM)	+= hp6xx_apm.o 
+
 
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/hp6xx_apm.c linux-2.6.17/arch/sh/boards/hp6xx/hp6xx_apm.c
--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/hp6xx_apm.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/hp6xx/hp6xx_apm.c	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,123 @@
+/*
+ * bios-less APM driver for hp680
+ *
+ * Copyright 2005 (c) Andriy Skulysh <askulysh@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License.
+ */
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/apm_bios.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <asm/io.h>
+#include <asm/apm.h>
+#include <asm/adc.h>
+#include <asm/hp6xx/hp6xx.h>
+
+#define SH7709_PGDR			0xa400012c
+
+#define APM_CRITICAL			10
+#define APM_LOW				30
+
+#define HP680_BATTERY_MAX		875
+#define HP680_BATTERY_MIN		600
+#define HP680_BATTERY_AC_ON		900
+
+#define MODNAME "hp6x0_apm"
+
+static int hp6x0_apm_get_info(char *buf, char **start, off_t fpos, int length)
+{
+	u8 pgdr;
+	char *p;
+	int battery_status;
+	int battery_flag;
+	int ac_line_status;
+	int time_units = APM_BATTERY_LIFE_UNKNOWN;
+
+	int battery = adc_single(ADC_CHANNEL_BATTERY);
+	int backup = adc_single(ADC_CHANNEL_BACKUP);
+	int charging = adc_single(ADC_CHANNEL_CHARGE);
+	int percentage;
+
+	percentage = 100 * (battery - HP680_BATTERY_MIN) /
+			   (HP680_BATTERY_MAX - HP680_BATTERY_MIN);
+
+	ac_line_status = (battery > HP680_BATTERY_AC_ON) ?
+			 APM_AC_ONLINE : APM_AC_OFFLINE;
+
+	p = buf;
+
+	pgdr = ctrl_inb(SH7709_PGDR);
+	if (pgdr & PGDR_MAIN_BATTERY_OUT) {
+		battery_status = APM_BATTERY_STATUS_NOT_PRESENT;
+		battery_flag = 0x80;
+		percentage = -1;
+	} else if (charging < 8 ) {
+		battery_status = APM_BATTERY_STATUS_CHARGING;
+		battery_flag = 0x08;
+		ac_line_status = 0xff;
+	} else if (percentage <= APM_CRITICAL) {
+		battery_status = APM_BATTERY_STATUS_CRITICAL;
+		battery_flag = 0x04;
+	} else if (percentage <= APM_LOW) {
+		battery_status = APM_BATTERY_STATUS_LOW;
+		battery_flag = 0x02;
+	} else {
+		battery_status = APM_BATTERY_STATUS_HIGH;
+		battery_flag = 0x01;
+	}
+
+	p += sprintf(p, "1.0 1.2 0x%02x 0x%02x 0x%02x 0x%02x %d%% %d %s\n",
+		     APM_32_BIT_SUPPORT,
+		     ac_line_status,
+		     battery_status,
+		     battery_flag,
+		     percentage,
+		     time_units,
+		     "min");
+	p += sprintf(p, "bat=%d backup=%d charge=%d\n",
+		     battery, backup, charging);
+
+	return p - buf;
+}
+
+static irqreturn_t hp6x0_apm_interrupt(int irq, void *dev, struct pt_regs *regs)
+{
+	if (!apm_suspended)
+		apm_queue_event(APM_USER_SUSPEND);
+
+	return IRQ_HANDLED;
+}
+
+static int __init hp6x0_apm_init(void)
+{
+	int ret;
+
+	ret = request_irq(HP680_BTN_IRQ, hp6x0_apm_interrupt,
+			  SA_INTERRUPT, MODNAME, 0);
+	if (unlikely(ret < 0)) {
+		printk(KERN_ERR MODNAME ": IRQ %d request failed\n",
+		       HP680_BTN_IRQ);
+		return ret;
+	}
+
+	apm_get_info = hp6x0_apm_get_info;
+
+	return ret;
+}
+
+static void __exit hp6x0_apm_exit(void)
+{
+	free_irq(HP680_BTN_IRQ, 0);
+	apm_get_info = 0;
+}
+
+module_init(hp6x0_apm_init);
+module_exit(hp6x0_apm_exit);
+
+MODULE_AUTHOR("Adriy Skulysh");
+MODULE_DESCRIPTION("hp6xx Advanced Power Management");
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/pm.c linux-2.6.17/arch/sh/boards/hp6xx/pm.c
--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/pm.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/hp6xx/pm.c	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,88 @@
+/*
+ * hp6x0 Power Management Routines
+ *
+ * Copyright (c) 2006 Andriy Skulysh <askulsyh@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License.
+ */
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/suspend.h>
+#include <linux/errno.h>
+#include <linux/time.h>
+#include <asm/io.h>
+#include <asm/hd64461.h>
+#include <asm/hp6xx/hp6xx.h>
+#include <asm/cpu/dac.h>
+#include <asm/pm.h>
+
+#define STBCR		0xffffff82
+#define STBCR2		0xffffff88
+
+static int hp6x0_pm_enter(suspend_state_t state)
+{
+	u8 stbcr, stbcr2;
+#ifdef CONFIG_HD64461_ENABLER
+	u8 scr;
+	u16 hd64461_stbcr;
+#endif
+
+	if (state != PM_SUSPEND_MEM)
+		return -EINVAL;
+
+#ifdef CONFIG_HD64461_ENABLER
+	outb(0, HD64461_PCC1CSCIER);
+
+	scr = inb(HD64461_PCC1SCR);
+	scr |= HD64461_PCCSCR_VCC1;
+	outb(scr, HD64461_PCC1SCR);
+
+	hd64461_stbcr = inw(HD64461_STBCR);
+	hd64461_stbcr |= HD64461_STBCR_SPC1ST;
+	outw(hd64461_stbcr, HD64461_STBCR);
+#endif
+
+	ctrl_outb(0x1f, DACR);
+
+	stbcr = ctrl_inb(STBCR);
+	ctrl_outb(0x01, STBCR);
+
+	stbcr2 = ctrl_inb(STBCR2);
+	ctrl_outb(0x7f , STBCR2);
+
+	outw(0xf07f, HD64461_SCPUCR);
+
+	pm_enter();
+
+	outw(0, HD64461_SCPUCR);
+	ctrl_outb(stbcr, STBCR);
+	ctrl_outb(stbcr2, STBCR2);
+
+#ifdef CONFIG_HD64461_ENABLER
+	hd64461_stbcr = inw(HD64461_STBCR);
+	hd64461_stbcr &= ~HD64461_STBCR_SPC1ST;
+	outw(hd64461_stbcr, HD64461_STBCR);
+
+	outb(0x4c, HD64461_PCC1CSCIER);
+	outb(0x00, HD64461_PCC1CSCR);
+#endif
+
+	return 0;
+}
+
+/*
+ * Set to PM_DISK_FIRMWARE so we can quickly veto suspend-to-disk.
+ */
+static struct pm_ops hp6x0_pm_ops = {
+	.pm_disk_mode	= PM_DISK_FIRMWARE,
+	.enter		= hp6x0_pm_enter,
+};
+
+static int __init hp6x0_pm_init(void)
+{
+	pm_set_ops(&hp6x0_pm_ops);
+	return 0;
+}
+
+late_initcall(hp6x0_pm_init);
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/pm_wakeup.S linux-2.6.17/arch/sh/boards/hp6xx/pm_wakeup.S
--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/pm_wakeup.S	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/hp6xx/pm_wakeup.S	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2006 Andriy Skulysh <askulsyh@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 more details.
+ *
+ */
+
+#include <linux/linkage.h>
+#include <asm/cpu/mmu_context.h>
+
+#define k0	r0
+#define k1	r1
+#define k2	r2
+#define k3	r3
+#define k4	r4
+
+/*
+ * Kernel mode register usage:
+ *	k0	scratch
+ *	k1	scratch
+ *	k2	scratch (Exception code)
+ *	k3	scratch (Return address)
+ *	k4	scratch
+ *	k5	reserved
+ *	k6	Global Interrupt Mask (0--15 << 4)
+ *	k7	CURRENT_THREAD_INFO (pointer to current thread info)
+ */
+
+ENTRY(wakeup_start)
+! clear STBY bit
+	mov	#-126, k2
+   	and	#127, k0
+	mov.b	k0, @k2
+! enable refresh
+	mov.l	5f, k1
+	mov.w	6f, k0	
+  	mov.w	k0, @k1
+! jump to handler
+	mov.l	2f, k2
+	mov.l	3f, k3
+	mov.l	@k2, k2
+
+	mov.l	4f, k1
+	jmp	@k1
+	nop
+
+	.align	2
+1:	.long	EXPEVT
+2:	.long	INTEVT
+3:	.long	ret_from_irq
+4:	.long	handle_exception
+5:	.long	0xffffff68
+6:	.word	0x0524
+
+ENTRY(wakeup_end)
+	nop
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/setup.c linux-2.6.17/arch/sh/boards/hp6xx/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/hp6xx/setup.c	2006-07-12 16:54:19.000000000 +0000
@@ -16,6 +16,9 @@
 #include <asm/hp6xx/hp6xx.h>
 #include <asm/cpu/dac.h>
 
+#define	SCPCR	0xa4000116
+#define SCPDR	0xa4000136
+
 const char *get_system_type(void)
 {
 	return "HP6xx";
@@ -25,6 +28,7 @@
 {
 	u8 v8;
 	u16 v;
+
 	v = inw(HD64461_STBCR);
 	v |= HD64461_STBCR_SURTST | HD64461_STBCR_SIRST |
 	    HD64461_STBCR_STM1ST | HD64461_STBCR_STM0ST |
@@ -51,5 +55,15 @@
 	v8 &= ~DACR_DAE;
 	ctrl_outb(v8,DACR);
 
+	v8 = ctrl_inb(SCPDR);
+	v8 |= SCPDR_TS_SCAN_X | SCPDR_TS_SCAN_Y;
+	v8 &= ~SCPDR_TS_SCAN_ENABLE;
+	ctrl_outb(v8, SCPDR);
+
+	v = ctrl_inw(SCPCR);
+	v &= ~SCPCR_TS_MASK;
+	v |= SCPCR_TS_ENABLE;
+	ctrl_outw(v, SCPCR);
+
 	return 0;
 }
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/CVS/Entries linux-2.6.17/arch/sh/boards/landisk/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/landisk/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/landisk/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,7 @@
+/Makefile/1.2/Wed Feb  8 21:55:09 2006/-ko/
+/io.c/1.4/Sun Feb  5 21:55:28 2006/-ko/
+/irq.c/1.2/Sat Nov 12 13:02:45 2005/-ko/
+/landisk_pwb.c/1.2/Sat Nov 12 13:02:45 2005/-ko/
+/setup.c/1.3/Tue Jan  3 22:51:46 2006/-ko/
+/rtc.c/1.3/Sat Jul  8 20:16:03 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/CVS/Repository linux-2.6.17/arch/sh/boards/landisk/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/landisk/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/landisk/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/landisk
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/CVS/Root linux-2.6.17/arch/sh/boards/landisk/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/landisk/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/landisk/CVS/Root	2006-07-12 16:54:19.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/Makefile linux-2.6.17/arch/sh/boards/landisk/Makefile
--- linux-2.6.17-vanilla/arch/sh/boards/landisk/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/landisk/Makefile	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,5 @@
+#
+# Makefile for I-O DATA DEVICE, INC. "LANDISK Series" 
+#
+
+obj-y	 := setup.o io.o irq.o rtc.o landisk_pwb.o
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/io.c linux-2.6.17/arch/sh/boards/landisk/io.c
--- linux-2.6.17-vanilla/arch/sh/boards/landisk/io.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/landisk/io.c	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,250 @@
+/*
+ * arch/sh/boards/landisk/io.c
+ *
+ * Copyright (C) 2001  Ian da Silva, Jeremy Siegel
+ * Based largely on io_se.c.
+ *
+ * I/O routine for I-O Data Device, Inc. LANDISK.
+ *
+ * Initial version only to support LAN access; some
+ * placeholder code from io_landisk.c left in with the
+ * expectation of later SuperIO and PCMCIA access.
+ */
+/*
+ * modifed by kogiidena
+ * 2005.03.03
+ */
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/pci.h>
+#include <asm/landisk/iodata_landisk.h>
+#include <asm/addrspace.h>
+#include <asm/io.h>
+
+extern void *area5_io_base;	/* Area 5 I/O Base address */
+extern void *area6_io_base;	/* Area 6 I/O Base address */
+
+static inline unsigned long port2adr(unsigned int port)
+{
+	if ((0x1f0 <= port && port < 0x1f8) || port == 0x3f6)
+		if (port == 0x3f6)
+			return ((unsigned long)area5_io_base + 0x2c);
+		else
+			return ((unsigned long)area5_io_base + PA_PIDE_OFFSET +
+				((port - 0x1f0) << 1));
+	else if ((0x170 <= port && port < 0x178) || port == 0x376)
+		if (port == 0x376)
+			return ((unsigned long)area6_io_base + 0x2c);
+		else
+			return ((unsigned long)area6_io_base + PA_SIDE_OFFSET +
+				((port - 0x170) << 1));
+	else
+		maybebadio((unsigned long)port);
+
+	return port;
+}
+
+/*
+ * General outline: remap really low stuff [eventually] to SuperIO,
+ * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO)
+ * is mapped through the PCI IO window.  Stuff with high bits (PXSEG)
+ * should be way beyond the window, and is used  w/o translation for
+ * compatibility.
+ */
+u8 landisk_inb(unsigned long port)
+{
+	if (PXSEG(port))
+		return ctrl_inb(port);
+	else if (is_pci_ioaddr(port))
+		return ctrl_inb(pci_ioaddr(port));
+
+	return ctrl_inw(port2adr(port)) & 0xff;
+}
+
+u8 landisk_inb_p(unsigned long port)
+{
+	u8 v;
+
+	if (PXSEG(port))
+		v = ctrl_inb(port);
+	else if (is_pci_ioaddr(port))
+		v = ctrl_inb(pci_ioaddr(port));
+	else
+		v = ctrl_inw(port2adr(port)) & 0xff;
+
+	ctrl_delay();
+
+	return v;
+}
+
+u16 landisk_inw(unsigned long port)
+{
+	if (PXSEG(port))
+		return ctrl_inw(port);
+	else if (is_pci_ioaddr(port))
+		return ctrl_inw(pci_ioaddr(port));
+	else
+		maybebadio(port);
+
+	return 0;
+}
+
+u32 landisk_inl(unsigned long port)
+{
+	if (PXSEG(port))
+		return ctrl_inl(port);
+	else if (is_pci_ioaddr(port))
+		return ctrl_inl(pci_ioaddr(port));
+	else
+		maybebadio(port);
+
+	return 0;
+}
+
+void landisk_outb(u8 value, unsigned long port)
+{
+	if (PXSEG(port))
+		ctrl_outb(value, port);
+	else if (is_pci_ioaddr(port))
+		ctrl_outb(value, pci_ioaddr(port));
+	else
+		ctrl_outw(value, port2adr(port));
+}
+
+void landisk_outb_p(u8 value, unsigned long port)
+{
+	if (PXSEG(port))
+		ctrl_outb(value, port);
+	else if (is_pci_ioaddr(port))
+		ctrl_outb(value, pci_ioaddr(port));
+	else
+		ctrl_outw(value, port2adr(port));
+	ctrl_delay();
+}
+
+void landisk_outw(u16 value, unsigned long port)
+{
+	if (PXSEG(port))
+		ctrl_outw(value, port);
+	else if (is_pci_ioaddr(port))
+		ctrl_outw(value, pci_ioaddr(port));
+	else
+		maybebadio(port);
+}
+
+void landisk_outl(u32 value, unsigned long port)
+{
+	if (PXSEG(port))
+		ctrl_outl(value, port);
+	else if (is_pci_ioaddr(port))
+		ctrl_outl(value, pci_ioaddr(port));
+	else
+		maybebadio(port);
+}
+
+void landisk_insb(unsigned long port, void *dst, unsigned long count)
+{
+        volatile u16 *p;
+        u8 *buf = dst;
+
+        if (PXSEG(port)) {
+                while (count--)
+                        *buf++ = *(volatile u8 *)port;
+	} else if (is_pci_ioaddr(port)) {
+                volatile u8 *bp = (volatile u8 *)pci_ioaddr(port);
+
+                while (count--)
+                        *buf++ = *bp;
+	} else {
+                p = (volatile u16 *)port2adr(port);
+                while (count--)
+                        *buf++ = *p & 0xff;
+	}
+}
+
+void landisk_insw(unsigned long port, void *dst, unsigned long count)
+{
+        volatile u16 *p;
+        u16 *buf = dst;
+
+	if (PXSEG(port))
+		p = (volatile u16 *)port;
+	else if (is_pci_ioaddr(port))
+		p = (volatile u16 *)pci_ioaddr(port);
+	else
+		p = (volatile u16 *)port2adr(port);
+	while (count--)
+		*buf++ = *p;
+}
+
+void landisk_insl(unsigned long port, void *dst, unsigned long count)
+{
+        u32 *buf = dst;
+
+	if (is_pci_ioaddr(port)) {
+                volatile u32 *p = (volatile u32 *)pci_ioaddr(port);
+
+                while (count--)
+                        *buf++ = *p;
+	} else
+		maybebadio(port);
+}
+
+void landisk_outsb(unsigned long port, const void *src, unsigned long count)
+{
+        volatile u16 *p;
+        const u8 *buf = src;
+
+	if (PXSEG(port))
+                while (count--)
+                        ctrl_outb(*buf++, port);
+	else if (is_pci_ioaddr(port)) {
+                volatile u8 *bp = (volatile u8 *)pci_ioaddr(port);
+
+                while (count--)
+                        *bp = *buf++;
+	} else {
+                p = (volatile u16 *)port2adr(port);
+                while (count--)
+                        *p = *buf++;
+	}
+}
+
+void landisk_outsw(unsigned long port, const void *src, unsigned long count)
+{
+        volatile u16 *p;
+        const u16 *buf = src;
+
+	if (PXSEG(port))
+                p = (volatile u16 *)port;
+	else if (is_pci_ioaddr(port))
+                p = (volatile u16 *)pci_ioaddr(port);
+	else
+                p = (volatile u16 *)port2adr(port);
+
+        while (count--)
+                *p = *buf++;
+}
+
+void landisk_outsl(unsigned long port, const void *src, unsigned long count)
+{
+        const u32 *buf = src;
+
+	if (is_pci_ioaddr(port)) {
+                volatile u32 *p = (volatile u32 *)pci_ioaddr(port);
+
+                while (count--)
+                        *p = *buf++;
+	} else
+		maybebadio(port);
+}
+
+void __iomem *landisk_ioport_map(unsigned long port, unsigned int size)
+{
+        if (PXSEG(port))
+                return (void __iomem *)port;
+        else if (is_pci_ioaddr(port))
+                return (void __iomem *)pci_ioaddr(port);
+
+        return (void __iomem *)port2adr(port);
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/irq.c linux-2.6.17/arch/sh/boards/landisk/irq.c
--- linux-2.6.17-vanilla/arch/sh/boards/landisk/irq.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/landisk/irq.c	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,105 @@
+/* 
+ * arch/sh/boards/landisk/irq.c
+ *
+ * Copyright (C) 2001  Ian da Silva, Jeremy Siegel
+ * Based largely on io_se.c.
+ *
+ * I/O routine for I-O Data Device, Inc. LANDISK.
+ *
+ * Initial version only to support LAN access; some
+ * placeholder code from io_landisk.c left in with the
+ * expectation of later SuperIO and PCMCIA access.
+ */
+/*
+ * modified by kogiidena  
+ * 2005.03.03
+ */
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/irq.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/landisk/iodata_landisk.h>
+
+static void enable_landisk_irq(unsigned int irq);
+static void disable_landisk_irq(unsigned int irq);
+
+/* shutdown is same as "disable" */
+#define shutdown_landisk_irq disable_landisk_irq
+
+static void ack_landisk_irq(unsigned int irq);
+static void end_landisk_irq(unsigned int irq);
+
+static unsigned int startup_landisk_irq(unsigned int irq)
+{
+	enable_landisk_irq(irq);
+	return 0;		/* never anything pending */
+}
+
+static void disable_landisk_irq(unsigned int irq)
+{
+	unsigned long flags;
+	unsigned char val;
+	unsigned char mask = 0xff ^ (0x01 << (irq - 5));
+
+	/* Set the priority in IPR to 0 */
+	local_irq_save(flags);
+	val = ctrl_inb(PA_IMASK);
+	val &= mask;
+	ctrl_outb(val, PA_IMASK);
+	local_irq_restore(flags);
+}
+
+static void enable_landisk_irq(unsigned int irq)
+{
+	unsigned long flags;
+	unsigned char val;
+	unsigned char value = (0x01 << (irq - 5));
+
+	/* Set priority in IPR back to original value */
+	local_irq_save(flags);
+	val = ctrl_inb(PA_IMASK);
+	val |= value;
+	ctrl_outb(val, PA_IMASK);
+	local_irq_restore(flags);
+}
+
+static void ack_landisk_irq(unsigned int irq)
+{
+	disable_landisk_irq(irq);
+}
+
+static void end_landisk_irq(unsigned int irq)
+{
+	if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
+		enable_landisk_irq(irq);
+}
+
+static struct hw_interrupt_type landisk_irq_type = {
+	.typename = "LANDISK IRQ",
+	.startup = startup_landisk_irq,
+	.shutdown = shutdown_landisk_irq,
+	.enable = enable_landisk_irq,
+	.disable = disable_landisk_irq,
+	.ack = ack_landisk_irq,
+	.end = end_landisk_irq
+};
+
+static void make_landisk_irq(unsigned int irq)
+{
+	disable_irq_nosync(irq);
+	irq_desc[irq].handler = &landisk_irq_type;
+	disable_landisk_irq(irq);
+}
+
+/*
+ * Initialize IRQ setting
+ */
+void __init init_landisk_IRQ(void)
+{
+	int i;
+
+	for (i = 5; i < 14; i++)
+		make_landisk_irq(i);
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/landisk_pwb.c linux-2.6.17/arch/sh/boards/landisk/landisk_pwb.c
--- linux-2.6.17-vanilla/arch/sh/boards/landisk/landisk_pwb.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/landisk/landisk_pwb.c	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,348 @@
+/*
+ * arch/sh/boards/landisk/landisk_pwb.c -- driver for the Power control switch.
+ *
+ * This driver will also support the I-O DATA Device, Inc. LANDISK Board.
+ *
+ * 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.
+ *
+ * Copylight (C) 2002 Atom Create Engineering Co., Ltd.
+ *
+ * LED control drive function added by kogiidena 
+ */
+
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/errno.h>
+#include <linux/signal.h>
+#include <linux/major.h>
+#include <linux/poll.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/sched.h>
+#include <linux/timer.h>
+#include <linux/interrupt.h>
+
+#include <asm/system.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/uaccess.h>
+#include <asm/landisk/iodata_landisk.h>
+
+#define SHUTDOWN_BTN_MINOR	1	/* Shutdown button device minor no. */
+#define LED_MINOR	       21	/* LED minor no. */
+#define BTN_MINOR	       22	/* BUTTON minor no. */
+#define GIO_MINOR	       40	/* GIO minor no. */
+
+static int openCnt;
+static int openCntLED;
+static int openCntGio;
+static int openCntBtn;
+static int landisk_btn;
+static int landisk_btnctrlpid;
+/*
+ * Functions prototypes
+ */
+
+static int gio_ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
+		     unsigned long arg);
+
+static int swdrv_open(struct inode *inode, struct file *filp)
+{
+	int minor;
+
+	minor = MINOR(inode->i_rdev);
+	filp->private_data = (void *)minor;
+
+	if (minor == SHUTDOWN_BTN_MINOR) {
+		if (openCnt > 0) {
+			return -EALREADY;
+		} else {
+			openCnt++;
+			return 0;
+		}
+	} else if (minor == LED_MINOR) {
+		if (openCntLED > 0) {
+			return -EALREADY;
+		} else {
+			openCntLED++;
+			return 0;
+		}
+	} else if (minor == BTN_MINOR) {
+		if (openCntBtn > 0) {
+			return -EALREADY;
+		} else {
+			openCntBtn++;
+			return 0;
+		}
+	} else if (minor == GIO_MINOR) {
+		if (openCntGio > 0) {
+			return -EALREADY;
+		} else {
+			openCntGio++;
+			return 0;
+		}
+	}
+	return -ENOENT;
+
+}
+
+static int swdrv_close(struct inode *inode, struct file *filp)
+{
+	int minor;
+
+	minor = MINOR(inode->i_rdev);
+	if (minor == SHUTDOWN_BTN_MINOR) {
+		openCnt--;
+	} else if (minor == LED_MINOR) {
+		openCntLED--;
+	} else if (minor == BTN_MINOR) {
+		openCntBtn--;
+	} else if (minor == GIO_MINOR) {
+		openCntGio--;
+	}
+	return 0;
+}
+
+static int swdrv_read(struct file *filp, char *buff, size_t count,
+		      loff_t * ppos)
+{
+	int minor;
+	minor = (int)(filp->private_data);
+
+	if (!access_ok(VERIFY_WRITE, (void *)buff, count))
+		return -EFAULT;
+
+	if (minor == SHUTDOWN_BTN_MINOR) {
+		if (landisk_btn & 0x10) {
+			put_user(1, buff);
+			return 1;
+		} else {
+			return 0;
+		}
+	}
+	return 0;
+}
+
+static int swdrv_write(struct file *filp, const char *buff, size_t count,
+		       loff_t * ppos)
+{
+	int minor;
+	minor = (int)(filp->private_data);
+
+	if (minor == SHUTDOWN_BTN_MINOR) {
+		return count;
+	}
+	return count;
+}
+
+static irqreturn_t sw_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+	landisk_btn = (0x0ff & (~ctrl_inb(PA_STATUS)));
+	disable_irq(IRQ_BUTTON);
+	disable_irq(IRQ_POWER);
+	ctrl_outb(0x00, PA_PWRINT_CLR);
+
+	if (landisk_btnctrlpid != 0) {
+		kill_proc(landisk_btnctrlpid, SIGUSR1, 1);
+		landisk_btnctrlpid = 0;
+	}
+
+	return IRQ_HANDLED;
+}
+
+static struct file_operations swdrv_fops = {
+	.read = swdrv_read,	/* read */
+	.write = swdrv_write,	/* write */
+	.open = swdrv_open,	/* open */
+	.release = swdrv_close,	/* release */
+	.ioctl = gio_ioctl,	/* ioctl */
+
+};
+
+static char banner[] __initdata =
+    KERN_INFO "LANDISK and USL-5P Button, LED and GIO driver initialized\n";
+
+int __init swdrv_init(void)
+{
+	int error;
+
+	printk("%s", banner);
+
+	openCnt = 0;
+	openCntLED = 0;
+	openCntBtn = 0;
+	openCntGio = 0;
+	landisk_btn = 0;
+	landisk_btnctrlpid = 0;
+
+	if ((error = register_chrdev(SHUTDOWN_BTN_MAJOR, "swdrv", &swdrv_fops))) {
+		printk(KERN_ERR
+		       "Button, LED and GIO driver:Couldn't register driver, error=%d\n",
+		       error);
+		return 1;
+	}
+
+	if (request_irq(IRQ_POWER, sw_interrupt, 0, "SHUTDOWNSWITCH", NULL)) {
+		printk(KERN_ERR "Unable to get IRQ 11.\n");
+		return 1;
+	}
+	if (request_irq(IRQ_BUTTON, sw_interrupt, 0, "USL-5P BUTTON", NULL)) {
+		printk(KERN_ERR "Unable to get IRQ 12.\n");
+		return 1;
+	}
+	ctrl_outb(0x00, PA_PWRINT_CLR);
+
+	return 0;
+}
+
+module_init(swdrv_init);
+
+/*
+ * gio driver 
+ *
+ */
+
+#include <asm/landisk/gio.h>
+
+static int gio_ioctl(struct inode *inode, struct file *filp,
+		     unsigned int cmd, unsigned long arg)
+{
+	int minor;
+	unsigned int data, mask;
+	static unsigned int addr = 0;
+
+	minor = (int)(filp->private_data);
+
+	/* access control */
+	if (minor == GIO_MINOR) {
+		;
+	} else if (minor == LED_MINOR) {
+		if (((cmd & 0x0ff) >= 9) && ((cmd & 0x0ff) < 20)) {
+			;
+		} else {
+			return -EINVAL;
+		}
+	} else if (minor == BTN_MINOR) {
+		if (((cmd & 0x0ff) >= 20) && ((cmd & 0x0ff) < 30)) {
+			;
+		} else {
+			return -EINVAL;
+		}
+	} else {
+		return -EINVAL;
+	}
+
+	if (cmd & 0x01) {	/* write */
+		if (copy_from_user(&data, (int *)arg, sizeof(int))) {
+			return -EFAULT;
+		}
+	}
+
+	switch (cmd) {
+	case GIODRV_IOCSGIOSETADDR:	/* addres set */
+		addr = data;
+		break;
+
+	case GIODRV_IOCSGIODATA1:	/* write byte */
+		ctrl_outb((unsigned char)(0x0ff & data), addr);
+		break;
+
+	case GIODRV_IOCSGIODATA2:	/* write word */
+		if (addr & 0x01) {
+			return -EFAULT;
+		}
+		ctrl_outw((unsigned short int)(0x0ffff & data), addr);
+		break;
+
+	case GIODRV_IOCSGIODATA4:	/* write long */
+		if (addr & 0x03) {
+			return -EFAULT;
+		}
+		ctrl_outl(data, addr);
+		break;
+
+	case GIODRV_IOCGGIODATA1:	/* read byte */
+		data = ctrl_inb(addr);
+		break;
+
+	case GIODRV_IOCGGIODATA2:	/* read word */
+		if (addr & 0x01) {
+			return -EFAULT;
+		}
+		data = ctrl_inw(addr);
+		break;
+
+	case GIODRV_IOCGGIODATA4:	/* read long */
+		if (addr & 0x03) {
+			return -EFAULT;
+		}
+		data = ctrl_inl(addr);
+		break;
+	case GIODRV_IOCSGIO_LED:	/* write */
+		mask = ((data & 0x00ffffff) << 8)
+		    | ((data & 0x0000ffff) << 16)
+		    | ((data & 0x000000ff) << 24);
+		landisk_ledparam = data & (~mask);
+		if (landisk_arch == 0) {	/* arch == landisk */
+			landisk_ledparam &= 0x03030303;
+			mask = (~(landisk_ledparam >> 22)) & 0x000c;
+			landisk_ledparam |= mask;
+		} else {	                /* arch == usl-5p */
+			mask = (landisk_ledparam >> 24) & 0x0001;
+			landisk_ledparam |= mask;
+			landisk_ledparam &= 0x007f7f7f;
+		}
+		landisk_ledparam |= 0x80;
+		break;
+	case GIODRV_IOCGGIO_LED:	/* read */
+		data = landisk_ledparam;
+		if (landisk_arch == 0) {	/* arch == landisk */
+			data &= 0x03030303;
+		} else {	                /* arch == usl-5p */
+			;
+		}
+		data &= (~0x080);
+		break;
+	case GIODRV_IOCSGIO_BUZZER:	/* write */
+		landisk_buzzerparam = data;
+		landisk_ledparam |= 0x80;
+		break;
+	case GIODRV_IOCGGIO_LANDISK:	/* read */
+		data = landisk_arch & 0x01;
+		break;
+	case GIODRV_IOCGGIO_BTN:	/* read */
+		data = (0x0ff & ctrl_inb(PA_PWRINT_CLR));
+		data <<= 8;
+		data |= (0x0ff & ctrl_inb(PA_IMASK));
+		data <<= 8;
+		data |= (0x0ff & landisk_btn);
+		data <<= 8;
+		data |= (0x0ff & (~ctrl_inb(PA_STATUS)));
+		break;
+	case GIODRV_IOCSGIO_BTNPID:	/* write */
+		landisk_btnctrlpid = data;
+		landisk_btn = 0;
+		if (irq_desc[IRQ_BUTTON].depth) {
+			enable_irq(IRQ_BUTTON);
+		}
+		if (irq_desc[IRQ_POWER].depth) {
+			enable_irq(IRQ_POWER);
+		}
+		break;
+	case GIODRV_IOCGGIO_BTNPID:	/* read */
+		data = landisk_btnctrlpid;
+		break;
+	default:
+		return -EFAULT;
+		break;
+	}
+
+	if ((cmd & 0x01) == 0) {	/* read */
+		if (copy_to_user((int *)arg, &data, sizeof(int))) {
+			return -EFAULT;
+		}
+	}
+	return 0;
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/rtc.c linux-2.6.17/arch/sh/boards/landisk/rtc.c
--- linux-2.6.17-vanilla/arch/sh/boards/landisk/rtc.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/landisk/rtc.c	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,93 @@
+/*
+ * arch/sh/boards/landisk/rtc.c --  RTC support
+ *
+ *  Copyright (C) 2000  Philipp Rumpf <prumpf@tux.org>
+ *  Copyright (C) 1999  Tetsuya Okada & Niibe Yutaka
+ */
+/*
+ * modifed by kogiidena  
+ * 2005.09.16
+ */
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/time.h>
+#include <linux/delay.h>
+#include <linux/spinlock.h>
+#include <linux/bcd.h>
+#include <asm/rtc.h>
+
+extern spinlock_t rtc_lock;
+
+extern void
+rs5c313_set_cmos_time(unsigned int BCD_yr, unsigned int BCD_mon,
+		      unsigned int BCD_day, unsigned int BCD_hr,
+		      unsigned int BCD_min, unsigned int BCD_sec);
+
+extern unsigned long
+rs5c313_get_cmos_time(unsigned int *BCD_yr, unsigned int *BCD_mon,
+		      unsigned int *BCD_day, unsigned int *BCD_hr,
+		      unsigned int *BCD_min, unsigned int *BCD_sec);
+
+void landisk_rtc_gettimeofday(struct timespec *tv)
+{
+	unsigned int BCD_yr, BCD_mon, BCD_day, BCD_hr, BCD_min, BCD_sec;
+	unsigned long flags;
+
+	spin_lock_irqsave(&rtc_lock, flags);
+	tv->tv_sec = rs5c313_get_cmos_time
+	    (&BCD_yr, &BCD_mon, &BCD_day, &BCD_hr, &BCD_min, &BCD_sec);
+	tv->tv_nsec = 0;
+	spin_unlock_irqrestore(&rtc_lock, flags);
+}
+
+int landisk_rtc_settimeofday(const time_t secs)
+{
+	int retval = 0;
+	int real_seconds, real_minutes, cmos_minutes;
+	unsigned long flags;
+	unsigned long nowtime = secs;
+	unsigned int BCD_yr, BCD_mon, BCD_day, BCD_hr, BCD_min, BCD_sec;
+
+	spin_lock_irqsave(&rtc_lock, flags);
+
+	rs5c313_get_cmos_time
+	  (&BCD_yr, &BCD_mon, &BCD_day, &BCD_hr, &BCD_min, &BCD_sec);
+	cmos_minutes = BCD_min;
+	BCD_TO_BIN(cmos_minutes);
+
+	/*
+	 * since we're only adjusting minutes and seconds,
+	 * don't interfere with hour overflow. This avoids
+	 * messing with unknown time zones but requires your
+	 * RTC not to be off by more than 15 minutes
+	 */
+	real_seconds = nowtime % 60;
+	real_minutes = nowtime / 60;
+	if (((abs(real_minutes - cmos_minutes) + 15) / 30) & 1)
+		real_minutes += 30;	/* correct for half hour time zone */
+	real_minutes %= 60;
+
+	if (abs(real_minutes - cmos_minutes) < 30) {
+		BIN_TO_BCD(real_seconds);
+		BIN_TO_BCD(real_minutes);
+		rs5c313_set_cmos_time(BCD_yr, BCD_mon, BCD_day, BCD_hr,
+				      real_minutes, real_seconds);
+	} else {
+		printk(KERN_WARNING
+		       "set_rtc_time: can't update from %d to %d\n",
+		       cmos_minutes, real_minutes);
+		retval = -1;
+	}
+
+	spin_unlock_irqrestore(&rtc_lock, flags);
+	return retval;
+}
+
+void landisk_time_init(void)
+{
+	rtc_sh_get_time = landisk_rtc_gettimeofday;
+	rtc_sh_set_time = landisk_rtc_settimeofday;
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/setup.c linux-2.6.17/arch/sh/boards/landisk/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/landisk/setup.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/landisk/setup.c	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,179 @@
+/*
+ * arch/sh/boards/landisk/setup.c
+ *
+ * Copyright (C) 2000 Kazumoto Kojima
+ * Copyright (C) 2002 Paul Mundt
+ *
+ * I-O DATA Device, Inc. LANDISK Support.
+ *
+ * Modified for LANDISK by
+ * Atom Create Engineering Co., Ltd. 2002.
+ *
+ * modifed by kogiidena
+ * 2005.09.16
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/pm.h>
+#include <linux/mm.h>
+#include <asm/machvec.h>
+#include <asm/rtc.h>
+#include <asm/landisk/iodata_landisk.h>
+#include <asm/io.h>
+
+void landisk_time_init(void);
+void init_landisk_IRQ(void);
+
+int landisk_ledparam;
+int landisk_buzzerparam;
+int landisk_arch;
+
+/* cycle the led's in the clasic knightrider/sun pattern */
+static void heartbeat_landisk(void)
+{
+	static unsigned int cnt = 0, blink = 0x00, period = 25;
+        volatile u8 *p = (volatile u8 *)PA_LED;
+	char data;
+
+        if ((landisk_ledparam & 0x080) == 0)
+		return;
+
+	cnt += 1;
+
+        if (cnt < period)
+		return;
+
+	cnt = 0;
+	blink++;
+
+	data = (blink & 0x01) ? (landisk_ledparam >> 16) : 0;
+	data |= (blink & 0x02) ? (landisk_ledparam >> 8) : 0;
+	data |= landisk_ledparam;
+
+	/* buzzer */
+	if (landisk_buzzerparam & 0x1) {
+		data |= 0x80;
+	} else {
+		data &= 0x7f;
+	}
+	*p = data;
+
+        if (((landisk_ledparam & 0x007f7f00) == 0) &&
+             (landisk_buzzerparam == 0))
+		landisk_ledparam &= (~0x0080);
+
+	landisk_buzzerparam >>= 1;
+}
+
+/*
+ * The Machine Vector
+ */
+struct sh_machine_vector mv_landisk __initmv = {
+	.mv_nr_irqs = 72,
+	.mv_inb = landisk_inb,
+	.mv_inw = landisk_inw,
+	.mv_inl = landisk_inl,
+	.mv_outb = landisk_outb,
+	.mv_outw = landisk_outw,
+	.mv_outl = landisk_outl,
+	.mv_inb_p = landisk_inb_p,
+	.mv_inw_p = landisk_inw,
+	.mv_inl_p = landisk_inl,
+	.mv_outb_p = landisk_outb_p,
+	.mv_outw_p = landisk_outw,
+	.mv_outl_p = landisk_outl,
+	.mv_insb = landisk_insb,
+	.mv_insw = landisk_insw,
+	.mv_insl = landisk_insl,
+	.mv_outsb = landisk_outsb,
+	.mv_outsw = landisk_outsw,
+	.mv_outsl = landisk_outsl,
+        .mv_ioport_map = landisk_ioport_map,
+	.mv_init_irq = init_landisk_IRQ,
+#ifdef CONFIG_HEARTBEAT
+	.mv_heartbeat = heartbeat_landisk,
+#endif
+};
+ALIAS_MV(landisk)
+
+const char *get_system_type(void)
+{
+        return "LANDISK";
+}
+
+static void landisk_power_off(void)
+{
+        ctrl_outb(0x01, PA_SHUTDOWN);
+}
+
+static void check_usl5p(void)
+{
+        volatile u8 *p = (volatile u8 *)PA_LED;
+        u8 tmp1, tmp2;
+
+        tmp1 = *p;
+        *p = 0x40;
+        tmp2 = *p;
+        *p = tmp1;
+
+        landisk_arch = (tmp2 == 0x40);
+        if (landisk_arch == 1) {
+                /* arch == usl-5p */
+                landisk_ledparam = 0x00000380;
+                landisk_ledparam |= (tmp1 & 0x07c);
+        } else {
+                /* arch == landisk */
+                landisk_ledparam = 0x02000180;
+                landisk_ledparam |= 0x04;
+        }
+}
+
+void __init platform_setup(void)
+{
+        landisk_buzzerparam = 0;
+        check_usl5p();
+
+        printk(KERN_INFO "I-O DATA DEVICE, INC. \"LANDISK Series\" support.\n");
+        board_time_init = landisk_time_init;
+        pm_power_off = landisk_power_off;
+}
+
+void *area5_io_base;
+void *area6_io_base;
+
+static int __init landisk_cf_init(void)
+{
+	pgprot_t prot;
+	unsigned long paddrbase, psize;
+
+	/* open I/O area window */
+	paddrbase = virt_to_phys((void *)PA_AREA5_IO);
+	psize = PAGE_SIZE;
+	prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_IO16);
+	area5_io_base = p3_ioremap(paddrbase, psize, prot.pgprot);
+	if (!area5_io_base) {
+		printk("allocate_cf_area : can't open CF I/O window!\n");
+		return -ENOMEM;
+	}
+
+	paddrbase = virt_to_phys((void *)PA_AREA6_IO);
+	psize = PAGE_SIZE;
+	prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_IO16);
+	area6_io_base = p3_ioremap(paddrbase, psize, prot.pgprot);
+	if (!area6_io_base) {
+		printk("allocate_cf_area : can't open HDD I/O window!\n");
+		return -ENOMEM;
+	}
+
+	printk(KERN_INFO "Allocate Area5/6 success.\n");
+
+	/* XXX : do we need attribute and common-memory area also? */
+
+	return 0;
+}
+
+__initcall(landisk_cf_init);
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/mpc1211/CVS/Entries linux-2.6.17/arch/sh/boards/mpc1211/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/mpc1211/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/mpc1211/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,6 @@
+/Makefile/1.4/Thu Mar 11 18:08:02 2004/-ko/
+/led.c/1.1/Fri May 16 17:18:15 2003/-ko/
+/pci.c/1.6/Mon Oct 25 10:41:01 2004/-ko/
+/setup.c/1.4/Sun Feb  5 21:55:28 2006/-ko/
+/rtc.c/1.4/Sat Jul  8 20:16:04 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/mpc1211/CVS/Repository linux-2.6.17/arch/sh/boards/mpc1211/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/mpc1211/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/mpc1211/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/mpc1211
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/mpc1211/CVS/Root linux-2.6.17/arch/sh/boards/mpc1211/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/mpc1211/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/mpc1211/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/mpc1211/rtc.c linux-2.6.17/arch/sh/boards/mpc1211/rtc.c
--- linux-2.6.17-vanilla/arch/sh/boards/mpc1211/rtc.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/mpc1211/rtc.c	2006-07-12 16:54:20.000000000 +0000
@@ -130,7 +130,7 @@
 
 void mpc1211_time_init(void)
 {
-	rtc_get_time = mpc1211_rtc_gettimeofday;
-	rtc_set_time = mpc1211_rtc_settimeofday;
+	rtc_sh_get_time = mpc1211_rtc_gettimeofday;
+	rtc_sh_set_time = mpc1211_rtc_settimeofday;
 }
 
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/mpc1211/setup.c linux-2.6.17/arch/sh/boards/mpc1211/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/mpc1211/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/mpc1211/setup.c	2006-07-12 16:54:20.000000000 +0000
@@ -256,23 +256,12 @@
 	}
 }
 
-/*
-  Initialize the board
-*/
-
-
-static void delay (void)
-{
-	volatile unsigned short tmp;
-	tmp = *(volatile unsigned short *) 0xa0000000;
-}
-
-static void delay1000 (void)
+static void delay1000(void)
 {
 	int i;
 
 	for (i=0; i<1000; i++)
-		delay ();
+		ctrl_delay();
 }
 
 static int put_smb_blk(unsigned char *p, int address, int command, int no)
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/overdrive/CVS/Entries linux-2.6.17/arch/sh/boards/overdrive/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/overdrive/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/overdrive/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,11 @@
+/Makefile/1.5/Sat Mar 26 20:25:35 2005//
+/fpga.c/1.2/Fri Nov  1 17:19:19 2002//
+/galileo.c/1.4/Mon Oct 25 10:41:01 2004//
+/io.c/1.2/Fri Nov  1 17:19:19 2002//
+/irq.c/1.4/Fri Oct 28 13:12:48 2005//
+/led.c/1.3/Sun May  4 19:29:47 2003//
+/mach.c/1.4/Tue Sep  9 00:14:07 2003//
+/overdrive.ttf/1.2/Fri Nov  1 17:19:19 2002//
+/pcidma.c/1.3/Mon Dec 27 23:14:24 2004//
+/setup.c/1.3/Sat Mar 26 20:25:35 2005//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/overdrive/CVS/Repository linux-2.6.17/arch/sh/boards/overdrive/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/overdrive/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/overdrive/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/overdrive
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/overdrive/CVS/Root linux-2.6.17/arch/sh/boards/overdrive/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/overdrive/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/overdrive/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/overdrive/overdrive.ttf linux-2.6.17/arch/sh/boards/overdrive/overdrive.ttf
--- linux-2.6.17-vanilla/arch/sh/boards/overdrive/overdrive.ttf	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/overdrive/overdrive.ttf	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,770 @@
+255,255, 98,255, 51,  0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,
+160,  9, 52,129, 38,208,  4,154, 64, 19,  0, 89, 96, 10,100,129,137,134, 85,  6,154,  0, 25,104,  2, 77,160, 76,148,  1,  0,  0,  0,  0,  0,  6,202,  0, 25,  0, 89,100,170,  9, 52,129, 38, 80,  6,154, 68, 19,112,  2, 96, 10, 76,149,129, 50, 64,  6,200,  0,188,254,
+  0, 21,160,  2, 84,128, 10, 80,  1, 42,128, 10, 80,  1, 42, 64,  7,180,128, 10, 80,  1, 42, 64,  5,168,  0, 61,160,  2,  0,  0,  0,  0,  0,  9, 80,  1, 46,128, 10,120,  1, 21,160,  2, 84,128, 10,208,  3, 42, 64,  5, 80,  1, 42,160,  2, 84,128, 11,112,  1,204,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  2, 64,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,128,  0, 16,  0,  0,  8,  0,  0,  0,  0,204,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,124,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0, 12,  0,128,  2,  0,  0,  2,  0,  0,  0, 64,101,160,  0,  0,  0,  0,  0,  0,  0, 80,  0,  2,  0,  0, 74,  9,  0,  0,  0,  0,128, 66,  0,  2,  0,  0,  0,  0,  1, 32,160,  0,  4,160,  0, 16,  0, 72,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  8,  0,  0,  1,  0, 32,  2,  0,  0,  0,  1,  0,  0,  0, 12,128,  4,  0,  0,  0,  0,  0,  0, 80,  0,  8,  1,  0, 32,  0,  0,  0,  0,  0,  0,  2,130,  0,  0,  0,  0,  0,130,  8,128, 16,144,  0,  2,  0,  1,160,254,
+160,  9, 54,  0,  0, 16,  0, 18, 16,  0, 72, 68,  0, 32,  0,  0,  0,  0,208,  0,  0, 64, 34,104,  0, 69,  4,  0,  0,  0,  0,  0,  0,  0, 80, 24, 26, 64, 33,  1,  0,  1, 32,144, 36,192, 66,  4,  0, 26, 64,  3,  8,  0,  1,160, 16,  0,128, 66, 18,  0,  2,  0,240,252,
+  0,  1, 48,  0,  0,  0,  0,  8,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  1,  2,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,128,  0, 24,  0,  2,  0,  0,  0,  0,  0, 16,  0,  4,  0,  0, 24,  0,  3,  0,  0,  0,  0,  1,  1,  0,  0,  0,  0,  0, 16,204,253,
+128,  1, 60,  0,  0,240,  0, 22,  0,  0, 88,  0,  0,224,  1,  0,  0,  0,240,  0,  0,192,  2, 96, 16,  7,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0, 30,192,  1,  0,  0, 12, 96,  0, 44,128,  3,  0,  0, 30,192,  3,  0,  0, 12,224,  0,  0,128,  3,240,  0,  0,  4, 72,252,
+128,  5, 54,  0,  0,208,  0, 10,  0,  0, 40,  0,  0,160,  1,  0,  0,  0,208,  0,  0, 64,  1,  0,  0,  9,  0,  0,  0,  0,  0,  0,  0,  0,128,132, 26, 64,  2,  0,  0, 64, 33, 40, 20,128,  4,  0,  0, 26, 64,  3,  0,130, 76, 33,  1,  0,128, 64,209,  0,  0,  0,200,252,
+128,  5,  0, 10,  0,  0,  2, 16,  0,  0, 64,  0,  0,  0,  4,  0,  0,  0,  0,128,  0,  0,  2,  0, 18,  4,  0,  0,  0,  0,  0,  0,  0,  0, 64,  8,128,  0,  1,  0,  0, 44,128,132, 32,  0,  2,  0,  0,128,  0,  0,  0,  4,  0,130,  0,  0,  0, 64,193, 34,  0,  1,188,255,
+224, 65,  8,  0,  0, 32, 64, 12,  0,  0, 56,  0,  0, 64,128,  0,  0,  0, 48,  0,  0,128,  1,120,  0, 10,  0,  0,  0,  0,  0,  0,  0,  0,176, 64,  6,136,  2,  0,  0, 15, 68,  1, 24,  0,  5,  0,  0,  6,144,128, 24, 32, 15, 64,  1,  0,  0,  1,224,  0,  6,  8,  0,253,
+128,  1,  1,  0,  0,  0, 32, 16,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 96,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  1,  0,  0, 12,  2, 64, 32,  0,  2,  0,  0,  0, 64,  0, 96, 64, 12,128,  0,  0,  0,  0,  0,  0,  0, 16,112,252,
+128,  5,  0,  0,  0,  0,  0,  8,  0,  0, 40,  0,  0,  0,  8,  2,  0,  0, 16,  0,  0,  0,  1, 96, 10,  9,  0,  0,  0,  0,  0,  0,  0,  0,128,  4,  2, 64,  2,  0,  0, 76,  0,  5, 16,128,  4,  0,  0,  2, 64,  0,  0,  2, 76, 36,  1,  0,  0, 20,  2, 36,136,  0, 20,254,
+ 32, 16, 53,  0,  0, 16,  0, 18,  1,  0, 40, 33,  0, 32,  0,  0,128,  6,208,  0,  0, 64,  0,  0,  0,  5,  8,  0,  4,  0,  0,  0,  0,  0, 16,  0, 26,  0,  0,104,  0,  0, 32,144,  4,128,  0,  1,  0, 18, 80,  0,104,  0,  0,  0,  0,  4,128, 66,210,  0,  2,  0,200,255,
+  0,  0, 48,  0,  0,  0,  0,  8, 16,  0, 64,  0,  0,  0,  0,  0,  0,  6,192,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,120,252,
+  0,  0, 60,  0,  0,192,  0, 22,  0,  0, 56,  0,  0,224,  1,  0,128,  7,240,  0,  0,192,  0,  0,  0,  7,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0, 30,  0,  0,120,  0,  0, 96,  0, 48,  0,  6,  4,  0, 22,192,  3,120,  0,  0,  0,  0,  0,128,  3,240,  0,  0,  4,172,254,
+  8,  0, 54,  0,  0,192,  0, 10,  0,  0, 72,  0,  0,160,  1,  0,128,  6,208,  0,  0, 64,  0,  0,  0,  9,  0,  0,  0, 10,  0,  0,  0,  0,  0,132, 26,  0,  0,104,  0,  0, 32, 40, 48,  5, 16,  0,  0, 10, 64,  3,104,  0,  0,  0,  0,128,144, 32, 17, 32,  0,128, 92,255,
+  0,  8, 48,  0,  0,192,  2, 16,  0,  0, 32,  0,  0,  0,  4,  0,  0, 16,  0,  0,  0,  0, 19,  0,  0,  4,  0,  0, 48,  2,  0,  0,  0,  0,  0,  4,  0, 16,  0,  0, 20,  0,128,  4, 48, 18, 18,  2,  0, 16,  0,  3,  0, 32,  0,  0,  0,  0, 10, 64,  1, 34,  0,129,  1,252,
+ 96, 64, 56,  0,  0,240, 64, 12,  0,  0, 80,  0,  0, 64,128,  0,  0,  1, 52,128,  0,128,131,  0,  0, 10,  0,  0, 12,  8,  0,  0,  0,  0, 48, 64,  6,  0,  0, 24,  0,  0, 64, 65, 12,128,  5,  0,  0, 14,128,131, 24,  0,  0,  0,  0, 60,  0,  1,224,  0,  6,  8,100,254,
+  4,  0, 52,  0,  0,192,  0, 16,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  3,  0,  0,  4,  0,  0, 48,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,  0, 64, 48,  0,  2,  0,  0, 16, 64,  0,  0,  0,  0,  0,  0,  0, 32,  0,192,  0,  0, 16, 13,255,
+  0, 73, 52,  0,  0,192, 34,  8,  0,  0, 64,  0,  0,  0, 72,  0,  0,  0, 16,  0,  0, 64,  3,  0,  0,  9,  0,  0,176,  8,  0,  0,  0,  0,  0, 64,  2,  0,  0,  8,  0,  0,  0,  5,176,  8, 38,  2,  0,  8, 64,128,  8,  0,  0,  0,  0,  0,  1, 20,  2, 36,144,  0,116,254,
+160,  1,  6,  0,  0, 16,  0, 26,  0,  0, 40, 64,  0, 32,  0,  0,128,  0, 16,  0,  0, 64, 35,  1,  0, 73,  4,  0, 52,  0,  0,  0,  0,  0, 16,  0, 26,  0,  0,104,  0,  0, 32,144,  4,128, 66,  2,  0,  2, 64,163,  8,  0,  0,  0,  0,  4,128, 66,210,  0, 18,  3,236,255,
+  0,  1,  0,  0,  0,192,  0, 24,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  4,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0, 96,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0, 36,255,
+128,  1, 48,  8,  0,240, 32, 30,  0,  0, 56,  0,  0,224,  1,  0,  0,  6,192,  0,  0,  0,  3,  0,  0, 11,  0,  0, 60,  0,  0,  0,  0,  0,  0,  0, 30,  0,  0,120,  0,  0, 96,  0, 48,128,  3,  0,  0, 24,  0,  3,  1,  0,  0,  0,  0,  0,128,  3,192, 32, 16,  0,220,255,
+132, 41,  0,  0,  0,208,  4, 26,  0,  0, 72,  0,  0,160,  1,  0,  0,  6,  0, 20,  0,  0,163,  0,  0,  5,  0,  0, 52,  0,  0,  0,  0,  0,  0,132, 26,  0,  0,104,  0,  0, 32, 40, 48,137,  4,  0,  0,  0,  8, 35,  0,130,  0,  0,  0,128,144,  0,193,  8, 24, 32,121,253,
+  4,  4,  0, 34,  0,  0,  2, 24,  0,  0, 32,  0,  0,  0,  4,  0,  0, 22,192, 32,  0,  0, 16,  1,  0,  8,  0,  0, 48,  0,  0,  0,  0,  0,  0,  8,  0,  8,  0,  0,  2,  0,128,  8,176,  0,  2,  0,  0, 88,  4,  3,  0,  8,  0,  0,  0,  0, 10, 64,193, 40, 88,  0, 76,254,
+ 96,128, 12,  0,  0, 32, 64, 28,  0,  0, 80,  0,  0, 64,128,  0,128,  7,242,  0,  0,192,  3,  0,  0,  7,  0,  0, 56,  0,  0,  0,  0,  0, 48, 64,  6,  0,  0, 24, 16,  0, 64, 65, 12, 32,  5,  0,  0, 30,192,131, 24,  0,  0,  0,  0, 12,  0,  1,240,  0, 14, 16,212,254,
+136, 65,  0,  0,  0,  0,  0, 24,  0,  0, 32,  0,  0,  0,  0,  0,  0,  6,192,  0,  0,  0,  3,  0,  0,  8,  0,  0, 48,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0, 64, 48,  0,  2,  0,  0, 24,  0,  3, 96,  0,  0,  0,  0, 48, 32,  0,192,  0, 24,128, 48,253,
+128,  9,  0,  9,  0,  0, 34, 24,  0,  0, 64,  0,  0,  0, 64,  0,  0, 70,193, 32,  0,  0,131,  0,  0,  4,  0,  0, 52,  0,  0,  0,  0,  0,192,  4,  0,  0,  0,  8,  0,  0,  0,  5, 48,144,  4,  0,  0, 88,  8,131,  0, 32,  0,  0,  0,  0,  1, 20,194, 40, 24,  5,208,252,
+ 32,  8,  4,  0,  0, 16,  0, 82,  8,  0,  8,132,  0, 32,132,  0,128,  0,208,  0,  0, 64,  0,  0,  0,  1,  0,  0,  4,  0,  0,  0,  0,  0,208,  0, 26,  0,  0, 40, 17,  0, 32,144,  4,137, 16, 17,  0, 26, 64,163,  8,  0,  0,  0,  0,  0,128, 66, 18,  0, 82,  0,172,255,
+  0,128,  0,  0,  0,192,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,128, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  8,112,253,
+  0, 64,  0,  0,  0, 48, 32, 22,  0,  0, 32,  0,  0,128,  0,  0,128,  7,240,  0,  0,192,  0,  0,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,192, 64, 30,  0,  0, 56, 16,  0, 96,  0, 12,  8,  6, 48,  0, 24,  4,  3, 96,  0,  0,  0,  0,  0,128,  3,241,  0,  0, 16,232,253,
+  8,  0,  0,  0,  0, 16,  4, 10,  0,  0, 64, 17,  0,128, 65,  0,128,  6,209,  0,  0, 64,  0,  0,  0, 44,  2,  0,  0,  0,  0,  0,  0,  0,192,  4, 26,  0,  0,  8,  0,  0, 32, 40,  4,  0, 16, 17,  0,152,  0, 64,  0, 18,  0,  0,  0,  0,128, 16,208,136,128,128, 48,253,
+  0,  8, 49, 33,  0,  0,  2, 16,  0,  0,  0,  1,  0,  0,  4,  0,  0, 16,  0, 66,  0,  0, 11,  0,  0, 32,  4,  0, 48,  1,  0,  0,  0,  0,128,  4,  0,  1,  0,  0,  4,  0,128,  0,144,  8, 18,194,130, 88,  8,136, 96, 16,  0,  0,  0,  0,  0, 64,  1, 68, 80,144, 93,254,
+ 96,  0, 60,  0,  0, 32, 64, 12,  0,  0,120, 64,  0, 96,128,  0,  0,  1, 50,  0,  0,128,  3,  2,  0, 15,  0,  0, 60, 16,  0,  0,  0,  0,240, 64,  6,  8,  0, 16, 64,  0, 64, 65, 40,128,  5,224,  0, 30,192,  2,120,  0,  0,  0,  0,  0,  0,  1,224,  0, 22,  0, 80,255,
+132, 65,  0,  0,  0,  0,  0, 16,  0,  0, 32,  0,  0,128, 65,  0,  0,  0,  0,  0,  0, 64,  3,  0,  0, 12,  2,  0,  0, 16,  0,  0,  0,  0,192,  0,  0,  0,  0,  0, 16,  0,  0, 64,  0,  0,  2,208,  0, 24,  0,  0, 97,  0,  0,  0,  0,  0,  0,  0,192,  0, 16,  0,113,252,
+  0, 17,  0,  9,  0,  0, 34,  8,  0,  0, 96, 10,  0,128,  5,  0,128, 64,  1,  0,  0, 64,  3,  0,  0,140,  0,  0,  0,  1,  0,  0,  0,  0,192,130,  0,  0,  0, 64,  2,  0,  0,  5, 36, 66, 38,210,  0,152,  8, 35, 96, 16,  0,  0,  0,  0,  0, 20,  2, 40, 16, 16,120,252,
+160, 49,  4,  0,  0,208,  0,146, 96,160, 72,  4,137, 32,  0,  0,128,  0,208,  0,  0, 64,  0,104,  0,  1,  0,  0, 52,  0,  0,  0,  0,  0,208,  0, 26,  0,  0, 40, 17,  0, 32,144, 52,128, 64, 81,  4,  2, 64,  3,104,  0,  0, 32, 17,  0,128,  0, 16,  8,  2,  0, 40,254,
+128,  1,  0,  0,  0,  0,  0,  8,  0,  0, 32, 64,  4,  4,128,  0,  0,  0,192,  0,  0,  0,128, 96,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,192,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 64,  0,  0,  3, 96,  0,  0,128,  0,  1,  0,  0,  0, 32,  0,  0,248,253,
+128,  0,  0,  0,  0,  0, 64, 22,  0,131, 88,  0, 11,128,  0,  0,  0,  0,241,  0,  0,  0,  1,120,  0, 12,  0,  0, 60,  0,  0,  0,  0,  0,192, 64, 24,  0,  0, 56,  0,  0, 96,  0,  0,  0,  6,  0,  0, 24,192,  3,120,  0,  0, 96,  1,  0,128,  1,241,  0,  0,  4,208,252,
+  4,  9,  1,  0,  0,  0,  0, 10,  0, 16, 40,  0,  5,128, 73,  0,  0, 38,208,  0,  0,  0, 19,108,  0, 76,  2,  0, 52,  0,  0,  0,  0,  0,128,  4, 64, 16,  0,  8, 20,  0, 32, 40,  0,  9, 32,  1, 68,  0, 96,  3,104,  0,  0,160,  0,  0,128,  6,208, 36,  0,128,192,252,
+ 12, 64,  0, 33,  0,192, 64, 16,  0,  9, 65,  0,  8,  0,  4,  0,  0, 22,  0,  8,  0,  0, 16,  1, 33,128,  4,  0,  0, 64,  0,  0,  0,  0,192,  2,128,  0,  0,  0,  4,  0,128, 64,128, 32, 18, 66,  4, 88,  0,  3,  0, 68,  0,  0,  1,  0,  0, 38,  1, 34,  0,129, 65,255,
+224,  1, 12,  0,  0,240,  0, 12,192,  2, 48,  0,  7, 96,128,  0,128,  7, 50,128,  0,192,  0, 24,  0, 15,  0,  0, 12,  0,  0,  0,  0,  0,240,128, 30,  4,  0, 16, 64,  0, 64,  1, 12,128,  5,240, 32, 30,132,  3, 24,  0,  0,224,  0,  0,  0,  7,160,  0, 30,  8, 84,253,
+  8,  0, 48,  0,  0,192, 32, 16,  0,  1, 66,  0,  8,128,  1,  0,  0,  6,  0,  0,  0,  0,128,  0,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,192,128, 24,  0,  0,  0, 16,  0,  0, 64,  0,  0,  2,  0,  0, 24,  0,  3,  0,  0,  0,  0,  1,  0,128,  6,193, 32,  0, 16, 17,254,
+  0, 17, 50,  9,  0,192,  4,  8,  0, 35, 32,  0,  4,128, 81,  0,  0, 70,  1,  0,  0,  0,  0,  8,  0, 76, 16,  0,  0,  0,  0,  0,  0,  0,192,  4, 24, 32,  0, 64,  2,  0,  0,  5,  0, 33, 38,194, 20,152,  4,  3,  0,  0,  0,128,  0,  0,128, 38, 64,  8,128,  0, 88,254,
+ 32,  0,  4,  0,  0, 16,  0, 18,  1,  0,  8,  0, 69,168,  1,  0,128,  6, 16,  0,  0, 64, 98, 72, 64, 41,  8,  0,  4,  0,  0,  0,  0,  0, 16,  0,  2, 64, 34,  9,  0,  0,160,144, 20,128, 68, 18,  0, 26, 64,  0,104,  0,  0, 32,  0,  4,128, 66, 18,  4, 26,  0, 46,255,
+  0,  0,  0,  0,  0,  0,  0,  8,  8,  0,  0, 16,  0,128,  1,  0,  0,  0,  0,  0,  0,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  8,  2,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,128, 24, 16,192,254,
+ 96,  0, 48,  0,  0,  0,  0, 22,  0,  0, 96, 32,  4,128,  1,  1,  0,  6,192,  0,  0,192,  2, 88,  0, 11,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0, 24,200,  2, 96,  0,  0,224, 64, 12,136,  5, 48,  0, 24,  4,  0, 96,  0,  0,128,  1,  0,128,  3,  0, 32, 24,  4,184,254,
+ 40,  0, 48,  0,  0,192, 40, 10,  0,  0,  0,  4, 64,  1, 16,  0,  0,  6,  4, 20,  0, 64,  1, 40,  0,  5,  0,  0,  0, 32,  0,  0,  0,  0,  0,132, 24, 65,  1, 96,  0,  0, 32, 16,  4,128,  2, 16,  0,  0,  0,  0, 96,130,  0,128, 73,128,160, 64,  2,  0, 24,128,173,252,
+128, 81, 48,  0,  0,  0,  2, 16,  0,  0, 32,  1, 32,132,  5,  0,  0, 64,192, 40,  0,  0,  2, 64,  0,  8,  0,  0, 48,  8,  0,  0,  0,  0,  0,  4,  0,  1,  2,  0,  1,  0,  0, 68,128, 32,  4,192, 24,  0,  1,  0, 96, 64,  0,  0,  0,128, 32, 64,  1,  2, 24,144,  8,254,
+192,  1, 60,  8,  0, 48, 64, 12,  0,  0, 88, 32, 11,224,129,  0,128,  1,241,  0,  0,128,  1, 56,  0,  6,  0,  0, 60,  0,  0,  0,  0,  0, 48, 64, 30,196,  1, 24, 32,  0, 64,  0,  8,128,  3,224,  0, 30,208,128, 24,  0,  0,224,129, 12,  0,  1, 48, 64, 22,  0,213,252,
+132,  1, 48,  8,  0,192,  0, 16,  0,  0, 32, 64, 12,130,  1,  0,  0,  6,192,  0,  0,  0,  2, 64,  0,  8,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0, 24,  4,  2,  0,  0,  0,  0,  0,  0,  0,  4,192,  0, 24,  0,  3, 96, 64,  0,128, 65,  0,  0,  0,  0,  0, 24,  8,247,255,
+128,  1, 48,  0,  0,192, 32,  8,  0,  0, 96,  4,140,128, 69,  0,  0, 70,194, 36,  0,  0,  1, 32,  0,  5,  0,  0, 48,  8,  0,  0,  0,  0,192, 64, 24,  1,  1,  0, 10,  0,  0, 41,  4, 33,  2,192,  0,152,  2,131, 96,  4,  0,128,  9, 48, 32, 20,130, 40, 88,  0,112,253,
+ 48,  0,  4,  0,  0, 16,  0, 18, 66, 66,  8, 12,  1,160, 17,  4,128, 64, 82,  2,  1, 64, 19,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0, 80, 24, 26, 64,  0, 40,  8,  0,160,  1,  4,128, 68,212,  0,  2, 81,  3,104,  0,  0,160,  1,  4,128, 66,210,  4, 66,  0, 42,254,
+  0,  0,  0,  0,  0,  0,  0,  8,  0,  1,  0,  0,  0,  0, 65,  0,  0,  0,128,  0,  0,  0,  3,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  8, 88,255,
+128,  1, 12,  0,  0,240,  0, 22,192,  2, 32,  0, 12,130,  1, 48,  0,  6,192,  0,  0,  0,129, 96, 64, 12,128,129, 48, 16,  0,  0,  0,  0, 64,  0, 24,  0,  3, 24, 16,  0, 96, 64, 60,128,  5,192,  0,  8,192,131, 96,  0,  0,128, 65,  0,128,  3,241, 32,  0,  0,212,252,
+140,  1,  4,  0,  0,208,  0, 10, 64,  1, 64, 16, 64,128, 73, 48,  0,  0,196, 72,  0,  0, 10, 96,  1, 76,136, 17,  0,  0,  0,  0,  0,  0,128,132, 64,  8,147,  8,  2,  0, 32, 16, 52,128,  2,  0, 66, 16, 68,  0, 96,130,  0,  0,  4,128,160, 32, 16,  0, 64,144,101,252,
+  4,  4, 48,  0,  0,  0,  2, 16,  0,  2,  0,  1, 44,  2,  4,  0, 17,130, 64,  4,  0,  0, 32,  0,  0,  0,  0, 64,176,  8,  0,  0,  0,  0, 64,  4, 64,  0,  0,  0,  0,  0,128, 81,  0,  1,  4,  0, 34, 64,  8,  0,  0,  8,  0,  0,  4,129, 32, 64,  1,  2, 64,144, 80,255,
+ 96,128, 56,  8,  0, 32, 64, 12,192,  1,120, 64, 15, 96,128, 12,128,  5,240, 32,  0,192,131,120, 32, 15,228,  1, 60,  0,  0,  0,  0,  0,176, 64, 30,196,  3, 17, 64,  0,192,  1,  8,144,  3,240,  0, 30,128,131,120,  0,  0,224,  1, 60,  0,  1,224, 64,  6,  0, 29,255,
+ 12,  0, 48,  0,  0,  0,  0, 16,  0,  2, 32,  0, 12,  0,  0,  0,  0,  2,192,  0,  0,  0,  0, 96, 16, 12,128,129, 48,  0,  0,  0,  0,  0,  0,  0, 24,  0,131,  0,  0,  0,160, 65,  0,  0,  4,192,  0,  8, 64,  3, 96, 64,  0,128,129,  0,  0,  0, 64,  0,  0,  0,167,255,
+  0, 40, 48,  0,  0,  0, 40,  8,  0,  1, 96, 10, 76,  4, 68,  0,  4, 22,193,136,  0,  0,162, 96,  2,140,130,  9,176, 16,  0,  0,  0,  0,128, 64, 24, 32, 19,  0, 32,  0,160,  5,  4,  9,  2,192,128,152, 72,128, 96,  4,  0,128,  1,  0, 32, 20, 66, 40,  8, 16,208,254,
+ 32,  0,  4,  0,  0,208,  0,146, 72, 65,  8,  0,133, 32,  0,  0,128,  0, 80,  8,  2, 64,  0,  8,  0,137,160,  1,  4,  0,  0,  0,  0,  0,208,  0,  2, 64,  0,  8,  0, 13, 32,144,  4,137,132, 16,  0, 90, 64,  0,  8,  0, 13, 32,  4,  4,128, 66,210,  0, 26,  0,140,255,
+  0,  0,  0,  0,  0,192,  0,  8,  0,  2,  0,  0,  8,  4,  0,  0,  0,  6,128, 64,  0,  0,  0,  0,  0,  4,136,  1,  0,  0,  0,  0,  0,  0,192,128,  0,  0,  0,  0,  0, 12,  0,  0,  0,  0,  2,  0,  0, 16, 16,  0,  0,  0, 12,  0,128,  0,  0,  0,  0,  0, 24,  0,240,254,
+128,  1, 48,  0,  0,240,  0, 22,192,  1, 96,  0,  7,224,  1,  0,128,  1,192,  0,  6,192,  0, 96, 16, 11,224,  1, 48, 16,  0,  0,  0,  0,192, 64, 24,  8,131,120,  0, 15, 96,  0, 12,136,  5,192, 64, 24,  8,  0, 96, 32, 15,128, 64, 48,136,  3,192,  0, 24,  0, 92,254,
+136,  1,  0, 10,  0,208,  0, 10, 64,  2, 96, 34,  9,160,  1,  0,128,  0,193, 72,  2, 64,  0, 96,  1,  5,160,  1, 48,  2,  0,  0,  0,  0,192,  4, 24,  1, 11,104,  0, 13, 32, 40,  4,128,  2,192,  0, 24,  0,  0, 96,  0, 13,  0, 17,128,128, 16,193, 36, 24,  0, 17,253,
+  0,  4, 48,  8,  0,  0,  2, 16,  0,  1,  0, 36,  4,  0,  4,  0,  0, 16, 64, 36, 88,  0, 35,  0,  1,  8,  0,  8,  0,  9,  0,  0,  0,  0, 64,  4,  0,  0,  8,  1, 32, 32,132,128, 16,  2,  4,  0,  4, 24, 33,136,  0, 18, 32,  0,132,  0, 32, 64,193,  2, 24,  3,152,255,
+ 96,128, 12,  0,  0, 32,128, 12,128,  2,120,  0, 10, 64,128,  0,  0,  1,242,  0, 28,136,131,120, 32,  6, 96,  0, 61,  0,  0,  0,  0,  0,240, 64, 30,196,  3, 16,  0,  3, 64,  1, 40,160,  3,240, 32, 30,192,  0,120,  0,  3,232,  1, 12,  0,  1,240, 32, 30,  0,248,255,
+  4, 64, 48,  0,  0,  0,  0, 16,  0,  1, 96,  0,  4,  0,  0,  0,  0,  0,192,  0, 24, 64,  3, 96, 32,  8,  0,  0, 48,  0,  0,  0,  0,  0,192,  0, 24,  4,  3,  0,  0,  0,  0, 64,  0,  0,  4,192, 32, 24,  0,131, 96,  0,  0,128,  0,  0,  0,  0,192,  0,  0,128, 24,255,
+  0,  4, 48,  8,  0, 16,  0,  8, 64,  2, 96, 20,  9,  0, 68,  0,128, 64,193,136, 24, 64,  3, 96,  2,  5,  0,  0, 48, 17,  0,  0,  0,  0,192,130, 24,  0, 11,  1, 10,  0,  0,  5, 36, 66,  2,192,  0, 24,  8, 35, 96, 68,  0,128, 41,128, 16, 20,194, 32,  0, 32, 52,253,
+  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,144,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0, 50,252,
+ 32,  0,  0,144,  0,  0,  0,  2,  0,  0,  0,  0,  0, 32,  0,  4,128,  0,  0,  0,  2, 64,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  1, 32,  0,  1,  0,  0,  0, 64,  0,  0,  0,  0,  0,  1,  0,  0,  4,128,  0, 18,  0,  2,  0,180,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  1, 64,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0, 32,  0,  0,128,  0, 16,  0,  0,128,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,216,255,
+ 36,  0,128,136,  0, 16, 20,  2, 64, 64,  8, 68,  1, 33,  0,  4,128, 32, 18,  8,  2,  0,  8,  8,  4,129, 32,  0,  4,  5,  0,  0,  0,  0, 16,  0, 66, 64, 64,  8,  1,  1,  0, 16,  4,129,128,  0,  0,  2,  2,  0,  8,  8,  1, 32, 32,  4,  0,  0, 16,  0,  2,128, 89,252,
+  4,128,  0,  6,  0,  0, 24,128, 16,  0,  1, 32,  0,  4, 48,  0,  0,192,  0,  0,  0,  3, 16,  2,  0,128,  1,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 12,  0,  0, 48,  0,  6,  0,  2,  0,  0,  0,  8,  0,  0,  0,  0,128,  0,  0,192,  0,  4,  0,128, 64,253,
+ 32,  0,  0,128,  0, 16,  0,  0,  0,  0,  0,  0,  0, 32,  0,  4,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0, 64,128,  0,  0,  0,  0,  0,  4,  0,  0,  0, 64,  2,  0,193,252,
+  8,128,  0,  0,  0,  0, 64,  0, 16,  0,  0,  0,  0,  0,  0,  1,  0,  0,  2,  0,  0,  8,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 64,  0,  0,128,  0, 16,  0,  4, 64,  0, 16,  0,  2, 64,  0,  0,  0,  1,  0,  0,  4,  0,  0,  0,111,252,
+  0,  4,  0,133,  0,  0,  2,  0,  0, 16,  1, 36,128,  8,  8,  4,  0, 64, 16,130, 64,  0,  8,  8, 68,128, 40,  4,129, 32,  0,  0,  0,  0, 16,  0,  2,  2, 32,  0,  0,  1,  1, 16,128,  0, 64,  0,  4,  2,  1, 32,  8,  1,  1,  1, 16,  4,  0,  0,  0,  8,  3,  0, 72,252,
+  0,  0,  1,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72,252,
+  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,112,254,
+  0, 32,  0,  0,  0,  0,  0, 64,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0, 16,  0,  0,  0,  0,  8,220,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0, 32,  0,  0,  0,  0, 16,  0, 28,254,
+  0,  0,  0,  0,  0,  0,  0, 32,  0,  1,  0,  0, 20,  0,  0,  0,  0,  0,128,  0,  1,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  8,  0,  0,  0, 64,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,108,253,
+  0,  0,  0,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,128,  0, 80,  0,  0,  0,  0,  0,  0, 64,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8, 32,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,180,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  8, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0, 32,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0, 16,148,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0, 64,  0,240,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0, 64,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  4,  0,  0,  0,  0,  2,182,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,200,255,
+  0,  0,  0,  0,  4,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,132,  0,  0,  0,  0,  1,  0, 16,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0, 32,  0,  0,128, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,140,255,
+  0,  0,  0,  0,  2,  0, 32,  0,  4,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  2,  0,  1,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0, 64,  0,  8,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 32, 32,  0,  0,  0,  0,  8,  2,  0,  0,  0,  4,124,255,
+  0,  0,  0,136,  1,  0,128,  4, 16,  6,  0,  0,  0,  0,  0,  4,  0,  1,130,  2,  0,144,  0,  2, 32,  2,  8,  0,  0,  0,  0,  0,  0,  0, 80, 64,  2, 16,  0, 16,  0, 64,193,168,  0,  0,180,  0,  0,  0,  0,  0, 74, 65,  0,  0, 64,168,160,  0, 64,  0,128, 18, 60,255,
+  0,  0,  0,  1,210,128,  0,  8,  4,  2,  0,  0,  0,  2, 64,  0,  0,132, 64,  0,  0,  0,  0,  0, 12,  8,128,  0, 16,  0,  0,  0,  0,  0,  0, 32,208,  0,160,144, 16,152,165, 32, 52,136,130,128,  0, 10, 64, 17, 16,  0,  0,  0,  3, 96,  9,128,  1, 90,  0,  0,180,253,
+  0,  0,  0,128,  0,  0,  0,  8,  4,  0,  0,  0,  0,  8,  0,  1,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  1, 32,  0,  0,  0,  0,  0,  0, 32,  0,  0,128,  0, 64,  0,  0,  1, 16,  8,  4,  0,  0, 16,  0,  2,  0,  0,  0,  0,  0,  0,  8,  0,  1,  0,  0,  0,156,252,
+  0,  0,  0,  0,  0,129,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  2,  4,  0,  0,  0,  0,  0, 16,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  4,  8, 64, 32,  0,  0,129,  0,  0,  0,  0,  0,  0,  0,128,  0, 16,  0,  0,  2, 32,  0,  0,112,255,
+  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0, 64, 90,253,
+  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  8,  0, 68,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  4,128,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,152,254,
+  0,  0,  0,  0,  0,  0, 32,  0, 32,  0,  0, 64,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0, 24,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,112,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,192,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  1,  0,  0,  0,  8,  0,  0,  0,  0, 20,  0,  0,  8,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,136,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  2,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,180,254,
+128,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  8,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,124,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0, 32,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  2,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,152,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 20,253,
+  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,208,252,
+ 64,  0,  4,  0,  0, 16,  0,  0,128,  0, 16,  0,  2, 32,  0,  4,128,  0, 64,  0,  2,128,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,128,  0,  8,  0,  0, 32,  0,  4,  4,  1,  0,  0,  0, 72,  0,  0,  0,  0, 64,  0,  0,128,  0,  0,  0,  0,  0, 96,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0, 16,  0,  4,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  4, 80,255,
+  0,  0, 64,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0, 32,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,152,252,
+  0,  4,  5,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,228,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  2,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,128,252,
+  8,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0, 32,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,236,252,
+  2,  0,  0,  0,  4, 64,  0,  8,  4,  0, 32, 16,  0,  0, 64, 16,  0,  2,  1, 32,  0,  0,128,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,129, 16,  0,  4,  0,  0,  0,  8,128,  0,  0,  4,  0,129, 32,  0,  0,  0,  0,  0,  8,  2,  0,  0,  8,192,108,254,
+ 64,  0,  0,  0,  1,  1,  0,  0,  0,128,  0,  0,  4,128,  0,  4,  0,  0,  0,  0,  0,  2,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  4,  0,  0,  0,  4,  0,  0,  0,  0,128,  0,  0,  0,  0,  0, 32,  0,  0,128,  0,  0,  8,  0,  0,  0,  0, 64,219,253,
+ 32, 64,  0,128,  1, 36,  0,  4,  8,  0, 18, 32,129, 35,128,108,  6,  1,  3, 64,  0, 16,  0,  1,  0,  1,  0,  5,  8,  0,  0,  0,  0,  0,  0, 20,  2,148,  0, 17,  0,  3,  0,  0,  0, 16,  0,  6, 20,  4,128,  0, 57,  0,  0, 32,  0,  0, 48,  1,  0, 32,  4,  0,160,253,
+128,  8, 48,  8, 96,129,  0,  8, 68,  0, 32,  0, 66,128,  0,  0,  0,197,  0,  4, 24,  0,  1,  0, 12,  4,  0,  5, 16, 34,  0,  0,  0,  0,128, 72,194,  3,119, 32,  0, 32,194, 65, 24, 45,206, 64,  4, 52,  0,129,  0, 24,  0,  0,  0, 16,  1,128,  0, 92, 80,  0, 48,254,
+128,  0, 16,  8,  0,  1,  0,  8,  4,  0, 32,  0,  0,128,  0,  0,  0,  0,  0,  0,  8,  0,  1,  0,  0,  4,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 16,  0,  0,129, 64, 16,  8,  1, 64,  0,  0,  0,129,  0, 16,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,136,255,
+  0,  0,  8,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  1,  0,  8,  0,  0,  0, 16,  0,  0,  1,  0,  0,  0,  0,  0,  0, 32,  0,  0,  4,129,  0,  0,  0, 64,  0,  0,  4,  2,  1,  0,  8,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  1, 32,  8,  0,180,255,
+ 16,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,134,253,
+  2,  0,128,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  8,128,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 17,  0,  0,  0, 64, 48,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0, 32,  0, 64,  0,  0,  0,  0,  0,  0,  0,  4,  0, 16,  1,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,180,252,
+  2,160,  2,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, 16,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 64, 56,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 45,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,240,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,152,253,
+  0,  0,  0,  0,  0, 32,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0, 32,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,136,253,
+ 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  8,  0,136,  0,  0,  0,  0,  0,  0,  0, 18,  2,  0, 32,  0,  1,  0,  0,  0,  0,  0, 16, 16,  2,  0,  0,  8,  8,  1,  0,  0,  0,  0,  4,  0, 32,  0,  0, 88,254,
+ 32,  1,  0,  0,  0,128,  0,  0,  2,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0, 16,  0,  0,  0,  0,  4,  0,  0,  0,  0,113,252,
+  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0, 16,  0, 32,  0,  0,  0,  0,  0,  0,  0, 64,182,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0, 64,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 20,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 34,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  1,  0, 16,  0,  0,  0,228,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,116,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0,  0, 48,  0,  0,  0,132,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  8,  0, 16,  0,  0,  0, 48,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,144, 16,  0,192,  8,  0,  0, 64,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 44,  0,  0,224, 32,  0,  0,  4,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,192,  0,  0,  0,208,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48, 18,  0,192,  0,  0,  0,196,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 18,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,208, 66,  2,  0, 10,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,128,  6,  0, 20,254,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,166,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  4,  2,128,225,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 24,130, 28,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  5,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,240, 32, 28,  0,129,253,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,  0, 24,  0, 63,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 38,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 36, 24,  0, 12,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,148, 64,  0,208,  8,  0,  0,248,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,192, 64,  0,  0,176,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0,  0,  0, 64,  0,  0,188,255,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36,  0,  0,  0,  0,  0,  0,109,252,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,192, 68,  0,  0, 80,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 40,  0,  0, 48,  0,  0,  0,  4,252,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,128,  0,  0,128,152,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 66,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36,  0,  0,  0, 20,  0,  0,  8,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 34,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,164, 64,  0,208,  0, 10,  9, 96,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,192,  0, 16,  0,228,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 44,  0,  0,192,  0, 14,  0, 68,253,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 20,  0,  0,192, 36, 18,  0, 89,253,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,192, 68,  8,  0,220,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0,  0,240,  0, 20,  0,112,252,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,192, 64,  8,128, 16,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0, 16,  0, 40,254,
+ 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36,  0,  0, 16,  0,  0,  0, 94,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16, 16,  0,  0, 32,  0,  0, 12,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 44,  0,  0,192, 64,  0,  0,204,255,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 20,  0,  0,192,  2,  0,128,101,254,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,128,  0,128,100,253,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0,  0, 48,  0,  0,  0,229,255,
+ 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0, 64, 64,  0,  0,139,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0, 28,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 20,  0,  0, 16, 36,  0,  0,208,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32, 16,  0,  0,  0,  0,  0, 44,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0,  0,192,  0,  0,  0,168,254,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36,  0,  0,192, 64,  0,  0, 41,253,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 70,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,192, 68,  0,  0,144,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0, 40,  0,  0,176,  0,  0,  0,  0,253,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,192,  0,  0,128,220,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36,  0,  0,192, 20,  0,  0,128,254,
+ 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  5,  4,  0,  0, 16,  0,  2,  0,246,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,128,  0,  0,  0,  0,  0,  0,  0,180,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  1,  0,  0,  0,  0,  0,  0,  0,  0, 96,  1, 48, 16,  0, 48,  0,  6,  0,144,252,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  0, 48,  1,  0, 16,  0,  2,128, 93,254,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 19,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  1,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  1,  0,192,  8, 24,130,156,255,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,  3,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,  0,  0,  0,  0,  0,  0,  0,  0,224,  0, 60, 32,  0,224, 32, 28,  0, 68,255,
+ 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 48,  8,  0,192,  0, 24,128,109,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,128,  0, 48,  1,  0,192,  0, 24,  0,236,252,
+  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 13,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 38,  0,  0,  0,  0,  0,  0,  0,  0, 32, 80,  4,  9,  0,208, 16, 74,  8, 20,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0, 44,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,128,  1, 48,  8,  0,128,  0, 14,  0,216,252,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 76, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 34,  1,  0,  0,  0,  0,  0,  0,  0,  0,144,128,  0,  0,  0, 36, 18,  0, 85,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0, 11,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 44,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,128,132,144, 16,  0,  0, 68,  8,  0, 40,252,
+  0,  0,  0,  0,  0,  0,  0,  0,192,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  7,  0,  0,  0,  0,  0,  0,  0,  0, 96,  1, 44,  0,  0,240,  0, 20,  0,252,255,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  1,  0,  0,  0,  0,  0,  0,  0,128,  0, 16,  0,  0,  0, 64,  8,128,224,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 76,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 70,  0,  0,  0,  0,  0,  0,  0,  0,128,129, 48, 18,  0,  0,  2, 16,  0,172,255,
+ 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,255,
+ 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  0,128,  0, 16,  0,  2,  0,116,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+ 44,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,132,  0, 16,  0,  2,128,105,253,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  2, 64,128, 72,252,
+ 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0, 18,  0,  2, 64,  0,  8,  0,  1,  0,  0,  0,144,  0,  0, 64,  0,  8, 12,253,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 32,  0,  0,  0,  0,128, 85,255,
+ 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0, 32, 24,  0,  2, 64,  0,  8,  0,  1, 32, 16,  0,130,  0,  0,  4,129, 32,104,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 32,  0,  0,  0,  2,  0,  0, 28,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0, 16,  0,  0,  0,  0,  0,  0,188,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,120,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,255,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,129,  0, 16,202,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 88,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  8,228,255,
+  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36,252,
+  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0, 25,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  8,176,254,
+  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  2,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0, 74, 66,  1, 64, 16,228,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 64,  0,  0,  0, 88,254,
+  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 40,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0, 52,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,120,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0, 88,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,124,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,148,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  4,  0,  0,  0,  0,  0, 24,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0, 60,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,180,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0, 64, 13,255,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,188,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,176,  0, 16,  0, 40,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0, 36,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0, 22,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  8,254,
+  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,128,  1, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  0,192,  2,  0,  2,  0,  0, 16,  0,  0,  0,  0,  0,  0,160,  0,128,  4,  0, 36,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72,  0,  0,192,  0, 18,  0,  0,  0,  0,  0,  0,  0,  0, 64, 16,  0,  0,  0, 64,  0,  0,128,  0,128, 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  0,  0,  0,100, 66, 48,  8,  5,100,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0, 64, 32,  8,  4,224,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0, 16,  0,  0, 88,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 88,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 44,255,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0, 64,  0,  2,  0,201,254,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,188,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0, 76,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 64,  2,  1,  0,  0,  0,  0,  0,  0,  0,208, 16,  0,  0,  0,  0,  0,  0,160, 33,  0,  0,  0,  0,  0,  0,  0,208,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 52,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0,  2,  2,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,224,  1,  0,  0,  0,  0,  0,  0,  0, 16,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26,  0, 35,  0,  0,  0,  0,  0,  0,  0,  0,192, 34,  0,  0,  0,  0,  0,  0, 32, 72,  0,  0,  0,  0,  0,  0,  0, 60,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0, 35,  0,  0,  0,  0,  0,  0,  0,  0,128,  4,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0, 92,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,196,129,  0,  0,  0,  0,  0,  0,  0,  0,240, 32,  0,  0,  0,  0,  0,  0,192, 65,  0,  0,  0,  0,  0,  0,  0,200,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,128, 64,  0,  0,  0,  0,  0,  0,  0,148,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  5, 11,  1,  0,  0,  0,  0,  0,  0,  0,192, 32,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0, 28,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 10, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,208,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 14,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,148,254,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 82,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 24,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,136,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,192, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,129,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 20,196,  0,  2,  0,  0,  0,  0,  0,  0,  0,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,164,252,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 10,  0,  3,  1,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,209,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,138,  4, 35,  0,  0,  0,  0,  0,  0,  0,  0, 64,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,188,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,132,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,216,255,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 66,  4, 32,  0,  0,  0,  0,  0,  0,  0,  0,128, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,165,252,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,137,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,136,  0,  0,  0,  0,  0,  0,  0,  0,  0,136,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,244,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,224,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,196,  0,  0,  0,  0,  0,  0,  0,  0,  0,176,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,224,253,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 80,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  5, 19,  0,  0,  0,  0,  0,  0,  0,  0,  0, 66,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252,252,
+ 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,108,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 44,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,224,  1,  0,  0,  0,  0,  0,  0,  0,208,255,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  1,  0,  0,  0,  0,  0,  0,  0,109,252,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,136,  0,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0,  0,  0,  0,  0,  0,128,  9,  0,  0,  0,  0,  0,  0,  0,208,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,192,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0,192, 65,  0,  0,  0,  0,  0,  0,  0,104,252,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,112,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 88,  8, 18,  0,  0,  0,  0,  0,  0,  0,  0,192,  4,  1,  0,  0,  0,  0,  0,  0, 40,  0,  0,  0,  0,  0,  0,  0, 20,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26, 64,  3,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  1,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,222,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,168,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,192,131,  0,  0,  0,  0,  0,  0,  0,  0,128,128,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,144,252,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26, 64, 32,  0,  0,  0,  0,  0,  0,  0,  0, 64,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 33,252,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,136,  0,  0,  0,  0,  0,  0,  0,  0, 64, 34,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,208,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,128,  3,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0, 96,128,  0,  0,  0,  0,  0,  0,  0, 53,254,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,129,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 67,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0, 17,  0,  0,  0,  0,  0,  0,  0,  0,128,130,  0,  0,  0,  0,  0,  0,128, 81,  0,  0,  0,  0,  0,  0,  0,152,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,108,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,192,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,128, 65,  0,  0,  0,  0,  0,  0,  0,188,253,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24, 64,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,237,253,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 16,139,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,228,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,128,  3,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0,224,129,  0,  0,  0,  0,  0,  0,  0,  4,255,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 52,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  8, 16,  1,  0,  0,  0,  0,  0,  0,  0,192,128,  0,  0,  0,  0,  0,  0,  0, 80,  0,  0,  0,  0,  0,  0,  0, 44,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26, 64, 18,  1,  0,  0,  0,  0,  0,  0,  0, 16, 16,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,206,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  4,  3,  0,  0,  0,  0,  0,  0,  0,  0,192, 32,  0,  0,  0,  0,  0,  0,224,  1,  0,  0,  0,  0,  0,  0,  0, 52,255,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0, 11,  1,  0,  0,  0,  0,  0,  0,  0, 64,  8,  0,  0,  0,  0,  0,  0,160, 41,  0,  0,  0,  0,  0,  0,128,209,255,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4, 35,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,128,152,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,192,  2,  2,  0,  0,  0,  0,  0,  0,  0, 48, 32,  0,  0,  0,  0,  0,  0,192, 65,  0,  0,  0,  0,  0,  0,  0,249,252,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,128, 65,  0,  0,  0,  0,  0,  0,  0,175,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 66,  8,147,  0,  0,  0,  0,  0,  0,  0,  0,192, 36,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0, 32, 32,  0,  0,  0,  0,  0,  0,  0, 68,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,192,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,252,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26, 64, 19,  1,  0,  0,  0,  0,  0,  0,  0,  0, 66,  0,  0,  0,  0,  0,  0,  0, 72,  0,  0,  0,  0,  0,  0,  0,101,252,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  4,136,  0,  0,  0,  0,  0,  0,  0,  0,  0,136,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,152,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,128,  3,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0, 96, 64,  0,  0,  0,  0,  0,  0,  0, 84,255,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,131,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,128,120,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 66,  8, 16,  0,  0,  0,  0,  0,  0,  0,  0,192, 16,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0, 44,255,
+ 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,252,
+ 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0, 16,  0,  0, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2,  0, 20,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 52,254,
+ 44,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0, 16,  0,  0, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2,128, 92,252,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,128,181,254,
+ 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0, 16,  0,  0, 16,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1,  0,  0,  4,128,  0, 16,  0,  2,  0,100,252,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,249,255,
+ 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0, 16,  0, 64,  0,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1,  0,132,  4,128,  0, 16,  0,  2,  0,124,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,140,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,104,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,180,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  2,  0,  0,  0,  0,  0,  0,  0, 28,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,184,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  4,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0, 60,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,136,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,188,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  1,  0,  0,  0,  1,  1,  0,  0,  2,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  1,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,104,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,188,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0, 56,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 66,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 45,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 44,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0, 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 92,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,172,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  4,  1, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0, 64,252,254,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 13,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  0, 96,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  1,  4,140,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,176,  0,  0,  0,  0,  0,  0,  0, 68,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  8,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  9,  0,  0, 16, 20,  0, 64,  0,  8,  0,  0,  0,  0,  0,  8,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  8,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  4,  0, 64,  0,  4,  0,  0,  0,  0,  0,116,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 20,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 88,254,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 88,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,252,255,
+ 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,105,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0, 26,  0,  0,  0,  0,  0, 32,  0,  0,128, 34,  2,  0, 26,  0,  0,  0,  0,  0, 32,  8,148, 16,  0,  0,  0,  0, 16,  0, 26, 64, 96,104,  0,129, 36,  4, 20, 64,  0,144,  2,  0, 64, 16, 72, 68,  0,  0,  0,  0,128,  6, 80, 16,  0,  0,240,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,  0, 64, 32,  0,  0, 64, 64,  0,  0,128, 32,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,184,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,128,  3,  0,  0, 24,  0,  0,  0,  0,  0,128,  0, 48,  0,  0,  0,  0,  0,192, 32,  0,  0,  2,  2,  0,  0,128, 65, 28,  0,  0,176,  0,  0,  0,131, 88,  0,  0,  0,  0,  0,  0,  0,112,  0,  0,  0,204,252,
+  0,  0,  0,  0,  0,  0,  0, 24,  1,  0,  0,  0,  0,  0, 80,  0,128,  4,  0,  0, 24, 16,  0,  0,  0,  0,  0, 80,  0, 64,  0,  0,  0,  0,192,  8, 88,  8,  0, 96, 32, 32,  8, 16, 36,  0,  0, 80,  0,  0,  0,  0, 40,  0,  0,  0,  0,  0,  0, 22,146,  0,  0,  0,216,255,
+  0,  0,  0,  0,  0,  0,  0, 24,  9,  0,  0,  0,  0,  0, 16,  0,  0,  2,  0,  0, 88,  0,  0,  0,  0,  0,  0,136, 16,  4,  0,  0,  0,  0,192,  4, 24,  1, 16, 97, 36,  0,130,  0, 18,  0,  0,128,  0,  0,  0,  1, 68,  0,  0,  0,  0,  0,  0, 38, 66,  0,  0,  0,236,253,
+  0,  0,  0,  0,  0,  0,  0, 30,  0,  0,  0,  0,  0, 96,  0,  1,  0,  5,  0,  0,  6, 16,  0,  0,  0,  0, 96,  0, 44,  0,  0,  0,  0,  0,240, 32, 30,196,  0,120,  0,  3, 96,  1, 40,  0,  0,112,  0,  0,192,  2, 56,  0,  0,  0,  0,  0,128,  7,160,  0,  0,  0,216,252,
+  0,  0,  0,  0,  0,  0,  0, 24,  8,  0,  0,  0,  0,128,  0,  0,  0,  2,  0,  0, 24,  0,  0,  0,  0,  0,  0, 64, 48,  0,  0,  0,  0,  0,192, 64, 24,  8,  0, 96,  0,  8,130,  0, 16,  0,  0,128,  0,  0,  0,  1, 64,  0,  0,  0,  0,  0,  0,  6, 64,  0,  0,  0,160,253,
+  0,  0,  0,  0,  0,  0,  0, 88,  0,  0,  0,  0,  0,128, 65,  0,  0,  4,  0,  0,152, 16,  0,  0,  0,  0,128, 17,176, 64,  0,  0,  0,  0,192,  8, 24,  1, 35, 97,128, 44,128,145, 36,  0,  0, 64,  0,  0,  0, 35, 33,  0,  0,  0,  0,  0,  0,  6,145,  0,  0,  0,236,252,
+  0,  0,  0,  0,  0,  0,  0,154,  8,  0,  8,  0,  0,160,  4,  0,128,  6,  0,  0,  2,  3,  0,  0,  0,  0,  0,  0,  4,  6,  0,  0,  0,  0,208,  0, 10, 17,  0,104,  4,  0,  0,  0, 36, 64,  0,144, 64,  0, 64,  0,  8,  0,  0,  0,  0,  0,128, 66,  8,  0,  0,  0,178,254,
+  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,  0, 16,  0,  0, 96, 32,  0,  0,  0, 16,  0,  0, 64,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,208,253,
+  0,  0,  0,  0,  0,  0,  0, 24,  8,  0,  0,  0,  0,128,129,  0,  0,  6,  4,  0, 24,  0,  0,  0,  0,  0,  0,  0, 32,  8,  0,  0,  0,  0,192, 32, 14,  0,  0, 96, 16,  0,  0,  0, 44,  0,  0,176,  0,  0,  0,131, 96, 32,  0,  0,  0,  0,128,  3,  0,  0,  0,  0,232,252,
+  8,  0,  0,  0,  0,  0,  0, 88,  0,  0,  0,  0,  0,  0,  8,  0,  0, 70,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  8, 18,  0,  0, 96,  2,  0,  0,  0, 20,  0,  0, 80,  0,  0,  0, 19,  0,  0,  0,  0,  0,  0,128,  4,  0,  0,  0,128,205,253,
+  0,  0,  0,  0,  0,  0,  0,136, 32,  0, 96,  2,  0,128, 32,  0,  0,  6,  1,  0,136,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,192,  4,  8,  0,  0, 32, 36,  0,  0,  0, 32,  0,  0,128,  0,  0,  0, 16, 32,128,  0,  0,  0,  0,  0,  2,  0,  0,  0,128, 40,255,
+  0,  0,  0,  0,  0,  0,  0, 14,  0,  0,120, 32,  0, 96,  1,  0,128,  1,  0,  0, 22,  4,  0,  0,  0,  0,  0,  0, 12, 32,  0,  0,  0,  0,240, 32, 20,  0,  0,120,  0,  0,  0,  0, 28,  0,  0,112,  0,  0,192,  3, 89,  0,  0,  0,  0,  0,  0,  5,  0,  0,  0,  0, 13,252,
+  4,  0,  0,  0,  0,  0,  0, 24,  8,  0, 96,  0,  0,128,129,  0,  0,  6,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192, 64,  8,  0,  0, 64,  0,  0,  0,  0, 32,  0,  0,128,  0,  0,  0,131, 32,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0, 75,254,
+  0,  0,  0,  0,  0,  0,  0, 24,  0,  0, 96,  0,  0,128,  1,  0,  0, 22,  1,  0,152, 32,  0,  0,  0,  0,  0,  0, 48, 10,  0,  0,  0,  0,192,  8, 16,  0,  0, 96,128,  0,  0,  0, 16,  0,  0, 64,  0,  0,  0, 11, 96, 36,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,192,253,
+ 16,  0,  0,  0,  0,  0,  0,138,  0,  0,  0,  0,  0, 32, 48,  0,128, 66,  0,  0, 26,  1,  0,  0,  0,  0, 32,  8,148,  0,  0,  0,  0,  0,208,  0,  2,  0,  0, 72,  4,  0, 32, 17,  4,  0,  0,208,  0,  0,  0,  0, 72,  8,137,160,  0,  1,128, 22,  0,  0,  0,  0,104,252,
+  0,  0,  0,  0,  0,  0,  0, 16,  4,  0,  0,  0,  0,  0,  0,  0,  0,  4,  4,  0, 24, 16,  0,  0,  0,  0,  0,  0,  1, 16,  0,  0,  0,  0,192,  0, 24,  0,  0, 32, 64,  0,128,128,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  4,  8,  1,  0,  0,  6,  2,  0,  0,  0,240,254,
+  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,128,  0,  1,128,  3,  0,  0, 24,  0,  0,  0,  0,  0,  0, 65, 48,  0,  0,  0,  0,  0,  0, 32, 24,  8,  0, 96,  0,  0, 96,  1, 48,  0,  0,192,  0,  0,  0,  0, 88,  0, 11,224,  0,  0,  0,  6,  0,  0,  0,  0,  0,255,
+ 12,  0,  0,  0,  0,  0,  0, 24, 17,  0,  0,  0,  0,  0,  8,  0,128,  4,  0,  0,152, 16,  0,  0,  0,  0,  0,  0,  0, 65,  0,  0,  0,  0,192,  8, 88,  0,  0, 96, 16,  0,160,  0, 48,  9,  0,  0, 40,  0,  0,  0, 40,  0,  5, 32,  1,  0,  0,  6,  1,  0,  0,  0, 65,253,
+  4,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, 72, 16,  0,  0,  0,  0,  0,136, 16, 16,  0,  0,  0,  0,192,  4, 24,  5,  0,  0, 32,  0,  0,  1,  0,  1,  0,  0,  0,  1,  0,  0, 64,  0,  8,128,  0,  0,  0, 38,  0,  0,  0,  0,252,253,
+  0,  0,  0,  0,  0,  0,  0, 22,  8,  0,  0,  0,  0, 96,128,  0,  0,  5,  0,  0, 30,  0,  0,  0,  0,  0, 96,  0, 44,  0,  0,  0,  0,  0,240, 32, 30,  0,  0, 56,  0,  0,224,  0, 60, 16,  0,240,  0,  0,  0,  0, 56,  0,  7, 64,  1,  0,128,  7,  1,  0,  0,  0, 24,253,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0, 48, 32,  0,  0,  0,  0,192, 64, 24,  0,  0,  0,  0,  0,  0,  1, 48,  0,  0,192,  0,  0,  0,  0, 64,  0,  8,128,  0,  0,  0,  2,  2,  0,  0,128,124,254,
+  0,  0,  0,  0,  0,  0,  0,152, 16,  0,  0,  0,  0,128, 73,  0,  0,  4,  0,  0, 88, 16,  0,  0,  0,  0,128,  5, 50,  1,  0,  0,  0,  0,192,  8,152,  4,  0, 96, 34,  0,128,  0, 48, 10,  0,192, 68,  0,  0,  0, 32,  0,  4,  0,  1,  0,  0, 66,  0,  0,  0,  0, 92,252,
+  0,  0,  0,  0,  0,  0,  0,154,  8,  0,  0,  0,  0,160,133,  0,128, 38,  4,  0,  2,  0,  0,  0,  0,  0, 32,  4,  5, 18,  0,  0,  0,  0, 16,  0, 90,  0,  0,104,  4, 33, 36, 17, 52,  0,  0, 16,  0,  0, 64,  2, 40,  4, 41, 32,  1,  1,128, 34,  4,  0,  0,  0, 24,253,
+  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,128,  1,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  8,  0, 96, 32,  0,128,  0,  1,  0,  0,  0,  0,  0,  0,  1, 65, 64,  4,132,  0,  0,  0,  4,  0,  0,  0,  0, 64,254,
+  0,  0,  0,  0,  0,  0,  0, 24,  8,  0,  0,  0,  0,  0,  1,  0,  0,  6,  0,  0,  0,  8,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,192,  0, 24,  8,  0, 96, 16, 12, 96,  1, 48, 16,  0,192, 32,  0,192,  2, 56,  0, 11, 96,  1,  0,128,  3,  0,  0,  0,  0,156,255,
+  8,  0,  0,  0,  0,  0,  0, 88,  0,  0,  0,  0,  0,  0,129,  0,  0, 20,  1,  0, 64,  0,  0,  0,  0,  0,  0, 32,  0, 66,  0,  0,  0,  0,192,  0, 24,  1,  0, 96,  2,136,176,  0,  0,  0,  0,192,  2,  0, 64,  1, 72,  0,  5,160,  0,  0,128,  4,  0,  0,  0,128, 73,252,
+  0,  0,  0,  0,  0,  0,  0,152, 32,  0,  0,  0,  0,128,  9,  0,  0,  6,  1,  0,  0,  8,  0,  0,  0,  0,  0,  0,128,  8,  0,  0,  0,  0,192, 16,  8,  5,  0, 96, 36,  4,  4,  1,128, 64,  0,  0,  4,  0,  0,  2, 32,  0,  8,  0,  1,  0,  0,  2,  0,  0,  0,128,100,255,
+  0,  0,  0,  0,  0,  0,  0, 30,  0,  0,  0,  0,  0,224,  1,  1,128,  7,  0,  0,  6,  0,  0,  0,  0,  0, 96,  0, 13,  0,  0,  0,  0,  0,240,  0, 14,  0,  0, 88,  0, 15,224,  0, 60,  0,  0,240, 64,  0,192,  1, 80,  0,  7,224,  0,  0,  0,  5,  0,  0,  0,  0,128,254,
+  4,  0,  0,  0,  0,  0,  0,  8,  8,  0,  0,  0,  0,128,  1,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 33,  8,  0,  0,  0,  0,  0,  0, 24,  0,  0, 96,  0,  4,  8,  1, 48,  0,  0,192, 32,  0,  0,  2, 32,  0,  8,  0,  1,  0,  0,  2,  0,  0,  0,128,181,255,
+  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,128,133,  0,  0, 38,  1,  0, 24,  9,  0,  0,  0,  0,128, 17, 48,  2,  0,  0,  0,  0,  0, 64, 24,  4,  0, 32,128, 76,128,  0, 48,  8,  0,192,  8,  0,  0,  1, 72,  0,  4,160,  0,  0,  0,  4,  0,  0,  0,  0, 44,253,
+  0,  0,  0,  0,  0,  0,  0,154,  8,  0,  0,  0,  0, 32,  5,  0,128, 64,  0,  0,  2, 17,  0,  0,  0,  0, 32,144,164, 16,  0,  0,  0,  0, 80, 64, 90,  0,  0, 40,  4,133,164, 16, 36, 33,  0,208,  0,  0, 64, 34, 41,  8, 13, 32,  5,  0,128, 22, 16,  0,  0,  0,220,253,
+  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,128,  0,  1,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,128,  0, 24,  8,  0, 96, 32,  0,  0,129, 16,  0,  0,  0,  0,  0,  0,  1, 64,  0,  0,128,128,  0,  0,  6,  2,  0,  0,  0,228,255,
+  0,  0,  0,  0,  0,  0,  0, 16,  8,  0,  0,  0,  0,128,129,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,  0, 64, 48,  0,  0,  0,  0,  0,112,  0, 16,  8,  0, 64, 16, 12,224,  0, 44,  0,  0,192, 64,  0,192,  2, 56,  0, 12,100,  1,  0,  0,  6,192,128,  0,  0,240,252,
+  8,  0,  0,  0,  0,  0,  0, 80,  0,  0,  0,  0,  0,128,  9,  0,  0, 32,  1,  0,136,  4,  0,  0,  0,  0,  0,  4, 48, 64,  0,  0,  0,  0,144,  0, 16,  1,  0, 96,  2, 32, 36,  1, 20,  0,  0,  0,  0,  0, 64,  1, 72,  0,  0,160,  0,  0,  0,  6,  1,  2,  0,128,177,252,
+  0,  0,  0,  0,  0,  0,  0,152, 32,  0,  0,  0,  0,  0, 32,  0,  0, 22,  0,  0, 64, 16,  0,  0,  0,  0,  0,  9,  0,  4,  0,  0,  0,  0, 64,  0, 24,  5,  0, 96, 36,132,136,  0, 32,  0,  0,  0,  2,  1,  0,  2, 32,  0,  0, 16,  1,  0,  0, 34,192, 40,  0,128,156,252,
+  0,  0,  0,  0,  0,  0,  0, 30,  0,  0,  0,  0,  0,224,  0,  0,128,  7,  2,  0,  6,  0,  0,  0,  0,  0,224,129, 28,  0,  0,  0,  0,  0,160,  0, 30,  0,  0,120,  0, 11, 64,  1, 28,  0,  0,240,  0,  0,192,  1, 80,  0, 15,224,  0,  0,128,  3,241,  0,  0,  0, 80,253,
+  4,  0,  0,  0,  0,  0,  0, 24,  8,  0,  0,  0,  0,  0,128,  0,  0,  2,  0,  0, 24,  0,  0,  0,  0,  0,128,  1,  0,  0,  0,  0,  0,  0, 64,  0, 24,  0,  0, 96,  0, 12,128,  0, 32,  0,  0,192,  0,  0,  0,  2, 32,  0, 12,  0,  1,  0,  0,  6,194,  0,  0,128,121,254,
+  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,128,  1,  0,  0,  6,  2,  0, 24, 33,  0,  0,  0,  0,128,  9,178, 64,  0,  0,  0,  0,144,  0, 24,  4,  0, 96,128, 44, 40,  1, 16,  0,  0,192, 32,  0,  0,  1, 72,  0, 44,162,  0,  0,  0, 70,192, 72,  0,  0, 40,255,
+  0,  0,  0,  0,  0,  0,  0, 26,  0,  0,  0,  0,  0,160,133,  0,128, 38,  4,  0, 26,  1,  0,  0,  0,  0,160,  1,164,  0,  0,  0,  0,  0,208, 24, 90,  0,  0, 40,  4, 41, 36,  0, 52,  0,  0, 80, 64,  0, 64, 16,  8, 20, 13, 32, 72, 36,160,  6,144, 16,  0,  0,134,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,128,  1,  0,  0,  6,  0,  0, 24, 16,  0,  0,  0,  0,  0,  0, 16, 16,  0,  0,  0,  0, 64,  0, 24,  8,  0,  0, 64,  4,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  2,  0,  0,  0,  0, 16,  0,  0, 64,  0,  0,  0,132,254,
+  0,  0,  0,  0,  0,  0,  0, 24,  8,  0,  0,  0,  0,128,  1,  0,  0,  2,  0,  0, 24,  0,  0,  0,  0,  0,  0,128, 48,  0,  0,  0,  0,  0,192, 32, 24,  8,  0, 96,  0, 12,128, 65, 48, 16,  0,112,  0,  0,  0,129, 96,  0, 12,132, 65, 44,  0,  6,176,  0,  0,  0,132,255,
+  8,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,128,129,  0,  0, 22,  1,  0,152, 16,  0,  0,  0,  0,128,  5, 48, 65,  0,  0,  0,  0,192,  8, 24,  1,  0,  0, 16, 76, 16,  8,  0,  0,  0,144,  0,  0,  0, 34,  0, 20,  0,  0,  0, 20,  0, 32, 84,  0,  0,128,149,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  9,  0,  0,  6,  1,  0, 88, 16,  0,  0,  0,  0,128,  5,  0, 16,  0,  0,  0,  0,192,  4, 24,  5,  0, 32, 32,  0,129, 81,128, 64,  0, 64,  0,  0,  0,  0, 36,128,  0,144,  0, 34,  0, 32,128,  0,  0,128,168,255,
+  0,  0,  0,  0,  0,  0,  0, 22, 16,  0,  0,  0,  0,224,  1,  1,128,  7,  0,  0, 22,  0,  0,  0,  0,  0,224,129, 28,  0,  0,  0,  0,  0,240, 32, 30,  0,  0, 88,  0,  7,224,  1, 60,  0,  0,160,  0,  0,192,  3, 88,  0, 15, 96,  1, 28,128,  7,114,  0,  0,  0,252,253,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  6,  0,  0, 24,  0,  0,  0,  0,  0,128,  1,  0, 32,  0,  0,  0,  0,192, 64,  8,  0,  0, 96,  0,  0,128,  1, 48,  8,  0, 64,  0,  0,  0,  1, 32,  0, 12,128,  0, 32,  0,  6,128,  0,  0,128, 17,254,
+  0,  0,  0,  0,  0,  0,  0, 24, 33,  0,  0,  0,  0,128,132,  0,  0, 34,  1,  0, 72, 16,  0,  0,  0,  0,128,137, 48,  1,  0,  0,  0,  0,192,  8,  8,  4,  0, 96, 34,140,144,145, 48,  2,  0,144,  0,  0,  0, 83, 96, 36,140,130,145, 20,  0, 70, 65,  0,  0,  0,204,253,
+ 16,  0,  0,  0,  0,  0,  0, 26,  1,  0,  0,  0,  0, 32,  0,  0,128, 34,  4,  0, 10,  1,  0,  8,  0,  0,160,  5,  5, 18,  0,  0,  0,  0,144, 64, 10,  1,  0,104,  0, 65,162,  8, 20, 33,  0,208,  0,  2, 67,  1, 72,  4, 37,160,  4, 20,160,  0,208,  0,  2,  3, 36,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  1,  0,  6,  0,  0, 24, 16,  0,  0,  0,  0,128,  1,  0,  0,  0,  0,  0,  0, 64,  0, 16, 16,  0, 96,  0,  0,  0,  0, 33,  0,  0,  0,  0,  0,  0,  2, 33, 64,  8,  4,129, 32,  0,  6,  0,  0,  0,  0, 68,252,
+  0,  0,  0,  0,  0,  0,  0,  8, 16,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0, 16,  0,  0,  0,  0,  0,128,  0,  1,  0,  0,  0,  0,  0,176,  0, 14,  0,  0, 96, 16,  0,128,  0, 28,  0,  0,192, 64,  8,200,  1, 88,  0,  7,224,  0, 28,  0,  6,192, 32, 16,  8,220,252,
+ 12,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0, 80,  0,  0, 22,  1,  0,152, 16,  0,  0,  0,  0,  0,  1,  0, 66,  0,  0,  0,  0, 80,  0, 18,  0,  0,  0,  2,128,  2, 40, 36,  0,  0,  0,  0,  0, 64,  2, 40,  0,  9, 32,  1, 36,  0,  6,  4,  4,  0,129,233,255,
+  4,  0,  0,  0,  0,  0,  0, 24,  1,  0,  0,  0,  0,  0,  4,  1,  0,  6,  1,  0, 88, 16,  0, 96,  1,  0,  0, 16,128,  0,  0,  0,  0,  0,128,  0,  8,  0,  0, 96,  0, 64,  4,  0, 18,  0,  0,  0,  2, 65,  0,  1, 64,  0,  4,128,  0, 16,  0, 38,  0, 64,  0,128, 16,255,
+  0,  0,  0,  0,  0,  0,  0, 30,  8,  0,  0,  0,  0, 96,  0,  0,128,  3,  0,  0, 30,  0,  0,120, 64,  0,224,129, 12,  8,  0,  0,  0,  0,112,  0, 20,  0,  0,120, 16,  3, 96,  1, 40,  0,  0,240,  0,  6,144,  2, 56,  0, 10, 64,  1, 40,128,  7,241,  0,  6, 16, 64,253,
+ 12,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0, 65,  0,  0,  6,  0,  0, 24,  0,  0, 96,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,128,  0,  8,  0,  0, 96, 32,  0,128,  1, 16,  0,  0,192,  0,  0,  8,  1, 64,  0,  4,128,  0, 16,  0,  6,192,  0,  0,136,113,254,
+  0,  0,  0,  0,  0,  0,  0,144, 16,  0,  0,  0,  0,128, 17,  0,  0, 38,  1,  0, 88, 16,  0, 96,  0,  0,  0,  9, 49,  9,  0,  0,  0,  0, 64,  0, 16,  0,  0, 96,  2, 72,132, 81, 36,  0,  0,192, 36, 88, 64,  2, 32,  0,  9,  0,  1, 32,  0, 38,193, 68, 24,  0,120,255,
+  0,  0,  0,  0,  0,  0,  0, 10,  1,  0,  0,  0,  0,160,133,  0,128,  2,  4,  0, 26,  0,  0,  0,  0,  0,160, 16, 53, 33,  0,  0,  0,  0, 16, 40, 26,  0,  0, 40,  1, 41,160, 16,  4,128, 18, 20,  0,  0, 64, 33,  9,  1, 13, 32,  8,132,136, 22, 16,  0,  0,  0,252,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,128,  1,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 32,  4,  4,  1,  1,  0,  4,  0,  0,  0,  0,  2,  0, 16,  0,  0, 64,  0,  0,  6,  2, 32,  0,  0,136,252,
+  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,128,  1,  0,128,  3,  0,  0, 24,  0,  0,  0,  0,  0,128,129, 16, 16,  0,  0,  0,  0,192, 32, 24,  0,  0, 56,  0, 12,232,  0, 48,136,  3,192,128,  0,192,  1, 96, 16, 12,130,  1, 48,  8,  4, 64, 32,  0,  0,228,255,
+ 12,  0,  0,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,128,129,  0,128,  4,  0,  0,152, 32,  0,  0,  0,  0,  0,  8, 32,  2,  0,  0,  0,  0,  0,  8,  0,  8,  0, 72,  0, 76, 32,  1, 48,128,  4,  0,  2,  0, 64,  2,  0,  4, 32,  0, 68,  0,  0,  4,129,  2,  0,  0, 93,255,
+  4,  0,  0,  0,  0,  0,  0,  8,  1,  0,  0,  0,  0,128,  8,  0,  0,  2,  0,  0, 24, 16,  0,  0,  0,  0,128, 32,  0,  1,  0,  0,  0,  0, 64,  0,129,  0,  0, 32,  0,  0,132,  0,  0,  1,  2,192,  2,  0,  0,  1, 32,128, 64,128,  0, 18, 64, 38,  0,  0,  1,  0, 24,254,
+  0,  0,  0,  0,  0,  0,  0, 22,  8,  0,  0,  0,  0,224,  0,  1,  0,  5,  0,  0, 30,  0,  0,  0,  0,  0, 96,  1, 60, 32,  0,  0,  0,  0,176,  0, 30,  8,  0, 80,  0,  7, 64,  1, 60, 16,  5,240, 32,  0,128,  2, 88,  0, 15,100,  1, 44,128,  7,241,  0,  0,  0, 36,253,
+ 12,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,128,  1,  0,  0,  2,  0,  0, 24,  0,  0,  0,  0,  0,128,  1,  0,  0,  0,  0,  0,  0, 64,  0, 24,  4,  0, 32,  0,  0,136,  0, 48,  8,  2,192, 64,  0,  0,  1, 32,  0, 12,130,  0, 16,  0,  6, 66,  0,  0,128,  8,255,
+  0,  0,  0,  0,  0,  0,  0,152, 16,  0,  0,  0,  0,128,133,  0,  0,  4,  0,  0, 24,  5,  0,  0,  0,  0,128,129, 32, 16,  0,  0,  0,  0,192, 72, 24,  0,  0, 64,  0, 12, 32,  1,176,  0,  4,192,  8,  0, 64,  2, 96, 36, 12,128,145, 48, 18, 70,192, 64,  0,  0, 52,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,252,
+ 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0,  0,  0,  2, 64,  0,  8,  0,  1,  0,  0,  0,128,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  2,  0, 12,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  1, 32,  0,  0,  0,  0,  0, 76,254,
+ 44,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0, 16,  2,  2, 64,  0,  8,  0,  1, 32, 32,  4,132,  0, 16,  2,  2, 64, 64,  8,  8,  1, 33, 16,  4,130,  0, 16, 16,  2,128,209,253,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  8,  0,  0,  1,  0,  0,128,  0, 16,  0,  2, 24,  0,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2,  0,128,176,255,
+ 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0,  0, 64,  0, 64,  0,  0, 64,  1,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  1, 32,  0,  8,  0,  1, 16,  0,  4, 64,  2,  0, 88,253,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,128,  0,  0,  0,  2, 64,  0,  8,  0,  0,  0,  0,  0,128,  0,  0,227,254,
+ 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,128, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0,  0,  8,  0, 66,  0,  0,  8,  1,  0, 16,  0, 32,128,  0,  8,  2,  0, 32,  0,  4,128,  0, 32,  0,  4,128,  0,  8,  2,  0,116,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 34,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,136,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  2,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,148,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0, 16,  0,  0,  0,  0,  0,  0,  1, 32,  0,  0,128,  0,  0,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  1,  0,  0,152,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0, 44,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,128,116,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,152,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  1, 64,  0,  0,  0,  1,  0,  0,  2, 64,  0,  8,  4,  1, 32,  0,  0,128,  0,  0,184,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,188,254,
+  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  8,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,252,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 32,  0,  0,  0,  0,  0,  0,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8, 92,253,
+  0,  0,  0,  0,  0,  0, 16,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 32,  8,  4,  0, 32,  0,  0,  2,  0,  0,  8,  1,  2,  0,  0,  0,  0,  0,  0,  0,128, 32,  8,  0,  2,  0, 32,  0,  0,232,252,
+  0,  0,  0,  0,  0,  0,128,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  1,  0,  2,  0, 80,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,192,  2, 16, 80,  8,  0,  0, 72,128, 16,160,  0,  4,  0,  0,  0, 80, 16, 10,  0, 32,  0,  5,128,  0,  0,128,  0,  8,248,253,
+  0,  0,  0,  0,  0, 64,  0,  8,  0,  0,  0, 16,  0,  1, 32,  0, 18,  2,128,  0,  0,  0, 16,  0,  0,  0,  0,145, 84, 18,  0,  0,  0,  0,  0,  0,152,  4,  6, 64,  0,  0,  0,  0, 48,  0,  0,128,  0, 16,  0, 38,  1,  2,  0,  2, 64, 16,  0,130,  4, 16,  0,  0, 76,254,
+  0,  0,  0,  0,  0,128,  0,  8,  0,  0,  0, 16,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  8,  4,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0, 33,  0,  4,  0,  0,  0,  0, 92,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  1,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  1, 64,  0,  0,  0,  0, 32,  0,  0,128,  0,  4,  0,  1,  0,  0,  0,  0,  0,  0,  0,128,  0, 16,  0,  0,220,252,
+  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 32,  8,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0, 44,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0, 56,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 44,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  4,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0, 56,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0, 64,  4,  0,  0,  0,  0,  0, 16,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0, 14,253,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0, 16,  0,  0, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0, 16,  0,  0,164,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  0,  0,  0,180,252,
+  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 16,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  8,  0,  0,  0,  0, 64,  2,  8,  0,  1, 16,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,156,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0, 16,  0, 32,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,180,252,
+  8,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0, 10,  0,  0,  0,  0,128,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,252,
+  4,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 16,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0, 16,  4,  0,  0,  0,  0,  0,  0,  1,  0,  0,  2, 64,  0,  0,  2, 64, 32,  0,  0,145,  1,  0,  0, 70,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,252,
+  0,  0,  0,  0,  0,  0, 16,  0,  4,  0,  8,  0,  0,  0,  0,  8, 16,  2,  1,  0,  8,  2,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  2,  0,  0,  0,  0,  0,  0, 16,  0,  0, 64,  0,  0,  0,  0, 64,  0,  8,128,  0, 17,  0,  0,  1, 16,  0,  0,134,253,
+ 76,  0,  0,  0,  1,  0,  0,  8,  2,  0,  0,  0,  0,132,  0,  0, 16,  0,128,  0,  0,  0, 64,  0,  0,  0,128,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0, 32, 16,  0,  0, 64,  8,  0,  1,  0,  0,  0,  0,  1,  0, 16,  4,  2,  0,  0,  0,130,  0,  0,  0, 64, 38,253,
+ 32,  0,  0,128,  0,  0, 64,  2, 24,  0, 16,  0,  0, 40,  0,  8, 48,  1, 18,  0,  4,  8,  0, 18,  0,  0, 32,  0,  4,  0,  0,  0,  0,  0, 32,  0,  8, 24,  0,  8, 64, 40,  0,  0, 13,128,  0, 32,  0,  8, 64,  0, 16, 64,  3, 72,128,  8,128,  0,134, 66,  0,  0, 68,253,
+  0,  0, 32,  0,  0,128,  0,  8,  2,  1,  0,  0,  4,  0, 33,  0,128,  0,  1,  0, 20,  4,  5,  0,  0,128,130,  0,  0,  0,  0,  0,  0,  0,192, 32, 72,  2,  0, 16,  8,136,132,  1, 36,136,  4, 32, 32,  8,  0,  2, 80, 32,134,200,  0, 24,  0,  4, 68, 18, 44,  0, 12,254,
+  0,  0,  0,  0,  0,  0,  0,  8,128,  0,  0,  0,  8,  0,  0,  0,  0,  0,  1,  0,  0,  4,  1,  0,  0,  0,130,  0,  0,  0,  0,  0,  0,  0, 32, 32,  8,  0,  0,  0,  0,  0, 64,  0,  0, 16,  0,  0, 32, 16,  0,  0,  0,  0,  2, 64,  0,  8,  0,  0, 32,  0,  4,  0,132,254,
+  0,  0,  8,  0,  0, 32,  0,  0,  4,  0,  0,  0,  0,128, 64,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  4,  0,  0, 16,  2,128,  0, 32,  0,  2,  0,  0,  0,  0,  1, 16,  0,  0,  0,  0,  0,  0,  2,  0, 16,  0,  0,112,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,188,254,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 28,254,
+  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0, 32,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,196,255,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0, 80,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,244,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,236,255,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,  0,192,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0, 40,  0,  0,  0,  0, 36,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,200,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,244,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0, 18,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,253,
+  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  8,  0,  0,  0, 64,  0,  0,  0,  8,  0,  0, 32,  0,  0,  0,  0,  0,  0, 10,  0,  0,  0,  0,  0,  2,  0,  0,  0,213,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  2,  0,  0,  8, 32,  0, 32,  0,  4,128,  0, 64,  0,  0, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 18,  0,  0,  0,104,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,254,
+ 32,  0,  4,128, 16,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0, 73, 36,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,212,253,
+  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,254,
+  0,  0, 12,  0,  0,  2,  0,  0,  0,  0,120,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0, 11, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,252,
+  0,  0,  4,  0, 64,  0,  0,  0,  0,  0,104,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  5, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252,252,
+128, 17,176,  0, 32,  1,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,152,  0,  0,  0,  0,  8,128,  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,108,253,
+224,129, 56,136,  1,  0,  0,  0,  0,  0, 16, 32,  0,  0,  0,  0,  0,  0,  0,  0, 30,  8,  0,  0,  0,  6,192,129,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,252,
+128,  1, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  8,  0,  0,  0,  8,160,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,188,255,
+128,  1, 48,  0, 68,  2,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,152,  0,  0,  0,  0,  4,160,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,108,252,
+  0,  0,180,160,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,130,  8,  0,  0,  0,  9, 40, 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,232,255,
+  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,128,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,253,
+  0,  0, 48,128,  1,  0,  0,  0,  0,  0,120,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 11, 96,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,224,253,
+  8,  0, 48,162,  0,  0,  0,  0,  0,  0,104,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  2,  0,  0,  0,  5,160,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,193,253,
+  0,  0,128,  0, 70,  1,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  8,  8,  0,  0,  0,  8,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,200,252,
+  0,  0, 12, 16,  7,  0,  0,  0,  0,  0, 16, 32,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  6,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,152,254,
+  4,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  8,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 81,253,
+  0,  0,  0, 10,  6,  0,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0,  0, 80,  8,  0,  0,  0,  4,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,253,
+ 16,  0,  4,128,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  2,  0,  0,  0, 13, 32,145,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,254,
+  0,  0, 48,  0,  6,  0,  0,  0,  0,  0,120,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 15, 96,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 88,254,
+ 12,  0, 48,  0,  6,  0,  0,  0,  0,  0,104,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  8,  0,  0,  0, 13,160,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 33,253,
+  4,  0,128,  0, 70,  1,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0, 64,  8,  0,  0,  0, 12,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,136,252,
+  0,  0, 12,144,  7,  0,  0,  0,  0,  0, 16, 32,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0, 14,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,254,
+ 24,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  8,  0,  0,  0, 12,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,156,252,
+  0,  0,  0, 10,  6,  1,  0,  0,  0,  0,  0, 65,  0,  0,  0,  0,  0,  0,  0,  0,152,  0,  0,  0,  0, 12,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 40,253,
+  0,  0,  4,128,  0,  0,  0,  0,  0,  0,  8, 66,  0,  0,  0,  0,  0,  0,  0,  0, 26,  2,  0,  0,  0, 41, 40, 49,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,230,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  4,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,184,254,
+  0,  0, 60,  0,  6,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0, 11, 96,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 80,255,
+  8,  0, 52,  0,  0,  1,  0,  0,  0,  0, 96, 16,  0,  0,  0,  0,  0,  0,  0,  0, 72,  8,  0,  0,  0,  5,160,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 17,255,
+  0,  0,128,  0,  0,  2,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0, 80,  8,  0,  0,  0,  8,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 48,252,
+  0,  0,  8,144,  1,  0,  0,  0,  0,  0, 24, 32,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0,  0,  0,  0,  6,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,224,253,
+  4,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  8,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,215,252,
+  0,  0,  0, 34,  0,  0,  0,  0,  0,  0,  0, 10,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  4,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,144,254,
+ 16,  0, 52,128,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26,  0,  0,  0,  0,  1, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,252,
+  0,  0, 48,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,148,254,
+  0,  0,  0,  0,  2,  4,  0,  0,  0,  0,120,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,254,
+ 12,  0,  0,  0, 22,  0,  0,  0,  0,  0,104,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 12, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  4,254,
+  4,  0,176,  0, 16,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0, 64,  8,  0,  0,  0, 32,128,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,113,253,
+  0,  0, 60,144,  1,  2,  0,  0,  0,  0, 16, 32,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0,  3,196, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252,
+ 12,  0, 48,  0,  6,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,160,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,193,253,
+  0,  0, 48,  9, 22,  0,  0,  0,  0,  0,  0, 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  9,  0,  0,  0,  0,161,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,255,
+  0,  0, 20,130, 64,  0,  0,  0,  0,  0,104,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26,  2,  0,  0,  0,  9,160,  5,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26,  0,168,252,
+  0,  0, 32, 32,  0,  4,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  4,132, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0, 20,255,
+  0,  0, 48, 32,  2,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 11,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0,160,253,
+  8,  0, 48,  0, 70,  4,  0,  0,  0,  0, 96, 16,  0,  0,  0,  0,  0,  0,  0,  0, 80,  8,  0,  0,  0,  5,  0, 81,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26,128, 24,252,
+  0,  0,128,  0, 16,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0, 88,  8,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,132,237,255,
+  0,  0, 44,136,  1,  2,  0,  0,  0,  0, 24, 32,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0,  0,  0,  0,  6,224, 65,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0, 52,252,
+  4,  0,  0,  8,  6,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  8,  0,  0,  0,  8,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,157,254,
+  0,  0, 48,  2, 22,  0,  0,  0,  0,  0,  0, 17,  0,  0,  0,  0,  0,  0,  0,  0,152,  0,  0,  0,  0,  4,  0, 17,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,140,253,
+ 16,  0, 52,146,  6,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,128,  0,  0,  0,  2, 66,  0,  8,  0, 41,164, 16, 52,  0,  0,  0,  0,  0,  0,  0,  0, 64,  3,  0,  0,  0,160,  1,  0,  0,  0,  0,  0,  0,  0,  0,104,  0,  0,  0,  0, 52,  0,  0,  0,  0,  0,  0, 18,254,
+  0,  0, 48,  0,  6,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  4,  0, 64, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,128,  1,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,144,253,
+  0,  0, 48,128,  7,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 11,128,  0, 60,  0,  0,  0,  0,  0,  0,  0,  0,192,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,  0,  0,  0,  0, 60,  0,  0,  0,  0,  0,  0,228,253,
+ 12,  0, 48,136,  6,  0,  0,  0,  0,  0, 96, 18,  0,  0,  0,  0,  0,  0,  0,  0, 80,  8,  0,  0,  0,  5,128,133, 52,  0,  0,  0,  0,  0,  0,  0,  0, 64,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,104,  0,  0,  0,  0, 52,  0,  0,  0,  0,  0,128,  5,253,
+  4,  0, 16,  9, 64,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0, 22,  2,  0, 72,  8,  3, 97, 66,  8,128,  9,  1, 10,  0,  0,  0,  0,  0,  0,  0,  0,160,  0,  0,  0,128,133,  0,  0,  0,  0,  0,  0,  0,  0,  0, 20,  0,  0,  0,  0, 10,  0,  0,  0,  0,128,124,254,
+  0,  0, 60,  0,  1,  1,  0,  0,  0,  0, 24, 32,  0,  0,  0,  0,128,  7,  0,  0,  6,192,  3,120,  0,  6, 96,  1, 12,  0,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,224,  1,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0, 12,  0,  0,  0,  0,  0,  0,240,253,
+ 12,  0, 48, 16,  0,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0,  0,  0,  6,  0,  0, 24,  8,  3, 96,  0,  8,128,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,129,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,117,254,
+  0,  0, 48,  1,  0,  0,  0,  0,  0,  0, 96, 20,  0,  0,  0,  0,  0,  6,  0,  0,152,  0,  3, 96,  0,  4,  0, 73,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  9,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,172,255,
+ 16,  0,  4,128,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0, 52,  0,  0,208, 16,130, 16,  0,  0,  0,137, 36,  0, 52,  0,  0,  0,  0,  0,  0,  0,  0, 64,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,104,  0,  0,  0,  0, 52,  0,  0,  0,  0, 26,  0, 84,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0, 24,  0,  0,  0,  0,  4,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0, 48,  0,  0,  0,  0, 24,  0, 44,254,
+  0,  0, 60,  0,  0,  0,  0,  0,  0,  0,120,  0,  0,  0,  0,  0, 32,  0,192,  0, 24,  0,  0,  0,  0, 11, 96,  0, 60,  0,  0,  0,  0,  0,  0,  0,  0,192,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,  0,  0,  0,  0, 60,  0,  0,  0,  0, 30,  0, 72,254,
+ 12,  0, 52,  0,  0,  0,  0,  0,  0,  0,104,  0,  0,  0,  0,176,  0,  0, 64, 66,152,  2,  0,  0,  0,  5, 32,  0, 52,  0,  0,  0,  0,  0,  0,  0,  0, 64,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,104,  0,  0,  0,  0, 52,  0,  0,  0,  0, 26,  0, 29,252,
+  4,  0,128,  0, 32,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0, 48,  1,  0,128, 66, 16,  8,  0,  0,  0,  8,128, 73,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  8,  0,  0,  0,  0,  4, 48,255,
+  0,  0,  8,144,  1,  2,  0,  0,  0,  0, 16, 32,  0,  0,  0, 60, 16,  0,240,  0,  6,  0,  0,  0,  0,  6,192,  1, 12,  0,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0, 12,  0,  0,  0,  0,  6,  0, 44,252,
+ 12,  0,  0,  0,  6,  1,  0,  0,  0,  0,  0, 16,  0,  0,  0, 48,  0,  0,  0, 64, 16,  0,  0,  0,  0,  8,160,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 32,252,
+  0,  0,  0,  9,  6,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0, 48, 16,  0,  0,  4, 72,  8,  0,  0,  0,  4,160,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,224,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,150,252,
+ 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  0,  0,  0,  0,  0,  0, 16,  0,  2,  0,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  0,  0,  1, 32,  0,  0,128,  0, 16,  0,  0,  0, 56,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  8,  0,  0,  0,  0,  4,228,255,
+ 40,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1,  0,136,  4,  1,  0,  0,  0,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,130,128, 13,254,
+  0,  0,  0,  6,192,  0,  0,  0,  0,  0,  0, 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  2,132,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 80,254,
+ 32,  0,  4,  0,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  2,  0,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  0,  0,  1, 32,  0,  0,128,  0, 16,  0,  0,  0,128,253,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16, 75,252,
+ 32,  0,  0, 17, 16, 24,  0,  2, 64,  0,  0,  1,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  0, 16,  0,  6,  4,  0,  0,  0,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8, 33,  1, 32,  0,132,144,  0, 16,  0,130,  0,140,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,180,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2, 64,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,104,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,164,255,
+  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,180,255,
+  0,  0,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  2,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  4,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 60,252,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,188,254,
+  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,188,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 52,254,
+  0,  0,  0,  0, 21,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,136,  2,129,  0,  0, 40,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  8,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,104,255,
+  0,  1, 80,128,  2, 16,  1,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0, 24, 32,  0,  4,130,  0, 16,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,128,  0, 16,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 80,252,
+  0,  0, 16,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  4,  2,  1, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,253,
+  0,  1,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,128,  0, 16,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 88,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,254,
+ 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 36,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 90,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 33,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0, 44,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  4,136,  0,  1,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,108,254,
+  0,  0, 32,  0, 12,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,208,252,
+ 12,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,220,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 57,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  8,  0, 16,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,128,  0,  0,  0,  0,  1,  0,  0,  4,130, 64, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,253,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 29,254,
+  0,  0,  8,  0, 21,  0,  0,  0,  3,  0,  8, 64,  0,  4,  0,  0,  0,  0,  2,  0,128,130, 80,  0,  0,  2, 68,128, 24,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,255,
+  0,  0, 16,  8,  1,  1,  0,  0,  0,  0, 96,  8,  0,  0,  0,  8,128, 10,128,136,  2,  0,112,  0, 20,140, 66, 65,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  1,  0,  0, 32,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0, 32,  0,  0,  0,  0, 16,  0,  0,  0, 24,  0,  0,172,254,
+  0,  0, 16,  8,128,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0, 16,  2,  2, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0, 32,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0, 52,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32, 16,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,128,  0,  0,  4,128,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,196,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,255,
+  8,  0,  0,  0,  4, 10,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,165,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,180,254,
+  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,210,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  4,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,252,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 44,255,
+  0,  0,  8,  0,  2,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 84,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,124,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,164,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0, 26,  0,  0, 40,  1,  0,  0,  0, 52,  2,  0, 16, 64,  0, 64,  0,  0,  0,  0,  0,  0,  4,128,  0,  0,  0,  0,  0,216,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0,  8,  0,128,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,208,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0, 32,  0,  0,  0,  0, 60,  0,  0,  0,  0,  0,  0,  3,  2,  0,  0,  0,  0, 48,144,  7,  0,  0,  0,  0,132,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  4,  0, 64, 16,  0,  0,  0,  4,  9,  0,  0, 66,  0,  0, 19,  0,  0,  0,  0,  0, 48,129, 22,  2,  0,  0,  0, 76,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,  4,128,  0,  0, 32, 18,  0,  0,  0,  0,  1,  0,192,  8,  0,  0,  3,  4,  0,  0,  0,  0,  0,  2, 64,  0,  0,  0,  0,140,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,240, 64, 30,  4,  0, 88,  0,  0,  0,  0, 56,  8,  0,240, 32,  0,192,  3,  0,  0,  0,  0,  0, 60, 32,  7,  1,  0,  0,  0,100,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,  0, 24,  4,  0, 32, 16,  0,  0,  0, 16,  0,  0,192,128,  0,  0,  3,  0,  0,  0,  0,  0, 48,  0,  6,  0,  0,  0,  0,136,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  1,  0, 32,  2,  0,  0,  0,144,  8,  0,192,  8,  0,  0, 35,  4,  0,  0,  0,  0, 48, 34, 32,  1,  0,  0,  0,220,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0, 40,  4,  0,  0,  0,  4,  0,  0,208,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0, 34,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0,  0,  0,128, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 36,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56, 16,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  7,  0,  0,  0,  0,100,254,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 72,  2,  0,  0,  0,  0,  0,  0,192, 34,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  6,  0,  0,  0,128, 41,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,152,  0,  0, 32, 64,  0,  0,  0,  0,  9,  0,192, 68,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 70,  0,  0,  0,128, 36,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  4,  0, 80,  0,  0,  0,  0, 12,  0,  0,240,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  7,  1,  0,  0,  0, 56,254,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0, 32, 16,  0,  0,  0, 48,  8,  0,192, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 77,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0, 32,  1,  0,  0,  0, 48,  0,  0,192,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  2,  0,  0,  0, 16,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26,  8,  0, 40,  1,  0,  0,  0, 52, 10,  0, 16,  0,  0, 64,  3,  0,  0,  0,  0,  0,  0,128, 22,  0,  0,  0,  0, 32,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,120,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0,  0, 56,  0,  0,  0,  0, 60,  0,  0,192,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,128,  7,  0,  0,  0,  0, 88,252,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 66,  4,  0, 72, 16,  0,  0,  0,132,  8,  0,192,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,128, 16,  1,  0,  0,  0,169,254,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  4,  0, 32,  2,  0,  0,  0,  0,  9,  0,192, 66,  0,  0, 11,  4,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,152,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0,  0, 80, 16,  0,  0,  0, 56,  0,  0,240,  0,  0,192,  3,  0,  0,  0,  0,  0,  0,  0,  7,  1,  0,  0,  0, 68,253,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0, 32, 16,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,128,164,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  5,  0, 32,  2,  0,  0,  0, 16, 10,  0,  0, 68,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0, 34,  1,  0,  0,  0,140,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  8,  0,  0,  0,  0,  4,  2,  0,208,  0,  0, 64,  0,  4,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0, 70,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,192, 64,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,100,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  8,  0,  0,  0,  0,  0,  0, 60,  0,  0,192, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,  0, 96,252,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,154,  0,  0,  0,  0,  0,  0,  0, 52,  4,  0, 64,  8,  0,  0, 65,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0,  0,128,173,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  4,  0,  0, 17,  0,  0,  0, 16,  9,  0,192, 66,  0,  0, 35,  0,  0,  0,  0,  0,  0,  0, 70,  0,  0,  0,128,160,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0,  0, 24,  0,  0,  0,  0, 56,  0,  0,240,  0,  0,192,  3,  1,  0,  0,  0,  0,  0,128,  7,  2,  0,  0,  0, 33,253,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0, 96, 64,  0,  0,  0, 32,  0,  0, 64, 32,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,253,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  5,  0, 96,  2,  0,  0,  0,  0, 10,  0,192,  2,  0,  0,138,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,218,253,
+ 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  8,  0,  0,  0,  0,  4,  0,  0, 16,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 16,  0,  0,  0,  0, 88,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,108,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,  0,  0,  0,  0,  0,  0,  0, 60,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,252,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 26,  0,  0,  0,  0,  0,  0,  0, 52,  0,  0,  0, 66,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  1,  0,  0,  0,109,255,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,152,  4,  0,  0, 33,  0,  0,  0, 48,  9,  0,128,  2,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,252,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,  0,  0, 24,  0,  0,  0,  0, 56,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  1,  2,  0,  0,  0,132,252,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0, 96, 16,  0,  0,  0,  0,  8,  0,128,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 40,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0, 96,  1,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  1,  0,  0,  0, 52,254,
+ 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  8,  0,  0,  0,  0,  4,  0,  0,208,  0,  0, 64,  3,  0,  0,  0,  0,  0,  0,128, 18,  0,  0,  0,  0, 96,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  4,  1,  0,  0,  0, 88,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,  0,  0,  0,  0,  0,  0,  0,192,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,196,255,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  4,  0,104,  0,  0,  0,  0,  0,  0,  0,  0,  8,  1,  0,  3,  0,  0,  0,  0,  0,  0,  0, 36,  1,  0,  0,  0,189,254,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0, 96, 17,  0,  0,  0,  0, 16,  0,  0, 66,  0,  0, 11,  1,  0,  0,  0,  0,  0,  0, 66,  0,  0,  0,  0,112,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,  4,  0,112,  0,  0,  0,  0, 12,  0,  0,240,  0,  0,192,  3,  0,  0,  0,  0,  0,  0,128,  5,  2,  0,  0,  0, 52,255,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0, 64,  0,  0,  0, 48,  8,  0,192,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,128,140,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  1,  0,  0,  2,  0,  0,  0, 48,  1,  0,  0, 68,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  2,  1,  0,  0,  0,252,253,
+ 16,  0,  0,  0,  0,208,  0,  0,  0,  0,  0,  0,  0,160,  1,  0,  0,  0,  0,  0,  0, 64,  3,104,  0,  0,  0,  0, 52,  0,  0,  0,  0,  0,  0,  0, 26,  1,  0, 40,  4,  0,160,  1,  4,  0,  0, 16,  8,  0, 64,  2,  4,  0,  0,  0,  0,  0,128,  6,  0,  0,  2,  0,210,252,
+  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,128,  1,  0,  0,  0,  0,  0,  0,  0,  3, 96,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0, 64, 16,  0,128,  1,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,212,255,
+  0,  0,  0,  0,  0,240,  0,  0,  0,  0,  0,  0,  0,224,  1,  0,  0,  0,  0,  0,  0,192,  3,120,  0,  0,  0,  0, 60,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32, 16,  0,224,  1, 48,  0,  0, 48,  0,  0,  0,130,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0, 24,  8,164,254,
+ 12,  0,  0,  0,  0,208,  0,  0,  0,  0,  0,  0,  0,160,  1,  0,  0,  0,  0,  0,  0, 64,  3,104,  0,  0,  0,  0, 52,  0,  0,  0,  0,  0,  0,  0,128,  4,  0, 64,  2,  0,160,  1, 48,  0,  0, 16, 66,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0, 32,  1,  0,152,128, 33,254,
+  4,  0,  0,  0,  0,  0, 40,  0,  0,  0,  0,  0,  0,  0, 80,  0,  0,  0,  0,  0,  0,  0,160,  0, 20,  0,  0,  0,  0, 10,  0,  0,  0,  0,  0,  0, 88,  0,  0, 32, 33,  0,128,  1, 48,  6,  0,  0,  8,  0,  0,  1,  1,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,130,144,255,
+  0,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0,  0,  0,  0,192,  0, 24,  0,  0,  0,  0, 12,  0,  0,  0,  0,  0,  0,  0, 30,  8,  0, 88,  0,  0,192,  1, 60,  0,  0,160, 64,  0,192,  3,  0,  0,  0,  0,  0,  0,128,  7,  2,  0, 30,  0, 65,253,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0, 32, 16,  0,128,  1, 48,  0,  0,192,  0,  0,  0,  3,  0,  0,  0,  0,  0,  0,  0,  6,  0,  0, 24, 16, 53,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 88, 16,  0, 32,  1,  0,160,  1, 48, 32,  0,192, 36,  0,  0, 11,  4,  0,  0,  0,  0,  0,  0,  0,  1,  0, 24,  0, 70,255,
+ 32,  0,  0,  0,  0,208,  0,  0,  0,  0,  0,  0,  0,160,  1,  0,  0,  0,  0,  0,  0, 64,  3,104,  0,  0,  0,  0, 52,  0,  0,  0,  0,  0,  0,  0,  2, 72,  0,104,  0,  0,160,  1, 52,  0,  0,144,  2,  0, 64,  0,  4,  0,  0,  0,  0,  0,128, 16,  0,  0,  0,  0,132,255,
+  0,  0,  0,  0,  0,192,  0,  0,  0,  0,  0,  0,  0,128,  1,  0,  0,  0,  0,  0,  0,  0,  3, 96,  0,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  1, 48,  8,  0, 64,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0, 16,252,
+  0,  0,  0,  0,  0,240,  0,  0,  0,  0,  0,  0,  0,224,  1,  0,  0,  0,  0,  0,  0,192,  3,120,  0,  0,  0,  0, 60,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3,120, 16,  0,224,  1, 48,  0,  0,128, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,232,252,
+  8,  0,  0,  0,  0,208,  0,  0,  0,  0,  0,  0,  0,160,  1,  0,  0,  0,  0,  0,  0, 64,  3,104,  0,  0,  0,  0, 52,  0,  0,  0,  0,  0,  0,  0, 64,  4,  3,  8,  2,  0,160,  1,176,  8,  0,192,  4,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0, 16,  1,  0,  0,  0, 53,254,
+128, 33,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,128,  0, 16,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,128,  4, 19,  0, 17,  0,128,  1, 48,  1,  0,128, 68,  0,  0, 17,  2,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,148,254,
+224,  1,  0,  0,  0, 48,  0,  0,  0,  0,  0,  0,  0, 96,  0,  0,  0,  0,  0,  0,  0,192,  0, 24,  0,  0,  0,  0, 12,  0,  0,  0,  0,  0,  0,  0,  6,192,  3,113,  0,  0,192,  1, 44,  8,  0,112,  0,  0,192,  3,  0,  0,  0,  0,  0,  0,128,  1,  1,  0,  0,  0, 52,254,
+132,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  3, 96, 64,  0,128,  1, 48,  8,  0,128,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 88,252,
+128,  1,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0, 16,  5,  3,  1,  2,  0,128,  1, 48,  2,  0, 64, 40,  0,  0,138,  0,  0,  0,  0,  0,  0,  0, 36,  1,  0,  0,  0,108,253,
+ 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 30,253,
+ 32,  0,  4,128,  0,  0,  0,  2, 64,  0,  8,  0,  1,  0,  0,  4,128,  0, 16,  0,  2,  0,  0,  0,  0,  1, 32,  0,  0,  0,  0,  0,  0,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2,  0,204,253,
+  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,128,  0, 16,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 48,253,
+ 44,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64, 16,  8,  0,  1, 32,  0,  4,  0,  0,  0,  0,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,136,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2,128,245,253,
+  4,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  8,  0,  0,136,128,  8,  0,  0, 24,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,128, 92,253,
+ 32,  0,  4,128,  0,  0,  0,  2, 64,  0,  8,  0,  1,  0,  0,  4,128,  0, 16,  0,  2,  0,  0,  0,  0,  1, 32,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0, 64,  0,  0,  0,  1,  0,  0,  0,128,  0,  0,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0,  0, 16,  0,  2,  0,169,255,
+ 12,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0, 64,  0,  0,  0,  0, 32,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,177,255,
+ 32,  0,  4,128,  0, 16,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,128,  0, 16,  0,  2, 64, 16,  8, 33,  1, 32,  0,  4,  5,  0,  0,  0,  0, 16,  0,  0, 65,  0,  0,  4,  1,  0,136,  0,130,  0,  0,  0,  2, 64,  0,  8,  0,  1, 32,  0,  4,  0, 64, 16,  0,  2,  0,158,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 44,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,150,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 56,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,252,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128, 32,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0, 12,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1, 17,  0,  0,  0,  0,  0,  8,  0, 32,  0,  0,  0,  4,255,
+  0,  0, 32,  0,  4,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0, 64,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0, 34,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0, 16,  0,  2,  0,  0,  0,  0,180,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  2,  0,  0,  0,  0, 52,254,
+  0,  0, 32,  0,  4,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  4,  0,248,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,184,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  6,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,248,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,120,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,120,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0, 45,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 24,  0,  0,  0,  0,  0,188,255,
+ 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,255,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 80,254,
+ 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,164,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0, 32,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  8,  1, 16,  0,  0,128,  0,  0,  0,  2,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,128,152,253,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 16,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0, 64, 73,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 22,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  6,136,  0, 16,  0,  0, 64,  0, 16,  0,  1,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,130,  2,  0,  0, 32,255,
+128,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  4,128, 64,  0,  0,  0,  0,  0, 16,  0,  0, 32,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,128,  0,  8, 66,  8, 32,  8,  0,  0,  1, 32,  0, 16, 64,  0,  0,  7,  1,  0, 20,  0,  0,  0, 80,  8,  2, 65,  2,  0,  0,176,253,
+128,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  2,128, 32,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  8,  1,  0, 16,  0,  0,  0, 16,  4,  1, 33,  0,  0,  0,  8,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  4,  0,  0, 16,  0,128,  0,  8,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 76,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  2,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64, 88,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  1,  0,  0,  0,  0, 16,  0, 64,  1,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,124,252,
+  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0, 32,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  8,253,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,105,255,
+  8,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,188,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 28,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  4,  0,  0,  0,  0,  0,  0,  0,  2,  6,  0,  8,  8,  0,  0,  2,  0,  4,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,128,  0,  0,  0,  0, 92,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 60,254,
+  0,  4,129,  0, 18,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,144,  0,  2,  0, 32, 66,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  0,  0,  0,  0,  0,  0,  1,  0,  0,  0,  0,  0,132,  0,  0,  0,  0,  0,  0,  0, 32,  1, 36,128,  0,144,  0, 16, 17,  0, 72,  0,132,255,
+  0,  0,  0, 32,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0, 32,  0,  0,128,  0,  0, 64,  0, 64,  0,  0,  0,  0, 32,  8,  0,  0,  0,  0,  0,  0, 24,  0,  2,  0,  0,  2,  1,  0, 32,  0,  0,  0,  0,  0,  0,  0, 64,  0,  8,  0,  1, 32,  0, 20,128,  2, 16,  0,196,252,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  8,  0,  1,  0,  0,164,255,
+  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0,  0,  0,  2, 64,  0,  0,  0,  1,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0, 64,  0,  8,  0,  0, 64,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,128,  0, 16,  0,  2, 64,  0,  0,  0,  0, 32,  0,172,253,
+  0, 23,224,  2,188,128, 11, 80,  1, 42, 64,  5,168,  0, 45,160,  2, 92,128, 10, 80,  1, 46, 64,  5,168,  0, 21,224,  2,  0,  0,  0,  0,128, 10, 80,  1, 42, 64,  5,104,  1, 21,224,  2, 84,128, 10, 80,  1, 42, 64,  5,104,  1, 21,160,  5, 84,128, 10, 80,  1,100,253,
+192,  8, 20,  1,131, 85,  4,136,  0, 17,104,  2, 77,128, 96,145,  1, 34, 64,  6,200,  0, 17, 32,  3, 77,128,  8,144,  1,  0,  0,  0,  0,208,  4,200,  0, 25,120,  2, 77,162,  9,144,  1, 39,208,  4,156,  0, 17, 40,  3, 37,162, 12,148,172, 50, 80,  6,202,  0, 80,255,
+255,255
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/CVS/Entries linux-2.6.17/arch/sh/boards/renesas/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,5 @@
+D/edosk7705////
+D/hs7751rvoip////
+D/r7780rp////
+D/rts7751r2d////
+D/systemh////
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/CVS/Repository linux-2.6.17/arch/sh/boards/renesas/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/renesas
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/CVS/Root linux-2.6.17/arch/sh/boards/renesas/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/CVS/Entries linux-2.6.17/arch/sh/boards/renesas/edosk7705/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/edosk7705/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,4 @@
+/Makefile/1.2/Sun Oct 16 16:31:08 2005/-ko/
+/io.c/1.1/Mon Aug 30 12:55:31 2004/-ko/
+/setup.c/1.1/Mon Aug 30 12:55:31 2004/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/CVS/Repository linux-2.6.17/arch/sh/boards/renesas/edosk7705/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/edosk7705/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/renesas/edosk7705
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/CVS/Root linux-2.6.17/arch/sh/boards/renesas/edosk7705/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/edosk7705/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/Makefile linux-2.6.17/arch/sh/boards/renesas/edosk7705/Makefile
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/edosk7705/Makefile	2006-07-12 16:54:20.000000000 +0000
@@ -1,10 +1,6 @@
 #
 # Makefile for the EDOSK7705 specific parts of the kernel
 #
-# Note! Dependencies are done automagically by 'make dep', which also
-# removes any old dependencies. DON'T put your own dependencies here
-# unless it's something special (ie not a .c file).
-#
 
 obj-y	 := setup.o io.o
 
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/CVS/Entries linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,7 @@
+/Kconfig/1.1/Fri Jun 24 11:21:00 2005/-ko/
+/Makefile/1.4/Wed Nov 23 15:42:02 2005/-ko/
+/io.c/1.8/Sun Feb  5 21:55:28 2006/-ko/
+/irq.c/1.2/Fri Oct 28 13:12:48 2005/-ko/
+/pci.c/1.3/Sun Aug 15 16:59:25 2004/-ko/
+/setup.c/1.5/Wed Jan  4 16:34:30 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/CVS/Repository linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/renesas/hs7751rvoip
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/CVS/Root linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/Kconfig linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/Kconfig
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/Kconfig	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/Kconfig	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,12 @@
+if SH_HS7751RVOIP
+
+menu "HS7751RVoIP options"
+
+config HS7751RVOIP_CODEC
+	bool "Support VoIP Codec section"
+	help
+	  Selecting this option will support CODEC section.
+
+endmenu
+
+endif
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/Makefile linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/Makefile
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/Makefile	2006-07-12 16:54:20.000000000 +0000
@@ -1,12 +1,8 @@
 #
 # Makefile for the HS7751RVoIP specific parts of the kernel
 #
-# Note! Dependencies are done automagically by 'make dep', which also
-# removes any old dependencies. DON'T put your own dependencies here
-# unless it's something special (ie not a .c file).
-#
 
-obj-y	 := mach.o setup.o io.o irq.o led.o
+obj-y	 := setup.o io.o irq.o
 
 obj-$(CONFIG_PCI) += pci.o
 
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/io.c linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/io.c
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/io.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/io.c	2006-07-12 16:54:20.000000000 +0000
@@ -14,18 +14,13 @@
 #include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
+#include <linux/module.h>
 #include <asm/io.h>
 #include <asm/hs7751rvoip/hs7751rvoip.h>
 #include <asm/addrspace.h>
 
-#include <linux/module.h>
-#include <linux/pci.h>
-#include "../../../drivers/pci/pci-sh7751.h"
-
-extern void *area5_io8_base;	/* Area 5 8bit I/O Base address */
 extern void *area6_io8_base;	/* Area 6 8bit I/O Base address */
 extern void *area5_io16_base;	/* Area 5 16bit I/O Base address */
-extern void *area6_io16_base;	/* Area 6 16bit I/O Base address */
 
 /*
  * The 7751R HS7751RVoIP uses the built-in PCI controller (PCIC)
@@ -34,25 +29,8 @@
  * like the other Solution Engine boards.
  */
 
-#define PCIIOBR		(volatile long *)PCI_REG(SH7751_PCIIOBR)
-#define PCIMBR          (volatile long *)PCI_REG(SH7751_PCIMBR)
-#define PCI_IO_AREA	SH7751_PCI_IO_BASE
-#define PCI_MEM_AREA	SH7751_PCI_CONFIG_BASE
-
-#define PCI_IOMAP(adr)	(PCI_IO_AREA + (adr & ~SH7751_PCIIOBR_MASK))
-
-#if defined(CONFIG_HS7751RVOIP_CODEC)
 #define CODEC_IO_BASE	0x1000
-#endif
-
-#define maybebadio(name,port) \
-  printk("bad PC-like io %s for port 0x%lx at 0x%08x\n", \
-	 #name, (port), (__u32) __builtin_return_address(0))
-
-static inline void delay(void)
-{
-	ctrl_inw(0xa0000000);
-}
+#define CODEC_IOMAP(a)	((unsigned long)area6_io8_base + ((a) - CODEC_IO_BASE))
 
 static inline unsigned long port2adr(unsigned int port)
 {
@@ -60,9 +38,10 @@
 		if (port == 0x3f6)
 			return ((unsigned long)area5_io16_base + 0x0c);
 		else
-			return ((unsigned long)area5_io16_base + 0x800 + ((port-0x1f0) << 1));
+			return ((unsigned long)area5_io16_base + 0x800 +
+				((port-0x1f0) << 1));
 	else
-		maybebadio(port2adr, (unsigned long)port);
+		maybebadio((unsigned long)port);
 	return port;
 }
 
@@ -79,25 +58,10 @@
 }
 
 #if defined(CONFIG_HS7751RVOIP_CODEC)
-static inline int
-codec_port(unsigned long port)
-{
-	if (CODEC_IO_BASE <= port && port < (CODEC_IO_BASE+0x20))
-		return 1;
-	else
-		return 0;
-}
-#endif
-
-/* In case someone configures the kernel w/o PCI support: in that */
-/* scenario, don't ever bother to check for PCI-window addresses */
-
-/* NOTE: WINDOW CHECK MAY BE A BIT OFF, HIGH PCIBIOS_MIN_IO WRAPS? */
-#if defined(CONFIG_PCI)
-#define CHECK_SH7751_PCIIO(port) \
-  ((port >= PCIBIOS_MIN_IO) && (port < (PCIBIOS_MIN_IO + SH7751_PCI_IO_SIZE)))
+#define codec_port(port)	\
+	((CODEC_IO_BASE <= (port)) && ((port) < (CODEC_IO_BASE + 0x20)))
 #else
-#define CHECK_SH7751_PCIIO(port) (0)
+#define codec_port(port)	(0)
 #endif
 
 /*
@@ -110,15 +74,13 @@
 unsigned char hs7751rvoip_inb(unsigned long port)
 {
 	if (PXSEG(port))
-		return *(volatile unsigned char *)port;
-#if defined(CONFIG_HS7751RVOIP_CODEC)
+		return ctrl_inb(port);
 	else if (codec_port(port))
-		return *(volatile unsigned char *)((unsigned long)area6_io8_base+(port-CODEC_IO_BASE));
-#endif
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-		return *(volatile unsigned char *)PCI_IOMAP(port);
+		return ctrl_inb(CODEC_IOMAP(port));
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		return ctrl_inb(pci_ioaddr(port));
 	else
-		return (*(volatile unsigned short *)port2adr(port) & 0xff);
+		return ctrl_inw(port2adr(port)) & 0xff;
 }
 
 unsigned char hs7751rvoip_inb_p(unsigned long port)
@@ -126,38 +88,36 @@
 	unsigned char v;
 
         if (PXSEG(port))
-                v = *(volatile unsigned char *)port;
-#if defined(CONFIG_HS7751RVOIP_CODEC)
+		v = ctrl_inb(port);
 	else if (codec_port(port))
-		v = *(volatile unsigned char *)((unsigned long)area6_io8_base+(port-CODEC_IO_BASE));
-#endif
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-                v = *(volatile unsigned char *)PCI_IOMAP(port);
+		v = ctrl_inb(CODEC_IOMAP(port));
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		v = ctrl_inb(pci_ioaddr(port));
 	else
-		v = (*(volatile unsigned short *)port2adr(port) & 0xff);
-	delay();
+		v = ctrl_inw(port2adr(port)) & 0xff;
+	ctrl_delay();
 	return v;
 }
 
 unsigned short hs7751rvoip_inw(unsigned long port)
 {
         if (PXSEG(port))
-                return *(volatile unsigned short *)port;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-                return *(volatile unsigned short *)PCI_IOMAP(port);
+		return ctrl_inw(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		return ctrl_inw(pci_ioaddr(port));
 	else
-		maybebadio(inw, port);
+		maybebadio(port);
 	return 0;
 }
 
 unsigned int hs7751rvoip_inl(unsigned long port)
 {
         if (PXSEG(port))
-                return *(volatile unsigned long *)port;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-                return *(volatile unsigned long *)PCI_IOMAP(port);
+		return ctrl_inl(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		return ctrl_inl(pci_ioaddr(port));
 	else
-		maybebadio(inl, port);
+		maybebadio(port);
 	return 0;
 }
 
@@ -165,146 +125,160 @@
 {
 
         if (PXSEG(port))
-                *(volatile unsigned char *)port = value;
-#if defined(CONFIG_HS7751RVOIP_CODEC)
+		ctrl_outb(value, port);
 	else if (codec_port(port))
-		*(volatile unsigned cjar *)((unsigned long)area6_io8_base+(port-CODEC_IO_BASE)) = value;
-#endif
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-        	*(unsigned char *)PCI_IOMAP(port) = value;
+		ctrl_outb(value, CODEC_IOMAP(port));
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		ctrl_outb(value, pci_ioaddr(port));
 	else
-		*(volatile unsigned short *)port2adr(port) = value;
+		ctrl_outb(value, port2adr(port));
 }
 
 void hs7751rvoip_outb_p(unsigned char value, unsigned long port)
 {
         if (PXSEG(port))
-                *(volatile unsigned char *)port = value;
-#if defined(CONFIG_HS7751RVOIP_CODEC)
+		ctrl_outb(value, port);
 	else if (codec_port(port))
-		*(volatile unsigned cjar *)((unsigned long)area6_io8_base+(port-CODEC_IO_BASE)) = value;
-#endif
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-        	*(unsigned char *)PCI_IOMAP(port) = value;
+		ctrl_outb(value, CODEC_IOMAP(port));
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		ctrl_outb(value, pci_ioaddr(port));
 	else
-		*(volatile unsigned short *)port2adr(port) = value;
-	delay();
+		ctrl_outw(value, port2adr(port));
+
+	ctrl_delay();
 }
 
 void hs7751rvoip_outw(unsigned short value, unsigned long port)
 {
         if (PXSEG(port))
-                *(volatile unsigned short *)port = value;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-        	*(unsigned short *)PCI_IOMAP(port) = value;
+		ctrl_outw(value, port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		ctrl_outw(value, pci_ioaddr(port));
 	else
-		maybebadio(outw, port);
+		maybebadio(port);
 }
 
 void hs7751rvoip_outl(unsigned int value, unsigned long port)
 {
         if (PXSEG(port))
-                *(volatile unsigned long *)port = value;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-        	*((unsigned long *)PCI_IOMAP(port)) = value;
+		ctrl_outl(value, port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		ctrl_outl(value, pci_ioaddr(port));
 	else
-		maybebadio(outl, port);
+		maybebadio(port);
 }
 
 void hs7751rvoip_insb(unsigned long port, void *addr, unsigned long count)
 {
+	u8 *buf = addr;
+
 	if (PXSEG(port))
-		while (count--) *((unsigned char *) addr)++ = *(volatile unsigned char *)port;
-#if defined(CONFIG_HS7751RVOIP_CODEC)
+		while (count--)
+			*buf++ = ctrl_inb(port);
 	else if (codec_port(port))
-		while (count--) *((unsigned char *) addr)++ = *(volatile unsigned char *)((unsigned long)area6_io8_base+(port-CODEC_IO_BASE));
-#endif
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
-		volatile __u8 *bp = (__u8 *)PCI_IOMAP(port);
+		while (count--)
+			*buf++ = ctrl_inb(CODEC_IOMAP(port));
+	else if (is_pci_ioaddr(port) || shifted_port(port)) {
+		volatile u8 *bp = (volatile u8 *)pci_ioaddr(port);
 
-		while (count--) *((volatile unsigned char *) addr)++ = *bp;
+		while (count--)
+			*buf++ = *bp;
 	} else {
-		volatile __u16 *p = (volatile unsigned short *)port2adr(port);
+		volatile u16 *p = (volatile u16 *)port2adr(port);
 
-		while (count--) *((unsigned char *) addr)++ = *p & 0xff;
+		while (count--)
+			*buf++ = *p & 0xff;
 	}
 }
 
 void hs7751rvoip_insw(unsigned long port, void *addr, unsigned long count)
 {
-	volatile __u16 *p;
+	volatile u16 *p;
+	u16 *buf = addr;
 
 	if (PXSEG(port))
-		p = (volatile unsigned short *)port;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-		p = (volatile unsigned short *)PCI_IOMAP(port);
-	else
-		p = (volatile unsigned short *)port2adr(port);
-	while (count--) *((__u16 *) addr)++ = *p;
+		p = (volatile u16 *)port;
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		p = (volatile u16 *)pci_ioaddr(port);
+	else
+		p = (volatile u16 *)port2adr(port);
+	while (count--)
+		*buf++ = *p;
 }
 
 void hs7751rvoip_insl(unsigned long port, void *addr, unsigned long count)
 {
-	if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
-		volatile __u32 *p = (__u32 *)PCI_IOMAP(port);
 
-		while (count--) *((__u32 *) addr)++ = *p;
+	if (is_pci_ioaddr(port) || shifted_port(port)) {
+		volatile u32 *p = (volatile u32 *)pci_ioaddr(port);
+		u32 *buf = addr;
+
+		while (count--)
+			*buf++ = *p;
 	} else
-		maybebadio(insl, port);
+		maybebadio(port);
 }
 
 void hs7751rvoip_outsb(unsigned long port, const void *addr, unsigned long count)
 {
+	const u8 *buf = addr;
+
 	if (PXSEG(port))
-		while (count--) *(volatile unsigned char *)port = *((unsigned char *) addr)++;
-#if defined(CONFIG_HS7751RVOIP_CODEC)
+		while (count--)
+			ctrl_outb(*buf++, port);
 	else if (codec_port(port))
-		while (count--) *(volatile unsigned char *)((unsigned long)area6_io8_base+(port-CODEC_IO_BASE)) = *((unsigned char *) addr)++;
-#endif
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
-		volatile __u8 *bp = (__u8 *)PCI_IOMAP(port);
+		while (count--)
+			ctrl_outb(*buf++, CODEC_IOMAP(port));
+	else if (is_pci_ioaddr(port) || shifted_port(port)) {
+		volatile u8 *bp = (volatile u8 *)pci_ioaddr(port);
 
-		while (count--) *bp = *((volatile unsigned char *) addr)++;
+		while (count--)
+			*bp = *buf++;
 	} else {
-		volatile __u16 *p = (volatile unsigned short *)port2adr(port);
+		volatile u16 *p = (volatile u16 *)port2adr(port);
 
-		while (count--) *p = *((unsigned char *) addr)++;
+		while (count--)
+			*p = *buf++;
 	}
 }
 
 void hs7751rvoip_outsw(unsigned long port, const void *addr, unsigned long count)
 {
-	volatile __u16 *p;
+	volatile u16 *p;
+	const u16 *buf = addr;
 
 	if (PXSEG(port))
-		p = (volatile unsigned short *)port;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-		p = (volatile unsigned short *)PCI_IOMAP(port);
+		p = (volatile u16 *)port;
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		p = (volatile u16 *)pci_ioaddr(port);
 	else
-		p = (volatile unsigned short *)port2adr(port);
-	while (count--) *p = *((__u16 *) addr)++;
+		p = (volatile u16 *)port2adr(port);
+
+	while (count--)
+		*p = *buf++;
 }
 
 void hs7751rvoip_outsl(unsigned long port, const void *addr, unsigned long count)
 {
-	if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
-		volatile __u32 *p = (__u32 *)PCI_IOMAP(port);
+	const u32 *buf = addr;
 
-		while (count--) *p = *((__u32 *) addr)++;
+	if (is_pci_ioaddr(port) || shifted_port(port)) {
+		volatile u32 *p = (volatile u32 *)pci_ioaddr(port);
+
+		while (count--)
+			*p = *buf++;
 	} else
-		maybebadio(outsl, port);
+		maybebadio(port);
 }
 
-void *hs7751rvoip_ioremap(unsigned long offset, unsigned long size)
+void __iomem *hs7751rvoip_ioport_map(unsigned long port, unsigned int size)
 {
-	if (offset >= 0xfd000000)
-		return (void *)offset;
-	else
-		return (void *)P2SEGADDR(offset);
-}
-EXPORT_SYMBOL(hs7751rvoip_ioremap);
+        if (PXSEG(port))
+                return (void __iomem *)port;
+	else if (unlikely(codec_port(port) && (size == 1)))
+		return (void __iomem *)CODEC_IOMAP(port);
+        else if (is_pci_ioaddr(port))
+                return (void __iomem *)pci_ioaddr(port);
 
-unsigned long hs7751rvoip_isa_port2addr(unsigned long offset)
-{
-	return port2adr(offset);
+        return (void __iomem *)port2adr(port);
 }
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/setup.c linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/setup.c	2006-07-12 16:54:20.000000000 +0000
@@ -13,25 +13,68 @@
 #include <linux/config.h>
 #include <linux/init.h>
 #include <linux/irq.h>
-
+#include <linux/mm.h>
+#include <linux/vmalloc.h>
 #include <linux/hdreg.h>
 #include <linux/ide.h>
+#include <linux/pm.h>
 #include <asm/io.h>
 #include <asm/hs7751rvoip/hs7751rvoip.h>
+#include <asm/machvec.h>
+#include <asm/rtc.h>
+#include <asm/irq.h>
 
-#include <linux/mm.h>
-#include <linux/vmalloc.h>
+unsigned int debug_counter;
+
+static void __init hs7751rvoip_init_irq(void)
+{
+#if defined(CONFIG_HS7751RVOIP_CODEC)
+	make_ipr_irq(DMTE0_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY);
+	make_ipr_irq(DMTE1_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY);
+#endif
 
-/* defined in mm/ioremap.c */
-extern void * p3_ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags);
+	init_hs7751rvoip_IRQ();
+}
 
-unsigned int debug_counter;
+struct sh_machine_vector mv_hs7751rvoip __initmv = {
+	.mv_nr_irqs		= 72,
+
+	.mv_inb			= hs7751rvoip_inb,
+	.mv_inw			= hs7751rvoip_inw,
+	.mv_inl			= hs7751rvoip_inl,
+	.mv_outb		= hs7751rvoip_outb,
+	.mv_outw		= hs7751rvoip_outw,
+	.mv_outl		= hs7751rvoip_outl,
+
+	.mv_inb_p		= hs7751rvoip_inb_p,
+	.mv_inw_p		= hs7751rvoip_inw,
+	.mv_inl_p		= hs7751rvoip_inl,
+	.mv_outb_p		= hs7751rvoip_outb_p,
+	.mv_outw_p		= hs7751rvoip_outw,
+	.mv_outl_p		= hs7751rvoip_outl,
+
+	.mv_insb		= hs7751rvoip_insb,
+	.mv_insw		= hs7751rvoip_insw,
+	.mv_insl		= hs7751rvoip_insl,
+	.mv_outsb		= hs7751rvoip_outsb,
+	.mv_outsw		= hs7751rvoip_outsw,
+	.mv_outsl		= hs7751rvoip_outsl,
+
+	.mv_init_irq		= hs7751rvoip_init_irq,
+	.mv_ioport_map		= hs7751rvoip_ioport_map,
+};
+ALIAS_MV(hs7751rvoip)
 
 const char *get_system_type(void)
 {
 	return "HS7751RVoIP";
 }
 
+static void hs7751rvoip_power_off(void)
+{
+	ctrl_outw(ctrl_inw(PA_OUTPORTR) & 0xffdf, PA_OUTPORTR);
+}
+
 /*
  * Initialize the board
  */
@@ -39,6 +82,7 @@
 {
 	printk(KERN_INFO "Renesas Technology Sales HS7751RVoIP-2 support.\n");
 	ctrl_outb(0xf0, PA_OUTPORTR);
+	pm_power_off = hs7751rvoip_power_off;
 	debug_counter = 0;
 }
 
@@ -47,16 +91,15 @@
 void *area5_io16_base;
 void *area6_io16_base;
 
-int __init cf_init(void)
+static int __init hs7751rvoip_cf_init(void)
 {
 	pgprot_t prot;
-	unsigned long paddrbase, psize;
+	unsigned long paddrbase;
 
 	/* open I/O area window */
 	paddrbase = virt_to_phys((void *)(PA_AREA5_IO+0x00000800));
-	psize = PAGE_SIZE;
 	prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_COM16);
-	area5_io16_base = p3_ioremap(paddrbase, psize, prot.pgprot);
+	area5_io16_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot);
 	if (!area5_io16_base) {
 		printk("allocate_cf_area : can't open CF I/O window!\n");
 		return -ENOMEM;
@@ -65,19 +108,18 @@
 	/* XXX : do we need attribute and common-memory area also? */
 
 	paddrbase = virt_to_phys((void *)PA_AREA6_IO);
-	psize = PAGE_SIZE;
 #if defined(CONFIG_HS7751RVOIP_CODEC)
 	prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_COM8);
 #else
 	prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_IO8);
 #endif
-	area6_io8_base = p3_ioremap(paddrbase, psize, prot.pgprot);
+	area6_io8_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot);
 	if (!area6_io8_base) {
 		printk("allocate_cf_area : can't open CODEC I/O 8bit window!\n");
 		return -ENOMEM;
 	}
 	prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_IO16);
-	area6_io16_base = p3_ioremap(paddrbase, psize, prot.pgprot);
+	area6_io16_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot);
 	if (!area6_io16_base) {
 		printk("allocate_cf_area : can't open CODEC I/O 16bit window!\n");
 		return -ENOMEM;
@@ -86,4 +128,4 @@
 	return 0;
 }
 
-__initcall (cf_init);
+__initcall(hs7751rvoip_cf_init);
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/CVS/Entries linux-2.6.17/arch/sh/boards/renesas/r7780rp/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,7 @@
+/Makefile/1.1/Sat Jan  7 19:55:56 2006/-ko/
+/io.c/1.2/Sun Feb  5 21:55:28 2006/-ko/
+/led.c/1.1/Sat Jan  7 19:55:56 2006/-ko/
+/Kconfig/1.1/Thu Jul  6 08:19:31 2006/-ko/
+/irq.c/1.2/Thu Jul  6 12:38:03 2006/-ko/
+/setup.c/1.3/Thu Jul  6 12:38:03 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/CVS/Repository linux-2.6.17/arch/sh/boards/renesas/r7780rp/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/renesas/r7780rp
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/CVS/Root linux-2.6.17/arch/sh/boards/renesas/r7780rp/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/Kconfig linux-2.6.17/arch/sh/boards/renesas/r7780rp/Kconfig
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/Kconfig	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/Kconfig	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,14 @@
+if SH_R7780RP
+
+menu "R7780RP options"
+
+config SH_R7780MP
+	bool "R7780MP board support"
+	default y
+	help
+	  Selecting this option will enable support for the mass-production
+	  version of the R7780RP. If in doubt, say Y.
+
+endmenu
+
+endif
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/Makefile linux-2.6.17/arch/sh/boards/renesas/r7780rp/Makefile
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/Makefile	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,6 @@
+#
+# Makefile for the R7780RP-1 specific parts of the kernel
+#
+
+obj-y	 := setup.o io.o irq.o
+obj-$(CONFIG_HEARTBEAT)	+= led.o
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/io.c linux-2.6.17/arch/sh/boards/renesas/r7780rp/io.c
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/io.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/io.c	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,301 @@
+/*
+ * Copyright (C) 2001  Ian da Silva, Jeremy Siegel
+ * Based largely on io_se.c.
+ *
+ * I/O routine for Renesas Solutions Highlander R7780RP-1
+ *
+ * Initial version only to support LAN access; some
+ * placeholder code from io_r7780rp.c left in with the
+ * expectation of later SuperIO and PCMCIA access.
+ */
+#include <linux/pci.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <asm/r7780rp/r7780rp.h>
+#include <asm/addrspace.h>
+#include <asm/io.h>
+
+static inline unsigned long port2adr(unsigned int port)
+{
+	if ((0x1f0 <= port && port < 0x1f8) || port == 0x3f6)
+		if (port == 0x3f6)
+			return (PA_AREA5_IO + 0x80c);
+		else
+			return (PA_AREA5_IO + 0x1000 + ((port-0x1f0) << 1));
+	else
+		maybebadio((unsigned long)port);
+
+	return port;
+}
+
+static inline unsigned long port88796l(unsigned int port, int flag)
+{
+	unsigned long addr;
+
+	if (flag)
+		addr = PA_AX88796L + ((port - AX88796L_IO_BASE) << 1);
+	else
+		addr = PA_AX88796L + ((port - AX88796L_IO_BASE) << 1) + 0x1000;
+
+	return addr;
+}
+
+/* The 7780 R7780RP-1 seems to have everything hooked */
+/* up pretty normally (nothing on high-bytes only...) so this */
+/* shouldn't be needed */
+static inline int shifted_port(unsigned long port)
+{
+	/* For IDE registers, value is not shifted */
+	if ((0x1f0 <= port && port < 0x1f8) || port == 0x3f6)
+		return 0;
+	else
+		return 1;
+}
+
+#if defined(CONFIG_NE2000) || defined(CONFIG_NE2000_MODULE)
+#define CHECK_AX88796L_PORT(port) \
+  ((port >= AX88796L_IO_BASE) && (port < (AX88796L_IO_BASE+0x20)))
+#else
+#define CHECK_AX88796L_PORT(port) (0)
+#endif
+
+/*
+ * General outline: remap really low stuff [eventually] to SuperIO,
+ * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO)
+ * is mapped through the PCI IO window.  Stuff with high bits (PXSEG)
+ * should be way beyond the window, and is used  w/o translation for
+ * compatibility.
+ */
+u8 r7780rp_inb(unsigned long port)
+{
+	if (CHECK_AX88796L_PORT(port))
+		return ctrl_inw(port88796l(port, 0)) & 0xff;
+	else if (PXSEG(port))
+		return ctrl_inb(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		return ctrl_inb(pci_ioaddr(port));
+
+	return ctrl_inw(port2adr(port)) & 0xff;
+}
+
+u8 r7780rp_inb_p(unsigned long port)
+{
+	u8 v;
+
+	if (CHECK_AX88796L_PORT(port))
+		v = ctrl_inw(port88796l(port, 0)) & 0xff;
+	else if (PXSEG(port))
+		v = ctrl_inb(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		v = ctrl_inb(pci_ioaddr(port));
+	else
+		v = ctrl_inw(port2adr(port)) & 0xff;
+
+	ctrl_delay();
+
+	return v;
+}
+
+u16 r7780rp_inw(unsigned long port)
+{
+	if (CHECK_AX88796L_PORT(port))
+		maybebadio(port);
+	else if (PXSEG(port))
+		return ctrl_inw(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		return ctrl_inw(pci_ioaddr(port));
+	else
+		maybebadio(port);
+
+	return 0;
+}
+
+u32 r7780rp_inl(unsigned long port)
+{
+	if (CHECK_AX88796L_PORT(port))
+		maybebadio(port);
+	else if (PXSEG(port))
+		return ctrl_inl(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		return ctrl_inl(pci_ioaddr(port));
+	else
+		maybebadio(port);
+
+	return 0;
+}
+
+void r7780rp_outb(u8 value, unsigned long port)
+{
+	if (CHECK_AX88796L_PORT(port))
+		ctrl_outw(value, port88796l(port, 0));
+	else if (PXSEG(port))
+		ctrl_outb(value, port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		ctrl_outb(value, pci_ioaddr(port));
+	else
+		ctrl_outw(value, port2adr(port));
+}
+
+void r7780rp_outb_p(u8 value, unsigned long port)
+{
+	if (CHECK_AX88796L_PORT(port))
+		ctrl_outw(value, port88796l(port, 0));
+	else if (PXSEG(port))
+		ctrl_outb(value, port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		ctrl_outb(value, pci_ioaddr(port));
+	else
+		ctrl_outw(value, port2adr(port));
+
+	ctrl_delay();
+}
+
+void r7780rp_outw(u16 value, unsigned long port)
+{
+	if (CHECK_AX88796L_PORT(port))
+		maybebadio(port);
+	else if (PXSEG(port))
+		ctrl_outw(value, port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		ctrl_outw(value, pci_ioaddr(port));
+	else
+		maybebadio(port);
+}
+
+void r7780rp_outl(u32 value, unsigned long port)
+{
+	if (CHECK_AX88796L_PORT(port))
+		maybebadio(port);
+	else if (PXSEG(port))
+		ctrl_outl(value, port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		ctrl_outl(value, pci_ioaddr(port));
+	else
+		maybebadio(port);
+}
+
+void r7780rp_insb(unsigned long port, void *dst, unsigned long count)
+{
+	volatile u16 *p;
+	u8 *buf = dst;
+
+	if (CHECK_AX88796L_PORT(port)) {
+		p = (volatile u16 *)port88796l(port, 0);
+		while (count--)
+			*buf++ = *p & 0xff;
+	} else if (PXSEG(port)) {
+		while (count--)
+			*buf++ = *(volatile u8 *)port;
+	} else if (is_pci_ioaddr(port) || shifted_port(port)) {
+		volatile u8 *bp = (volatile u8 *)pci_ioaddr(port);
+
+		while (count--)
+			*buf++ = *bp;
+	} else {
+		p = (volatile u16 *)port2adr(port);
+		while (count--)
+			*buf++ = *p & 0xff;
+	}
+}
+
+void r7780rp_insw(unsigned long port, void *dst, unsigned long count)
+{
+	volatile u16 *p;
+	u16 *buf = dst;
+
+	if (CHECK_AX88796L_PORT(port))
+		p = (volatile u16 *)port88796l(port, 1);
+	else if (PXSEG(port))
+		p = (volatile u16 *)port;
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		p = (volatile u16 *)pci_ioaddr(port);
+	else
+		p = (volatile u16 *)port2adr(port);
+
+	while (count--)
+		*buf++ = *p;
+}
+
+void r7780rp_insl(unsigned long port, void *dst, unsigned long count)
+{
+	u32 *buf = dst;
+
+	if (CHECK_AX88796L_PORT(port))
+		maybebadio(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port)) {
+		volatile u32 *p = (volatile u32 *)pci_ioaddr(port);
+
+		while (count--)
+			*buf++ = *p;
+	} else
+		maybebadio(port);
+}
+
+void r7780rp_outsb(unsigned long port, const void *src, unsigned long count)
+{
+	volatile u16 *p;
+	const u8 *buf = src;
+
+	if (CHECK_AX88796L_PORT(port)) {
+		p = (volatile u16 *)port88796l(port, 0);
+		while (count--)
+			*p = *buf++;
+	} else if (PXSEG(port))
+		while (count--)
+			ctrl_outb(*buf++, port);
+	else if (is_pci_ioaddr(port) || shifted_port(port)) {
+		volatile u8 *bp = (volatile u8 *)pci_ioaddr(port);
+
+		while (count--)
+			*bp = *buf++;
+	} else {
+		p = (volatile u16 *)port2adr(port);
+		while (count--)
+			*p = *buf++;
+	}
+}
+
+void r7780rp_outsw(unsigned long port, const void *src, unsigned long count)
+{
+	volatile u16 *p;
+	const u16 *buf = src;
+
+	if (CHECK_AX88796L_PORT(port))
+		p = (volatile u16 *)port88796l(port, 1);
+	else if (PXSEG(port))
+		p = (volatile u16 *)port;
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		p = (volatile u16 *)pci_ioaddr(port);
+	else
+		p = (volatile u16 *)port2adr(port);
+
+	while (count--)
+		*p = *buf++;
+}
+
+void r7780rp_outsl(unsigned long port, const void *src, unsigned long count)
+{
+	const u32 *buf = src;
+
+	if (CHECK_AX88796L_PORT(port))
+		maybebadio(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port)) {
+		volatile u32 *p = (volatile u32 *)pci_ioaddr(port);
+
+		while (count--)
+			*p = *buf++;
+	} else
+		maybebadio(port);
+}
+
+void __iomem *r7780rp_ioport_map(unsigned long port, unsigned int size)
+{
+	if (CHECK_AX88796L_PORT(port))
+		return (void __iomem *)port88796l(port, size > 1);
+	else if (PXSEG(port))
+		return (void __iomem *)port;
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		return (void __iomem *)pci_ioaddr(port);
+
+	return (void __iomem *)port2adr(port);
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/irq.c linux-2.6.17/arch/sh/boards/renesas/r7780rp/irq.c
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/irq.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/irq.c	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,123 @@
+/*
+ * linux/arch/sh/boards/renesas/r7780rp/irq.c
+ *
+ * Copyright (C) 2000  Kazumoto Kojima
+ *
+ * Renesas Solutions Highlander R7780RP-1 Support.
+ *
+ * Modified for R7780RP-1 by
+ * Atom Create Engineering Co., Ltd. 2002.
+ */
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/irq.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/r7780rp/r7780rp.h>
+
+#ifdef CONFIG_SH_R7780MP
+static int mask_pos[] = {12, 11, 9, 14, 15, 8, 13, 6, 5, 4, 3, 2, 0, 0, 1, 0};
+#else
+static int mask_pos[] = {15, 14, 13, 12, 11, 10, 9, 8, 7, 5, 6, 4, 0, 1, 2, 0};
+#endif
+
+static void enable_r7780rp_irq(unsigned int irq);
+static void disable_r7780rp_irq(unsigned int irq);
+
+/* shutdown is same as "disable" */
+#define shutdown_r7780rp_irq disable_r7780rp_irq
+
+static void ack_r7780rp_irq(unsigned int irq);
+static void end_r7780rp_irq(unsigned int irq);
+
+static unsigned int startup_r7780rp_irq(unsigned int irq)
+{
+	enable_r7780rp_irq(irq);
+	return 0; /* never anything pending */
+}
+
+static void disable_r7780rp_irq(unsigned int irq)
+{
+	unsigned long flags;
+	unsigned short val;
+	unsigned short mask = 0xffff ^ (0x0001 << mask_pos[irq]);
+
+	/* Set the priority in IPR to 0 */
+	local_irq_save(flags);
+	val = ctrl_inw(IRLCNTR1);
+	val &= mask;
+	ctrl_outw(val, IRLCNTR1);
+	local_irq_restore(flags);
+}
+
+static void enable_r7780rp_irq(unsigned int irq)
+{
+	unsigned long flags;
+	unsigned short val;
+	unsigned short value = (0x0001 << mask_pos[irq]);
+
+	/* Set priority in IPR back to original value */
+	local_irq_save(flags);
+	val = ctrl_inw(IRLCNTR1);
+	val |= value;
+	ctrl_outw(val, IRLCNTR1);
+	local_irq_restore(flags);
+}
+
+static void ack_r7780rp_irq(unsigned int irq)
+{
+	disable_r7780rp_irq(irq);
+}
+
+static void end_r7780rp_irq(unsigned int irq)
+{
+	if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS)))
+		enable_r7780rp_irq(irq);
+}
+
+static struct hw_interrupt_type r7780rp_irq_type = {
+	.typename = "R7780RP-IRQ",
+	.startup = startup_r7780rp_irq,
+	.shutdown = shutdown_r7780rp_irq,
+	.enable = enable_r7780rp_irq,
+	.disable = disable_r7780rp_irq,
+	.ack = ack_r7780rp_irq,
+	.end = end_r7780rp_irq,
+};
+
+static void make_r7780rp_irq(unsigned int irq)
+{
+	disable_irq_nosync(irq);
+	irq_desc[irq].handler = &r7780rp_irq_type;
+	disable_r7780rp_irq(irq);
+}
+
+/*
+ * Initialize IRQ setting
+ */
+void __init init_r7780rp_IRQ(void)
+{
+	int i;
+
+	/* IRL0=PCI Slot #A
+	 * IRL1=PCI Slot #B
+	 * IRL2=PCI Slot #C
+	 * IRL3=PCI Slot #D
+	 * IRL4=CF Card
+	 * IRL5=CF Card Insert
+	 * IRL6=M66596
+	 * IRL7=SD Card
+	 * IRL8=Touch Panel
+	 * IRL9=SCI
+	 * IRL10=Serial
+	 * IRL11=Extention #A
+	 * IRL11=Extention #B
+	 * IRL12=Debug LAN
+	 * IRL13=Push Switch
+	 * IRL14=ZiggBee IO
+	 */
+
+	for (i=0; i<15; i++)
+		make_r7780rp_irq(i);
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/led.c linux-2.6.17/arch/sh/boards/renesas/r7780rp/led.c
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/led.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/led.c	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) Atom Create Engineering Co., Ltd.
+ *
+ * May be copied or modified under the terms of GNU General Public
+ * License.  See linux/COPYING for more information.
+ *
+ * This file contains Renesas Solutions HIGHLANDER R7780RP-1 specific LED code.
+ */
+
+#include <linux/config.h>
+#include <linux/sched.h>
+#include <asm/io.h>
+#include <asm/r7780rp/r7780rp.h>
+
+/* Cycle the LED's in the clasic Knightriger/Sun pattern */
+void heartbeat_r7780rp(void)
+{
+	static unsigned int cnt = 0, period = 0;
+	volatile unsigned short *p = (volatile unsigned short *)PA_OBLED;
+	static unsigned bit = 0, up = 1;
+	unsigned bit_pos[] = {2, 1, 0, 3, 6, 5, 4, 7};
+
+	cnt += 1;
+	if (cnt < period)
+		return;
+
+	cnt = 0;
+
+	/* Go through the points (roughly!):
+	 * f(0)=10, f(1)=16, f(2)=20, f(5)=35, f(int)->110
+	 */
+	period = 110 - ((300 << FSHIFT)/((avenrun[0]/5) + (3<<FSHIFT)));
+
+	*p = 1 << bit_pos[bit];
+	if (up)
+		if (bit == 7) {
+			bit--;
+			up = 0;
+		} else
+			bit++;
+	else if (bit == 0)
+		up = 1;
+	else
+		bit--;
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/setup.c linux-2.6.17/arch/sh/boards/renesas/r7780rp/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/setup.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/setup.c	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,164 @@
+/*
+ * arch/sh/boards/renesas/r7780rp/setup.c
+ *
+ * Copyright (C) 2002 Atom Create Engineering Co., Ltd.
+ * Copyright (C) 2005, 2006 Paul Mundt
+ *
+ * Renesas Solutions Highlander R7780RP-1 Support.
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <asm/machvec.h>
+#include <asm/r7780rp/r7780rp.h>
+#include <asm/clock.h>
+#include <asm/io.h>
+
+extern void heartbeat_r7780rp(void);
+extern void init_r7780rp_IRQ(void);
+
+/*
+ * The Machine Vector
+ */
+struct sh_machine_vector mv_r7780rp __initmv = {
+	.mv_nr_irqs		= 109,
+
+	.mv_inb			= r7780rp_inb,
+	.mv_inw			= r7780rp_inw,
+	.mv_inl			= r7780rp_inl,
+	.mv_outb		= r7780rp_outb,
+	.mv_outw		= r7780rp_outw,
+	.mv_outl		= r7780rp_outl,
+
+	.mv_inb_p		= r7780rp_inb_p,
+	.mv_inw_p		= r7780rp_inw,
+	.mv_inl_p		= r7780rp_inl,
+	.mv_outb_p		= r7780rp_outb_p,
+	.mv_outw_p		= r7780rp_outw,
+	.mv_outl_p		= r7780rp_outl,
+
+	.mv_insb		= r7780rp_insb,
+	.mv_insw		= r7780rp_insw,
+	.mv_insl		= r7780rp_insl,
+	.mv_outsb		= r7780rp_outsb,
+	.mv_outsw		= r7780rp_outsw,
+	.mv_outsl		= r7780rp_outsl,
+
+	.mv_ioport_map		= r7780rp_ioport_map,
+	.mv_init_irq		= init_r7780rp_IRQ,
+#ifdef CONFIG_HEARTBEAT
+	.mv_heartbeat		= heartbeat_r7780rp,
+#endif
+};
+ALIAS_MV(r7780rp)
+
+static struct resource m66596_usb_host_resources[] = {
+	[0] = {
+		.start	= 0xa4800000,
+		.end	= 0xa4ffffff,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= 6,		/* irq number */
+		.end	= 6,
+		.flags	= IORESOURCE_IRQ,
+	},
+};
+
+static struct platform_device m66596_usb_host_device = {
+	.name		= "m66596-hcd",
+	.id		= 0,
+	.dev = {
+		.dma_mask		= NULL,		/* don't use dma */
+		.coherent_dma_mask	= 0xffffffff,
+	},
+	.num_resources	= ARRAY_SIZE(m66596_usb_host_resources),
+	.resource	= m66596_usb_host_resources,
+};
+
+static struct platform_device *r7780rp_devices[] __initdata = {
+	&m66596_usb_host_device,
+};
+
+static int __init r7780rp_devices_setup(void)
+{
+	return platform_add_devices(r7780rp_devices,
+				    ARRAY_SIZE(r7780rp_devices));
+}
+__initcall(r7780rp_devices_setup);
+
+/*
+ * Platform specific clocks
+ */
+static void ivdr_clk_enable(struct clk *clk)
+{
+	ctrl_outw(ctrl_inw(PA_IVDRCTL) | (1 << 8), PA_IVDRCTL);
+}
+
+static void ivdr_clk_disable(struct clk *clk)
+{
+	ctrl_outw(ctrl_inw(PA_IVDRCTL) & ~(1 << 8), PA_IVDRCTL);
+}
+
+static struct clk_ops ivdr_clk_ops = {
+	.enable		= ivdr_clk_enable,
+	.disable	= ivdr_clk_disable,
+};
+
+static struct clk ivdr_clk = {
+	.name		= "ivdr_clk",
+	.ops		= &ivdr_clk_ops,
+};
+
+static struct clk *r7780rp_clocks[] = {
+	&ivdr_clk,
+};
+
+const char *get_system_type(void)
+{
+	return "Highlander R7780RP-1";
+}
+
+static void r7780rp_power_off(void)
+{
+#ifdef CONFIG_SH_R7780MP
+	ctrl_outw(0x0001, PA_POFF);
+#endif
+}
+
+/*
+ * Initialize the board
+ */
+void __init platform_setup(void)
+{
+	u16 ver = ctrl_inw(PA_VERREG);
+	int i;
+
+	printk(KERN_INFO "Renesas Solutions Highlander R7780RP-1 support.\n");
+
+	printk(KERN_INFO "Board version: %d (revision %d), "
+			 "FPGA version: %d (revision %d)\n",
+			 (ver >> 12) & 0xf, (ver >> 8) & 0xf,
+			 (ver >>  4) & 0xf, ver & 0xf);
+
+	/*
+	 * Enable the important clocks right away..
+	 */
+	for (i = 0; i < ARRAY_SIZE(r7780rp_clocks); i++) {
+		struct clk *clk = r7780rp_clocks[i];
+
+		clk_register(clk);
+		clk_enable(clk);
+	}
+
+	ctrl_outw(0x0000, PA_OBLED);	/* Clear LED. */
+#ifndef CONFIG_SH_R7780MP
+	ctrl_outw(0x0001, PA_SDPOW);	/* SD Power ON */
+#endif
+	ctrl_outw(ctrl_inw(PA_IVDRCTL) | 0x0100, PA_IVDRCTL);	/* Si13112 */
+
+	pm_power_off = r7780rp_power_off;
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/CVS/Entries linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,8 @@
+/Kconfig/1.1/Fri Jun 24 11:21:00 2005/-ko/
+/Makefile/1.2/Sun Oct 16 16:31:08 2005/-ko/
+/io.c/1.6/Sun Feb  5 21:55:28 2006/-ko/
+/irq.c/1.3/Fri Oct 28 13:12:48 2005/-ko/
+/mach.c/1.6/Tue Jan  3 22:51:46 2006/-ko/
+/led.c/1.3/Sat Jul  8 20:16:04 2006/-ko/
+/setup.c/1.5/Sat Jul  8 20:16:04 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/CVS/Repository linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/renesas/rts7751r2d
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/CVS/Root linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/Kconfig linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/Kconfig
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/Kconfig	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/Kconfig	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,12 @@
+if SH_RTS7751R2D
+
+menu "RTS7751R2D options"
+
+config RTS7751R2D_REV11
+	bool "RTS7751R2D Rev. 1.1 board support"
+	help
+	  Selecting this option will support version rev. 1.1.
+endmenu
+
+endif
+
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/Makefile linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/Makefile
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/Makefile	2006-07-12 16:54:20.000000000 +0000
@@ -1,10 +1,6 @@
 #
 # Makefile for the RTS7751R2D specific parts of the kernel
 #
-# Note! Dependencies are done automagically by 'make dep', which also
-# removes any old dependencies. DON'T put your own dependencies here
-# unless it's something special (ie not a .c file).
-#
 
 obj-y	 := mach.o setup.o io.o irq.o led.o
 
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/io.c linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/io.c
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/io.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/io.c	2006-07-12 16:54:20.000000000 +0000
@@ -1,6 +1,4 @@
 /*
- * linux/arch/sh/kernel/io_rts7751r2d.c
- *
  * Copyright (C) 2001  Ian da Silva, Jeremy Siegel
  * Based largely on io_se.c.
  *
@@ -10,17 +8,13 @@
  * placeholder code from io_rts7751r2d.c left in with the
  * expectation of later SuperIO and PCMCIA access.
  */
-
 #include <linux/kernel.h>
 #include <linux/types.h>
-#include <asm/io.h>
+#include <linux/pci.h>
 #include <asm/rts7751r2d/rts7751r2d.h>
+#include <asm/io.h>
 #include <asm/addrspace.h>
 
-#include <linux/module.h>
-#include <linux/pci.h>
-#include "../../../drivers/pci/pci-sh7751.h"
-
 /*
  * The 7751R RTS7751R2D uses the built-in PCI controller (PCIC)
  * of the 7751R processor, and has a SuperIO accessible via the PCI.
@@ -28,22 +22,6 @@
  * like the other Solution Engine boards.
  */
 
-#define PCIIOBR		(volatile long *)PCI_REG(SH7751_PCIIOBR)
-#define PCIMBR          (volatile long *)PCI_REG(SH7751_PCIMBR)
-#define PCI_IO_AREA	SH7751_PCI_IO_BASE
-#define PCI_MEM_AREA	SH7751_PCI_CONFIG_BASE
-
-#define PCI_IOMAP(adr)	(PCI_IO_AREA + (adr & ~SH7751_PCIIOBR_MASK))
-
-#define maybebadio(name,port) \
-  printk("bad PC-like io %s for port 0x%lx at 0x%08x\n", \
-	 #name, (port), (__u32) __builtin_return_address(0))
-
-static inline void delay(void)
-{
-	ctrl_inw(0xa0000000);
-}
-
 static inline unsigned long port2adr(unsigned int port)
 {
 	if ((0x1f0 <= port && port < 0x1f8) || port == 0x3f6)
@@ -52,7 +30,7 @@
 		else
 			return (PA_AREA5_IO + 0x1000 + ((port-0x1f0) << 1));
 	else
-		maybebadio(port2adr, (unsigned long)port);
+		maybebadio((unsigned long)port);
 
 	return port;
 }
@@ -81,17 +59,6 @@
 		return 1;
 }
 
-/* In case someone configures the kernel w/o PCI support: in that */
-/* scenario, don't ever bother to check for PCI-window addresses */
-
-/* NOTE: WINDOW CHECK MAY BE A BIT OFF, HIGH PCIBIOS_MIN_IO WRAPS? */
-#if defined(CONFIG_PCI)
-#define CHECK_SH7751_PCIIO(port) \
-  ((port >= PCIBIOS_MIN_IO) && (port < (PCIBIOS_MIN_IO + SH7751_PCI_IO_SIZE)))
-#else
-#define CHECK_SH7751_PCIIO(port) (0)
-#endif
-
 #if defined(CONFIG_NE2000) || defined(CONFIG_NE2000_MODULE)
 #define CHECK_AX88796L_PORT(port) \
   ((port >= AX88796L_IO_BASE) && (port < (AX88796L_IO_BASE+0x20)))
@@ -112,8 +79,8 @@
 		return (*(volatile unsigned short *)port88796l(port, 0)) & 0xff;
 	else if (PXSEG(port))
 		return *(volatile unsigned char *)port;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-		return *(volatile unsigned char *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		return *(volatile unsigned char *)pci_ioaddr(port);
 	else
 		return (*(volatile unsigned short *)port2adr(port) & 0xff);
 }
@@ -126,11 +93,12 @@
 		v = (*(volatile unsigned short *)port88796l(port, 0)) & 0xff;
         else if (PXSEG(port))
 		v = *(volatile unsigned char *)port;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-		v = *(volatile unsigned char *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		v = *(volatile unsigned char *)pci_ioaddr(port);
 	else
 		v = (*(volatile unsigned short *)port2adr(port) & 0xff);
-	delay();
+
+	ctrl_delay();
 
 	return v;
 }
@@ -138,13 +106,13 @@
 unsigned short rts7751r2d_inw(unsigned long port)
 {
 	if (CHECK_AX88796L_PORT(port))
-		maybebadio(inw, port);
+		maybebadio(port);
         else if (PXSEG(port))
 		return *(volatile unsigned short *)port;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-		return *(volatile unsigned short *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		return *(volatile unsigned short *)pci_ioaddr(port);
 	else
-		maybebadio(inw, port);
+		maybebadio(port);
 
 	return 0;
 }
@@ -152,13 +120,13 @@
 unsigned int rts7751r2d_inl(unsigned long port)
 {
 	if (CHECK_AX88796L_PORT(port))
-		maybebadio(inl, port);
+		maybebadio(port);
         else if (PXSEG(port))
 		return *(volatile unsigned long *)port;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-		return *(volatile unsigned long *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		return *(volatile unsigned long *)pci_ioaddr(port);
 	else
-		maybebadio(inl, port);
+		maybebadio(port);
 
 	return 0;
 }
@@ -169,8 +137,8 @@
 		*((volatile unsigned short *)port88796l(port, 0)) = value;
         else if (PXSEG(port))
 		*(volatile unsigned char *)port = value;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-		*(volatile unsigned char *)PCI_IOMAP(port) = value;
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		*(volatile unsigned char *)pci_ioaddr(port) = value;
 	else
 		*(volatile unsigned short *)port2adr(port) = value;
 }
@@ -181,143 +149,152 @@
 		*((volatile unsigned short *)port88796l(port, 0)) = value;
         else if (PXSEG(port))
 		*(volatile unsigned char *)port = value;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-		*(volatile unsigned char *)PCI_IOMAP(port) = value;
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		*(volatile unsigned char *)pci_ioaddr(port) = value;
 	else
 		*(volatile unsigned short *)port2adr(port) = value;
-	delay();
+
+	ctrl_delay();
 }
 
 void rts7751r2d_outw(unsigned short value, unsigned long port)
 {
 	if (CHECK_AX88796L_PORT(port))
-		maybebadio(outw, port);
+		maybebadio(port);
         else if (PXSEG(port))
 		*(volatile unsigned short *)port = value;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-		*(volatile unsigned short *)PCI_IOMAP(port) = value;
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		*(volatile unsigned short *)pci_ioaddr(port) = value;
 	else
-		maybebadio(outw, port);
+		maybebadio(port);
 }
 
 void rts7751r2d_outl(unsigned int value, unsigned long port)
 {
 	if (CHECK_AX88796L_PORT(port))
-		maybebadio(outl, port);
+		maybebadio(port);
         else if (PXSEG(port))
 		*(volatile unsigned long *)port = value;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-		*(volatile unsigned long *)PCI_IOMAP(port) = value;
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		*(volatile unsigned long *)pci_ioaddr(port) = value;
 	else
-		maybebadio(outl, port);
+		maybebadio(port);
 }
 
 void rts7751r2d_insb(unsigned long port, void *addr, unsigned long count)
 {
+	unsigned long a = (unsigned long)addr;
 	volatile __u8 *bp;
 	volatile __u16 *p;
-	unsigned char *s = addr;
 
 	if (CHECK_AX88796L_PORT(port)) {
 		p = (volatile unsigned short *)port88796l(port, 0);
-		while (count--) *s++ = *p & 0xff;
+		while (count--)
+			ctrl_outb(*p & 0xff, a++);
 	} else if (PXSEG(port))
-		while (count--) *s++ = *(volatile unsigned char *)port;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
-		bp = (__u8 *)PCI_IOMAP(port);
-		while (count--) *s++ = *bp;
+		while (count--)
+			ctrl_outb(ctrl_inb(port), a++);
+	else if (is_pci_ioaddr(port) || shifted_port(port)) {
+		bp = (__u8 *)pci_ioaddr(port);
+		while (count--)
+			ctrl_outb(*bp, a++);
 	} else {
 		p = (volatile unsigned short *)port2adr(port);
-		while (count--) *s++ = *p & 0xff;
+		while (count--)
+			ctrl_outb(*p & 0xff, a++);
 	}
 }
 
 void rts7751r2d_insw(unsigned long port, void *addr, unsigned long count)
 {
+	unsigned long a = (unsigned long)addr;
 	volatile __u16 *p;
-	__u16 *s = addr;
 
 	if (CHECK_AX88796L_PORT(port))
 		p = (volatile unsigned short *)port88796l(port, 1);
 	else if (PXSEG(port))
 		p = (volatile unsigned short *)port;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-		p = (volatile unsigned short *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		p = (volatile unsigned short *)pci_ioaddr(port);
 	else
 		p = (volatile unsigned short *)port2adr(port);
-	while (count--) *s++ = *p;
+	while (count--)
+		ctrl_outw(*p, a++);
 }
 
 void rts7751r2d_insl(unsigned long port, void *addr, unsigned long count)
 {
 	if (CHECK_AX88796L_PORT(port))
-		maybebadio(insl, port);
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
-		volatile __u32 *p = (__u32 *)PCI_IOMAP(port);
-		__u32 *s = addr;
-
-		while (count--) *s++ = *p;
+		maybebadio(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port)) {
+		unsigned long a = (unsigned long)addr;
+
+		while (count--) {
+			ctrl_outl(ctrl_inl(pci_ioaddr(port)), a);
+			a += 4;
+		}
 	} else
-		maybebadio(insl, port);
+		maybebadio(port);
 }
 
 void rts7751r2d_outsb(unsigned long port, const void *addr, unsigned long count)
 {
+	unsigned long a = (unsigned long)addr;
 	volatile __u8 *bp;
 	volatile __u16 *p;
-	const __u8 *s = addr;
 
 	if (CHECK_AX88796L_PORT(port)) {
 		p = (volatile unsigned short *)port88796l(port, 0);
-		while (count--) *p = *s++;
+		while (count--)
+			*p = ctrl_inb(a++);
 	} else if (PXSEG(port))
-		while (count--) *(volatile unsigned char *)port = *s++;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
-		bp = (__u8 *)PCI_IOMAP(port);
-		while (count--) *bp = *s++;
+		while (count--)
+			ctrl_outb(a++, port);
+	else if (is_pci_ioaddr(port) || shifted_port(port)) {
+		bp = (__u8 *)pci_ioaddr(port);
+		while (count--)
+			*bp = ctrl_inb(a++);
 	} else {
 		p = (volatile unsigned short *)port2adr(port);
-		while (count--) *p = *s++;
+		while (count--)
+			*p = ctrl_inb(a++);
 	}
 }
 
 void rts7751r2d_outsw(unsigned long port, const void *addr, unsigned long count)
 {
+	unsigned long a = (unsigned long)addr;
 	volatile __u16 *p;
-	const __u16 *s = addr;
 
 	if (CHECK_AX88796L_PORT(port))
 		p = (volatile unsigned short *)port88796l(port, 1);
 	else if (PXSEG(port))
 		p = (volatile unsigned short *)port;
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port))
-		p = (volatile unsigned short *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port))
+		p = (volatile unsigned short *)pci_ioaddr(port);
 	else
 		p = (volatile unsigned short *)port2adr(port);
-	while (count--) *p = *s++;
+
+	while (count--) {
+		ctrl_outw(*p, a);
+		a += 2;
+	}
 }
 
 void rts7751r2d_outsl(unsigned long port, const void *addr, unsigned long count)
 {
 	if (CHECK_AX88796L_PORT(port))
-		maybebadio(outsl, port);
-	else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
-		volatile __u32 *p = (__u32 *)PCI_IOMAP(port);
-		const __u32 *s = addr;
-
-		while (count--) *p = *s++;
+		maybebadio(port);
+	else if (is_pci_ioaddr(port) || shifted_port(port)) {
+		unsigned long a = (unsigned long)addr;
+
+		while (count--) {
+			ctrl_outl(ctrl_inl(a), pci_ioaddr(port));
+			a += 4;
+		}
 	} else
-		maybebadio(outsl, port);
-}
-
-void *rts7751r2d_ioremap(unsigned long offset, unsigned long size)
-{
-	if (offset >= 0xfd000000)
-		return (void *)offset;
-	else
-		return (void *)P2SEGADDR(offset);
+		maybebadio(port);
 }
-EXPORT_SYMBOL(rts7751r2d_ioremap);
 
 unsigned long rts7751r2d_isa_port2addr(unsigned long offset)
 {
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/led.c linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/led.c
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/led.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/led.c	2006-07-12 16:54:20.000000000 +0000
@@ -13,8 +13,6 @@
 #include <asm/io.h>
 #include <asm/rts7751r2d/rts7751r2d.h>
 
-extern unsigned int debug_counter;
-
 #ifdef CONFIG_HEARTBEAT
 
 #include <linux/sched.h>
@@ -56,12 +54,3 @@
 	ctrl_outw(value, PA_OUTPORT);
 }
 
-void debug_led_disp(void)
-{
-	unsigned short value;
-
-	value = (unsigned short)debug_counter++;
-	rts7751r2d_led(value);
-	if (value == 0xff)
-		debug_counter = 0;
-}
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/mach.c linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/mach.c
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/mach.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/mach.c	2006-07-12 16:54:20.000000000 +0000
@@ -16,15 +16,16 @@
 #include <asm/machvec.h>
 #include <asm/rtc.h>
 #include <asm/irq.h>
-#include <asm/rts7751r2d/io.h>
+#include <asm/mach/rts7751r2d.h>
 
 extern void heartbeat_rts7751r2d(void);
 extern void init_rts7751r2d_IRQ(void);
-extern void *rts7751r2d_ioremap(unsigned long, unsigned long);
 extern int rts7751r2d_irq_demux(int irq);
 
+#ifdef CONFIG_USB_SM501
 extern void *voyagergx_consistent_alloc(struct device *, size_t, dma_addr_t *, gfp_t);
 extern int voyagergx_consistent_free(struct device *, size_t, void *, dma_addr_t);
+#endif
 
 /*
  * The Machine Vector
@@ -54,15 +55,13 @@
 	.mv_outsw		= rts7751r2d_outsw,
 	.mv_outsl		= rts7751r2d_outsl,
 
-	.mv_ioremap		= rts7751r2d_ioremap,
-	.mv_isa_port2addr	= rts7751r2d_isa_port2addr,
 	.mv_init_irq		= init_rts7751r2d_IRQ,
 #ifdef CONFIG_HEARTBEAT
 	.mv_heartbeat		= heartbeat_rts7751r2d,
 #endif
 	.mv_irq_demux		= rts7751r2d_irq_demux,
 
-#ifdef CONFIG_USB_OHCI_HCD
+#ifdef CONFIG_USB_SM501
 	.mv_consistent_alloc	= voyagergx_consistent_alloc,
 	.mv_consistent_free	= voyagergx_consistent_free,
 #endif
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/setup.c linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/setup.c	2006-07-12 16:54:20.000000000 +0000
@@ -1,25 +1,87 @@
 /*
- * linux/arch/sh/kernel/setup_rts7751r2d.c
- *
- * Copyright (C) 2000  Kazumoto Kojima
- *
  * Renesas Technology Sales RTS7751R2D Support.
  *
- * Modified for RTS7751R2D by
- * Atom Create Engineering Co., Ltd. 2002.
+ * Copyright (C) 2002 Atom Create Engineering Co., Ltd.
+ * Copyright (C) 2004 - 2006 Paul Mundt
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
  */
-
 #include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/serial_8250.h>
+#include <linux/pm.h>
 #include <asm/io.h>
-#include <asm/rts7751r2d/rts7751r2d.h>
+#include <asm/mach/rts7751r2d.h>
+#include <asm/mach/voyagergx_reg.h>
+
+static struct plat_serial8250_port uart_platform_data[] = {
+	{
+		.membase	= (void *)VOYAGER_UART_BASE,
+		.mapbase	= VOYAGER_UART_BASE,
+		.iotype		= UPIO_MEM,
+		.irq		= VOYAGER_UART0_IRQ,
+		.flags		= UPF_BOOT_AUTOCONF,
+		.regshift	= 2,
+		.uartclk	= (9600 * 16),
+	}, {
+		.flags		= 0,
+	},
+};
 
-unsigned int debug_counter;
+static void __init voyagergx_serial_init(void)
+{
+	unsigned long val;
+
+	/*
+	 * GPIO Control
+	 */
+	val = inl(GPIO_MUX_HIGH);
+	val |= 0x00001fe0;
+	outl(val, GPIO_MUX_HIGH);
+
+	/*
+	 * Power Mode Gate
+	 */
+	val = inl(POWER_MODE0_GATE);
+	val |= (POWER_MODE0_GATE_U0 | POWER_MODE0_GATE_U1);
+	outl(val, POWER_MODE0_GATE);
+
+	val = inl(POWER_MODE1_GATE);
+	val |= (POWER_MODE1_GATE_U0 | POWER_MODE1_GATE_U1);
+	outl(val, POWER_MODE1_GATE);
+}
+
+static struct platform_device uart_device = {
+	.name		= "serial8250",
+	.id		= -1,
+	.dev		= {
+		.platform_data	= uart_platform_data,
+	},
+};
+
+static struct platform_device *rts7751r2d_devices[] __initdata = {
+	&uart_device,
+};
+
+static int __init rts7751r2d_devices_setup(void)
+{
+	return platform_add_devices(rts7751r2d_devices,
+				    ARRAY_SIZE(rts7751r2d_devices));
+}
+__initcall(rts7751r2d_devices_setup);
 
 const char *get_system_type(void)
 {
 	return "RTS7751R2D";
 }
 
+static void rts7751r2d_power_off(void)
+{
+	ctrl_outw(0x0001, PA_POWOFF);
+}
+
 /*
  * Initialize the board
  */
@@ -27,5 +89,7 @@
 {
 	printk(KERN_INFO "Renesas Technology Sales RTS7751R2D support.\n");
 	ctrl_outw(0x0000, PA_OUTPORT);
-	debug_counter = 0;
+	pm_power_off = rts7751r2d_power_off;
+
+	voyagergx_serial_init();
 }
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/CVS/Entries linux-2.6.17/arch/sh/boards/renesas/systemh/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/systemh/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,5 @@
+/Makefile/1.1/Tue Jun 15 18:32:21 2004/-ko/
+/io.c/1.5/Sun Feb  5 21:55:29 2006/-ko/
+/irq.c/1.4/Wed Jan  4 18:52:50 2006/-ko/
+/setup.c/1.3/Wed Jan  4 18:52:50 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/CVS/Repository linux-2.6.17/arch/sh/boards/renesas/systemh/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/systemh/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/renesas/systemh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/CVS/Root linux-2.6.17/arch/sh/boards/renesas/systemh/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/systemh/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/io.c linux-2.6.17/arch/sh/boards/renesas/systemh/io.c
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/io.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/systemh/io.c	2006-07-12 16:54:20.000000000 +0000
@@ -5,66 +5,25 @@
  * Based largely on io_se.c.
  *
  * I/O routine for Hitachi 7751 Systemh.
- *
  */
-
 #include <linux/kernel.h>
 #include <linux/types.h>
-#include <asm/systemh/7751systemh.h>
+#include <linux/pci.h>
+#include <asm/systemh7751.h>
 #include <asm/addrspace.h>
 #include <asm/io.h>
 
-#include <linux/pci.h>
-#include "../../drivers/pci/pci-sh7751.h"
-
-/*
- * The 7751 SystemH Engine uses the built-in PCI controller (PCIC)
- * of the 7751 processor, and has a SuperIO accessible on its memory
- * bus.
- */
-
-#define PCIIOBR		(volatile long *)PCI_REG(SH7751_PCIIOBR)
-#define PCIMBR          (volatile long *)PCI_REG(SH7751_PCIMBR)
-#define PCI_IO_AREA	SH7751_PCI_IO_BASE
-#define PCI_MEM_AREA	SH7751_PCI_CONFIG_BASE
-
-#define PCI_IOMAP(adr)	(PCI_IO_AREA + (adr & ~SH7751_PCIIOBR_MASK))
 #define ETHER_IOMAP(adr) (0xB3000000 + (adr)) /*map to 16bits access area
                                                 of smc lan chip*/
-
-#define maybebadio(name,port) \
-  printk("bad PC-like io %s for port 0x%lx at 0x%08x\n", \
-	 #name, (port), (__u32) __builtin_return_address(0))
-
-static inline void delay(void)
-{
-	ctrl_inw(0xa0000000);
-}
-
 static inline volatile __u16 *
 port2adr(unsigned int port)
 {
 	if (port >= 0x2000)
 		return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000));
-#if 0
-	else
-		return (volatile __u16 *) (PA_SUPERIO + (port << 1));
-#endif
-	maybebadio(name,(unsigned long)port);
+	maybebadio((unsigned long)port);
 	return (volatile __u16*)port;
 }
 
-/* In case someone configures the kernel w/o PCI support: in that */
-/* scenario, don't ever bother to check for PCI-window addresses */
-
-/* NOTE: WINDOW CHECK MAY BE A BIT OFF, HIGH PCIBIOS_MIN_IO WRAPS? */
-#if defined(CONFIG_PCI)
-#define CHECK_SH7751_PCIIO(port) \
-  ((port >= PCIBIOS_MIN_IO) && (port < (PCIBIOS_MIN_IO + SH7751_PCI_IO_SIZE)))
-#else
-#define CHECK_SH7751_PCIIO(port) (0)
-#endif
-
 /*
  * General outline: remap really low stuff [eventually] to SuperIO,
  * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO)
@@ -76,8 +35,8 @@
 {
 	if (PXSEG(port))
 		return *(volatile unsigned char *)port;
-	else if (CHECK_SH7751_PCIIO(port))
-		return *(volatile unsigned char *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port))
+		return *(volatile unsigned char *)pci_ioaddr(port);
 	else if (port <= 0x3F1)
 		return *(volatile unsigned char *)ETHER_IOMAP(port);
 	else
@@ -90,13 +49,13 @@
 
         if (PXSEG(port))
                 v = *(volatile unsigned char *)port;
-	else if (CHECK_SH7751_PCIIO(port))
-                v = *(volatile unsigned char *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port))
+                v = *(volatile unsigned char *)pci_ioaddr(port);
 	else if (port <= 0x3F1)
 		v = *(volatile unsigned char *)ETHER_IOMAP(port);
 	else
 		v = (*port2adr(port))&0xff;
-	delay();
+	ctrl_delay();
 	return v;
 }
 
@@ -104,14 +63,14 @@
 {
         if (PXSEG(port))
                 return *(volatile unsigned short *)port;
-	else if (CHECK_SH7751_PCIIO(port))
-                return *(volatile unsigned short *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port))
+                return *(volatile unsigned short *)pci_ioaddr(port);
 	else if (port >= 0x2000)
 		return *port2adr(port);
 	else if (port <= 0x3F1)
 		return *(volatile unsigned int *)ETHER_IOMAP(port);
 	else
-		maybebadio(inw, port);
+		maybebadio(port);
 	return 0;
 }
 
@@ -119,14 +78,14 @@
 {
         if (PXSEG(port))
                 return *(volatile unsigned long *)port;
-	else if (CHECK_SH7751_PCIIO(port))
-                return *(volatile unsigned int *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port))
+                return *(volatile unsigned int *)pci_ioaddr(port);
 	else if (port >= 0x2000)
 		return *port2adr(port);
 	else if (port <= 0x3F1)
 		return *(volatile unsigned int *)ETHER_IOMAP(port);
 	else
-		maybebadio(inl, port);
+		maybebadio(port);
 	return 0;
 }
 
@@ -135,8 +94,8 @@
 
         if (PXSEG(port))
                 *(volatile unsigned char *)port = value;
-	else if (CHECK_SH7751_PCIIO(port))
-        	*((unsigned char*)PCI_IOMAP(port)) = value;
+	else if (is_pci_ioaddr(port))
+		*((unsigned char*)pci_ioaddr(port)) = value;
 	else if (port <= 0x3F1)
 		*(volatile unsigned char *)ETHER_IOMAP(port) = value;
 	else
@@ -147,37 +106,37 @@
 {
         if (PXSEG(port))
                 *(volatile unsigned char *)port = value;
-	else if (CHECK_SH7751_PCIIO(port))
-        	*((unsigned char*)PCI_IOMAP(port)) = value;
+	else if (is_pci_ioaddr(port))
+		*((unsigned char*)pci_ioaddr(port)) = value;
 	else if (port <= 0x3F1)
 		*(volatile unsigned char *)ETHER_IOMAP(port) = value;
 	else
 		*(port2adr(port)) = value;
-	delay();
+	ctrl_delay();
 }
 
 void sh7751systemh_outw(unsigned short value, unsigned long port)
 {
         if (PXSEG(port))
                 *(volatile unsigned short *)port = value;
-	else if (CHECK_SH7751_PCIIO(port))
-        	*((unsigned short *)PCI_IOMAP(port)) = value;
+	else if (is_pci_ioaddr(port))
+		*((unsigned short *)pci_ioaddr(port)) = value;
 	else if (port >= 0x2000)
 		*port2adr(port) = value;
 	else if (port <= 0x3F1)
 		*(volatile unsigned short *)ETHER_IOMAP(port) = value;
 	else
-		maybebadio(outw, port);
+		maybebadio(port);
 }
 
 void sh7751systemh_outl(unsigned int value, unsigned long port)
 {
         if (PXSEG(port))
                 *(volatile unsigned long *)port = value;
-	else if (CHECK_SH7751_PCIIO(port))
-        	*((unsigned long*)PCI_IOMAP(port)) = value;
+	else if (is_pci_ioaddr(port))
+		*((unsigned long*)pci_ioaddr(port)) = value;
 	else
-		maybebadio(outl, port);
+		maybebadio(port);
 }
 
 void sh7751systemh_insb(unsigned long port, void *addr, unsigned long count)
@@ -194,7 +153,7 @@
 
 void sh7751systemh_insl(unsigned long port, void *addr, unsigned long count)
 {
-	maybebadio(insl, port);
+	maybebadio(port);
 }
 
 void sh7751systemh_outsb(unsigned long port, const void *addr, unsigned long count)
@@ -211,73 +170,5 @@
 
 void sh7751systemh_outsl(unsigned long port, const void *addr, unsigned long count)
 {
-	maybebadio(outsw, port);
-}
-
-/* For read/write calls, just copy generic (pass-thru); PCIMBR is  */
-/* already set up.  For a larger memory space, these would need to */
-/* reset PCIMBR as needed on a per-call basis...                   */
-
-unsigned char sh7751systemh_readb(unsigned long addr)
-{
-	return *(volatile unsigned char*)addr;
-}
-
-unsigned short sh7751systemh_readw(unsigned long addr)
-{
-	return *(volatile unsigned short*)addr;
-}
-
-unsigned int sh7751systemh_readl(unsigned long addr)
-{
-	return *(volatile unsigned long*)addr;
-}
-
-void sh7751systemh_writeb(unsigned char b, unsigned long addr)
-{
-	*(volatile unsigned char*)addr = b;
-}
-
-void sh7751systemh_writew(unsigned short b, unsigned long addr)
-{
-	*(volatile unsigned short*)addr = b;
-}
-
-void sh7751systemh_writel(unsigned int b, unsigned long addr)
-{
-        *(volatile unsigned long*)addr = b;
-}
-
-
-
-/* Map ISA bus address to the real address. Only for PCMCIA.  */
-
-/* ISA page descriptor.  */
-static __u32 sh_isa_memmap[256];
-
-#if 0
-static int
-sh_isa_mmap(__u32 start, __u32 length, __u32 offset)
-{
-	int idx;
-
-	if (start >= 0x100000 || (start & 0xfff) || (length != 0x1000))
-		return -1;
-
-	idx = start >> 12;
-	sh_isa_memmap[idx] = 0xb8000000 + (offset &~ 0xfff);
-	printk("sh_isa_mmap: start %x len %x offset %x (idx %x paddr %x)\n",
-	       start, length, offset, idx, sh_isa_memmap[idx]);
-	return 0;
-}
-#endif
-
-unsigned long
-sh7751systemh_isa_port2addr(unsigned long offset)
-{
-	int idx;
-
-	idx = (offset >> 12) & 0xff;
-	offset &= 0xfff;
-	return sh_isa_memmap[idx] + offset;
+	maybebadio(port);
 }
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/irq.c linux-2.6.17/arch/sh/boards/renesas/systemh/irq.c
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/irq.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/systemh/irq.c	2006-07-12 16:54:20.000000000 +0000
@@ -16,7 +16,7 @@
 #include <linux/hdreg.h>
 #include <linux/ide.h>
 #include <asm/io.h>
-#include <asm/mach/7751systemh.h>
+#include <asm/systemh7751.h>
 #include <asm/smc37c93x.h>
 
 /* address of external interrupt mask register
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/setup.c linux-2.6.17/arch/sh/boards/renesas/systemh/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/renesas/systemh/setup.c	2006-07-12 16:54:20.000000000 +0000
@@ -15,9 +15,8 @@
  * for more details.
  */
 #include <linux/init.h>
-#include <asm/mach/7751systemh.h>
-#include <asm/mach/io.h>
 #include <asm/machvec.h>
+#include <asm/systemh7751.h>
 
 extern void make_systemh_irq(unsigned int irq);
 
@@ -31,8 +30,6 @@
  */
 void __init init_7751systemh_IRQ(void)
 {
-/*  	make_ipr_irq(10, BCR_ILCRD, 1, 0x0f-10); LAN */
-/*  	make_ipr_irq(14, BCR_ILCRA, 2, 0x0f-4); */
 	make_systemh_irq(0xb);	/* Ethernet interrupt */
 }
 
@@ -60,15 +57,6 @@
 	.mv_outsw		= sh7751systemh_outsw,
 	.mv_outsl		= sh7751systemh_outsl,
 
-	.mv_readb		= sh7751systemh_readb,
-	.mv_readw		= sh7751systemh_readw,
-	.mv_readl		= sh7751systemh_readl,
-	.mv_writeb		= sh7751systemh_writeb,
-	.mv_writew		= sh7751systemh_writew,
-	.mv_writel		= sh7751systemh_writel,
-
-	.mv_isa_port2addr	= sh7751systemh_isa_port2addr,
-
 	.mv_init_irq		= init_7751systemh_IRQ,
 };
 ALIAS_MV(7751systemh)
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/saturn/CVS/Entries linux-2.6.17/arch/sh/boards/saturn/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/saturn/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/saturn/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,6 @@
+/Makefile/1.4/Thu Mar 11 18:08:03 2004/-ko/
+/io.c/1.2/Sun May  4 19:29:47 2003/-ko/
+/irq.c/1.4/Sun Oct 26 23:41:36 2003/-ko/
+/setup.c/1.4/Sun Oct 26 23:41:36 2003/-ko/
+/smp.c/1.3/Sun Oct 26 23:41:36 2003/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/saturn/CVS/Repository linux-2.6.17/arch/sh/boards/saturn/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/saturn/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/saturn/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/saturn
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/saturn/CVS/Root linux-2.6.17/arch/sh/boards/saturn/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/saturn/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/saturn/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/CVS/Entries linux-2.6.17/arch/sh/boards/se/7300/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7300/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,6 @@
+/Makefile/1.1/Fri Jun 11 13:02:47 2004//
+/io.c/1.3/Wed Jan  4 17:25:52 2006//
+/irq.c/1.2/Wed Jan  4 17:25:52 2006//
+/led.c/1.2/Wed Jan  4 17:25:52 2006//
+/setup.c/1.2/Wed Jan  4 17:25:52 2006//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/CVS/Repository linux-2.6.17/arch/sh/boards/se/7300/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7300/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/se/7300
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/CVS/Root linux-2.6.17/arch/sh/boards/se/7300/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7300/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/io.c linux-2.6.17/arch/sh/boards/se/7300/io.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/io.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7300/io.c	2006-07-12 16:54:20.000000000 +0000
@@ -10,8 +10,8 @@
 
 #include <linux/config.h>
 #include <linux/kernel.h>
-#include <asm/mach/se7300.h>
 #include <asm/io.h>
+#include <asm/se7300.h>
 
 #define badio(fn, a) panic("bad i/o operation %s for %08lx.", #fn, a)
 
@@ -100,6 +100,7 @@
 	badio(inw, port);
 }
 
+#ifdef CONFIG_SMC91X
 /* MSTLANEX01 LAN at 0xb400:0000 */
 static struct iop laniop = {
 	.start = 0x300,
@@ -111,6 +112,7 @@
 	.outb = simple_outb,
 	.outw = simple_outw,
 };
+#endif
 
 /* NE2000 pc card NIC */
 static struct iop neiop = {
@@ -124,6 +126,7 @@
 	.outw = simple_outw,
 };
 
+#ifdef CONFIG_IDE
 /* CF in CF slot */
 static struct iop cfiop = {
 	.base = 0xb0600000,
@@ -133,12 +136,13 @@
 	.outb = pcc_outb,
 	.outw = simple_outw,
 };
+#endif
 
 static __inline__ struct iop *
 port2iop(unsigned long port)
 {
 	if (0) ;
-#if defined(CONFIG_SMC91111)
+#if defined(CONFIG_SMC91X)
 	else if (laniop.check(&laniop, port))
 		return &laniop;
 #endif
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/irq.c linux-2.6.17/arch/sh/boards/se/7300/irq.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/irq.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7300/irq.c	2006-07-12 16:54:20.000000000 +0000
@@ -12,7 +12,7 @@
 #include <linux/irq.h>
 #include <asm/irq.h>
 #include <asm/io.h>
-#include <asm/mach/se7300.h>
+#include <asm/se7300.h>
 
 /*
  * Initialize IRQ setting
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/led.c linux-2.6.17/arch/sh/boards/se/7300/led.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/led.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7300/led.c	2006-07-12 16:54:20.000000000 +0000
@@ -13,24 +13,10 @@
 
 #include <linux/config.h>
 #include <linux/sched.h>
-#include <asm/mach/se7300.h>
-
-static void
-mach_led(int position, int value)
-{
-	volatile unsigned short *p = (volatile unsigned short *) PA_LED;
-
-	if (value) {
-		*p |= (1 << 8);
-	} else {
-		*p &= ~(1 << 8);
-	}
-}
-
+#include <asm/se7300.h>
 
 /* Cycle the LED's in the clasic Knightrider/Sun pattern */
-void
-heartbeat_7300se(void)
+void heartbeat_7300se(void)
 {
 	static unsigned int cnt = 0, period = 0;
 	volatile unsigned short *p = (volatile unsigned short *) PA_LED;
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/setup.c linux-2.6.17/arch/sh/boards/se/7300/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7300/setup.c	2006-07-12 16:54:20.000000000 +0000
@@ -10,8 +10,7 @@
 #include <linux/config.h>
 #include <linux/init.h>
 #include <asm/machvec.h>
-#include <asm/machvec_init.h>
-#include <asm/mach/io.h>
+#include <asm/se7300.h>
 
 void heartbeat_7300se(void);
 void init_7300se_IRQ(void);
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/CVS/Entries linux-2.6.17/arch/sh/boards/se/73180/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/73180/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,6 @@
+/Makefile/1.1/Mon Jun 28 13:18:45 2004//
+/io.c/1.2/Tue May 31 14:00:25 2005//
+/irq.c/1.2/Tue May 31 14:00:25 2005//
+/led.c/1.2/Tue May 31 14:00:25 2005//
+/setup.c/1.3/Sun Jan  8 12:22:57 2006//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/CVS/Repository linux-2.6.17/arch/sh/boards/se/73180/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/73180/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/se/73180
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/CVS/Root linux-2.6.17/arch/sh/boards/se/73180/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/73180/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/io.c linux-2.6.17/arch/sh/boards/se/73180/io.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/io.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/73180/io.c	2006-07-12 16:54:20.000000000 +0000
@@ -100,6 +100,7 @@
 	badio(inw, port);
 }
 
+#ifdef CONFIG_SMC91X
 /* MSTLANEX01 LAN at 0xb400:0000 */
 static struct iop laniop = {
 	.start = 0x300,
@@ -111,6 +112,7 @@
 	.outb = simple_outb,
 	.outw = simple_outw,
 };
+#endif
 
 /* NE2000 pc card NIC */
 static struct iop neiop = {
@@ -124,6 +126,7 @@
 	.outw = simple_outw,
 };
 
+#ifdef CONFIG_IDE
 /* CF in CF slot */
 static struct iop cfiop = {
 	.base = 0xb0600000,
@@ -133,12 +136,13 @@
 	.outb = pcc_outb,
 	.outw = simple_outw,
 };
+#endif
 
 static __inline__ struct iop *
 port2iop(unsigned long port)
 {
 	if (0) ;
-#if defined(CONFIG_SMC91111)
+#if defined(CONFIG_SMC91X)
 	else if (laniop.check(&laniop, port))
 		return &laniop;
 #endif
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/irq.c linux-2.6.17/arch/sh/boards/se/73180/irq.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/irq.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/73180/irq.c	2006-07-12 16:54:20.000000000 +0000
@@ -7,7 +7,6 @@
  * Modified for SH-Mobile SolutionEngine 73180 Support
  *              by YOSHII Takashi <yoshii-takashi@hitachi-ul.co.jp>
  *
- *
  */
 
 #include <linux/config.h>
@@ -18,14 +17,6 @@
 #include <asm/mach/se73180.h>
 
 static int
-intreq2irq(int i)
-{
-	if (i == 5)
-		return 10;
-	return 32 + 7 - i;
-}
-
-static int
 irq2intreq(int irq)
 {
 	if (irq == 10)
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/led.c linux-2.6.17/arch/sh/boards/se/73180/led.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/led.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/73180/led.c	2006-07-12 16:54:20.000000000 +0000
@@ -15,21 +15,8 @@
 #include <linux/sched.h>
 #include <asm/mach/se73180.h>
 
-static void
-mach_led(int position, int value)
-{
-	volatile unsigned short *p = (volatile unsigned short *) PA_LED;
-
-	if (value) {
-		*p |= (1 << LED_SHIFT);
-	} else {
-		*p &= ~(1 << LED_SHIFT);
-	}
-}
-
 /* Cycle the LED's in the clasic Knightrider/Sun pattern */
-void
-heartbeat_73180se(void)
+void heartbeat_73180se(void)
 {
 	static unsigned int cnt = 0, period = 0;
 	volatile unsigned short *p = (volatile unsigned short *) PA_LED;
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/setup.c linux-2.6.17/arch/sh/boards/se/73180/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/73180/setup.c	2006-07-12 16:54:20.000000000 +0000
@@ -12,8 +12,8 @@
 #include <linux/config.h>
 #include <linux/init.h>
 #include <asm/machvec.h>
-#include <asm/machvec_init.h>
-#include <asm/mach/io.h>
+#include <asm/se73180.h>
+#include <asm/irq.h>
 
 void heartbeat_73180se(void);
 void init_73180se_IRQ(void);
@@ -52,6 +52,7 @@
 	.mv_outsl = sh73180se_outsl,
 
 	.mv_init_irq = init_73180se_IRQ,
+	.mv_irq_demux = shmse_irq_demux,
 #ifdef CONFIG_HEARTBEAT
 	.mv_heartbeat = heartbeat_73180se,
 #endif
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/CVS/Entries linux-2.6.17/arch/sh/boards/se/770x/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/770x/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,7 @@
+/Makefile/1.5/Tue May 31 14:49:59 2005//
+/io.c/1.7/Sun Feb  5 21:55:29 2006//
+/irq.c/1.7/Wed Jan  4 17:53:54 2006/-ko/
+/led.c/1.4/Wed Jan  4 17:53:54 2006//
+/mach.c/1.8/Wed Jan  4 17:53:54 2006//
+/setup.c/1.5/Wed Jan  4 17:53:54 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/CVS/Repository linux-2.6.17/arch/sh/boards/se/770x/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/770x/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/se/770x
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/CVS/Root linux-2.6.17/arch/sh/boards/se/770x/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/770x/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/Makefile linux-2.6.17/arch/sh/boards/se/770x/Makefile
--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/770x/Makefile	2006-07-12 16:54:20.000000000 +0000
@@ -2,5 +2,6 @@
 # Makefile for the 770x SolutionEngine specific parts of the kernel
 #
 
-obj-y	 := mach.o setup.o io.o irq.o led.o
+obj-y	 := mach.o setup.o io.o irq.o
 
+obj-$(CONFIG_HEARTBEAT) += led.o
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/io.c linux-2.6.17/arch/sh/boards/se/770x/io.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/io.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/770x/io.c	2006-07-12 16:54:20.000000000 +0000
@@ -1,4 +1,4 @@
-/* $Id: io.c,v 1.5 2004/02/22 23:08:43 kkojima Exp $
+/* $Id: io.c,v 1.7 2006/02/05 21:55:29 lethal Exp $
  *
  * linux/arch/sh/kernel/io_se.c
  *
@@ -11,7 +11,7 @@
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <asm/io.h>
-#include <asm/se/se.h>
+#include <asm/se.h>
 
 /* SH pcmcia io window base, start and end.  */
 int sh_pcic_io_wbase = 0xb8400000;
@@ -20,11 +20,6 @@
 int sh_pcic_io_type;
 int sh_pcic_io_dummy;
 
-static inline void delay(void)
-{
-	ctrl_inw(0xa0000000);
-}
-
 /* MS7750 requires special versions of in*, out* routines, since
    PC-like io ports are located at upper half byte of 16-bit word which
    can be accessed only with 16-bit wide.  */
@@ -52,10 +47,6 @@
 		return 1;
 }
 
-#define maybebadio(name,port) \
-  printk("bad PC-like io %s for port 0x%lx at 0x%08x\n", \
-	 #name, (port), (__u32) __builtin_return_address(0))
-
 unsigned char se_inb(unsigned long port)
 {
 	if (sh_pcic_io_start <= port && port <= sh_pcic_io_stop)
@@ -76,7 +67,7 @@
 		v = (*port2adr(port) >> 8); 
 	else
 		v = (*port2adr(port))&0xff; 
-	delay();
+	ctrl_delay();
 	return v;
 }
 
@@ -86,13 +77,13 @@
 	    (sh_pcic_io_start <= port && port <= sh_pcic_io_stop))
 		return *port2adr(port);
 	else
-		maybebadio(inw, port);
+		maybebadio(port);
 	return 0;
 }
 
 unsigned int se_inl(unsigned long port)
 {
-	maybebadio(inl, port);
+	maybebadio(port);
 	return 0;
 }
 
@@ -114,7 +105,7 @@
 		*(port2adr(port)) = value << 8;
 	else
 		*(port2adr(port)) = value;
-	delay();
+	ctrl_delay();
 }
 
 void se_outw(unsigned short value, unsigned long port)
@@ -123,12 +114,12 @@
 	    (sh_pcic_io_start <= port && port <= sh_pcic_io_stop))
 		*port2adr(port) = value;
 	else
-		maybebadio(outw, port);
+		maybebadio(port);
 }
 
 void se_outl(unsigned int value, unsigned long port)
 {
-	maybebadio(outl, port);
+	maybebadio(port);
 }
 
 void se_insb(unsigned long port, void *addr, unsigned long count)
@@ -159,7 +150,7 @@
 
 void se_insl(unsigned long port, void *addr, unsigned long count)
 {
-	maybebadio(insl, port);
+	maybebadio(port);
 }
 
 void se_outsb(unsigned long port, const void *addr, unsigned long count)
@@ -190,37 +181,5 @@
 
 void se_outsl(unsigned long port, const void *addr, unsigned long count)
 {
-	maybebadio(outsw, port);
-}
-
-/* Map ISA bus address to the real address. Only for PCMCIA.  */
-
-/* ISA page descriptor.  */
-static __u32 sh_isa_memmap[256];
-
-static int
-sh_isa_mmap(__u32 start, __u32 length, __u32 offset)
-{
-	int idx;
-
-	if (start >= 0x100000 || (start & 0xfff) || (length != 0x1000))
-		return -1;
-
-	idx = start >> 12;
-	sh_isa_memmap[idx] = 0xb8000000 + (offset &~ 0xfff);
-#if 0
-	printk("sh_isa_mmap: start %x len %x offset %x (idx %x paddr %x)\n",
-	       start, length, offset, idx, sh_isa_memmap[idx]);
-#endif
-	return 0;
-}
-
-unsigned long
-se_isa_port2addr(unsigned long offset)
-{
-	int idx;
-
-	idx = (offset >> 12) & 0xff;
-	offset &= 0xfff;
-	return sh_isa_memmap[idx] + offset;
+	maybebadio(port);
 }
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/irq.c linux-2.6.17/arch/sh/boards/se/770x/irq.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/irq.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/770x/irq.c	2006-07-12 16:54:20.000000000 +0000
@@ -12,7 +12,7 @@
 #include <linux/irq.h>
 #include <asm/irq.h>
 #include <asm/io.h>
-#include <asm/se/se.h>
+#include <asm/se.h>
 
 /*
  * Initialize IRQ setting
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/led.c linux-2.6.17/arch/sh/boards/se/770x/led.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/led.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/770x/led.c	2006-07-12 16:54:20.000000000 +0000
@@ -10,22 +10,8 @@
  */
 
 #include <linux/config.h>
-#include <asm/se/se.h>
-
-static void mach_led(int position, int value)
-{
-	volatile unsigned short* p = (volatile unsigned short*)PA_LED;
-
-	if (value) {
-		*p |= (1<<8);
-	} else {
-		*p &= ~(1<<8);
-	}
-}
-
-#ifdef CONFIG_HEARTBEAT
-
 #include <linux/sched.h>
+#include <asm/se.h>
 
 /* Cycle the LED's in the clasic Knightrider/Sun pattern */
 void heartbeat_se(void)
@@ -65,4 +51,3 @@
 	*p = 1<<(bit+8);
 
 }
-#endif /* CONFIG_HEARTBEAT */
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/mach.c linux-2.6.17/arch/sh/boards/se/770x/mach.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/mach.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/770x/mach.c	2006-07-12 16:54:20.000000000 +0000
@@ -14,12 +14,9 @@
 
 #include <asm/machvec.h>
 #include <asm/rtc.h>
-#include <asm/machvec_init.h>
-
-#include <asm/se/io.h>
+#include <asm/se.h>
 
 void heartbeat_se(void);
-void setup_se(void);
 void init_se_IRQ(void);
 
 /*
@@ -58,8 +55,6 @@
 	.mv_outsw		= se_outsw,
 	.mv_outsl		= se_outsl,
 
-	.mv_isa_port2addr	= se_isa_port2addr,
-
 	.mv_init_irq		= init_se_IRQ,
 #ifdef CONFIG_HEARTBEAT
 	.mv_heartbeat		= heartbeat_se,
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/setup.c linux-2.6.17/arch/sh/boards/se/770x/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/770x/setup.c	2006-07-12 16:54:20.000000000 +0000
@@ -1,4 +1,4 @@
-/* $Id: setup.c,v 1.1.2.4 2002/03/02 21:57:07 lethal Exp $
+/* $Id: setup.c,v 1.3 2003/05/04 19:29:47 lethal Exp $
  *
  * linux/arch/sh/boards/se/770x/setup.c
  *
@@ -15,8 +15,8 @@
 #include <linux/hdreg.h>
 #include <linux/ide.h>
 #include <asm/io.h>
-#include <asm/se/se.h>
-#include <asm/se/smc37c93x.h>
+#include <asm/se.h>
+#include <asm/smc37c93x.h>
 
 /*
  * Configure the Super I/O chip
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/CVS/Entries linux-2.6.17/arch/sh/boards/se/7751/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7751/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,8 @@
+/Makefile/1.5/Tue May 31 15:16:49 2005//
+/io.c/1.6/Sun Feb  5 21:55:29 2006//
+/irq.c/1.3/Wed Jan  4 18:13:24 2006//
+/led.c/1.4/Wed Jan  4 18:13:24 2006//
+/mach.c/1.6/Wed Jan  4 18:13:24 2006//
+/pci.c/1.8/Fri Sep 24 15:16:19 2004//
+/setup.c/1.3/Wed Jan  4 18:13:24 2006//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/CVS/Repository linux-2.6.17/arch/sh/boards/se/7751/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7751/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/se/7751
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/CVS/Root linux-2.6.17/arch/sh/boards/se/7751/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7751/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/Makefile linux-2.6.17/arch/sh/boards/se/7751/Makefile
--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7751/Makefile	2006-07-12 16:54:20.000000000 +0000
@@ -2,7 +2,8 @@
 # Makefile for the 7751 SolutionEngine specific parts of the kernel
 #
 
-obj-y	 := mach.o setup.o io.o irq.o led.o
+obj-y	 := mach.o setup.o io.o irq.o
 
 obj-$(CONFIG_PCI) += pci.o
+obj-$(CONFIG_HEARTBEAT) += led.o
 
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/io.c linux-2.6.17/arch/sh/boards/se/7751/io.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/io.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7751/io.c	2006-07-12 16:54:20.000000000 +0000
@@ -1,6 +1,4 @@
-/* 
- * linux/arch/sh/kernel/io_7751se.c
- *
+/*
  * Copyright (C) 2001  Ian da Silva, Jeremy Siegel
  * Based largely on io_se.c.
  *
@@ -10,96 +8,21 @@
  * placeholder code from io_se.c left in with the
  * expectation of later SuperIO and PCMCIA access.
  */
-
 #include <linux/kernel.h>
 #include <linux/types.h>
+#include <linux/pci.h>
 #include <asm/io.h>
-#include <asm/se7751/se7751.h>
+#include <asm/se7751.h>
 #include <asm/addrspace.h>
 
-#include <linux/pci.h>
-#include "../../../drivers/pci/pci-sh7751.h"
-
-#if 0
-/******************************************************************
- * Variables from io_se.c, related to PCMCIA (not PCI); we're not
- * compiling them in, and have removed references from functions
- * which follow.  [Many checked for IO ports in the range bounded
- * by sh_pcic_io_start/stop, and used sh_pcic_io_wbase as offset.
- * As start/stop are uninitialized, only port 0x0 would match?]
- * When used, remember to adjust names to avoid clash with io_se?
- *****************************************************************/
-/* SH pcmcia io window base, start and end.  */
-int sh_pcic_io_wbase = 0xb8400000;
-int sh_pcic_io_start;
-int sh_pcic_io_stop;
-int sh_pcic_io_type;
-int sh_pcic_io_dummy;
-/*************************************************************/
-#endif
-
-/*
- * The 7751 Solution Engine uses the built-in PCI controller (PCIC)
- * of the 7751 processor, and has a SuperIO accessible via the PCI.
- * The board also includes a PCMCIA controller on its memory bus,
- * like the other Solution Engine boards.
- */ 
-
-#define PCIIOBR		(volatile long *)PCI_REG(SH7751_PCIIOBR)
-#define PCIMBR          (volatile long *)PCI_REG(SH7751_PCIMBR)
-#define PCI_IO_AREA	SH7751_PCI_IO_BASE
-#define PCI_MEM_AREA	SH7751_PCI_CONFIG_BASE
-
-#define PCI_IOMAP(adr)	(PCI_IO_AREA + (adr & ~SH7751_PCIIOBR_MASK))
-
-#define maybebadio(name,port) \
-  printk("bad PC-like io %s for port 0x%lx at 0x%08x\n", \
-	 #name, (port), (__u32) __builtin_return_address(0))
-
-static inline void delay(void)
-{
-	ctrl_inw(0xa0000000);
-}
-
-static inline volatile __u16 *
-port2adr(unsigned int port)
+static inline volatile u16 *port2adr(unsigned int port)
 {
 	if (port >= 0x2000)
 		return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000));
-#if 0
-	else
-		return (volatile __u16 *) (PA_SUPERIO + (port << 1));
-#endif
-	maybebadio(name,(unsigned long)port);
+	maybebadio((unsigned long)port);
 	return (volatile __u16*)port;
 }
 
-#if 0
-/* The 7751 Solution Engine seems to have everything hooked */
-/* up pretty normally (nothing on high-bytes only...) so this */
-/* shouldn't be needed */
-static inline int
-shifted_port(unsigned long port)
-{
-	/* For IDE registers, value is not shifted */
-	if ((0x1f0 <= port && port < 0x1f8) || port == 0x3f6)
-		return 0;
-	else
-		return 1;
-}
-#endif
-
-/* In case someone configures the kernel w/o PCI support: in that */
-/* scenario, don't ever bother to check for PCI-window addresses */
-
-/* NOTE: WINDOW CHECK MAY BE A BIT OFF, HIGH PCIBIOS_MIN_IO WRAPS? */
-#if defined(CONFIG_PCI)
-#define CHECK_SH7751_PCIIO(port) \
-  ((port >= PCIBIOS_MIN_IO) && (port < (PCIBIOS_MIN_IO + SH7751_PCI_IO_SIZE)))
-#else
-#define CHECK_SH7751_PCIIO(port) (0)
-#endif
-
 /*
  * General outline: remap really low stuff [eventually] to SuperIO,
  * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO)
@@ -111,10 +34,10 @@
 {
 	if (PXSEG(port))
 		return *(volatile unsigned char *)port;
-	else if (CHECK_SH7751_PCIIO(port))
-		return *(volatile unsigned char *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port))
+		return *(volatile unsigned char *)pci_ioaddr(port);
 	else
-		return (*port2adr(port))&0xff; 
+		return (*port2adr(port)) & 0xff;
 }
 
 unsigned char sh7751se_inb_p(unsigned long port)
@@ -123,11 +46,11 @@
 
         if (PXSEG(port))
                 v = *(volatile unsigned char *)port;
-	else if (CHECK_SH7751_PCIIO(port))
-                v = *(volatile unsigned char *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port))
+                v = *(volatile unsigned char *)pci_ioaddr(port);
 	else
-		v = (*port2adr(port))&0xff; 
-	delay();
+		v = (*port2adr(port)) & 0xff;
+	ctrl_delay();
 	return v;
 }
 
@@ -135,12 +58,12 @@
 {
         if (PXSEG(port))
                 return *(volatile unsigned short *)port;
-	else if (CHECK_SH7751_PCIIO(port))
-                return *(volatile unsigned short *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port))
+                return *(volatile unsigned short *)pci_ioaddr(port);
 	else if (port >= 0x2000)
 		return *port2adr(port);
 	else
-		maybebadio(inw, port);
+		maybebadio(port);
 	return 0;
 }
 
@@ -148,12 +71,12 @@
 {
         if (PXSEG(port))
                 return *(volatile unsigned long *)port;
-	else if (CHECK_SH7751_PCIIO(port))
-                return *(volatile unsigned int *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port))
+                return *(volatile unsigned int *)pci_ioaddr(port);
 	else if (port >= 0x2000)
 		return *port2adr(port);
 	else
-		maybebadio(inl, port);
+		maybebadio(port);
 	return 0;
 }
 
@@ -162,8 +85,8 @@
 
         if (PXSEG(port))
                 *(volatile unsigned char *)port = value;
-	else if (CHECK_SH7751_PCIIO(port))
-        	*((unsigned char*)PCI_IOMAP(port)) = value;
+	else if (is_pci_ioaddr(port))
+		*((unsigned char*)pci_ioaddr(port)) = value;
 	else
 		*(port2adr(port)) = value;
 }
@@ -172,73 +95,41 @@
 {
         if (PXSEG(port))
                 *(volatile unsigned char *)port = value;
-	else if (CHECK_SH7751_PCIIO(port))
-        	*((unsigned char*)PCI_IOMAP(port)) = value;
+	else if (is_pci_ioaddr(port))
+		*((unsigned char*)pci_ioaddr(port)) = value;
 	else
 		*(port2adr(port)) = value;
-	delay();
+	ctrl_delay();
 }
 
 void sh7751se_outw(unsigned short value, unsigned long port)
 {
         if (PXSEG(port))
                 *(volatile unsigned short *)port = value;
-	else if (CHECK_SH7751_PCIIO(port))
-        	*((unsigned short *)PCI_IOMAP(port)) = value;
+	else if (is_pci_ioaddr(port))
+		*((unsigned short *)pci_ioaddr(port)) = value;
 	else if (port >= 0x2000)
 		*port2adr(port) = value;
 	else
-		maybebadio(outw, port);
+		maybebadio(port);
 }
 
 void sh7751se_outl(unsigned int value, unsigned long port)
 {
         if (PXSEG(port))
                 *(volatile unsigned long *)port = value;
-	else if (CHECK_SH7751_PCIIO(port))
-        	*((unsigned long*)PCI_IOMAP(port)) = value;
+	else if (is_pci_ioaddr(port))
+		*((unsigned long*)pci_ioaddr(port)) = value;
 	else
-		maybebadio(outl, port);
+		maybebadio(port);
 }
 
 void sh7751se_insl(unsigned long port, void *addr, unsigned long count)
 {
-	maybebadio(insl, port);
+	maybebadio(port);
 }
 
 void sh7751se_outsl(unsigned long port, const void *addr, unsigned long count)
 {
-	maybebadio(outsw, port);
-}
-
-/* Map ISA bus address to the real address. Only for PCMCIA.  */
-
-/* ISA page descriptor.  */
-static __u32 sh_isa_memmap[256];
-
-#if 0
-static int
-sh_isa_mmap(__u32 start, __u32 length, __u32 offset)
-{
-	int idx;
-
-	if (start >= 0x100000 || (start & 0xfff) || (length != 0x1000))
-		return -1;
-
-	idx = start >> 12;
-	sh_isa_memmap[idx] = 0xb8000000 + (offset &~ 0xfff);
-	printk("sh_isa_mmap: start %x len %x offset %x (idx %x paddr %x)\n",
-	       start, length, offset, idx, sh_isa_memmap[idx]);
-	return 0;
-}
-#endif
-
-unsigned long
-sh7751se_isa_port2addr(unsigned long offset)
-{
-	int idx;
-
-	idx = (offset >> 12) & 0xff;
-	offset &= 0xfff;
-	return sh_isa_memmap[idx] + offset;
+	maybebadio(port);
 }
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/irq.c linux-2.6.17/arch/sh/boards/se/7751/irq.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/irq.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7751/irq.c	2006-07-12 16:54:20.000000000 +0000
@@ -13,7 +13,7 @@
 #include <linux/init.h>
 #include <linux/irq.h>
 #include <asm/irq.h>
-#include <asm/se7751/se7751.h>
+#include <asm/se7751.h>
 
 /*
  * Initialize IRQ setting
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/led.c linux-2.6.17/arch/sh/boards/se/7751/led.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/led.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7751/led.c	2006-07-12 16:54:20.000000000 +0000
@@ -8,24 +8,8 @@
  *
  * This file contains Solution Engine specific LED code.
  */
-
-#include <linux/config.h>
-#include <asm/se7751/se7751.h>
-
-static void mach_led(int position, int value)
-{
-	volatile unsigned short* p = (volatile unsigned short*)PA_LED;
-
-	if (value) {
-		*p |= (1<<8);
-	} else {
-		*p &= ~(1<<8);
-	}
-}
-
-#ifdef CONFIG_HEARTBEAT
-
 #include <linux/sched.h>
+#include <asm/se7751.h>
 
 /* Cycle the LED's in the clasic Knightrider/Sun pattern */
 void heartbeat_7751se(void)
@@ -65,4 +49,3 @@
 	*p = 1<<(bit+8);
 
 }
-#endif /* CONFIG_HEARTBEAT */
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/mach.c linux-2.6.17/arch/sh/boards/se/7751/mach.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/mach.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7751/mach.c	2006-07-12 16:54:20.000000000 +0000
@@ -11,12 +11,8 @@
 
 #include <linux/config.h>
 #include <linux/init.h>
-
 #include <asm/machvec.h>
-#include <asm/rtc.h>
-#include <asm/machvec_init.h>
-
-#include <asm/se7751/io.h>
+#include <asm/se7751.h>
 
 void heartbeat_7751se(void);
 void init_7751se_IRQ(void);
@@ -45,8 +41,6 @@
 	.mv_insl		= sh7751se_insl,
 	.mv_outsl		= sh7751se_outsl,
 
-	.mv_isa_port2addr	= sh7751se_isa_port2addr,
-
 	.mv_init_irq		= init_7751se_IRQ,
 #ifdef CONFIG_HEARTBEAT
 	.mv_heartbeat		= heartbeat_7751se,
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/setup.c linux-2.6.17/arch/sh/boards/se/7751/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/7751/setup.c	2006-07-12 16:54:20.000000000 +0000
@@ -1,4 +1,4 @@
-/* 
+/*
  * linux/arch/sh/kernel/setup_7751se.c
  *
  * Copyright (C) 2000  Kazumoto Kojima
@@ -12,11 +12,9 @@
 #include <linux/config.h>
 #include <linux/init.h>
 #include <linux/irq.h>
-
-#include <linux/hdreg.h>
 #include <linux/ide.h>
 #include <asm/io.h>
-#include <asm/se7751/se7751.h>
+#include <asm/se7751.h>
 
 #ifdef CONFIG_SH_KGDB
 #include <asm/kgdb.h>
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/CVS/Entries linux-2.6.17/arch/sh/boards/se/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/se/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,4 @@
+D/7300////
+D/73180////
+D/770x////
+D/7751////
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/CVS/Repository linux-2.6.17/arch/sh/boards/se/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/se/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/se
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/CVS/Root linux-2.6.17/arch/sh/boards/se/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/se/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/se/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh03/CVS/Entries linux-2.6.17/arch/sh/boards/sh03/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/sh03/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/sh03/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,5 @@
+/Makefile/1.1/Thu Oct  7 11:01:14 2004/-ko/
+/led.c/1.1/Thu Oct  7 11:01:14 2004/-ko/
+/setup.c/1.3/Sun Feb  5 21:55:29 2006/-ko/
+/rtc.c/1.4/Sat Jul  8 20:16:05 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh03/CVS/Repository linux-2.6.17/arch/sh/boards/sh03/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/sh03/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/sh03/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/sh03
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh03/CVS/Root linux-2.6.17/arch/sh/boards/sh03/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/sh03/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/sh03/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh03/rtc.c linux-2.6.17/arch/sh/boards/sh03/rtc.c
--- linux-2.6.17-vanilla/arch/sh/boards/sh03/rtc.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/sh03/rtc.c	2006-07-12 16:54:20.000000000 +0000
@@ -10,9 +10,10 @@
 #include <linux/sched.h>
 #include <linux/time.h>
 #include <linux/bcd.h>
-#include <asm/io.h>
 #include <linux/rtc.h>
 #include <linux/spinlock.h>
+#include <asm/io.h>
+#include <asm/rtc.h>
 
 #define RTC_BASE	0xb0000000
 #define RTC_SEC1	(RTC_BASE + 0)
@@ -34,8 +35,6 @@
 #define RTC_BUSY	1
 #define RTC_STOP	2
 
-extern void (*rtc_get_time)(struct timespec *);
-extern int (*rtc_set_time)(const time_t);
 extern spinlock_t rtc_lock;
 
 unsigned long get_cmos_time(void)
@@ -128,6 +127,6 @@
 
 void sh03_time_init(void)
 {
-	rtc_get_time = sh03_rtc_gettimeofday;
-	rtc_set_time = sh03_rtc_settimeofday;
+	rtc_sh_get_time = sh03_rtc_gettimeofday;
+	rtc_sh_set_time = sh03_rtc_settimeofday;
 }
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh03/setup.c linux-2.6.17/arch/sh/boards/sh03/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/sh03/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/sh03/setup.c	2006-07-12 16:54:20.000000000 +0000
@@ -8,22 +8,18 @@
 #include <linux/config.h>
 #include <linux/init.h>
 #include <linux/irq.h>
-#include <linux/hdreg.h>
-#include <linux/ide.h>
 #include <asm/io.h>
+#include <asm/rtc.h>
 #include <asm/sh03/io.h>
 #include <asm/sh03/sh03.h>
 #include <asm/addrspace.h>
-#include "../../drivers/pci/pci-sh7751.h"
-
-extern void (*board_time_init)(void);
 
 const char *get_system_type(void)
 {
-	return "Interface CTP/PCI-SH03)";
+	return "Interface (CTP/PCI-SH03)";
 }
 
-void init_sh03_IRQ(void)
+static void init_sh03_IRQ(void)
 {
 	ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR);
 
@@ -35,31 +31,26 @@
 
 extern void *cf_io_base;
 
-unsigned long sh03_isa_port2addr(unsigned long port)
+static void __iomem *sh03_ioport_map(unsigned long port, unsigned int size)
 {
 	if (PXSEG(port))
-		return port;
+		return (void __iomem *)port;
 	/* CompactFlash (IDE) */
-	if (((port >= 0x1f0) && (port <= 0x1f7)) || (port == 0x3f6)) {
-		return (unsigned long)cf_io_base + port;
-	}
-        return port + SH7751_PCI_IO_BASE;
-}
+	if (((port >= 0x1f0) && (port <= 0x1f7)) || (port == 0x3f6))
+		return (void __iomem *)((unsigned long)cf_io_base + port);
 
-/*
- * The Machine Vector
- */
+        return (void __iomem *)(port + PCI_IO_BASE);
+}
 
 struct sh_machine_vector mv_sh03 __initmv = {
 	.mv_nr_irqs		= 48,
-	.mv_isa_port2addr	= sh03_isa_port2addr,
+	.mv_ioport_map		= sh03_ioport_map,
 	.mv_init_irq		= init_sh03_IRQ,
 
 #ifdef CONFIG_HEARTBEAT
 	.mv_heartbeat		= heartbeat_sh03,
 #endif
 };
-
 ALIAS_MV(sh03)
 
 /* arch/sh/boards/sh03/rtc.c */
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh2000/CVS/Entries linux-2.6.17/arch/sh/boards/sh2000/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/sh2000/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/sh2000/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,3 @@
+/Makefile/1.6/Thu Mar 11 18:08:03 2004//
+/setup.c/1.4/Mon Aug  4 01:57:07 2003//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh2000/CVS/Repository linux-2.6.17/arch/sh/boards/sh2000/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/sh2000/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/sh2000/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/sh2000
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh2000/CVS/Root linux-2.6.17/arch/sh/boards/sh2000/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/sh2000/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/sh2000/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/snapgear/CVS/Entries linux-2.6.17/arch/sh/boards/snapgear/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/snapgear/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/snapgear/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,5 @@
+/Makefile/1.3/Thu Mar 11 18:08:03 2004//
+/io.c/1.5/Sun Feb  5 21:55:29 2006//
+/setup.c/1.4/Wed Jan  4 18:42:42 2006//
+/rtc.c/1.3/Sat Jul  8 20:16:05 2006//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/snapgear/CVS/Repository linux-2.6.17/arch/sh/boards/snapgear/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/snapgear/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/snapgear/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/snapgear
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/snapgear/CVS/Root linux-2.6.17/arch/sh/boards/snapgear/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/snapgear/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/snapgear/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/snapgear/io.c linux-2.6.17/arch/sh/boards/snapgear/io.c
--- linux-2.6.17-vanilla/arch/sh/boards/snapgear/io.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/snapgear/io.c	2006-07-12 16:54:20.000000000 +0000
@@ -1,6 +1,4 @@
-/* 
- * linux/arch/sh/kernel/io_7751se.c
- *
+/*
  * Copyright (C) 2002  David McCullough <davidm@snapgear.com>
  * Copyright (C) 2001  Ian da Silva, Jeremy Siegel
  * Based largely on io_se.c.
@@ -11,67 +9,22 @@
  * placeholder code from io_se.c left in with the
  * expectation of later SuperIO and PCMCIA access.
  */
-
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <linux/pci.h>
 #include <asm/io.h>
 #include <asm/addrspace.h>
 
-#include <asm/pci.h>
-#include "../../drivers/pci/pci-sh7751.h"
-
 #ifdef CONFIG_SH_SECUREEDGE5410
 unsigned short secureedge5410_ioport;
 #endif
 
-/*
- * The SnapGear uses the built-in PCI controller (PCIC)
- * of the 7751 processor
- */ 
-
-#define PCIIOBR		(volatile long *)PCI_REG(SH7751_PCIIOBR)
-#define PCIMBR          (volatile long *)PCI_REG(SH7751_PCIMBR)
-#define PCI_IO_AREA	SH7751_PCI_IO_BASE
-#define PCI_MEM_AREA	SH7751_PCI_CONFIG_BASE
-
-
-#define PCI_IOMAP(adr)	(PCI_IO_AREA + (adr & ~SH7751_PCIIOBR_MASK))
-
-
-#define maybebadio(name,port) \
-  printk("bad PC-like io %s for port 0x%lx at 0x%08x\n", \
-	 #name, (port), (__u32) __builtin_return_address(0))
-
-
-static inline void delay(void)
-{
-	ctrl_inw(0xa0000000);
-}
-
-
 static inline volatile __u16 *port2adr(unsigned int port)
 {
-#if 0
-	if (port >= 0x2000)
-		return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000));
-#endif
-	maybebadio(name,(unsigned long)port);
+	maybebadio((unsigned long)port);
 	return (volatile __u16*)port;
 }
 
-
-/* In case someone configures the kernel w/o PCI support: in that */
-/* scenario, don't ever bother to check for PCI-window addresses */
-
-/* NOTE: WINDOW CHECK MAY BE A BIT OFF, HIGH PCIBIOS_MIN_IO WRAPS? */
-#if defined(CONFIG_PCI)
-#define CHECK_SH7751_PCIIO(port) \
-  ((port >= PCIBIOS_MIN_IO) && (port < (PCIBIOS_MIN_IO + SH7751_PCI_IO_SIZE)))
-#else
-#define CHECK_SH7751_PCIIO(port) (0)
-#endif
-
 /*
  * General outline: remap really low stuff [eventually] to SuperIO,
  * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO)
@@ -79,148 +32,106 @@
  * should be way beyond the window, and is used  w/o translation for
  * compatibility.
  */
-
 unsigned char snapgear_inb(unsigned long port)
 {
 	if (PXSEG(port))
 		return *(volatile unsigned char *)port;
-	else if (CHECK_SH7751_PCIIO(port))
-		return *(volatile unsigned char *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port))
+		return *(volatile unsigned char *)pci_ioaddr(port);
 	else
-		return (*port2adr(port))&0xff; 
+		return (*port2adr(port)) & 0xff;
 }
 
-
 unsigned char snapgear_inb_p(unsigned long port)
 {
 	unsigned char v;
 
 	if (PXSEG(port))
 		v = *(volatile unsigned char *)port;
-	else if (CHECK_SH7751_PCIIO(port))
-		v = *(volatile unsigned char *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port))
+		v = *(volatile unsigned char *)pci_ioaddr(port);
 	else
-		v = (*port2adr(port))&0xff; 
-	delay();
+		v = (*port2adr(port))&0xff;
+	ctrl_delay();
 	return v;
 }
 
-
 unsigned short snapgear_inw(unsigned long port)
 {
 	if (PXSEG(port))
 		return *(volatile unsigned short *)port;
-	else if (CHECK_SH7751_PCIIO(port))
-		return *(volatile unsigned short *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port))
+		return *(volatile unsigned short *)pci_ioaddr(port);
 	else if (port >= 0x2000)
 		return *port2adr(port);
 	else
-		maybebadio(inw, port);
+		maybebadio(port);
 	return 0;
 }
 
-
 unsigned int snapgear_inl(unsigned long port)
 {
 	if (PXSEG(port))
 		return *(volatile unsigned long *)port;
-	else if (CHECK_SH7751_PCIIO(port))
-		return *(volatile unsigned int *)PCI_IOMAP(port);
+	else if (is_pci_ioaddr(port))
+		return *(volatile unsigned int *)pci_ioaddr(port);
 	else if (port >= 0x2000)
 		return *port2adr(port);
 	else
-		maybebadio(inl, port);
+		maybebadio(port);
 	return 0;
 }
 
-
 void snapgear_outb(unsigned char value, unsigned long port)
 {
 
 	if (PXSEG(port))
 		*(volatile unsigned char *)port = value;
-	else if (CHECK_SH7751_PCIIO(port))
-		*((unsigned char*)PCI_IOMAP(port)) = value;
+	else if (is_pci_ioaddr(port))
+		*((unsigned char*)pci_ioaddr(port)) = value;
 	else
 		*(port2adr(port)) = value;
 }
 
-
 void snapgear_outb_p(unsigned char value, unsigned long port)
 {
 	if (PXSEG(port))
 		*(volatile unsigned char *)port = value;
-	else if (CHECK_SH7751_PCIIO(port))
-		*((unsigned char*)PCI_IOMAP(port)) = value;
+	else if (is_pci_ioaddr(port))
+		*((unsigned char*)pci_ioaddr(port)) = value;
 	else
 		*(port2adr(port)) = value;
-	delay();
+	ctrl_delay();
 }
 
-
 void snapgear_outw(unsigned short value, unsigned long port)
 {
 	if (PXSEG(port))
 		*(volatile unsigned short *)port = value;
-	else if (CHECK_SH7751_PCIIO(port))
-		*((unsigned short *)PCI_IOMAP(port)) = value;
+	else if (is_pci_ioaddr(port))
+		*((unsigned short *)pci_ioaddr(port)) = value;
 	else if (port >= 0x2000)
 		*port2adr(port) = value;
 	else
-		maybebadio(outw, port);
+		maybebadio(port);
 }
 
-
 void snapgear_outl(unsigned int value, unsigned long port)
 {
 	if (PXSEG(port))
 		*(volatile unsigned long *)port = value;
-	else if (CHECK_SH7751_PCIIO(port))
-		*((unsigned long*)PCI_IOMAP(port)) = value;
+	else if (is_pci_ioaddr(port))
+		*((unsigned long*)pci_ioaddr(port)) = value;
 	else
-		maybebadio(outl, port);
+		maybebadio(port);
 }
 
 void snapgear_insl(unsigned long port, void *addr, unsigned long count)
 {
-	maybebadio(insl, port);
+	maybebadio(port);
 }
 
 void snapgear_outsl(unsigned long port, const void *addr, unsigned long count)
 {
-	maybebadio(outsw, port);
-}
-
-/* Map ISA bus address to the real address. Only for PCMCIA.  */
-
-
-/* ISA page descriptor.  */
-static __u32 sh_isa_memmap[256];
-
-
-#if 0
-static int sh_isa_mmap(__u32 start, __u32 length, __u32 offset)
-{
-	int idx;
-
-	if (start >= 0x100000 || (start & 0xfff) || (length != 0x1000))
-		return -1;
-
-	idx = start >> 12;
-	sh_isa_memmap[idx] = 0xb8000000 + (offset &~ 0xfff);
-#if 0
-	printk("sh_isa_mmap: start %x len %x offset %x (idx %x paddr %x)\n",
-	       start, length, offset, idx, sh_isa_memmap[idx]);
-#endif
-	return 0;
-}
-#endif
-
-unsigned long snapgear_isa_port2addr(unsigned long offset)
-{
-	int idx;
-
-	idx = (offset >> 12) & 0xff;
-	offset &= 0xfff;
-	return sh_isa_memmap[idx] + offset;
+	maybebadio(port);
 }
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/snapgear/rtc.c linux-2.6.17/arch/sh/boards/snapgear/rtc.c
--- linux-2.6.17-vanilla/arch/sh/boards/snapgear/rtc.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/snapgear/rtc.c	2006-07-12 16:54:20.000000000 +0000
@@ -17,10 +17,7 @@
 #include <linux/time.h>
 #include <linux/rtc.h>
 #include <linux/mc146818rtc.h>
-
 #include <asm/io.h>
-#include <asm/rtc.h>
-#include <asm/mc146818rtc.h>
 
 /****************************************************************************/
 
@@ -168,11 +165,11 @@
 		}
 
 	if (use_ds1302) {
-		rtc_get_time = snapgear_rtc_gettimeofday;
-		rtc_set_time = snapgear_rtc_settimeofday;
+		rtc_sh_get_time = snapgear_rtc_gettimeofday;
+		rtc_sh_set_time = snapgear_rtc_settimeofday;
 	} else {
-		rtc_get_time = sh_rtc_gettimeofday;
-		rtc_set_time = sh_rtc_settimeofday;
+		rtc_sh_get_time = sh_rtc_gettimeofday;
+		rtc_sh_set_time = sh_rtc_settimeofday;
 	}
 		
 	printk("SnapGear RTC: using %s rtc.\n", use_ds1302 ? "ds1302" : "internal");
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/snapgear/setup.c linux-2.6.17/arch/sh/boards/snapgear/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/snapgear/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/snapgear/setup.c	2006-07-12 16:54:20.000000000 +0000
@@ -1,5 +1,4 @@
-/****************************************************************************/
-/* 
+/*
  * linux/arch/sh/boards/snapgear/setup.c
  *
  * Copyright (C) 2002  David McCullough <davidm@snapgear.com>
@@ -12,8 +11,6 @@
  *           Modified for 7751 Solution Engine by
  *           Ian da Silva and Jeremy Siegel, 2001.
  */
-/****************************************************************************/
-
 #include <linux/config.h>
 #include <linux/init.h>
 #include <linux/irq.h>
@@ -22,14 +19,13 @@
 #include <linux/delay.h>
 #include <linux/module.h>
 #include <linux/sched.h>
-
 #include <asm/machvec.h>
-#include <asm/mach/io.h>
+#include <asm/snapgear.h>
 #include <asm/irq.h>
 #include <asm/io.h>
+#include <asm/rtc.h>
 #include <asm/cpu/timer.h>
 
-extern void (*board_time_init)(void);
 extern void secureedge5410_rtc_init(void);
 extern void pcibios_init(void);
 
@@ -86,91 +82,6 @@
 	make_ipr_irq(IRL3_IRQ, IRL3_IPR_ADDR, IRL3_IPR_POS, IRL3_PRIORITY);
 }
 
-/****************************************************************************/
-/*
- *	Fast poll interrupt simulator.
- */
-
-/*
- * Leave all of the fast timer/fast poll stuff commented out for now, since
- * it's not clear whether it actually works or not. Since it wasn't being used
- * at all in 2.4, we'll assume it's not sane for 2.6 either.. -- PFM
- */
-#if 0
-#define FAST_POLL	1000
-//#define FAST_POLL_INTR
-
-#define FASTTIMER_IRQ   17
-#define FASTTIMER_IPR_ADDR  INTC_IPRA
-#define FASTTIMER_IPR_POS    2
-#define FASTTIMER_PRIORITY   3
-
-#ifdef FAST_POLL_INTR
-#define TMU1_TCR_INIT	0x0020
-#else
-#define TMU1_TCR_INIT	0
-#endif
-#define TMU_TSTR_INIT	1
-#define TMU1_TCR_CALIB	0x0000
-
-
-#ifdef FAST_POLL_INTR
-static void fast_timer_irq(int irq, void *dev_instance, struct pt_regs *regs)
-{
-	unsigned long timer_status;
-    timer_status = ctrl_inw(TMU1_TCR);
-	timer_status &= ~0x100;
-	ctrl_outw(timer_status, TMU1_TCR);
-}
-#endif
-
-/*
- * return the current ticks on the fast timer
- */
-
-unsigned long fast_timer_count(void)
-{
-	return(ctrl_inl(TMU1_TCNT));
-}
-
-/*
- * setup a fast timer for profiling etc etc
- */
-
-static void setup_fast_timer()
-{
-	unsigned long interval;
-
-#ifdef FAST_POLL_INTR
-	interval = (current_cpu_data.module_clock/4 + FAST_POLL/2) / FAST_POLL;
-
-	make_ipr_irq(FASTTIMER_IRQ, FASTTIMER_IPR_ADDR, FASTTIMER_IPR_POS,
-			FASTTIMER_PRIORITY);
-
-	printk("SnapGear: %dHz fast timer on IRQ %d\n",FAST_POLL,FASTTIMER_IRQ);
-
-	if (request_irq(FASTTIMER_IRQ, fast_timer_irq, 0, "SnapGear fast timer",
-			NULL) != 0)
-		printk("%s(%d): request_irq() failed?\n", __FILE__, __LINE__);
-#else
-	printk("SnapGear: fast timer running\n",FAST_POLL,FASTTIMER_IRQ);
-	interval = 0xffffffff;
-#endif
-
-	ctrl_outb(ctrl_inb(TMU_TSTR) & ~0x2, TMU_TSTR); /* disable timer 1 */
-	ctrl_outw(TMU1_TCR_INIT, TMU1_TCR);
-	ctrl_outl(interval, TMU1_TCOR);
-	ctrl_outl(interval, TMU1_TCNT);
-	ctrl_outb(ctrl_inb(TMU_TSTR) | 0x2, TMU_TSTR); /* enable timer 1 */
-
-	printk("Timer count 1 = 0x%x\n", fast_timer_count());
-	udelay(1000);
-	printk("Timer count 2 = 0x%x\n", fast_timer_count());
-}
-#endif
-
-/****************************************************************************/
-
 const char *get_system_type(void)
 {
 	return "SnapGear SecureEdge5410";
@@ -197,8 +108,6 @@
 	.mv_outw_p		= snapgear_outw,
 	.mv_outl_p		= snapgear_outl,
 
-	.mv_isa_port2addr	= snapgear_isa_port2addr,
-
 	.mv_init_irq		= init_snapgear_IRQ,
 };
 ALIAS_MV(snapgear)
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/CVS/Entries linux-2.6.17/arch/sh/boards/superh/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/superh/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/superh/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+D/microdev////
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/CVS/Repository linux-2.6.17/arch/sh/boards/superh/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/superh/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/superh/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/superh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/CVS/Root linux-2.6.17/arch/sh/boards/superh/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/superh/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/superh/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/CVS/Entries linux-2.6.17/arch/sh/boards/superh/microdev/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/superh/microdev/CVS/Entries	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1,6 @@
+/Makefile/1.1/Wed Aug  4 01:04:30 2004//
+/io.c/1.3/Wed Jan  4 17:14:53 2006//
+/irq.c/1.3/Sat Dec 17 23:34:08 2005//
+/led.c/1.1/Wed Aug  4 01:04:30 2004//
+/setup.c/1.7/Tue Jan  3 22:35:50 2006//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/CVS/Repository linux-2.6.17/arch/sh/boards/superh/microdev/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/superh/microdev/CVS/Repository	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/superh/microdev
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/CVS/Root linux-2.6.17/arch/sh/boards/superh/microdev/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/superh/microdev/CVS/Root	2006-07-12 16:54:20.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/setup.c linux-2.6.17/arch/sh/boards/superh/microdev/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/superh/microdev/setup.c	2006-07-12 16:54:21.000000000 +0000
@@ -398,7 +398,7 @@
 		/* enable the appropriate GPIO pins for IDE functionality:
 		 * bit[0]   In/Out		1==input;  0==output
 		 * bit[1]   Polarity		1==invert; 0==no invert
-		 * bit[2]   Int Enb #1		1==Enable Combined IRQ #1; 0==disable
+		 * bit[2]   Int Enb #1		1==Enable Combined IRQ #1; 0==disable 
 		 * bit[3:4] Function Select	00==original; 01==Alternate Function #1
 		 */
 	SMSC_WRITE_INDEXED(0x00, 0xc2);	/* GP42 = nIDE1_OE */
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/titan/CVS/Entries linux-2.6.17/arch/sh/boards/titan/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/titan/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/titan/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,4 @@
+/Makefile/1.1/Wed Nov  9 14:56:34 2005/-ko/
+/io.c/1.6/Sun Feb  5 21:55:29 2006/-ko/
+/setup.c/1.3/Tue Jan  3 22:51:46 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/titan/CVS/Repository linux-2.6.17/arch/sh/boards/titan/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/titan/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/titan/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/titan
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/titan/CVS/Root linux-2.6.17/arch/sh/boards/titan/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/titan/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/titan/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/titan/Makefile linux-2.6.17/arch/sh/boards/titan/Makefile
--- linux-2.6.17-vanilla/arch/sh/boards/titan/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/titan/Makefile	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,5 @@
+#
+# Makefile for the Nimble Microsystems TITAN specific parts of the kernel
+#
+
+obj-y	 := setup.o io.o
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/titan/io.c linux-2.6.17/arch/sh/boards/titan/io.c
--- linux-2.6.17-vanilla/arch/sh/boards/titan/io.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/titan/io.c	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,126 @@
+/*
+ *	I/O routines for Titan
+ */
+#include <linux/pci.h>
+#include <asm/machvec.h>
+#include <asm/addrspace.h>
+#include <asm/titan.h>
+#include <asm/io.h>
+
+static inline unsigned int port2adr(unsigned int port)
+{
+        maybebadio((unsigned long)port);
+        return port;
+}
+
+u8 titan_inb(unsigned long port)
+{
+        if (PXSEG(port))
+                return ctrl_inb(port);
+        else if (is_pci_ioaddr(port))
+                return ctrl_inb(pci_ioaddr(port));
+        return ctrl_inw(port2adr(port)) & 0xff;
+}
+
+u8 titan_inb_p(unsigned long port)
+{
+        u8 v;
+
+        if (PXSEG(port))
+                v = ctrl_inb(port);
+        else if (is_pci_ioaddr(port))
+                v = ctrl_inb(pci_ioaddr(port));
+        else
+                v = ctrl_inw(port2adr(port)) & 0xff;
+        ctrl_delay();
+        return v;
+}
+
+u16 titan_inw(unsigned long port)
+{
+        if (PXSEG(port))
+                return ctrl_inw(port);
+        else if (is_pci_ioaddr(port))
+                return ctrl_inw(pci_ioaddr(port));
+        else if (port >= 0x2000)
+                return ctrl_inw(port2adr(port));
+        else
+                maybebadio(port);
+        return 0;
+}
+
+u32 titan_inl(unsigned long port)
+{
+        if (PXSEG(port))
+                return ctrl_inl(port);
+        else if (is_pci_ioaddr(port))
+                return ctrl_inl(pci_ioaddr(port));
+        else if (port >= 0x2000)
+                return ctrl_inw(port2adr(port));
+        else
+                maybebadio(port);
+        return 0;
+}
+
+void titan_outb(u8 value, unsigned long port)
+{
+        if (PXSEG(port))
+                ctrl_outb(value, port);
+        else if (is_pci_ioaddr(port))
+                ctrl_outb(value, pci_ioaddr(port));
+        else
+                ctrl_outw(value, port2adr(port));
+}
+
+void titan_outb_p(u8 value, unsigned long port)
+{
+        if (PXSEG(port))
+                ctrl_outb(value, port);
+        else if (is_pci_ioaddr(port))
+                ctrl_outb(value, pci_ioaddr(port));
+        else
+                ctrl_outw(value, port2adr(port));
+        ctrl_delay();
+}
+
+void titan_outw(u16 value, unsigned long port)
+{
+        if (PXSEG(port))
+                ctrl_outw(value, port);
+        else if (is_pci_ioaddr(port))
+                ctrl_outw(value, pci_ioaddr(port));
+        else if (port >= 0x2000)
+                ctrl_outw(value, port2adr(port));
+        else
+                maybebadio(port);
+}
+
+void titan_outl(u32 value, unsigned long port)
+{
+        if (PXSEG(port))
+                ctrl_outl(value, port);
+        else if (is_pci_ioaddr(port))
+                ctrl_outl(value, pci_ioaddr(port));
+        else
+                maybebadio(port);
+}
+
+void titan_insl(unsigned long port, void *dst, unsigned long count)
+{
+        maybebadio(port);
+}
+
+void titan_outsl(unsigned long port, const void *src, unsigned long count)
+{
+        maybebadio(port);
+}
+
+void __iomem *titan_ioport_map(unsigned long port, unsigned int size)
+{
+	if (PXSEG(port) || is_pci_memaddr(port))
+		return (void __iomem *)port;
+	else if (is_pci_ioaddr(port))
+		return (void __iomem *)pci_ioaddr(port);
+
+	return (void __iomem *)port2adr(port);
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/titan/setup.c linux-2.6.17/arch/sh/boards/titan/setup.c
--- linux-2.6.17-vanilla/arch/sh/boards/titan/setup.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/titan/setup.c	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,59 @@
+/*
+ *	Setup for Titan
+ */
+
+#include <linux/init.h>
+#include <asm/irq.h>
+#include <asm/titan.h>
+#include <asm/io.h>
+
+extern void __init pcibios_init_platform(void);
+
+static void __init init_titan_irq(void)
+{
+	/* enable individual interrupt mode for externals */
+	ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR);
+
+	make_ipr_irq( TITAN_IRQ_WAN,   IRL0_IPR_ADDR, IRL0_IPR_POS, IRL0_PRIORITY); /* PCIRQ0 */
+	make_ipr_irq( TITAN_IRQ_LAN,   IRL1_IPR_ADDR, IRL1_IPR_POS, IRL1_PRIORITY); /* PCIRQ1 */
+	make_ipr_irq( TITAN_IRQ_MPCIA, IRL2_IPR_ADDR, IRL2_IPR_POS, IRL2_PRIORITY); /* PCIRQ2 */
+	make_ipr_irq( TITAN_IRQ_USB,   IRL3_IPR_ADDR, IRL3_IPR_POS, IRL3_PRIORITY); /* PCIRQ3 */
+}
+
+const char *get_system_type(void)
+{
+	return "Titan";
+}
+
+int __init platform_setup(void)
+{
+	printk("%s Platform Setup\n", get_system_type());
+	return 0;
+}
+
+struct sh_machine_vector mv_titan __initmv = {
+	.mv_nr_irqs =	NR_IRQS,
+
+	.mv_inb =	titan_inb,
+	.mv_inw =	titan_inw,
+	.mv_inl =	titan_inl,
+	.mv_outb =	titan_outb,
+	.mv_outw =	titan_outw,
+	.mv_outl =	titan_outl,
+
+	.mv_inb_p =	titan_inb_p,
+	.mv_inw_p =	titan_inw,
+	.mv_inl_p =	titan_inl,
+	.mv_outb_p =	titan_outb_p,
+	.mv_outw_p =	titan_outw,
+	.mv_outl_p =	titan_outl,
+
+	.mv_insl =	titan_insl,
+	.mv_outsl =	titan_outsl,
+
+	.mv_ioport_map = titan_ioport_map,
+
+	.mv_init_irq =	init_titan_irq,
+	.mv_init_pci =	pcibios_init_platform,
+};
+ALIAS_MV(titan)
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/unknown/CVS/Entries linux-2.6.17/arch/sh/boards/unknown/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boards/unknown/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/unknown/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,3 @@
+/Makefile/1.5/Tue Nov  8 19:55:58 2005//
+/setup.c/1.3/Tue Nov  8 19:55:58 2005//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/unknown/CVS/Repository linux-2.6.17/arch/sh/boards/unknown/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boards/unknown/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/unknown/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boards/unknown
diff -ruN linux-2.6.17-vanilla/arch/sh/boards/unknown/CVS/Root linux-2.6.17/arch/sh/boards/unknown/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boards/unknown/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boards/unknown/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boot/.cvsignore linux-2.6.17/arch/sh/boot/.cvsignore
--- linux-2.6.17-vanilla/arch/sh/boot/.cvsignore	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boot/.cvsignore	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+zImage
diff -ruN linux-2.6.17-vanilla/arch/sh/boot/CVS/Entries linux-2.6.17/arch/sh/boot/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boot/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boot/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,3 @@
+/.cvsignore/1.1.1.1/Mon Oct 15 20:44:47 2001//
+/Makefile/1.9/Wed Jun 16 15:21:46 2004/-ko/
+D/compressed////
diff -ruN linux-2.6.17-vanilla/arch/sh/boot/CVS/Repository linux-2.6.17/arch/sh/boot/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boot/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boot/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boot
diff -ruN linux-2.6.17-vanilla/arch/sh/boot/CVS/Root linux-2.6.17/arch/sh/boot/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boot/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boot/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/boot/compressed/.cvsignore linux-2.6.17/arch/sh/boot/compressed/.cvsignore
--- linux-2.6.17-vanilla/arch/sh/boot/compressed/.cvsignore	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boot/compressed/.cvsignore	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,3 @@
+vmlinux
+vmlinux.bin
+vmlinux.bin.gz
diff -ruN linux-2.6.17-vanilla/arch/sh/boot/compressed/CVS/Entries linux-2.6.17/arch/sh/boot/compressed/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/boot/compressed/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boot/compressed/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,6 @@
+/.cvsignore/1.2/Sat May 10 03:22:05 2003//
+/Makefile/1.13/Mon Oct 25 10:41:02 2004//
+/head.S/1.3/Mon Aug 11 07:14:13 2003/-ko/
+/misc.c/1.4/Mon May 31 21:20:29 2004/-ko/
+/vmlinux.scr/1.1/Sat May 10 03:22:05 2003//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/boot/compressed/CVS/Repository linux-2.6.17/arch/sh/boot/compressed/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/boot/compressed/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boot/compressed/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/boot/compressed
diff -ruN linux-2.6.17-vanilla/arch/sh/boot/compressed/CVS/Root linux-2.6.17/arch/sh/boot/compressed/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/boot/compressed/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/boot/compressed/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/CVS/Entries linux-2.6.17/arch/sh/cchips/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/cchips/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,3 @@
+/Kconfig/1.5/Wed Jan  4 16:34:31 2006//
+D/hd6446x////
+D/voyagergx////
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/CVS/Repository linux-2.6.17/arch/sh/cchips/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/cchips/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/cchips
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/CVS/Root linux-2.6.17/arch/sh/cchips/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/cchips/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/Kconfig linux-2.6.17/arch/sh/cchips/Kconfig
--- linux-2.6.17-vanilla/arch/sh/cchips/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/Kconfig	2006-07-12 16:54:21.000000000 +0000
@@ -65,6 +65,11 @@
 
 	  Do not change this unless you know what you are doing.
 
+config HD64461_IOBASE
+	hex "HD64461 start address"
+	depends on HD64461
+	default "0xb0000000"
+
 config HD64461_ENABLER
 	bool "HD64461 PCMCIA enabler"
 	depends on HD64461
@@ -73,7 +78,6 @@
 	  via the HD64461 companion chip.
 	  Otherwise, say N.
 
-
 config HD64465_IOBASE
 	hex "HD64465 start address"
 	depends on HD64465
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/CVS/Entries linux-2.6.17/arch/sh/cchips/hd6446x/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/hd6446x/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,2 @@
+D/hd64461////
+D/hd64465////
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/CVS/Repository linux-2.6.17/arch/sh/cchips/hd6446x/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/hd6446x/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/cchips/hd6446x
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/CVS/Root linux-2.6.17/arch/sh/cchips/hd6446x/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/hd6446x/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/CVS/Entries linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,4 @@
+/Makefile/1.4/Thu Mar 11 18:08:03 2004//
+/io.c/1.8/Sun Feb  5 21:55:29 2006//
+/setup.c/1.7/Wed Jan  4 14:53:18 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/CVS/Repository linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/cchips/hd6446x/hd64461
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/CVS/Root linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/io.c linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/io.c
--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/io.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/io.c	2006-07-12 16:54:21.000000000 +0000
@@ -1,12 +1,12 @@
 /*
- *	$Id: io.c,v 1.6 2004/03/16 00:07:50 lethal Exp $
+ *	$Id: io.c,v 1.8 2006/02/05 21:55:29 lethal Exp $
  *	Copyright (C) 2000 YAEGASHI Takeshi
  *	Typical I/O routines for HD64461 system.
  */
 
 #include <linux/config.h>
 #include <asm/io.h>
-#include <asm/hd64461/hd64461.h>
+#include <asm/hd64461.h>
 
 #define MEM_BASE (CONFIG_HD64461_IOBASE - HD64461_STBCR)
 
@@ -55,11 +55,6 @@
 	return 0xa0000000 + (port & 0x1fffffff);
 }
 
-static inline void delay(void)
-{
-	ctrl_inw(0xa0000000);
-}
-
 unsigned char hd64461_inb(unsigned long port)
 {
 	return *(volatile unsigned char*)PORT2ADDR(port);
@@ -68,7 +63,7 @@
 unsigned char hd64461_inb_p(unsigned long port)
 {
 	unsigned long v = *(volatile unsigned char*)PORT2ADDR(port);
-	delay();
+	ctrl_delay();
 	return v;
 }
 
@@ -90,7 +85,7 @@
 void hd64461_outb_p(unsigned char b, unsigned long port)
 {
 	*(volatile unsigned char*)PORT2ADDR(port) = b;
-	delay();
+	ctrl_delay();
 }
 
 void hd64461_outw(unsigned short b, unsigned long port)
@@ -145,13 +140,13 @@
 	while(count--) *addr=*buf++;
 }
 
-unsigned short hd64461_readw(unsigned long addr)
+unsigned short hd64461_readw(void __iomem *addr)
 {
-	return *(volatile unsigned short*)(MEM_BASE+addr);
+	return ctrl_inw(MEM_BASE+(unsigned long __force)addr);
 }
 
-void hd64461_writew(unsigned short b, unsigned long addr)
+void hd64461_writew(unsigned short b, void __iomem *addr)
 {
-	*(volatile unsigned short*)(MEM_BASE+addr) = b;
+	ctrl_outw(b, MEM_BASE+(unsigned long __force)addr);
 }
 
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/setup.c linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/setup.c
--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/setup.c	2006-07-12 16:54:21.000000000 +0000
@@ -15,8 +15,7 @@
 
 #include <asm/io.h>
 #include <asm/irq.h>
-
-#include <asm/hd64461/hd64461.h>
+#include <asm/hd64461.h>
 
 static void disable_hd64461_irq(unsigned int irq)
 {
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64465/CVS/Entries linux-2.6.17/arch/sh/cchips/hd6446x/hd64465/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64465/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64465/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,5 @@
+/Makefile/1.4/Thu Mar 11 18:08:03 2004//
+/gpio.c/1.4/Mon May 19 22:24:18 2003//
+/io.c/1.5/Tue Mar  8 06:46:56 2005/-ko/
+/setup.c/1.5/Sun Aug 15 16:59:26 2004/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64465/CVS/Repository linux-2.6.17/arch/sh/cchips/hd6446x/hd64465/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64465/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64465/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/cchips/hd6446x/hd64465
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64465/CVS/Root linux-2.6.17/arch/sh/cchips/hd6446x/hd64465/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64465/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64465/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/CVS/Entries linux-2.6.17/arch/sh/cchips/voyagergx/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/voyagergx/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,5 @@
+/Makefile/1.2/Tue May 31 14:33:28 2005/-ko/
+/consistent.c/1.5/Fri Jan 27 16:11:52 2006/-ko/
+/irq.c/1.5/Wed Feb  8 22:08:10 2006/-ko/
+/setup.c/1.2/Wed Feb  8 22:08:10 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/CVS/Repository linux-2.6.17/arch/sh/cchips/voyagergx/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/voyagergx/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/cchips/voyagergx
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/CVS/Root linux-2.6.17/arch/sh/cchips/voyagergx/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/voyagergx/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/Makefile linux-2.6.17/arch/sh/cchips/voyagergx/Makefile
--- linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/voyagergx/Makefile	2006-07-12 16:54:21.000000000 +0000
@@ -4,5 +4,5 @@
 
 obj-y	:= irq.o setup.o
 
-obj-$(CONFIG_USB_OHCI_HCD)	+= consistent.o
+obj-$(CONFIG_USB_SM501)	+= consistent.o
 
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/irq.c linux-2.6.17/arch/sh/cchips/voyagergx/irq.c
--- linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/irq.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/voyagergx/irq.c	2006-07-12 16:54:21.000000000 +0000
@@ -33,8 +33,7 @@
 
 #include <asm/io.h>
 #include <asm/irq.h>
-#include <asm/rts7751r2d/rts7751r2d.h>
-#include <asm/rts7751r2d/voyagergx_reg.h>
+#include <asm/mach/voyagergx_reg.h>
 
 static void disable_voyagergx_irq(unsigned int irq)
 {
diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/setup.c linux-2.6.17/arch/sh/cchips/voyagergx/setup.c
--- linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/cchips/voyagergx/setup.c	2006-07-12 16:54:21.000000000 +0000
@@ -13,7 +13,7 @@
 #include <linux/init.h>
 #include <linux/module.h>
 #include <asm/io.h>
-#include <asm/rts7751r2d/voyagergx_reg.h>
+#include <asm/mach/voyagergx_reg.h>
 
 static int __init setup_voyagergx(void)
 {
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/CVS/Entries linux-2.6.17/arch/sh/configs/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/configs/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,19 @@
+/adx_defconfig/1.3/Wed Oct  5 21:34:14 2005//
+/cqreek_defconfig/1.3/Wed Oct  5 21:34:14 2005//
+/dreamcast_defconfig/1.8/Wed Jan  4 19:03:16 2006//
+/hs7751rvoip_defconfig/1.4/Wed Jan  4 19:03:16 2006//
+/landisk_defconfig/1.4/Sun Dec 18 00:20:37 2005/-ko/
+/microdev_defconfig/1.7/Wed Jan  4 19:03:16 2006/-ko/
+/rts7751r2d_defconfig/1.6/Wed Jan  4 19:03:16 2006/-ko/
+/se7300_defconfig/1.5/Wed Jan  4 19:03:16 2006//
+/se73180_defconfig/1.7/Sun Jan  8 12:22:57 2006//
+/se7705_defconfig/1.4/Wed Jan  4 19:03:16 2006/-ko/
+/se7750_defconfig/1.4/Wed Jan  4 19:03:16 2006/-ko/
+/se7751_defconfig/1.4/Wed Jan  4 19:03:16 2006//
+/sh03_defconfig/1.4/Wed Jan  4 19:03:16 2006/-ko/
+/snapgear_defconfig/1.5/Wed Jan  4 19:03:16 2006//
+/systemh_defconfig/1.4/Wed Jan  4 19:03:16 2006//
+/r7780rp_defconfig/1.2/Wed Jul  5 14:50:34 2006/-ko/
+/hp6xx_defconfig/1.8/Thu Jul  6 12:38:07 2006/-ko/
+/titan_defconfig/1.3/Thu Jul  6 18:40:37 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/CVS/Repository linux-2.6.17/arch/sh/configs/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/configs/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/configs
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/CVS/Root linux-2.6.17/arch/sh/configs/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/configs/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/adx_defconfig linux-2.6.17/arch/sh/configs/adx_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/adx_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/adx_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-sh
-# Wed Mar  2 15:09:26 2005
+# Linux kernel version: 2.6.13-sh
+# Thu Oct  6 00:20:11 2005
 #
 CONFIG_SUPERH=y
 CONFIG_UID16=y
@@ -16,6 +16,7 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
@@ -25,22 +26,23 @@
 # CONFIG_SYSVIPC is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 # CONFIG_SYSCTL is not set
-# CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -57,9 +59,7 @@
 # CONFIG_SH_7751_SYSTEMH is not set
 # CONFIG_SH_STB1_HARP is not set
 # CONFIG_SH_STB1_OVERDRIVE is not set
-# CONFIG_SH_HP620 is not set
-# CONFIG_SH_HP680 is not set
-# CONFIG_SH_HP690 is not set
+# CONFIG_SH_HP6XX is not set
 # CONFIG_SH_CQREEK is not set
 # CONFIG_SH_DMIDA is not set
 # CONFIG_SH_EC3104 is not set
@@ -76,46 +76,90 @@
 # CONFIG_SH_RTS7751R2D is not set
 # CONFIG_SH_EDOSK7705 is not set
 # CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
 # CONFIG_SH_UNKNOWN is not set
-# CONFIG_CPU_SH2 is not set
-# CONFIG_CPU_SH3 is not set
+
+#
+# Processor selection
+#
 CONFIG_CPU_SH4=y
+
+#
+# SH-2 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7300 is not set
 # CONFIG_CPU_SUBTYPE_SH7705 is not set
 # CONFIG_CPU_SUBTYPE_SH7707 is not set
 # CONFIG_CPU_SUBTYPE_SH7708 is not set
 # CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
 CONFIG_CPU_SUBTYPE_SH7750=y
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
 # CONFIG_CPU_SUBTYPE_SH7751 is not set
+# CONFIG_CPU_SUBTYPE_SH7751R is not set
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
-# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_ST40STB1 is not set
 # CONFIG_CPU_SUBTYPE_ST40GX1 is not set
-# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
 CONFIG_MMU=y
-# CONFIG_CMDLINE_BOOL is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
 CONFIG_MEMORY_START=0x08000000
 CONFIG_MEMORY_SIZE=0x00400000
-CONFIG_MEMORY_SET=y
-# CONFIG_MEMORY_OVERRIDE is not set
 CONFIG_CF_ENABLER=y
 # CONFIG_CF_AREA5 is not set
 CONFIG_CF_AREA6=y
 CONFIG_CF_BASE_ADDR=0xb8000000
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_SH_RTC=y
 CONFIG_SH_FPU=y
-CONFIG_ZERO_PAGE_OFFSET=0x00001000
-CONFIG_BOOT_LINK_OFFSET=0x00800000
-CONFIG_CPU_LITTLE_ENDIAN=y
-# CONFIG_PREEMPT is not set
-# CONFIG_UBC_WAKEUP is not set
-# CONFIG_SH_WRITETHROUGH is not set
-# CONFIG_SH_OCRAM is not set
 # CONFIG_SH_STORE_QUEUES is not set
-# CONFIG_SMP is not set
-CONFIG_SH_PCLK_CALC=y
-CONFIG_SH_PCLK_FREQ=50000000
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+# CONFIG_SH_PCLK_FREQ_BOOL is not set
 
 #
 # CPU Frequency scaling
@@ -133,18 +177,29 @@
 # CONFIG_HD6446X_SERIES is not set
 
 #
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+# Kernel features
 #
-# CONFIG_PCI is not set
+# CONFIG_KEXEC is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_SMP is not set
 
 #
-# PCCARD (PCMCIA/CardBus) support
+# Boot options
 #
-# CONFIG_PCCARD is not set
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+# CONFIG_CMDLINE_BOOL is not set
+
+#
+# Bus options
+#
+# CONFIG_PCI is not set
 
 #
-# PC-card bridges
+# PCCARD (PCMCIA/CardBus) support
 #
+# CONFIG_PCCARD is not set
 
 #
 # PCI Hotplug Support
@@ -158,9 +213,9 @@
 # CONFIG_BINFMT_MISC is not set
 
 #
-# SH initrd options
+# Networking
 #
-# CONFIG_EMBEDDED_RAMDISK is not set
+# CONFIG_NET is not set
 
 #
 # Device Drivers
@@ -250,6 +305,7 @@
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -260,9 +316,8 @@
 #
 
 #
-# Networking support
+# Network device support
 #
-# CONFIG_NET is not set
 # CONFIG_NETPOLL is not set
 # CONFIG_NET_POLL_CONTROLLER is not set
 
@@ -293,18 +348,6 @@
 # CONFIG_INPUT_EVBUG is not set
 
 #
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_CT82C710 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-
-#
 # Input Device Drivers
 #
 CONFIG_INPUT_KEYBOARD=y
@@ -322,6 +365,16 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -359,13 +412,17 @@
 #
 # Ftape, the floppy tape device driver
 #
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
+# CONFIG_I2C_SENSOR is not set
 
 #
 # Dallas's 1-wire bus
@@ -373,6 +430,12 @@
 # CONFIG_W1 is not set
 
 #
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
 # Misc devices
 #
 
@@ -393,7 +456,6 @@
 #
 # Console display driver support
 #
-CONFIG_VGA_CONSOLE=y
 CONFIG_DUMMY_CONSOLE=y
 
 #
@@ -408,10 +470,6 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
-#
-
-#
 # USB Gadget Support
 #
 # CONFIG_USB_GADGET is not set
@@ -424,17 +482,22 @@
 #
 # InfiniBand support
 #
-# CONFIG_INFINIBAND is not set
+
+#
+# SN Devices
+#
 
 #
 # File systems
 #
 CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
 # CONFIG_EXT3_FS is not set
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
 
 #
 # XFS support
@@ -442,6 +505,7 @@
 # CONFIG_XFS_FS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
@@ -466,7 +530,6 @@
 CONFIG_PROC_FS=y
 # CONFIG_PROC_KCORE is not set
 CONFIG_SYSFS=y
-# CONFIG_DEVFS_FS is not set
 # CONFIG_DEVPTS_FS_XATTR is not set
 # CONFIG_TMPFS is not set
 # CONFIG_HUGETLBFS is not set
@@ -509,7 +572,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_FRAME_POINTER is not set
 CONFIG_SH_STANDARD_BIOS=y
 # CONFIG_EARLY_SCIF_CONSOLE is not set
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/cqreek_defconfig linux-2.6.17/arch/sh/configs/cqreek_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/cqreek_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/cqreek_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-sh
-# Wed Mar  2 15:09:38 2005
+# Linux kernel version: 2.6.13-sh
+# Thu Oct  6 00:20:14 2005
 #
 CONFIG_SUPERH=y
 CONFIG_UID16=y
@@ -16,6 +16,7 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
@@ -25,22 +26,23 @@
 # CONFIG_SYSVIPC is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 # CONFIG_SYSCTL is not set
-# CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -57,9 +59,7 @@
 # CONFIG_SH_7751_SYSTEMH is not set
 # CONFIG_SH_STB1_HARP is not set
 # CONFIG_SH_STB1_OVERDRIVE is not set
-# CONFIG_SH_HP620 is not set
-# CONFIG_SH_HP680 is not set
-# CONFIG_SH_HP690 is not set
+# CONFIG_SH_HP6XX is not set
 CONFIG_SH_CQREEK=y
 # CONFIG_SH_DMIDA is not set
 # CONFIG_SH_EC3104 is not set
@@ -76,41 +76,86 @@
 # CONFIG_SH_RTS7751R2D is not set
 # CONFIG_SH_EDOSK7705 is not set
 # CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
 # CONFIG_SH_UNKNOWN is not set
-# CONFIG_CPU_SH2 is not set
+
+#
+# Processor selection
+#
 CONFIG_CPU_SH3=y
-# CONFIG_CPU_SH4 is not set
+
+#
+# SH-2 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7300 is not set
 # CONFIG_CPU_SUBTYPE_SH7705 is not set
 # CONFIG_CPU_SUBTYPE_SH7707 is not set
 CONFIG_CPU_SUBTYPE_SH7708=y
 # CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
 # CONFIG_CPU_SUBTYPE_SH7751 is not set
+# CONFIG_CPU_SUBTYPE_SH7751R is not set
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
-# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_ST40STB1 is not set
 # CONFIG_CPU_SUBTYPE_ST40GX1 is not set
-# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
 CONFIG_MMU=y
-# CONFIG_CMDLINE_BOOL is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
 CONFIG_MEMORY_START=0x0c000000
 CONFIG_MEMORY_SIZE=0x00400000
-# CONFIG_MEMORY_OVERRIDE is not set
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_SH_RTC=y
 CONFIG_SH_DSP=y
 CONFIG_SH_ADC=y
-CONFIG_ZERO_PAGE_OFFSET=0x00001000
-CONFIG_BOOT_LINK_OFFSET=0x00800000
-CONFIG_CPU_LITTLE_ENDIAN=y
-# CONFIG_PREEMPT is not set
-# CONFIG_UBC_WAKEUP is not set
-# CONFIG_SH_WRITETHROUGH is not set
-# CONFIG_SH_OCRAM is not set
-# CONFIG_SMP is not set
-CONFIG_SH_PCLK_CALC=y
-CONFIG_SH_PCLK_FREQ=1193182
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+# CONFIG_SH_PCLK_FREQ_BOOL is not set
 
 #
 # CPU Frequency scaling
@@ -128,18 +173,29 @@
 # CONFIG_HD6446X_SERIES is not set
 
 #
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+# Kernel features
 #
-# CONFIG_PCI is not set
+# CONFIG_KEXEC is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_SMP is not set
 
 #
-# PCCARD (PCMCIA/CardBus) support
+# Boot options
 #
-# CONFIG_PCCARD is not set
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+# CONFIG_CMDLINE_BOOL is not set
+
+#
+# Bus options
+#
+# CONFIG_PCI is not set
 
 #
-# PC-card bridges
+# PCCARD (PCMCIA/CardBus) support
 #
+# CONFIG_PCCARD is not set
 
 #
 # PCI Hotplug Support
@@ -153,9 +209,9 @@
 # CONFIG_BINFMT_MISC is not set
 
 #
-# SH initrd options
+# Networking
 #
-# CONFIG_EMBEDDED_RAMDISK is not set
+# CONFIG_NET is not set
 
 #
 # Device Drivers
@@ -245,6 +301,7 @@
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -255,9 +312,8 @@
 #
 
 #
-# Networking support
+# Network device support
 #
-# CONFIG_NET is not set
 # CONFIG_NETPOLL is not set
 # CONFIG_NET_POLL_CONTROLLER is not set
 
@@ -288,18 +344,6 @@
 # CONFIG_INPUT_EVBUG is not set
 
 #
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_CT82C710 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-
-#
 # Input Device Drivers
 #
 CONFIG_INPUT_KEYBOARD=y
@@ -317,6 +361,16 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -354,13 +408,17 @@
 #
 # Ftape, the floppy tape device driver
 #
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
+# CONFIG_I2C_SENSOR is not set
 
 #
 # Dallas's 1-wire bus
@@ -368,6 +426,12 @@
 # CONFIG_W1 is not set
 
 #
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
 # Misc devices
 #
 
@@ -388,7 +452,6 @@
 #
 # Console display driver support
 #
-CONFIG_VGA_CONSOLE=y
 CONFIG_DUMMY_CONSOLE=y
 
 #
@@ -403,10 +466,6 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
-#
-
-#
 # USB Gadget Support
 #
 # CONFIG_USB_GADGET is not set
@@ -419,17 +478,22 @@
 #
 # InfiniBand support
 #
-# CONFIG_INFINIBAND is not set
+
+#
+# SN Devices
+#
 
 #
 # File systems
 #
 CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
 # CONFIG_EXT3_FS is not set
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
 
 #
 # XFS support
@@ -437,6 +501,7 @@
 # CONFIG_XFS_FS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
@@ -461,7 +526,6 @@
 CONFIG_PROC_FS=y
 # CONFIG_PROC_KCORE is not set
 CONFIG_SYSFS=y
-# CONFIG_DEVFS_FS is not set
 # CONFIG_DEVPTS_FS_XATTR is not set
 # CONFIG_TMPFS is not set
 # CONFIG_HUGETLBFS is not set
@@ -504,7 +568,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_FRAME_POINTER is not set
 CONFIG_SH_STANDARD_BIOS=y
 # CONFIG_EARLY_PRINTK is not set
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/dreamcast_defconfig linux-2.6.17/arch/sh/configs/dreamcast_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/dreamcast_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/dreamcast_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-sh
-# Wed Mar  2 15:09:40 2005
+# Linux kernel version: 2.6.15-sh
+# Wed Jan  4 14:20:29 2006
 #
 CONFIG_SUPERH=y
 CONFIG_UID16=y
@@ -17,11 +17,13 @@
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
 CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
 #
 CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
 # CONFIG_POSIX_MQUEUE is not set
@@ -29,22 +31,26 @@
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -58,6 +64,24 @@
 CONFIG_KMOD=y
 
 #
+# Block layer
+#
+# CONFIG_LBD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
 # System type
 #
 # CONFIG_SH_SOLUTION_ENGINE is not set
@@ -67,9 +91,7 @@
 # CONFIG_SH_7751_SYSTEMH is not set
 # CONFIG_SH_STB1_HARP is not set
 # CONFIG_SH_STB1_OVERDRIVE is not set
-# CONFIG_SH_HP620 is not set
-# CONFIG_SH_HP680 is not set
-# CONFIG_SH_HP690 is not set
+# CONFIG_SH_HP6XX is not set
 # CONFIG_SH_CQREEK is not set
 # CONFIG_SH_DMIDA is not set
 # CONFIG_SH_EC3104 is not set
@@ -86,48 +108,97 @@
 # CONFIG_SH_RTS7751R2D is not set
 # CONFIG_SH_EDOSK7705 is not set
 # CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+# CONFIG_SH_TITAN is not set
 # CONFIG_SH_UNKNOWN is not set
-# CONFIG_CPU_SH2 is not set
-# CONFIG_CPU_SH3 is not set
+
+#
+# Processor selection
+#
 CONFIG_CPU_SH4=y
+
+#
+# SH-2 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7300 is not set
 # CONFIG_CPU_SUBTYPE_SH7705 is not set
 # CONFIG_CPU_SUBTYPE_SH7707 is not set
 # CONFIG_CPU_SUBTYPE_SH7708 is not set
 # CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
 CONFIG_CPU_SUBTYPE_SH7750=y
+CONFIG_CPU_SUBTYPE_SH7091=y
+CONFIG_CPU_SUBTYPE_SH7750R=y
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
 # CONFIG_CPU_SUBTYPE_SH7751 is not set
+# CONFIG_CPU_SUBTYPE_SH7751R is not set
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
-# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_ST40STB1 is not set
 # CONFIG_CPU_SUBTYPE_ST40GX1 is not set
-# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
 CONFIG_MMU=y
 CONFIG_HUGETLB_PAGE_SIZE_64K=y
 # CONFIG_HUGETLB_PAGE_SIZE_1MB is not set
-# CONFIG_CMDLINE_BOOL is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
 CONFIG_MEMORY_START=0x0c000000
 CONFIG_MEMORY_SIZE=0x01000000
-CONFIG_MEMORY_SET=y
-# CONFIG_MEMORY_OVERRIDE is not set
-CONFIG_SH_FPU=y
-CONFIG_ZERO_PAGE_OFFSET=0x00001000
-CONFIG_BOOT_LINK_OFFSET=0x00800000
+
+#
+# Processor features
+#
 CONFIG_CPU_LITTLE_ENDIAN=y
-CONFIG_PREEMPT=y
-# CONFIG_UBC_WAKEUP is not set
-# CONFIG_SH_WRITETHROUGH is not set
-CONFIG_SH_OCRAM=y
+CONFIG_SH_FPU=y
 CONFIG_SH_STORE_QUEUES=y
-# CONFIG_SMP is not set
-CONFIG_SH_PCLK_CALC=y
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+CONFIG_SH_PCLK_FREQ_BOOL=y
 CONFIG_SH_PCLK_FREQ=49876504
 
 #
 # CPU Frequency scaling
 #
 CONFIG_CPU_FREQ=y
+CONFIG_CPU_FREQ_TABLE=y
 # CONFIG_CPU_FREQ_DEBUG is not set
 CONFIG_CPU_FREQ_STAT=y
 # CONFIG_CPU_FREQ_STAT_DETAILS is not set
@@ -137,16 +208,13 @@
 CONFIG_CPU_FREQ_GOV_POWERSAVE=y
 CONFIG_CPU_FREQ_GOV_USERSPACE=y
 # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
-CONFIG_CPU_FREQ_TABLE=y
-CONFIG_SH_CPU_FREQ=y
+# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
+# CONFIG_SH_CPU_FREQ is not set
 
 #
 # DMA support
 #
-CONFIG_SH_DMA=y
-CONFIG_NR_ONCHIP_DMA_CHANNELS=4
-CONFIG_NR_DMA_CHANNELS_BOOL=y
-CONFIG_NR_DMA_CHANNELS=9
+# CONFIG_SH_DMA is not set
 
 #
 # Companion Chips
@@ -154,14 +222,28 @@
 # CONFIG_HD6446X_SERIES is not set
 
 #
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+# Kernel features
+#
+# CONFIG_KEXEC is not set
+CONFIG_PREEMPT=y
+# CONFIG_SMP is not set
+
+#
+# Boot options
+#
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttySC1,115200 panic=3"
+
+#
+# Bus options
 #
-CONFIG_MAPLE=y
 CONFIG_PCI=y
 # CONFIG_SH_PCIDMA_NONCOHERENT is not set
 CONFIG_PCI_AUTO=y
 CONFIG_PCI_LEGACY_PROC=y
-CONFIG_PCI_NAMES=y
 
 #
 # PCCARD (PCMCIA/CardBus) support
@@ -169,10 +251,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -185,9 +263,72 @@
 # CONFIG_BINFMT_MISC is not set
 
 #
-# SH initrd options
+# Networking
+#
+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
+# 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_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE 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_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
 #
-# CONFIG_EMBEDDED_RAMDISK is not set
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
 
 #
 # Device Drivers
@@ -201,6 +342,11 @@
 # CONFIG_FW_LOADER is not set
 
 #
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
 # Memory Technology Devices (MTD)
 #
 # CONFIG_MTD is not set
@@ -217,7 +363,6 @@
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_CPQ_DA is not set
 # CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
@@ -226,21 +371,9 @@
 # CONFIG_BLK_DEV_LOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
 # CONFIG_BLK_DEV_SX8 is not set
-CONFIG_BLK_DEV_RAM=y
+# CONFIG_BLK_DEV_RAM is not set
 CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_BLK_DEV_RAM_SIZE=1024
-CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_LBD is not set
 # CONFIG_CDROM_PKTCDVD is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
 # CONFIG_ATA_OVER_ETH is not set
 
 #
@@ -251,6 +384,7 @@
 #
 # SCSI device support
 #
+# CONFIG_RAID_ATTRS is not set
 # CONFIG_SCSI is not set
 
 #
@@ -261,6 +395,7 @@
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -273,70 +408,8 @@
 # CONFIG_I2O is not set
 
 #
-# Networking support
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-# CONFIG_NETLINK_DEV is not set
-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_PNP=y
-CONFIG_IP_PNP_DHCP=y
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP 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_TUNNEL is not set
-CONFIG_IP_TCPDIAG=y
-# CONFIG_IP_TCPDIAG_IPV6 is not set
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE 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_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
+# Network device support
 #
-# CONFIG_NET_SCHED is not set
-# CONFIG_NET_CLS_ROUTE is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -349,6 +422,11 @@
 # CONFIG_ARCNET is not set
 
 #
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -356,6 +434,7 @@
 # CONFIG_STNIC 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_SMC91X is not set
 
@@ -364,6 +443,7 @@
 #
 # CONFIG_NET_TULIP is not set
 # CONFIG_HP100 is not set
+# CONFIG_NE2000 is not set
 CONFIG_NET_PCI=y
 # CONFIG_PCNET32 is not set
 # CONFIG_AMD8111_ETH is not set
@@ -398,13 +478,17 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 # CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
 
 #
 # Ethernet (10000 Mbit)
 #
+# CONFIG_CHELSIO_T1 is not set
 # CONFIG_IXGB is not set
 # CONFIG_S2IO is not set
 
@@ -428,6 +512,8 @@
 # CONFIG_SLIP is not set
 # CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
@@ -457,19 +543,6 @@
 # CONFIG_INPUT_EVBUG is not set
 
 #
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-CONFIG_SERIO=y
-# CONFIG_SERIO_I8042 is not set
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-
-#
 # Input Device Drivers
 #
 CONFIG_INPUT_KEYBOARD=y
@@ -478,17 +551,26 @@
 # CONFIG_KEYBOARD_LKKBD is not set
 # CONFIG_KEYBOARD_XTKBD is not set
 # CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_MAPLE is not set
 CONFIG_INPUT_MOUSE=y
 CONFIG_MOUSE_PS2=y
 # CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_MAPLE is not set
 # CONFIG_MOUSE_VSXXXAA is not set
 # CONFIG_INPUT_JOYSTICK 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 is not set
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -508,6 +590,7 @@
 CONFIG_SERIAL_SH_SCI_CONSOLE=y
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -547,6 +630,12 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -557,10 +646,21 @@
 # CONFIG_W1 is not set
 
 #
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
 # Misc devices
 #
 
 #
+# Multimedia Capabilities Port drivers
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -574,6 +674,10 @@
 # Graphics support
 #
 CONFIG_FB=y
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_MACMODES is not set
 # CONFIG_FB_MODE_HELPERS is not set
 # CONFIG_FB_TILEBLITTING is not set
 # CONFIG_FB_CIRRUS is not set
@@ -583,6 +687,8 @@
 # CONFIG_FB_IMSTT is not set
 CONFIG_FB_PVR2=y
 # CONFIG_FB_EPSON1355 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_OLD is not set
@@ -595,24 +701,27 @@
 # CONFIG_FB_KYRO is not set
 # CONFIG_FB_3DFX is not set
 # CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_CYBLA is not set
 # CONFIG_FB_TRIDENT is not set
 # CONFIG_FB_VIRTUAL is not set
 
 #
 # Console display driver support
 #
-# CONFIG_VGA_CONSOLE is not set
 CONFIG_DUMMY_CONSOLE=y
 CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
 CONFIG_FONTS=y
 CONFIG_FONT_8x8=y
 CONFIG_FONT_8x16=y
 # CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
 # CONFIG_FONT_PEARL_8x8 is not set
 # CONFIG_FONT_ACORN_8x8 is not set
 # CONFIG_FONT_MINI_4x6 is not set
 # CONFIG_FONT_SUN8x16 is not set
 # CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
 
 #
 # Logo configuration
@@ -634,12 +743,12 @@
 #
 # USB support
 #
-# CONFIG_USB is not set
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
 #
 
 #
@@ -658,6 +767,10 @@
 # CONFIG_INFINIBAND is not set
 
 #
+# SN Devices
+#
+
+#
 # File systems
 #
 # CONFIG_EXT2_FS is not set
@@ -665,17 +778,16 @@
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
-
-#
-# XFS support
-#
+# CONFIG_FS_POSIX_ACL is not set
 # CONFIG_XFS_FS is not set
 # CONFIG_MINIX_FS is not set
-CONFIG_ROMFS_FS=y
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
-CONFIG_DNOTIFY=y
+# CONFIG_DNOTIFY is not set
 # CONFIG_AUTOFS_FS is not set
 # CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
 
 #
 # CD-ROM/DVD Filesystems
@@ -696,15 +808,11 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_SYSFS=y
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
-# CONFIG_TMPFS_XATTR is not set
 CONFIG_HUGETLBFS=y
 CONFIG_HUGETLB_PAGE=y
 CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
 
 #
 # Miscellaneous filesystems
@@ -716,7 +824,7 @@
 # CONFIG_BEFS_FS is not set
 # CONFIG_BFS_FS is not set
 # CONFIG_EFS_FS is not set
-CONFIG_CRAMFS=y
+# CONFIG_CRAMFS is not set
 # CONFIG_VXFS_FS is not set
 # CONFIG_HPFS_FS is not set
 # CONFIG_QNX4FS_FS is not set
@@ -726,22 +834,14 @@
 #
 # Network File Systems
 #
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFS_FS is not set
 # CONFIG_NFSD is not set
-CONFIG_ROOT_NFS=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_SUNRPC=y
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
 # CONFIG_SMB_FS is not set
 # CONFIG_CIFS is not set
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
 # CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
 
 #
 # Partition Types
@@ -758,13 +858,14 @@
 # Profiling support
 #
 CONFIG_PROFILING=y
-CONFIG_OPROFILE=y
+# CONFIG_OPROFILE is not set
 
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
-CONFIG_DEBUG_PREEMPT=y
+CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_FRAME_POINTER is not set
 # CONFIG_SH_STANDARD_BIOS is not set
 # CONFIG_EARLY_SCIF_CONSOLE is not set
@@ -789,6 +890,6 @@
 # Library routines
 #
 # CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
 CONFIG_CRC32=y
 # CONFIG_LIBCRC32C is not set
-CONFIG_ZLIB_INFLATE=y
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/hp6xx_defconfig linux-2.6.17/arch/sh/configs/hp6xx_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/hp6xx_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/hp6xx_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,11 +1,12 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.15-sh
-# Wed Jan  4 15:32:56 2006
+# Linux kernel version: 2.6.17
+# Thu Jul  6 09:58:22 2006
 #
 CONFIG_SUPERH=y
-CONFIG_UID16=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_HWEIGHT=y
 CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
 CONFIG_GENERIC_CALIBRATE_DELAY=y
@@ -14,8 +15,6 @@
 # Code maturity level options
 #
 CONFIG_EXPERIMENTAL=y
-# CONFIG_CLEAN_COMPILE is not set
-CONFIG_BROKEN=y
 CONFIG_BROKEN_ON_SMP=y
 CONFIG_INIT_ENV_ARG_LIMIT=32
 
@@ -28,25 +27,26 @@
 # CONFIG_SYSVIPC is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 # CONFIG_SYSCTL is not set
-CONFIG_HOTPLUG=y
 # CONFIG_IKCONFIG is not set
+# CONFIG_RELAY is not set
 CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
 CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
 CONFIG_PRINTK=y
 CONFIG_BUG=y
+CONFIG_ELF_CORE=y
 CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
 CONFIG_SHMEM=y
-CONFIG_CC_ALIGN_FUNCTIONS=0
-CONFIG_CC_ALIGN_LABELS=0
-CONFIG_CC_ALIGN_LOOPS=0
-CONFIG_CC_ALIGN_JUMPS=0
+CONFIG_SLAB=y
 # CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
 
 #
 # Loadable module support
@@ -57,6 +57,8 @@
 # Block layer
 #
 # CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
 
 #
 # IO Schedulers
@@ -96,6 +98,7 @@
 # CONFIG_SH_SECUREEDGE5410 is not set
 # CONFIG_SH_HS7751RVOIP is not set
 # CONFIG_SH_RTS7751R2D is not set
+# CONFIG_SH_R7780RP is not set
 # CONFIG_SH_EDOSK7705 is not set
 # CONFIG_SH_SH4202_MICRODEV is not set
 # CONFIG_SH_LANDISK is not set
@@ -175,12 +178,14 @@
 CONFIG_SH_RTC=y
 # CONFIG_SH_DSP is not set
 CONFIG_SH_ADC=y
+CONFIG_CPU_HAS_INTEVT=y
+CONFIG_CPU_HAS_PINT_IRQ=y
+CONFIG_CPU_HAS_SR_RB=y
 
 #
 # Timer support
 #
 CONFIG_SH_TMU=y
-CONFIG_SH_PCLK_FREQ_BOOL=y
 CONFIG_SH_PCLK_FREQ=22110000
 
 #
@@ -194,7 +199,6 @@
 CONFIG_SH_DMA=y
 CONFIG_NR_ONCHIP_DMA_CHANNELS=4
 # CONFIG_NR_DMA_CHANNELS_BOOL is not set
-# CONFIG_DMA_PAGE_OPS is not set
 
 #
 # Companion Chips
@@ -257,6 +261,14 @@
 # CONFIG_BINFMT_MISC is not set
 
 #
+# Power management options (EXPERIMENTAL)
+#
+CONFIG_PM=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_APM=y
+
+#
 # Networking
 #
 # CONFIG_NET is not set
@@ -315,7 +327,7 @@
 # CONFIG_BLK_DEV_IDE_SATA is not set
 CONFIG_BLK_DEV_IDEDISK=y
 # CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_BLK_DEV_IDECS is not set
+CONFIG_BLK_DEV_IDECS=y
 # CONFIG_BLK_DEV_IDECD is not set
 # CONFIG_BLK_DEV_IDETAPE is not set
 # CONFIG_BLK_DEV_IDEFLOPPY is not set
@@ -356,19 +368,12 @@
 #
 # IEEE 1394 (FireWire) support
 #
-# CONFIG_IEEE1394 is not set
 
 #
 # I2O device support
 #
 
 #
-# Network device support
-#
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-
-#
 # ISDN subsystem
 #
 
@@ -390,17 +395,31 @@
 CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
 # CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_TSDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=240
+CONFIG_INPUT_TSDEV_SCREEN_Y=320
 # CONFIG_INPUT_EVDEV is not set
 # CONFIG_INPUT_EVBUG is not set
 
 #
 # Input Device Drivers
 #
-# CONFIG_INPUT_KEYBOARD is not set
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_HP620 is not set
+CONFIG_KEYBOARD_HP680=y
 # CONFIG_INPUT_MOUSE is not set
 # CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+CONFIG_TOUCHSCREEN_HP600=y
 # CONFIG_INPUT_MISC is not set
 
 #
@@ -471,6 +490,12 @@
 # CONFIG_I2C is not set
 
 #
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
 # Dallas's 1-wire bus
 #
 # CONFIG_W1 is not set
@@ -480,6 +505,7 @@
 #
 CONFIG_HWMON=y
 # CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_F71805F is not set
 # CONFIG_HWMON_DEBUG_CHIP is not set
 
 #
@@ -487,13 +513,10 @@
 #
 
 #
-# Multimedia Capabilities Port drivers
-#
-
-#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
 
 #
 # Digital Video Broadcasting Devices
@@ -507,6 +530,7 @@
 CONFIG_FB_CFB_COPYAREA=y
 CONFIG_FB_CFB_IMAGEBLIT=y
 # CONFIG_FB_MACMODES is not set
+CONFIG_FB_FIRMWARE_EDID=y
 # CONFIG_FB_MODE_HELPERS is not set
 # CONFIG_FB_TILEBLITTING is not set
 # CONFIG_FB_EPSON1355 is not set
@@ -553,7 +577,6 @@
 # Open Sound System
 #
 CONFIG_SOUND_PRIME=y
-# CONFIG_OBSOLETE_OSS_DRIVER is not set
 # CONFIG_SOUND_MSNDCLAS is not set
 # CONFIG_SOUND_MSNDPIN is not set
 CONFIG_SOUND_SH_DAC_AUDIO=y
@@ -564,6 +587,7 @@
 #
 # CONFIG_USB_ARCH_HAS_HCD is not set
 # CONFIG_USB_ARCH_HAS_OHCI is not set
+# CONFIG_USB_ARCH_HAS_EHCI is not set
 
 #
 # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
@@ -580,13 +604,30 @@
 # CONFIG_MMC is not set
 
 #
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
 # InfiniBand support
 #
-# CONFIG_INFINIBAND is not set
 
 #
-# SN Devices
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
 #
+# CONFIG_RTC_CLASS is not set
 
 #
 # File systems
@@ -595,7 +636,6 @@
 # CONFIG_EXT2_FS_XATTR is not set
 # CONFIG_EXT2_FS_XIP is not set
 # CONFIG_EXT3_FS is not set
-# CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
 # CONFIG_FS_POSIX_ACL is not set
@@ -635,7 +675,7 @@
 # CONFIG_HUGETLBFS is not set
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
-# CONFIG_RELAYFS_FS is not set
+# CONFIG_CONFIGFS_FS is not set
 
 #
 # Miscellaneous filesystems
@@ -713,9 +753,11 @@
 # Kernel hacking
 #
 # CONFIG_PRINTK_TIME is not set
+# CONFIG_MAGIC_SYSRQ is not set
 # CONFIG_DEBUG_KERNEL is not set
 CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_FRAME_POINTER is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_UNWIND_INFO is not set
 # CONFIG_SH_STANDARD_BIOS is not set
 # CONFIG_KGDB is not set
 
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/hs7751rvoip_defconfig linux-2.6.17/arch/sh/configs/hs7751rvoip_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/hs7751rvoip_defconfig	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/hs7751rvoip_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,884 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.15-sh
+# Wed Jan  4 17:02:02 2006
+#
+CONFIG_SUPERH=y
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_HOTPLUG=y
+CONFIG_KOBJECT_UEVENT=y
+# CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_EMBEDDED=y
+# CONFIG_KALLSYMS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_LBD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System type
+#
+# CONFIG_SH_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SOLUTION_ENGINE is not set
+# CONFIG_SH_7300_SOLUTION_ENGINE is not set
+# CONFIG_SH_73180_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SYSTEMH is not set
+# CONFIG_SH_STB1_HARP is not set
+# CONFIG_SH_STB1_OVERDRIVE is not set
+# CONFIG_SH_HP6XX is not set
+# CONFIG_SH_CQREEK is not set
+# CONFIG_SH_DMIDA is not set
+# CONFIG_SH_EC3104 is not set
+# CONFIG_SH_SATURN is not set
+# CONFIG_SH_DREAMCAST is not set
+# CONFIG_SH_CAT68701 is not set
+# CONFIG_SH_BIGSUR is not set
+# CONFIG_SH_SH2000 is not set
+# CONFIG_SH_ADX is not set
+# CONFIG_SH_MPC1211 is not set
+# CONFIG_SH_SH03 is not set
+# CONFIG_SH_SECUREEDGE5410 is not set
+CONFIG_SH_HS7751RVOIP=y
+# CONFIG_SH_RTS7751R2D is not set
+# CONFIG_SH_EDOSK7705 is not set
+# CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+# CONFIG_SH_TITAN is not set
+# CONFIG_SH_UNKNOWN is not set
+
+#
+# Processor selection
+#
+CONFIG_CPU_SH4=y
+
+#
+# SH-2 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7300 is not set
+# CONFIG_CPU_SUBTYPE_SH7705 is not set
+# CONFIG_CPU_SUBTYPE_SH7707 is not set
+# CONFIG_CPU_SUBTYPE_SH7708 is not set
+# CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
+CONFIG_CPU_SUBTYPE_SH7751=y
+CONFIG_CPU_SUBTYPE_SH7751R=y
+# CONFIG_CPU_SUBTYPE_SH7760 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
+# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
+CONFIG_MMU=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
+CONFIG_MEMORY_START=0x0c000000
+CONFIG_MEMORY_SIZE=0x04000000
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_SH_RTC=y
+CONFIG_SH_FPU=y
+# CONFIG_SH_STORE_QUEUES is not set
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+
+#
+# HS7751RVoIP options
+#
+CONFIG_HS7751RVOIP_CODEC=y
+# CONFIG_SH_PCLK_FREQ_BOOL is not set
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# DMA support
+#
+# CONFIG_SH_DMA is not set
+
+#
+# Companion Chips
+#
+# CONFIG_HD6446X_SERIES is not set
+
+#
+# Kernel features
+#
+# CONFIG_KEXEC is not set
+CONFIG_PREEMPT=y
+# CONFIG_SMP is not set
+
+#
+# Boot options
+#
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="mem=64M console=ttySC1,115200 root=/dev/hda1"
+
+#
+# Bus options
+#
+CONFIG_PCI=y
+CONFIG_SH_PCIDMA_NONCOHERENT=y
+CONFIG_PCI_AUTO=y
+CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
+CONFIG_PCI_LEGACY_PROC=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_FLAT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_MULTIPLE_TABLES is not set
+# CONFIG_IP_ROUTE_MULTIPATH is not set
+# CONFIG_IP_ROUTE_VERBOSE is not set
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE 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_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# 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 is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_RAM is not set
+CONFIG_BLK_DEV_RAM_COUNT=16
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=1
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+# CONFIG_BLK_DEV_IDEDMA_PCI is not set
+CONFIG_IDE_SH=y
+# CONFIG_IDE_ARM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+# CONFIG_IDEDMA_AUTO is not set
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_STNIC 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_SMC91X is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_NE2000 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_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+CONFIG_8139TOO=y
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+# CONFIG_8139TOO_8129 is not set
+# CONFIG_8139_OLD_RX_RESET is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# 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_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SH_SCI=y
+CONFIG_SERIAL_SH_SCI_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+# CONFIG_LEGACY_PTYS is not set
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# SN Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# 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_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+CONFIG_NFS_DIRECTIO=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+# CONFIG_NLS is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_FRAME_POINTER is not set
+# CONFIG_SH_STANDARD_BIOS is not set
+# CONFIG_EARLY_SCIF_CONSOLE is not set
+# CONFIG_KGDB is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/landisk_defconfig linux-2.6.17/arch/sh/configs/landisk_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/landisk_defconfig	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/landisk_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,1372 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.14-sh
+# Sun Dec 18 01:38:13 2005
+#
+CONFIG_SUPERH=y
+CONFIG_UID16=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_HOTPLUG=y
+CONFIG_KOBJECT_UEVENT=y
+# CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# System type
+#
+# CONFIG_SH_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SOLUTION_ENGINE is not set
+# CONFIG_SH_7300_SOLUTION_ENGINE is not set
+# CONFIG_SH_73180_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SYSTEMH is not set
+# CONFIG_SH_STB1_HARP is not set
+# CONFIG_SH_STB1_OVERDRIVE is not set
+# CONFIG_SH_HP6XX is not set
+# CONFIG_SH_CQREEK is not set
+# CONFIG_SH_DMIDA is not set
+# CONFIG_SH_EC3104 is not set
+# CONFIG_SH_SATURN is not set
+# CONFIG_SH_DREAMCAST is not set
+# CONFIG_SH_CAT68701 is not set
+# CONFIG_SH_BIGSUR is not set
+# CONFIG_SH_SH2000 is not set
+# CONFIG_SH_ADX is not set
+# CONFIG_SH_MPC1211 is not set
+# CONFIG_SH_SH03 is not set
+# CONFIG_SH_SECUREEDGE5410 is not set
+# CONFIG_SH_HS7751RVOIP is not set
+# CONFIG_SH_RTS7751R2D is not set
+# CONFIG_SH_EDOSK7705 is not set
+# CONFIG_SH_SH4202_MICRODEV is not set
+CONFIG_SH_LANDISK=y
+# CONFIG_SH_TITAN is not set
+# CONFIG_SH_UNKNOWN is not set
+
+#
+# Processor selection
+#
+CONFIG_CPU_SH4=y
+
+#
+# SH-2 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7300 is not set
+# CONFIG_CPU_SUBTYPE_SH7705 is not set
+# CONFIG_CPU_SUBTYPE_SH7707 is not set
+# CONFIG_CPU_SUBTYPE_SH7708 is not set
+# CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
+CONFIG_CPU_SUBTYPE_SH7751=y
+CONFIG_CPU_SUBTYPE_SH7751R=y
+# CONFIG_CPU_SUBTYPE_SH7760 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
+# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
+CONFIG_MMU=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
+CONFIG_MEMORY_START=0x0c000000
+CONFIG_MEMORY_SIZE=0x04000000
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_SH_FPU=y
+# CONFIG_SH_STORE_QUEUES is not set
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+CONFIG_SH_PCLK_FREQ_BOOL=y
+CONFIG_SH_PCLK_FREQ=33333333
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# DMA support
+#
+CONFIG_SH_DMA=y
+CONFIG_NR_ONCHIP_DMA_CHANNELS=4
+# CONFIG_NR_DMA_CHANNELS_BOOL is not set
+
+#
+# Companion Chips
+#
+# CONFIG_HD6446X_SERIES is not set
+CONFIG_HEARTBEAT=y
+
+#
+# Kernel features
+#
+CONFIG_KEXEC=y
+# CONFIG_PREEMPT is not set
+# CONFIG_SMP is not set
+
+#
+# Boot options
+#
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+# CONFIG_CMDLINE_BOOL is not set
+
+#
+# Bus options
+#
+CONFIG_ISA=y
+CONFIG_PCI=y
+CONFIG_SH_PCIDMA_NONCOHERENT=y
+CONFIG_PCI_AUTO=y
+CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
+CONFIG_PCI_LEGACY_PROC=y
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+CONFIG_CARDBUS=y
+
+#
+# PC-card bridges
+#
+CONFIG_YENTA=y
+# CONFIG_PD6729 is not set
+# CONFIG_I82092 is not set
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+CONFIG_PCMCIA_PROBE=y
+CONFIG_PCCARD_NONSTATIC=y
+
+#
+# PCI Hotplug Support
+#
+# CONFIG_HOTPLUG_PCI is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_FLAT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Networking
+#
+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
+# CONFIG_IP_MULTICAST is not set
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_MULTIPLE_TABLES is not set
+# CONFIG_IP_ROUTE_MULTIPATH is not set
+# CONFIG_IP_ROUTE_VERBOSE is not set
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP 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_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+# CONFIG_NETFILTER_NETLINK is not set
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_CT_ACCT=y
+CONFIG_IP_NF_CONNTRACK_MARK=y
+# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+# CONFIG_IP_NF_NETBIOS_NS is not set
+CONFIG_IP_NF_TFTP=m
+CONFIG_IP_NF_AMANDA=m
+# CONFIG_IP_NF_PPTP is not set
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_LIMIT=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_MAC=m
+CONFIG_IP_NF_MATCH_PKTTYPE=m
+CONFIG_IP_NF_MATCH_MARK=m
+CONFIG_IP_NF_MATCH_MULTIPORT=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH_ESP=m
+CONFIG_IP_NF_MATCH_LENGTH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_TCPMSS=m
+CONFIG_IP_NF_MATCH_HELPER=m
+CONFIG_IP_NF_MATCH_STATE=m
+CONFIG_IP_NF_MATCH_CONNTRACK=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_REALM=m
+CONFIG_IP_NF_MATCH_SCTP=m
+# CONFIG_IP_NF_MATCH_DCCP is not set
+CONFIG_IP_NF_MATCH_COMMENT=m
+CONFIG_IP_NF_MATCH_CONNMARK=m
+# CONFIG_IP_NF_MATCH_CONNBYTES is not set
+CONFIG_IP_NF_MATCH_HASHLIMIT=m
+# CONFIG_IP_NF_MATCH_STRING is not set
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+# CONFIG_IP_NF_TARGET_NFQUEUE is not set
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_AMANDA=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_MARK=m
+CONFIG_IP_NF_TARGET_CLASSIFY=m
+# CONFIG_IP_NF_TARGET_TTL is not set
+CONFIG_IP_NF_TARGET_CONNMARK=m
+# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_TARGET_NOTRACK=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+CONFIG_ATALK=m
+# CONFIG_DEV_APPLETALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+CONFIG_NET_CLS_ROUTE=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+# CONFIG_PNP is not set
+
+#
+# Block devices
+#
+# 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
+# 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=4096
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_LBD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=y
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=y
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+CONFIG_BLK_DEV_IDEDISK=y
+# CONFIG_IDEDISK_MULTI_MODE is not set
+# CONFIG_BLK_DEV_IDECS is not set
+CONFIG_BLK_DEV_IDECD=y
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+CONFIG_BLK_DEV_IDESCSI=y
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=y
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+CONFIG_BLK_DEV_OFFBOARD=y
+CONFIG_BLK_DEV_GENERIC=y
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+CONFIG_IDEDMA_ONLYDISK=y
+CONFIG_BLK_DEV_AEC62XX=y
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5520 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+# CONFIG_BLK_DEV_PIIX 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_IDE_SH=y
+# CONFIG_IDE_ARM is not set
+# CONFIG_IDE_CHIPSETS is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+CONFIG_SCSI_MULTI_LUN=y
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AHA152X is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_SCSI_IN2000 is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_DTC3280 is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_GENERIC_NCR5380 is not set
+# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_NCR53C406A is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_PAS16 is not set
+# CONFIG_SCSI_PSI240I is not set
+# CONFIG_SCSI_QLOGIC_FAS is not set
+# CONFIG_SCSI_QLOGIC_FC is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+CONFIG_SCSI_QLA2XXX=y
+# CONFIG_SCSI_QLA21XX is not set
+# CONFIG_SCSI_QLA22XX is not set
+# CONFIG_SCSI_QLA2300 is not set
+# CONFIG_SCSI_QLA2322 is not set
+# CONFIG_SCSI_QLA6312 is not set
+# CONFIG_SCSI_QLA24XX is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_SYM53C416 is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_T128 is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# PCMCIA SCSI adapter support
+#
+# CONFIG_PCMCIA_AHA152X is not set
+# CONFIG_PCMCIA_FDOMAIN is not set
+# CONFIG_PCMCIA_NINJA_SCSI is not set
+# CONFIG_PCMCIA_QLOGIC is not set
+# CONFIG_PCMCIA_SYM53C500 is not set
+
+#
+# Old CD-ROM drivers (not SCSI, not IDE)
+#
+# CONFIG_CD_NO_IDESCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+CONFIG_MD=y
+CONFIG_BLK_DEV_MD=m
+CONFIG_MD_LINEAR=m
+CONFIG_MD_RAID0=m
+CONFIG_MD_RAID1=m
+# CONFIG_MD_RAID10 is not set
+# CONFIG_MD_RAID5 is not set
+# CONFIG_MD_RAID6 is not set
+# CONFIG_MD_MULTIPATH is not set
+# CONFIG_MD_FAULTY is not set
+# CONFIG_BLK_DEV_DM is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_STNIC 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_NET_VENDOR_RACAL is not set
+
+#
+# Tulip family network device support
+#
+# 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_NE2000 is not set
+CONFIG_NET_PCI=y
+# CONFIG_PCNET32 is not set
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_AC3200 is not set
+# CONFIG_APRICOT is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_CS89x0 is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+CONFIG_8139CP=y
+# CONFIG_8139TOO is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# PCMCIA network device support
+#
+# CONFIG_NET_PCMCIA is not set
+
+#
+# Wan interfaces
+#
+# 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_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SH_SCI=y
+CONFIG_SERIAL_SH_SCI_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_RTC is not set
+CONFIG_RS5C313_RTC=y
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_DRM is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+CONFIG_VIDEO_DEV=m
+
+#
+# Video For Linux
+#
+
+#
+# Video Adapters
+#
+# CONFIG_VIDEO_PMS is not set
+# CONFIG_VIDEO_CPIA is not set
+# CONFIG_VIDEO_STRADIS is not set
+# CONFIG_VIDEO_MXB is not set
+# CONFIG_VIDEO_DPC is not set
+# CONFIG_VIDEO_HEXIUM_ORION is not set
+# CONFIG_VIDEO_HEXIUM_GEMINI is not set
+
+#
+# Radio Adapters
+#
+# CONFIG_RADIO_CADET is not set
+# CONFIG_RADIO_RTRACK is not set
+# CONFIG_RADIO_RTRACK2 is not set
+# CONFIG_RADIO_AZTECH is not set
+# CONFIG_RADIO_GEMTEK is not set
+# CONFIG_RADIO_GEMTEK_PCI is not set
+# CONFIG_RADIO_MAXIRADIO is not set
+# CONFIG_RADIO_MAESTRO is not set
+# CONFIG_RADIO_SF16FMI is not set
+# CONFIG_RADIO_SF16FMR2 is not set
+# CONFIG_RADIO_TERRATEC is not set
+# CONFIG_RADIO_TRUST is not set
+# CONFIG_RADIO_TYPHOON is not set
+# CONFIG_RADIO_ZOLTRIX is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Console display driver support
+#
+# CONFIG_MDA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FONT_8x16=y
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+CONFIG_SOUND_PRIME=m
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_CMPCI is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_CS4281 is not set
+# CONFIG_SOUND_ES1370 is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ESSSOLO1 is not set
+# CONFIG_SOUND_MAESTRO is not set
+# CONFIG_SOUND_MAESTRO3 is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_SONICVIBES is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+# CONFIG_SOUND_ALI5455 is not set
+# CONFIG_SOUND_FORTE is not set
+# CONFIG_SOUND_RME96XX is not set
+# CONFIG_SOUND_AD1980 is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_OBSOLETE_OSS_USB_DRIVER=y
+CONFIG_USB_AUDIO=m
+# CONFIG_USB_BLUETOOTH_TTY is not set
+CONFIG_USB_MIDI=m
+# CONFIG_USB_ACM is not set
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=m
+# CONFIG_USB_STORAGE_DEBUG is not set
+CONFIG_USB_STORAGE_DATAFAB=y
+CONFIG_USB_STORAGE_FREECOM=y
+CONFIG_USB_STORAGE_ISD200=y
+CONFIG_USB_STORAGE_DPCM=y
+# CONFIG_USB_STORAGE_USBAT is not set
+CONFIG_USB_STORAGE_SDDR09=y
+CONFIG_USB_STORAGE_SDDR55=y
+CONFIG_USB_STORAGE_JUMPSHOT=y
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=m
+CONFIG_USB_HIDINPUT=y
+# CONFIG_HID_FF is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_MTOUCH is not set
+# CONFIG_USB_ITMTOUCH is not set
+# CONFIG_USB_EGALAX is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Multimedia devices
+#
+CONFIG_USB_DABUSB=m
+CONFIG_USB_VICAM=m
+CONFIG_USB_DSBR=m
+CONFIG_USB_IBMCAM=m
+CONFIG_USB_KONICAWC=m
+CONFIG_USB_OV511=m
+CONFIG_USB_SE401=m
+CONFIG_USB_SN9C102=m
+CONFIG_USB_STV680=m
+CONFIG_USB_PWC=m
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+CONFIG_USB_PEGASUS=m
+CONFIG_USB_RTL8150=m
+# CONFIG_USB_USBNET is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+# CONFIG_USB_SERIAL_GENERIC is not set
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+CONFIG_USB_SERIAL_FTDI_SIO=m
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OPTION is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+
+#
+# USB Miscellaneous drivers
+#
+CONFIG_USB_EMI62=m
+CONFIG_USB_EMI26=m
+# CONFIG_USB_AUERSWALD 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_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+CONFIG_USB_SISUSBVGA=m
+CONFIG_USB_SISUSBVGA_CON=y
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# SN Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+CONFIG_REISERFS_FS=y
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_REISERFS_FS_XATTR is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_MINIX_FS is not set
+CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+# CONFIG_JOLIET is not set
+# CONFIG_ZISOFS 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="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+# CONFIG_PROC_KCORE is not set
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+CONFIG_UFS_FS=m
+CONFIG_UFS_FS_WRITE=y
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=m
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=m
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_LOCKD=m
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=m
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=m
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+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=y
+# 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
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_FRAME_POINTER is not set
+CONFIG_SH_STANDARD_BIOS=y
+# CONFIG_EARLY_SCIF_CONSOLE is not set
+# CONFIG_EARLY_PRINTK is not set
+# CONFIG_KGDB is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/microdev_defconfig linux-2.6.17/arch/sh/configs/microdev_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/microdev_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/microdev_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,9 +1,10 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.16-rc1
-# Fri Jan 27 19:43:20 2006
+# Linux kernel version: 2.6.15-sh
+# Wed Jan  4 18:41:51 2006
 #
 CONFIG_SUPERH=y
+CONFIG_UID16=y
 CONFIG_RWSEM_GENERIC_SPINLOCK=y
 CONFIG_GENERIC_HARDIRQS=y
 CONFIG_GENERIC_IRQ_PROBE=y
@@ -30,17 +31,16 @@
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
+CONFIG_HOTPLUG=y
+CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
 CONFIG_INITRAMFS_SOURCE=""
-CONFIG_UID16=y
 # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_EMBEDDED=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_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
@@ -49,10 +49,8 @@
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
-CONFIG_SLAB=y
 # CONFIG_TINY_SHMEM is not set
 CONFIG_BASE_SMALL=0
-# CONFIG_SLOB is not set
 
 #
 # Loadable module support
@@ -102,7 +100,6 @@
 # CONFIG_SH_SECUREEDGE5410 is not set
 # CONFIG_SH_HS7751RVOIP is not set
 # CONFIG_SH_RTS7751R2D is not set
-# CONFIG_SH_R7780RP is not set
 # CONFIG_SH_EDOSK7705 is not set
 CONFIG_SH_SH4202_MICRODEV=y
 # CONFIG_SH_LANDISK is not set
@@ -157,6 +154,8 @@
 # Memory management options
 #
 CONFIG_MMU=y
+CONFIG_HUGETLB_PAGE_SIZE_64K=y
+# CONFIG_HUGETLB_PAGE_SIZE_1MB is not set
 CONFIG_SELECT_MEMORY_MODEL=y
 CONFIG_FLATMEM_MANUAL=y
 # CONFIG_DISCONTIGMEM_MANUAL is not set
@@ -170,7 +169,7 @@
 # Cache configuration
 #
 # CONFIG_SH_DIRECT_MAPPED is not set
-# CONFIG_SH_WRITETHROUGH is not set
+CONFIG_SH_WRITETHROUGH=y
 # CONFIG_SH_OCRAM is not set
 CONFIG_MEMORY_START=0x08000000
 CONFIG_MEMORY_SIZE=0x04000000
@@ -182,13 +181,12 @@
 CONFIG_SH_RTC=y
 CONFIG_SH_FPU=y
 # CONFIG_SH_STORE_QUEUES is not set
-CONFIG_CPU_HAS_INTEVT=y
-CONFIG_CPU_HAS_SR_RB=y
 
 #
 # Timer support
 #
 CONFIG_SH_TMU=y
+CONFIG_SH_PCLK_FREQ_BOOL=y
 CONFIG_SH_PCLK_FREQ=66000000
 
 #
@@ -223,12 +221,12 @@
 CONFIG_BOOT_LINK_OFFSET=0x00800000
 # CONFIG_UBC_WAKEUP is not set
 CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="console=ttySC0,115200"
+CONFIG_CMDLINE="console=ttySC0,115200 root=/dev/hda1"
 
 #
 # Bus options
 #
-# CONFIG_SUPERHYWAY is not set
+CONFIG_SUPERHYWAY=y
 # CONFIG_PCI is not set
 
 #
@@ -263,7 +261,7 @@
 # CONFIG_IP_ADVANCED_ROUTER is not set
 CONFIG_IP_FIB_HASH=y
 CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_DHCP is not set
 # CONFIG_IP_PNP_BOOTP is not set
 # CONFIG_IP_PNP_RARP is not set
 # CONFIG_NET_IPIP is not set
@@ -290,11 +288,6 @@
 # SCTP Configuration (EXPERIMENTAL)
 #
 # CONFIG_IP_SCTP is not set
-
-#
-# TIPC Configuration (EXPERIMENTAL)
-#
-# CONFIG_TIPC is not set
 # CONFIG_ATM is not set
 # CONFIG_BRIDGE is not set
 # CONFIG_VLAN_8021Q is not set
@@ -387,6 +380,7 @@
 # IDE chipset support/bugfixes
 #
 CONFIG_IDE_GENERIC=y
+CONFIG_IDE_SH=y
 # CONFIG_IDE_ARM is not set
 # CONFIG_BLK_DEV_IDEDMA is not set
 # CONFIG_IDEDMA_AUTO is not set
@@ -437,6 +431,7 @@
 CONFIG_MII=y
 # CONFIG_STNIC is not set
 CONFIG_SMC91X=y
+# CONFIG_NE2000 is not set
 
 #
 # Ethernet (1000 Mbit)
@@ -539,12 +534,6 @@
 # CONFIG_I2C is not set
 
 #
-# SPI support
-#
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-
-#
 # Dallas's 1-wire bus
 #
 # CONFIG_W1 is not set
@@ -613,10 +602,6 @@
 #
 
 #
-# EDAC - error detection and reporting (RAS)
-#
-
-#
 # File systems
 #
 CONFIG_EXT2_FS=y
@@ -633,7 +618,6 @@
 # CONFIG_JFS_FS is not set
 # CONFIG_FS_POSIX_ACL is not set
 # CONFIG_XFS_FS is not set
-# CONFIG_OCFS2_FS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
 CONFIG_INOTIFY=y
@@ -666,11 +650,10 @@
 CONFIG_PROC_KCORE=y
 CONFIG_SYSFS=y
 CONFIG_TMPFS=y
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
+CONFIG_HUGETLBFS=y
+CONFIG_HUGETLB_PAGE=y
 CONFIG_RAMFS=y
 # CONFIG_RELAYFS_FS is not set
-# CONFIG_CONFIGFS_FS is not set
 
 #
 # Miscellaneous filesystems
@@ -772,10 +755,9 @@
 # Kernel hacking
 #
 # CONFIG_PRINTK_TIME is not set
-# CONFIG_MAGIC_SYSRQ is not set
 # CONFIG_DEBUG_KERNEL is not set
 CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_FRAME_POINTER is not set
+CONFIG_FRAME_POINTER=y
 # CONFIG_SH_STANDARD_BIOS is not set
 # CONFIG_EARLY_SCIF_CONSOLE is not set
 # CONFIG_KGDB is not set
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/r7780rp_defconfig linux-2.6.17/arch/sh/configs/r7780rp_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/r7780rp_defconfig	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/r7780rp_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,1140 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.17
+# Wed Jul  5 17:40:33 2006
+#
+CONFIG_SUPERH=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_EMBEDDED=y
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+# CONFIG_FUTEX is not set
+# CONFIG_EPOLL is not set
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
+# System type
+#
+# CONFIG_SH_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SOLUTION_ENGINE is not set
+# CONFIG_SH_7300_SOLUTION_ENGINE is not set
+# CONFIG_SH_73180_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SYSTEMH is not set
+# CONFIG_SH_STB1_HARP is not set
+# CONFIG_SH_STB1_OVERDRIVE is not set
+# CONFIG_SH_HP6XX is not set
+# CONFIG_SH_CQREEK is not set
+# CONFIG_SH_DMIDA is not set
+# CONFIG_SH_EC3104 is not set
+# CONFIG_SH_SATURN is not set
+# CONFIG_SH_DREAMCAST is not set
+# CONFIG_SH_CAT68701 is not set
+# CONFIG_SH_BIGSUR is not set
+# CONFIG_SH_SH2000 is not set
+# CONFIG_SH_ADX is not set
+# CONFIG_SH_MPC1211 is not set
+# CONFIG_SH_SH03 is not set
+# CONFIG_SH_SECUREEDGE5410 is not set
+# CONFIG_SH_HS7751RVOIP is not set
+# CONFIG_SH_RTS7751R2D is not set
+CONFIG_SH_R7780RP=y
+# CONFIG_SH_EDOSK7705 is not set
+# CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+# CONFIG_SH_TITAN is not set
+# CONFIG_SH_UNKNOWN is not set
+
+#
+# Processor selection
+#
+CONFIG_CPU_SH4=y
+CONFIG_CPU_SH4A=y
+
+#
+# SH-2 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7300 is not set
+# CONFIG_CPU_SUBTYPE_SH7705 is not set
+# CONFIG_CPU_SUBTYPE_SH7707 is not set
+# CONFIG_CPU_SUBTYPE_SH7708 is not set
+# CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
+# CONFIG_CPU_SUBTYPE_SH7751 is not set
+# CONFIG_CPU_SUBTYPE_SH7751R is not set
+# CONFIG_CPU_SUBTYPE_SH7760 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
+# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+CONFIG_CPU_SUBTYPE_SH7780=y
+
+#
+# Memory management options
+#
+CONFIG_MMU=y
+CONFIG_32BIT=y
+CONFIG_HUGETLB_PAGE_SIZE_64K=y
+# CONFIG_HUGETLB_PAGE_SIZE_1MB is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
+CONFIG_MEMORY_START=0x08000000
+CONFIG_MEMORY_SIZE=0x08000000
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_SH_FPU=y
+CONFIG_SH_STORE_QUEUES=y
+CONFIG_CPU_HAS_INTEVT=y
+CONFIG_CPU_HAS_INTC2_IRQ=y
+CONFIG_CPU_HAS_SR_RB=y
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+CONFIG_SH_PCLK_FREQ=32000000
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# DMA support
+#
+CONFIG_SH_DMA=y
+CONFIG_NR_ONCHIP_DMA_CHANNELS=6
+# CONFIG_NR_DMA_CHANNELS_BOOL is not set
+
+#
+# Companion Chips
+#
+# CONFIG_HD6446X_SERIES is not set
+
+#
+# Kernel features
+#
+# CONFIG_KEXEC is not set
+CONFIG_PREEMPT=y
+# CONFIG_SMP is not set
+
+#
+# Boot options
+#
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="mem=128M console=ttySC0,115200 root=/dev/hda1"
+
+#
+# Bus options
+#
+CONFIG_PCI=y
+CONFIG_SH_PCIDMA_NONCOHERENT=y
+CONFIG_PCI_AUTO=y
+CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
+# CONFIG_PCI_DEBUG is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+CONFIG_HOTPLUG_PCI=y
+# CONFIG_HOTPLUG_PCI_FAKE is not set
+# CONFIG_HOTPLUG_PCI_CPCI is not set
+# CONFIG_HOTPLUG_PCI_SHPC is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_FLAT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options (EXPERIMENTAL)
+#
+# CONFIG_PM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_MULTIPLE_TABLES is not set
+# CONFIG_IP_ROUTE_MULTIPATH is not set
+# CONFIG_IP_ROUTE_VERBOSE is not set
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP 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_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=m
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+CONFIG_LLC=m
+# 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_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+# CONFIG_MTD is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# 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 is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+# CONFIG_BLK_DEV_INITRD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+CONFIG_IDE=m
+CONFIG_IDE_MAX_HWIFS=4
+CONFIG_BLK_DEV_IDE=m
+
+#
+# Please see Documentation/ide.txt for help/info on IDE drives
+#
+CONFIG_BLK_DEV_IDE_SATA=y
+CONFIG_BLK_DEV_IDEDISK=m
+CONFIG_IDEDISK_MULTI_MODE=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_BLK_DEV_IDEFLOPPY is not set
+CONFIG_BLK_DEV_IDESCSI=m
+# CONFIG_IDE_TASK_IOCTL is not set
+
+#
+# IDE chipset support/bugfixes
+#
+CONFIG_IDE_GENERIC=m
+CONFIG_BLK_DEV_IDEPCI=y
+CONFIG_IDEPCI_SHARE_IRQ=y
+# CONFIG_BLK_DEV_OFFBOARD is not set
+CONFIG_BLK_DEV_GENERIC=m
+# CONFIG_BLK_DEV_OPTI621 is not set
+CONFIG_BLK_DEV_IDEDMA_PCI=y
+# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
+CONFIG_IDEDMA_PCI_AUTO=y
+# CONFIG_IDEDMA_ONLYDISK is not set
+CONFIG_BLK_DEV_AEC62XX=m
+# CONFIG_BLK_DEV_ALI15X3 is not set
+# CONFIG_BLK_DEV_AMD74XX is not set
+# CONFIG_BLK_DEV_CMD64X is not set
+# CONFIG_BLK_DEV_TRIFLEX is not set
+# CONFIG_BLK_DEV_CY82C693 is not set
+# CONFIG_BLK_DEV_CS5520 is not set
+# CONFIG_BLK_DEV_CS5530 is not set
+# CONFIG_BLK_DEV_HPT34X is not set
+# CONFIG_BLK_DEV_HPT366 is not set
+# CONFIG_BLK_DEV_SC1200 is not set
+# CONFIG_BLK_DEV_PIIX 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=m
+# CONFIG_BLK_DEV_SVWKS is not set
+CONFIG_BLK_DEV_SIIMAGE=m
+# CONFIG_BLK_DEV_SLC90E66 is not set
+# CONFIG_BLK_DEV_TRM290 is not set
+# CONFIG_BLK_DEV_VIA82CXXX is not set
+CONFIG_IDE_SH=y
+# CONFIG_IDE_ARM is not set
+CONFIG_BLK_DEV_IDEDMA=y
+# CONFIG_IDEDMA_IVB is not set
+CONFIG_IDEDMA_AUTO=y
+# CONFIG_BLK_DEV_HD is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=m
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# 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=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_STNIC 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_SMC91X is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+CONFIG_NE2000=y
+CONFIG_NET_PCI=y
+CONFIG_PCNET32=m
+# CONFIG_AMD8111_ETH is not set
+# CONFIG_ADAPTEC_STARFIRE is not set
+# CONFIG_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+CONFIG_8139CP=m
+CONFIG_8139TOO=m
+# CONFIG_8139TOO_PIO is not set
+# CONFIG_8139TOO_TUNE_TWISTER is not set
+CONFIG_8139TOO_8129=y
+# CONFIG_8139_OLD_RX_RESET is not set
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+CONFIG_VIA_RHINE=m
+CONFIG_VIA_RHINE_MMIO=y
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+CONFIG_E1000=m
+# CONFIG_E1000_NAPI is not set
+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+CONFIG_R8169=y
+# CONFIG_R8169_NAPI is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+# CONFIG_NET_WIRELESS_RTNETLINK is not set
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+CONFIG_HERMES=m
+# CONFIG_PLX_HERMES is not set
+# CONFIG_TMD_HERMES is not set
+# CONFIG_NORTEL_HERMES is not set
+# CONFIG_PCI_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+CONFIG_PRISM54=m
+# CONFIG_HOSTAP is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# 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_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV 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_SUNKBD is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK 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 is not set
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_PCIPS2 is not set
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SH_SCI=y
+CONFIG_SERIAL_SH_SCI_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=m
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+CONFIG_SOUND_PRIME=m
+# CONFIG_SOUND_BT878 is not set
+# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_SOUND_FUSION is not set
+# CONFIG_SOUND_ES1371 is not set
+# CONFIG_SOUND_ICH is not set
+# CONFIG_SOUND_TRIDENT is not set
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+# CONFIG_SOUND_VIA82CXXX is not set
+
+#
+# USB support
+#
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+# CONFIG_USB is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+CONFIG_FS_POSIX_ACL=y
+# CONFIG_XFS_FS is not set
+# CONFIG_OCFS2_FS is not set
+CONFIG_MINIX_FS=y
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS 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="iso8859-1"
+CONFIG_NTFS_FS=y
+# CONFIG_NTFS_DEBUG is not set
+CONFIG_NTFS_RW=y
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+# CONFIG_TMPFS is not set
+CONFIG_HUGETLBFS=y
+CONFIG_HUGETLB_PAGE=y
+CONFIG_RAMFS=y
+# CONFIG_CONFIGFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=y
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+CONFIG_NFSD_V4=y
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+# CONFIG_PARTITION_ADVANCED is not set
+CONFIG_MSDOS_PARTITION=y
+
+#
+# Native Language Support
+#
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+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=y
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+# CONFIG_NLS_UTF8 is not set
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_MAGIC_SYSRQ is not set
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=14
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+CONFIG_DEBUG_PREEMPT=y
+# CONFIG_DEBUG_MUTEXES is not set
+CONFIG_DEBUG_SPINLOCK=y
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_INFO is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_DEBUG_VM is not set
+CONFIG_FRAME_POINTER=y
+CONFIG_FORCED_INLINING=y
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_SH_STANDARD_BIOS is not set
+# CONFIG_EARLY_SCIF_CONSOLE is not set
+# CONFIG_KGDB is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_DEFLATE is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/rts7751r2d_defconfig linux-2.6.17/arch/sh/configs/rts7751r2d_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/rts7751r2d_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/rts7751r2d_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-sh
-# Wed Mar  2 15:09:42 2005
+# Linux kernel version: 2.6.15-sh
+# Wed Jan  4 19:00:01 2006
 #
 CONFIG_SUPERH=y
 CONFIG_UID16=y
@@ -16,33 +16,39 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
 #
 CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
 # CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -55,6 +61,24 @@
 # CONFIG_KMOD is not set
 
 #
+# Block layer
+#
+# CONFIG_LBD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
 # System type
 #
 # CONFIG_SH_SOLUTION_ENGINE is not set
@@ -64,9 +88,7 @@
 # CONFIG_SH_7751_SYSTEMH is not set
 # CONFIG_SH_STB1_HARP is not set
 # CONFIG_SH_STB1_OVERDRIVE is not set
-# CONFIG_SH_HP620 is not set
-# CONFIG_SH_HP680 is not set
-# CONFIG_SH_HP690 is not set
+# CONFIG_SH_HP6XX is not set
 # CONFIG_SH_CQREEK is not set
 # CONFIG_SH_DMIDA is not set
 # CONFIG_SH_EC3104 is not set
@@ -83,44 +105,94 @@
 CONFIG_SH_RTS7751R2D=y
 # CONFIG_SH_EDOSK7705 is not set
 # CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+# CONFIG_SH_TITAN is not set
 # CONFIG_SH_UNKNOWN is not set
-# CONFIG_CPU_SH2 is not set
-# CONFIG_CPU_SH3 is not set
+
+#
+# Processor selection
+#
 CONFIG_CPU_SH4=y
+
+#
+# SH-2 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7300 is not set
 # CONFIG_CPU_SUBTYPE_SH7705 is not set
 # CONFIG_CPU_SUBTYPE_SH7707 is not set
 # CONFIG_CPU_SUBTYPE_SH7708 is not set
 # CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
 CONFIG_CPU_SUBTYPE_SH7751=y
+CONFIG_CPU_SUBTYPE_SH7751R=y
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
-# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_ST40STB1 is not set
 # CONFIG_CPU_SUBTYPE_ST40GX1 is not set
-# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
 CONFIG_MMU=y
-CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="mem=64M console=ttySC0,115200 root=/dev/hda1"
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
 CONFIG_MEMORY_START=0x0c000000
 CONFIG_MEMORY_SIZE=0x04000000
-CONFIG_MEMORY_SET=y
-# CONFIG_MEMORY_OVERRIDE is not set
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_SH_RTC=y
 CONFIG_SH_FPU=y
-CONFIG_ZERO_PAGE_OFFSET=0x00010000
-CONFIG_BOOT_LINK_OFFSET=0x00800000
-CONFIG_CPU_LITTLE_ENDIAN=y
-# CONFIG_PREEMPT is not set
-# CONFIG_UBC_WAKEUP is not set
-# CONFIG_SH_WRITETHROUGH is not set
-# CONFIG_SH_OCRAM is not set
 # CONFIG_SH_STORE_QUEUES is not set
-# CONFIG_SMP is not set
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+
+#
+# RTS7751R2D options
+#
 CONFIG_RTS7751R2D_REV11=y
-CONFIG_SH_PCLK_CALC=y
-CONFIG_SH_PCLK_FREQ=60000000
+# CONFIG_SH_PCLK_FREQ_BOOL is not set
 
 #
 # CPU Frequency scaling
@@ -140,17 +212,31 @@
 CONFIG_VOYAGERGX=y
 # CONFIG_HD6446X_SERIES is not set
 CONFIG_HEARTBEAT=y
-CONFIG_RTC_9701JE=y
 
 #
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+# Kernel features
+#
+# CONFIG_KEXEC is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_SMP is not set
+
+#
+# Boot options
+#
+CONFIG_ZERO_PAGE_OFFSET=0x00010000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="mem=64M console=ttySC0,115200 root=/dev/hda1"
+
+#
+# Bus options
 #
 CONFIG_PCI=y
 CONFIG_SH_PCIDMA_NONCOHERENT=y
 CONFIG_PCI_AUTO=y
 CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
 # CONFIG_PCI_LEGACY_PROC is not set
-CONFIG_PCI_NAMES=y
 
 #
 # PCCARD (PCMCIA/CardBus) support
@@ -158,10 +244,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 CONFIG_HOTPLUG_PCI=y
@@ -177,6 +259,74 @@
 # CONFIG_BINFMT_MISC is not set
 
 #
+# Networking
+#
+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
+# 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_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE 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_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
 # Device Drivers
 #
 
@@ -188,6 +338,11 @@
 # CONFIG_FW_LOADER is not set
 
 #
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
 # Memory Technology Devices (MTD)
 #
 # CONFIG_MTD is not set
@@ -204,7 +359,6 @@
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_CPQ_DA is not set
 # CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
@@ -217,17 +371,7 @@
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=4096
 # CONFIG_BLK_DEV_INITRD is not set
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_LBD is not set
 # CONFIG_CDROM_PKTCDVD is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
 # CONFIG_ATA_OVER_ETH is not set
 
 #
@@ -262,6 +406,7 @@
 #
 # SCSI device support
 #
+# CONFIG_RAID_ATTRS is not set
 # CONFIG_SCSI is not set
 
 #
@@ -272,6 +417,7 @@
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -284,67 +430,8 @@
 # CONFIG_I2O is not set
 
 #
-# Networking support
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-# CONFIG_NETLINK_DEV is not set
-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_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_TUNNEL is not set
-CONFIG_IP_TCPDIAG=y
-# CONFIG_IP_TCPDIAG_IPV6 is not set
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE 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_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
+# Network device support
 #
-# CONFIG_NET_SCHED is not set
-# CONFIG_NET_CLS_ROUTE is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -357,6 +444,11 @@
 # CONFIG_ARCNET is not set
 
 #
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -364,6 +456,7 @@
 # CONFIG_STNIC 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_SMC91X is not set
 
@@ -372,6 +465,7 @@
 #
 # CONFIG_NET_TULIP is not set
 # CONFIG_HP100 is not set
+# CONFIG_NE2000 is not set
 CONFIG_NET_PCI=y
 # CONFIG_PCNET32 is not set
 # CONFIG_AMD8111_ETH is not set
@@ -406,13 +500,17 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 # CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
 
 #
 # Ethernet (10000 Mbit)
 #
+# CONFIG_CHELSIO_T1 is not set
 # CONFIG_IXGB is not set
 # CONFIG_S2IO is not set
 
@@ -437,6 +535,7 @@
 CONFIG_HERMES=m
 # CONFIG_PLX_HERMES is not set
 # CONFIG_TMD_HERMES is not set
+# CONFIG_NORTEL_HERMES is not set
 # CONFIG_PCI_HERMES is not set
 # CONFIG_ATMEL is not set
 
@@ -444,6 +543,7 @@
 # Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
 #
 # CONFIG_PRISM54 is not set
+# CONFIG_HOSTAP is not set
 CONFIG_NET_WIRELESS=y
 
 #
@@ -456,6 +556,8 @@
 # CONFIG_SLIP is not set
 # CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
@@ -473,20 +575,10 @@
 # CONFIG_INPUT is not set
 
 #
-# Userland interfaces
-#
-
-#
-# Input I/O drivers
+# Hardware I/O ports
 #
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 # CONFIG_SERIO is not set
-# CONFIG_SERIO_I8042 is not set
-
-#
-# Input Device Drivers
-#
+# CONFIG_GAMEPORT is not set
 
 #
 # Character devices
@@ -503,6 +595,7 @@
 # Non-8250 serial port support
 #
 # CONFIG_SERIAL_SH_SCI is not set
+# CONFIG_SERIAL_JSM is not set
 # CONFIG_UNIX98_PTYS is not set
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -517,6 +610,7 @@
 #
 # CONFIG_WATCHDOG is not set
 # CONFIG_RTC is not set
+CONFIG_RTC_9701JE=y
 # CONFIG_GEN_RTC is not set
 # CONFIG_DTLK is not set
 # CONFIG_R3964 is not set
@@ -529,6 +623,12 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -539,10 +639,21 @@
 # CONFIG_W1 is not set
 
 #
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
 # Misc devices
 #
 
 #
+# Multimedia Capabilities Port drivers
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -566,6 +677,8 @@
 # Advanced Linux Sound Architecture
 #
 CONFIG_SND=m
+CONFIG_SND_AC97_CODEC=m
+CONFIG_SND_AC97_BUS=m
 CONFIG_SND_TIMER=m
 CONFIG_SND_PCM=m
 CONFIG_SND_HWDEP=m
@@ -589,7 +702,6 @@
 #
 # PCI devices
 #
-CONFIG_SND_AC97_CODEC=m
 # CONFIG_SND_ALI5451 is not set
 # CONFIG_SND_ATIIXP is not set
 # CONFIG_SND_ATIIXP_MODEM is not set
@@ -610,9 +722,10 @@
 # CONFIG_SND_RME96 is not set
 # CONFIG_SND_RME9652 is not set
 # CONFIG_SND_HDSP is not set
+# CONFIG_SND_HDSPM is not set
 # CONFIG_SND_TRIDENT is not set
 CONFIG_SND_YMFPCI=m
-# CONFIG_SND_ALS4000 is not set
+# CONFIG_SND_AD1889 is not set
 # CONFIG_SND_CMIPCI is not set
 # CONFIG_SND_ENS1370 is not set
 # CONFIG_SND_ENS1371 is not set
@@ -628,43 +741,29 @@
 # CONFIG_SND_VIA82XX is not set
 # CONFIG_SND_VIA82XX_MODEM is not set
 # CONFIG_SND_VX222 is not set
+# CONFIG_SND_HDA_INTEL is not set
 
 #
 # Open Sound System
 #
 CONFIG_SOUND_PRIME=m
-# CONFIG_SOUND_BT878 is not set
-CONFIG_SOUND_CMPCI=m
-# CONFIG_SOUND_EMU10K1 is not set
+# CONFIG_OBSOLETE_OSS_DRIVER is not set
 # CONFIG_SOUND_FUSION is not set
-# CONFIG_SOUND_CS4281 is not set
-# CONFIG_SOUND_ES1370 is not set
-# CONFIG_SOUND_ES1371 is not set
-# CONFIG_SOUND_ESSSOLO1 is not set
-# CONFIG_SOUND_MAESTRO is not set
-# CONFIG_SOUND_MAESTRO3 is not set
 # CONFIG_SOUND_ICH is not set
-# CONFIG_SOUND_SONICVIBES is not set
 # CONFIG_SOUND_TRIDENT is not set
 # CONFIG_SOUND_MSNDCLAS is not set
 # CONFIG_SOUND_MSNDPIN is not set
-# CONFIG_SOUND_VIA82CXXX is not set
-# CONFIG_SOUND_OSS is not set
-# CONFIG_SOUND_ALI5455 is not set
-# CONFIG_SOUND_FORTE is not set
-# CONFIG_SOUND_RME96XX is not set
-# CONFIG_SOUND_AD1980 is not set
 CONFIG_SOUND_VOYAGERGX=m
 
 #
 # USB support
 #
-# CONFIG_USB is not set
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
 #
 
 #
@@ -683,25 +782,29 @@
 # CONFIG_INFINIBAND is not set
 
 #
+# SN Devices
+#
+
+#
 # File systems
 #
 CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
 # CONFIG_EXT3_FS is not set
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
-
-#
-# XFS support
-#
+# CONFIG_FS_POSIX_ACL is not set
 # CONFIG_XFS_FS is not set
 CONFIG_MINIX_FS=y
 # CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 # CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
 
 #
 # CD-ROM/DVD Filesystems
@@ -725,11 +828,11 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_SYSFS=y
-# CONFIG_DEVFS_FS is not set
 # CONFIG_TMPFS is not set
 # CONFIG_HUGETLBFS is not set
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
 
 #
 # Miscellaneous filesystems
@@ -758,6 +861,7 @@
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
 # CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
 
 #
 # Partition Types
@@ -818,7 +922,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_FRAME_POINTER is not set
 # CONFIG_SH_STANDARD_BIOS is not set
 # CONFIG_EARLY_SCIF_CONSOLE is not set
@@ -843,5 +949,6 @@
 # Library routines
 #
 # CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
 CONFIG_CRC32=y
 # CONFIG_LIBCRC32C is not set
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/se7300_defconfig linux-2.6.17/arch/sh/configs/se7300_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/se7300_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/se7300_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-sh
-# Wed Mar  2 15:09:43 2005
+# Linux kernel version: 2.6.15-sh
+# Wed Jan  4 19:07:24 2006
 #
 CONFIG_SUPERH=y
 CONFIG_UID16=y
@@ -16,30 +16,35 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
 #
 CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
 # CONFIG_SWAP is not set
 # CONFIG_SYSVIPC is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 CONFIG_SYSCTL=y
-# CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_EMBEDDED=y
 # CONFIG_KALLSYMS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 # CONFIG_FUTEX is not set
 # CONFIG_EPOLL is not set
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -47,6 +52,24 @@
 # CONFIG_MODULES is not set
 
 #
+# Block layer
+#
+# CONFIG_LBD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
 # System type
 #
 # CONFIG_SH_SOLUTION_ENGINE is not set
@@ -56,9 +79,7 @@
 # CONFIG_SH_7751_SYSTEMH is not set
 # CONFIG_SH_STB1_HARP is not set
 # CONFIG_SH_STB1_OVERDRIVE is not set
-# CONFIG_SH_HP620 is not set
-# CONFIG_SH_HP680 is not set
-# CONFIG_SH_HP690 is not set
+# CONFIG_SH_HP6XX is not set
 # CONFIG_SH_CQREEK is not set
 # CONFIG_SH_DMIDA is not set
 # CONFIG_SH_EC3104 is not set
@@ -75,40 +96,88 @@
 # CONFIG_SH_RTS7751R2D is not set
 # CONFIG_SH_EDOSK7705 is not set
 # CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+# CONFIG_SH_TITAN is not set
 # CONFIG_SH_UNKNOWN is not set
-# CONFIG_CPU_SH2 is not set
+
+#
+# Processor selection
+#
 CONFIG_CPU_SH3=y
-# CONFIG_CPU_SH4 is not set
+
+#
+# SH-2 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
 CONFIG_CPU_SUBTYPE_SH7300=y
 # CONFIG_CPU_SUBTYPE_SH7705 is not set
 # CONFIG_CPU_SUBTYPE_SH7707 is not set
 # CONFIG_CPU_SUBTYPE_SH7708 is not set
 # CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
 # CONFIG_CPU_SUBTYPE_SH7751 is not set
+# CONFIG_CPU_SUBTYPE_SH7751R is not set
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
-# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_ST40STB1 is not set
 # CONFIG_CPU_SUBTYPE_ST40GX1 is not set
-# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
 CONFIG_MMU=y
-CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="console=ttySC0,38400 root=/dev/ram0"
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
 CONFIG_MEMORY_START=0x0c000000
 CONFIG_MEMORY_SIZE=0x04000000
-# CONFIG_MEMORY_OVERRIDE is not set
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_SH_DSP=y
 # CONFIG_SH_ADC is not set
-CONFIG_ZERO_PAGE_OFFSET=0x00001000
-CONFIG_BOOT_LINK_OFFSET=0x00210000
-CONFIG_CPU_LITTLE_ENDIAN=y
-# CONFIG_PREEMPT is not set
-# CONFIG_UBC_WAKEUP is not set
-# CONFIG_SH_WRITETHROUGH is not set
-# CONFIG_SH_OCRAM is not set
-# CONFIG_SMP is not set
-# CONFIG_SH_PCLK_CALC is not set
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+CONFIG_SH_PCLK_FREQ_BOOL=y
 CONFIG_SH_PCLK_FREQ=33333333
 
 #
@@ -128,18 +197,30 @@
 CONFIG_HEARTBEAT=y
 
 #
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+# Kernel features
 #
-# CONFIG_PCI is not set
+# CONFIG_KEXEC is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_SMP is not set
 
 #
-# PCCARD (PCMCIA/CardBus) support
+# Boot options
 #
-# CONFIG_PCCARD is not set
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x00210000
+# CONFIG_UBC_WAKEUP is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttySC0,38400 root=/dev/ram0"
+
+#
+# Bus options
+#
+# CONFIG_PCI is not set
 
 #
-# PC-card bridges
+# PCCARD (PCMCIA/CardBus) support
 #
+# CONFIG_PCCARD is not set
 
 #
 # PCI Hotplug Support
@@ -153,10 +234,9 @@
 # CONFIG_BINFMT_MISC is not set
 
 #
-# SH initrd options
+# Networking
 #
-CONFIG_EMBEDDED_RAMDISK=y
-CONFIG_EMBEDDED_RAMDISK_IMAGE="ramdisk.gz"
+# CONFIG_NET is not set
 
 #
 # Device Drivers
@@ -170,6 +250,10 @@
 # CONFIG_FW_LOADER is not set
 
 #
+# Connector - unified userspace <-> kernelspace linker
+#
+
+#
 # Memory Technology Devices (MTD)
 #
 # CONFIG_MTD is not set
@@ -186,26 +270,15 @@
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_DEV_COW_COMMON is not set
 # CONFIG_BLK_DEV_LOOP is not set
 CONFIG_BLK_DEV_RAM=y
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_LBD is not set
 # CONFIG_CDROM_PKTCDVD is not set
 
 #
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-
-#
 # ATA/ATAPI/MFM/RLL support
 #
 # CONFIG_IDE is not set
@@ -213,6 +286,7 @@
 #
 # SCSI device support
 #
+# CONFIG_RAID_ATTRS is not set
 # CONFIG_SCSI is not set
 
 #
@@ -223,6 +297,7 @@
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -233,9 +308,8 @@
 #
 
 #
-# Networking support
+# Network device support
 #
-# CONFIG_NET is not set
 # CONFIG_NETPOLL is not set
 # CONFIG_NET_POLL_CONTROLLER is not set
 
@@ -266,18 +340,6 @@
 # CONFIG_INPUT_EVBUG is not set
 
 #
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-CONFIG_SERIO=y
-# CONFIG_SERIO_I8042 is not set
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -287,6 +349,16 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
 # Character devices
 #
 # CONFIG_VT is not set
@@ -336,10 +408,15 @@
 #
 # Ftape, the floppy tape device driver
 #
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -350,10 +427,21 @@
 # CONFIG_W1 is not set
 
 #
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
 # Misc devices
 #
 
 #
+# Multimedia Capabilities Port drivers
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -379,7 +467,7 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
 #
 
 #
@@ -395,28 +483,31 @@
 #
 # InfiniBand support
 #
-# CONFIG_INFINIBAND is not set
+
+#
+# SN Devices
+#
 
 #
 # File systems
 #
 CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
 # CONFIG_EXT3_FS is not set
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
-
-#
-# XFS support
-#
+# CONFIG_FS_POSIX_ACL is not set
 # CONFIG_XFS_FS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 # CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
 
 #
 # CD-ROM/DVD Filesystems
@@ -437,13 +528,11 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_SYSFS=y
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
 # CONFIG_TMPFS is not set
 # CONFIG_HUGETLBFS is not set
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
 
 #
 # Miscellaneous filesystems
@@ -481,7 +570,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_FRAME_POINTER is not set
 CONFIG_SH_STANDARD_BIOS=y
 CONFIG_EARLY_PRINTK=y
@@ -527,5 +618,6 @@
 # Library routines
 #
 # CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
 CONFIG_CRC32=y
 # CONFIG_LIBCRC32C is not set
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/se73180_defconfig linux-2.6.17/arch/sh/configs/se73180_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/se73180_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/se73180_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-sh
-# Wed Mar  2 15:09:44 2005
+# Linux kernel version: 2.6.15-sh
+# Sun Jan  8 13:54:18 2006
 #
 CONFIG_SUPERH=y
 CONFIG_UID16=y
@@ -16,30 +16,35 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
 #
 CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
 CONFIG_SWAP=y
 # CONFIG_SYSVIPC is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 # CONFIG_SYSCTL is not set
-# CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_EMBEDDED=y
 # CONFIG_KALLSYMS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 # CONFIG_FUTEX is not set
 # CONFIG_EPOLL is not set
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -52,6 +57,24 @@
 # CONFIG_KMOD is not set
 
 #
+# Block layer
+#
+# CONFIG_LBD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+CONFIG_DEFAULT_NOOP=y
+CONFIG_DEFAULT_IOSCHED="noop"
+
+#
 # System type
 #
 # CONFIG_SH_SOLUTION_ENGINE is not set
@@ -61,9 +84,7 @@
 # CONFIG_SH_7751_SYSTEMH is not set
 # CONFIG_SH_STB1_HARP is not set
 # CONFIG_SH_STB1_OVERDRIVE is not set
-# CONFIG_SH_HP620 is not set
-# CONFIG_SH_HP680 is not set
-# CONFIG_SH_HP690 is not set
+# CONFIG_SH_HP6XX is not set
 # CONFIG_SH_CQREEK is not set
 # CONFIG_SH_DMIDA is not set
 # CONFIG_SH_EC3104 is not set
@@ -78,42 +99,95 @@
 # CONFIG_SH_SECUREEDGE5410 is not set
 # CONFIG_SH_HS7751RVOIP is not set
 # CONFIG_SH_RTS7751R2D is not set
+# CONFIG_SH_R7780RP is not set
 # CONFIG_SH_EDOSK7705 is not set
 # CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+# CONFIG_SH_TITAN is not set
 # CONFIG_SH_UNKNOWN is not set
-# CONFIG_CPU_SH2 is not set
-# CONFIG_CPU_SH3 is not set
+
+#
+# Processor selection
+#
 CONFIG_CPU_SH4=y
+CONFIG_CPU_SH4A=y
+
+#
+# SH-2 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7300 is not set
 # CONFIG_CPU_SUBTYPE_SH7705 is not set
 # CONFIG_CPU_SUBTYPE_SH7707 is not set
 # CONFIG_CPU_SUBTYPE_SH7708 is not set
 # CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
 # CONFIG_CPU_SUBTYPE_SH7751 is not set
+# CONFIG_CPU_SUBTYPE_SH7751R is not set
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
-CONFIG_CPU_SUBTYPE_SH73180=y
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_ST40STB1 is not set
 # CONFIG_CPU_SUBTYPE_ST40GX1 is not set
-# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# SH-4A Processor Support
+#
+CONFIG_CPU_SUBTYPE_SH73180=y
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
 CONFIG_MMU=y
-CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="console=ttySC0,38400 root=/dev/ram"
+CONFIG_32BIT=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
 CONFIG_MEMORY_START=0x0c000000
 CONFIG_MEMORY_SIZE=0x02000000
-# CONFIG_MEMORY_OVERRIDE is not set
-# CONFIG_SH_FPU is not set
-CONFIG_ZERO_PAGE_OFFSET=0x00010000
-CONFIG_BOOT_LINK_OFFSET=0x00800000
+
+#
+# Processor features
+#
 CONFIG_CPU_LITTLE_ENDIAN=y
-# CONFIG_PREEMPT is not set
-# CONFIG_UBC_WAKEUP is not set
-# CONFIG_SH_WRITETHROUGH is not set
-# CONFIG_SH_OCRAM is not set
+# CONFIG_SH_FPU is not set
 # CONFIG_SH_STORE_QUEUES is not set
-# CONFIG_SMP is not set
-# CONFIG_SH_PCLK_CALC is not set
+CONFIG_CPU_HAS_INTEVT=y
+CONFIG_CPU_HAS_SR_RB=y
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+CONFIG_SH_PCLK_FREQ_BOOL=y
 CONFIG_SH_PCLK_FREQ=27000000
 
 #
@@ -133,18 +207,30 @@
 CONFIG_HEARTBEAT=y
 
 #
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+# Kernel features
 #
-# CONFIG_PCI is not set
+# CONFIG_KEXEC is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_SMP is not set
 
 #
-# PCCARD (PCMCIA/CardBus) support
+# Boot options
 #
-# CONFIG_PCCARD is not set
+CONFIG_ZERO_PAGE_OFFSET=0x00010000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttySC0,38400 root=/dev/ram"
+
+#
+# Bus options
+#
+# CONFIG_PCI is not set
 
 #
-# PC-card bridges
+# PCCARD (PCMCIA/CardBus) support
 #
+# CONFIG_PCCARD is not set
 
 #
 # PCI Hotplug Support
@@ -158,10 +244,9 @@
 # CONFIG_BINFMT_MISC is not set
 
 #
-# SH initrd options
+# Networking
 #
-CONFIG_EMBEDDED_RAMDISK=y
-CONFIG_EMBEDDED_RAMDISK_IMAGE="ramdisk.gz"
+# CONFIG_NET is not set
 
 #
 # Device Drivers
@@ -175,6 +260,10 @@
 # CONFIG_FW_LOADER is not set
 
 #
+# Connector - unified userspace <-> kernelspace linker
+#
+
+#
 # Memory Technology Devices (MTD)
 #
 # CONFIG_MTD is not set
@@ -191,7 +280,6 @@
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_DEV_COW_COMMON is not set
 CONFIG_BLK_DEV_LOOP=y
 # CONFIG_BLK_DEV_CRYPTOLOOP is not set
@@ -199,19 +287,9 @@
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_LBD is not set
 # CONFIG_CDROM_PKTCDVD is not set
 
 #
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
-
-#
 # ATA/ATAPI/MFM/RLL support
 #
 # CONFIG_IDE is not set
@@ -219,6 +297,7 @@
 #
 # SCSI device support
 #
+# CONFIG_RAID_ATTRS is not set
 # CONFIG_SCSI is not set
 
 #
@@ -229,6 +308,7 @@
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -239,9 +319,8 @@
 #
 
 #
-# Networking support
+# Network device support
 #
-# CONFIG_NET is not set
 # CONFIG_NETPOLL is not set
 # CONFIG_NET_POLL_CONTROLLER is not set
 
@@ -260,20 +339,10 @@
 # CONFIG_INPUT is not set
 
 #
-# Userland interfaces
-#
-
-#
-# Input I/O drivers
+# Hardware I/O ports
 #
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 # CONFIG_SERIO is not set
-# CONFIG_SERIO_I8042 is not set
-
-#
-# Input Device Drivers
-#
+# CONFIG_GAMEPORT is not set
 
 #
 # Character devices
@@ -320,10 +389,15 @@
 #
 # Ftape, the floppy tape device driver
 #
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -334,10 +408,21 @@
 # CONFIG_W1 is not set
 
 #
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
 # Misc devices
 #
 
 #
+# Multimedia Capabilities Port drivers
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -363,7 +448,7 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
 #
 
 #
@@ -379,28 +464,31 @@
 #
 # InfiniBand support
 #
-# CONFIG_INFINIBAND is not set
+
+#
+# SN Devices
+#
 
 #
 # File systems
 #
 CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
 # CONFIG_EXT3_FS is not set
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
-
-#
-# XFS support
-#
+# CONFIG_FS_POSIX_ACL is not set
 # CONFIG_XFS_FS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 # CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
 
 #
 # CD-ROM/DVD Filesystems
@@ -421,14 +509,11 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 # CONFIG_SYSFS is not set
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
 CONFIG_TMPFS=y
-# CONFIG_TMPFS_XATTR is not set
 # CONFIG_HUGETLBFS is not set
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
 
 #
 # Miscellaneous filesystems
@@ -466,7 +551,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_FRAME_POINTER is not set
 CONFIG_SH_STANDARD_BIOS=y
 # CONFIG_EARLY_SCIF_CONSOLE is not set
@@ -477,7 +564,6 @@
 # Security options
 #
 # CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
 
 #
 # Cryptographic options
@@ -492,5 +578,6 @@
 # Library routines
 #
 # CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
 CONFIG_CRC32=y
 # CONFIG_LIBCRC32C is not set
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/se7705_defconfig linux-2.6.17/arch/sh/configs/se7705_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/se7705_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/se7705_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-sh
-# Wed Mar  2 15:09:45 2005
+# Linux kernel version: 2.6.15-sh
+# Wed Jan  4 19:35:13 2006
 #
 CONFIG_SUPERH=y
 CONFIG_UID16=y
@@ -17,32 +17,38 @@
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
 CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
 #
 CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
 # CONFIG_SWAP is not set
 # CONFIG_SYSVIPC is not set
 # CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 # CONFIG_SYSCTL is not set
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_EMBEDDED=y
 # CONFIG_KALLSYMS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -55,6 +61,24 @@
 CONFIG_KMOD=y
 
 #
+# Block layer
+#
+# CONFIG_LBD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+# CONFIG_IOSCHED_DEADLINE is not set
+# CONFIG_IOSCHED_CFQ is not set
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
 # System type
 #
 CONFIG_SH_SOLUTION_ENGINE=y
@@ -64,9 +88,7 @@
 # CONFIG_SH_7751_SYSTEMH is not set
 # CONFIG_SH_STB1_HARP is not set
 # CONFIG_SH_STB1_OVERDRIVE is not set
-# CONFIG_SH_HP620 is not set
-# CONFIG_SH_HP680 is not set
-# CONFIG_SH_HP690 is not set
+# CONFIG_SH_HP6XX is not set
 # CONFIG_SH_CQREEK is not set
 # CONFIG_SH_DMIDA is not set
 # CONFIG_SH_EC3104 is not set
@@ -83,44 +105,91 @@
 # CONFIG_SH_RTS7751R2D is not set
 # CONFIG_SH_EDOSK7705 is not set
 # CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+# CONFIG_SH_TITAN is not set
 # CONFIG_SH_UNKNOWN is not set
-# CONFIG_CPU_SH2 is not set
+
+#
+# Processor selection
+#
 CONFIG_CPU_SH3=y
-# CONFIG_CPU_SH4 is not set
+
+#
+# SH-2 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7300 is not set
 CONFIG_CPU_SUBTYPE_SH7705=y
 # CONFIG_CPU_SUBTYPE_SH7707 is not set
 # CONFIG_CPU_SUBTYPE_SH7708 is not set
 # CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
 # CONFIG_CPU_SUBTYPE_SH7751 is not set
+# CONFIG_CPU_SUBTYPE_SH7751R is not set
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
-# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_ST40STB1 is not set
 # CONFIG_CPU_SUBTYPE_ST40GX1 is not set
-# CONFIG_CPU_SUBTYPE_SH4_202 is not set
-CONFIG_SH7705_CACHE_32KB=y
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
 CONFIG_MMU=y
-# CONFIG_CMDLINE_BOOL is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+CONFIG_SH7705_CACHE_32KB=y
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
 CONFIG_MEMORY_START=0x0c000000
 CONFIG_MEMORY_SIZE=0x02000000
-CONFIG_MEMORY_SET=y
-# CONFIG_MEMORY_OVERRIDE is not set
 # CONFIG_CF_ENABLER is not set
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_SH_RTC=y
 # CONFIG_SH_DSP is not set
 # CONFIG_SH_ADC is not set
-CONFIG_ZERO_PAGE_OFFSET=0x00001000
-CONFIG_BOOT_LINK_OFFSET=0x00800000
-CONFIG_CPU_LITTLE_ENDIAN=y
-CONFIG_PREEMPT=y
-# CONFIG_UBC_WAKEUP is not set
-# CONFIG_SH_WRITETHROUGH is not set
-# CONFIG_SH_OCRAM is not set
-# CONFIG_SMP is not set
-CONFIG_SH_PCLK_CALC=y
-CONFIG_SH_PCLK_FREQ=33333333
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+# CONFIG_SH_PCLK_FREQ_BOOL is not set
 
 #
 # CPU Frequency scaling
@@ -139,18 +208,29 @@
 CONFIG_HEARTBEAT=y
 
 #
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+# Kernel features
 #
-# CONFIG_PCI is not set
+# CONFIG_KEXEC is not set
+CONFIG_PREEMPT=y
+# CONFIG_SMP is not set
 
 #
-# PCCARD (PCMCIA/CardBus) support
+# Boot options
 #
-# CONFIG_PCCARD is not set
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+# CONFIG_CMDLINE_BOOL is not set
+
+#
+# Bus options
+#
+# CONFIG_PCI is not set
 
 #
-# PC-card bridges
+# PCCARD (PCMCIA/CardBus) support
 #
+# CONFIG_PCCARD is not set
 
 #
 # PCI Hotplug Support
@@ -164,9 +244,75 @@
 # CONFIG_BINFMT_MISC is not set
 
 #
-# SH initrd options
+# Networking
 #
-# CONFIG_EMBEDDED_RAMDISK is not set
+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
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# 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_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE 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_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
 
 #
 # Device Drivers
@@ -180,12 +326,17 @@
 # CONFIG_FW_LOADER is not set
 
 #
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
 # Memory Technology Devices (MTD)
 #
 CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_CMDLINE_PARTS is not set
 
@@ -197,6 +348,7 @@
 # CONFIG_FTL is not set
 # CONFIG_NFTL is not set
 # CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
 
 #
 # RAM/ROM/Flash chip drivers
@@ -231,8 +383,7 @@
 # CONFIG_MTD_PHYSMAP is not set
 CONFIG_MTD_SOLUTIONENGINE=y
 CONFIG_MTD_SUPERH_RESERVE=0x300000
-# CONFIG_MTD_MPC1211 is not set
-# CONFIG_MTD_RTS7751R2D is not set
+# CONFIG_MTD_PLATRAM is not set
 
 #
 # Self-contained MTD device drivers
@@ -256,6 +407,11 @@
 # CONFIG_MTD_NAND is not set
 
 #
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
 # Parallel port support
 #
 # CONFIG_PARPORT is not set
@@ -267,7 +423,6 @@
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_DEV_COW_COMMON is not set
 # CONFIG_BLK_DEV_LOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
@@ -275,17 +430,7 @@
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=8192
 CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_LBD is not set
 # CONFIG_CDROM_PKTCDVD is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
 # CONFIG_ATA_OVER_ETH is not set
 
 #
@@ -296,6 +441,7 @@
 #
 # SCSI device support
 #
+# CONFIG_RAID_ATTRS is not set
 # CONFIG_SCSI is not set
 
 #
@@ -306,6 +452,7 @@
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -316,70 +463,8 @@
 #
 
 #
-# Networking support
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-# CONFIG_NETLINK_DEV is not set
-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_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-CONFIG_IP_PNP_RARP=y
-# 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_TUNNEL is not set
-CONFIG_IP_TCPDIAG=y
-# CONFIG_IP_TCPDIAG_IPV6 is not set
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE 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_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-# CONFIG_NET_CLS_ROUTE is not set
-
-#
-# Network testing
+# Network device support
 #
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -387,12 +472,18 @@
 # CONFIG_TUN is not set
 
 #
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
 # CONFIG_MII is not set
 CONFIG_STNIC=y
 # CONFIG_SMC91X is not set
+# CONFIG_NE2000 is not set
 
 #
 # Ethernet (1000 Mbit)
@@ -422,10 +513,13 @@
 # CONFIG_PPP_SYNC_TTY is not set
 CONFIG_PPP_DEFLATE=y
 # CONFIG_PPP_BSDCOMP is not set
+# CONFIG_PPP_MPPE is not set
 # CONFIG_PPPOE is not set
 # CONFIG_SLIP is not set
 # CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
@@ -452,18 +546,6 @@
 # CONFIG_INPUT_EVBUG is not set
 
 #
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-CONFIG_SERIO=y
-# CONFIG_SERIO_I8042 is not set
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_LIBPS2 is not set
-# CONFIG_SERIO_RAW is not set
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -473,6 +555,16 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_LIBPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
 # Character devices
 #
 # CONFIG_VT is not set
@@ -510,10 +602,15 @@
 #
 # Ftape, the floppy tape device driver
 #
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -524,10 +621,21 @@
 # CONFIG_W1 is not set
 
 #
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
 # Misc devices
 #
 
 #
+# Multimedia Capabilities Port drivers
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -554,7 +662,7 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
 #
 
 #
@@ -570,28 +678,31 @@
 #
 # InfiniBand support
 #
-# CONFIG_INFINIBAND is not set
+
+#
+# SN Devices
+#
 
 #
 # File systems
 #
 CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
 # CONFIG_EXT3_FS is not set
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
-
-#
-# XFS support
-#
+# CONFIG_FS_POSIX_ACL is not set
 # CONFIG_XFS_FS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 # CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
 
 #
 # CD-ROM/DVD Filesystems
@@ -612,12 +723,11 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 # CONFIG_SYSFS is not set
-# CONFIG_DEVFS_FS is not set
-# CONFIG_DEVPTS_FS_XATTR is not set
 # CONFIG_TMPFS is not set
 # CONFIG_HUGETLBFS is not set
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
 
 #
 # Miscellaneous filesystems
@@ -632,8 +742,8 @@
 # CONFIG_JFFS_FS is not set
 CONFIG_JFFS2_FS=y
 CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-# CONFIG_JFFS2_FS_NOR_ECC is not set
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
 # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
 CONFIG_JFFS2_ZLIB=y
 CONFIG_JFFS2_RTIME=y
@@ -655,6 +765,7 @@
 # CONFIG_NFSD is not set
 CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
 CONFIG_SUNRPC=y
 # CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_RPCSEC_GSS_SPKM3 is not set
@@ -663,6 +774,7 @@
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
 # CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
 
 #
 # Partition Types
@@ -683,8 +795,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
-CONFIG_DEBUG_PREEMPT=y
+CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_FRAME_POINTER is not set
 # CONFIG_SH_STANDARD_BIOS is not set
 # CONFIG_KGDB is not set
@@ -693,7 +806,6 @@
 # Security options
 #
 # CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
 
 #
 # Cryptographic options
@@ -708,6 +820,7 @@
 # Library routines
 #
 CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
 CONFIG_CRC32=y
 # CONFIG_LIBCRC32C is not set
 CONFIG_ZLIB_INFLATE=y
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/se7750_defconfig linux-2.6.17/arch/sh/configs/se7750_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/se7750_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/se7750_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-sh
-# Wed Mar  2 15:09:46 2005
+# Linux kernel version: 2.6.15-sh
+# Wed Jan  4 19:57:15 2006
 #
 CONFIG_SUPERH=y
 CONFIG_UID16=y
@@ -16,11 +16,13 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
 #
 CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
 # CONFIG_SWAP is not set
 CONFIG_SYSVIPC=y
 # CONFIG_POSIX_MQUEUE is not set
@@ -28,23 +30,27 @@
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 CONFIG_IKCONFIG=y
 CONFIG_IKCONFIG_PROC=y
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -57,6 +63,24 @@
 CONFIG_KMOD=y
 
 #
+# Block layer
+#
+# CONFIG_LBD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
 # System type
 #
 CONFIG_SH_SOLUTION_ENGINE=y
@@ -66,9 +90,7 @@
 # CONFIG_SH_7751_SYSTEMH is not set
 # CONFIG_SH_STB1_HARP is not set
 # CONFIG_SH_STB1_OVERDRIVE is not set
-# CONFIG_SH_HP620 is not set
-# CONFIG_SH_HP680 is not set
-# CONFIG_SH_HP690 is not set
+# CONFIG_SH_HP6XX is not set
 # CONFIG_SH_CQREEK is not set
 # CONFIG_SH_DMIDA is not set
 # CONFIG_SH_EC3104 is not set
@@ -85,47 +107,93 @@
 # CONFIG_SH_RTS7751R2D is not set
 # CONFIG_SH_EDOSK7705 is not set
 # CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+# CONFIG_SH_TITAN is not set
 # CONFIG_SH_UNKNOWN is not set
-# CONFIG_CPU_SH2 is not set
-# CONFIG_CPU_SH3 is not set
+
+#
+# Processor selection
+#
 CONFIG_CPU_SH4=y
+
+#
+# SH-2 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7300 is not set
 # CONFIG_CPU_SUBTYPE_SH7705 is not set
 # CONFIG_CPU_SUBTYPE_SH7707 is not set
 # CONFIG_CPU_SUBTYPE_SH7708 is not set
 # CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
 CONFIG_CPU_SUBTYPE_SH7750=y
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
 # CONFIG_CPU_SUBTYPE_SH7751 is not set
+# CONFIG_CPU_SUBTYPE_SH7751R is not set
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
-# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_ST40STB1 is not set
 # CONFIG_CPU_SUBTYPE_ST40GX1 is not set
-# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
 CONFIG_MMU=y
-CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="console=ttySC1,38400 root=/dev/nfs ip=bootp"
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
 CONFIG_MEMORY_START=0x0c000000
 CONFIG_MEMORY_SIZE=0x02000000
-CONFIG_MEMORY_SET=y
-# CONFIG_MEMORY_OVERRIDE is not set
 CONFIG_CF_ENABLER=y
 # CONFIG_CF_AREA5 is not set
 CONFIG_CF_AREA6=y
 CONFIG_CF_BASE_ADDR=0xb8000000
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_SH_RTC=y
 CONFIG_SH_FPU=y
-CONFIG_ZERO_PAGE_OFFSET=0x00001000
-CONFIG_BOOT_LINK_OFFSET=0x00800000
-CONFIG_CPU_LITTLE_ENDIAN=y
-# CONFIG_PREEMPT is not set
-# CONFIG_UBC_WAKEUP is not set
-# CONFIG_SH_WRITETHROUGH is not set
-# CONFIG_SH_OCRAM is not set
 # CONFIG_SH_STORE_QUEUES is not set
-# CONFIG_SMP is not set
-CONFIG_SH_PCLK_CALC=y
-CONFIG_SH_PCLK_FREQ=49876504
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+# CONFIG_SH_PCLK_FREQ_BOOL is not set
 
 #
 # CPU Frequency scaling
@@ -144,18 +212,30 @@
 CONFIG_HEARTBEAT=y
 
 #
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+# Kernel features
 #
-# CONFIG_PCI is not set
+# CONFIG_KEXEC is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_SMP is not set
 
 #
-# PCCARD (PCMCIA/CardBus) support
+# Boot options
 #
-# CONFIG_PCCARD is not set
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttySC1,38400 root=/dev/nfs ip=bootp"
 
 #
-# PC-card bridges
+# Bus options
 #
+# CONFIG_PCI is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
 
 #
 # PCI Hotplug Support
@@ -169,6 +249,78 @@
 # CONFIG_BINFMT_MISC is not set
 
 #
+# Networking
+#
+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
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE 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_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
 # Device Drivers
 #
 
@@ -180,12 +332,17 @@
 # CONFIG_FW_LOADER is not set
 
 #
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
 # Memory Technology Devices (MTD)
 #
 CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_CMDLINE_PARTS is not set
 
@@ -197,6 +354,7 @@
 # CONFIG_FTL is not set
 # CONFIG_NFTL is not set
 # CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
 
 #
 # RAM/ROM/Flash chip drivers
@@ -231,8 +389,7 @@
 # CONFIG_MTD_PHYSMAP is not set
 CONFIG_MTD_SOLUTIONENGINE=y
 CONFIG_MTD_SUPERH_RESERVE=0x00010000
-# CONFIG_MTD_MPC1211 is not set
-# CONFIG_MTD_RTS7751R2D is not set
+# CONFIG_MTD_PLATRAM is not set
 
 #
 # Self-contained MTD device drivers
@@ -256,6 +413,11 @@
 # CONFIG_MTD_NAND is not set
 
 #
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
 # Parallel port support
 #
 # CONFIG_PARPORT is not set
@@ -267,23 +429,12 @@
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_DEV_COW_COMMON is not set
 # CONFIG_BLK_DEV_LOOP is not set
 # CONFIG_BLK_DEV_NBD is not set
 # CONFIG_BLK_DEV_RAM is not set
 CONFIG_BLK_DEV_RAM_COUNT=16
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_LBD is not set
 # CONFIG_CDROM_PKTCDVD is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
 # CONFIG_ATA_OVER_ETH is not set
 
 #
@@ -294,6 +445,7 @@
 #
 # SCSI device support
 #
+# CONFIG_RAID_ATTRS is not set
 # CONFIG_SCSI is not set
 
 #
@@ -304,6 +456,7 @@
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -314,71 +467,8 @@
 #
 
 #
-# Networking support
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-# CONFIG_NETLINK_DEV is not set
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_PNP=y
-# CONFIG_IP_PNP_DHCP is not set
-CONFIG_IP_PNP_BOOTP=y
-# CONFIG_IP_PNP_RARP is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_IP_TCPDIAG=y
-# CONFIG_IP_TCPDIAG_IPV6 is not set
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE 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_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
+# Network device support
 #
-# CONFIG_NET_SCHED is not set
-# CONFIG_NET_CLS_ROUTE is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -386,12 +476,18 @@
 # CONFIG_TUN is not set
 
 #
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
 # CONFIG_MII is not set
 CONFIG_STNIC=y
 # CONFIG_SMC91X is not set
+# CONFIG_NE2000 is not set
 
 #
 # Ethernet (1000 Mbit)
@@ -418,6 +514,8 @@
 # CONFIG_SLIP is not set
 # CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
@@ -435,20 +533,10 @@
 # CONFIG_INPUT is not set
 
 #
-# Userland interfaces
-#
-
-#
-# Input I/O drivers
+# Hardware I/O ports
 #
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 # CONFIG_SERIO is not set
-# CONFIG_SERIO_I8042 is not set
-
-#
-# Input Device Drivers
-#
+# CONFIG_GAMEPORT is not set
 
 #
 # Character devices
@@ -499,10 +587,15 @@
 #
 # Ftape, the floppy tape device driver
 #
-# CONFIG_DRM is not set
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -513,10 +606,21 @@
 # CONFIG_W1 is not set
 
 #
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
 # Misc devices
 #
 
 #
+# Multimedia Capabilities Port drivers
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -543,7 +647,7 @@
 # CONFIG_USB_ARCH_HAS_OHCI is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
 #
 
 #
@@ -559,7 +663,10 @@
 #
 # InfiniBand support
 #
-# CONFIG_INFINIBAND is not set
+
+#
+# SN Devices
+#
 
 #
 # File systems
@@ -569,17 +676,16 @@
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
-
-#
-# XFS support
-#
+# CONFIG_FS_POSIX_ACL is not set
 # CONFIG_XFS_FS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 # CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
 
 #
 # CD-ROM/DVD Filesystems
@@ -600,13 +706,11 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_SYSFS=y
-# CONFIG_DEVFS_FS is not set
-# CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
-# CONFIG_TMPFS_XATTR is not set
 # CONFIG_HUGETLBFS is not set
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
 
 #
 # Miscellaneous filesystems
@@ -621,8 +725,8 @@
 # CONFIG_JFFS_FS is not set
 CONFIG_JFFS2_FS=y
 CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-# CONFIG_JFFS2_FS_NOR_ECC is not set
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
 # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
 CONFIG_JFFS2_ZLIB=y
 CONFIG_JFFS2_RTIME=y
@@ -644,6 +748,7 @@
 # CONFIG_NFSD is not set
 CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
 CONFIG_SUNRPC=y
 # CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_RPCSEC_GSS_SPKM3 is not set
@@ -652,6 +757,7 @@
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
 # CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
 
 #
 # Partition Types
@@ -682,7 +788,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_FRAME_POINTER is not set
 # CONFIG_SH_STANDARD_BIOS is not set
 # CONFIG_EARLY_SCIF_CONSOLE is not set
@@ -707,6 +815,7 @@
 # Library routines
 #
 # CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
 CONFIG_CRC32=y
 # CONFIG_LIBCRC32C is not set
 CONFIG_ZLIB_INFLATE=y
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/se7751_defconfig linux-2.6.17/arch/sh/configs/se7751_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/se7751_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/se7751_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-sh
-# Wed Mar  2 15:09:48 2005
+# Linux kernel version: 2.6.15-sh
+# Wed Jan  4 20:02:38 2006
 #
 CONFIG_SUPERH=y
 CONFIG_UID16=y
@@ -16,11 +16,13 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
 #
 CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
 # CONFIG_POSIX_MQUEUE is not set
@@ -28,22 +30,26 @@
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -56,6 +62,24 @@
 # CONFIG_KMOD is not set
 
 #
+# Block layer
+#
+# CONFIG_LBD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
 # System type
 #
 # CONFIG_SH_SOLUTION_ENGINE is not set
@@ -65,9 +89,7 @@
 # CONFIG_SH_7751_SYSTEMH is not set
 # CONFIG_SH_STB1_HARP is not set
 # CONFIG_SH_STB1_OVERDRIVE is not set
-# CONFIG_SH_HP620 is not set
-# CONFIG_SH_HP680 is not set
-# CONFIG_SH_HP690 is not set
+# CONFIG_SH_HP6XX is not set
 # CONFIG_SH_CQREEK is not set
 # CONFIG_SH_DMIDA is not set
 # CONFIG_SH_EC3104 is not set
@@ -84,43 +106,89 @@
 # CONFIG_SH_RTS7751R2D is not set
 # CONFIG_SH_EDOSK7705 is not set
 # CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+# CONFIG_SH_TITAN is not set
 # CONFIG_SH_UNKNOWN is not set
-# CONFIG_CPU_SH2 is not set
-# CONFIG_CPU_SH3 is not set
+
+#
+# Processor selection
+#
 CONFIG_CPU_SH4=y
+
+#
+# SH-2 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7300 is not set
 # CONFIG_CPU_SUBTYPE_SH7705 is not set
 # CONFIG_CPU_SUBTYPE_SH7707 is not set
 # CONFIG_CPU_SUBTYPE_SH7708 is not set
 # CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
 CONFIG_CPU_SUBTYPE_SH7751=y
+# CONFIG_CPU_SUBTYPE_SH7751R is not set
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
-# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_ST40STB1 is not set
 # CONFIG_CPU_SUBTYPE_ST40GX1 is not set
-# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
 CONFIG_MMU=y
-CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="console=ttySC1,38400"
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
 CONFIG_MEMORY_START=0x0c000000
 CONFIG_MEMORY_SIZE=0x04000000
-CONFIG_MEMORY_SET=y
-# CONFIG_MEMORY_OVERRIDE is not set
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_SH_RTC=y
 CONFIG_SH_FPU=y
-CONFIG_ZERO_PAGE_OFFSET=0x00010000
-CONFIG_BOOT_LINK_OFFSET=0x00800000
-CONFIG_CPU_LITTLE_ENDIAN=y
-# CONFIG_PREEMPT is not set
-# CONFIG_UBC_WAKEUP is not set
-# CONFIG_SH_WRITETHROUGH is not set
-# CONFIG_SH_OCRAM is not set
 # CONFIG_SH_STORE_QUEUES is not set
-# CONFIG_SMP is not set
-CONFIG_SH_PCLK_CALC=y
-CONFIG_SH_PCLK_FREQ=60013568
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+# CONFIG_SH_PCLK_FREQ_BOOL is not set
 
 #
 # CPU Frequency scaling
@@ -139,14 +207,29 @@
 CONFIG_HEARTBEAT=y
 
 #
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+# Kernel features
+#
+# CONFIG_KEXEC is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_SMP is not set
+
+#
+# Boot options
+#
+CONFIG_ZERO_PAGE_OFFSET=0x00010000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttySC1,38400"
+
+#
+# Bus options
 #
 CONFIG_PCI=y
 # CONFIG_SH_PCIDMA_NONCOHERENT is not set
 CONFIG_PCI_AUTO=y
 CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
 # CONFIG_PCI_LEGACY_PROC is not set
-# CONFIG_PCI_NAMES is not set
 
 #
 # PCCARD (PCMCIA/CardBus) support
@@ -154,10 +237,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -170,9 +249,96 @@
 # CONFIG_BINFMT_MISC is not set
 
 #
-# SH initrd options
+# Networking
+#
+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
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+# CONFIG_IPV6 is not set
+CONFIG_NETFILTER=y
+CONFIG_NETFILTER_DEBUG=y
+
+#
+# Core Netfilter Configuration
+#
+# CONFIG_NETFILTER_NETLINK is not set
+# CONFIG_NF_CONNTRACK is not set
+
+#
+# IP: Netfilter Configuration
+#
+# CONFIG_IP_NF_CONNTRACK is not set
+CONFIG_IP_NF_QUEUE=y
+# CONFIG_IP_NF_IPTABLES is not set
+# CONFIG_IP_NF_ARPTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE 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_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
 #
-# CONFIG_EMBEDDED_RAMDISK is not set
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
 
 #
 # Device Drivers
@@ -186,12 +352,17 @@
 # CONFIG_FW_LOADER is not set
 
 #
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
 # Memory Technology Devices (MTD)
 #
 CONFIG_MTD=y
 # CONFIG_MTD_DEBUG is not set
-CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 # CONFIG_MTD_CMDLINE_PARTS is not set
 
@@ -203,6 +374,7 @@
 # CONFIG_FTL is not set
 # CONFIG_NFTL is not set
 # CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
 
 #
 # RAM/ROM/Flash chip drivers
@@ -236,8 +408,7 @@
 # CONFIG_MTD_COMPLEX_MAPPINGS is not set
 # CONFIG_MTD_PHYSMAP is not set
 # CONFIG_MTD_SOLUTIONENGINE is not set
-# CONFIG_MTD_MPC1211 is not set
-# CONFIG_MTD_RTS7751R2D is not set
+# CONFIG_MTD_PLATRAM is not set
 
 #
 # Self-contained MTD device drivers
@@ -262,6 +433,11 @@
 # CONFIG_MTD_NAND is not set
 
 #
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
 # Parallel port support
 #
 # CONFIG_PARPORT is not set
@@ -273,7 +449,6 @@
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_CPQ_DA is not set
 # CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
@@ -286,17 +461,7 @@
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_LBD is not set
 # CONFIG_CDROM_PKTCDVD is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
 # CONFIG_ATA_OVER_ETH is not set
 
 #
@@ -307,6 +472,7 @@
 #
 # SCSI device support
 #
+# CONFIG_RAID_ATTRS is not set
 # CONFIG_SCSI is not set
 
 #
@@ -317,6 +483,7 @@
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -329,92 +496,13 @@
 # CONFIG_I2O is not set
 
 #
-# Networking support
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-CONFIG_NETLINK_DEV=y
-CONFIG_UNIX=y
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-CONFIG_IP_PNP_RARP=y
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_IP_TCPDIAG=y
-# CONFIG_IP_TCPDIAG_IPV6 is not set
-
-#
-# IP: Virtual Server Configuration
-#
-# CONFIG_IP_VS is not set
-# CONFIG_IPV6 is not set
-CONFIG_NETFILTER=y
-CONFIG_NETFILTER_DEBUG=y
-
+# Network device support
 #
-# IP: Netfilter Configuration
-#
-# CONFIG_IP_NF_CONNTRACK is not set
-# CONFIG_IP_NF_CONNTRACK_MARK is not set
-CONFIG_IP_NF_QUEUE=y
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE 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_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-# CONFIG_NET_CLS_ROUTE is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
 # CONFIG_EQUALIZER is not set
 # CONFIG_TUN is not set
-# CONFIG_ETHERTAP is not set
 
 #
 # ARCnet devices
@@ -422,6 +510,11 @@
 # CONFIG_ARCNET is not set
 
 #
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -429,6 +522,7 @@
 # CONFIG_STNIC 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_SMC91X is not set
 
@@ -437,6 +531,7 @@
 #
 # CONFIG_NET_TULIP is not set
 # CONFIG_HP100 is not set
+# CONFIG_NE2000 is not set
 CONFIG_NET_PCI=y
 CONFIG_PCNET32=y
 # CONFIG_AMD8111_ETH is not set
@@ -467,13 +562,17 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 # CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
 
 #
 # Ethernet (10000 Mbit)
 #
+# CONFIG_CHELSIO_T1 is not set
 # CONFIG_IXGB is not set
 # CONFIG_S2IO is not set
 
@@ -497,6 +596,8 @@
 # CONFIG_SLIP is not set
 # CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
@@ -514,20 +615,10 @@
 # CONFIG_INPUT is not set
 
 #
-# Userland interfaces
+# Hardware I/O ports
 #
-
-#
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 # CONFIG_SERIO is not set
-# CONFIG_SERIO_I8042 is not set
-
-#
-# Input Device Drivers
-#
+# CONFIG_GAMEPORT is not set
 
 #
 # Character devices
@@ -544,6 +635,7 @@
 # Non-8250 serial port support
 #
 # CONFIG_SERIAL_SH_SCI is not set
+# CONFIG_SERIAL_JSM is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -583,6 +675,12 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -593,10 +691,21 @@
 # CONFIG_W1 is not set
 
 #
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
 # Misc devices
 #
 
 #
+# Multimedia Capabilities Port drivers
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -619,12 +728,12 @@
 #
 # USB support
 #
-# CONFIG_USB is not set
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
 #
 
 #
@@ -643,25 +752,29 @@
 # CONFIG_INFINIBAND is not set
 
 #
+# SN Devices
+#
+
+#
 # File systems
 #
 CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
 # CONFIG_EXT3_FS is not set
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
-
-#
-# XFS support
-#
+# CONFIG_FS_POSIX_ACL is not set
 # CONFIG_XFS_FS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 # CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
 
 #
 # CD-ROM/DVD Filesystems
@@ -682,13 +795,11 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_SYSFS=y
-# CONFIG_DEVFS_FS is not set
-# CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
-# CONFIG_TMPFS_XATTR is not set
 # CONFIG_HUGETLBFS is not set
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
 
 #
 # Miscellaneous filesystems
@@ -703,8 +814,8 @@
 # CONFIG_JFFS_FS is not set
 CONFIG_JFFS2_FS=y
 CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_NAND is not set
-# CONFIG_JFFS2_FS_NOR_ECC is not set
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
 # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
 CONFIG_JFFS2_ZLIB=y
 CONFIG_JFFS2_RTIME=y
@@ -726,6 +837,7 @@
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
 # CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
 
 #
 # Partition Types
@@ -746,7 +858,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_FRAME_POINTER is not set
 # CONFIG_SH_STANDARD_BIOS is not set
 # CONFIG_EARLY_SCIF_CONSOLE is not set
@@ -771,6 +885,7 @@
 # Library routines
 #
 # CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
 CONFIG_CRC32=y
 # CONFIG_LIBCRC32C is not set
 CONFIG_ZLIB_INFLATE=y
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/sh03_defconfig linux-2.6.17/arch/sh/configs/sh03_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/sh03_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/sh03_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-sh
-# Wed Mar  2 15:09:49 2005
+# Linux kernel version: 2.6.15-sh
+# Wed Jan  4 20:14:31 2006
 #
 CONFIG_SUPERH=y
 CONFIG_UID16=y
@@ -18,11 +18,13 @@
 CONFIG_BROKEN=y
 CONFIG_BROKEN_ON_SMP=y
 CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
 #
 CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
 CONFIG_SWAP=y
 CONFIG_SYSVIPC=y
 CONFIG_POSIX_MQUEUE=y
@@ -30,22 +32,26 @@
 # CONFIG_BSD_PROCESS_ACCT_V3 is not set
 CONFIG_SYSCTL=y
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 CONFIG_HOTPLUG=y
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -59,6 +65,24 @@
 CONFIG_KMOD=y
 
 #
+# Block layer
+#
+# CONFIG_LBD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
 # System type
 #
 # CONFIG_SH_SOLUTION_ENGINE is not set
@@ -68,9 +92,7 @@
 # CONFIG_SH_7751_SYSTEMH is not set
 # CONFIG_SH_STB1_HARP is not set
 # CONFIG_SH_STB1_OVERDRIVE is not set
-# CONFIG_SH_HP620 is not set
-# CONFIG_SH_HP680 is not set
-# CONFIG_SH_HP690 is not set
+# CONFIG_SH_HP6XX is not set
 # CONFIG_SH_CQREEK is not set
 # CONFIG_SH_DMIDA is not set
 # CONFIG_SH_EC3104 is not set
@@ -87,47 +109,93 @@
 # CONFIG_SH_RTS7751R2D is not set
 # CONFIG_SH_EDOSK7705 is not set
 # CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+# CONFIG_SH_TITAN is not set
 # CONFIG_SH_UNKNOWN is not set
-# CONFIG_CPU_SH2 is not set
-# CONFIG_CPU_SH3 is not set
+
+#
+# Processor selection
+#
 CONFIG_CPU_SH4=y
+
+#
+# SH-2 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7300 is not set
 # CONFIG_CPU_SUBTYPE_SH7705 is not set
 # CONFIG_CPU_SUBTYPE_SH7707 is not set
 # CONFIG_CPU_SUBTYPE_SH7708 is not set
 # CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
 CONFIG_CPU_SUBTYPE_SH7751=y
+# CONFIG_CPU_SUBTYPE_SH7751R is not set
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
-# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_ST40STB1 is not set
 # CONFIG_CPU_SUBTYPE_ST40GX1 is not set
-# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
 CONFIG_MMU=y
-CONFIG_CMDLINE_BOOL=y
-CONFIG_CMDLINE="console=ttySC1,115200 mem=64M root=/dev/nfs"
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
 CONFIG_MEMORY_START=0x08000000
 CONFIG_MEMORY_SIZE=0x08000000
-CONFIG_MEMORY_SET=y
-# CONFIG_MEMORY_OVERRIDE is not set
 CONFIG_CF_ENABLER=y
 CONFIG_CF_AREA5=y
 # CONFIG_CF_AREA6 is not set
 CONFIG_CF_BASE_ADDR=0xb4000000
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_SH_RTC=y
 CONFIG_SH_FPU=y
-CONFIG_ZERO_PAGE_OFFSET=0x00004000
-CONFIG_BOOT_LINK_OFFSET=0x00800000
-CONFIG_CPU_LITTLE_ENDIAN=y
-CONFIG_PREEMPT=y
-# CONFIG_UBC_WAKEUP is not set
-# CONFIG_SH_WRITETHROUGH is not set
-# CONFIG_SH_OCRAM is not set
 # CONFIG_SH_STORE_QUEUES is not set
-# CONFIG_SMP is not set
-CONFIG_SH_PCLK_CALC=y
-CONFIG_SH_PCLK_FREQ=49876504
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+# CONFIG_SH_PCLK_FREQ_BOOL is not set
 
 #
 # CPU Frequency scaling
@@ -146,14 +214,29 @@
 CONFIG_HEARTBEAT=y
 
 #
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+# Kernel features
+#
+# CONFIG_KEXEC is not set
+CONFIG_PREEMPT=y
+# CONFIG_SMP is not set
+
+#
+# Boot options
+#
+CONFIG_ZERO_PAGE_OFFSET=0x00004000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttySC1,115200 mem=64M root=/dev/nfs"
+
+#
+# Bus options
 #
 CONFIG_PCI=y
 CONFIG_SH_PCIDMA_NONCOHERENT=y
 CONFIG_PCI_AUTO=y
 CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
 CONFIG_PCI_LEGACY_PROC=y
-CONFIG_PCI_NAMES=y
 
 #
 # PCCARD (PCMCIA/CardBus) support
@@ -161,10 +244,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 CONFIG_HOTPLUG_PCI=m
@@ -180,9 +259,78 @@
 CONFIG_BINFMT_MISC=y
 
 #
-# SH initrd options
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+CONFIG_NET_KEY=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE 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_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
 #
-# CONFIG_EMBEDDED_RAMDISK is not set
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
 
 #
 # Device Drivers
@@ -196,6 +344,11 @@
 # CONFIG_FW_LOADER is not set
 
 #
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
 # Memory Technology Devices (MTD)
 #
 # CONFIG_MTD is not set
@@ -212,7 +365,6 @@
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_CPQ_DA is not set
 # CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
@@ -226,17 +378,7 @@
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_LBD is not set
 # CONFIG_CDROM_PKTCDVD is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
 # CONFIG_ATA_OVER_ETH is not set
 
 #
@@ -272,6 +414,7 @@
 #
 # SCSI device support
 #
+# CONFIG_RAID_ATTRS is not set
 CONFIG_SCSI=m
 CONFIG_SCSI_PROC_FS=y
 
@@ -284,6 +427,7 @@
 CONFIG_BLK_DEV_SR=m
 CONFIG_BLK_DEV_SR_VENDOR=y
 CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
 
 #
 # Some SCSI devices (e.g. CD jukebox) support multiple LUNs
@@ -298,10 +442,12 @@
 # CONFIG_SCSI_SPI_ATTRS is not set
 # CONFIG_SCSI_FC_ATTRS is not set
 # CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
 
 #
 # SCSI low-level drivers
 #
+# CONFIG_ISCSI_TCP is not set
 # CONFIG_BLK_DEV_3W_XXXX_RAID is not set
 # CONFIG_SCSI_3W_9XXX is not set
 # CONFIG_SCSI_ACARD is not set
@@ -313,22 +459,16 @@
 # CONFIG_SCSI_ADVANSYS is not set
 # CONFIG_MEGARAID_NEWGEN is not set
 # CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
 # CONFIG_SCSI_SATA is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_CPQFCTS is not set
 # CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_EATA is not set
 # CONFIG_SCSI_EATA_PIO is not set
 # CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
 # CONFIG_SCSI_IPS is not set
 # CONFIG_SCSI_INITIO is not set
 # CONFIG_SCSI_INIA100 is not set
 # CONFIG_SCSI_SYM53C8XX_2 is not set
 # CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_PCI2000 is not set
-# CONFIG_SCSI_PCI2220I is not set
-# CONFIG_SCSI_QLOGIC_ISP is not set
 # CONFIG_SCSI_QLOGIC_FC is not set
 # CONFIG_SCSI_QLOGIC_1280 is not set
 CONFIG_SCSI_QLA2XXX=m
@@ -337,6 +477,8 @@
 # CONFIG_SCSI_QLA2300 is not set
 # CONFIG_SCSI_QLA2322 is not set
 # CONFIG_SCSI_QLA6312 is not set
+# CONFIG_SCSI_QLA24XX is not set
+# CONFIG_SCSI_LPFC is not set
 # CONFIG_SCSI_DC395x is not set
 # CONFIG_SCSI_DC390T is not set
 # CONFIG_SCSI_NSP32 is not set
@@ -351,6 +493,9 @@
 # Fusion MPT device support
 #
 # CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -363,73 +508,8 @@
 # CONFIG_I2O is not set
 
 #
-# Networking support
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-# CONFIG_PACKET_MMAP is not set
-# CONFIG_NETLINK_DEV is not set
-CONFIG_UNIX=y
-CONFIG_NET_KEY=y
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-CONFIG_IP_PNP_BOOTP=y
-CONFIG_IP_PNP_RARP=y
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-# CONFIG_SYN_COOKIES is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_TUNNEL is not set
-CONFIG_IP_TCPDIAG=y
-# CONFIG_IP_TCPDIAG_IPV6 is not set
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
-CONFIG_XFRM=y
-# CONFIG_XFRM_USER is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
+# Network device support
 #
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE 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_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-# CONFIG_NET_CLS_ROUTE is not set
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -442,6 +522,11 @@
 # CONFIG_ARCNET is not set
 
 #
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -449,6 +534,7 @@
 # CONFIG_STNIC 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_SMC91X is not set
 
@@ -457,6 +543,7 @@
 #
 # CONFIG_NET_TULIP is not set
 # CONFIG_HP100 is not set
+# CONFIG_NE2000 is not set
 CONFIG_NET_PCI=y
 # CONFIG_PCNET32 is not set
 # CONFIG_AMD8111_ETH is not set
@@ -487,13 +574,17 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 # CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
 
 #
 # Ethernet (10000 Mbit)
 #
+# CONFIG_CHELSIO_T1 is not set
 # CONFIG_IXGB is not set
 # CONFIG_S2IO is not set
 
@@ -518,6 +609,8 @@
 # CONFIG_NET_FC is not set
 # CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
@@ -547,14 +640,6 @@
 # CONFIG_INPUT_EVBUG is not set
 
 #
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-# CONFIG_SERIO is not set
-# CONFIG_SERIO_I8042 is not set
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -564,6 +649,12 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -585,6 +676,7 @@
 CONFIG_SERIAL_SH_SCI_CONSOLE=y
 CONFIG_SERIAL_CORE=y
 CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -625,6 +717,12 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -635,10 +733,21 @@
 # CONFIG_W1 is not set
 
 #
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
 # Misc devices
 #
 
 #
+# Multimedia Capabilities Port drivers
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -656,7 +765,6 @@
 #
 # Console display driver support
 #
-# CONFIG_VGA_CONSOLE is not set
 CONFIG_DUMMY_CONSOLE=y
 
 #
@@ -667,12 +775,12 @@
 #
 # USB support
 #
-# CONFIG_USB is not set
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
 #
 
 #
@@ -691,12 +799,17 @@
 # CONFIG_INFINIBAND is not set
 
 #
+# SN Devices
+#
+
+#
 # 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_FS_XATTR=y
 CONFIG_EXT3_FS_POSIX_ACL=y
@@ -707,17 +820,15 @@
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
 CONFIG_FS_POSIX_ACL=y
-
-#
-# XFS support
-#
 # CONFIG_XFS_FS is not set
 # CONFIG_MINIX_FS is not set
 # CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 CONFIG_AUTOFS_FS=y
 CONFIG_AUTOFS4_FS=y
+# CONFIG_FUSE_FS is not set
 
 #
 # CD-ROM/DVD Filesystems
@@ -745,13 +856,11 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_SYSFS=y
-# CONFIG_DEVFS_FS is not set
-# CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
-# CONFIG_TMPFS_XATTR is not set
 # CONFIG_HUGETLBFS is not set
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
 
 #
 # Miscellaneous filesystems
@@ -775,16 +884,19 @@
 #
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
 CONFIG_NFS_V4=y
 # CONFIG_NFS_DIRECTIO is not set
 CONFIG_NFSD=y
 CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
 # CONFIG_NFSD_V4 is not set
 CONFIG_NFSD_TCP=y
 CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
 CONFIG_LOCKD_V4=y
 CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
 CONFIG_SUNRPC=y
 CONFIG_SUNRPC_GSS=y
 CONFIG_RPCSEC_GSS_KRB5=y
@@ -794,6 +906,7 @@
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
 # CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
 
 #
 # Partition Types
@@ -868,8 +981,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
-CONFIG_DEBUG_PREEMPT=y
+CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_FRAME_POINTER is not set
 CONFIG_SH_STANDARD_BIOS=y
 # CONFIG_EARLY_SCIF_CONSOLE is not set
@@ -894,6 +1008,7 @@
 # CONFIG_CRYPTO_SHA256 is not set
 # CONFIG_CRYPTO_SHA512 is not set
 # CONFIG_CRYPTO_WP512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
 CONFIG_CRYPTO_DES=y
 # CONFIG_CRYPTO_BLOWFISH is not set
 # CONFIG_CRYPTO_TWOFISH is not set
@@ -918,6 +1033,7 @@
 # Library routines
 #
 CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
 CONFIG_CRC32=y
 # CONFIG_LIBCRC32C is not set
 CONFIG_ZLIB_INFLATE=y
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/snapgear_defconfig linux-2.6.17/arch/sh/configs/snapgear_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/snapgear_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/snapgear_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-sh
-# Wed Mar  2 15:09:51 2005
+# Linux kernel version: 2.6.15-sh
+# Wed Jan  4 20:30:46 2006
 #
 CONFIG_SUPERH=y
 CONFIG_UID16=y
@@ -16,33 +16,39 @@
 CONFIG_EXPERIMENTAL=y
 CONFIG_CLEAN_COMPILE=y
 CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
 #
 CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
 CONFIG_SWAP=y
 # CONFIG_SYSVIPC is not set
 # CONFIG_POSIX_MQUEUE is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 # CONFIG_SYSCTL is not set
 # CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 CONFIG_KOBJECT_UEVENT=y
 # CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
 # CONFIG_EMBEDDED is not set
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -50,6 +56,24 @@
 # CONFIG_MODULES is not set
 
 #
+# Block layer
+#
+# CONFIG_LBD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
 # System type
 #
 # CONFIG_SH_SOLUTION_ENGINE is not set
@@ -59,9 +83,7 @@
 # CONFIG_SH_7751_SYSTEMH is not set
 # CONFIG_SH_STB1_HARP is not set
 # CONFIG_SH_STB1_OVERDRIVE is not set
-# CONFIG_SH_HP620 is not set
-# CONFIG_SH_HP680 is not set
-# CONFIG_SH_HP690 is not set
+# CONFIG_SH_HP6XX is not set
 # CONFIG_SH_CQREEK is not set
 # CONFIG_SH_DMIDA is not set
 # CONFIG_SH_EC3104 is not set
@@ -78,42 +100,89 @@
 # CONFIG_SH_RTS7751R2D is not set
 # CONFIG_SH_EDOSK7705 is not set
 # CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+# CONFIG_SH_TITAN is not set
 # CONFIG_SH_UNKNOWN is not set
-# CONFIG_CPU_SH2 is not set
-# CONFIG_CPU_SH3 is not set
+
+#
+# Processor selection
+#
 CONFIG_CPU_SH4=y
+
+#
+# SH-2 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7300 is not set
 # CONFIG_CPU_SUBTYPE_SH7705 is not set
 # CONFIG_CPU_SUBTYPE_SH7707 is not set
 # CONFIG_CPU_SUBTYPE_SH7708 is not set
 # CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
 CONFIG_CPU_SUBTYPE_SH7751=y
+CONFIG_CPU_SUBTYPE_SH7751R=y
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
-# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_ST40STB1 is not set
 # CONFIG_CPU_SUBTYPE_ST40GX1 is not set
-# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
 CONFIG_MMU=y
-# CONFIG_CMDLINE_BOOL is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
 CONFIG_MEMORY_START=0x08000000
 CONFIG_MEMORY_SIZE=0x01000000
-CONFIG_MEMORY_SET=y
-# CONFIG_MEMORY_OVERRIDE is not set
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_SH_RTC=y
 CONFIG_SH_FPU=y
-CONFIG_ZERO_PAGE_OFFSET=0x00001000
-CONFIG_BOOT_LINK_OFFSET=0x00800000
-CONFIG_CPU_LITTLE_ENDIAN=y
-# CONFIG_PREEMPT is not set
-# CONFIG_UBC_WAKEUP is not set
-# CONFIG_SH_WRITETHROUGH is not set
-# CONFIG_SH_OCRAM is not set
 # CONFIG_SH_STORE_QUEUES is not set
-# CONFIG_SMP is not set
-CONFIG_SH_PCLK_CALC=y
-CONFIG_SH_PCLK_FREQ=60013568
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+# CONFIG_SH_PCLK_FREQ_BOOL is not set
 
 #
 # CPU Frequency scaling
@@ -133,14 +202,28 @@
 # CONFIG_HD6446X_SERIES is not set
 
 #
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+# Kernel features
+#
+# CONFIG_KEXEC is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_SMP is not set
+
+#
+# Boot options
+#
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+# CONFIG_CMDLINE_BOOL is not set
+
+#
+# Bus options
 #
 CONFIG_PCI=y
 # CONFIG_SH_PCIDMA_NONCOHERENT is not set
 CONFIG_PCI_AUTO=y
 CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
 # CONFIG_PCI_LEGACY_PROC is not set
-CONFIG_PCI_NAMES=y
 
 #
 # PCCARD (PCMCIA/CardBus) support
@@ -148,10 +231,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -164,9 +243,74 @@
 # CONFIG_BINFMT_MISC is not set
 
 #
-# SH initrd options
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_PACKET is not set
+# CONFIG_UNIX is not set
+# 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=y
+CONFIG_IP_PNP_DHCP=y
+# CONFIG_IP_PNP_BOOTP is not set
+# CONFIG_IP_PNP_RARP 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_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE 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_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
 #
-# CONFIG_EMBEDDED_RAMDISK is not set
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
 
 #
 # Device Drivers
@@ -180,6 +324,11 @@
 # CONFIG_FW_LOADER is not set
 
 #
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
 # Memory Technology Devices (MTD)
 #
 # CONFIG_MTD is not set
@@ -196,7 +345,6 @@
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_CPQ_DA is not set
 # CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
@@ -209,17 +357,7 @@
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=4096
 CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_LBD is not set
 # CONFIG_CDROM_PKTCDVD is not set
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
 # CONFIG_ATA_OVER_ETH is not set
 
 #
@@ -230,6 +368,7 @@
 #
 # SCSI device support
 #
+# CONFIG_RAID_ATTRS is not set
 # CONFIG_SCSI is not set
 
 #
@@ -240,6 +379,7 @@
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -252,69 +392,8 @@
 # CONFIG_I2O is not set
 
 #
-# Networking support
-#
-CONFIG_NET=y
-
-#
-# Networking options
-#
-# CONFIG_PACKET is not set
-# CONFIG_NETLINK_DEV is not set
-# CONFIG_UNIX is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-# CONFIG_IP_MULTICAST is not set
-# CONFIG_IP_ADVANCED_ROUTER is not set
-CONFIG_IP_PNP=y
-CONFIG_IP_PNP_DHCP=y
-# CONFIG_IP_PNP_BOOTP is not set
-# CONFIG_IP_PNP_RARP 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_TUNNEL is not set
-CONFIG_IP_TCPDIAG=y
-# CONFIG_IP_TCPDIAG_IPV6 is not set
-# CONFIG_IPV6 is not set
-# CONFIG_NETFILTER is not set
-
-#
-# SCTP Configuration (EXPERIMENTAL)
-#
-# CONFIG_IP_SCTP is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE 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_NET_DIVERT is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-
-#
-# QoS and/or fair queueing
-#
-# CONFIG_NET_SCHED is not set
-# CONFIG_NET_CLS_ROUTE is not set
-
+# Network device support
 #
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_IRDA is not set
-# CONFIG_BT is not set
 CONFIG_NETDEVICES=y
 # CONFIG_DUMMY is not set
 # CONFIG_BONDING is not set
@@ -327,6 +406,11 @@
 # CONFIG_ARCNET is not set
 
 #
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
 # Ethernet (10 or 100Mbit)
 #
 CONFIG_NET_ETHERNET=y
@@ -334,6 +418,7 @@
 # CONFIG_STNIC 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_SMC91X is not set
 
@@ -342,6 +427,7 @@
 #
 # CONFIG_NET_TULIP is not set
 # CONFIG_HP100 is not set
+# CONFIG_NE2000 is not set
 CONFIG_NET_PCI=y
 # CONFIG_PCNET32 is not set
 # CONFIG_AMD8111_ETH is not set
@@ -376,13 +462,17 @@
 # CONFIG_HAMACHI is not set
 # CONFIG_YELLOWFIN is not set
 # CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
 # CONFIG_SK98LIN is not set
 # CONFIG_VIA_VELOCITY is not set
 # CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
 
 #
 # Ethernet (10000 Mbit)
 #
+# CONFIG_CHELSIO_T1 is not set
 # CONFIG_IXGB is not set
 # CONFIG_S2IO is not set
 
@@ -406,6 +496,8 @@
 # CONFIG_SLIP is not set
 # CONFIG_SHAPER is not set
 # CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
 
 #
 # ISDN subsystem
@@ -435,18 +527,6 @@
 # CONFIG_INPUT_EVBUG is not set
 
 #
-# Input I/O drivers
-#
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-CONFIG_SERIO_SERPORT=y
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PCIPS2 is not set
-# CONFIG_SERIO_RAW is not set
-
-#
 # Input Device Drivers
 #
 # CONFIG_INPUT_KEYBOARD is not set
@@ -456,6 +536,16 @@
 # CONFIG_INPUT_MISC is not set
 
 #
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_I8042=y
+CONFIG_SERIO_SERPORT=y
+# CONFIG_SERIO_PCIPS2 is not set
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
 # Character devices
 #
 CONFIG_VT=y
@@ -472,6 +562,7 @@
 # Non-8250 serial port support
 #
 # CONFIG_SERIAL_SH_SCI is not set
+# CONFIG_SERIAL_JSM is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -498,6 +589,12 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -508,10 +605,21 @@
 # CONFIG_W1 is not set
 
 #
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
 # Misc devices
 #
 
 #
+# Multimedia Capabilities Port drivers
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -529,7 +637,6 @@
 #
 # Console display driver support
 #
-CONFIG_VGA_CONSOLE=y
 CONFIG_DUMMY_CONSOLE=y
 
 #
@@ -540,12 +647,12 @@
 #
 # USB support
 #
-# CONFIG_USB is not set
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
 #
 
 #
@@ -564,25 +671,29 @@
 # CONFIG_INFINIBAND is not set
 
 #
+# SN Devices
+#
+
+#
 # File systems
 #
 CONFIG_EXT2_FS=y
 # CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
 # CONFIG_EXT3_FS is not set
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
-
-#
-# XFS support
-#
+# CONFIG_FS_POSIX_ACL is not set
 # CONFIG_XFS_FS is not set
 # CONFIG_MINIX_FS is not set
 CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 # CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
 
 #
 # CD-ROM/DVD Filesystems
@@ -603,15 +714,11 @@
 CONFIG_PROC_FS=y
 # CONFIG_PROC_KCORE is not set
 CONFIG_SYSFS=y
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
-# CONFIG_TMPFS_XATTR is not set
 # CONFIG_HUGETLBFS is not set
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
 
 #
 # Miscellaneous filesystems
@@ -635,12 +742,14 @@
 #
 CONFIG_NFS_FS=y
 CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
 # CONFIG_NFS_V4 is not set
 # CONFIG_NFS_DIRECTIO is not set
 # CONFIG_NFSD is not set
 CONFIG_ROOT_NFS=y
 CONFIG_LOCKD=y
 CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
 CONFIG_SUNRPC=y
 # CONFIG_RPCSEC_GSS_KRB5 is not set
 # CONFIG_RPCSEC_GSS_SPKM3 is not set
@@ -649,6 +758,7 @@
 # CONFIG_NCP_FS is not set
 # CONFIG_CODA_FS is not set
 # CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
 
 #
 # Partition Types
@@ -669,7 +779,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_FRAME_POINTER is not set
 # CONFIG_SH_STANDARD_BIOS is not set
 # CONFIG_EARLY_SCIF_CONSOLE is not set
@@ -694,6 +806,7 @@
 # Library routines
 #
 # CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
 CONFIG_CRC32=y
 # CONFIG_LIBCRC32C is not set
 CONFIG_ZLIB_INFLATE=y
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/systemh_defconfig linux-2.6.17/arch/sh/configs/systemh_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/systemh_defconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/systemh_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -1,7 +1,7 @@
 #
 # Automatically generated make config: don't edit
-# Linux kernel version: 2.6.11-sh
-# Wed Mar  2 15:09:53 2005
+# Linux kernel version: 2.6.15-sh
+# Wed Jan  4 20:44:53 2006
 #
 CONFIG_SUPERH=y
 CONFIG_UID16=y
@@ -18,31 +18,36 @@
 CONFIG_BROKEN=y
 CONFIG_BROKEN_ON_SMP=y
 CONFIG_LOCK_KERNEL=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
 
 #
 # General setup
 #
 CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
 CONFIG_SWAP=y
 # CONFIG_SYSVIPC is not set
 # CONFIG_BSD_PROCESS_ACCT is not set
 # CONFIG_SYSCTL is not set
-# CONFIG_AUDIT is not set
-CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_HOTPLUG is not set
 # CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_EMBEDDED=y
 CONFIG_KALLSYMS=y
 # CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
 CONFIG_FUTEX=y
 CONFIG_EPOLL=y
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
 CONFIG_SHMEM=y
 CONFIG_CC_ALIGN_FUNCTIONS=0
 CONFIG_CC_ALIGN_LABELS=0
 CONFIG_CC_ALIGN_LOOPS=0
 CONFIG_CC_ALIGN_JUMPS=0
 # CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
 
 #
 # Loadable module support
@@ -56,6 +61,24 @@
 # CONFIG_KMOD is not set
 
 #
+# Block layer
+#
+# CONFIG_LBD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
 # System type
 #
 # CONFIG_SH_SOLUTION_ENGINE is not set
@@ -65,9 +88,7 @@
 CONFIG_SH_7751_SYSTEMH=y
 # CONFIG_SH_STB1_HARP is not set
 # CONFIG_SH_STB1_OVERDRIVE is not set
-# CONFIG_SH_HP620 is not set
-# CONFIG_SH_HP680 is not set
-# CONFIG_SH_HP690 is not set
+# CONFIG_SH_HP6XX is not set
 # CONFIG_SH_CQREEK is not set
 # CONFIG_SH_DMIDA is not set
 # CONFIG_SH_EC3104 is not set
@@ -84,41 +105,89 @@
 # CONFIG_SH_RTS7751R2D is not set
 # CONFIG_SH_EDOSK7705 is not set
 # CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+# CONFIG_SH_TITAN is not set
 # CONFIG_SH_UNKNOWN is not set
-# CONFIG_CPU_SH2 is not set
-# CONFIG_CPU_SH3 is not set
+
+#
+# Processor selection
+#
 CONFIG_CPU_SH4=y
+
+#
+# SH-2 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7300 is not set
 # CONFIG_CPU_SUBTYPE_SH7705 is not set
 # CONFIG_CPU_SUBTYPE_SH7707 is not set
 # CONFIG_CPU_SUBTYPE_SH7708 is not set
 # CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
 CONFIG_CPU_SUBTYPE_SH7751=y
+CONFIG_CPU_SUBTYPE_SH7751R=y
 # CONFIG_CPU_SUBTYPE_SH7760 is not set
-# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
 # CONFIG_CPU_SUBTYPE_ST40STB1 is not set
 # CONFIG_CPU_SUBTYPE_ST40GX1 is not set
-# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
 CONFIG_MMU=y
-# CONFIG_CMDLINE_BOOL is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
 CONFIG_MEMORY_START=0x0c000000
 CONFIG_MEMORY_SIZE=0x00400000
-# CONFIG_MEMORY_OVERRIDE is not set
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
 CONFIG_SH_RTC=y
 CONFIG_SH_FPU=y
-CONFIG_ZERO_PAGE_OFFSET=0x00001000
-CONFIG_BOOT_LINK_OFFSET=0x00800000
-CONFIG_CPU_LITTLE_ENDIAN=y
-CONFIG_PREEMPT=y
-# CONFIG_UBC_WAKEUP is not set
-# CONFIG_SH_WRITETHROUGH is not set
-# CONFIG_SH_OCRAM is not set
 # CONFIG_SH_STORE_QUEUES is not set
-# CONFIG_SMP is not set
-CONFIG_SH_PCLK_CALC=y
-CONFIG_SH_PCLK_FREQ=49876504
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+# CONFIG_SH_PCLK_FREQ_BOOL is not set
 
 #
 # CPU Frequency scaling
@@ -136,14 +205,28 @@
 # CONFIG_HD6446X_SERIES is not set
 
 #
-# Bus options (PCI, PCMCIA, EISA, MCA, ISA)
+# Kernel features
+#
+# CONFIG_KEXEC is not set
+CONFIG_PREEMPT=y
+# CONFIG_SMP is not set
+
+#
+# Boot options
+#
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x00800000
+# CONFIG_UBC_WAKEUP is not set
+# CONFIG_CMDLINE_BOOL is not set
+
+#
+# Bus options
 #
 CONFIG_PCI=y
 # CONFIG_SH_PCIDMA_NONCOHERENT is not set
 CONFIG_PCI_AUTO=y
 CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
 CONFIG_PCI_LEGACY_PROC=y
-CONFIG_PCI_NAMES=y
 
 #
 # PCCARD (PCMCIA/CardBus) support
@@ -151,10 +234,6 @@
 # CONFIG_PCCARD is not set
 
 #
-# PC-card bridges
-#
-
-#
 # PCI Hotplug Support
 #
 # CONFIG_HOTPLUG_PCI is not set
@@ -167,9 +246,9 @@
 # CONFIG_BINFMT_MISC is not set
 
 #
-# SH initrd options
+# Networking
 #
-# CONFIG_EMBEDDED_RAMDISK is not set
+# CONFIG_NET is not set
 
 #
 # Device Drivers
@@ -183,6 +262,10 @@
 # CONFIG_FW_LOADER is not set
 
 #
+# Connector - unified userspace <-> kernelspace linker
+#
+
+#
 # Memory Technology Devices (MTD)
 #
 # CONFIG_MTD is not set
@@ -199,7 +282,6 @@
 #
 # Block devices
 #
-# CONFIG_BLK_DEV_FD is not set
 # CONFIG_BLK_CPQ_DA is not set
 # CONFIG_BLK_CPQ_CISS_DA is not set
 # CONFIG_BLK_DEV_DAC960 is not set
@@ -211,19 +293,9 @@
 CONFIG_BLK_DEV_RAM_COUNT=16
 CONFIG_BLK_DEV_RAM_SIZE=1024
 CONFIG_BLK_DEV_INITRD=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_LBD is not set
 # CONFIG_CDROM_PKTCDVD is not set
 
 #
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-
-#
 # ATA/ATAPI/MFM/RLL support
 #
 # CONFIG_IDE is not set
@@ -231,6 +303,7 @@
 #
 # SCSI device support
 #
+# CONFIG_RAID_ATTRS is not set
 # CONFIG_SCSI is not set
 
 #
@@ -241,6 +314,7 @@
 #
 # Fusion MPT device support
 #
+# CONFIG_FUSION is not set
 
 #
 # IEEE 1394 (FireWire) support
@@ -253,9 +327,8 @@
 # CONFIG_I2O is not set
 
 #
-# Networking support
+# Network device support
 #
-# CONFIG_NET is not set
 # CONFIG_NETPOLL is not set
 # CONFIG_NET_POLL_CONTROLLER is not set
 
@@ -274,25 +347,15 @@
 # CONFIG_INPUT is not set
 
 #
-# Userland interfaces
-#
-
-#
-# Input I/O drivers
+# Hardware I/O ports
 #
-# CONFIG_GAMEPORT is not set
-CONFIG_SOUND_GAMEPORT=y
 CONFIG_SERIO=y
 # CONFIG_SERIO_I8042 is not set
 # CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
 # CONFIG_SERIO_PCIPS2 is not set
 # CONFIG_SERIO_LIBPS2 is not set
 # CONFIG_SERIO_RAW is not set
-
-#
-# Input Device Drivers
-#
+# CONFIG_GAMEPORT is not set
 
 #
 # Character devices
@@ -309,6 +372,7 @@
 # Non-8250 serial port support
 #
 # CONFIG_SERIAL_SH_SCI is not set
+# CONFIG_SERIAL_JSM is not set
 CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
@@ -335,6 +399,12 @@
 # CONFIG_RAW_DRIVER is not set
 
 #
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
 # I2C support
 #
 # CONFIG_I2C is not set
@@ -345,10 +415,21 @@
 # CONFIG_W1 is not set
 
 #
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
 # Misc devices
 #
 
 #
+# Multimedia Capabilities Port drivers
+#
+
+#
 # Multimedia devices
 #
 # CONFIG_VIDEO_DEV is not set
@@ -370,12 +451,12 @@
 #
 # USB support
 #
-# CONFIG_USB is not set
 CONFIG_USB_ARCH_HAS_HCD=y
 CONFIG_USB_ARCH_HAS_OHCI=y
+# CONFIG_USB is not set
 
 #
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
 #
 
 #
@@ -394,6 +475,10 @@
 # CONFIG_INFINIBAND is not set
 
 #
+# SN Devices
+#
+
+#
 # File systems
 #
 # CONFIG_EXT2_FS is not set
@@ -401,17 +486,16 @@
 # CONFIG_JBD is not set
 # CONFIG_REISERFS_FS is not set
 # CONFIG_JFS_FS is not set
-
-#
-# XFS support
-#
+# CONFIG_FS_POSIX_ACL is not set
 # CONFIG_XFS_FS is not set
 # CONFIG_MINIX_FS is not set
 CONFIG_ROMFS_FS=y
+CONFIG_INOTIFY=y
 # CONFIG_QUOTA is not set
 CONFIG_DNOTIFY=y
 # CONFIG_AUTOFS_FS is not set
 # CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
 
 #
 # CD-ROM/DVD Filesystems
@@ -432,15 +516,11 @@
 CONFIG_PROC_FS=y
 CONFIG_PROC_KCORE=y
 CONFIG_SYSFS=y
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DEVFS_DEBUG is not set
-# CONFIG_DEVPTS_FS_XATTR is not set
 CONFIG_TMPFS=y
-# CONFIG_TMPFS_XATTR is not set
 # CONFIG_HUGETLBFS is not set
 # CONFIG_HUGETLB_PAGE is not set
 CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
 
 #
 # Miscellaneous filesystems
@@ -478,8 +558,9 @@
 #
 # Kernel hacking
 #
+# CONFIG_PRINTK_TIME is not set
 # CONFIG_DEBUG_KERNEL is not set
-CONFIG_DEBUG_PREEMPT=y
+CONFIG_LOG_BUF_SHIFT=14
 # CONFIG_FRAME_POINTER is not set
 # CONFIG_SH_STANDARD_BIOS is not set
 # CONFIG_EARLY_SCIF_CONSOLE is not set
@@ -504,6 +585,7 @@
 # Library routines
 #
 # CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
 CONFIG_CRC32=y
 # CONFIG_LIBCRC32C is not set
 CONFIG_ZLIB_INFLATE=y
diff -ruN linux-2.6.17-vanilla/arch/sh/configs/titan_defconfig linux-2.6.17/arch/sh/configs/titan_defconfig
--- linux-2.6.17-vanilla/arch/sh/configs/titan_defconfig	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/configs/titan_defconfig	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,1551 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.17
+# Thu Jul  6 12:42:07 2006
+#
+CONFIG_SUPERH=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_POSIX_MQUEUE=y
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+# CONFIG_RELAY is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_UID16=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+# CONFIG_EMBEDDED is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+# CONFIG_KALLSYMS_EXTRA_PASS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SHMEM=y
+CONFIG_SLAB=y
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+# CONFIG_SLOB is not set
+CONFIG_OBSOLETE_INTERMODULE=m
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+CONFIG_MODULE_FORCE_UNLOAD=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_KMOD=y
+
+#
+# Block layer
+#
+# CONFIG_LBD is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_LSF is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# System type
+#
+# CONFIG_SH_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SOLUTION_ENGINE is not set
+# CONFIG_SH_7300_SOLUTION_ENGINE is not set
+# CONFIG_SH_73180_SOLUTION_ENGINE is not set
+# CONFIG_SH_7751_SYSTEMH is not set
+# CONFIG_SH_STB1_HARP is not set
+# CONFIG_SH_STB1_OVERDRIVE is not set
+# CONFIG_SH_HP6XX is not set
+# CONFIG_SH_CQREEK is not set
+# CONFIG_SH_DMIDA is not set
+# CONFIG_SH_EC3104 is not set
+# CONFIG_SH_SATURN is not set
+# CONFIG_SH_DREAMCAST is not set
+# CONFIG_SH_CAT68701 is not set
+# CONFIG_SH_BIGSUR is not set
+# CONFIG_SH_SH2000 is not set
+# CONFIG_SH_ADX is not set
+# CONFIG_SH_MPC1211 is not set
+# CONFIG_SH_SH03 is not set
+# CONFIG_SH_SECUREEDGE5410 is not set
+# CONFIG_SH_HS7751RVOIP is not set
+# CONFIG_SH_RTS7751R2D is not set
+# CONFIG_SH_R7780RP is not set
+# CONFIG_SH_EDOSK7705 is not set
+# CONFIG_SH_SH4202_MICRODEV is not set
+# CONFIG_SH_LANDISK is not set
+CONFIG_SH_TITAN=y
+# CONFIG_SH_UNKNOWN is not set
+
+#
+# Processor selection
+#
+CONFIG_CPU_SH4=y
+
+#
+# SH-2 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7604 is not set
+
+#
+# SH-3 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7300 is not set
+# CONFIG_CPU_SUBTYPE_SH7705 is not set
+# CONFIG_CPU_SUBTYPE_SH7707 is not set
+# CONFIG_CPU_SUBTYPE_SH7708 is not set
+# CONFIG_CPU_SUBTYPE_SH7709 is not set
+
+#
+# SH-4 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH7750 is not set
+# CONFIG_CPU_SUBTYPE_SH7091 is not set
+# CONFIG_CPU_SUBTYPE_SH7750R is not set
+# CONFIG_CPU_SUBTYPE_SH7750S is not set
+CONFIG_CPU_SUBTYPE_SH7751=y
+CONFIG_CPU_SUBTYPE_SH7751R=y
+# CONFIG_CPU_SUBTYPE_SH7760 is not set
+# CONFIG_CPU_SUBTYPE_SH4_202 is not set
+
+#
+# ST40 Processor Support
+#
+# CONFIG_CPU_SUBTYPE_ST40STB1 is not set
+# CONFIG_CPU_SUBTYPE_ST40GX1 is not set
+
+#
+# SH-4A Processor Support
+#
+# CONFIG_CPU_SUBTYPE_SH73180 is not set
+# CONFIG_CPU_SUBTYPE_SH7770 is not set
+# CONFIG_CPU_SUBTYPE_SH7780 is not set
+
+#
+# Memory management options
+#
+CONFIG_MMU=y
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+
+#
+# Cache configuration
+#
+# CONFIG_SH_DIRECT_MAPPED is not set
+# CONFIG_SH_WRITETHROUGH is not set
+# CONFIG_SH_OCRAM is not set
+CONFIG_MEMORY_START=0x08030000
+CONFIG_MEMORY_SIZE=0x7fd0000
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
+CONFIG_SH_RTC=y
+CONFIG_SH_FPU=y
+# CONFIG_SH_STORE_QUEUES is not set
+CONFIG_CPU_HAS_INTEVT=y
+CONFIG_CPU_HAS_SR_RB=y
+
+#
+# Timer support
+#
+CONFIG_SH_TMU=y
+CONFIG_SH_PCLK_FREQ=30000000
+
+#
+# CPU Frequency scaling
+#
+# CONFIG_CPU_FREQ is not set
+
+#
+# DMA support
+#
+CONFIG_SH_DMA=y
+CONFIG_NR_ONCHIP_DMA_CHANNELS=8
+# CONFIG_NR_DMA_CHANNELS_BOOL is not set
+
+#
+# Companion Chips
+#
+# CONFIG_HD6446X_SERIES is not set
+
+#
+# Kernel features
+#
+# CONFIG_KEXEC is not set
+# CONFIG_PREEMPT is not set
+# CONFIG_SMP is not set
+
+#
+# Boot options
+#
+CONFIG_ZERO_PAGE_OFFSET=0x00001000
+CONFIG_BOOT_LINK_OFFSET=0x009e0000
+# CONFIG_UBC_WAKEUP is not set
+CONFIG_CMDLINE_BOOL=y
+CONFIG_CMDLINE="console=ttySC1,38400N81 root=/dev/nfs ip=:::::eth1:autoconf"
+
+#
+# Bus options
+#
+CONFIG_PCI=y
+CONFIG_SH_PCIDMA_NONCOHERENT=y
+CONFIG_PCI_AUTO=y
+CONFIG_PCI_AUTO_UPDATE_RESOURCES=y
+# CONFIG_PCI_DEBUG is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# PCI Hotplug Support
+#
+CONFIG_HOTPLUG_PCI=y
+# CONFIG_HOTPLUG_PCI_FAKE is not set
+# CONFIG_HOTPLUG_PCI_CPCI is not set
+# CONFIG_HOTPLUG_PCI_SHPC is not set
+
+#
+# Executable file formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_FLAT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options (EXPERIMENTAL)
+#
+# CONFIG_PM is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+# CONFIG_NETDEBUG is not set
+CONFIG_PACKET=y
+CONFIG_PACKET_MMAP=y
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+CONFIG_NET_KEY=y
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+CONFIG_IP_ADVANCED_ROUTER=y
+CONFIG_ASK_IP_FIB_HASH=y
+# CONFIG_IP_FIB_TRIE is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_MULTIPLE_TABLES=y
+# CONFIG_IP_ROUTE_FWMARK is not set
+CONFIG_IP_ROUTE_MULTIPATH=y
+CONFIG_IP_ROUTE_MULTIPATH_CACHED=y
+CONFIG_IP_ROUTE_MULTIPATH_RR=m
+CONFIG_IP_ROUTE_MULTIPATH_RANDOM=m
+CONFIG_IP_ROUTE_MULTIPATH_WRANDOM=m
+CONFIG_IP_ROUTE_MULTIPATH_DRR=m
+# CONFIG_IP_ROUTE_VERBOSE is not set
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+CONFIG_NET_IPIP=y
+CONFIG_NET_IPGRE=y
+CONFIG_NET_IPGRE_BROADCAST=y
+CONFIG_IP_MROUTE=y
+CONFIG_IP_PIMSM_V1=y
+CONFIG_IP_PIMSM_V2=y
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+CONFIG_INET_AH=y
+CONFIG_INET_ESP=y
+CONFIG_INET_IPCOMP=y
+CONFIG_INET_XFRM_TUNNEL=y
+CONFIG_INET_TUNNEL=y
+CONFIG_INET_DIAG=m
+CONFIG_INET_TCP_DIAG=m
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+
+#
+# IP: Virtual Server Configuration
+#
+# CONFIG_IP_VS is not set
+CONFIG_IPV6=y
+CONFIG_IPV6_PRIVACY=y
+# CONFIG_IPV6_ROUTER_PREF is not set
+CONFIG_INET6_AH=y
+CONFIG_INET6_ESP=y
+CONFIG_INET6_IPCOMP=y
+CONFIG_INET6_XFRM_TUNNEL=y
+CONFIG_INET6_TUNNEL=y
+CONFIG_IPV6_TUNNEL=y
+CONFIG_NETFILTER=y
+# CONFIG_NETFILTER_DEBUG is not set
+CONFIG_BRIDGE_NETFILTER=y
+
+#
+# Core Netfilter Configuration
+#
+CONFIG_NETFILTER_NETLINK=m
+CONFIG_NETFILTER_NETLINK_QUEUE=m
+CONFIG_NETFILTER_NETLINK_LOG=m
+CONFIG_NETFILTER_XTABLES=m
+CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
+CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
+CONFIG_NETFILTER_XT_TARGET_MARK=m
+CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
+CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
+CONFIG_NETFILTER_XT_MATCH_COMMENT=m
+CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
+CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
+CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
+CONFIG_NETFILTER_XT_MATCH_DCCP=m
+CONFIG_NETFILTER_XT_MATCH_ESP=m
+CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_LENGTH=m
+CONFIG_NETFILTER_XT_MATCH_LIMIT=m
+CONFIG_NETFILTER_XT_MATCH_MAC=m
+CONFIG_NETFILTER_XT_MATCH_MARK=m
+CONFIG_NETFILTER_XT_MATCH_POLICY=m
+CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
+CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
+CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
+CONFIG_NETFILTER_XT_MATCH_REALM=m
+CONFIG_NETFILTER_XT_MATCH_SCTP=m
+CONFIG_NETFILTER_XT_MATCH_STATE=m
+CONFIG_NETFILTER_XT_MATCH_STRING=m
+CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
+
+#
+# IP: Netfilter Configuration
+#
+CONFIG_IP_NF_CONNTRACK=m
+CONFIG_IP_NF_CT_ACCT=y
+CONFIG_IP_NF_CONNTRACK_MARK=y
+CONFIG_IP_NF_CONNTRACK_EVENTS=y
+CONFIG_IP_NF_CONNTRACK_NETLINK=m
+# CONFIG_IP_NF_CT_PROTO_SCTP is not set
+CONFIG_IP_NF_FTP=m
+CONFIG_IP_NF_IRC=m
+CONFIG_IP_NF_NETBIOS_NS=m
+CONFIG_IP_NF_TFTP=m
+# CONFIG_IP_NF_AMANDA is not set
+CONFIG_IP_NF_PPTP=m
+CONFIG_IP_NF_H323=m
+CONFIG_IP_NF_QUEUE=m
+CONFIG_IP_NF_IPTABLES=m
+CONFIG_IP_NF_MATCH_IPRANGE=m
+CONFIG_IP_NF_MATCH_TOS=m
+CONFIG_IP_NF_MATCH_RECENT=m
+CONFIG_IP_NF_MATCH_ECN=m
+CONFIG_IP_NF_MATCH_DSCP=m
+CONFIG_IP_NF_MATCH_AH=m
+CONFIG_IP_NF_MATCH_TTL=m
+CONFIG_IP_NF_MATCH_OWNER=m
+CONFIG_IP_NF_MATCH_ADDRTYPE=m
+CONFIG_IP_NF_MATCH_HASHLIMIT=m
+CONFIG_IP_NF_FILTER=m
+CONFIG_IP_NF_TARGET_REJECT=m
+CONFIG_IP_NF_TARGET_LOG=m
+CONFIG_IP_NF_TARGET_ULOG=m
+CONFIG_IP_NF_TARGET_TCPMSS=m
+CONFIG_IP_NF_NAT=m
+CONFIG_IP_NF_NAT_NEEDED=y
+CONFIG_IP_NF_TARGET_MASQUERADE=m
+CONFIG_IP_NF_TARGET_REDIRECT=m
+CONFIG_IP_NF_TARGET_NETMAP=m
+CONFIG_IP_NF_TARGET_SAME=m
+CONFIG_IP_NF_NAT_SNMP_BASIC=m
+CONFIG_IP_NF_NAT_IRC=m
+CONFIG_IP_NF_NAT_FTP=m
+CONFIG_IP_NF_NAT_TFTP=m
+CONFIG_IP_NF_NAT_PPTP=m
+CONFIG_IP_NF_NAT_H323=m
+CONFIG_IP_NF_MANGLE=m
+CONFIG_IP_NF_TARGET_TOS=m
+CONFIG_IP_NF_TARGET_ECN=m
+CONFIG_IP_NF_TARGET_DSCP=m
+CONFIG_IP_NF_TARGET_TTL=m
+CONFIG_IP_NF_TARGET_CLUSTERIP=m
+CONFIG_IP_NF_RAW=m
+CONFIG_IP_NF_ARPTABLES=m
+CONFIG_IP_NF_ARPFILTER=m
+CONFIG_IP_NF_ARP_MANGLE=m
+
+#
+# IPv6: Netfilter Configuration (EXPERIMENTAL)
+#
+CONFIG_IP6_NF_QUEUE=m
+CONFIG_IP6_NF_IPTABLES=m
+CONFIG_IP6_NF_MATCH_RT=m
+CONFIG_IP6_NF_MATCH_OPTS=m
+CONFIG_IP6_NF_MATCH_FRAG=m
+CONFIG_IP6_NF_MATCH_HL=m
+CONFIG_IP6_NF_MATCH_OWNER=m
+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
+CONFIG_IP6_NF_MATCH_AH=m
+CONFIG_IP6_NF_MATCH_EUI64=m
+CONFIG_IP6_NF_FILTER=m
+CONFIG_IP6_NF_TARGET_LOG=m
+CONFIG_IP6_NF_TARGET_REJECT=m
+CONFIG_IP6_NF_MANGLE=m
+CONFIG_IP6_NF_TARGET_HL=m
+CONFIG_IP6_NF_RAW=m
+
+#
+# Bridge: Netfilter Configuration
+#
+# CONFIG_BRIDGE_NF_EBTABLES is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+
+#
+# TIPC Configuration (EXPERIMENTAL)
+#
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+CONFIG_BRIDGE=y
+CONFIG_VLAN_8021Q=y
+# CONFIG_DECNET is not set
+CONFIG_LLC=y
+# 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_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+CONFIG_NET_SCHED=y
+CONFIG_NET_SCH_CLK_JIFFIES=y
+# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
+# CONFIG_NET_SCH_CLK_CPU is not set
+
+#
+# Queueing/Scheduling
+#
+CONFIG_NET_SCH_CBQ=m
+CONFIG_NET_SCH_HTB=m
+CONFIG_NET_SCH_HFSC=m
+CONFIG_NET_SCH_PRIO=m
+CONFIG_NET_SCH_RED=m
+CONFIG_NET_SCH_SFQ=m
+CONFIG_NET_SCH_TEQL=m
+CONFIG_NET_SCH_TBF=m
+CONFIG_NET_SCH_GRED=m
+CONFIG_NET_SCH_DSMARK=m
+CONFIG_NET_SCH_NETEM=m
+CONFIG_NET_SCH_INGRESS=m
+
+#
+# Classification
+#
+CONFIG_NET_CLS=y
+CONFIG_NET_CLS_BASIC=m
+CONFIG_NET_CLS_TCINDEX=m
+CONFIG_NET_CLS_ROUTE4=m
+CONFIG_NET_CLS_ROUTE=y
+CONFIG_NET_CLS_FW=m
+CONFIG_NET_CLS_U32=m
+CONFIG_CLS_U32_PERF=y
+CONFIG_CLS_U32_MARK=y
+CONFIG_NET_CLS_RSVP=m
+CONFIG_NET_CLS_RSVP6=m
+CONFIG_NET_EMATCH=y
+CONFIG_NET_EMATCH_STACK=32
+CONFIG_NET_EMATCH_CMP=m
+CONFIG_NET_EMATCH_NBYTE=m
+CONFIG_NET_EMATCH_U32=m
+CONFIG_NET_EMATCH_META=m
+CONFIG_NET_EMATCH_TEXT=m
+CONFIG_NET_CLS_ACT=y
+CONFIG_NET_ACT_POLICE=m
+CONFIG_NET_ACT_GACT=m
+CONFIG_GACT_PROB=y
+CONFIG_NET_ACT_MIRRED=m
+CONFIG_NET_ACT_IPT=m
+CONFIG_NET_ACT_PEDIT=m
+# CONFIG_NET_ACT_SIMP is not set
+CONFIG_NET_CLS_IND=y
+CONFIG_NET_ESTIMATOR=y
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+CONFIG_IEEE80211=y
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=y
+CONFIG_IEEE80211_CRYPT_CCMP=y
+CONFIG_IEEE80211_CRYPT_TKIP=y
+CONFIG_IEEE80211_SOFTMAC=m
+# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+CONFIG_CONNECTOR=m
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=m
+CONFIG_MTD_DEBUG=y
+CONFIG_MTD_DEBUG_VERBOSE=0
+# CONFIG_MTD_CONCAT is not set
+# CONFIG_MTD_PARTITIONS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=m
+CONFIG_MTD_BLOCK=m
+# CONFIG_MTD_BLOCK_RO is not set
+CONFIG_FTL=m
+CONFIG_NFTL=m
+# CONFIG_NFTL_RW is not set
+CONFIG_INFTL=m
+CONFIG_RFD_FTL=m
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=m
+CONFIG_MTD_JEDECPROBE=m
+CONFIG_MTD_GEN_PROBE=m
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+# CONFIG_MTD_OBSOLETE_CHIPS is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_SOLUTIONENGINE is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_PMC551 is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=m
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+CONFIG_MTD_NAND_IDS=m
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_CPQ_DA is not set
+# CONFIG_BLK_CPQ_CISS_DA is not set
+# CONFIG_BLK_DEV_DAC960 is not set
+CONFIG_BLK_SSFDC=y
+# CONFIG_BLK_DEV_UMEM is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=m
+CONFIG_BLK_DEV_CRYPTOLOOP=m
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_SX8 is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+CONFIG_ATA_OVER_ETH=m
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=m
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+CONFIG_BLK_DEV_SR=m
+# CONFIG_BLK_DEV_SR_VENDOR is not set
+CONFIG_CHR_DEV_SG=m
+# CONFIG_CHR_DEV_SCH is not set
+
+#
+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
+#
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+
+#
+# SCSI Transport Attributes
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
+
+#
+# SCSI low-level drivers
+#
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
+# CONFIG_SCSI_3W_9XXX is not set
+# CONFIG_SCSI_ACARD is not set
+# CONFIG_SCSI_AACRAID is not set
+# CONFIG_SCSI_AIC7XXX is not set
+# CONFIG_SCSI_AIC7XXX_OLD is not set
+# CONFIG_SCSI_AIC79XX is not set
+# CONFIG_SCSI_DPT_I2O is not set
+# CONFIG_MEGARAID_NEWGEN is not set
+# CONFIG_MEGARAID_LEGACY is not set
+# CONFIG_MEGARAID_SAS is not set
+# CONFIG_SCSI_SATA is not set
+# CONFIG_SCSI_DMX3191D is not set
+# CONFIG_SCSI_FUTURE_DOMAIN is not set
+# CONFIG_SCSI_IPS is not set
+# CONFIG_SCSI_INITIO is not set
+# CONFIG_SCSI_INIA100 is not set
+# CONFIG_SCSI_SYM53C8XX_2 is not set
+# CONFIG_SCSI_IPR is not set
+# CONFIG_SCSI_QLOGIC_1280 is not set
+# CONFIG_SCSI_QLA_FC is not set
+# CONFIG_SCSI_LPFC is not set
+# CONFIG_SCSI_DC395x is not set
+# CONFIG_SCSI_DC390T is not set
+# CONFIG_SCSI_NSP32 is not set
+# CONFIG_SCSI_DEBUG is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+# CONFIG_FUSION_SPI is not set
+# CONFIG_FUSION_FC is not set
+# CONFIG_FUSION_SAS is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+# CONFIG_IEEE1394 is not set
+
+#
+# I2O device support
+#
+# CONFIG_I2O is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_IFB is not set
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+CONFIG_TUN=m
+
+#
+# ARCnet devices
+#
+# CONFIG_ARCNET is not set
+
+#
+# PHY device support
+#
+CONFIG_PHYLIB=m
+
+#
+# MII PHY device drivers
+#
+CONFIG_MARVELL_PHY=m
+CONFIG_DAVICOM_PHY=m
+CONFIG_QSEMI_PHY=m
+CONFIG_LXT_PHY=m
+CONFIG_CICADA_PHY=m
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_STNIC 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_SMC91X is not set
+
+#
+# Tulip family network device support
+#
+# CONFIG_NET_TULIP is not set
+# CONFIG_HP100 is not set
+# CONFIG_NE2000 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_B44 is not set
+# CONFIG_FORCEDETH is not set
+# CONFIG_DGRS is not set
+# CONFIG_EEPRO100 is not set
+# CONFIG_E100 is not set
+# CONFIG_FEALNX is not set
+# CONFIG_NATSEMI is not set
+# CONFIG_NE2K_PCI is not set
+# CONFIG_8139CP is not set
+CONFIG_8139TOO=y
+# CONFIG_8139TOO_PIO is not set
+CONFIG_8139TOO_TUNE_TWISTER=y
+# CONFIG_8139TOO_8129 is not set
+CONFIG_8139_OLD_RX_RESET=y
+# CONFIG_SIS900 is not set
+# CONFIG_EPIC100 is not set
+# CONFIG_SUNDANCE is not set
+# CONFIG_TLAN is not set
+# CONFIG_VIA_RHINE is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+# CONFIG_ACENIC is not set
+# CONFIG_DL2K is not set
+# CONFIG_E1000 is not set
+# CONFIG_NS83820 is not set
+# CONFIG_HAMACHI is not set
+# CONFIG_YELLOWFIN is not set
+# CONFIG_R8169 is not set
+# CONFIG_SIS190 is not set
+# CONFIG_SKGE is not set
+# CONFIG_SKY2 is not set
+# CONFIG_SK98LIN is not set
+# CONFIG_VIA_VELOCITY is not set
+# CONFIG_TIGON3 is not set
+# CONFIG_BNX2 is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+# CONFIG_CHELSIO_T1 is not set
+# CONFIG_IXGB is not set
+# CONFIG_S2IO is not set
+
+#
+# Token Ring devices
+#
+# CONFIG_TR is not set
+
+#
+# Wireless LAN (non-hamradio)
+#
+CONFIG_NET_RADIO=y
+CONFIG_NET_WIRELESS_RTNETLINK=y
+
+#
+# Obsolete Wireless cards support (pre-802.11)
+#
+# CONFIG_STRIP is not set
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+# CONFIG_IPW2100 is not set
+# CONFIG_IPW2200 is not set
+# CONFIG_HERMES is not set
+# CONFIG_ATMEL is not set
+
+#
+# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support
+#
+CONFIG_PRISM54=m
+# CONFIG_HOSTAP is not set
+CONFIG_BCM43XX=m
+CONFIG_BCM43XX_DEBUG=y
+CONFIG_BCM43XX_DMA=y
+CONFIG_BCM43XX_PIO=y
+CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
+# CONFIG_BCM43XX_DMA_MODE is not set
+# CONFIG_BCM43XX_PIO_MODE is not set
+CONFIG_NET_WIRELESS=y
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_FDDI is not set
+# CONFIG_HIPPI is not set
+CONFIG_PPP=m
+CONFIG_PPP_MULTILINK=y
+CONFIG_PPP_FILTER=y
+CONFIG_PPP_ASYNC=m
+CONFIG_PPP_SYNC_TTY=m
+CONFIG_PPP_DEFLATE=m
+CONFIG_PPP_BSDCOMP=m
+CONFIG_PPP_MPPE=m
+CONFIG_PPPOE=m
+CONFIG_SLIP=m
+CONFIG_SLIP_COMPRESSED=y
+CONFIG_SLIP_SMART=y
+# CONFIG_SLIP_MODE_SLIP6 is not set
+# CONFIG_NET_FC is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_SH_SCI=y
+CONFIG_SERIAL_SH_SCI_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+# CONFIG_SERIAL_JSM is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_SH_WDT=m
+
+#
+# PCI-based Watchdog Cards
+#
+# CONFIG_PCIPCWATCHDOG is not set
+# CONFIG_WDTPCI is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+# CONFIG_RTC is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+# CONFIG_APPLICOM is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_DRM is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# SPI support
+#
+# CONFIG_SPI is not set
+# CONFIG_SPI_MASTER is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+CONFIG_VIDEO_V4L2=y
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+# CONFIG_USB_DABUSB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Console display driver support
+#
+CONFIG_DUMMY_CONSOLE=y
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+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
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_BANDWIDTH is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+# CONFIG_USB_OTG is not set
+
+#
+# USB Host Controller Drivers
+#
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_SPLIT_ISO is not set
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_ISP116X_HCD is not set
+CONFIG_USB_OHCI_HCD=y
+# CONFIG_USB_OHCI_BIG_ENDIAN is not set
+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
+# CONFIG_USB_UHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+
+#
+# USB Device Class drivers
+#
+CONFIG_USB_ACM=m
+CONFIG_USB_PRINTER=m
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# may also be needed; see USB_STORAGE Help for more information
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_DPCM is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Input Devices
+#
+# CONFIG_USB_HID is not set
+
+#
+# USB HID Boot Protocol drivers
+#
+# CONFIG_USB_KBD is not set
+# CONFIG_USB_MOUSE is not set
+# CONFIG_USB_AIPTEK is not set
+# CONFIG_USB_WACOM is not set
+# CONFIG_USB_ACECAD is not set
+# CONFIG_USB_KBTAB is not set
+# CONFIG_USB_POWERMATE is not set
+# CONFIG_USB_TOUCHSCREEN is not set
+# CONFIG_USB_YEALINK is not set
+# CONFIG_USB_XPAD is not set
+# CONFIG_USB_ATI_REMOTE is not set
+# CONFIG_USB_ATI_REMOTE2 is not set
+# CONFIG_USB_KEYSPAN_REMOTE is not set
+# CONFIG_USB_APPLETOUCH is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_USB_ZD1201 is not set
+CONFIG_USB_MON=y
+
+#
+# USB port drivers
+#
+
+#
+# USB Serial Converter support
+#
+CONFIG_USB_SERIAL=m
+CONFIG_USB_SERIAL_GENERIC=y
+# CONFIG_USB_SERIAL_AIRPRIME is not set
+# CONFIG_USB_SERIAL_ANYDATA is not set
+CONFIG_USB_SERIAL_ARK3116=m
+# CONFIG_USB_SERIAL_BELKIN is not set
+# CONFIG_USB_SERIAL_WHITEHEAT is not set
+# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
+# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
+# CONFIG_USB_SERIAL_EMPEG is not set
+# CONFIG_USB_SERIAL_FTDI_SIO is not set
+# CONFIG_USB_SERIAL_FUNSOFT is not set
+# CONFIG_USB_SERIAL_VISOR is not set
+# CONFIG_USB_SERIAL_IPAQ is not set
+# CONFIG_USB_SERIAL_IR is not set
+# CONFIG_USB_SERIAL_EDGEPORT is not set
+# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
+# CONFIG_USB_SERIAL_GARMIN is not set
+# CONFIG_USB_SERIAL_IPW is not set
+# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
+# CONFIG_USB_SERIAL_KEYSPAN is not set
+# CONFIG_USB_SERIAL_KLSI is not set
+# CONFIG_USB_SERIAL_KOBIL_SCT is not set
+# CONFIG_USB_SERIAL_MCT_U232 is not set
+# CONFIG_USB_SERIAL_NAVMAN is not set
+CONFIG_USB_SERIAL_PL2303=m
+# CONFIG_USB_SERIAL_HP4X is not set
+# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_TI is not set
+# CONFIG_USB_SERIAL_CYBERJACK is not set
+# CONFIG_USB_SERIAL_XIRCOM is not set
+# CONFIG_USB_SERIAL_OMNINET is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_AUERSWALD 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_CYTHERM is not set
+# CONFIG_USB_PHIDGETKIT is not set
+# CONFIG_USB_PHIDGETSERVO is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TEST is not set
+
+#
+# USB DSL modem support
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# LED devices
+#
+# CONFIG_NEW_LEDS is not set
+
+#
+# LED drivers
+#
+
+#
+# LED Triggers
+#
+
+#
+# InfiniBand support
+#
+# CONFIG_INFINIBAND is not set
+
+#
+# EDAC - error detection and reporting (RAS) (EXPERIMENTAL)
+#
+
+#
+# Real Time Clock
+#
+# CONFIG_RTC_CLASS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_REISERFS_FS=m
+# CONFIG_REISERFS_CHECK is not set
+# CONFIG_REISERFS_PROC_INFO is not set
+# CONFIG_REISERFS_FS_XATTR is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+CONFIG_XFS_FS=m
+CONFIG_XFS_EXPORT=y
+# CONFIG_XFS_QUOTA is not set
+# CONFIG_XFS_SECURITY is not set
+# CONFIG_XFS_POSIX_ACL is not set
+# CONFIG_XFS_RT is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+CONFIG_FUSE_FS=m
+
+#
+# CD-ROM/DVD Filesystems
+#
+CONFIG_ISO9660_FS=m
+CONFIG_JOLIET=y
+CONFIG_ZISOFS=y
+CONFIG_ZISOFS_FS=m
+CONFIG_UDF_FS=m
+CONFIG_UDF_NLS=y
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=m
+CONFIG_MSDOS_FS=m
+CONFIG_VFAT_FS=m
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+CONFIG_CONFIGFS_FS=m
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+# CONFIG_JFFS2_FS is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+CONFIG_NFSD=y
+CONFIG_NFSD_V3=y
+# CONFIG_NFSD_V3_ACL is not set
+# CONFIG_NFSD_V4 is not set
+CONFIG_NFSD_TCP=y
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_EXPORTFS=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+CONFIG_SMB_FS=m
+# CONFIG_SMB_NLS_DEFAULT is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+CONFIG_9P_FS=m
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+CONFIG_NLS=m
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=m
+# 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=m
+CONFIG_NLS_ISO8859_1=m
+# 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=m
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_MAGIC_SYSRQ=y
+CONFIG_DEBUG_KERNEL=y
+CONFIG_LOG_BUF_SHIFT=16
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_MUTEXES is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_INFO is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_FRAME_POINTER is not set
+# CONFIG_FORCED_INLINING is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_SH_STANDARD_BIOS is not set
+CONFIG_EARLY_SCIF_CONSOLE=y
+# CONFIG_EARLY_PRINTK is not set
+# CONFIG_KGDB is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+CONFIG_CRYPTO=y
+CONFIG_CRYPTO_HMAC=y
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=y
+CONFIG_CRYPTO_SHA1=y
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_DES=y
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=y
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=y
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=y
+CONFIG_CRYPTO_MICHAEL_MIC=y
+CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=m
+CONFIG_CRC16=m
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=m
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_TEXTSEARCH=y
+CONFIG_TEXTSEARCH_KMP=m
+CONFIG_TEXTSEARCH_BM=m
+CONFIG_TEXTSEARCH_FSM=m
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/CVS/Entries linux-2.6.17/arch/sh/drivers/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/drivers/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,4 @@
+/Makefile/1.2/Thu Mar 17 07:43:07 2005//
+D/dma////
+D/pci////
+D/superhyway////
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/CVS/Repository linux-2.6.17/arch/sh/drivers/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/drivers/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/drivers
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/CVS/Root linux-2.6.17/arch/sh/drivers/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/drivers/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/CVS/Entries linux-2.6.17/arch/sh/drivers/dma/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/drivers/dma/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/dma/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,10 @@
+/Kconfig/1.6/Sun Feb  5 15:23:46 2006//
+/Makefile/1.5/Sun May 16 01:53:40 2004//
+/dma-api.c/1.15/Wed Jan  4 15:01:03 2006//
+/dma-isa.c/1.4/Sun Oct 16 16:37:55 2005//
+/dma-pvr2.c/1.6/Sun Feb  5 15:28:01 2006//
+/dma-sh.c/1.15/Sun Feb  5 15:25:52 2006//
+/dma-sh.h/1.5/Mon Oct 17 02:27:14 2005//
+/dma-sysfs.c/1.7/Wed Jan  4 15:01:03 2006//
+/dma-g2.c/1.6/Thu Jul  6 12:38:08 2006//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/CVS/Repository linux-2.6.17/arch/sh/drivers/dma/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/drivers/dma/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/dma/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/drivers/dma
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/CVS/Root linux-2.6.17/arch/sh/drivers/dma/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/drivers/dma/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/dma/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/Kconfig linux-2.6.17/arch/sh/drivers/dma/Kconfig
--- linux-2.6.17-vanilla/arch/sh/drivers/dma/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/dma/Kconfig	2006-07-12 16:54:21.000000000 +0000
@@ -11,6 +11,8 @@
 config NR_ONCHIP_DMA_CHANNELS
 	depends on SH_DMA
 	int "Number of on-chip DMAC channels"
+	default "8" if CPU_SUBTYPE_SH7750R || CPU_SUBTYPE_SH7751R
+	default "12" if CPU_SUBTYPE_SH7780
 	default "4"
 	help
 	  This allows you to specify the number of channels that the on-chip
@@ -52,4 +54,3 @@
 	  are dual-address capable.
 
 endmenu
-
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/dma-g2.c linux-2.6.17/arch/sh/drivers/dma/dma-g2.c
--- linux-2.6.17-vanilla/arch/sh/drivers/dma/dma-g2.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/dma/dma-g2.c	2006-07-12 16:54:21.000000000 +0000
@@ -3,7 +3,7 @@
  *
  * G2 bus DMA support
  *
- * Copyright (C) 2003, 2004  Paul Mundt
+ * Copyright (C) 2003 - 2006  Paul Mundt
  *
  * 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
@@ -13,7 +13,7 @@
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/interrupt.h>
-
+#include <asm/cacheflush.h>
 #include <asm/mach/sysasic.h>
 #include <asm/mach/dma.h>
 #include <asm/dma.h>
@@ -47,17 +47,31 @@
 
 static volatile struct g2_dma_info *g2_dma = (volatile struct g2_dma_info *)0xa05f7800;
 
+#define g2_bytes_remaining(i) \
+	((g2_dma->channel[i].size - \
+	  g2_dma->status[i].size) & 0x0fffffff)
+
 static irqreturn_t g2_dma_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
-	/* FIXME: Do some meaningful completion work here.. */
-	return IRQ_HANDLED;
-}
+	int i;
 
-static struct irqaction g2_dma_irq = {
-	.name		= "g2 DMA handler",
-	.handler	= g2_dma_interrupt,
-	.flags		= SA_INTERRUPT,
-};
+	for (i = 0; i < G2_NR_DMA_CHANNELS; i++) {
+		if (g2_dma->status[i].status & 0x20000000) {
+			unsigned int bytes = g2_bytes_remaining(i);
+
+			if (likely(bytes == 0)) {
+				struct dma_info *info = dev_id;
+				struct dma_channel *chan = info->channels + i;
+
+				wake_up(&chan->wait_queue);
+
+				return IRQ_HANDLED;
+			}
+		}
+	}
+
+	return IRQ_NONE;
+}
 
 static int g2_enable_dma(struct dma_channel *chan)
 {
@@ -135,8 +149,14 @@
 	return 0;
 }
 
+static int g2_get_residue(struct dma_channel *chan)
+{
+	return g2_bytes_remaining(chan->chan);
+}
+
 static struct dma_ops g2_dma_ops = {
 	.xfer		= g2_xfer_dma,
+	.get_residue	= g2_get_residue,
 };
 
 static struct dma_info g2_dma_info = {
@@ -148,13 +168,22 @@
 
 static int __init g2_dma_init(void)
 {
-	setup_irq(HW_EVENT_G2_DMA, &g2_dma_irq);
+	int ret;
 
+	ret = request_irq(HW_EVENT_G2_DMA, g2_dma_interrupt, SA_INTERRUPT,
+			  "g2 DMA handler", &g2_dma_info);
+	if (unlikely(ret))
+		return -EINVAL;
+ 
 	/* Magic */
 	g2_dma->wait_state	= 27;
 	g2_dma->magic		= 0x4659404f;
 
-	return register_dmac(&g2_dma_info);
+	ret = register_dmac(&g2_dma_info);
+	if (unlikely(ret != 0))
+		free_irq(HW_EVENT_G2_DMA, 0);
+
+	return ret;
 }
 
 static void __exit g2_dma_exit(void)
@@ -169,4 +198,3 @@
 MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>");
 MODULE_DESCRIPTION("G2 bus DMA driver");
 MODULE_LICENSE("GPL");
-
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/dma-pvr2.c linux-2.6.17/arch/sh/drivers/dma/dma-pvr2.c
--- linux-2.6.17-vanilla/arch/sh/drivers/dma/dma-pvr2.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/dma/dma-pvr2.c	2006-07-12 16:54:21.000000000 +0000
@@ -18,8 +18,8 @@
 #include <asm/dma.h>
 #include <asm/io.h>
 
-static unsigned int xfer_complete = 0;
-static int count = 0;
+static unsigned int xfer_complete;
+static int count;
 
 static irqreturn_t pvr2_dma_interrupt(int irq, void *dev_id, struct pt_regs *regs)
 {
@@ -107,4 +107,3 @@
 MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>");
 MODULE_DESCRIPTION("NEC PowerVR 2 DMA driver");
 MODULE_LICENSE("GPL");
-
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/dma-sh.c linux-2.6.17/arch/sh/drivers/dma/dma-sh.c
--- linux-2.6.17-vanilla/arch/sh/drivers/dma/dma-sh.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/dma/dma-sh.c	2006-07-12 16:54:21.000000000 +0000
@@ -11,15 +11,11 @@
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  */
-
 #include <linux/config.h>
 #include <linux/init.h>
-#include <linux/irq.h>
 #include <linux/interrupt.h>
 #include <linux/module.h>
 #include <asm/dreamcast/dma.h>
-#include <asm/signal.h>
-#include <asm/irq.h>
 #include <asm/dma.h>
 #include <asm/io.h>
 #include "dma-sh.h"
@@ -87,6 +83,9 @@
 {
 	char name[32];
 
+	if (unlikely(!chan->flags & DMA_TEI_CAPABLE))
+		return 0;
+
 	snprintf(name, sizeof(name), "DMAC Transfer End (Channel %d)",
 		 chan->chan);
 
@@ -260,7 +259,7 @@
 #ifdef CONFIG_CPU_SH4
 	make_ipr_irq(DMAE_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY);
 	i = request_irq(DMAE_IRQ, dma_err, SA_INTERRUPT, "DMAC Address Error", 0);
-	if (i < 0)
+	if (unlikely(i < 0))
 		return i;
 #endif
 
@@ -275,7 +274,7 @@
 	 * been set.
 	 */
 	i = dmaor_reset();
-	if (i < 0)
+	if (unlikely(i != 0))
 		return i;
 
 	return register_dmac(info);
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/CVS/Entries linux-2.6.17/arch/sh/drivers/pci/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,26 @@
+/Kconfig/1.4/Wed Mar  2 13:02:55 2005//
+/Makefile/1.9/Wed Feb  8 21:55:09 2006//
+/dma-dreamcast.c/1.4/Tue Jan  3 22:35:51 2006//
+/fixups-dreamcast.c/1.6/Tue Feb  7 20:12:06 2006//
+/fixups-r7780rp.c/1.5/Wed Feb  8 12:17:46 2006/-ko/
+/fixups-rts7751r2d.c/1.4/Thu Feb 23 11:10:52 2006/-ko/
+/fixups-sh03.c/1.3/Sun Feb  5 18:34:56 2006/-ko/
+/ops-bigsur.c/1.3/Sun Feb  5 21:55:29 2006//
+/ops-dreamcast.c/1.1/Sun Aug 24 19:15:45 2003//
+/ops-landisk.c/1.1/Wed Feb  8 21:55:09 2006/-ko/
+/ops-r7780rp.c/1.3/Sun Feb  5 21:55:29 2006/-ko/
+/ops-rts7751r2d.c/1.4/Sun Feb  5 21:55:29 2006/-ko/
+/ops-sh03.c/1.1/Thu Oct  7 11:01:14 2004/-ko/
+/ops-sh4.c/1.1/Sun Feb  5 21:55:29 2006/-ko/
+/ops-snapgear.c/1.4/Sun Feb  5 21:55:29 2006//
+/ops-titan.c/1.5/Wed Feb  8 13:32:20 2006/-ko/
+/pci-auto.c/1.6/Sun Feb  5 18:31:46 2006//
+/pci-sh4.h/1.1/Sun Feb  5 21:55:29 2006/-ko/
+/pci-sh7751.c/1.17/Thu Feb 23 11:10:52 2006//
+/pci-sh7751.h/1.5/Sun Feb  5 21:55:29 2006/-ko/
+/pci-sh7780.c/1.5/Tue Feb  7 15:28:03 2006/-ko/
+/pci-sh7780.h/1.4/Wed Feb  8 12:09:30 2006/-ko/
+/pci-st40.c/1.7/Sun Feb  5 18:45:40 2006//
+/pci-st40.h/1.3/Thu Aug 19 16:10:14 2004//
+/pci.c/1.10/Wed Feb  8 12:21:32 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/CVS/Repository linux-2.6.17/arch/sh/drivers/pci/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/drivers/pci
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/CVS/Root linux-2.6.17/arch/sh/drivers/pci/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/Makefile linux-2.6.17/arch/sh/drivers/pci/Makefile
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/Makefile	2006-07-12 16:54:21.000000000 +0000
@@ -6,7 +6,8 @@
 obj-$(CONFIG_PCI_AUTO)			+= pci-auto.o
 
 obj-$(CONFIG_CPU_SUBTYPE_ST40STB1)	+= pci-st40.o
-obj-$(CONFIG_CPU_SUBTYPE_SH7751)	+= pci-sh7751.o 
+obj-$(CONFIG_CPU_SUBTYPE_SH7751)	+= pci-sh7751.o ops-sh4.o
+obj-$(CONFIG_CPU_SUBTYPE_SH7780)	+= pci-sh7780.o ops-sh4.o
 
 obj-$(CONFIG_SH_DREAMCAST)		+= ops-dreamcast.o fixups-dreamcast.o \
 					   dma-dreamcast.o
@@ -14,3 +15,6 @@
 obj-$(CONFIG_SH_BIGSUR)			+= ops-bigsur.o
 obj-$(CONFIG_SH_RTS7751R2D)		+= ops-rts7751r2d.o fixups-rts7751r2d.o
 obj-$(CONFIG_SH_SH03)			+= ops-sh03.o fixups-sh03.o
+obj-$(CONFIG_SH_R7780RP)		+= ops-r7780rp.o fixups-r7780rp.o
+obj-$(CONFIG_SH_TITAN)			+= ops-titan.o
+obj-$(CONFIG_SH_LANDISK)		+= ops-landisk.o
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-dreamcast.c linux-2.6.17/arch/sh/drivers/pci/fixups-dreamcast.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-dreamcast.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/fixups-dreamcast.c	2006-07-12 16:54:21.000000000 +0000
@@ -4,7 +4,7 @@
  * PCI fixups for the Sega Dreamcast
  *
  * Copyright (C) 2001, 2002  M. R. Brown
- * Copyright (C) 2002, 2003  Paul Mundt
+ * Copyright (C) 2002, 2003, 2006  Paul Mundt
  *
  * This file originally bore the message (with enclosed-$):
  *	Id: pci.c,v 1.3 2003/05/04 19:29:46 lethal Exp
@@ -46,36 +46,16 @@
 		printk("PCI: Failed resource fixup\n");
 	}
 }
-
 DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, gapspci_fixup_resources);
 
-void __init pcibios_fixup_bus(struct pci_bus *bus)
+int __init pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin)
 {
-	/* 
-	 * We don't have any sub bus to fix up, and this is a rather
-	 * stupid place to put general device fixups. Don't do it.
-	 * Use the pcibios_fixups table or suffer the consequences.
+	/*
+	 * The interrupt routing semantics here are quite trivial.
+	 *
+	 * We basically only support one interrupt, so we only bother
+	 * updating a device's interrupt line with this single shared
+	 * interrupt. Keeps routing quite simple, doesn't it?
 	 */
+	return GAPSPCI_IRQ;
 }
-
-void __init pcibios_fixup_irqs(void)
-{
-	struct pci_dev *dev = 0;
-
-	for_each_pci_dev(dev) {
-		/*
-		 * The interrupt routing semantics here are quite trivial.
-		 *
-		 * We basically only support one interrupt, so we only bother
-		 * updating a device's interrupt line with this single shared
-		 * interrupt. Keeps routing quite simple, doesn't it?
-		 */
-		printk(KERN_NOTICE "PCI: Fixing up IRQ routing for device %s\n",
-		       pci_name(dev));
-
-		dev->irq = GAPSPCI_IRQ;
-
-		pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq);
-	}
-}
-
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-r7780rp.c linux-2.6.17/arch/sh/drivers/pci/fixups-r7780rp.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-r7780rp.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/fixups-r7780rp.c	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,45 @@
+/*
+ * arch/sh/drivers/pci/fixups-r7780rp.c
+ *
+ * Highlander R7780RP-1 PCI fixups
+ *
+ * Copyright (C) 2003  Lineo uSolutions, Inc.
+ * Copyright (C) 2004 - 2006  Paul Mundt
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/pci.h>
+#include "pci-sh4.h"
+#include <asm/io.h>
+
+int pci_fixup_pcic(void)
+{
+	pci_write_reg(0x000043ff, SH4_PCIINTM);
+	pci_write_reg(0x0000380f, SH4_PCIAINTM);
+
+	pci_write_reg(0xfbb00047, SH7780_PCICMD);
+	pci_write_reg(0x00000000, SH7780_PCIIBAR);
+
+	pci_write_reg(0x00011912, SH7780_PCISVID);
+	pci_write_reg(0x08000000, SH7780_PCICSCR0);
+	pci_write_reg(0x0000001b, SH7780_PCICSAR0);
+	pci_write_reg(0xfd000000, SH7780_PCICSCR1);
+	pci_write_reg(0x0000000f, SH7780_PCICSAR1);
+
+	pci_write_reg(0xfd000000, SH7780_PCIMBR0);
+	pci_write_reg(0x00fc0000, SH7780_PCIMBMR0);
+
+#ifdef CONFIG_32BIT
+	pci_write_reg(0xc0000000, SH7780_PCIMBR2);
+	pci_write_reg(0x20000000 - SH7780_PCI_IO_SIZE, SH7780_PCIMBMR2);
+#endif
+
+	/* Set IOBR for windows containing area specified in pci.h */
+	pci_write_reg((PCIBIOS_MIN_IO & ~(SH7780_PCI_IO_SIZE - 1)),
+		      SH7780_PCIIOBR);
+	pci_write_reg(((SH7780_PCI_IO_SIZE-1) & (7<<18)), SH7780_PCIIOBMR);
+
+	return 0;
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-rts7751r2d.c linux-2.6.17/arch/sh/drivers/pci/fixups-rts7751r2d.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-rts7751r2d.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/fixups-rts7751r2d.c	2006-07-12 16:54:21.000000000 +0000
@@ -10,8 +10,7 @@
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  */
-#include "pci-sh7751.h"
-#include <asm/io.h>
+#include "pci-sh4.h"
 
 #define PCIMCR_MRSET_OFF	0xBFFFFFFF
 #define PCIMCR_RFSH_OFF		0xFFFFFFFB
@@ -22,22 +21,23 @@
 
 	bcr1 = inl(SH7751_BCR1);
 	bcr1 |= 0x40080000;	/* Enable Bit 19 BREQEN, set PCIC to slave */
-	outl(bcr1, PCI_REG(SH7751_PCIBCR1));
+	pci_write_reg(bcr1, SH4_PCIBCR1);
 
 	/* Enable all interrupts, so we known what to fix */
-	outl(0x0000c3ff, PCI_REG(SH7751_PCIINTM));
-	outl(0x0000380f, PCI_REG(SH7751_PCIAINTM));
+	pci_write_reg(0x0000c3ff, SH4_PCIINTM);
+	pci_write_reg(0x0000380f, SH4_PCIAINTM);
 
-	outl(0xfb900047, PCI_REG(SH7751_PCICONF1));
-	outl(0xab000001, PCI_REG(SH7751_PCICONF4));
+	pci_write_reg(0xfb900047, SH7751_PCICONF1);
+	pci_write_reg(0xab000001, SH7751_PCICONF4);
 
 	mcr = inl(SH7751_MCR);
 	mcr = (mcr & PCIMCR_MRSET_OFF) & PCIMCR_RFSH_OFF;
-	outl(mcr, PCI_REG(SH7751_PCIMCR));
+	pci_write_reg(mcr, SH4_PCIMCR);
+
+	pci_write_reg(0x0c000000, SH7751_PCICONF5);
+	pci_write_reg(0xd0000000, SH7751_PCICONF6);
+	pci_write_reg(0x0c000000, SH4_PCILAR0);
+	pci_write_reg(0x00000000, SH4_PCILAR1);
 
-	outl(0x0c000000, PCI_REG(SH7751_PCICONF5));
-	outl(0xd0000000, PCI_REG(SH7751_PCICONF6));
-	outl(0x0c000000, PCI_REG(SH7751_PCILAR0));
-	outl(0x00000000, PCI_REG(SH7751_PCILAR1));
 	return 0;
 }
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-sh03.c linux-2.6.17/arch/sh/drivers/pci/fixups-sh03.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-sh03.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/fixups-sh03.c	2006-07-12 16:54:21.000000000 +0000
@@ -3,11 +3,7 @@
 #include <linux/types.h>
 #include <linux/pci.h>
 
-/*
- * 	IRQ functions
- */
-
-int __init pcibios_map_platform_irq(u8 slot, u8 pin, struct pci_dev *dev)
+int __init pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin)
 {
 	int irq;
 
@@ -17,8 +13,9 @@
 		case 8: return 5;	/* eth1       */
 		case 6: return 2;	/* PCI bridge */
 		default:
-                	printk("PCI: Bad IRQ mapping request for slot %d\n", slot);
-                	return 2;
+			printk(KERN_ERR "PCI: Bad IRQ mapping request "
+					"for slot %d\n", slot);
+			return 2;
 		}
 	} else {
 		switch (pin) {
@@ -32,30 +29,3 @@
 	}
 	return irq;
 }
-
-static u8 __init sh03_no_swizzle(struct pci_dev *dev, u8 *pin)
-{
-	/* no swizzling */
-	return PCI_SLOT(dev->devfn);
-}
-
-static int sh03_pci_lookup_irq(struct pci_dev *dev, u8 slot, u8 pin)
-{
-	int irq = -1;
-
-	/* now lookup the actual IRQ on a platform specific basis (pci-'platform'.c) */
-	irq = pcibios_map_platform_irq(slot, pin, dev);
-	if( irq < 0 ) {
-		pr_debug("PCI: Error mapping IRQ on device %s\n", pci_name(dev));
-		return irq;
-	}
-
-	pr_debug("Setting IRQ for slot %s to %d\n", pci_name(dev), irq);
-
-	return irq;
-}
-
-void __init pcibios_fixup_irqs(void)
-{
-	pci_fixup_irqs(sh03_no_swizzle, sh03_pci_lookup_irq);
-}
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-bigsur.c linux-2.6.17/arch/sh/drivers/pci/ops-bigsur.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-bigsur.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/ops-bigsur.c	2006-07-12 16:54:21.000000000 +0000
@@ -10,16 +10,13 @@
  *
  * PCI initialization for the Hitachi Big Sur Evaluation Board
  */
-
 #include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <linux/init.h>
-#include <linux/delay.h>
 #include <linux/pci.h>
-
 #include <asm/io.h>
-#include "pci-sh7751.h"
+#include "pci-sh4.h"
 #include <asm/bigsur/bigsur.h>
 
 #define BIGSUR_PCI_IO	0x4000
@@ -42,11 +39,11 @@
 extern struct pci_ops sh7751_pci_ops;
 
 struct pci_channel board_pci_channels[] = {
-	{ &sh7751_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff },
+	{ &sh4_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff },
 	{ 0, }
 };
 
-static struct sh7751_pci_address_map sh7751_pci_map = {
+static struct sh4_pci_address_map sh7751_pci_map = {
 	.window0	= {
 		.base	= SH7751_CS3_BASE_ADDR,
 		.size	= BIGSUR_LSR0_SIZE,
@@ -59,7 +56,7 @@
 };
 
 /*
- * Initialize the Big Sur PCI interface 
+ * Initialize the Big Sur PCI interface
  * Setup hardware to be Central Funtion
  * Copy the BSR regs to the PCI interface
  * Setup PCI windows into local RAM
@@ -69,15 +66,15 @@
 	return sh7751_pcic_init(&sh7751_pci_map);
 }
 
-int pcibios_map_platform_irq(u8 slot, u8 pin)
+int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
 {
-	/* 
+	/*
 	 * The Big Sur can be used in a CPCI chassis, but the SH7751 PCI
 	 * interface is on the wrong end of the board so that it can also
 	 * support a V320 CPI interface chip...  Therefor the IRQ mapping is
 	 * somewhat use dependent... I'l assume a linear map for now, i.e.
 	 * INTA=slot0,pin0... INTD=slot3,pin0...
-	 */ 
+	 */
 	int irq = (slot + pin-1) % 4 + BIGSUR_SH7751_PCI_IRQ_BASE;
 
 	PCIDBG(2, "PCI: Mapping Big Sur IRQ for slot %d, pin %c to irq %d\n",
@@ -85,4 +82,3 @@
 
 	return irq;
 }
-
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-landisk.c linux-2.6.17/arch/sh/drivers/pci/ops-landisk.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-landisk.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/ops-landisk.c	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,68 @@
+/*
+ * arch/sh/drivers/pci/ops-landisk.c
+ *
+ * PCI initialization for the I-O DATA Device, Inc. LANDISK board
+ *
+ * Copyright (C) 2006 kogiidena
+ *
+ * May be copied or modified under the terms of the GNU General Public
+ * License.  See linux/COPYING for more information.
+ */
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/pci.h>
+#include "pci-sh4.h"
+
+static struct resource sh7751_io_resource = {
+	.name = "SH7751 IO",
+	.start = 0x4000,
+	.end = 0x4000 + SH7751_PCI_IO_SIZE - 1,
+	.flags = IORESOURCE_IO
+};
+
+static struct resource sh7751_mem_resource = {
+	.name = "SH7751 mem",
+	.start = SH7751_PCI_MEMORY_BASE,
+	.end = SH7751_PCI_MEMORY_BASE + SH7751_PCI_MEM_SIZE - 1,
+	.flags = IORESOURCE_MEM
+};
+
+struct pci_channel board_pci_channels[] = {
+	{&sh4_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0x3ff},
+	{NULL, NULL, NULL, 0, 0},
+};
+
+static struct sh4_pci_address_map sh7751_pci_map = {
+	.window0 = {
+		.base	= SH7751_CS3_BASE_ADDR,
+		.size	= (64 << 20),	/* 64MB */
+	},
+
+	.flags = SH4_PCIC_NO_RESET,
+};
+
+int __init pcibios_init_platform(void)
+{
+	return sh7751_pcic_init(&sh7751_pci_map);
+}
+
+int pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
+{
+	/*
+	 * slot0: pin1-4 = irq5,6,7,8
+	 * slot1: pin1-4 = irq6,7,8,5
+	 * slot2: pin1-4 = irq7,8,5,6
+	 * slot3: pin1-4 = irq8,5,6,7
+	 */
+	int irq = ((slot + pin - 1) & 0x3) + 5;
+
+	if ((slot | (pin - 1)) > 0x3) {
+		printk("PCI: Bad IRQ mapping request for slot %d pin %c\n",
+		       slot, pin - 1 + 'A');
+		return -1;
+	}
+	return irq;
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-r7780rp.c linux-2.6.17/arch/sh/drivers/pci/ops-r7780rp.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-r7780rp.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/ops-r7780rp.c	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,75 @@
+/*
+ * Author:  Ian DaSilva (idasilva@mvista.com)
+ *
+ * Highly leveraged from pci-bigsur.c, written by Dustin McIntire.
+ *
+ * May be copied or modified under the terms of the GNU General Public
+ * License.  See linux/COPYING for more information.
+ *
+ * PCI initialization for the Renesas SH7780 Highlander R7780RP-1 board
+ */
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/pci.h>
+#include <asm/r7780rp/r7780rp.h>
+#include <asm/io.h>
+#include "pci-sh4.h"
+
+int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
+{
+        switch (slot) {
+	case 0: return IRQ_PCISLOT1;		/* PCI Interrupt #1 */
+	case 1: return IRQ_PCISLOT2;		/* PCI Interrupt #2 */
+	case 2: return IRQ_PCISLOT3;		/* PCI Interrupt #3 */
+	case 3: return IRQ_PCISLOT4;		/* PCI Interrupt E4 */
+	default:
+		printk(KERN_ERR "PCI: Bad IRQ mapping "
+		       "request for slot %d, func %d\n", slot, pin-1);
+		return -1;
+	}
+}
+
+static struct resource sh7780_io_resource = {
+	.name	= "SH7780_IO",
+	.start	= 0x2000,
+	.end	= 0x2000 + SH7780_PCI_IO_SIZE - 1,
+	.flags	= IORESOURCE_IO
+};
+
+static struct resource sh7780_mem_resource = {
+	.name	= "SH7780_mem",
+	.start	= SH7780_PCI_MEMORY_BASE,
+	.end	= SH7780_PCI_MEMORY_BASE + SH7780_PCI_MEM_SIZE - 1,
+	.flags	= IORESOURCE_MEM
+};
+
+extern struct pci_ops sh7780_pci_ops;
+
+struct pci_channel board_pci_channels[] = {
+	{ &sh4_pci_ops, &sh7780_io_resource, &sh7780_mem_resource, 0, 0xff },
+	{ NULL, NULL, NULL, 0, 0 },
+};
+EXPORT_SYMBOL(board_pci_channels);
+
+static struct sh4_pci_address_map sh7780_pci_map = {
+	.window0	= {
+		.base	= SH7780_CS2_BASE_ADDR,
+		.size	= 0x04000000,
+	},
+
+	.window1	= {
+		.base	= SH7780_CS3_BASE_ADDR,
+		.size	= 0x04000000,
+	},
+
+	.flags	= SH4_PCIC_NO_RESET,
+};
+
+int __init pcibios_init_platform(void)
+{
+	return sh7780_pcic_init(&sh7780_pci_map);
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-rts7751r2d.c linux-2.6.17/arch/sh/drivers/pci/ops-rts7751r2d.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-rts7751r2d.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/ops-rts7751r2d.c	2006-07-12 16:54:21.000000000 +0000
@@ -18,12 +18,11 @@
 #include <linux/delay.h>
 #include <linux/pci.h>
 #include <linux/module.h>
-
-#include <asm/io.h>
-#include "pci-sh7751.h"
 #include <asm/rts7751r2d/rts7751r2d.h>
+#include <asm/io.h>
+#include "pci-sh4.h"
 
-int __init pcibios_map_platform_irq(u8 slot, u8 pin)
+int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
 {
         switch (slot) {
 	case 0: return IRQ_PCISLOT1;	/* PCI Extend slot #1 */
@@ -53,12 +52,12 @@
 extern struct pci_ops sh7751_pci_ops;
 
 struct pci_channel board_pci_channels[] = {
-	{ &sh7751_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff },
+	{ &sh4_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff },
 	{ NULL, NULL, NULL, 0, 0 },
 };
 EXPORT_SYMBOL(board_pci_channels);
 
-static struct sh7751_pci_address_map sh7751_pci_map = {
+static struct sh4_pci_address_map sh7751_pci_map = {
 	.window0	= {
 		.base	= SH7751_CS3_BASE_ADDR,
 		.size	= 0x04000000,
@@ -69,7 +68,7 @@
 		.size	= 0x00000000,	/* Unused */
 	},
 
-	.flags	= SH7751_PCIC_NO_RESET,
+	.flags	= SH4_PCIC_NO_RESET,
 };
 
 int __init pcibios_init_platform(void)
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-sh4.c linux-2.6.17/arch/sh/drivers/pci/ops-sh4.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-sh4.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/ops-sh4.c	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,164 @@
+/*
+ * Generic SH-4 / SH-4A PCIC operations (SH7751, SH7780).
+ *
+ * Copyright (C) 2002 - 2006  Paul Mundt
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License v2. See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/pci.h>
+#include <asm/addrspace.h>
+#include <asm/io.h>
+#include "pci-sh4.h"
+
+/*
+ * Direct access to PCI hardware...
+ */
+#define CONFIG_CMD(bus, devfn, where) \
+	P1SEGADDR((bus->number << 16) | (devfn << 8) | (where & ~3))
+
+static DEFINE_SPINLOCK(sh4_pci_lock);
+
+/*
+ * Functions for accessing PCI configuration space with type 1 accesses
+ */
+static int sh4_pci_read(struct pci_bus *bus, unsigned int devfn,
+			   int where, int size, u32 *val)
+{
+	unsigned long flags;
+	u32 data;
+
+	/*
+	 * PCIPDR may only be accessed as 32 bit words,
+	 * so we must do byte alignment by hand
+	 */
+	spin_lock_irqsave(&sh4_pci_lock, flags);
+	pci_write_reg(CONFIG_CMD(bus, devfn, where), SH4_PCIPAR);
+	data = pci_read_reg(SH4_PCIPDR);
+	spin_unlock_irqrestore(&sh4_pci_lock, flags);
+
+	switch (size) {
+	case 1:
+		*val = (data >> ((where & 3) << 3)) & 0xff;
+		break;
+	case 2:
+		*val = (data >> ((where & 2) << 3)) & 0xffff;
+		break;
+	case 4:
+		*val = data;
+		break;
+	default:
+		return PCIBIOS_FUNC_NOT_SUPPORTED;
+	}
+
+	return PCIBIOS_SUCCESSFUL;
+}
+
+/*
+ * Since SH4 only does 32bit access we'll have to do a read,
+ * mask,write operation.
+ * We'll allow an odd byte offset, though it should be illegal.
+ */
+static int sh4_pci_write(struct pci_bus *bus, unsigned int devfn,
+			 int where, int size, u32 val)
+{
+	unsigned long flags;
+	int shift;
+	u32 data;
+
+	spin_lock_irqsave(&sh4_pci_lock, flags);
+	pci_write_reg(CONFIG_CMD(bus, devfn, where), SH4_PCIPAR);
+	data = pci_read_reg(SH4_PCIPDR);
+	spin_unlock_irqrestore(&sh4_pci_lock, flags);
+
+	switch (size) {
+	case 1:
+		shift = (where & 3) << 3;
+		data &= ~(0xff << shift);
+		data |= ((val & 0xff) << shift);
+		break;
+	case 2:
+		shift = (where & 2) << 3;
+		data &= ~(0xffff << shift);
+		data |= ((val & 0xffff) << shift);
+		break;
+	case 4:
+		data = val;
+		break;
+	default:
+		return PCIBIOS_FUNC_NOT_SUPPORTED;
+	}
+
+	pci_write_reg(data, SH4_PCIPDR);
+
+	return PCIBIOS_SUCCESSFUL;
+}
+
+struct pci_ops sh4_pci_ops = {
+	.read		= sh4_pci_read,
+	.write		= sh4_pci_write,
+};
+
+/*
+ * Not really related to pci_ops, but it's common and not worth shoving
+ * somewhere else for now..
+ */
+static unsigned int pci_probe = PCI_PROBE_CONF1;
+
+int __init sh4_pci_check_direct(void)
+{
+	/*
+	 * Check if configuration works.
+	 */
+	if (pci_probe & PCI_PROBE_CONF1) {
+		unsigned int tmp = pci_read_reg(SH4_PCIPAR);
+
+		pci_write_reg(P1SEG, SH4_PCIPAR);
+
+		if (pci_read_reg(SH4_PCIPAR) == P1SEG) {
+			pci_write_reg(tmp, SH4_PCIPAR);
+			printk(KERN_INFO "PCI: Using configuration type 1\n");
+			request_region(PCI_REG(SH4_PCIPAR), 8, "PCI conf1");
+
+			return 0;
+		}
+
+		pci_write_reg(tmp, SH4_PCIPAR);
+	}
+
+	pr_debug("PCI: pci_check_direct failed\n");
+	return -EINVAL;
+}
+
+/* Handle generic fixups */
+static void __init pci_fixup_ide_bases(struct pci_dev *d)
+{
+	int i;
+
+	/*
+	 * PCI IDE controllers use non-standard I/O port decoding, respect it.
+	 */
+	if ((d->class >> 8) != PCI_CLASS_STORAGE_IDE)
+		return;
+	pr_debug("PCI: IDE base address fixup for %s\n", pci_name(d));
+	for(i = 0; i < 4; i++) {
+		struct resource *r = &d->resource[i];
+
+		if ((r->start & ~0x80) == 0x374) {
+			r->start |= 2;
+			r->end = r->start;
+		}
+	}
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases);
+
+char * __init pcibios_setup(char *str)
+{
+	if (!strcmp(str, "off")) {
+		pci_probe = 0;
+		return NULL;
+	}
+
+	return str;
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-snapgear.c linux-2.6.17/arch/sh/drivers/pci/ops-snapgear.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-snapgear.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/ops-snapgear.c	2006-07-12 16:54:21.000000000 +0000
@@ -2,7 +2,7 @@
  * arch/sh/drivers/pci/ops-snapgear.c
  *
  * Author:  David McCullough <davidm@snapgear.com>
- * 
+ *
  * Ported to new API by Paul Mundt <lethal@linux-sh.org>
  *
  * Highly leveraged from pci-bigsur.c, written by Dustin McIntire.
@@ -12,16 +12,12 @@
  *
  * PCI initialization for the SnapGear boards
  */
-
 #include <linux/config.h>
 #include <linux/kernel.h>
 #include <linux/types.h>
 #include <linux/init.h>
-#include <linux/delay.h>
 #include <linux/pci.h>
-
-#include <asm/io.h>
-#include "pci-sh7751.h"
+#include "pci-sh4.h"
 
 #define SNAPGEAR_PCI_IO		0x4000
 #define SNAPGEAR_PCI_MEM	0xfd000000
@@ -44,14 +40,12 @@
 	.flags		= IORESOURCE_MEM,
 };
 
-extern struct pci_ops sh7751_pci_ops;
-
 struct pci_channel board_pci_channels[] = {
-	{ &sh7751_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff },
+	{ &sh4_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff },
 	{ 0, }
 };
 
-static struct sh7751_pci_address_map sh7751_pci_map = {
+static struct sh4_pci_address_map sh7751_pci_map = {
 	.window0	= {
 		.base	= SH7751_CS2_BASE_ADDR,
 		.size	= SNAPGEAR_LSR0_SIZE,
@@ -62,11 +56,11 @@
 		.size	= SNAPGEAR_LSR1_SIZE,
 	},
 
-	.flags	= SH7751_PCIC_NO_RESET,
+	.flags	= SH4_PCIC_NO_RESET,
 };
 
 /*
- * Initialize the SnapGear PCI interface 
+ * Initialize the SnapGear PCI interface
  * Setup hardware to be Central Funtion
  * Copy the BSR regs to the PCI interface
  * Setup PCI windows into local RAM
@@ -76,7 +70,7 @@
 	return sh7751_pcic_init(&sh7751_pci_map);
 }
 
-int __init pcibios_map_platform_irq(u8 slot, u8 pin)
+int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
 {
 	int irq = -1;
 
@@ -99,4 +93,3 @@
 {
 	/* Nothing to fixup .. */
 }
-
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-titan.c linux-2.6.17/arch/sh/drivers/pci/ops-titan.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-titan.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/ops-titan.c	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,83 @@
+/*
+ * arch/sh/drivers/pci/ops-titan.c
+ *
+ * Ported to new API by Paul Mundt <lethal@linux-sh.org>
+ *
+ * Modified from ops-snapgear.c written by  David McCullough
+ * Highly leveraged from pci-bigsur.c, written by Dustin McIntire.
+ *
+ * May be copied or modified under the terms of the GNU General Public
+ * License.  See linux/COPYING for more information.
+ *
+ * PCI initialization for the Titan boards
+ */
+
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/init.h>
+#include <linux/pci.h>
+#include <asm/io.h>
+#include <asm/titan.h>
+#include "pci-sh4.h"
+
+int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin)
+{
+	int irq = -1;
+
+	switch (slot) {
+	case 0: irq = TITAN_IRQ_WAN;   break;	/* eth0 (WAN) */
+	case 1: irq = TITAN_IRQ_LAN;   break;	/* eth1 (LAN) */
+	case 2: irq = TITAN_IRQ_MPCIA; break;	/* mPCI A */
+	case 3: irq = TITAN_IRQ_MPCIB; break;	/* mPCI B */
+	case 4: irq = TITAN_IRQ_USB;   break;	/* USB */
+	default:
+		printk(KERN_INFO "PCI: Bad IRQ mapping "
+				 "request for slot %d\n", slot);
+		return -1;
+	}
+
+	printk("PCI: Mapping TITAN IRQ for slot %d, pin %c to irq %d\n",
+		slot, pin - 1 + 'A', irq);
+
+	return irq;
+}
+
+static struct resource sh7751_io_resource = {
+	.name	= "SH7751_IO",
+	.start	= SH7751_PCI_IO_BASE,
+	.end	= SH7751_PCI_IO_BASE + SH7751_PCI_IO_SIZE - 1,
+	.flags	= IORESOURCE_IO
+};
+
+static struct resource sh7751_mem_resource = {
+	.name	= "SH7751_mem",
+	.start	= SH7751_PCI_MEMORY_BASE,
+	.end	= SH7751_PCI_MEMORY_BASE + SH7751_PCI_MEM_SIZE - 1,
+	.flags	= IORESOURCE_MEM
+};
+
+struct pci_channel board_pci_channels[] = {
+	{ &sh4_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff },
+	{ NULL, NULL, NULL, 0, 0 },
+};
+EXPORT_SYMBOL(board_pci_channels);
+
+static struct sh4_pci_address_map sh7751_pci_map = {
+	.window0	= {
+		.base	= SH7751_CS2_BASE_ADDR,
+		.size	= SH7751_MEM_REGION_SIZE*2,	/* cs2 and cs3 */
+	},
+
+	.window1	= {
+		.base	= SH7751_CS2_BASE_ADDR,
+		.size	= SH7751_MEM_REGION_SIZE*2,
+	},
+
+	.flags	= SH4_PCIC_NO_RESET,
+};
+
+int __init pcibios_init_platform(void)
+{
+	return sh7751_pcic_init(&sh7751_pci_map);
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-auto.c linux-2.6.17/arch/sh/drivers/pci/pci-auto.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-auto.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/pci-auto.c	2006-07-12 16:54:21.000000000 +0000
@@ -45,11 +45,11 @@
 #include <linux/types.h>
 #include <linux/pci.h>
 
-#undef	DEBUG
-#ifdef 	DEBUG
+#define	DEBUG
+#ifdef	DEBUG
 #define	DBG(x...)	printk(x)
 #else
-#define	DBG(x...)	
+#define	DBG(x...)
 #endif
 
 /*
@@ -102,7 +102,7 @@
 static u32 pciauto_lower_memspc;
 static u32 pciauto_upper_memspc;
 
-static void __init 
+static void __init
 pciauto_setup_bars(struct pci_channel *hose,
 		   int top_bus,
 		   int current_bus,
@@ -116,7 +116,6 @@
 	int found_mem64 = 0;
 
 	for (bar = PCI_BASE_ADDRESS_0; bar <= bar_limit; bar+=4) {
-#if !defined(CONFIG_SH_HS7751RVOIP) && !defined(CONFIG_SH_RTS7751R2D)
 		u32 bar_addr;
 
 		/* Read the old BAR value */
@@ -125,7 +124,6 @@
 					pci_devfn,
 					bar,
 					&bar_addr);
-#endif
 
 		/* Tickle the BAR and get the response */
 		early_write_config_dword(hose, top_bus,
@@ -140,8 +138,7 @@
 					bar,
 					&bar_response);
 
-#if !defined(CONFIG_SH_HS7751RVOIP) && !defined(CONFIG_SH_RTS7751R2D)
-		/* 
+		/*
 		 * Write the old BAR value back out, only update the BAR
 		 * if we implicitly want resources to be updated, which
 		 * is done by the generic code further down. -- PFM.
@@ -151,7 +148,6 @@
 					 pci_devfn,
 					 bar,
 					 bar_addr);
-#endif
 
 		/* If BAR is not implemented go to the next BAR */
 		if (!bar_response)
@@ -177,7 +173,7 @@
 			    PCI_BASE_ADDRESS_MEM_TYPE_64)
 				found_mem64 = 1;
 
-			addr_mask = PCI_BASE_ADDRESS_MEM_MASK;		
+			addr_mask = PCI_BASE_ADDRESS_MEM_MASK;
 			upper_limit = &pciauto_upper_memspc;
 			lower_limit = &pciauto_lower_memspc;
 			DBG("        Mem");
@@ -193,22 +189,22 @@
 		if ((bar_value + bar_size) > *upper_limit) {
 			if (bar_response & PCI_BASE_ADDRESS_SPACE) {
 				if (io_resource_inuse->child) {
-					io_resource_inuse = 
+					io_resource_inuse =
 						io_resource_inuse->child;
-					pciauto_lower_iospc = 
+					pciauto_lower_iospc =
 						io_resource_inuse->start;
-					pciauto_upper_iospc = 
+					pciauto_upper_iospc =
 						io_resource_inuse->end + 1;
 					goto retry;
 				}
 
 			} else {
 				if (mem_resource_inuse->child) {
-					mem_resource_inuse = 
+					mem_resource_inuse =
 						mem_resource_inuse->child;
-					pciauto_lower_memspc = 
+					pciauto_lower_memspc =
 						mem_resource_inuse->start;
-					pciauto_upper_memspc = 
+					pciauto_upper_memspc =
 						mem_resource_inuse->end + 1;
 					goto retry;
 				}
@@ -230,7 +226,7 @@
 		 * If we are a 64-bit decoder then increment to the
 		 * upper 32 bits of the bar and force it to locate
 		 * in the lower 4GB of memory.
-		 */ 
+		 */
 		if (found_mem64) {
 			bar += 4;
 			early_write_config_dword(hose, top_bus,
@@ -362,7 +358,6 @@
 {
 	u32 temp;
 
-#if !defined(CONFIG_SH_HS7751RVOIP) && !defined(CONFIG_SH_RTS7751R2D)
 	/*
 	 * [jsun] we always bump up baselines a little, so that if there
 	 * nothing behind P2P bridge, we don't wind up overlapping IO/MEM
@@ -370,7 +365,6 @@
 	 */
 	pciauto_lower_memspc += 1;
 	pciauto_lower_iospc += 1;
-#endif
 
 	/*
 	 * Configure subordinate bus number.  The PCI subsystem
@@ -396,11 +390,6 @@
 	 * configured by this routine to happily live behind a
 	 * P2P bridge in a system.
 	 */
-#if defined(CONFIG_SH_HS7751RVOIP) || defined(CONFIG_SH_RTS7751R2D)
-	pciauto_lower_memspc += 0x00400000;
-	pciauto_lower_iospc += 0x00004000;
-#endif
-
 	/* Align memory and I/O to 4KB and 4 byte boundaries. */
 	pciauto_lower_memspc = (pciauto_lower_memspc + (0x1000 - 1))
 		& ~(0x1000 - 1);
@@ -433,12 +422,12 @@
 	int devfn_stop = 0xff;
 
 	sub_bus = current_bus;
-	
+
 	if (hose->first_devfn)
 		devfn_start = hose->first_devfn;
 	if (hose->last_devfn)
 		devfn_stop = hose->last_devfn;
-	
+
 	for (pci_devfn=devfn_start; pci_devfn<devfn_stop; pci_devfn++) {
 
 		if (PCI_FUNC(pci_devfn) && !found_multi)
@@ -471,9 +460,6 @@
 		if ((pci_class >> 16) == PCI_CLASS_BRIDGE_PCI) {
 			DBG("        Bridge: primary=%.2x, secondary=%.2x\n",
 				current_bus, sub_bus + 1);
-#if defined(CONFIG_SH_HS7751RVOIP) || defined(CONFIG_SH_RTS7751R2D)
-			pciauto_setup_bars(hose, top_bus, current_bus, pci_devfn, PCI_BASE_ADDRESS_1);
-#endif
 			pciauto_prescan_setup_bridge(hose, top_bus, current_bus,
 						     pci_devfn, sub_bus);
 			DBG("Scanning sub bus %.2x, I/O 0x%.8x, Mem 0x%.8x\n",
@@ -490,10 +476,10 @@
 			DBG("PCI Autoconfig: Found CardBus bridge, device %d function %d\n", PCI_SLOT(pci_devfn), PCI_FUNC(pci_devfn));
 			/* Place CardBus Socket/ExCA registers */
 			pciauto_setup_bars(hose, top_bus, current_bus, pci_devfn, PCI_BASE_ADDRESS_0);
- 
+
 			pciauto_prescan_setup_cardbus_bridge(hose, top_bus,
 					current_bus, pci_devfn, sub_bus);
- 
+
 			DBG("Scanning sub bus %.2x, I/O 0x%.8x, Mem 0x%.8x\n",
 				sub_bus + 1,
 				pciauto_lower_iospc, pciauto_lower_memspc);
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh4.h linux-2.6.17/arch/sh/drivers/pci/pci-sh4.h
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh4.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/pci-sh4.h	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,180 @@
+#ifndef __PCI_SH4_H
+#define __PCI_SH4_H
+
+#ifdef CONFIG_CPU_SUBTYPE_SH7780
+#include "pci-sh7780.h"
+#else
+#include "pci-sh7751.h"
+#endif
+
+#include <asm/io.h>
+
+/* startup values */
+#define PCI_PROBE_BIOS		1
+#define PCI_PROBE_CONF1		2
+#define PCI_PROBE_CONF2		4
+#define PCI_NO_SORT		0x100
+#define PCI_BIOS_SORT		0x200
+#define PCI_NO_CHECKS		0x400
+#define PCI_ASSIGN_ROMS		0x1000
+#define PCI_BIOS_IRQ_SCAN	0x2000
+
+#define SH4_PCICR		0x100		/* PCI Control Register */
+  #define SH4_PCICR_PREFIX	  0xA5000000	/* CR prefix for write */
+  #define SH4_PCICR_FTO		  0x00000400	/* TRDY/IRDY Enable */
+  #define SH4_PCICR_TRSB	  0x00000200	/* Target Read Single */
+  #define SH4_PCICR_BSWP	  0x00000100	/* Target Byte Swap */
+  #define SH4_PCICR_PLUP	  0x00000080	/* Enable PCI Pullup */
+  #define SH4_PCICR_ARBM	  0x00000040	/* PCI Arbitration Mode */
+  #define SH4_PCICR_MD		  0x00000030	/* MD9 and MD10 status */
+  #define SH4_PCICR_SERR	  0x00000008	/* SERR output assert */
+  #define SH4_PCICR_INTA	  0x00000004	/* INTA output assert */
+  #define SH4_PCICR_PRST	  0x00000002	/* PCI Reset Assert */
+  #define SH4_PCICR_CFIN	  0x00000001	/* Central Fun. Init Done */
+#define SH4_PCILSR0		0x104		/* PCI Local Space Register0 */
+#define SH4_PCILSR1		0x108		/* PCI Local Space Register1 */
+#define SH4_PCILAR0		0x10C		/* PCI Local Addr Register1 */
+#define SH4_PCILAR1		0x110		/* PCI Local Addr Register1 */
+#define SH4_PCIINT		0x114		/* PCI Interrupt Register */
+  #define SH4_PCIINT_MLCK	  0x00008000	/* Master Lock Error */
+  #define SH4_PCIINT_TABT	  0x00004000	/* Target Abort Error */
+  #define SH4_PCIINT_TRET	  0x00000200	/* Target Retry Error */
+  #define SH4_PCIINT_MFDE	  0x00000100	/* Master Func. Disable Error */
+  #define SH4_PCIINT_PRTY	  0x00000080	/* Address Parity Error */
+  #define SH4_PCIINT_SERR	  0x00000040	/* SERR Detection Error */
+  #define SH4_PCIINT_TWDP	  0x00000020	/* Tgt. Write Parity Error */
+  #define SH4_PCIINT_TRDP	  0x00000010	/* Tgt. Read Parity Err Det. */
+  #define SH4_PCIINT_MTABT	  0x00000008	/* Master-Tgt. Abort Error */
+  #define SH4_PCIINT_MMABT	  0x00000004	/* Master-Master Abort Error */
+  #define SH4_PCIINT_MWPD	  0x00000002	/* Master Write PERR Detect */
+  #define SH4_PCIINT_MRPD	  0x00000001	/* Master Read PERR Detect */
+#define SH4_PCIINTM		0x118		/* PCI Interrupt Mask */
+#define SH4_PCIALR		0x11C		/* Error Address Register */
+#define SH4_PCICLR		0x120		/* Error Command/Data */
+  #define SH4_PCICLR_MPIO	  0x80000000
+  #define SH4_PCICLR_MDMA0	  0x40000000	/* DMA0 Transfer Error */
+  #define SH4_PCICLR_MDMA1	  0x20000000	/* DMA1 Transfer Error */
+  #define SH4_PCICLR_MDMA2	  0x10000000	/* DMA2 Transfer Error */
+  #define SH4_PCICLR_MDMA3	  0x08000000	/* DMA3 Transfer Error */
+  #define SH4_PCICLR_TGT	  0x04000000	/* Target Transfer Error */
+  #define SH4_PCICLR_CMDL	  0x0000000F	/* PCI Command at Error */
+#define SH4_PCIAINT		0x130		/* Arbiter Interrupt Register */
+  #define SH4_PCIAINT_MBKN	  0x00002000	/* Master Broken Interrupt */
+  #define SH4_PCIAINT_TBTO	  0x00001000	/* Target Bus Time Out */
+  #define SH4_PCIAINT_MBTO	  0x00001000	/* Master Bus Time Out */
+  #define SH4_PCIAINT_TABT	  0x00000008	/* Target Abort */
+  #define SH4_PCIAINT_MABT	  0x00000004	/* Master Abort */
+  #define SH4_PCIAINT_RDPE	  0x00000002	/* Read Data Parity Error */
+  #define SH4_PCIAINT_WDPE	  0x00000001	/* Write Data Parity Error */
+#define SH4_PCIAINTM            0x134		/* Arbiter Int. Mask Register */
+#define SH4_PCIBMLR		0x138		/* Error Bus Master Register */
+  #define SH4_PCIBMLR_REQ4	  0x00000010	/* REQ4 bus master at error */
+  #define SH4_PCIBMLR_REQ3	  0x00000008	/* REQ3 bus master at error */
+  #define SH4_PCIBMLR_REQ2	  0x00000004	/* REQ2 bus master at error */
+  #define SH4_PCIBMLR_REQ1	  0x00000002	/* REQ1 bus master at error */
+  #define SH4_PCIBMLR_REQ0	  0x00000001	/* REQ0 bus master at error */
+#define SH4_PCIDMABT		0x140		/* DMA Transfer Arb. Register */
+  #define SH4_PCIDMABT_RRBN	  0x00000001	/* DMA Arbitor Round-Robin */
+#define SH4_PCIDPA0		0x180		/* DMA0 Transfer Addr. */
+#define SH4_PCIDLA0		0x184		/* DMA0 Local Addr. */
+#define SH4_PCIDTC0		0x188		/* DMA0 Transfer Cnt. */
+#define SH4_PCIDCR0		0x18C		/* DMA0 Control Register */
+  #define SH4_PCIDCR_ALGN	  0x00000600	/* DMA Alignment Mode */
+  #define SH4_PCIDCR_MAST	  0x00000100	/* DMA Termination Type */
+  #define SH4_PCIDCR_INTM	  0x00000080	/* DMA Interrupt Done Mask*/
+  #define SH4_PCIDCR_INTS	  0x00000040	/* DMA Interrupt Done Status */
+  #define SH4_PCIDCR_LHLD	  0x00000020	/* Local Address Control */
+  #define SH4_PCIDCR_PHLD	  0x00000010	/* PCI Address Control*/
+  #define SH4_PCIDCR_IOSEL	  0x00000008	/* PCI Address Space Type */
+  #define SH4_PCIDCR_DIR	  0x00000004	/* DMA Transfer Direction */
+  #define SH4_PCIDCR_STOP	  0x00000002	/* Force DMA Stop */
+  #define SH4_PCIDCR_STRT	  0x00000001	/* DMA Start */
+#define SH4_PCIDPA1		0x190		/* DMA1 Transfer Addr. */
+#define SH4_PCIDLA1		0x194		/* DMA1 Local Addr. */
+#define SH4_PCIDTC1		0x198		/* DMA1 Transfer Cnt. */
+#define SH4_PCIDCR1		0x19C		/* DMA1 Control Register */
+#define SH4_PCIDPA2		0x1A0		/* DMA2 Transfer Addr. */
+#define SH4_PCIDLA2		0x1A4		/* DMA2 Local Addr. */
+#define SH4_PCIDTC2		0x1A8		/* DMA2 Transfer Cnt. */
+#define SH4_PCIDCR2		0x1AC		/* DMA2 Control Register */
+#define SH4_PCIDPA3		0x1B0		/* DMA3 Transfer Addr. */
+#define SH4_PCIDLA3		0x1B4		/* DMA3 Local Addr. */
+#define SH4_PCIDTC3		0x1B8		/* DMA3 Transfer Cnt. */
+#define SH4_PCIDCR3		0x1BC		/* DMA3 Control Register */
+#define SH4_PCIPAR		0x1C0		/* PIO Address Register */
+  #define SH4_PCIPAR_CFGEN	  0x80000000	/* Configuration Enable */
+  #define SH4_PCIPAR_BUSNO	  0x00FF0000	/* Config. Bus Number */
+  #define SH4_PCIPAR_DEVNO	  0x0000FF00	/* Config. Device Number */
+  #define SH4_PCIPAR_REGAD	  0x000000FC	/* Register Address Number */
+#define SH4_PCIMBR		0x1C4		/* Memory Base Address */
+  #define SH4_PCIMBR_MASK	  0xFF000000	/* Memory Space Mask */
+  #define SH4_PCIMBR_LOCK	  0x00000001	/* Lock Memory Space */
+#define SH4_PCIIOBR		0x1C8		/* I/O Base Address Register */
+  #define SH4_PCIIOBR_MASK	  0xFFFC0000	/* IO Space Mask */
+  #define SH4_PCIIOBR_LOCK	  0x00000001	/* Lock IO Space */
+#define SH4_PCIPINT		0x1CC		/* Power Mgmnt Int. Register */
+  #define SH4_PCIPINT_D3	  0x00000002	/* D3 Pwr Mgmt. Interrupt */
+  #define SH4_PCIPINT_D0	  0x00000001	/* D0 Pwr Mgmt. Interrupt */
+#define SH4_PCIPINTM		0x1D0		/* Power Mgmnt Mask Register */
+#define SH4_PCICLKR		0x1D4		/* Clock Ctrl. Register */
+  #define SH4_PCICLKR_PCSTP	  0x00000002	/* PCI Clock Stop */
+  #define SH4_PCICLKR_BCSTP	  0x00000001	/* BCLK Clock Stop */
+/* For definitions of BCR, MCR see ... */
+#define SH4_PCIBCR1		0x1E0		/* Memory BCR1 Register */
+  #define SH4_PCIMBR0		SH4_PCIBCR1
+#define SH4_PCIBCR2		0x1E4		/* Memory BCR2 Register */
+  #define SH4_PCIMBMR0		SH4_PCIBCR2
+#define SH4_PCIWCR1		0x1E8		/* Wait Control 1 Register */
+#define SH4_PCIWCR2		0x1EC		/* Wait Control 2 Register */
+#define SH4_PCIWCR3		0x1F0		/* Wait Control 3 Register */
+  #define SH4_PCIMBR2		SH4_PCIWCR3
+#define SH4_PCIMCR		0x1F4		/* Memory Control Register */
+#define SH4_PCIBCR3		0x1f8		/* Memory BCR3 Register */
+#define SH4_PCIPCTR             0x200		/* Port Control Register */
+  #define SH4_PCIPCTR_P2EN	  0x000400000	/* Port 2 Enable */
+  #define SH4_PCIPCTR_P1EN	  0x000200000	/* Port 1 Enable */
+  #define SH4_PCIPCTR_P0EN	  0x000100000	/* Port 0 Enable */
+  #define SH4_PCIPCTR_P2UP	  0x000000020	/* Port2 Pull Up Enable */
+  #define SH4_PCIPCTR_P2IO	  0x000000010	/* Port2 Output Enable */
+  #define SH4_PCIPCTR_P1UP	  0x000000008	/* Port1 Pull Up Enable */
+  #define SH4_PCIPCTR_P1IO	  0x000000004	/* Port1 Output Enable */
+  #define SH4_PCIPCTR_P0UP	  0x000000002	/* Port0 Pull Up Enable */
+  #define SH4_PCIPCTR_P0IO	  0x000000001	/* Port0 Output Enable */
+#define SH4_PCIPDTR		0x204		/* Port Data Register */
+  #define SH4_PCIPDTR_PB5	  0x000000020	/* Port 5 Enable */
+  #define SH4_PCIPDTR_PB4	  0x000000010	/* Port 4 Enable */
+  #define SH4_PCIPDTR_PB3	  0x000000008	/* Port 3 Enable */
+  #define SH4_PCIPDTR_PB2	  0x000000004	/* Port 2 Enable */
+  #define SH4_PCIPDTR_PB1	  0x000000002	/* Port 1 Enable */
+  #define SH4_PCIPDTR_PB0	  0x000000001	/* Port 0 Enable */
+#define SH4_PCIPDR		0x220		/* Port IO Data Register */
+
+/* Flags */
+#define SH4_PCIC_NO_RESET	0x0001
+
+/* arch/sh/kernel/drivers/pci/ops-sh4.c */
+extern struct pci_ops sh4_pci_ops;
+int sh4_pci_check_direct(void);
+int pci_fixup_pcic(void);
+
+struct sh4_pci_address_space {
+	unsigned long base;
+	unsigned long size;
+};
+
+struct sh4_pci_address_map {
+	struct sh4_pci_address_space window0;
+	struct sh4_pci_address_space window1;
+	unsigned long flags;
+};
+
+static inline void pci_write_reg(unsigned long val, unsigned long reg)
+{
+	outl(val, PCI_REG(reg));
+}
+
+static inline unsigned long pci_read_reg(unsigned long reg)
+{
+	return inl(PCI_REG(reg));
+}
+#endif /* __PCI_SH4_H */
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7751.c linux-2.6.17/arch/sh/drivers/pci/pci-sh7751.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7751.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/pci-sh7751.c	2006-07-12 16:54:21.000000000 +0000
@@ -16,206 +16,44 @@
 #undef DEBUG
 
 #include <linux/config.h>
-#include <linux/types.h>
-#include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/pci.h>
-#include <linux/sched.h>
-#include <linux/ioport.h>
+#include <linux/types.h>
 #include <linux/errno.h>
-#include <linux/irq.h>
 #include <linux/delay.h>
-
-#include <asm/machvec.h>
+#include "pci-sh4.h"
+#include <asm/addrspace.h>
 #include <asm/io.h>
-#include "pci-sh7751.h"
-
-static unsigned int pci_probe = PCI_PROBE_CONF1;
-extern int pci_fixup_pcic(void);
-
-void pcibios_fixup_irqs(void) __attribute__ ((weak));
-
-/*
- * Direct access to PCI hardware...
- */
-
-#define CONFIG_CMD(bus, devfn, where) (0x80000000 | (bus->number << 16) | (devfn << 8) | (where & ~3))
 
 /*
- * Functions for accessing PCI configuration space with type 1 accesses
+ * Initialization. Try all known PCI access methods. Note that we support
+ * using both PCI BIOS and direct access: in such cases, we use I/O ports
+ * to access config space.
+ *
+ * Note that the platform specific initialization (BSC registers, and memory
+ * space mapping) will be called via the platform defined function
+ * pcibios_init_platform().
  */
-static int sh7751_pci_read(struct pci_bus *bus, unsigned int devfn,
-			   int where, int size, u32 *val)
-{
-	unsigned long flags;
-	u32 data;
-
-	/* 
-	 * PCIPDR may only be accessed as 32 bit words, 
-	 * so we must do byte alignment by hand 
-	 */
-	local_irq_save(flags);
-	outl(CONFIG_CMD(bus,devfn,where), PCI_REG(SH7751_PCIPAR));
-	data = inl(PCI_REG(SH7751_PCIPDR));
-	local_irq_restore(flags);
-
-	switch (size) {
-	case 1:
-		*val = (data >> ((where & 3) << 3)) & 0xff;
-		break;
-	case 2:
-		*val = (data >> ((where & 2) << 3)) & 0xffff;
-		break;
-	case 4:
-		*val = data;
-		break;
-	default:
-		return PCIBIOS_FUNC_NOT_SUPPORTED;
-	}
-
-	return PCIBIOS_SUCCESSFUL;
-}
-
-/* 
- * Since SH7751 only does 32bit access we'll have to do a read,
- * mask,write operation.
- * We'll allow an odd byte offset, though it should be illegal.
- */ 
-static int sh7751_pci_write(struct pci_bus *bus, unsigned int devfn,
-			    int where, int size, u32 val)
+static int __init sh7751_pci_init(void)
 {
-	unsigned long flags;
-	int shift;
-	u32 data;
-
-	local_irq_save(flags);
-	outl(CONFIG_CMD(bus,devfn,where), PCI_REG(SH7751_PCIPAR));
-	data = inl(PCI_REG(SH7751_PCIPDR));
-	local_irq_restore(flags);
-
-	switch (size) {
-	case 1:
-		shift = (where & 3) << 3;
-		data &= ~(0xff << shift);
-		data |= ((val & 0xff) << shift);
-		break;
-	case 2:
-		shift = (where & 2) << 3;
-		data &= ~(0xffff << shift);
-		data |= ((val & 0xffff) << shift);
-		break;
-	case 4:
-		data = val;
-		break;
-	default:
-		return PCIBIOS_FUNC_NOT_SUPPORTED;
-	}
-
-	outl(data, PCI_REG(SH7751_PCIPDR));
-
-	return PCIBIOS_SUCCESSFUL;
-}
-
-#undef CONFIG_CMD
-
-struct pci_ops sh7751_pci_ops = {
-	.read 		= sh7751_pci_read,
-	.write		= sh7751_pci_write,
-};
+	unsigned int id;
+	int ret;
 
-static int __init pci_check_direct(void)
-{
-	unsigned int tmp, id;
+	pr_debug("PCI: Starting intialization.\n");
 
 	/* check for SH7751/SH7751R hardware */
-	id = inl(SH7751_PCIREG_BASE+SH7751_PCICONF0);
+	id = pci_read_reg(SH7751_PCICONF0);
 	if (id != ((SH7751_DEVICE_ID << 16) | SH7751_VENDOR_ID) &&
 	    id != ((SH7751R_DEVICE_ID << 16) | SH7751_VENDOR_ID)) {
 		pr_debug("PCI: This is not an SH7751(R) (%x)\n", id);
 		return -ENODEV;
 	}
 
-	/*
-	 * Check if configuration works.
-	 */
-	if (pci_probe & PCI_PROBE_CONF1) {
-		tmp = inl (PCI_REG(SH7751_PCIPAR));
-		outl (0x80000000, PCI_REG(SH7751_PCIPAR));
-		if (inl (PCI_REG(SH7751_PCIPAR)) == 0x80000000) {
-			outl (tmp, PCI_REG(SH7751_PCIPAR));
-			printk(KERN_INFO "PCI: Using configuration type 1\n");
-			request_region(PCI_REG(SH7751_PCIPAR), 8, "PCI conf1");
-			return 0;
-		}
-		outl (tmp, PCI_REG(SH7751_PCIPAR));
-	}
-
-	pr_debug("PCI: pci_check_direct failed\n");
-	return -EINVAL;
-}
-
-/***************************************************************************************/
-
-/*
- *  Handle bus scanning and fixups ....
- */
-
-static void __init pci_fixup_ide_bases(struct pci_dev *d)
-{
-	int i;
-
-	/*
-	 * PCI IDE controllers use non-standard I/O port decoding, respect it.
-	 */
-	if ((d->class >> 8) != PCI_CLASS_STORAGE_IDE)
-		return;
-	pr_debug("PCI: IDE base address fixup for %s\n", pci_name(d));
-	for(i=0; i<4; i++) {
-		struct resource *r = &d->resource[i];
-		if ((r->start & ~0x80) == 0x374) {
-			r->start |= 2;
-			r->end = r->start;
-		}
-	}
-}
-
-DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases);
-
-/*
- *  Called after each bus is probed, but before its children
- *  are examined.
- */
-
-void __init pcibios_fixup_bus(struct pci_bus *b)
-{
-	pci_read_bridge_bases(b);
-}
-
-/*
- * Initialization. Try all known PCI access methods. Note that we support
- * using both PCI BIOS and direct access: in such cases, we use I/O ports
- * to access config space.
- * 
- * Note that the platform specific initialization (BSC registers, and memory
- * space mapping) will be called via the machine vectors (sh_mv.mv_pci_init()) if it
- * exitst and via the platform defined function pcibios_init_platform().  
- * See pci_bigsur.c for implementation;
- * 
- * The BIOS version of the pci functions is not yet implemented but it is left
- * in for completeness.  Currently an error will be genereated at compile time. 
- */
-
-static int __init sh7751_pci_init(void)
-{
-	int ret;
-
-	pr_debug("PCI: Starting intialization.\n");
-	if ((ret = pci_check_direct()) != 0)
+	if ((ret = sh4_pci_check_direct()) != 0)
 		return ret;
 
 	return pcibios_init_platform();
 }
-
 subsys_initcall(sh7751_pci_init);
 
 static int __init __area_sdram_check(unsigned int area)
@@ -224,26 +62,26 @@
 
 	word = inl(SH7751_BCR1);
 	/* check BCR for SDRAM in area */
-	if(((word >> area) & 1) == 0) {
+	if (((word >> area) & 1) == 0) {
 		printk("PCI: Area %d is not configured for SDRAM. BCR1=0x%x\n",
 		       area, word);
 		return 0;
 	}
-	outl(word, PCI_REG(SH7751_PCIBCR1));
+	pci_write_reg(word, SH4_PCIBCR1);
 
 	word = (u16)inw(SH7751_BCR2);
 	/* check BCR2 for 32bit SDRAM interface*/
-	if(((word >> (area << 1)) & 0x3) != 0x3) {
+	if (((word >> (area << 1)) & 0x3) != 0x3) {
 		printk("PCI: Area %d is not 32 bit SDRAM. BCR2=0x%x\n",
 		       area, word);
 		return 0;
 	}
-	outl(word, PCI_REG(SH7751_PCIBCR2));
+	pci_write_reg(word, SH4_PCIBCR2);
 
 	return 1;
 }
 
-int __init sh7751_pcic_init(struct sh7751_pci_address_map *map)
+int __init sh7751_pcic_init(struct sh4_pci_address_map *map)
 {
 	u32 reg;
 	u32 word;
@@ -252,86 +90,89 @@
 	reg = inl(SH7751_BCR1);
 	reg |= 0x80000;
 	outl(reg, SH7751_BCR1);
-	
+
 	/* Turn the clocks back on (not done in reset)*/
-	outl(0, PCI_REG(SH7751_PCICLKR));
+	pci_write_reg(0, SH4_PCICLKR);
 	/* Clear Powerdown IRQ's (not done in reset) */
-	word = SH7751_PCIPINT_D3 | SH7751_PCIPINT_D0;
-	outl(word, PCI_REG(SH7751_PCIPINT));
+	word = SH4_PCIPINT_D3 | SH4_PCIPINT_D0;
+	pci_write_reg(word, SH4_PCIPINT);
 
 	/*
 	 * This code is unused for some boards as it is done in the
 	 * bootloader and doing it here means the MAC addresses loaded
 	 * by the bootloader get lost.
 	 */
-	if (!(map->flags & SH7751_PCIC_NO_RESET)) {
+	if (!(map->flags & SH4_PCIC_NO_RESET)) {
 		/* toggle PCI reset pin */
-		word = SH7751_PCICR_PREFIX | SH7751_PCICR_PRST;
-		outl(word,PCI_REG(SH7751_PCICR));
+		word = SH4_PCICR_PREFIX | SH4_PCICR_PRST;
+		pci_write_reg(word, SH4_PCICR);
 		/* Wait for a long time... not 1 sec. but long enough */
 		mdelay(100);
-		word = SH7751_PCICR_PREFIX;
-		outl(word,PCI_REG(SH7751_PCICR));
+		word = SH4_PCICR_PREFIX;
+		pci_write_reg(word, SH4_PCICR);
 	}
-	
+
 	/* set the command/status bits to:
 	 * Wait Cycle Control + Parity Enable + Bus Master +
 	 * Mem space enable
 	 */
-	word = SH7751_PCICONF1_WCC | SH7751_PCICONF1_PER | 
+	word = SH7751_PCICONF1_WCC | SH7751_PCICONF1_PER |
 	       SH7751_PCICONF1_BUM | SH7751_PCICONF1_MES;
-	outl(word, PCI_REG(SH7751_PCICONF1));
+	pci_write_reg(word, SH7751_PCICONF1);
 
 	/* define this host as the host bridge */
-	word = SH7751_PCI_HOST_BRIDGE << 24;
-	outl(word, PCI_REG(SH7751_PCICONF2));
+	word = PCI_BASE_CLASS_BRIDGE << 24;
+	pci_write_reg(word, SH7751_PCICONF2);
 
-	/* Set IO and Mem windows to local address 
-	 * Make PCI and local address the same for easy 1 to 1 mapping 
+	/* Set IO and Mem windows to local address
+	 * Make PCI and local address the same for easy 1 to 1 mapping
 	 * Window0 = map->window0.size @ non-cached area base = SDRAM
-	 * Window1 = map->window1.size @ cached area base = SDRAM 
+	 * Window1 = map->window1.size @ cached area base = SDRAM
 	 */
 	word = map->window0.size - 1;
-	outl(word, PCI_REG(SH7751_PCILSR0));
+	pci_write_reg(word, SH4_PCILSR0);
 	word = map->window1.size - 1;
-	outl(word, PCI_REG(SH7751_PCILSR1));
+	pci_write_reg(word, SH4_PCILSR1);
 	/* Set the values on window 0 PCI config registers */
 	word = P2SEGADDR(map->window0.base);
-	outl(word, PCI_REG(SH7751_PCILAR0));
-	outl(word, PCI_REG(SH7751_PCICONF5));
+	pci_write_reg(word, SH4_PCILAR0);
+	pci_write_reg(word, SH7751_PCICONF5);
 	/* Set the values on window 1 PCI config registers */
 	word =  PHYSADDR(map->window1.base);
-	outl(word, PCI_REG(SH7751_PCILAR1));
-	outl(word, PCI_REG(SH7751_PCICONF6));
+	pci_write_reg(word, SH4_PCILAR1);
+	pci_write_reg(word, SH7751_PCICONF6);
 
-	/* Set the local 16MB PCI memory space window to 
+	/* Set the local 16MB PCI memory space window to
 	 * the lowest PCI mapped address
 	 */
-	word = PCIBIOS_MIN_MEM & SH7751_PCIMBR_MASK;
-	PCIDBG(2,"PCI: Setting upper bits of Memory window to 0x%x\n", word);
-	outl(word , PCI_REG(SH7751_PCIMBR));
+	word = PCIBIOS_MIN_MEM & SH4_PCIMBR_MASK;
+	pr_debug("PCI: Setting upper bits of Memory window to 0x%x\n", word);
+	pci_write_reg(word , SH4_PCIMBR);
 
 	/* Map IO space into PCI IO window
 	 * The IO window is 64K-PCIBIOS_MIN_IO in size
-	 * IO addresses will be translated to the 
+	 * IO addresses will be translated to the
 	 * PCI IO window base address
 	 */
-	PCIDBG(3,"PCI: Mapping IO address 0x%x - 0x%x to base 0x%x\n", PCIBIOS_MIN_IO,
-	    (64*1024), SH7751_PCI_IO_BASE+PCIBIOS_MIN_IO);
+	pr_debug("PCI: Mapping IO address 0x%x - 0x%x to base 0x%x\n",
+		 PCIBIOS_MIN_IO, (64 << 10),
+		 SH4_PCI_IO_BASE + PCIBIOS_MIN_IO);
 
-	/* 
+	/*
 	 * XXX: For now, leave this board-specific. In the event we have other
 	 * boards that need to do similar work, this can be wrapped.
 	 */
 #ifdef CONFIG_SH_BIGSUR
-	bigsur_port_map(PCIBIOS_MIN_IO, (64*1024), SH7751_PCI_IO_BASE+PCIBIOS_MIN_IO,0);
+	bigsur_port_map(PCIBIOS_MIN_IO, (64 << 10),
+			SH4_PCI_IO_BASE + PCIBIOS_MIN_IO, 0);
 #endif
 
-	/* Make sure the MSB's of IO window are set to access PCI space correctly */
-	word = PCIBIOS_MIN_IO & SH7751_PCIIOBR_MASK;
-	PCIDBG(2,"PCI: Setting upper bits of IO window to 0x%x\n", word);
-	outl(word, PCI_REG(SH7751_PCIIOBR));
-	
+	/* Make sure the MSB's of IO window are set to access PCI space
+	 * correctly */
+	word = PCIBIOS_MIN_IO & SH4_PCIIOBR_MASK;
+	pr_debug("PCI: Setting upper bits of IO window to 0x%x\n", word);
+	pci_write_reg(word, SH4_PCIIOBR);
+
 	/* Set PCI WCRx, BCRx's, copy from BSC locations */
 
 	/* check BCR for SDRAM in specified area */
@@ -344,19 +185,19 @@
 	case SH7751_CS5_BASE_ADDR: word = __area_sdram_check(5); break;
 	case SH7751_CS6_BASE_ADDR: word = __area_sdram_check(6); break;
 	}
-	
+
 	if (!word)
 		return 0;
 
 	/* configure the wait control registers */
 	word = inl(SH7751_WCR1);
-	outl(word, PCI_REG(SH7751_PCIWCR1));
+	pci_write_reg(word, SH4_PCIWCR1);
 	word = inl(SH7751_WCR2);
-	outl(word, PCI_REG(SH7751_PCIWCR2));
+	pci_write_reg(word, SH4_PCIWCR2);
 	word = inl(SH7751_WCR3);
-	outl(word, PCI_REG(SH7751_PCIWCR3));
+	pci_write_reg(word, SH4_PCIWCR3);
 	word = inl(SH7751_MCR);
-	outl(word, PCI_REG(SH7751_PCIMCR));
+	pci_write_reg(word, SH4_PCIMCR);
 
 	/* NOTE: I'm ignoring the PCI error IRQs for now..
 	 * TODO: add support for the internal error interrupts and
@@ -369,49 +210,8 @@
 
 	/* SH7751 init done, set central function init complete */
 	/* use round robin mode to stop a device starving/overruning */
-	word = SH7751_PCICR_PREFIX | SH7751_PCICR_CFIN | SH7751_PCICR_ARBM;
-	outl(word,PCI_REG(SH7751_PCICR)); 
+	word = SH4_PCICR_PREFIX | SH4_PCICR_CFIN | SH4_PCICR_ARBM;
+	pci_write_reg(word, SH4_PCICR);
 
 	return 1;
 }
-
-char * __init pcibios_setup(char *str)
-{
-	if (!strcmp(str, "off")) {
-		pci_probe = 0;
-		return NULL;
-	}
-
-	return str;
-}
-
-/* 
- * 	IRQ functions 
- */
-static u8 __init sh7751_no_swizzle(struct pci_dev *dev, u8 *pin)
-{
-	/* no swizzling */
-	return PCI_SLOT(dev->devfn);
-}
-
-static int sh7751_pci_lookup_irq(struct pci_dev *dev, u8 slot, u8 pin)
-{
-	int irq = -1;
-
-	/* now lookup the actual IRQ on a platform specific basis (pci-'platform'.c) */
-	irq = pcibios_map_platform_irq(slot,pin);
-	if( irq < 0 ) {
-		pr_debug("PCI: Error mapping IRQ on device %s\n", pci_name(dev));
-		return irq;
-	}
-
-	pr_debug("Setting IRQ for slot %s to %d\n", pci_name(dev), irq);
-
-	return irq;
-}
-
-void __init pcibios_fixup_irqs(void)
-{
-	pci_fixup_irqs(sh7751_no_swizzle, sh7751_pci_lookup_irq);
-}
-
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7751.h linux-2.6.17/arch/sh/drivers/pci/pci-sh7751.h
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7751.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/pci-sh7751.h	2006-07-12 16:54:21.000000000 +0000
@@ -3,7 +3,7 @@
  *
  *  Dustin McIntire (dustin@sensoria.com) (c) 2001
  *  Paul Mundt (lethal@linux-sh.org) (c) 2003
- *	
+ *
  *  May be copied or modified under the terms of the GNU General Public
  *  License.  See linux/COPYING for more information.
  *
@@ -12,28 +12,6 @@
 #ifndef _PCI_SH7751_H_
 #define _PCI_SH7751_H_
 
-#include <linux/pci.h>
-
-/* set debug level 4=verbose...1=terse */
-//#define DEBUG_PCI 3
-#undef DEBUG_PCI
-
-#ifdef DEBUG_PCI
-#define PCIDBG(n, x...) { if(DEBUG_PCI>=n) printk(x); }
-#else
-#define PCIDBG(n, x...)
-#endif
-
-/* startup values */
-#define PCI_PROBE_BIOS 1
-#define PCI_PROBE_CONF1 2
-#define PCI_PROBE_CONF2 4
-#define PCI_NO_SORT 0x100
-#define PCI_BIOS_SORT 0x200
-#define PCI_NO_CHECKS 0x400
-#define PCI_ASSIGN_ROMS 0x1000
-#define PCI_BIOS_IRQ_SCAN 0x2000
-
 /* Platform Specific Values */
 #define SH7751_VENDOR_ID             0x1054
 #define SH7751_DEVICE_ID             0x3505
@@ -128,131 +106,6 @@
   #define SH7751_PCICONF17_PMEN      0x00010000  /* PME Enable */
   #define SH7751_PCICONF17_PWST      0x00000003  /* Power State */
 /* SH7715 Internal PCI Registers */
-#define SH7751_PCICR               0x100         /* PCI Control Register */
-  #define SH7751_PCICR_PREFIX        0xA5000000  /* CR prefix for write */
-  #define SH7751_PCICR_TRSB          0x00000200  /* Target Read Single */
-  #define SH7751_PCICR_BSWP          0x00000100  /* Target Byte Swap */
-  #define SH7751_PCICR_PLUP          0x00000080  /* Enable PCI Pullup */
-  #define SH7751_PCICR_ARBM          0x00000040  /* PCI Arbitration Mode */
-  #define SH7751_PCICR_MD            0x00000030  /* MD9 and MD10 status */
-  #define SH7751_PCICR_SERR          0x00000008  /* SERR output assert */
-  #define SH7751_PCICR_INTA          0x00000004  /* INTA output assert */
-  #define SH7751_PCICR_PRST          0x00000002  /* PCI Reset Assert */
-  #define SH7751_PCICR_CFIN          0x00000001  /* Central Fun. Init Done */
-#define SH7751_PCILSR0             0x104         /* PCI Local Space Register0 */
-#define SH7751_PCILSR1             0x108         /* PCI Local Space Register1 */
-#define SH7751_PCILAR0             0x10C         /* PCI Local Address Register1 */
-#define SH7751_PCILAR1             0x110         /* PCI Local Address Register1 */
-#define SH7751_PCIINT              0x114         /* PCI Interrupt Register */
-  #define SH7751_PCIINT_MLCK         0x00008000  /* Master Lock Error */
-  #define SH7751_PCIINT_TABT         0x00004000  /* Target Abort Error */
-  #define SH7751_PCIINT_TRET         0x00000200  /* Target Retry Error */
-  #define SH7751_PCIINT_MFDE         0x00000100  /* Master Func. Disable Error */
-  #define SH7751_PCIINT_PRTY         0x00000080  /* Address Parity Error */
-  #define SH7751_PCIINT_SERR         0x00000040  /* SERR Detection Error */
-  #define SH7751_PCIINT_TWDP         0x00000020  /* Tgt. Write Parity Error */
-  #define SH7751_PCIINT_TRDP         0x00000010  /* Tgt. Read Parity Error Det. */
-  #define SH7751_PCIINT_MTABT        0x00000008  /* Master-Tgt. Abort Error */
-  #define SH7751_PCIINT_MMABT        0x00000004  /* Master-Master Abort Error */
-  #define SH7751_PCIINT_MWPD         0x00000002  /* Master Write PERR Detect */
-  #define SH7751_PCIINT_MRPD         0x00000002  /* Master Read PERR Detect */
-#define SH7751_PCIINTM             0x118         /* PCI Interrupt Mask Register */
-#define SH7751_PCIALR              0x11C         /* Error Address Register */
-#define SH7751_PCICLR              0x120         /* Error Command/Data Register */
-  #define SH7751_PCICLR_MPIO         0x80000000  /* Error Command/Data Register */
-  #define SH7751_PCICLR_MDMA0        0x40000000  /* DMA0 Transfer Error */
-  #define SH7751_PCICLR_MDMA1        0x20000000  /* DMA1 Transfer Error */
-  #define SH7751_PCICLR_MDMA2        0x10000000  /* DMA2 Transfer Error */
-  #define SH7751_PCICLR_MDMA3        0x08000000  /* DMA3 Transfer Error */
-  #define SH7751_PCICLR_TGT          0x04000000  /* Target Transfer Error */
-  #define SH7751_PCICLR_CMDL         0x0000000F  /* PCI Command at Error */
-#define SH7751_PCIAINT             0x130         /* Arbiter Interrupt Register */
-  #define SH7751_PCIAINT_MBKN        0x00002000  /* Master Broken Interrupt */
-  #define SH7751_PCIAINT_TBTO        0x00001000  /* Target Bus Time Out */
-  #define SH7751_PCIAINT_MBTO        0x00001000  /* Master Bus Time Out */
-  #define SH7751_PCIAINT_TABT        0x00000008  /* Target Abort */
-  #define SH7751_PCIAINT_MABT        0x00000004  /* Master Abort */
-  #define SH7751_PCIAINT_RDPE        0x00000002  /* Read Data Parity Error */
-  #define SH7751_PCIAINT_WDPE        0x00000002  /* Write Data Parity Error */
-#define SH7751_PCIAINTM            0x134         /* Arbiter Int. Mask Register */
-#define SH7751_PCIBMLR             0x138         /* Error Bus Master Register */
-  #define SH7751_PCIBMLR_REQ4        0x00000010  /* REQ4 bus master at error */
-  #define SH7751_PCIBMLR_REQ3        0x00000008  /* REQ3 bus master at error */
-  #define SH7751_PCIBMLR_REQ2        0x00000004  /* REQ2 bus master at error */
-  #define SH7751_PCIBMLR_REQ1        0x00000002  /* REQ1 bus master at error */
-  #define SH7751_PCIBMLR_REQ0        0x00000001  /* REQ0 bus master at error */
-#define SH7751_PCIDMABT            0x140         /* DMA Transfer Arb. Register */
-  #define SH7751_PCIDMABT_RRBN       0x00000001  /* DMA Arbitor Round-Robin */
-#define SH7751_PCIDPA0             0x180         /* DMA0 Transfer Addr. Register */
-#define SH7751_PCIDLA0             0x184         /* DMA0 Local Addr. Register */
-#define SH7751_PCIDTC0             0x188         /* DMA0 Transfer Cnt. Register */
-#define SH7751_PCIDCR0             0x18C         /* DMA0 Control Register */
-  #define SH7751_PCIDCR_ALGN         0x00000600  /* DMA Alignment Mode */
-  #define SH7751_PCIDCR_MAST         0x00000100  /* DMA Termination Type */
-  #define SH7751_PCIDCR_INTM         0x00000080  /* DMA Interrupt Done Mask*/
-  #define SH7751_PCIDCR_INTS         0x00000040  /* DMA Interrupt Done Status */
-  #define SH7751_PCIDCR_LHLD         0x00000020  /* Local Address Control */
-  #define SH7751_PCIDCR_PHLD         0x00000010  /* PCI Address Control*/
-  #define SH7751_PCIDCR_IOSEL        0x00000008  /* PCI Address Space Type */
-  #define SH7751_PCIDCR_DIR          0x00000004  /* DMA Transfer Direction */
-  #define SH7751_PCIDCR_STOP         0x00000002  /* Force DMA Stop */
-  #define SH7751_PCIDCR_STRT         0x00000001  /* DMA Start */
-#define SH7751_PCIDPA1             0x190         /* DMA1 Transfer Addr. Register */
-#define SH7751_PCIDLA1             0x194         /* DMA1 Local Addr. Register */
-#define SH7751_PCIDTC1             0x198         /* DMA1 Transfer Cnt. Register */
-#define SH7751_PCIDCR1             0x19C         /* DMA1 Control Register */
-#define SH7751_PCIDPA2             0x1A0         /* DMA2 Transfer Addr. Register */
-#define SH7751_PCIDLA2             0x1A4         /* DMA2 Local Addr. Register */
-#define SH7751_PCIDTC2             0x1A8         /* DMA2 Transfer Cnt. Register */
-#define SH7751_PCIDCR2             0x1AC         /* DMA2 Control Register */
-#define SH7751_PCIDPA3             0x1B0         /* DMA3 Transfer Addr. Register */
-#define SH7751_PCIDLA3             0x1B4         /* DMA3 Local Addr. Register */
-#define SH7751_PCIDTC3             0x1B8         /* DMA3 Transfer Cnt. Register */
-#define SH7751_PCIDCR3             0x1BC         /* DMA3 Control Register */
-#define SH7751_PCIPAR              0x1C0         /* PIO Address Register */
-  #define SH7751_PCIPAR_CFGEN        0x80000000  /* Configuration Enable */
-  #define SH7751_PCIPAR_BUSNO        0x00FF0000  /* Config. Bus Number */
-  #define SH7751_PCIPAR_DEVNO        0x0000FF00  /* Config. Device Number */
-  #define SH7751_PCIPAR_REGAD        0x000000FC  /* Register Address Number */
-#define SH7751_PCIMBR              0x1C4         /* Memory Base Address Register */
-  #define SH7751_PCIMBR_MASK         0xFF000000  /* Memory Space Mask */
-  #define SH7751_PCIMBR_LOCK         0x00000001  /* Lock Memory Space */
-#define SH7751_PCIIOBR             0x1C8         /* I/O Base Address Register */
-  #define SH7751_PCIIOBR_MASK         0xFFFC0000 /* IO Space Mask */
-  #define SH7751_PCIIOBR_LOCK         0x00000001 /* Lock IO Space */
-#define SH7751_PCIPINT             0x1CC         /* Power Mgmnt Int. Register */
-  #define SH7751_PCIPINT_D3           0x00000002 /* D3 Pwr Mgmt. Interrupt */
-  #define SH7751_PCIPINT_D0           0x00000001 /* D0 Pwr Mgmt. Interrupt */  
-#define SH7751_PCIPINTM            0x1D0         /* Power Mgmnt Mask Register */
-#define SH7751_PCICLKR             0x1D4         /* Clock Ctrl. Register */
-  #define SH7751_PCICLKR_PCSTP        0x00000002 /* PCI Clock Stop */
-  #define SH7751_PCICLKR_BCSTP        0x00000002 /* BCLK Clock Stop */
-/* For definitions of BCR, MCR see ... */
-#define SH7751_PCIBCR1             0x1E0         /* Memory BCR1 Register */
-#define SH7751_PCIBCR2             0x1E4         /* Memory BCR2 Register */
-#define SH7751_PCIWCR1             0x1E8         /* Wait Control 1 Register */
-#define SH7751_PCIWCR2             0x1EC         /* Wait Control 2 Register */
-#define SH7751_PCIWCR3             0x1F0         /* Wait Control 3 Register */
-#define SH7751_PCIMCR              0x1F4         /* Memory Control Register */
-#define SH7751_PCIBCR3		   0x1f8	 /* Memory BCR3 Register */
-#define SH7751_PCIPCTR             0x200         /* Port Control Register */
-  #define SH7751_PCIPCTR_P2EN        0x000400000 /* Port 2 Enable */
-  #define SH7751_PCIPCTR_P1EN        0x000200000 /* Port 1 Enable */
-  #define SH7751_PCIPCTR_P0EN        0x000100000 /* Port 0 Enable */
-  #define SH7751_PCIPCTR_P2UP        0x000000020 /* Port2 Pull Up Enable */
-  #define SH7751_PCIPCTR_P2IO        0x000000010 /* Port2 Output Enable */
-  #define SH7751_PCIPCTR_P1UP        0x000000008 /* Port1 Pull Up Enable */
-  #define SH7751_PCIPCTR_P1IO        0x000000004 /* Port1 Output Enable */
-  #define SH7751_PCIPCTR_P0UP        0x000000002 /* Port0 Pull Up Enable */
-  #define SH7751_PCIPCTR_P0IO        0x000000001 /* Port0 Output Enable */
-#define SH7751_PCIPDTR             0x204         /* Port Data Register */
-  #define SH7751_PCIPDTR_PB5         0x000000020 /* Port 5 Enable */
-  #define SH7751_PCIPDTR_PB4         0x000000010 /* Port 4 Enable */
-  #define SH7751_PCIPDTR_PB3         0x000000008 /* Port 3 Enable */
-  #define SH7751_PCIPDTR_PB2         0x000000004 /* Port 2 Enable */
-  #define SH7751_PCIPDTR_PB1         0x000000002 /* Port 1 Enable */
-  #define SH7751_PCIPDTR_PB0         0x000000001 /* Port 0 Enable */
-#define SH7751_PCIPDR              0x220         /* Port IO Data Register */
 
 /* Memory Control Registers */
 #define SH7751_BCR1                0xFF800000    /* Memory BCR1 Register */
@@ -274,30 +127,9 @@
 #define SH7751_CS5_BASE_ADDR       (SH7751_CS4_BASE_ADDR + SH7751_MEM_REGION_SIZE)
 #define SH7751_CS6_BASE_ADDR       (SH7751_CS5_BASE_ADDR + SH7751_MEM_REGION_SIZE)
 
-/* General PCI values */
-#define SH7751_PCI_HOST_BRIDGE		0x6
-
-/* Flags */
-#define SH7751_PCIC_NO_RESET	0x0001
-
-/* External functions defined per platform i.e. Big Sur, SE... (these could be routed 
- * through the machine vectors... */
-extern int pcibios_init_platform(void);
-extern int pcibios_map_platform_irq(u8 slot, u8 pin);
-
-struct sh7751_pci_address_space {
-	unsigned long base;
-	unsigned long size;
-};
-
-struct sh7751_pci_address_map {
-	struct sh7751_pci_address_space window0;
-	struct sh7751_pci_address_space window1;
-	unsigned long flags;
-};
+struct sh4_pci_address_map;
 
 /* arch/sh/drivers/pci/pci-sh7751.c */
-extern int sh7751_pcic_init(struct sh7751_pci_address_map *map);
+int sh7751_pcic_init(struct sh4_pci_address_map *map);
 
 #endif /* _PCI_SH7751_H_ */
-
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7780.c linux-2.6.17/arch/sh/drivers/pci/pci-sh7780.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7780.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/pci-sh7780.c	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,139 @@
+/*
+ *	Low-Level PCI Support for the SH7780
+ *
+ *  Dustin McIntire (dustin@sensoria.com)
+ *	Derived from arch/i386/kernel/pci-*.c which bore the message:
+ *	(c) 1999--2000 Martin Mares <mj@ucw.cz>
+ *
+ *  Ported to the new API by Paul Mundt <lethal@linux-sh.org>
+ *  With cleanup by Paul van Gool <pvangool@mimotech.com>
+ *
+ *  May be copied or modified under the terms of the GNU General Public
+ *  License.  See linux/COPYING for more information.
+ *
+ */
+
+#undef DEBUG
+
+#include <linux/config.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/pci.h>
+#include <linux/errno.h>
+#include <linux/delay.h>
+#include "pci-sh4.h"
+
+/*
+ * Initialization. Try all known PCI access methods. Note that we support
+ * using both PCI BIOS and direct access: in such cases, we use I/O ports
+ * to access config space.
+ *
+ * Note that the platform specific initialization (BSC registers, and memory
+ * space mapping) will be called via the platform defined function
+ * pcibios_init_platform().
+ */
+static int __init sh7780_pci_init(void)
+{
+	unsigned int id;
+	int ret;
+
+	pr_debug("PCI: Starting intialization.\n");
+
+	outl(0x00000001, SH7780_PCI_VCR2); /* Enable PCIC */
+
+	/* check for SH7780/SH7780R hardware */
+	id = pci_read_reg(SH7780_PCIVID);
+	if ((id != ((SH7780_DEVICE_ID << 16) | SH7780_VENDOR_ID)) &&
+	    (id != ((SH7781_DEVICE_ID << 16) | SH7780_VENDOR_ID))) {
+		printk(KERN_ERR "PCI: This is not an SH7780 (%x)\n", id);
+		return -ENODEV;
+	}
+
+	/* Setup the INTC */
+	ctrl_outl(0x00200000, INTC_ICR0);	/* INTC SH-4 Mode */
+	ctrl_outl(0x00078000, INTC_INT2MSKCR);	/* enable PCIINTA - PCIINTD */
+	ctrl_outl(0x40000000, INTC_INTMSK1);	/* disable IRL4-7 Interrupt */
+	ctrl_outl(0x0000fffe, INTC_INTMSK2);	/* disable IRL4-7 Interrupt */
+	ctrl_outl(0x80000000, INTC_INTMSKCLR1);	/* enable IRL0-3 Interrupt */
+	ctrl_outl(0xfffe0000, INTC_INTMSKCLR2);	/* enable IRL0-3 Interrupt */
+
+	if ((ret = sh4_pci_check_direct()) != 0)
+		return ret;
+
+	return pcibios_init_platform();
+}
+core_initcall(sh7780_pci_init);
+
+int __init sh7780_pcic_init(struct sh4_pci_address_map *map)
+{
+	u32 word;
+
+	/*
+	 * This code is unused for some boards as it is done in the
+	 * bootloader and doing it here means the MAC addresses loaded
+	 * by the bootloader get lost.
+	 */
+	if (!(map->flags & SH4_PCIC_NO_RESET)) {
+		/* toggle PCI reset pin */
+		word = SH4_PCICR_PREFIX | SH4_PCICR_PRST;
+		pci_write_reg(word, SH4_PCICR);
+		/* Wait for a long time... not 1 sec. but long enough */
+		mdelay(100);
+		word = SH4_PCICR_PREFIX;
+		pci_write_reg(word, SH4_PCICR);
+	}
+
+	/* set the command/status bits to:
+	 * Wait Cycle Control + Parity Enable + Bus Master +
+	 * Mem space enable
+	 */
+	pci_write_reg(0x00000046, SH7780_PCICMD);
+
+	/* define this host as the host bridge */
+	word = PCI_BASE_CLASS_BRIDGE << 24;
+	pci_write_reg(word, SH7780_PCIRID);
+
+	/* Set IO and Mem windows to local address
+	 * Make PCI and local address the same for easy 1 to 1 mapping
+	 * Window0 = map->window0.size @ non-cached area base = SDRAM
+	 * Window1 = map->window1.size @ cached area base = SDRAM
+	 */
+	word = ((map->window0.size - 1) & 0x1ff00001) | 0x01;
+	pci_write_reg(0x07f00001, SH4_PCILSR0);
+	word = ((map->window1.size - 1) & 0x1ff00001) | 0x01;
+	pci_write_reg(0x00000001, SH4_PCILSR1);
+	/* Set the values on window 0 PCI config registers */
+	word = P2SEGADDR(map->window0.base);
+	pci_write_reg(0xa8000000, SH4_PCILAR0);
+	pci_write_reg(0x08000000, SH7780_PCIMBAR0);
+	/* Set the values on window 1 PCI config registers */
+	word = P2SEGADDR(map->window1.base);
+	pci_write_reg(0x00000000, SH4_PCILAR1);
+	pci_write_reg(0x00000000, SH7780_PCIMBAR1);
+
+	/* Map IO space into PCI IO window
+	 * The IO window is 64K-PCIBIOS_MIN_IO in size
+	 * IO addresses will be translated to the
+	 * PCI IO window base address
+	 */
+	pr_debug("PCI: Mapping IO address 0x%x - 0x%x to base 0x%x\n",
+		 PCIBIOS_MIN_IO, (64 << 10),
+		 SH7780_PCI_IO_BASE + PCIBIOS_MIN_IO);
+
+	/* NOTE: I'm ignoring the PCI error IRQs for now..
+	 * TODO: add support for the internal error interrupts and
+	 * DMA interrupts...
+	 */
+
+#ifdef CONFIG_SH_R7780RP
+	pci_fixup_pcic();
+#endif
+
+	/* SH7780 init done, set central function init complete */
+	/* use round robin mode to stop a device starving/overruning */
+	word = SH4_PCICR_PREFIX | SH4_PCICR_CFIN | SH4_PCICR_FTO;
+	pci_write_reg(word, SH4_PCICR);
+
+	return 1;
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7780.h linux-2.6.17/arch/sh/drivers/pci/pci-sh7780.h
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7780.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/pci-sh7780.h	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,94 @@
+/*
+ *	Low-Level PCI Support for SH7780 targets
+ *
+ *  Dustin McIntire (dustin@sensoria.com) (c) 2001
+ *  Paul Mundt (lethal@linux-sh.org) (c) 2003
+ *
+ *  May be copied or modified under the terms of the GNU General Public
+ *  License.  See linux/COPYING for more information.
+ *
+ */
+
+#ifndef _PCI_SH7780_H_
+#define _PCI_SH7780_H_
+
+/* Platform Specific Values */
+#define SH7780_VENDOR_ID	0x1912
+#define SH7780_DEVICE_ID	0x0002
+#define SH7781_DEVICE_ID	0x0001
+
+/* SH7780 Control Registers */
+#define	SH7780_PCI_VCR0		0xFE000000
+#define	SH7780_PCI_VCR1		0xFE000004
+#define	SH7780_PCI_VCR2		0xFE000008
+
+/* SH7780 Specific Values */
+#define SH7780_PCI_CONFIG_BASE	0xFD000000	/* Config space base addr */
+#define SH7780_PCI_CONFIG_SIZE	0x01000000	/* Config space size */
+
+#define SH7780_PCI_MEMORY_BASE	0xFD000000	/* Memory space base addr */
+#define SH7780_PCI_MEM_SIZE	0x01000000	/* Size of Memory window */
+
+#define SH7780_PCI_IO_BASE	0xFE400000	/* IO space base address */
+#define SH7780_PCI_IO_SIZE	0x00400000	/* Size of IO window */
+
+#define SH7780_PCIREG_BASE	0xFE040000	/* PCI regs base address */
+#define PCI_REG(n)		(SH7780_PCIREG_BASE+n)
+
+/* SH7780 PCI Config Registers */
+#define SH7780_PCIVID		0x000		/* Vendor ID */
+#define SH7780_PCIDID		0x002		/* Device ID */
+#define SH7780_PCICMD		0x004		/* Command */
+#define SH7780_PCISTATUS	0x006		/* Status */
+#define SH7780_PCIRID		0x008		/* Revision ID */
+#define SH7780_PCIPIF		0x009		/* Program Interface */
+#define SH7780_PCISUB		0x00a		/* Sub class code */
+#define SH7780_PCIBCC		0x00b		/* Base class code */
+#define SH7780_PCICLS		0x00c		/* Cache line size */
+#define SH7780_PCILTM		0x00d		/* latency timer */
+#define SH7780_PCIHDR		0x00e		/* Header type */
+#define SH7780_PCIBIST		0x00f		/* BIST */
+#define SH7780_PCIIBAR		0x010		/* IO Base address */
+#define SH7780_PCIMBAR0		0x014		/* Memory base address0 */
+#define SH7780_PCIMBAR1		0x018		/* Memory base address1 */
+#define SH7780_PCISVID		0x02c		/* Sub system vendor ID */
+#define SH7780_PCISID		0x02e		/* Sub system ID */
+#define SH7780_PCICP		0x034
+#define SH7780_PCIINTLINE	0x03c		/* Interrupt line */
+#define SH7780_PCIINTPIN	0x03d		/* Interrupt pin */
+#define SH7780_PCIMINGNT	0x03e		/* Minumum grand */
+#define SH7780_PCIMAXLAT	0x03f		/* Maxmum latency */
+#define SH7780_PCICID		0x040
+#define SH7780_PCINIP		0x041
+#define SH7780_PCIPMC		0x042
+#define SH7780_PCIPMCSR		0x044
+#define SH7780_PCIPMCSR_BSE	0x046
+#define SH7780_PCICDD		0x047
+
+#define SH7780_PCIMBR0		0x1E0
+#define SH7780_PCIMBMR0		0x1E4
+#define SH7780_PCIMBR2		0x1F0
+#define SH7780_PCIMBMR2		0x1F4
+#define SH7780_PCIIOBR		0x1F8
+#define SH7780_PCIIOBMR		0x1FC
+#define SH7780_PCICSCR0		0x210		/* Cache Snoop1 Cnt. Register */
+#define SH7780_PCICSCR1		0x214		/* Cache Snoop2 Cnt. Register */
+#define SH7780_PCICSAR0		0x218	/* Cache Snoop1 Addr. Register */
+#define SH7780_PCICSAR1		0x21C	/* Cache Snoop2 Addr. Register */
+
+/* General Memory Config Addresses */
+#define SH7780_CS0_BASE_ADDR	0x0
+#define SH7780_MEM_REGION_SIZE	0x04000000
+#define SH7780_CS1_BASE_ADDR	(SH7780_CS0_BASE_ADDR + SH7780_MEM_REGION_SIZE)
+#define SH7780_CS2_BASE_ADDR	(SH7780_CS1_BASE_ADDR + SH7780_MEM_REGION_SIZE)
+#define SH7780_CS3_BASE_ADDR	(SH7780_CS2_BASE_ADDR + SH7780_MEM_REGION_SIZE)
+#define SH7780_CS4_BASE_ADDR	(SH7780_CS3_BASE_ADDR + SH7780_MEM_REGION_SIZE)
+#define SH7780_CS5_BASE_ADDR	(SH7780_CS4_BASE_ADDR + SH7780_MEM_REGION_SIZE)
+#define SH7780_CS6_BASE_ADDR	(SH7780_CS5_BASE_ADDR + SH7780_MEM_REGION_SIZE)
+
+struct sh4_pci_address_map;
+
+/* arch/sh/drivers/pci/pci-sh7780.c */
+int sh7780_pcic_init(struct sh4_pci_address_map *map);
+
+#endif /* _PCI_SH7780_H_ */
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-st40.c linux-2.6.17/arch/sh/drivers/pci/pci-st40.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-st40.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/pci-st40.c	2006-07-12 16:54:21.000000000 +0000
@@ -71,12 +71,6 @@
 static void pci_set_rbar_region(unsigned int region,     unsigned long localAddr,
 			 unsigned long pciOffset, unsigned long regionSize);
 
-/*
- * The pcibios_map_platform_irq function is defined in the appropriate
- * board specific code and referenced here
- */
-extern int __init pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin);
-
 static __init void SetPCIPLL(void)
 {
 	{
@@ -110,12 +104,12 @@
 
 static struct pci_err int_error[]={
   { INT_MNLTDIM,"MNLTDIM: Master non-lock transfer"},
-  { INT_TTADI,  "TTADI: Illegal byte enable in I/O transfer"},
-  { INT_TMTO,   "TMTO: Target memory read/write timeout"},
+  { INT_TTADI,  "TTADI: Illegal byte enable in I/O transfer"},  
+  { INT_TMTO,   "TMTO: Target memory read/write timeout"},  
   { INT_MDEI,   "MDEI: Master function disable error"},
   { INT_APEDI,  "APEDI: Address parity error"},
   { INT_SDI,    "SDI: SERR detected"},
-  { INT_DPEITW, "DPEITW: Data parity error target write"},
+  { INT_DPEITW, "DPEITW: Data parity error target write"},  
   { INT_PEDITR, "PEDITR: PERR detected"},
   { INT_TADIM,  "TADIM: Target abort detected"},
   { INT_MADIM,  "MADIM: Master abort detected"},
@@ -178,7 +172,7 @@
 	pci_cir = ST40PCI_READ(CIR);pci_air = ST40PCI_READ(AIR);
 
 	/* Reset state to stop multiple interrupts */
-        ST40PCI_WRITE(INT, ~0); ST40PCI_WRITE(AINT, ~0);
+        ST40PCI_WRITE(INT, ~0); ST40PCI_WRITE(AINT, ~0); 
 
 
 	if(++count>1) return IRQ_HANDLED;
@@ -193,8 +187,8 @@
         if(pci_aint) {
 		printk("** AINT register status\n");
 		print_pci_errors(pci_aint,aint_error,NUM_PCI_AINT_ERRS);
-	}
-
+	}   
+	
 	printk("** Address and command info\n");
 
 	printk("** Command  %s : Address 0x%x\n",
@@ -246,7 +240,7 @@
 	 */
 	if ((d->class >> 8) != PCI_CLASS_STORAGE_IDE)
 		return;
-	printk("PCI: IDE base address fixup for %s\n", pci_name(d));
+	printk("PCI: IDE base address fixup for %s\n", d->slot_name);
 	for(i=0; i<4; i++) {
 		struct resource *r = &d->resource[i];
 		if ((r->start & ~0x80) == 0x374) {
@@ -255,11 +249,13 @@
 		}
 	}
 }
+
 DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases);
 
 int __init st40pci_init(unsigned memStart, unsigned memSize)
 {
-	u32 lsr0;
+
+        printk("PCI version register reads 0x%x\n",ST40PCI_READ(VCR_VERSION));
 
 	SetPCIPLL();
 
@@ -423,19 +419,12 @@
 /* Everything hangs off this */
 static struct pci_bus *pci_root_bus;
 
-
-static u8 __init no_swizzle(struct pci_dev *dev, u8 * pin)
-{
-	return PCI_SLOT(dev->devfn);
-}
-
-
 static int __init pcibios_init(void)
 {
 	extern unsigned long memory_start, memory_end;
 
 	printk(KERN_ALERT "pci-st40.c: pcibios_init\n");
-
+	
 	if (sh_mv.mv_init_pci != NULL) {
 		sh_mv.mv_init_pci();
 	}
@@ -466,17 +455,11 @@
 	/* ok, do the scan man */
 	pci_root_bus = pci_scan_bus(0, &st40pci_config_ops, NULL);
 	pci_assign_unassigned_resources();
-	pci_fixup_irqs(no_swizzle, pcibios_map_platform_irq);
 
 	return 0;
 }
-
 subsys_initcall(pcibios_init);
 
-void __init pcibios_fixup_bus(struct pci_bus *bus)
-{
-}
-
 /*
  * Publish a region of local address space over the PCI bus
  * to other devices.
@@ -505,5 +488,5 @@
 
 	/* Size of region */
 	ST40PCI_WRITE_INDEXED(RSR, region, mask | 1);
-}
+} 
 
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci.c linux-2.6.17/arch/sh/drivers/pci/pci.c
--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/pci/pci.c	2006-07-12 16:54:21.000000000 +0000
@@ -1,21 +1,45 @@
-/* arch/sh/kernel/pci.c
- * $Id: pci.c,v 1.1 2003/08/24 19:15:45 lethal Exp $
+/*
+ * arch/sh/drivers/pci/pci.c
  *
  * Copyright (c) 2002 M. R. Brown  <mrbrown@linux-sh.org>
- * 
- * 
+ * Copyright (c) 2004 - 2006 Paul Mundt  <lethal@linux-sh.org>
+ *
  * These functions are collected here to reduce duplication of common
  * code amongst the many platform-specific PCI support code files.
- * 
+ *
  * These routines require the following board-specific routines:
  * void pcibios_fixup_irqs();
  *
  * See include/asm-sh/pci.h for more information.
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
  */
-
 #include <linux/kernel.h>
 #include <linux/pci.h>
 #include <linux/init.h>
+#include <asm/io.h>
+
+static inline u8 bridge_swizzle(u8 pin, u8 slot)
+{
+	return (((pin - 1) + slot) % 4) + 1;
+}
+
+static u8 __init simple_swizzle(struct pci_dev *dev, u8 *pinp)
+{
+	u8 pin = *pinp;
+
+	while (dev->bus->parent) {
+		pin = bridge_swizzle(pin, PCI_SLOT(dev->devfn));
+		/* Move up the chain of bridges. */
+		dev = dev->bus->self;
+	}
+	*pinp = pin;
+
+	/* The slot is the slot of the last bridge. */
+	return PCI_SLOT(dev->devfn);
+}
 
 static int __init pcibios_init(void)
 {
@@ -26,26 +50,32 @@
 #ifdef CONFIG_PCI_AUTO
 	/* assign resources */
 	busno = 0;
-	for (p = board_pci_channels; p->pci_ops != NULL; p++) {
+	for (p = board_pci_channels; p->pci_ops != NULL; p++)
 		busno = pciauto_assign_resources(busno, p) + 1;
-	}
 #endif
 
 	/* scan the buses */
 	busno = 0;
-	for (p= board_pci_channels; p->pci_ops != NULL; p++) {
+	for (p = board_pci_channels; p->pci_ops != NULL; p++) {
 		bus = pci_scan_bus(busno, p->pci_ops, p);
-		busno = bus->subordinate+1;
+		busno = bus->subordinate + 1;
 	}
 
-	/* board-specific fixups */
-	pcibios_fixup_irqs();
+	pci_fixup_irqs(simple_swizzle, pcibios_map_platform_irq);
 
 	return 0;
 }
-
 subsys_initcall(pcibios_init);
 
+/*
+ *  Called after each bus is probed, but before its children
+ *  are examined.
+ */
+void __init pcibios_fixup_bus(struct pci_bus *bus)
+{
+	pci_read_bridge_bases(bus);
+}
+
 void
 pcibios_update_resource(struct pci_dev *dev, struct resource *root,
 			struct resource *res, int resource)
@@ -61,13 +91,17 @@
 		new |= PCI_ROM_ADDRESS_ENABLE;
 		reg = dev->rom_base_reg;
 	} else {
-		/* Somebody might have asked allocation of a non-standard resource */
+		/*
+		 * Somebody might have asked allocation of a non-standard
+		 * resource
+		 */
 		return;
 	}
-	
+
 	pci_write_config_dword(dev, reg, new);
 	pci_read_config_dword(dev, reg, &check);
-	if ((new ^ check) & ((new & PCI_BASE_ADDRESS_SPACE_IO) ? PCI_BASE_ADDRESS_IO_MASK : PCI_BASE_ADDRESS_MEM_MASK)) {
+	if ((new ^ check) & ((new & PCI_BASE_ADDRESS_SPACE_IO) ?
+		PCI_BASE_ADDRESS_IO_MASK : PCI_BASE_ADDRESS_MEM_MASK)) {
 		printk(KERN_ERR "PCI: Error while updating region "
 		       "%s/%d (%08x != %08x)\n", pci_name(dev), resource,
 		       new, check);
@@ -145,7 +179,8 @@
 		lat = pcibios_max_latency;
 	else
 		return;
-	printk(KERN_INFO "PCI: Setting latency timer of device %s to %d\n", pci_name(dev), lat);
+	printk(KERN_INFO "PCI: Setting latency timer of device %s to %d\n",
+	       pci_name(dev), lat);
 	pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat);
 }
 
@@ -153,3 +188,39 @@
 {
 	pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq);
 }
+
+void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen)
+{
+	unsigned long start = pci_resource_start(dev, bar);
+	unsigned long len = pci_resource_len(dev, bar);
+	unsigned long flags = pci_resource_flags(dev, bar);
+
+	if (unlikely(!len || !start))
+		return NULL;
+	if (maxlen && len > maxlen)
+		len = maxlen;
+
+	/*
+	 * Presently the IORESOURCE_MEM case is a bit special, most
+	 * SH7751 style PCI controllers have PCI memory at a fixed
+	 * location in the address space where no remapping is desired
+	 * (typically at 0xfd000000, but is_pci_memaddr() will know
+	 * best). With the IORESOURCE_MEM case more care has to be taken
+	 * to inhibit page table mapping for legacy cores, but this is
+	 * punted off to __ioremap().
+	 *					-- PFM.
+	 */
+	if (flags & IORESOURCE_IO)
+		return ioport_map(start, len);
+	if (flags & IORESOURCE_MEM)
+		return ioremap(start, len);
+
+	return NULL;
+}
+EXPORT_SYMBOL(pci_iomap);
+
+void pci_iounmap(struct pci_dev *dev, void __iomem *addr)
+{
+	iounmap(addr);
+}
+EXPORT_SYMBOL(pci_iounmap);
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/superhyway/CVS/Entries linux-2.6.17/arch/sh/drivers/superhyway/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/drivers/superhyway/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/superhyway/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,3 @@
+/Makefile/1.1/Thu Mar 17 07:43:07 2005//
+/ops-sh4-202.c/1.3/Tue Jan  3 22:35:52 2006//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/superhyway/CVS/Repository linux-2.6.17/arch/sh/drivers/superhyway/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/drivers/superhyway/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/superhyway/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/drivers/superhyway
diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/superhyway/CVS/Root linux-2.6.17/arch/sh/drivers/superhyway/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/drivers/superhyway/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/drivers/superhyway/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/.cvsignore linux-2.6.17/arch/sh/kernel/.cvsignore
--- linux-2.6.17-vanilla/arch/sh/kernel/.cvsignore	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/.cvsignore	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1 @@
+vmlinux.lds.s
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/CVS/Entries linux-2.6.17/arch/sh/kernel/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/kernel/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,34 @@
+/.cvsignore/1.1/Wed May 12 13:51:13 2004/-ko/
+/Makefile/1.19/Sun Jan 29 17:46:23 2006//
+/apm.c/1.2/Mon Jan 30 15:57:20 2006//
+/asm-offsets.c/1.1/Mon Jun 28 22:03:37 2004/-ko/
+/cf-enabler.c/1.6/Wed Jan  4 18:03:38 2006/-ko/
+/cpufreq.c/1.7/Tue Jan  3 22:35:53 2006/-ko/
+/early_printk.c/1.4/Sat Aug 13 15:49:28 2005//
+/entry.S/1.46/Sun Jan 29 17:46:23 2006/-ko/
+/head.S/1.9/Thu Oct 20 22:51:38 2005/-ko/
+/init_task.c/1.7/Sun Aug 15 16:59:26 2004//
+/io.c/1.7/Wed Nov 23 15:47:38 2005/-ko/
+/io_generic.c/1.6/Tue Jan  3 22:51:47 2006/-ko/
+/kgdb_jmp.S/1.2/Fri Nov  1 17:19:24 2002//
+/kgdb_stub.c/1.5/Sun Feb  5 12:27:59 2006//
+/machine_kexec.c/1.1/Mon Sep 19 19:20:56 2005/-ko/
+/module.c/1.5/Sun Feb 22 23:08:43 2004/-ko/
+/pm.c/1.2/Mon Jan 30 15:57:20 2006//
+/ptrace.c/1.22/Mon Mar 27 21:06:13 2006//
+/relocate_kernel.S/1.1/Mon Sep 19 19:20:56 2005/-ko/
+/semaphore.c/1.4/Thu Mar 17 07:40:18 2005/-ko/
+/sh_bios.c/1.3/Tue Jun 15 18:40:42 2004/-ko/
+/signal.c/1.30/Fri Oct 28 13:12:48 2005/-ko/
+/smp.c/1.10/Mon Mar 27 21:06:14 2006/-ko/
+/sys_sh.c/1.11/Sat Dec 31 11:30:47 2005//
+/vmlinux.lds.S/1.6/Thu Mar 17 07:49:06 2005/-ko/
+D/cpu////
+D/timers////
+/irq.c/1.28/Wed Jul  5 14:50:39 2006/-ko/
+/process.c/1.42/Fri Jul  7 10:15:14 2006/-ko/
+/syscalls.S/1.4/Fri Jul  7 10:15:14 2006/-ko/
+/setup.c/1.53/Sat Jul  8 20:16:09 2006/-ko/
+/time.c/1.38/Sat Jul  8 20:16:09 2006/-ko/
+/sh_ksyms.c/1.26/Wed Jul 12 16:51:54 2006//
+/traps.c/1.21/Wed Jul 12 16:51:54 2006/-ko/
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/CVS/Repository linux-2.6.17/arch/sh/kernel/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/kernel/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/kernel
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/CVS/Root linux-2.6.17/arch/sh/kernel/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/kernel/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/Makefile linux-2.6.17/arch/sh/kernel/Makefile
--- linux-2.6.17-vanilla/arch/sh/kernel/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/Makefile	2006-07-12 16:54:22.000000000 +0000
@@ -6,7 +6,7 @@
 
 obj-y	:= process.o signal.o entry.o traps.o irq.o \
 	ptrace.o setup.o time.o sys_sh.o semaphore.o \
-	io.o io_generic.o sh_ksyms.o
+	io.o io_generic.o sh_ksyms.o syscalls.o
 
 obj-y				+= cpu/ timers/
 
@@ -18,3 +18,5 @@
 obj-$(CONFIG_MODULES)		+= module.o
 obj-$(CONFIG_EARLY_PRINTK)	+= early_printk.o
 obj-$(CONFIG_KEXEC)		+= machine_kexec.o relocate_kernel.o
+obj-$(CONFIG_APM)		+= apm.o
+obj-$(CONFIG_PM)		+= pm.o
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/apm.c linux-2.6.17/arch/sh/kernel/apm.c
--- linux-2.6.17-vanilla/arch/sh/kernel/apm.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/apm.c	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1,539 @@
+/*
+ * bios-less APM driver for hp680
+ *
+ * Copyright 2005 (c) Andriy Skulysh <askulysh@gmail.com>
+ *
+ * based on ARM APM driver by
+ *  Jamey Hicks <jamey@crl.dec.com>
+ *
+ * adapted from the APM BIOS driver for Linux by
+ *  Stephen Rothwell (sfr@linuxcare.com)
+ *
+ * APM 1.2 Reference:
+ *   Intel Corporation, Microsoft Corporation. Advanced Power Management
+ *   (APM) BIOS Interface Specification, Revision 1.2, February 1996.
+ *
+ * [This document is available from Microsoft at:
+ *    http://www.microsoft.com/hwdev/busbios/amp_12.htm]
+ */
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/poll.h>
+#include <linux/timer.h>
+#include <linux/slab.h>
+#include <linux/proc_fs.h>
+#include <linux/miscdevice.h>
+#include <linux/apm_bios.h>
+#include <linux/pm.h>
+#include <linux/pm_legacy.h>
+#include <asm/apm.h>
+
+#define MODNAME "apm"
+
+/*
+ * The apm_bios device is one of the misc char devices.
+ * This is its minor number.
+ */
+#define APM_MINOR_DEV			134
+
+/*
+ * Maximum number of events stored
+ */
+#define APM_MAX_EVENTS			16
+
+struct apm_queue {
+	unsigned int		event_head;
+	unsigned int		event_tail;
+	apm_event_t		events[APM_MAX_EVENTS];
+};
+
+/*
+ * The per-file APM data
+ */
+struct apm_user {
+	struct list_head	list;
+
+	unsigned int		suser: 1;
+	unsigned int		writer: 1;
+	unsigned int		reader: 1;
+
+	int			suspend_result;
+	unsigned int		suspend_state;
+#define SUSPEND_NONE	0		/* no suspend pending */
+#define SUSPEND_PENDING	1		/* suspend pending read */
+#define SUSPEND_READ	2		/* suspend read, pending ack */
+#define SUSPEND_ACKED	3		/* suspend acked */
+#define SUSPEND_DONE	4		/* suspend completed */
+
+	struct apm_queue	queue;
+};
+
+/*
+ * Local variables
+ */
+static int suspends_pending;
+
+static DECLARE_WAIT_QUEUE_HEAD(apm_waitqueue);
+static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue);
+
+/*
+ * This is a list of everyone who has opened /dev/apm_bios
+ */
+static DECLARE_RWSEM(user_list_lock);
+static LIST_HEAD(apm_user_list);
+
+/*
+ * kapmd info.  kapmd provides us a process context to handle
+ * "APM" events within - specifically necessary if we're going
+ * to be suspending the system.
+ */
+static DECLARE_WAIT_QUEUE_HEAD(kapmd_wait);
+static DECLARE_COMPLETION(kapmd_exit);
+static DEFINE_SPINLOCK(kapmd_queue_lock);
+static struct apm_queue kapmd_queue;
+
+int apm_suspended;
+EXPORT_SYMBOL(apm_suspended);
+
+/* Platform-specific apm_read_proc(). */
+int (*apm_get_info)(char *buf, char **start, off_t fpos, int length);
+EXPORT_SYMBOL(apm_get_info);
+
+/*
+ * APM event queue management.
+ */
+static inline int queue_empty(struct apm_queue *q)
+{
+	return q->event_head == q->event_tail;
+}
+
+static inline apm_event_t queue_get_event(struct apm_queue *q)
+{
+	q->event_tail = (q->event_tail + 1) % APM_MAX_EVENTS;
+	return q->events[q->event_tail];
+}
+
+static void queue_add_event(struct apm_queue *q, apm_event_t event)
+{
+	q->event_head = (q->event_head + 1) % APM_MAX_EVENTS;
+	if (q->event_head == q->event_tail) {
+		static int notified;
+
+		if (notified++ == 0)
+			printk(KERN_ERR "apm: an event queue overflowed\n");
+
+		q->event_tail = (q->event_tail + 1) % APM_MAX_EVENTS;
+	}
+	q->events[q->event_head] = event;
+}
+
+static void queue_event_one_user(struct apm_user *as, apm_event_t event)
+{
+	if (as->suser && as->writer) {
+		switch (event) {
+		case APM_SYS_SUSPEND:
+		case APM_USER_SUSPEND:
+			/*
+			 * If this user already has a suspend pending,
+			 * don't queue another one.
+			 */
+			if (as->suspend_state != SUSPEND_NONE)
+				return;
+
+			as->suspend_state = SUSPEND_PENDING;
+			suspends_pending++;
+			break;
+		}
+	}
+	queue_add_event(&as->queue, event);
+}
+
+static void queue_event(apm_event_t event, struct apm_user *sender)
+{
+	struct apm_user *as;
+
+	down_read(&user_list_lock);
+
+	list_for_each_entry(as, &apm_user_list, list)
+		if (as != sender && as->reader)
+			queue_event_one_user(as, event);
+
+	up_read(&user_list_lock);
+	wake_up_interruptible(&apm_waitqueue);
+}
+
+/**
+ * apm_queue_event - queue an APM event for kapmd
+ * @event: APM event
+ *
+ * Queue an APM event for kapmd to process and ultimately take the
+ * appropriate action.  Only a subset of events are handled:
+ *   %APM_LOW_BATTERY
+ *   %APM_POWER_STATUS_CHANGE
+ *   %APM_USER_SUSPEND
+ *   %APM_SYS_SUSPEND
+ *   %APM_CRITICAL_SUSPEND
+ */
+void apm_queue_event(apm_event_t event)
+{
+	spin_lock_irq(&kapmd_queue_lock);
+	queue_add_event(&kapmd_queue, event);
+	spin_unlock_irq(&kapmd_queue_lock);
+
+	wake_up_interruptible(&kapmd_wait);
+}
+EXPORT_SYMBOL(apm_queue_event);
+
+static void apm_suspend(void)
+{
+	struct apm_user *as;
+	int err;
+
+	apm_suspended = 1;
+	err = pm_suspend(PM_SUSPEND_MEM);
+
+	/*
+	 * Anyone on the APM queues will think we're still suspended.
+	 * Send a message so everyone knows we're now awake again.
+	 */
+	queue_event(APM_NORMAL_RESUME, NULL);
+
+	/*
+	 * Finally, wake up anyone who is sleeping on the suspend.
+	 */
+	down_read(&user_list_lock);
+	list_for_each_entry(as, &apm_user_list, list) {
+		as->suspend_result = err;
+		as->suspend_state = SUSPEND_DONE;
+	}
+	up_read(&user_list_lock);
+
+	wake_up(&apm_suspend_waitqueue);
+	apm_suspended = 0;
+}
+
+static ssize_t apm_read(struct file *fp, char __user *buf,
+			size_t count, loff_t *ppos)
+{
+	struct apm_user *as = fp->private_data;
+	apm_event_t event;
+	int i = count, ret = 0;
+
+	if (count < sizeof(apm_event_t))
+		return -EINVAL;
+
+	if (queue_empty(&as->queue) && fp->f_flags & O_NONBLOCK)
+		return -EAGAIN;
+
+	wait_event_interruptible(apm_waitqueue, !queue_empty(&as->queue));
+
+	while ((i >= sizeof(event)) && !queue_empty(&as->queue)) {
+		event = queue_get_event(&as->queue);
+
+		ret = -EFAULT;
+		if (copy_to_user(buf, &event, sizeof(event)))
+			break;
+
+		if (event == APM_SYS_SUSPEND || event == APM_USER_SUSPEND)
+			as->suspend_state = SUSPEND_READ;
+
+		buf += sizeof(event);
+		i -= sizeof(event);
+	}
+
+	if (i < count)
+		ret = count - i;
+
+	return ret;
+}
+
+static unsigned int apm_poll(struct file *fp, poll_table * wait)
+{
+	struct apm_user *as = fp->private_data;
+
+	poll_wait(fp, &apm_waitqueue, wait);
+	return queue_empty(&as->queue) ? 0 : POLLIN | POLLRDNORM;
+}
+
+/*
+ * apm_ioctl - handle APM ioctl
+ *
+ * APM_IOC_SUSPEND
+ *   This IOCTL is overloaded, and performs two functions.  It is used to:
+ *     - initiate a suspend
+ *     - acknowledge a suspend read from /dev/apm_bios.
+ *   Only when everyone who has opened /dev/apm_bios with write permission
+ *   has acknowledge does the actual suspend happen.
+ */
+static int
+apm_ioctl(struct inode * inode, struct file *filp, u_int cmd, u_long arg)
+{
+	struct apm_user *as = filp->private_data;
+	unsigned long flags;
+	int err = -EINVAL;
+
+	if (!as->suser || !as->writer)
+		return -EPERM;
+
+	switch (cmd) {
+	case APM_IOC_SUSPEND:
+		as->suspend_result = -EINTR;
+
+		if (as->suspend_state == SUSPEND_READ) {
+			/*
+			 * If we read a suspend command from /dev/apm_bios,
+			 * then the corresponding APM_IOC_SUSPEND ioctl is
+			 * interpreted as an acknowledge.
+			 */
+			as->suspend_state = SUSPEND_ACKED;
+			suspends_pending--;
+		} else {
+			/*
+			 * Otherwise it is a request to suspend the system.
+			 * Queue an event for all readers, and expect an
+			 * acknowledge from all writers who haven't already
+			 * acknowledged.
+			 */
+			queue_event(APM_USER_SUSPEND, as);
+		}
+
+		/*
+		 * If there are no further acknowledges required, suspend
+		 * the system.
+		 */
+		if (suspends_pending == 0)
+			apm_suspend();
+
+		/*
+		 * Wait for the suspend/resume to complete.  If there are
+		 * pending acknowledges, we wait here for them.
+		 *
+		 * Note that we need to ensure that the PM subsystem does
+		 * not kick us out of the wait when it suspends the threads.
+		 */
+		flags = current->flags;
+		current->flags |= PF_NOFREEZE;
+
+		/*
+		 * Note: do not allow a thread which is acking the suspend
+		 * to escape until the resume is complete.
+		 */
+		if (as->suspend_state == SUSPEND_ACKED)
+			wait_event(apm_suspend_waitqueue,
+					 as->suspend_state == SUSPEND_DONE);
+		else
+			wait_event_interruptible(apm_suspend_waitqueue,
+					 as->suspend_state == SUSPEND_DONE);
+
+		current->flags = flags;
+		err = as->suspend_result;
+		as->suspend_state = SUSPEND_NONE;
+		break;
+	}
+
+	return err;
+}
+
+static int apm_release(struct inode * inode, struct file * filp)
+{
+	struct apm_user *as = filp->private_data;
+	filp->private_data = NULL;
+
+	down_write(&user_list_lock);
+	list_del(&as->list);
+	up_write(&user_list_lock);
+
+	/*
+	 * We are now unhooked from the chain.  As far as new
+	 * events are concerned, we no longer exist.  However, we
+	 * need to balance suspends_pending, which means the
+	 * possibility of sleeping.
+	 */
+	if (as->suspend_state != SUSPEND_NONE) {
+		suspends_pending -= 1;
+		if (suspends_pending == 0)
+			apm_suspend();
+	}
+
+	kfree(as);
+	return 0;
+}
+
+static int apm_open(struct inode * inode, struct file * filp)
+{
+	struct apm_user *as;
+
+	as = kzalloc(sizeof(*as), GFP_KERNEL);
+	if (as) {
+		/*
+		 * XXX - this is a tiny bit broken, when we consider BSD
+		 * process accounting. If the device is opened by root, we
+		 * instantly flag that we used superuser privs. Who knows,
+		 * we might close the device immediately without doing a
+		 * privileged operation -- cevans
+		 */
+		as->suser = capable(CAP_SYS_ADMIN);
+		as->writer = (filp->f_mode & FMODE_WRITE) == FMODE_WRITE;
+		as->reader = (filp->f_mode & FMODE_READ) == FMODE_READ;
+
+		down_write(&user_list_lock);
+		list_add(&as->list, &apm_user_list);
+		up_write(&user_list_lock);
+
+		filp->private_data = as;
+	}
+
+	return as ? 0 : -ENOMEM;
+}
+
+static struct file_operations apm_bios_fops = {
+	.owner		= THIS_MODULE,
+	.read		= apm_read,
+	.poll		= apm_poll,
+	.ioctl		= apm_ioctl,
+	.open		= apm_open,
+	.release	= apm_release,
+};
+
+static struct miscdevice apm_device = {
+	.minor		= APM_MINOR_DEV,
+	.name		= "apm_bios",
+	.fops		= &apm_bios_fops
+};
+
+
+#ifdef CONFIG_PROC_FS
+/*
+ * Arguments, with symbols from linux/apm_bios.h.
+ *
+ *   0) Linux driver version (this will change if format changes)
+ *   1) APM BIOS Version.  Usually 1.0, 1.1 or 1.2.
+ *   2) APM flags from APM Installation Check (0x00):
+ *	bit 0: APM_16_BIT_SUPPORT
+ *	bit 1: APM_32_BIT_SUPPORT
+ *	bit 2: APM_IDLE_SLOWS_CLOCK
+ *	bit 3: APM_BIOS_DISABLED
+ *	bit 4: APM_BIOS_DISENGAGED
+ *   3) AC line status
+ *	0x00: Off-line
+ *	0x01: On-line
+ *	0x02: On backup power (BIOS >= 1.1 only)
+ *	0xff: Unknown
+ *   4) Battery status
+ *	0x00: High
+ *	0x01: Low
+ *	0x02: Critical
+ *	0x03: Charging
+ *	0x04: Selected battery not present (BIOS >= 1.2 only)
+ *	0xff: Unknown
+ *   5) Battery flag
+ *	bit 0: High
+ *	bit 1: Low
+ *	bit 2: Critical
+ *	bit 3: Charging
+ *	bit 7: No system battery
+ *	0xff: Unknown
+ *   6) Remaining battery life (percentage of charge):
+ *	0-100: valid
+ *	-1: Unknown
+ *   7) Remaining battery life (time units):
+ *	Number of remaining minutes or seconds
+ *	-1: Unknown
+ *   8) min = minutes; sec = seconds
+ */
+static int apm_read_proc(char *buf, char **start, off_t fpos, int length)
+{
+	if (likely(apm_get_info))
+		return apm_get_info(buf, start, fpos, length);
+
+	return -EINVAL;
+}
+#endif
+
+static int kapmd(void *arg)
+{
+	daemonize("kapmd");
+	current->flags |= PF_NOFREEZE;
+
+	do {
+		apm_event_t event;
+
+		wait_event_interruptible(kapmd_wait,
+				!queue_empty(&kapmd_queue) || !pm_active);
+
+		if (!pm_active)
+			break;
+
+		spin_lock_irq(&kapmd_queue_lock);
+		event = 0;
+		if (!queue_empty(&kapmd_queue))
+			event = queue_get_event(&kapmd_queue);
+		spin_unlock_irq(&kapmd_queue_lock);
+
+		switch (event) {
+		case 0:
+			break;
+
+		case APM_LOW_BATTERY:
+		case APM_POWER_STATUS_CHANGE:
+			queue_event(event, NULL);
+			break;
+
+		case APM_USER_SUSPEND:
+		case APM_SYS_SUSPEND:
+			queue_event(event, NULL);
+			if (suspends_pending == 0)
+				apm_suspend();
+			break;
+
+		case APM_CRITICAL_SUSPEND:
+			apm_suspend();
+			break;
+		}
+	} while (1);
+
+	complete_and_exit(&kapmd_exit, 0);
+}
+
+static int __init apm_init(void)
+{
+	int ret;
+
+	pm_active = 1;
+
+	ret = kernel_thread(kapmd, NULL, CLONE_KERNEL);
+	if (unlikely(ret < 0)) {
+		pm_active = 0;
+		return ret;
+	}
+
+	create_proc_info_entry("apm", 0, NULL, apm_read_proc);
+
+	ret = misc_register(&apm_device);
+	if (unlikely(ret != 0)) {
+		remove_proc_entry("apm", NULL);
+
+		pm_active = 0;
+		wake_up(&kapmd_wait);
+		wait_for_completion(&kapmd_exit);
+	}
+
+	return ret;
+}
+
+static void __exit apm_exit(void)
+{
+	misc_deregister(&apm_device);
+	remove_proc_entry("apm", NULL);
+
+	pm_active = 0;
+	wake_up(&kapmd_wait);
+	wait_for_completion(&kapmd_exit);
+}
+
+module_init(apm_init);
+module_exit(apm_exit);
+
+MODULE_AUTHOR("Stephen Rothwell, Andriy Skulysh");
+MODULE_DESCRIPTION("Advanced Power Management");
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cf-enabler.c linux-2.6.17/arch/sh/kernel/cf-enabler.c
--- linux-2.6.17-vanilla/arch/sh/kernel/cf-enabler.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cf-enabler.c	2006-07-12 16:54:22.000000000 +0000
@@ -11,7 +11,8 @@
 
 #include <linux/config.h>
 #include <linux/init.h>
-
+#include <linux/mm.h>
+#include <linux/vmalloc.h>
 #include <asm/io.h>
 #include <asm/irq.h>
 
@@ -33,8 +34,6 @@
 /* SH4 can't access PCMCIA interface through P2 area.
  * we must remap it with appropreate attribute bit of the page set.
  * this part is based on Greg Banks' hd64465_ss.c implementation - Masahiro Abe */
-#include <linux/mm.h>
-#include <linux/vmalloc.h>
 
 #if defined(CONFIG_CF_AREA6)
 #define slot_no 0
@@ -42,9 +41,6 @@
 #define slot_no 1
 #endif
 
-/* defined in mm/ioremap.c */
-extern void * p3_ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags);
-
 /* use this pointer to access to directly connected compact flash io area*/
 void *cf_io_base;
 
@@ -63,7 +59,7 @@
 		return -ENOMEM;
 	}
 /*	printk("p3_ioremap(paddr=0x%08lx, psize=0x%08lx, prot=0x%08lx)=0x%08lx\n",
-	    	paddrbase, psize, prot.pgprot, cf_io_base);*/
+		paddrbase, psize, prot.pgprot, cf_io_base);*/
 
 	/* XXX : do we need attribute and common-memory area also? */
 
@@ -88,7 +84,7 @@
 }
 
 #if defined(CONFIG_SH_SOLUTION_ENGINE)
-#include <asm/se/se.h>
+#include <asm/se.h>
 
 /*
  * SolutionEngine
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/CVS/Entries linux-2.6.17/arch/sh/kernel/cpu/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,10 @@
+/Makefile/1.10/Sat Jan 28 01:22:16 2006/-ko/
+/adc.c/1.2/Sun Aug 15 16:59:26 2004/-ko/
+/clock.c/1.6/Sat Jan 28 01:27:00 2006/-ko/
+/ubc.S/1.2/Sun May  4 19:29:53 2003/-ko/
+D/irq////
+D/sh2////
+D/sh3////
+D/sh4////
+/init.c/1.11/Wed Jul  5 14:50:40 2006/-ko/
+/rtc.c/1.5/Wed Jul  5 14:50:40 2006/-ko/
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/CVS/Repository linux-2.6.17/arch/sh/kernel/cpu/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/kernel/cpu
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/CVS/Root linux-2.6.17/arch/sh/kernel/cpu/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/clock.c linux-2.6.17/arch/sh/kernel/cpu/clock.c
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/clock.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/clock.c	2006-07-12 16:54:22.000000000 +0000
@@ -225,7 +225,7 @@
 {
 	int i, ret = 0;
 
-	BUG_ON(unlikely(!master_clk.rate));
+	BUG_ON(!master_clk.rate);
 
 	for (i = 0; i < ARRAY_SIZE(onchip_clocks); i++) {
 		struct clk *clk = onchip_clocks[i];
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/init.c linux-2.6.17/arch/sh/kernel/cpu/init.c
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/init.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/init.c	2006-07-12 16:54:22.000000000 +0000
@@ -4,6 +4,7 @@
  * CPU init code
  *
  * Copyright (C) 2002, 2003  Paul Mundt
+ * Copyright (C) 2003  Richard Curnow
  *
  * 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
@@ -51,7 +52,15 @@
 	ccr = ctrl_inl(CCR);
 
 	/*
-	 * If the cache is already enabled .. flush it.
+	 * At this point we don't know whether the cache is enabled or not - a
+	 * bootloader may have enabled it.  There are at least 2 things that
+	 * could be dirty in the cache at this point:
+	 * 1. kernel command line set up by boot loader
+	 * 2. spilled registers from the prolog of this function
+	 * => before re-initialising the cache, we must do a purge of the whole
+	 * cache out to memory for safety.  As long as nothing is spilled
+	 * during the loop to lines that have already been done, this is safe.
+	 * - RPC
 	 */
 	if (ccr & CCR_CACHE_ENABLE) {
 		unsigned long ways, waysize, addrstart;
@@ -98,6 +107,8 @@
 	/* Force EMODE if possible */
 	if (cpu_data->dcache.ways > 1)
 		flags |= CCR_CACHE_EMODE;
+	else
+		flags &= ~CCR_CACHE_EMODE;
 #endif
 
 #ifdef CONFIG_SH_WRITETHROUGH
@@ -112,6 +123,9 @@
 	/* Turn on OCRAM -- halve the OC */
 	flags |= CCR_CACHE_ORA;
 	cpu_data->dcache.sets >>= 1;
+
+	cpu_data->dcache.way_size = cpu_data->dcache.sets *
+				    cpu_data->dcache.linesz;
 #endif
 
 	ctrl_outl(flags, CCR);
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/CVS/Entries linux-2.6.17/arch/sh/kernel/cpu/irq/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/irq/CVS/Entries	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1,6 @@
+/Makefile/1.1/Sat Jan  7 20:16:39 2006/-ko/
+/imask.c/1.1/Sat Jan  7 20:16:39 2006/-ko/
+/ipr.c/1.2/Sun Jan  8 12:21:42 2006/-ko/
+/pint.c/1.1/Sat Jan  7 20:16:39 2006/-ko/
+/intc2.c/1.2/Wed Jul 12 16:51:54 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/CVS/Repository linux-2.6.17/arch/sh/kernel/cpu/irq/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/irq/CVS/Repository	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/kernel/cpu/irq
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/CVS/Root linux-2.6.17/arch/sh/kernel/cpu/irq/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/irq/CVS/Root	2006-07-12 16:54:21.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/intc2.c linux-2.6.17/arch/sh/kernel/cpu/irq/intc2.c
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/intc2.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/irq/intc2.c	2006-07-12 16:54:21.000000000 +0000
@@ -241,9 +241,9 @@
 	/* 110-111 reserved/unused */
 #elif defined(CONFIG_CPU_SUBTYPE_SH7780)
 	{ TIMER_IRQ, 0, 24, 0, INTC_TMU0_MSK, 2},
-#ifdef CONFIG_SH_RTC
-	{ RTC_IRQ, 4, 0, 0, INTC_RTC_MSK, TIMER_PRIORITY },
-#endif
+	{ 21, 1, 0, 0, INTC_RTC_MSK, TIMER_PRIORITY },
+	{ 22, 1, 1, 0, INTC_RTC_MSK, TIMER_PRIORITY },
+	{ 23, 1, 2, 0, INTC_RTC_MSK, TIMER_PRIORITY },
 	{ SCIF0_ERI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY },
 	{ SCIF0_RXI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY },
 	{ SCIF0_BRI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY },
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh2/CVS/Entries linux-2.6.17/arch/sh/kernel/cpu/sh2/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh2/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh2/CVS/Entries	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1,3 @@
+/Makefile/1.3/Thu Jul  8 13:52:22 2004/-ko/
+/probe.c/1.1/Thu Jul  8 13:52:22 2004/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh2/CVS/Repository linux-2.6.17/arch/sh/kernel/cpu/sh2/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh2/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh2/CVS/Repository	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/kernel/cpu/sh2
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh2/CVS/Root linux-2.6.17/arch/sh/kernel/cpu/sh2/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh2/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh2/CVS/Root	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/CVS/Entries linux-2.6.17/arch/sh/kernel/cpu/sh3/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh3/CVS/Entries	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1,8 @@
+/Makefile/1.6/Fri Jun 10 15:51:47 2005/-ko/
+/clock-sh3.c/1.1/Sat Mar 26 20:25:36 2005/-ko/
+/clock-sh7300.c/1.2/Tue May 31 14:06:34 2005/-ko/
+/clock-sh7705.c/1.1/Sat Mar 26 20:25:36 2005/-ko/
+/clock-sh7709.c/1.2/Wed Sep 28 11:32:44 2005//
+/ex.S/1.4/Sun Jun 20 20:27:22 2004/-ko/
+/probe.c/1.2/Mon Aug 30 12:55:31 2004/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/CVS/Repository linux-2.6.17/arch/sh/kernel/cpu/sh3/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh3/CVS/Repository	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/kernel/cpu/sh3
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/CVS/Root linux-2.6.17/arch/sh/kernel/cpu/sh3/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh3/CVS/Root	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/clock-sh7709.c linux-2.6.17/arch/sh/kernel/cpu/sh3/clock-sh7709.c
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/clock-sh7709.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh3/clock-sh7709.c	2006-07-12 16:54:22.000000000 +0000
@@ -4,7 +4,7 @@
  * SH7709 support for the clock framework
  *
  *  Copyright (C) 2005  Andriy Skulysh
- *
+ * 
  * Based on arch/sh/kernel/cpu/sh3/clock-sh7705.c
  *  Copyright (C) 2005  Paul Mundt
  *
@@ -59,7 +59,7 @@
 static void bus_clk_recalc(struct clk *clk)
 {
 	int frqcr = ctrl_inw(FRQCR);
-	int idx = (frqcr & 0x0080) ?
+	int idx = (frqcr & 0x0080) ? 
 		((frqcr & 0x8000) >> 13) | ((frqcr & 0x0030) >> 4) : 1;
 
 	clk->rate = clk->parent->rate * stc_multipliers[idx];
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/CVS/Entries linux-2.6.17/arch/sh/kernel/cpu/sh4/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh4/CVS/Entries	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1,12 @@
+/clock-sh4-202.c/1.1/Sat Mar 26 20:25:36 2005/-ko/
+/clock-sh4.c/1.1/Sat Mar 26 20:25:36 2005/-ko/
+/clock-sh73180.c/1.1/Sat Mar 26 20:25:36 2005/-ko/
+/clock-sh7770.c/1.1/Sun Aug 21 23:47:31 2005/-ko/
+/clock-sh7780.c/1.1/Sun Aug 21 23:47:31 2005/-ko/
+/ex.S/1.3/Sun Aug 21 23:47:31 2005//
+/fpu.c/1.5/Wed Mar  2 13:02:56 2005/-ko/
+/probe.c/1.6/Sat Oct  8 22:08:40 2005/-ko/
+/sq.c/1.15/Sat Jan  7 17:33:56 2006//
+/Makefile/1.13/Wed Jul 12 16:51:55 2006/-ko/
+/setup-sh7780.c/1.1/Tue Jul 11 07:57:40 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/CVS/Repository linux-2.6.17/arch/sh/kernel/cpu/sh4/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh4/CVS/Repository	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/kernel/cpu/sh4
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/CVS/Root linux-2.6.17/arch/sh/kernel/cpu/sh4/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh4/CVS/Root	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/Makefile linux-2.6.17/arch/sh/kernel/cpu/sh4/Makefile
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh4/Makefile	2006-07-12 16:54:22.000000000 +0000
@@ -4,9 +4,12 @@
 
 obj-y	:= ex.o probe.o
 
-obj-$(CONFIG_SH_FPU)                    += fpu.o
+obj-$(CONFIG_SH_FPU)                    += fpu.o 
 obj-$(CONFIG_SH_STORE_QUEUES)		+= sq.o
 
+# CPU subtype setup
+obj-$(CONFIG_CPU_SUBTYPE_SH7780)	+= setup-sh7780.o
+
 # Primary on-chip clocks (common)
 clock-$(CONFIG_CPU_SH4)			:= clock-sh4.o
 clock-$(CONFIG_CPU_SUBTYPE_SH73180)	:= clock-sh73180.o
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/ex.S linux-2.6.17/arch/sh/kernel/cpu/sh4/ex.S
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/ex.S	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh4/ex.S	2006-07-12 16:54:22.000000000 +0000
@@ -39,9 +39,9 @@
 #endif
 #if defined(CONFIG_SH_FPU)
 	.long	do_fpu_error		/* 120 */
-#else
+#else	
 	.long	exception_error		/* 120 */
-#endif
+#endif	
 	.long	exception_error		/* 140 */
 	.long	system_call	! Unconditional Trap	 /* 160 */
 	.long	exception_error	! reserved_instruction (filled by trap_init) /* 180 */
@@ -73,6 +73,7 @@
 	.long	do_IRQ	! 1110
 	.long	exception_error		
 	! Internal hardware
+#ifndef CONFIG_CPU_SUBTYPE_SH7780
 	.long	do_IRQ	! TMU0 tuni0	/* 400 */
 	.long	do_IRQ	! TMU1 tuni1
 	.long	do_IRQ	! TMU2 tuni2
@@ -129,13 +130,13 @@
 	.long	exception_error			! 46
 	.long	exception_error			! 47
 #endif
-#if defined(CONFIG_SH_FPU)
+#if defined(CONFIG_SH_FPU)	
 	.long	do_fpu_state_restore	! 48	/* 800 */
 	.long	do_fpu_state_restore	! 49	/* 820 */
-#else
+#else	
 	.long	exception_error
 	.long	exception_error
-#endif
+#endif	
 #if defined(CONFIG_CPU_SUBTYPE_SH7751)
 	.long	exception_error			/* 840 */
 	.long	exception_error
@@ -380,5 +381,168 @@
 	.long	exception_error			! 141 0x13a0
 	.long	exception_error			! 142 0x13c0
 	.long	exception_error			! 143 0x13e0
+#elif defined(CONFIG_CPU_SUBTYPE_SH7770)
+	.long	do_IRQ	!  50 0x840
+	.long	do_IRQ	!  51 0x860
+	.long	do_IRQ	!  52 0x880
+	.long	do_IRQ	!  53 0x8a0
+	.long	do_IRQ	!  54 0x8c0
+	.long	do_IRQ	!  55 0x8e0
+	.long	do_IRQ	!  56 0x900
+	.long	do_IRQ	!  57 0x920
+	.long	do_IRQ	!  58 0x940
+	.long	do_IRQ	!  59 0x960
+	.long	do_IRQ	!  60 0x980
+	.long	do_IRQ	!  61 0x9a0
+	.long	do_IRQ	!  62 0x9c0
+	.long	do_IRQ	!  63 0x9e0
+	.long	do_IRQ	!  64 0xa00
+	.long	do_IRQ	!  65 0xa20
+	.long	do_IRQ	!  66 0xa4d
+	.long	do_IRQ	!  67 0xa60
+	.long	do_IRQ	!  68 0xa80
+	.long	do_IRQ	!  69 0xaa0
+	.long	do_IRQ	!  70 0xac0
+	.long	do_IRQ	!  71 0xae0
+	.long	do_IRQ	!  72 0xb00
+	.long	do_IRQ	!  73 0xb20
+	.long	do_IRQ	!  74 0xb40
+	.long	do_IRQ	!  75 0xb60
+	.long	do_IRQ	!  76 0xb80
+	.long	do_IRQ	!  77 0xba0
+	.long	do_IRQ	!  78 0xbc0
+	.long	do_IRQ	!  79 0xbe0
+	.long	do_IRQ	!  80 0xc00
+	.long	do_IRQ	!  81 0xc20
+	.long	do_IRQ	!  82 0xc40
+	.long	do_IRQ	!  83 0xc60
+	.long	do_IRQ	!  84 0xc80
+	.long	do_IRQ	!  85 0xca0
+	.long	do_IRQ	!  86 0xcc0
+	.long	do_IRQ	!  87 0xce0
+	.long	do_IRQ	!  88 0xd00
+	.long	do_IRQ	!  89 0xd20
+	.long	do_IRQ	!  90 0xd40
+	.long	do_IRQ	!  91 0xd60
+	.long	do_IRQ	!  92 0xd80
+	.long	do_IRQ	!  93 0xda0
+	.long	do_IRQ	!  94 0xdc0
+	.long	do_IRQ	!  95 0xde0
+	.long	do_IRQ	!  96 0xe00
+	.long	do_IRQ	!  97 0xe20
+	.long	do_IRQ	!  98 0xe40
+	.long	do_IRQ	!  99 0xe60
+	.long	do_IRQ	! 100 0xe80
+	.long	do_IRQ	! 101 0xea0
+	.long	do_IRQ	! 102 0xec0
+	.long	do_IRQ	! 103 0xee0
+	.long	do_IRQ	! 104 0xf00
+	.long	do_IRQ	! 105 0xf20
+	.long	do_IRQ	! 106 0xf40
+	.long	do_IRQ	! 107 0xf60
+	.long	do_IRQ	! 108 0xf80
+#endif
+#else
+	.long	exception_error		/* 400 */
+	.long	exception_error
+	.long	exception_error
+	.long	exception_error
+	.long	do_IRQ	! RTC	ati
+	.long	do_IRQ	!	pri
+	.long	do_IRQ	!	cui
+	.long	exception_error
+	.long	exception_error		/* 500 */
+	.long	exception_error
+	.long	exception_error
+	.long	do_IRQ	! WDT	iti	/* 560 */
+	.long	do_IRQ	! TMU-ch0
+	.long	do_IRQ	! TMU-ch1
+	.long	do_IRQ	! TMU-ch2
+	.long	do_IRQ	! ticpi2	/* 5E0 */
+	.long	do_IRQ	! 32 Hitachi UDI	/* 600 */
+	.long	exception_error
+	.long	do_IRQ	! 34 DMAC dmte0
+	.long	do_IRQ	! 35	  dmte1
+	.long	do_IRQ	! 36	  dmte2
+	.long	do_IRQ	! 37	  dmte3
+	.long	do_IRQ	! 38	  dmae
+	.long	exception_error			! 39	/* 6E0 */
+	.long	do_IRQ	! 40 SCIF-ch0 eri		/* 700 */
+	.long	do_IRQ	! 41	      rxi
+	.long	do_IRQ	! 42	      bri
+	.long	do_IRQ	! 43	      txi
+	.long	do_IRQ	! 44 DMAC dmte4		/* 780 */
+	.long	do_IRQ	! 45	  dmte5
+	.long	do_IRQ	! 46	  dmte6
+	.long	do_IRQ	! 47	  dmte7		/* 7E0 */
+#if defined(CONFIG_SH_FPU)
+	.long	do_fpu_state_restore	! 48	/* 800 */
+	.long	do_fpu_state_restore	! 49	/* 820 */
+#else
+	.long	exception_error
+	.long	exception_error
+#endif
+	.long	exception_error			/* 840 */
+	.long	exception_error
+	.long	exception_error
+	.long	exception_error
+	.long	exception_error
+	.long	exception_error
+	.long	do_IRQ	! 56 CMT	/* 900 */
+	.long	exception_error
+	.long	exception_error
+	.long	exception_error
+	.long	do_IRQ	! 60 HAC
+	.long	exception_error
+	.long	exception_error
+	.long	exception_error
+	.long	do_IRQ	! PCI serr	/* A00 */
+	.long	do_IRQ	!     INTA
+	.long	do_IRQ	!     INTB
+	.long	do_IRQ	!     INTC
+	.long	do_IRQ	!     INTD
+	.long	do_IRQ	!     err
+	.long	do_IRQ	!     pwd3
+	.long	do_IRQ	!     pwd2
+	.long	do_IRQ	!     pwd1	/* B00 */
+	.long	do_IRQ	!     pwd0
+	.long	exception_error
+	.long	exception_error
+	.long	do_IRQ	! SCIF-ch1 eri	/* B80 */
+	.long	do_IRQ	!	   rxi
+	.long	do_IRQ	!	   bri
+	.long	do_IRQ	!	   txi
+	.long	do_IRQ	! SIOF		/* C00 */
+	.long	exception_error
+	.long	exception_error
+	.long	exception_error
+	.long	do_IRQ	! HSPI		/* C80 */
+	.long	exception_error
+	.long	exception_error
+	.long	exception_error
+	.long	do_IRQ	! MMCIF	fatat	/* D00 */
+	.long	do_IRQ	!	tran
+	.long	do_IRQ	!	err
+	.long	do_IRQ	!	frdy
+	.long	do_IRQ	! DMAC dmint8	/* D80 */
+	.long	do_IRQ	!      dmint9
+	.long	do_IRQ	!      dmint10
+	.long	do_IRQ	!      dmint11
+	.long	do_IRQ	! TMU-ch3	/* E00 */
+	.long	do_IRQ	! TMU-ch4
+	.long	do_IRQ	! TMU-ch5
+	.long	exception_error
+	.long	do_IRQ	! SSI
+	.long	exception_error
+	.long	exception_error
+	.long	exception_error
+	.long	do_IRQ	! FLCTL	flste	/* F00 */
+	.long	do_IRQ	!	fltend
+	.long	do_IRQ	!	fltrq0
+	.long	do_IRQ	!	fltrq1
+	.long	do_IRQ	! GPIO gpioi0	/* F80 */
+	.long	do_IRQ	!      gpioi1
+	.long	do_IRQ	!      gpioi2
+	.long	do_IRQ	!      gpioi3
 #endif
 
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/probe.c linux-2.6.17/arch/sh/kernel/cpu/sh4/probe.c
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/probe.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh4/probe.c	2006-07-12 16:54:22.000000000 +0000
@@ -3,7 +3,7 @@
  *
  * CPU Subtype Probing for SH-4.
  *
- * Copyright (C) 2001, 2002, 2003, 2004  Paul Mundt
+ * Copyright (C) 2001 - 2005  Paul Mundt
  * Copyright (C) 2003  Richard Curnow
  *
  * This file is subject to the terms and conditions of the GNU General Public
@@ -53,9 +53,6 @@
 	cpu_data->dcache.ways		= 1;
 	cpu_data->dcache.linesz		= L1_CACHE_BYTES;
 
-	/* Set the FPU flag, virtually all SH-4's have one */
-	cpu_data->flags |= CPU_HAS_FPU;
-
 	/*
 	 * Probe the underlying processor version/revision and
 	 * adjust cpu_data setup accordingly.
@@ -63,56 +60,99 @@
 	switch (pvr) {
 	case 0x205:
 		cpu_data->type = CPU_SH7750;
-		cpu_data->flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_PERF_COUNTER;
+		cpu_data->flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_FPU |
+				   CPU_HAS_PERF_COUNTER | CPU_HAS_PTEA;
 		break;
 	case 0x206:
 		cpu_data->type = CPU_SH7750S;
-		cpu_data->flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_PERF_COUNTER;
+		cpu_data->flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_FPU |
+				   CPU_HAS_PERF_COUNTER | CPU_HAS_PTEA;
 		break;
 	case 0x1100:
 		cpu_data->type = CPU_SH7751;
+		cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PTEA;
 		break;
 	case 0x2000:
 		cpu_data->type = CPU_SH73180;
 		cpu_data->icache.ways = 4;
 		cpu_data->dcache.ways = 4;
-		cpu_data->flags &= ~CPU_HAS_FPU;
+
+		/*
+		 * XXX: Double check this, none of the SH-4A/SH-4AL processors
+		 * should have this, as it's essentially a legacy thing.
+		 */
+		cpu_data->flags |= CPU_HAS_PTEA;
+		break;
+	case 0x2001:
+	case 0x2004:
+		cpu_data->type = CPU_SH7770;
+		cpu_data->icache.ways = 4;
+		cpu_data->dcache.ways = 4;
+
+		/* Same note as above applies here for PTEA */
+		cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PTEA;
+		break;
+	case 0x2006:
+	case 0x200A:
+		if (prr == 0x61)
+			cpu_data->type = CPU_SH7781;
+		else
+			cpu_data->type = CPU_SH7780;
+
+		cpu_data->icache.ways = 4;
+		cpu_data->dcache.ways = 4;
+
+		cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER;
 		break;
 	case 0x8000:
 		cpu_data->type = CPU_ST40RA;
+		cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PTEA;
 		break;
 	case 0x8100:
 		cpu_data->type = CPU_ST40GX1;
+		cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PTEA;
 		break;
 	case 0x700:
 		cpu_data->type = CPU_SH4_501;
 		cpu_data->icache.ways = 2;
 		cpu_data->dcache.ways = 2;
-
-		/* No FPU on the SH4-500 series.. */
-		cpu_data->flags &= ~CPU_HAS_FPU;
+		cpu_data->flags |= CPU_HAS_PTEA;
 		break;
 	case 0x600:
 		cpu_data->type = CPU_SH4_202;
 		cpu_data->icache.ways = 2;
 		cpu_data->dcache.ways = 2;
+		cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PTEA;
 		break;
 	case 0x500 ... 0x501:
 		switch (prr) {
-		    case 0x10: cpu_data->type = CPU_SH7750R; break;
-		    case 0x11: cpu_data->type = CPU_SH7751R; break;
-		    case 0x50: cpu_data->type = CPU_SH7760;  break;
+		case 0x10:
+			cpu_data->type = CPU_SH7750R;
+			break;
+		case 0x11:
+			cpu_data->type = CPU_SH7751R;
+			break;
+		case 0x50 ... 0x5f:
+			cpu_data->type = CPU_SH7760;
+			break;
 		}
 
 		cpu_data->icache.ways = 2;
 		cpu_data->dcache.ways = 2;
 
+		cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PTEA;
+
 		break;
 	default:
 		cpu_data->type = CPU_SH_NONE;
 		break;
 	}
 
+#ifdef CONFIG_SH_DIRECT_MAPPED
+	cpu_data->icache.ways = 1;
+	cpu_data->dcache.ways = 1;
+#endif
+
 	/*
 	 * On anything that's not a direct-mapped cache, look to the CVR
 	 * for I/D-cache specifics.
@@ -125,6 +165,9 @@
 			(cpu_data->icache.way_incr - (1 << 5));
 	}
 
+	cpu_data->icache.way_size = cpu_data->icache.sets *
+				    cpu_data->icache.linesz;
+
 	if (cpu_data->dcache.ways > 1) {
 		size = sizes[(cvr >> 16) & 0xf];
 		cpu_data->dcache.way_incr	= (size >> 1);
@@ -133,6 +176,9 @@
 			(cpu_data->dcache.way_incr - (1 << 5));
 	}
 
+	cpu_data->dcache.way_size = cpu_data->dcache.sets *
+				    cpu_data->dcache.linesz;
+
 	return 0;
 }
 
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/setup-sh7780.c linux-2.6.17/arch/sh/kernel/cpu/sh4/setup-sh7780.c
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/setup-sh7780.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh4/setup-sh7780.c	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1,52 @@
+/*
+ * SH7780 Setup
+ *
+ *  Copyright (C) 2006  Paul Mundt
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/platform_device.h>
+#include <linux/init.h>
+
+static struct resource rtc_resources[] = {
+	[0] = {
+		.start	= 0xffe80000,
+		.end	= 0xffe80000 + 0x58 - 1,
+		.flags	= IORESOURCE_IO,
+	},
+	[1] = {
+		/* Period IRQ */
+		.start	= 21,
+		.flags	= IORESOURCE_IRQ,
+	},
+	[2] = {
+		/* Carry IRQ */
+		.start	= 22,
+		.flags	= IORESOURCE_IRQ,
+	},
+	[3] = {
+		/* Alarm IRQ */
+		.start	= 23,
+		.flags	= IORESOURCE_IRQ,
+	},
+};
+
+static struct platform_device rtc_device = {
+	.name		= "sh-rtc",
+	.id		= -1,
+	.num_resources	= ARRAY_SIZE(rtc_resources),
+	.resource	= rtc_resources,
+};
+
+static struct platform_device *sh7780_devices[] __initdata = {
+	&rtc_device,
+};
+
+static int __init sh7780_devices_setup(void)
+{
+	return platform_add_devices(sh7780_devices,
+				    ARRAY_SIZE(sh7780_devices));
+}
+__initcall(sh7780_devices_setup);
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/sq.c linux-2.6.17/arch/sh/kernel/cpu/sh4/sq.c
--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/sq.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/cpu/sh4/sq.c	2006-07-12 16:54:22.000000000 +0000
@@ -1,50 +1,53 @@
 /*
- * arch/sh/kernel/cpu/sq.c
+ * arch/sh/kernel/cpu/sh4/sq.c
  *
  * General management API for SH-4 integrated Store Queues
  *
- * Copyright (C) 2001, 2002, 2003, 2004  Paul Mundt
+ * Copyright (C) 2001 - 2006  Paul Mundt
  * Copyright (C) 2001, 2002  M. R. Brown
  *
- * Some of this code has been adopted directly from the old arch/sh/mm/sq.c
- * hack that was part of the LinuxDC project. For all intents and purposes,
- * this is a completely new interface that really doesn't have much in common
- * with the old zone-based approach at all. In fact, it's only listed here for
- * general completeness.
- *
  * This file is subject to the terms and conditions of the GNU General Public
  * License.  See the file "COPYING" in the main directory of this archive
  * for more details.
  */
 #include <linux/init.h>
+#include <linux/cpu.h>
+#include <linux/bitmap.h>
+#include <linux/sysdev.h>
 #include <linux/kernel.h>
 #include <linux/module.h>
 #include <linux/config.h>
 #include <linux/slab.h>
-#include <linux/list.h>
-#include <linux/proc_fs.h>
-#include <linux/miscdevice.h>
 #include <linux/vmalloc.h>
-
+#include <linux/mm.h>
 #include <asm/io.h>
 #include <asm/page.h>
-#include <asm/mmu_context.h>
+#include <asm/cacheflush.h>
 #include <asm/cpu/sq.h>
 
-static LIST_HEAD(sq_mapping_list);
+struct sq_mapping;
+
+struct sq_mapping {
+	const char *name;
+
+	unsigned long sq_addr;
+	unsigned long addr;
+	unsigned int size;
+
+	struct sq_mapping *next;
+};
+
+static struct sq_mapping *sq_mapping_list;
 static DEFINE_SPINLOCK(sq_mapping_lock);
+static kmem_cache_t *sq_cache;
+static unsigned long *sq_bitmap;
 
-/**
- * sq_flush - Flush (prefetch) the store queue cache
- * @addr: the store queue address to flush
- *
- * Executes a prefetch instruction on the specified store queue cache,
- * so that the cached data is written to physical memory.
- */
-inline void sq_flush(void *addr)
-{
-	__asm__ __volatile__ ("pref @%0" : : "r" (addr) : "memory");
-}
+#define store_queue_barrier()			\
+do {						\
+	(void)ctrl_inl(P4SEG_STORE_QUE);	\
+	ctrl_outl(0, P4SEG_STORE_QUE + 0);	\
+	ctrl_outl(0, P4SEG_STORE_QUE + 8);	\
+} while (0);
 
 /**
  * sq_flush_range - Flush (prefetch) a specific SQ range
@@ -57,152 +60,73 @@
 void sq_flush_range(unsigned long start, unsigned int len)
 {
 	volatile unsigned long *sq = (unsigned long *)start;
-	unsigned long dummy;
 
 	/* Flush the queues */
 	for (len >>= 5; len--; sq += 8)
-		sq_flush((void *)sq);
+		prefetchw((void *)sq);
 
 	/* Wait for completion */
-	dummy = ctrl_inl(P4SEG_STORE_QUE);
-
-	ctrl_outl(0, P4SEG_STORE_QUE + 0);
-	ctrl_outl(0, P4SEG_STORE_QUE + 8);
+	store_queue_barrier();
 }
 
-static struct sq_mapping *__sq_alloc_mapping(unsigned long virt, unsigned long phys, unsigned long size, const char *name)
+static inline void sq_mapping_list_add(struct sq_mapping *map)
 {
-	struct sq_mapping *map;
-
-	if (virt + size > SQ_ADDRMAX)
-		return ERR_PTR(-ENOSPC);
+	struct sq_mapping **p, *tmp;
 
-	map = kmalloc(sizeof(struct sq_mapping), GFP_KERNEL);
-	if (!map)
-		return ERR_PTR(-ENOMEM);
+	spin_lock_irq(&sq_mapping_lock);
 
-	INIT_LIST_HEAD(&map->list);
+	p = &sq_mapping_list;
+	while ((tmp = *p) != NULL)
+		p = &tmp->next;
 
-	map->sq_addr	= virt;
-	map->addr	= phys;
-	map->size	= size + 1;
-	map->name	= name;
+	map->next = tmp;
+	*p = map;
 
-	list_add(&map->list, &sq_mapping_list);
-
-	return map;
+	spin_unlock_irq(&sq_mapping_lock);
 }
 
-static unsigned long __sq_get_next_addr(void)
+static inline void sq_mapping_list_del(struct sq_mapping *map)
 {
-	if (!list_empty(&sq_mapping_list)) {
-		struct list_head *pos, *tmp;
-
-		/*
-		 * Read one off the list head, as it will have the highest
-		 * mapped allocation. Set the next one up right above it.
-		 *
-		 * This is somewhat sub-optimal, as we don't look at
-		 * gaps between allocations or anything lower then the
-		 * highest-level allocation.
-		 *
-		 * However, in the interest of performance and the general
-		 * lack of desire to do constant list rebalancing, we don't
-		 * worry about it.
-		 */
-		list_for_each_safe(pos, tmp, &sq_mapping_list) {
-			struct sq_mapping *entry;
+	struct sq_mapping **p, *tmp;
 
-			entry = list_entry(pos, typeof(*entry), list);
+	spin_lock_irq(&sq_mapping_lock);
 
-			return entry->sq_addr + entry->size;
+	for (p = &sq_mapping_list; (tmp = *p); p = &tmp->next)
+		if (tmp == map) {
+			*p = tmp->next;
+			break;
 		}
-	}
 
-	return P4SEG_STORE_QUE;
+	spin_unlock_irq(&sq_mapping_lock);
 }
 
-/**
- * __sq_remap - Perform a translation from the SQ to a phys addr
- * @map: sq mapping containing phys and store queue addresses.
- *
- * Maps the store queue address specified in the mapping to the physical
- * address specified in the mapping.
- */
-static struct sq_mapping *__sq_remap(struct sq_mapping *map)
+static int __sq_remap(struct sq_mapping *map, unsigned long flags)
 {
-	unsigned long flags, pteh, ptel;
+#if defined(CONFIG_MMU)
 	struct vm_struct *vma;
-	pgprot_t pgprot;
-
-	/*
-	 * Without an MMU (or with it turned off), this is much more
-	 * straightforward, as we can just load up each queue's QACR with
-	 * the physical address appropriately masked.
-	 */
-
-	ctrl_outl(((map->addr >> 26) << 2) & 0x1c, SQ_QACR0);
-	ctrl_outl(((map->addr >> 26) << 2) & 0x1c, SQ_QACR1);
-
-#ifdef CONFIG_MMU
-	/*
-	 * With an MMU on the other hand, things are slightly more involved.
-	 * Namely, we have to have a direct mapping between the SQ addr and
-	 * the associated physical address in the UTLB by way of setting up
-	 * a virt<->phys translation by hand. We do this by simply specifying
-	 * the SQ addr in UTLB.VPN and the associated physical address in
-	 * UTLB.PPN.
-	 *
-	 * Notably, even though this is a special case translation, and some
-	 * of the configuration bits are meaningless, we're still required
-	 * to have a valid ASID context in PTEH.
-	 *
-	 * We could also probably get by without explicitly setting PTEA, but
-	 * we do it here just for good measure.
-	 */
-	spin_lock_irqsave(&sq_mapping_lock, flags);
-
-	pteh = map->sq_addr;
-	ctrl_outl((pteh & MMU_VPN_MASK) | get_asid(), MMU_PTEH);
-
-	ptel = map->addr & PAGE_MASK;
-	ctrl_outl(((ptel >> 28) & 0xe) | (ptel & 0x1), MMU_PTEA);
-
-	pgprot = pgprot_noncached(PAGE_KERNEL);
-
-	ptel &= _PAGE_FLAGS_HARDWARE_MASK;
-	ptel |= pgprot_val(pgprot);
-	ctrl_outl(ptel, MMU_PTEL);
 
-	__asm__ __volatile__ ("ldtlb" : : : "memory");
-
-	spin_unlock_irqrestore(&sq_mapping_lock, flags);
-
-	/*
-	 * Next, we need to map ourselves in the kernel page table, so that
-	 * future accesses after a TLB flush will be handled when we take a
-	 * page fault.
-	 *
-	 * Theoretically we could just do this directly and not worry about
-	 * setting up the translation by hand ahead of time, but for the
-	 * cases where we want a one-shot SQ mapping followed by a quick
-	 * writeout before we hit the TLB flush, we do it anyways. This way
-	 * we at least save ourselves the initial page fault overhead.
-	 */
 	vma = __get_vm_area(map->size, VM_ALLOC, map->sq_addr, SQ_ADDRMAX);
 	if (!vma)
-		return ERR_PTR(-ENOMEM);
+		return -ENOMEM;
 
 	vma->phys_addr = map->addr;
 
 	if (remap_area_pages((unsigned long)vma->addr, vma->phys_addr,
-			     map->size, pgprot_val(pgprot))) {
+			     map->size, flags)) {
 		vunmap(vma->addr);
-		return NULL;
+		return -EAGAIN;
 	}
-#endif /* CONFIG_MMU */
+#else
+	/*
+	 * Without an MMU (or with it turned off), this is much more
+	 * straightforward, as we can just load up each queue's QACR with
+	 * the physical address appropriately masked.
+	 */
+	ctrl_outl(((map->addr >> 26) << 2) & 0x1c, SQ_QACR0);
+	ctrl_outl(((map->addr >> 26) << 2) & 0x1c, SQ_QACR1);
+#endif
 
-	return map;
+	return 0;
 }
 
 /**
@@ -210,42 +134,65 @@
  * @phys: Physical address of mapping.
  * @size: Length of mapping.
  * @name: User invoking mapping.
+ * @flags: Protection flags.
  *
  * Remaps the physical address @phys through the next available store queue
  * address of @size length. @name is logged at boot time as well as through
- * the procfs interface.
- *
- * A pre-allocated and filled sq_mapping pointer is returned, and must be
- * cleaned up with a call to sq_unmap() when the user is done with the
- * mapping.
+ * the sysfs interface.
  */
-struct sq_mapping *sq_remap(unsigned long phys, unsigned int size, const char *name)
+unsigned long sq_remap(unsigned long phys, unsigned int size,
+		       const char *name, unsigned long flags)
 {
 	struct sq_mapping *map;
-	unsigned long virt, end;
+	unsigned long end;
 	unsigned int psz;
+	int ret, page;
 
 	/* Don't allow wraparound or zero size */
 	end = phys + size - 1;
-	if (!size || end < phys)
-		return NULL;
+	if (unlikely(!size || end < phys))
+		return -EINVAL;
 	/* Don't allow anyone to remap normal memory.. */
-	if (phys < virt_to_phys(high_memory))
-		return NULL;
+	if (unlikely(phys < virt_to_phys(high_memory)))
+		return -EINVAL;
 
 	phys &= PAGE_MASK;
+	size = PAGE_ALIGN(end + 1) - phys;
+
+	map = kmem_cache_alloc(sq_cache, GFP_KERNEL);
+	if (unlikely(!map))
+		return -ENOMEM;
+
+	map->addr = phys;
+	map->size = size;
+	map->name = name;
+
+	page = bitmap_find_free_region(sq_bitmap, 0x04000000,
+				       get_order(map->size));
+	if (unlikely(page < 0)) {
+		ret = -ENOSPC;
+		goto out;
+	}
+
+	map->sq_addr = P4SEG_STORE_QUE + (page << PAGE_SHIFT);
+
+	ret = __sq_remap(map, flags);
+	if (unlikely(ret != 0))
+		goto out;
+
+	psz = (size + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
+	pr_info("sqremap: %15s  [%4d page%s]  va 0x%08lx   pa 0x%08lx\n",
+		likely(map->name) ? map->name : "???",
+		psz, psz == 1 ? " " : "s",
+		map->sq_addr, map->addr);
+
+	sq_mapping_list_add(map);
 
-	size  = PAGE_ALIGN(end + 1) - phys;
-	virt  = __sq_get_next_addr();
-	psz   = (size + (PAGE_SIZE - 1)) / PAGE_SIZE;
-	map   = __sq_alloc_mapping(virt, phys, size, name);
-
-	printk("sqremap: %15s  [%4d page%s]  va 0x%08lx   pa 0x%08lx\n",
-	       map->name ? map->name : "???",
-	       psz, psz == 1 ? " " : "s",
-	       map->sq_addr, map->addr);
+	return map->sq_addr;
 
-	return __sq_remap(map);
+out:
+	kmem_cache_free(sq_cache, map);
+	return ret;
 }
 
 /**
@@ -256,185 +203,196 @@
  * sq_remap(). Also frees up the pte that was previously inserted into
  * the kernel page table and discards the UTLB translation.
  */
-void sq_unmap(struct sq_mapping *map)
+void sq_unmap(unsigned long vaddr)
 {
-	if (map->sq_addr > (unsigned long)high_memory)
-		vfree((void *)(map->sq_addr & PAGE_MASK));
+	struct sq_mapping **p, *map;
+	struct vm_struct *vma;
+	int page;
 
-	list_del(&map->list);
-	kfree(map);
-}
+	for (p = &sq_mapping_list; (map = *p); p = &map->next)
+		if (map->sq_addr == vaddr)
+			break;
+
+	if (unlikely(!map)) {
+		printk("%s: bad store queue address 0x%08lx\n",
+		       __FUNCTION__, vaddr);
+		return;
+	}
 
-/**
- * sq_clear - Clear a store queue range
- * @addr: Address to start clearing from.
- * @len: Length to clear.
- *
- * A quick zero-fill implementation for clearing out memory that has been
- * remapped through the store queues.
- */
-void sq_clear(unsigned long addr, unsigned int len)
-{
-	int i;
+	page = (map->sq_addr - P4SEG_STORE_QUE) >> PAGE_SHIFT;
+	bitmap_release_region(sq_bitmap, page, get_order(map->size));
 
-	/* Clear out both queues linearly */
-	for (i = 0; i < 8; i++) {
-		ctrl_outl(0, addr + i + 0);
-		ctrl_outl(0, addr + i + 8);
+	vma = remove_vm_area((void *)(map->sq_addr & PAGE_MASK));
+	if (!vma) {
+		printk(KERN_ERR "%s: bad address 0x%08lx\n",
+		       __FUNCTION__, map->sq_addr);
+		return;
 	}
 
-	sq_flush_range(addr, len);
+	sq_mapping_list_del(map);
+
+	kmem_cache_free(sq_cache, map);
 }
 
-/**
- * sq_vma_unmap - Unmap a VMA range
- * @area: VMA containing range.
- * @addr: Start of range.
- * @len: Length of range.
- *
- * Searches the sq_mapping_list for a mapping matching the sq addr @addr,
- * and subsequently frees up the entry. Further cleanup is done by generic
- * code.
+/*
+ * Needlessly complex sysfs interface. Unfortunately it doesn't seem like
+ * there is any other easy way to add things on a per-cpu basis without
+ * putting the directory entries somewhere stupid and having to create
+ * links in sysfs by hand back in to the per-cpu directories.
+ *
+ * Some day we may want to have an additional abstraction per store
+ * queue, but considering the kobject hell we already have to deal with,
+ * it's simply not worth the trouble.
  */
-static void sq_vma_unmap(struct vm_area_struct *area,
-			 unsigned long addr, size_t len)
-{
-	struct list_head *pos, *tmp;
+static struct kobject *sq_kobject[NR_CPUS];
 
-	list_for_each_safe(pos, tmp, &sq_mapping_list) {
-		struct sq_mapping *entry;
+struct sq_sysfs_attr {
+	struct attribute attr;
+	ssize_t (*show)(char *buf);
+	ssize_t (*store)(const char *buf, size_t count);
+};
 
-		entry = list_entry(pos, typeof(*entry), list);
+#define to_sq_sysfs_attr(attr)	container_of(attr, struct sq_sysfs_attr, attr)
 
-		if (entry->sq_addr == addr) {
-			/*
-			 * We could probably get away without doing the tlb flush
-			 * here, as generic code should take care of most of this
-			 * when unmapping the rest of the VMA range for us. Leave
-			 * it in for added sanity for the time being..
-			 */
-			__flush_tlb_page(get_asid(), entry->sq_addr & PAGE_MASK);
+static ssize_t sq_sysfs_show(struct kobject *kobj, struct attribute *attr,
+			     char *buf)
+{
+	struct sq_sysfs_attr *sattr = to_sq_sysfs_attr(attr);
 
-			list_del(&entry->list);
-			kfree(entry);
+	if (likely(sattr->show))
+		return sattr->show(buf);
 
-			return;
-		}
-	}
+	return -EIO;
 }
 
-/**
- * sq_vma_sync - Sync a VMA range
- * @area: VMA containing range.
- * @start: Start of range.
- * @len: Length of range.
- * @flags: Additional flags.
- *
- * Synchronizes an sq mapped range by flushing the store queue cache for
- * the duration of the mapping.
- *
- * Used internally for user mappings, which must use msync() to prefetch
- * the store queue cache.
- */
-static int sq_vma_sync(struct vm_area_struct *area,
-		       unsigned long start, size_t len, unsigned int flags)
+static ssize_t sq_sysfs_store(struct kobject *kobj, struct attribute *attr,
+			      const char *buf, size_t count)
 {
-	sq_flush_range(start, len);
+	struct sq_sysfs_attr *sattr = to_sq_sysfs_attr(attr);
 
-	return 0;
+	if (likely(sattr->store))
+		return sattr->store(buf, count);
+
+	return -EIO;
 }
 
-static struct vm_operations_struct sq_vma_ops = {
-	.unmap	= sq_vma_unmap,
-	.sync	= sq_vma_sync,
-};
+static ssize_t mapping_show(char *buf)
+{
+	struct sq_mapping **list, *entry;
+	char *p = buf;
 
-/**
- * sq_mmap - mmap() for /dev/cpu/sq
- * @file: unused.
- * @vma: VMA to remap.
- *
- * Remap the specified vma @vma through the store queues, and setup associated
- * information for the new mapping. Also build up the page tables for the new
- * area.
- */
-static int sq_mmap(struct file *file, struct vm_area_struct *vma)
+	for (list = &sq_mapping_list; (entry = *list); list = &entry->next)
+		p += sprintf(p, "%08lx-%08lx [%08lx]: %s\n",
+			     entry->sq_addr, entry->sq_addr + entry->size,
+			     entry->addr, entry->name);
+
+	return p - buf;
+}
+
+static ssize_t mapping_store(const char *buf, size_t count)
 {
-	unsigned long offset = vma->vm_pgoff << PAGE_SHIFT;
-	unsigned long size = vma->vm_end - vma->vm_start;
-	struct sq_mapping *map;
+	unsigned long base = 0, len = 0;
 
-	/*
-	 * We're not interested in any arbitrary virtual address that has
-	 * been stuck in the VMA, as we already know what addresses we
-	 * want. Save off the size, and reposition the VMA to begin at
-	 * the next available sq address.
-	 */
-	vma->vm_start = __sq_get_next_addr();
-	vma->vm_end   = vma->vm_start + size;
+	sscanf(buf, "%lx %lx", &base, &len);
+	if (!base)
+		return -EIO;
 
-	vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
+	if (likely(len)) {
+		int ret = sq_remap(base, len, "Userspace",
+				   pgprot_val(PAGE_SHARED));
+		if (ret < 0)
+			return ret;
+	} else
+		sq_unmap(base);
 
-	vma->vm_flags |= VM_IO | VM_RESERVED;
+	return count;
+}
 
-	map = __sq_alloc_mapping(vma->vm_start, offset, size, "Userspace");
+static struct sq_sysfs_attr mapping_attr =
+	__ATTR(mapping, 0644, mapping_show, mapping_store);
 
-	if (io_remap_pfn_range(vma, map->sq_addr, map->addr >> PAGE_SHIFT,
-				size, vma->vm_page_prot))
-		return -EAGAIN;
+static struct attribute *sq_sysfs_attrs[] = {
+	&mapping_attr.attr,
+	NULL,
+};
 
-	vma->vm_ops = &sq_vma_ops;
+static struct sysfs_ops sq_sysfs_ops = {
+	.show	= sq_sysfs_show,
+	.store	= sq_sysfs_store,
+};
 
-	return 0;
-}
+static struct kobj_type ktype_percpu_entry = {
+	.sysfs_ops	= &sq_sysfs_ops,
+	.default_attrs	= sq_sysfs_attrs,
+};
 
-#ifdef CONFIG_PROC_FS
-static int sq_mapping_read_proc(char *buf, char **start, off_t off,
-				int len, int *eof, void *data)
+static int __devinit sq_sysdev_add(struct sys_device *sysdev)
 {
-	struct list_head *pos;
-	char *p = buf;
+	unsigned int cpu = sysdev->id;
+	struct kobject *kobj;
 
-	list_for_each_prev(pos, &sq_mapping_list) {
-		struct sq_mapping *entry;
+	sq_kobject[cpu] = kzalloc(sizeof(struct kobject), GFP_KERNEL);
+	if (unlikely(!sq_kobject[cpu]))
+		return -ENOMEM;
 
-		entry = list_entry(pos, typeof(*entry), list);
+	kobj = sq_kobject[cpu];
+	kobj->parent = &sysdev->kobj;
+	kobject_set_name(kobj, "%s", "sq");
+	kobj->ktype = &ktype_percpu_entry;
 
-		p += sprintf(p, "%08lx-%08lx [%08lx]: %s\n", entry->sq_addr,
-			     entry->sq_addr + entry->size - 1, entry->addr,
-			     entry->name);
-	}
-
-	return p - buf;
+	return kobject_register(kobj);
 }
-#endif
 
-static struct file_operations sq_fops = {
-	.owner		= THIS_MODULE,
-	.mmap		= sq_mmap,
-};
+static int __devexit sq_sysdev_remove(struct sys_device *sysdev)
+{
+	unsigned int cpu = sysdev->id;
+	struct kobject *kobj = sq_kobject[cpu];
+
+	kobject_unregister(kobj);
+	return 0;
+}
 
-static struct miscdevice sq_dev = {
-	.minor		= STORE_QUEUE_MINOR,
-	.name		= "sq",
-	.devfs_name	= "cpu/sq",
-	.fops		= &sq_fops,
+static struct sysdev_driver sq_sysdev_driver = {
+	.add		= sq_sysdev_add,
+	.remove		= __devexit_p(sq_sysdev_remove),
 };
 
 static int __init sq_api_init(void)
 {
+	unsigned int nr_pages = 0x04000000 >> PAGE_SHIFT;
+	unsigned int size = (nr_pages + (BITS_PER_LONG - 1)) / BITS_PER_LONG;
+	int ret = -ENOMEM;
+
 	printk(KERN_NOTICE "sq: Registering store queue API.\n");
 
-#ifdef CONFIG_PROC_FS
-	create_proc_read_entry("sq_mapping", 0, 0, sq_mapping_read_proc, 0);
-#endif
+	sq_cache = kmem_cache_create("store_queue_cache",
+				sizeof(struct sq_mapping), 0, 0,
+				NULL, NULL);
+	if (unlikely(!sq_cache))
+		return ret;
+
+	sq_bitmap = kzalloc(size, GFP_KERNEL);
+	if (unlikely(!sq_bitmap))
+		goto out;
+
+	ret = sysdev_driver_register(&cpu_sysdev_class, &sq_sysdev_driver);
+	if (unlikely(ret != 0))
+		goto out;
 
-	return misc_register(&sq_dev);
+	return 0;
+
+out:
+	kfree(sq_bitmap);
+	kmem_cache_destroy(sq_cache);
+
+	return ret;
 }
 
 static void __exit sq_api_exit(void)
 {
-	misc_deregister(&sq_dev);
+	sysdev_driver_unregister(&cpu_sysdev_class, &sq_sysdev_driver);
+	kfree(sq_bitmap);
+	kmem_cache_destroy(sq_cache);
 }
 
 module_init(sq_api_init);
@@ -443,11 +401,7 @@
 MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>, M. R. Brown <mrbrown@0xd6.org>");
 MODULE_DESCRIPTION("Simple API for SH-4 integrated Store Queues");
 MODULE_LICENSE("GPL");
-MODULE_ALIAS_MISCDEV(STORE_QUEUE_MINOR);
 
 EXPORT_SYMBOL(sq_remap);
 EXPORT_SYMBOL(sq_unmap);
-EXPORT_SYMBOL(sq_clear);
-EXPORT_SYMBOL(sq_flush);
 EXPORT_SYMBOL(sq_flush_range);
-
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/early_printk.c linux-2.6.17/arch/sh/kernel/early_printk.c
--- linux-2.6.17-vanilla/arch/sh/kernel/early_printk.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/early_printk.c	2006-07-12 16:54:22.000000000 +0000
@@ -59,34 +59,42 @@
 #endif
 
 #ifdef CONFIG_EARLY_SCIF_CONSOLE
+#include <linux/serial_core.h>
+#include "../../../drivers/serial/sh-sci.h"
+
+#ifdef CONFIG_CPU_SH4
 #define SCIF_REG	0xffe80000
+#elif defined(CONFIG_CPU_SUBTYPE_SH72060)
+#define SCIF_REG	0xfffe9800
+#else
+#error "Undefined SCIF for this subtype"
+#endif
+
+static struct uart_port scif_port = {
+	.mapbase	= SCIF_REG,
+	.membase	= (char *)SCIF_REG,
+};
 
 static void scif_sercon_putc(int c)
 {
-	while (!(ctrl_inw(SCIF_REG + 0x10) & 0x20)) ;
+	while (((sci_in(&scif_port, SCFDR) & 0x1f00 >> 8) == 16))
+		;
+
+	sci_out(&scif_port, SCxTDR, c);
+	sci_in(&scif_port, SCxSR);
+	sci_out(&scif_port, SCxSR, 0xf3 & ~(0x20 | 0x40));
 
-	ctrl_outb(c, SCIF_REG + 12);
-	ctrl_outw((ctrl_inw(SCIF_REG + 0x10) & 0x9f), SCIF_REG + 0x10);
+	while ((sci_in(&scif_port, SCxSR) & 0x40) == 0);
+		;
 
 	if (c == '\n')
 		scif_sercon_putc('\r');
 }
 
-static void scif_sercon_flush(void)
-{
-	ctrl_outw((ctrl_inw(SCIF_REG + 0x10) & 0xbf), SCIF_REG + 0x10);
-
-	while (!(ctrl_inw(SCIF_REG + 0x10) & 0x40)) ;
-
-	ctrl_outw((ctrl_inw(SCIF_REG + 0x10) & 0xbf), SCIF_REG + 0x10);
-}
-
 static void scif_sercon_write(struct console *con, const char *s, unsigned count)
 {
 	while (count-- > 0)
 		scif_sercon_putc(*s++);
-
-	scif_sercon_flush();
 }
 
 static int __init scif_sercon_setup(struct console *con, char *options)
@@ -124,7 +132,7 @@
 
 void __init enable_early_printk(void)
 {
-#ifdef CONFIG_EARLY_SCIF_CONSOLE
+#if defined(CONFIG_EARLY_SCIF_CONSOLE) && defined(CONFIG_CPU_SH4)
 	scif_sercon_init(115200);
 #endif
 	register_console(&early_console);
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/entry.S linux-2.6.17/arch/sh/kernel/entry.S
--- linux-2.6.17-vanilla/arch/sh/kernel/entry.S	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/entry.S	2006-07-12 16:54:22.000000000 +0000
@@ -19,24 +19,6 @@
 #include <asm/cpu/mmu_context.h>
 #include <asm/unistd.h>
 
-#if !defined(CONFIG_NFSD) && !defined(CONFIG_NFSD_MODULE)
-#define sys_nfsservctl		sys_ni_syscall
-#endif
-
-#if !defined(CONFIG_MMU)
-#define sys_madvise		sys_ni_syscall
-#define sys_readahead		sys_ni_syscall
-#define sys_mprotect		sys_ni_syscall
-#define sys_msync		sys_ni_syscall
-#define sys_mlock		sys_ni_syscall
-#define sys_munlock		sys_ni_syscall
-#define sys_mlockall		sys_ni_syscall
-#define sys_munlockall		sys_ni_syscall
-#define sys_mremap		sys_ni_syscall
-#define sys_mincore		sys_ni_syscall
-#define sys_remap_file_pages	sys_ni_syscall
-#endif
-
 ! NOTE:
 ! GNU as (as of 2.9.1) changes bf/s into bt/s and bra, when the address
 ! to be jumped is too far, but it causes illegal slot exception.
@@ -327,7 +309,7 @@
 	.align	2
 ret_from_exception:
 	preempt_stop()
-ret_from_irq:
+ENTRY(ret_from_irq)
 	!
 	mov	#OFF_SR, r0
 	mov.l	@(r0,r15), r0	! get status register
@@ -645,7 +627,7 @@
 	!
 #if defined(CONFIG_KGDB_NMI)
 	! Clear in_nmi
-	mov.l	4f, k0
+	mov.l	6f, k0
 	mov	#0, k1
 	mov.b	k1, @k0
 #endif
@@ -723,7 +705,7 @@
 !
 !
 	.align	2
-handle_exception:
+ENTRY(handle_exception)
 	! Using k0, k1 for scratch registers (r0_bank1, r1_bank),
 	! save all registers onto stack.
 	!
@@ -839,300 +821,3 @@
 	rts
 	 nop
 
-	.data
-ENTRY(sys_call_table)
-	.long sys_ni_syscall	/* 0  -  old "setup()" system call*/
-	.long sys_exit
-	.long sys_fork
-	.long sys_read
-	.long sys_write
-	.long sys_open		/* 5 */
-	.long sys_close
-	.long sys_waitpid
-	.long sys_creat
-	.long sys_link
-	.long sys_unlink		/* 10 */
-	.long sys_execve
-	.long sys_chdir
-	.long sys_time
-	.long sys_mknod
-	.long sys_chmod		/* 15 */
-	.long sys_lchown16
-	.long sys_ni_syscall	/* old break syscall holder */
-	.long sys_stat
-	.long sys_lseek
-	.long sys_getpid		/* 20 */
-	.long sys_mount
-	.long sys_oldumount
-	.long sys_setuid16
-	.long sys_getuid16
-	.long sys_stime		/* 25 */
-	.long sys_ptrace
-	.long sys_alarm
-	.long sys_fstat
-	.long sys_pause
-	.long sys_utime		/* 30 */
-	.long sys_ni_syscall	/* old stty syscall holder */
-	.long sys_ni_syscall	/* old gtty syscall holder */
-	.long sys_access
-	.long sys_nice
-	.long sys_ni_syscall	/* 35 */		/* old ftime syscall holder */
-	.long sys_sync
-	.long sys_kill
-	.long sys_rename
-	.long sys_mkdir
-	.long sys_rmdir		/* 40 */
-	.long sys_dup
-	.long sys_pipe
-	.long sys_times
-	.long sys_ni_syscall	/* old prof syscall holder */
-	.long sys_brk		/* 45 */
-	.long sys_setgid16
-	.long sys_getgid16
-	.long sys_signal
-	.long sys_geteuid16
-	.long sys_getegid16	/* 50 */
-	.long sys_acct
-	.long sys_umount		/* recycled never used phys() */
-	.long sys_ni_syscall	/* old lock syscall holder */
-	.long sys_ioctl
-	.long sys_fcntl		/* 55 */
-	.long sys_ni_syscall	/* old mpx syscall holder */
-	.long sys_setpgid
-	.long sys_ni_syscall	/* old ulimit syscall holder */
-	.long sys_ni_syscall	/* sys_olduname */
-	.long sys_umask		/* 60 */
-	.long sys_chroot
-	.long sys_ustat
-	.long sys_dup2
-	.long sys_getppid
-	.long sys_getpgrp		/* 65 */
-	.long sys_setsid
-	.long sys_sigaction
-	.long sys_sgetmask
-	.long sys_ssetmask
-	.long sys_setreuid16	/* 70 */
-	.long sys_setregid16
-	.long sys_sigsuspend
-	.long sys_sigpending
-	.long sys_sethostname
-	.long sys_setrlimit	/* 75 */
-	.long sys_old_getrlimit
-	.long sys_getrusage
-	.long sys_gettimeofday
-	.long sys_settimeofday
-	.long sys_getgroups16	/* 80 */
-	.long sys_setgroups16
-	.long sys_ni_syscall	/* sys_oldselect */
-	.long sys_symlink
-	.long sys_lstat
-	.long sys_readlink		/* 85 */
-	.long sys_uselib
-	.long sys_swapon
-	.long sys_reboot
-	.long old_readdir
-	.long old_mmap		/* 90 */
-	.long sys_munmap
-	.long sys_truncate
-	.long sys_ftruncate
-	.long sys_fchmod
-	.long sys_fchown16		/* 95 */
-	.long sys_getpriority
-	.long sys_setpriority
-	.long sys_ni_syscall	/* old profil syscall holder */
-	.long sys_statfs
-	.long sys_fstatfs		/* 100 */
-	.long sys_ni_syscall	/* ioperm */
-	.long sys_socketcall
-	.long sys_syslog
-	.long sys_setitimer
-	.long sys_getitimer	/* 105 */
-	.long sys_newstat
-	.long sys_newlstat
-	.long sys_newfstat
-	.long sys_uname
-	.long sys_ni_syscall	/* 110 */ /* iopl */
-	.long sys_vhangup
-	.long sys_ni_syscall	/* idle */
-	.long sys_ni_syscall	/* vm86old */
-	.long sys_wait4
-	.long sys_swapoff		/* 115 */
-	.long sys_sysinfo
-	.long sys_ipc
-	.long sys_fsync
-	.long sys_sigreturn
-	.long sys_clone		/* 120 */
-	.long sys_setdomainname
-	.long sys_newuname
-	.long sys_ni_syscall	/* sys_modify_ldt */
-	.long sys_adjtimex
-	.long sys_mprotect		/* 125 */
-	.long sys_sigprocmask
-	.long sys_ni_syscall	/* old "create_module" */
-	.long sys_init_module
-	.long sys_delete_module
-	.long sys_ni_syscall	/* 130: old "get_kernel_syms" */
-	.long sys_quotactl
-	.long sys_getpgid
-	.long sys_fchdir
-	.long sys_bdflush
-	.long sys_sysfs		/* 135 */
-	.long sys_personality
-	.long sys_ni_syscall	/* for afs_syscall */
-	.long sys_setfsuid16
-	.long sys_setfsgid16
-	.long sys_llseek		/* 140 */
-	.long sys_getdents
-	.long sys_select
-	.long sys_flock
-	.long sys_msync
-	.long sys_readv		/* 145 */
-	.long sys_writev
-	.long sys_getsid
-	.long sys_fdatasync
-	.long sys_sysctl
-	.long sys_mlock		/* 150 */
-	.long sys_munlock
-	.long sys_mlockall
-	.long sys_munlockall
-	.long sys_sched_setparam
-	.long sys_sched_getparam   /* 155 */
-	.long sys_sched_setscheduler
-	.long sys_sched_getscheduler
-	.long sys_sched_yield
-	.long sys_sched_get_priority_max
-	.long sys_sched_get_priority_min  /* 160 */
-	.long sys_sched_rr_get_interval
-	.long sys_nanosleep
-	.long sys_mremap
-	.long sys_setresuid16
-	.long sys_getresuid16	/* 165 */
-	.long sys_ni_syscall	/* vm86 */
-	.long sys_ni_syscall	/* old "query_module" */
-	.long sys_poll
-	.long sys_nfsservctl
-	.long sys_setresgid16	/* 170 */
-	.long sys_getresgid16
-	.long sys_prctl
-	.long sys_rt_sigreturn
-	.long sys_rt_sigaction
-	.long sys_rt_sigprocmask	/* 175 */
-	.long sys_rt_sigpending
-	.long sys_rt_sigtimedwait
-	.long sys_rt_sigqueueinfo
-	.long sys_rt_sigsuspend
-	.long sys_pread_wrapper	   /* 180 */
-	.long sys_pwrite_wrapper
-	.long sys_chown16
-	.long sys_getcwd
-	.long sys_capget
-	.long sys_capset           /* 185 */
-	.long sys_sigaltstack
-	.long sys_sendfile
-	.long sys_ni_syscall	/* streams1 */
-	.long sys_ni_syscall	/* streams2 */
-	.long sys_vfork            /* 190 */
-	.long sys_getrlimit
-	.long sys_mmap2
-	.long sys_truncate64
-	.long sys_ftruncate64
-	.long sys_stat64		/* 195 */
-	.long sys_lstat64
-	.long sys_fstat64
-	.long sys_lchown
-	.long sys_getuid
-	.long sys_getgid		/* 200 */
-	.long sys_geteuid
-	.long sys_getegid
-	.long sys_setreuid
-	.long sys_setregid
-	.long sys_getgroups	/* 205 */
-	.long sys_setgroups
-	.long sys_fchown
-	.long sys_setresuid
-	.long sys_getresuid
-	.long sys_setresgid	/* 210 */
-	.long sys_getresgid
-	.long sys_chown
-	.long sys_setuid
-	.long sys_setgid
-	.long sys_setfsuid		/* 215 */
-	.long sys_setfsgid
-	.long sys_pivot_root
-	.long sys_mincore
-	.long sys_madvise
-	.long sys_getdents64	/* 220 */
-	.long sys_fcntl64
-	.long sys_ni_syscall	/* reserved for TUX */
-	.long sys_ni_syscall	/* Reserved for Security */
-	.long sys_gettid
-	.long sys_readahead	/* 225 */
-	.long sys_setxattr
-	.long sys_lsetxattr
-	.long sys_fsetxattr
-	.long sys_getxattr
-	.long sys_lgetxattr	/* 230 */
-	.long sys_fgetxattr
-	.long sys_listxattr
-	.long sys_llistxattr
-	.long sys_flistxattr
-	.long sys_removexattr	/* 235 */
-	.long sys_lremovexattr
-	.long sys_fremovexattr
-	.long sys_tkill
-	.long sys_sendfile64
-	.long sys_futex		/* 240 */
-	.long sys_sched_setaffinity
-	.long sys_sched_getaffinity
-	.long sys_ni_syscall
-	.long sys_ni_syscall
-	.long sys_io_setup	/* 245 */
-	.long sys_io_destroy
-	.long sys_io_getevents
-	.long sys_io_submit
-	.long sys_io_cancel
-	.long sys_fadvise64	/* 250 */
-	.long sys_ni_syscall
-	.long sys_exit_group
-	.long sys_lookup_dcookie
-	.long sys_epoll_create
-	.long sys_epoll_ctl	/* 255 */
-	.long sys_epoll_wait
- 	.long sys_remap_file_pages
- 	.long sys_set_tid_address
- 	.long sys_timer_create
- 	.long sys_timer_settime		/* 260 */
- 	.long sys_timer_gettime
- 	.long sys_timer_getoverrun
- 	.long sys_timer_delete
- 	.long sys_clock_settime
- 	.long sys_clock_gettime		/* 265 */
- 	.long sys_clock_getres
- 	.long sys_clock_nanosleep
-	.long sys_statfs64
-	.long sys_fstatfs64     
-	.long sys_tgkill		/* 270 */
-	.long sys_utimes
- 	.long sys_fadvise64_64_wrapper
-	.long sys_ni_syscall	/* Reserved for vserver */
-	.long sys_ni_syscall	/* Reserved for mbind */
-	.long sys_ni_syscall	/* 275 - get_mempolicy */
-	.long sys_ni_syscall	/* set_mempolicy */
-	.long sys_mq_open
-	.long sys_mq_unlink
-	.long sys_mq_timedsend
-	.long sys_mq_timedreceive       /* 280 */
-	.long sys_mq_notify
-	.long sys_mq_getsetattr
-	.long sys_ni_syscall	/* Reserved for kexec */
-	.long sys_waitid
-	.long sys_add_key		/* 285 */
-	.long sys_request_key
-	.long sys_keyctl
-	.long sys_ioprio_set
-	.long sys_ioprio_get
-	.long sys_inotify_init		/* 290 */
-	.long sys_inotify_add_watch
-	.long sys_inotify_rm_watch
-
-/* End of entry.S */
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/head.S linux-2.6.17/arch/sh/kernel/head.S
--- linux-2.6.17-vanilla/arch/sh/kernel/head.S	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/head.S	2006-07-12 16:54:22.000000000 +0000
@@ -12,6 +12,17 @@
  */
 #include <linux/linkage.h>
 
+#ifdef CONFIG_CPU_SH4A
+#define SYNCO()		synco
+
+#define PREFI(label, reg)	\
+	mov.l	label, reg;	\
+	prefi	@reg
+#else
+#define SYNCO()
+#define PREFI(label, reg)
+#endif
+
 	.section	.empty_zero_page, "aw"
 ENTRY(empty_zero_page)
 	.long	1		/* MOUNT_ROOT_RDONLY */
@@ -42,6 +53,17 @@
 	!			Initialize global interrupt mask
 	mov	#0, r0
 	ldc	r0, r6_bank
+
+	/*
+	 * Prefetch if possible to reduce cache miss penalty.
+	 *
+	 * We do this early on for SH-4A as a micro-optimization,
+	 * as later on we will have speculative execution enabled
+	 * and this will become less of an issue.
+	 */
+	PREFI(5f, r0)
+	PREFI(6f, r0)
+
 	!
 	mov.l	2f, r0
 	mov	r0, r15		! Set initial r15 (stack pointer)
@@ -49,11 +71,7 @@
 	shll8	r1		! r1 = 8192
 	sub	r1, r0		!
 	ldc	r0, r7_bank	! ... and initial thread_info
-	!
-	!			Additional CPU initialization
-	mov.l	6f, r0
-	jsr	@r0
-	 nop
+
 	!			Clear BSS area
 	mov.l	3f, r1
 	add	#4, r1
@@ -62,6 +80,14 @@
 9:	cmp/hs	r2, r1
 	bf/s	9b		! while (r1 < r2)
 	 mov.l	r0,@-r2
+
+	!			Additional CPU initialization
+	mov.l	6f, r0
+	jsr	@r0
+	 nop
+
+	SYNCO()			! Wait for pending instructions..
+
 	!			Start kernel
 	mov.l	5f, r0
 	jmp	@r0
@@ -69,7 +95,7 @@
 
 	.balign 4
 1:	.long	0x400080F0		! MD=1, RB=0, BL=0, FD=1, IMASK=0xF
-2:	.long	stack
+2:	.long	init_thread_union+8192
 3:	.long	__bss_start
 4:	.long	_end
 5:	.long	start_kernel
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/kgdb_stub.c linux-2.6.17/arch/sh/kernel/kgdb_stub.c
--- linux-2.6.17-vanilla/arch/sh/kernel/kgdb_stub.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/kgdb_stub.c	2006-07-12 16:54:22.000000000 +0000
@@ -101,16 +101,17 @@
 #include <linux/linkage.h>
 #include <linux/init.h>
 
+#ifdef CONFIG_SH_KGDB_CONSOLE
+#include <linux/console.h>
+#endif
+
 #include <asm/system.h>
 #include <asm/current.h>
 #include <asm/signal.h>
 #include <asm/pgtable.h>
 #include <asm/ptrace.h>
 #include <asm/kgdb.h>
-
-#ifdef CONFIG_SH_KGDB_CONSOLE
-#include <linux/console.h>
-#endif
+#include <asm/io.h>
 
 /* Function pointers for linkage */
 kgdb_debug_hook_t *kgdb_debug_hook;
@@ -240,7 +241,6 @@
 /* Misc static */
 static int stepped_address;
 static short stepped_opcode;
-static const char hexchars[] = "0123456789abcdef";
 static char in_buffer[BUFMAX];
 static char out_buffer[OUTBUFMAX];
 
@@ -253,29 +253,6 @@
 #define BUF_THREAD_ID_SIZE 16
 #endif
 
-/* Return addr as a real volatile address */
-static inline unsigned int ctrl_inl(const unsigned long addr)
-{
-	return *(volatile unsigned long *) addr;
-}
-
-/* Correctly set *addr using volatile */
-static inline void ctrl_outl(const unsigned int b, unsigned long addr)
-{
-	*(volatile unsigned long *) addr = b;
-}
-
-/* Get high hex bits */
-static char highhex(const int x)
-{
-	return hexchars[(x >> 4) & 0xf];
-}
-
-/* Get low hex bits */
-static char lowhex(const int x)
-{
-	return hexchars[x & 0xf];
-}
 
 /* Convert ch to hex */
 static int hex(const char ch)
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/machine_kexec.c linux-2.6.17/arch/sh/kernel/machine_kexec.c
--- linux-2.6.17-vanilla/arch/sh/kernel/machine_kexec.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/machine_kexec.c	2006-07-12 16:54:22.000000000 +0000
@@ -27,7 +27,7 @@
 
 const extern unsigned char relocate_new_kernel[];
 const extern unsigned int relocate_new_kernel_size;
-extern void *gdb_vbr_vector;
+extern void *gdb_vbr_vector; 
 
 /*
  * Provide a dummy crash_notes definition while crash dump arrives to ppc.
@@ -78,7 +78,7 @@
  */
 NORET_TYPE void machine_kexec(struct kimage *image)
 {
-
+  
 	unsigned long page_list;
 	unsigned long reboot_code_buffer;
 	unsigned long vbr_reg;
@@ -87,7 +87,7 @@
 #if defined(CONFIG_SH_STANDARD_BIOS)
 	vbr_reg = ((unsigned long )gdb_vbr_vector) - 0x100;
 #else
-	vbr_reg = 0x80000000;  // dummy
+	vbr_reg = 0x80000000;  // dummy 
 #endif
 	/* Interrupts aren't acceptable while we reboot */
 	local_irq_disable();
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/pm.c linux-2.6.17/arch/sh/kernel/pm.c
--- linux-2.6.17-vanilla/arch/sh/kernel/pm.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/pm.c	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1,88 @@
+/*
+ * Generic Power Management Routine
+ *
+ * Copyright (c) 2006 Andriy Skulysh <askulsyh@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License.
+ */
+#include <linux/suspend.h>
+#include <linux/delay.h>
+#include <linux/gfp.h>
+#include <asm/freq.h>
+#include <asm/io.h>
+#include <asm/watchdog.h>
+#include <asm/pm.h>
+
+#define INTR_OFFSET	0x600
+
+#define STBCR		0xffffff82
+#define STBCR2		0xffffff88
+
+#define STBCR_STBY	0x80
+#define STBCR_MSTP2	0x04
+
+#define MCR		0xffffff68
+#define RTCNT		0xffffff70
+
+#define MCR_RMODE	2
+#define MCR_RFSH	4
+
+void pm_enter(void)
+{
+	u8 stbcr, csr;
+	u16 frqcr, mcr;
+	u32 vbr_new, vbr_old;
+
+	set_bl_bit();
+
+	/* set wdt */
+	csr = sh_wdt_read_csr();
+	csr &= ~WTCSR_TME;
+	csr |= WTCSR_CKS_4096;
+	sh_wdt_write_csr(csr);
+	csr = sh_wdt_read_csr();
+	sh_wdt_write_cnt(0);
+
+	/* disable PLL1 */
+	frqcr = ctrl_inw(FRQCR);
+	frqcr &= ~(FRQCR_PLLEN | FRQCR_PSTBY);
+	ctrl_outw(frqcr, FRQCR);
+
+	/* enable standby */
+	stbcr = ctrl_inb(STBCR);
+	ctrl_outb(stbcr | STBCR_STBY | STBCR_MSTP2, STBCR);
+
+	/* set self-refresh */
+	mcr = ctrl_inw(MCR);
+	ctrl_outw(mcr & ~MCR_RFSH, MCR);
+
+	/* set interrupt handler */
+	asm volatile("stc vbr, %0" : "=r" (vbr_old));
+	vbr_new = get_zeroed_page(GFP_ATOMIC);
+	udelay(50);
+	memcpy((void*)(vbr_new + INTR_OFFSET),
+	       &wakeup_start, &wakeup_end - &wakeup_start);
+	asm volatile("ldc %0, vbr" : : "r" (vbr_new));
+
+	ctrl_outw(0, RTCNT);
+	ctrl_outw(mcr | MCR_RFSH | MCR_RMODE, MCR);
+
+	cpu_sleep();
+
+	asm volatile("ldc %0, vbr" : : "r" (vbr_old));
+
+	free_page(vbr_new);
+
+	/* enable PLL1 */
+	frqcr = ctrl_inw(FRQCR);
+	frqcr |= FRQCR_PSTBY;
+	ctrl_outw(frqcr, FRQCR);
+	udelay(50);
+	frqcr |= FRQCR_PLLEN;
+	ctrl_outw(frqcr, FRQCR);
+
+	ctrl_outb(stbcr, STBCR);
+
+	clear_bl_bit();
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/process.c linux-2.6.17/arch/sh/kernel/process.c
--- linux-2.6.17-vanilla/arch/sh/kernel/process.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/process.c	2006-07-12 16:54:22.000000000 +0000
@@ -227,13 +227,13 @@
 	return fpvalid;
 }
 
-/* 
+/*
  * Capture the user space registers if the task is not running (in user space)
  */
 int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs)
 {
 	struct pt_regs ptregs;
-	
+
 	ptregs = *task_pt_regs(tsk);
 	elf_core_copy_regs(regs, &ptregs);
 
@@ -262,6 +262,7 @@
 		unsigned long unused,
 		struct task_struct *p, struct pt_regs *regs)
 {
+	struct thread_info *ti = task_thread_info(p);
 	struct pt_regs *childregs;
 #if defined(CONFIG_SH_FPU)
 	struct task_struct *tsk = current;
@@ -276,8 +277,10 @@
 
 	if (user_mode(regs)) {
 		childregs->regs[15] = usp;
+		ti->addr_limit = USER_DS;
 	} else {
 		childregs->regs[15] = (unsigned long)task_stack_page(p) + THREAD_SIZE;
+		ti->addr_limit = KERNEL_DS;
 	}
         if (clone_flags & CLONE_SETTLS) {
 		childregs->gbr = childregs->regs[0];
@@ -345,7 +348,7 @@
 
 	/*
 	 * Restore the kernel mode register
-	 *   	k7 (r7_bank1)
+	 *	k7 (r7_bank1)
 	 */
 	asm volatile("ldc	%0, r7_bank"
 		     : /* no output */
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/ptrace.c linux-2.6.17/arch/sh/kernel/ptrace.c
--- linux-2.6.17-vanilla/arch/sh/kernel/ptrace.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/ptrace.c	2006-07-12 16:54:22.000000000 +0000
@@ -225,7 +225,6 @@
 
 	case PTRACE_SETDSPREGS: {
 		unsigned long dp;
-		int i;
 
 		ret = -EIO;
 		dp = ((unsigned long) child) + THREAD_SIZE -
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/relocate_kernel.S linux-2.6.17/arch/sh/kernel/relocate_kernel.S
--- linux-2.6.17-vanilla/arch/sh/kernel/relocate_kernel.S	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/relocate_kernel.S	2006-07-12 16:54:22.000000000 +0000
@@ -12,8 +12,8 @@
 #include <linux/linkage.h>
 
 #define PAGE_SIZE      4096 /* must be same value as in <asm/page.h> */
-
-
+	
+	
 		.globl relocate_new_kernel
 relocate_new_kernel:
 	/* r4 = indirection_page   */
@@ -30,43 +30,43 @@
 
 	bra	1f
 	mov	r4,r0	  /* cmd = indirection_page */
-0:
-	mov.l	@r4+,r0	  /* cmd = *ind++ */
+0:	
+	mov.l	@r4+,r0	  /* cmd = *ind++ */ 
 
 1:	/* addr = (cmd | 0xa0000000) & 0xfffffff0 */
 	mov	r0,r2
 	or	r9,r2
 	mov	#-16,r1
-	and	r1,r2
+	and	r1,r2	  
 
 	/* if(cmd & IND_DESTINATION) dst = addr  */
-	tst	#1,r0
+	tst	#1,r0	  
 	bt	2f
-	bra	0b
-	mov	r2,r5
+	bra	0b	
+	mov	r2,r5	  
 
 2:	/* else if(cmd & IND_INDIRECTION) ind = addr  */
-	tst	#2,r0
+	tst	#2,r0     
 	bt	3f
-	bra	0b
-	mov	r2,r4
+	bra	0b	
+	mov	r2,r4     
 
 3:	/* else if(cmd & IND_DONE) goto 6  */
-	tst	#4,r0
+	tst	#4,r0     
 	bt	4f
 	bra	6f
 	nop
 
 4:	/* else if(cmd & IND_SOURCE) memcpy(dst,addr,PAGE_SIZE) */
-	tst	#8,r0
+	tst	#8,r0     
 	bt	0b
 
-	mov	r8,r3
-	shlr2	r3
-	shlr2	r3
-5:
+	mov	r8,r3  
+	shlr2	r3	
+	shlr2	r3	
+5:	
 	dt	r3
-	mov.l	@r2+,r1   /*  16n+0 */
+	mov.l	@r2+,r1   /*  16n+0 */  
 	mov.l	r1,@r5
 	add	#4,r5
 	mov.l	@r2+,r1	  /*  16n+4 */
@@ -79,7 +79,7 @@
 	mov.l	r1,@r5
 	add	#4,r5
 	bf	5b
-
+	
 	bra	0b
 	nop
 6:
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/semaphore.c linux-2.6.17/arch/sh/kernel/semaphore.c
--- linux-2.6.17-vanilla/arch/sh/kernel/semaphore.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/semaphore.c	2006-07-12 16:54:22.000000000 +0000
@@ -14,7 +14,7 @@
 #include <asm/semaphore.h>
 #include <asm/semaphore-helper.h>
 
-spinlock_t semaphore_wake_lock;
+DEFINE_SPINLOCK(semaphore_wake_lock);
 
 /*
  * Semaphores are implemented using a two-way counter:
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/setup.c linux-2.6.17/arch/sh/kernel/setup.c
--- linux-2.6.17-vanilla/arch/sh/kernel/setup.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/setup.c	2006-07-12 16:54:22.000000000 +0000
@@ -493,7 +493,7 @@
 	 * unified cache on the SH-2 and SH-3, as well as the harvard
 	 * style cache on the SH-4.
 	 */
-	if (test_bit(SH_CACHE_COMBINED, &(boot_cpu_data.icache.flags))) {
+	if (boot_cpu_data.icache.flags & SH_CACHE_COMBINED) {
 		seq_printf(m, "unified\n");
 		show_cacheinfo(m, "cache", boot_cpu_data.icache);
 	} else {
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/sh_ksyms.c linux-2.6.17/arch/sh/kernel/sh_ksyms.c
--- linux-2.6.17-vanilla/arch/sh/kernel/sh_ksyms.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/sh_ksyms.c	2006-07-12 16:54:22.000000000 +0000
@@ -28,21 +28,11 @@
 
 /* platform dependent support */
 EXPORT_SYMBOL(dump_fpu);
-EXPORT_SYMBOL(iounmap);
-EXPORT_SYMBOL(enable_irq);
-EXPORT_SYMBOL(disable_irq);
-EXPORT_SYMBOL(probe_irq_mask);
 EXPORT_SYMBOL(kernel_thread);
-EXPORT_SYMBOL(disable_irq_nosync);
 EXPORT_SYMBOL(irq_desc);
 EXPORT_SYMBOL(no_irq_type);
 
-EXPORT_SYMBOL(strstr);
 EXPORT_SYMBOL(strlen);
-EXPORT_SYMBOL(strnlen);
-EXPORT_SYMBOL(strchr);
-EXPORT_SYMBOL(strcat);
-EXPORT_SYMBOL(strncat);
 
 /* PCI exports */
 #ifdef CONFIG_PCI
@@ -53,13 +43,8 @@
 /* mem exports */
 EXPORT_SYMBOL(memchr);
 EXPORT_SYMBOL(memcpy);
-EXPORT_SYMBOL(memcpy_fromio);
-EXPORT_SYMBOL(memcpy_toio);
 EXPORT_SYMBOL(memset);
-EXPORT_SYMBOL(memset_io);
 EXPORT_SYMBOL(memmove);
-EXPORT_SYMBOL(memcmp);
-EXPORT_SYMBOL(memscan);
 EXPORT_SYMBOL(__copy_user);
 EXPORT_SYMBOL(boot_cpu_data);
 
@@ -101,6 +86,7 @@
 EXPORT_SYMBOL(flush_cache_range);
 EXPORT_SYMBOL(flush_dcache_page);
 EXPORT_SYMBOL(__flush_purge_region);
+EXPORT_SYMBOL(clear_user_page);
 #endif
 
 #if defined(CONFIG_SH7705_CACHE_32KB)
@@ -117,7 +103,12 @@
 EXPORT_SYMBOL(synchronize_irq);
 #endif
 
+#ifdef CONFIG_PM
+EXPORT_SYMBOL(pm_suspend);
+#endif
+
 EXPORT_SYMBOL(csum_partial);
+#ifdef CONFIG_IPV6
 EXPORT_SYMBOL(csum_ipv6_magic);
-EXPORT_SYMBOL(consistent_sync);
+#endif
 EXPORT_SYMBOL(clear_page);
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/sys_sh.c linux-2.6.17/arch/sh/kernel/sys_sh.c
--- linux-2.6.17-vanilla/arch/sh/kernel/sys_sh.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/sys_sh.c	2006-07-12 16:54:22.000000000 +0000
@@ -21,7 +21,7 @@
 #include <linux/mman.h>
 #include <linux/file.h>
 #include <linux/utsname.h>
-
+#include <asm/cacheflush.h>
 #include <asm/uaccess.h>
 #include <asm/ipc.h>
 
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/syscalls.S linux-2.6.17/arch/sh/kernel/syscalls.S
--- linux-2.6.17-vanilla/arch/sh/kernel/syscalls.S	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/syscalls.S	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1,354 @@
+/*
+ * arch/sh/kernel/syscalls.S
+ *
+ * System call table for SuperH
+ *
+ *  Copyright (C) 1999, 2000, 2002  Niibe Yutaka
+ *  Copyright (C) 2003  Paul Mundt
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ */
+
+#include <linux/sys.h>
+#include <linux/linkage.h>
+#include <linux/config.h>
+
+#if !defined(CONFIG_NFSD) && !defined(CONFIG_NFSD_MODULE)
+#define sys_nfsservctl		sys_ni_syscall
+#endif
+
+#if !defined(CONFIG_MMU)
+#define sys_madvise		sys_ni_syscall
+#define sys_readahead		sys_ni_syscall
+#define sys_mprotect		sys_ni_syscall
+#define sys_msync		sys_ni_syscall
+#define sys_mlock		sys_ni_syscall
+#define sys_munlock		sys_ni_syscall
+#define sys_mlockall		sys_ni_syscall
+#define sys_munlockall		sys_ni_syscall
+#define sys_mremap		sys_ni_syscall
+#define sys_mincore		sys_ni_syscall
+#define sys_remap_file_pages	sys_ni_syscall
+#endif
+
+	.data
+ENTRY(sys_call_table)
+	.long sys_ni_syscall	/* 0  -  old "setup()" system call*/
+	.long sys_exit
+	.long sys_fork
+	.long sys_read
+	.long sys_write
+	.long sys_open		/* 5 */
+	.long sys_close
+	.long sys_waitpid
+	.long sys_creat
+	.long sys_link
+	.long sys_unlink		/* 10 */
+	.long sys_execve
+	.long sys_chdir
+	.long sys_time
+	.long sys_mknod
+	.long sys_chmod		/* 15 */
+	.long sys_lchown16
+	.long sys_ni_syscall	/* old break syscall holder */
+	.long sys_stat
+	.long sys_lseek
+	.long sys_getpid		/* 20 */
+	.long sys_mount
+	.long sys_oldumount
+	.long sys_setuid16
+	.long sys_getuid16
+	.long sys_stime		/* 25 */
+	.long sys_ptrace
+	.long sys_alarm
+	.long sys_fstat
+	.long sys_pause
+	.long sys_utime		/* 30 */
+	.long sys_ni_syscall	/* old stty syscall holder */
+	.long sys_ni_syscall	/* old gtty syscall holder */
+	.long sys_access
+	.long sys_nice
+	.long sys_ni_syscall	/* 35 */		/* old ftime syscall holder */
+	.long sys_sync
+	.long sys_kill
+	.long sys_rename
+	.long sys_mkdir
+	.long sys_rmdir		/* 40 */
+	.long sys_dup
+	.long sys_pipe
+	.long sys_times
+	.long sys_ni_syscall	/* old prof syscall holder */
+	.long sys_brk		/* 45 */
+	.long sys_setgid16
+	.long sys_getgid16
+	.long sys_signal
+	.long sys_geteuid16
+	.long sys_getegid16	/* 50 */
+	.long sys_acct
+	.long sys_umount		/* recycled never used phys() */
+	.long sys_ni_syscall	/* old lock syscall holder */
+	.long sys_ioctl
+	.long sys_fcntl		/* 55 */
+	.long sys_ni_syscall	/* old mpx syscall holder */
+	.long sys_setpgid
+	.long sys_ni_syscall	/* old ulimit syscall holder */
+	.long sys_ni_syscall	/* sys_olduname */
+	.long sys_umask		/* 60 */
+	.long sys_chroot
+	.long sys_ustat
+	.long sys_dup2
+	.long sys_getppid
+	.long sys_getpgrp		/* 65 */
+	.long sys_setsid
+	.long sys_sigaction
+	.long sys_sgetmask
+	.long sys_ssetmask
+	.long sys_setreuid16	/* 70 */
+	.long sys_setregid16
+	.long sys_sigsuspend
+	.long sys_sigpending
+	.long sys_sethostname
+	.long sys_setrlimit	/* 75 */
+	.long sys_old_getrlimit
+	.long sys_getrusage
+	.long sys_gettimeofday
+	.long sys_settimeofday
+	.long sys_getgroups16	/* 80 */
+	.long sys_setgroups16
+	.long sys_ni_syscall	/* sys_oldselect */
+	.long sys_symlink
+	.long sys_lstat
+	.long sys_readlink		/* 85 */
+	.long sys_uselib
+	.long sys_swapon
+	.long sys_reboot
+	.long old_readdir
+	.long old_mmap		/* 90 */
+	.long sys_munmap
+	.long sys_truncate
+	.long sys_ftruncate
+	.long sys_fchmod
+	.long sys_fchown16		/* 95 */
+	.long sys_getpriority
+	.long sys_setpriority
+	.long sys_ni_syscall	/* old profil syscall holder */
+	.long sys_statfs
+	.long sys_fstatfs		/* 100 */
+	.long sys_ni_syscall	/* ioperm */
+	.long sys_socketcall
+	.long sys_syslog
+	.long sys_setitimer
+	.long sys_getitimer	/* 105 */
+	.long sys_newstat
+	.long sys_newlstat
+	.long sys_newfstat
+	.long sys_uname
+	.long sys_ni_syscall	/* 110 */ /* iopl */
+	.long sys_vhangup
+	.long sys_ni_syscall	/* idle */
+	.long sys_ni_syscall	/* vm86old */
+	.long sys_wait4
+	.long sys_swapoff		/* 115 */
+	.long sys_sysinfo
+	.long sys_ipc
+	.long sys_fsync
+	.long sys_sigreturn
+	.long sys_clone		/* 120 */
+	.long sys_setdomainname
+	.long sys_newuname
+	.long sys_ni_syscall	/* sys_modify_ldt */
+	.long sys_adjtimex
+	.long sys_mprotect		/* 125 */
+	.long sys_sigprocmask
+	.long sys_ni_syscall	/* old "create_module" */
+	.long sys_init_module
+	.long sys_delete_module
+	.long sys_ni_syscall	/* 130: old "get_kernel_syms" */
+	.long sys_quotactl
+	.long sys_getpgid
+	.long sys_fchdir
+	.long sys_bdflush
+	.long sys_sysfs		/* 135 */
+	.long sys_personality
+	.long sys_ni_syscall	/* for afs_syscall */
+	.long sys_setfsuid16
+	.long sys_setfsgid16
+	.long sys_llseek		/* 140 */
+	.long sys_getdents
+	.long sys_select
+	.long sys_flock
+	.long sys_msync
+	.long sys_readv		/* 145 */
+	.long sys_writev
+	.long sys_getsid
+	.long sys_fdatasync
+	.long sys_sysctl
+	.long sys_mlock		/* 150 */
+	.long sys_munlock
+	.long sys_mlockall
+	.long sys_munlockall
+	.long sys_sched_setparam
+	.long sys_sched_getparam   /* 155 */
+	.long sys_sched_setscheduler
+	.long sys_sched_getscheduler
+	.long sys_sched_yield
+	.long sys_sched_get_priority_max
+	.long sys_sched_get_priority_min  /* 160 */
+	.long sys_sched_rr_get_interval
+	.long sys_nanosleep
+	.long sys_mremap
+	.long sys_setresuid16
+	.long sys_getresuid16	/* 165 */
+	.long sys_ni_syscall	/* vm86 */
+	.long sys_ni_syscall	/* old "query_module" */
+	.long sys_poll
+	.long sys_nfsservctl
+	.long sys_setresgid16	/* 170 */
+	.long sys_getresgid16
+	.long sys_prctl
+	.long sys_rt_sigreturn
+	.long sys_rt_sigaction
+	.long sys_rt_sigprocmask	/* 175 */
+	.long sys_rt_sigpending
+	.long sys_rt_sigtimedwait
+	.long sys_rt_sigqueueinfo
+	.long sys_rt_sigsuspend
+	.long sys_pread_wrapper	   /* 180 */
+	.long sys_pwrite_wrapper
+	.long sys_chown16
+	.long sys_getcwd
+	.long sys_capget
+	.long sys_capset           /* 185 */
+	.long sys_sigaltstack
+	.long sys_sendfile
+	.long sys_ni_syscall	/* streams1 */
+	.long sys_ni_syscall	/* streams2 */
+	.long sys_vfork            /* 190 */
+	.long sys_getrlimit
+	.long sys_mmap2
+	.long sys_truncate64
+	.long sys_ftruncate64
+	.long sys_stat64		/* 195 */
+	.long sys_lstat64
+	.long sys_fstat64
+	.long sys_lchown
+	.long sys_getuid
+	.long sys_getgid		/* 200 */
+	.long sys_geteuid
+	.long sys_getegid
+	.long sys_setreuid
+	.long sys_setregid
+	.long sys_getgroups	/* 205 */
+	.long sys_setgroups
+	.long sys_fchown
+	.long sys_setresuid
+	.long sys_getresuid
+	.long sys_setresgid	/* 210 */
+	.long sys_getresgid
+	.long sys_chown
+	.long sys_setuid
+	.long sys_setgid
+	.long sys_setfsuid		/* 215 */
+	.long sys_setfsgid
+	.long sys_pivot_root
+	.long sys_mincore
+	.long sys_madvise
+	.long sys_getdents64	/* 220 */
+	.long sys_fcntl64
+	.long sys_ni_syscall	/* reserved for TUX */
+	.long sys_ni_syscall	/* Reserved for Security */
+	.long sys_gettid
+	.long sys_readahead	/* 225 */
+	.long sys_setxattr
+	.long sys_lsetxattr
+	.long sys_fsetxattr
+	.long sys_getxattr
+	.long sys_lgetxattr	/* 230 */
+	.long sys_fgetxattr
+	.long sys_listxattr
+	.long sys_llistxattr
+	.long sys_flistxattr
+	.long sys_removexattr	/* 235 */
+	.long sys_lremovexattr
+	.long sys_fremovexattr
+	.long sys_tkill
+	.long sys_sendfile64
+	.long sys_futex		/* 240 */
+	.long sys_sched_setaffinity
+	.long sys_sched_getaffinity
+	.long sys_ni_syscall
+	.long sys_ni_syscall
+	.long sys_io_setup	/* 245 */
+	.long sys_io_destroy
+	.long sys_io_getevents
+	.long sys_io_submit
+	.long sys_io_cancel
+	.long sys_fadvise64	/* 250 */
+	.long sys_ni_syscall
+	.long sys_exit_group
+	.long sys_lookup_dcookie
+	.long sys_epoll_create
+	.long sys_epoll_ctl	/* 255 */
+	.long sys_epoll_wait
+ 	.long sys_remap_file_pages
+ 	.long sys_set_tid_address
+ 	.long sys_timer_create
+ 	.long sys_timer_settime		/* 260 */
+ 	.long sys_timer_gettime
+ 	.long sys_timer_getoverrun
+ 	.long sys_timer_delete
+ 	.long sys_clock_settime
+ 	.long sys_clock_gettime		/* 265 */
+ 	.long sys_clock_getres
+ 	.long sys_clock_nanosleep
+	.long sys_statfs64
+	.long sys_fstatfs64     
+	.long sys_tgkill		/* 270 */
+	.long sys_utimes
+ 	.long sys_fadvise64_64_wrapper
+	.long sys_ni_syscall	/* Reserved for vserver */
+	.long sys_ni_syscall	/* Reserved for mbind */
+	.long sys_ni_syscall	/* 275 - get_mempolicy */
+	.long sys_ni_syscall	/* set_mempolicy */
+	.long sys_mq_open
+	.long sys_mq_unlink
+	.long sys_mq_timedsend
+	.long sys_mq_timedreceive       /* 280 */
+	.long sys_mq_notify
+	.long sys_mq_getsetattr
+	.long sys_kexec_load
+	.long sys_waitid
+	.long sys_add_key		/* 285 */
+	.long sys_request_key
+	.long sys_keyctl
+	.long sys_ioprio_set
+	.long sys_ioprio_get
+	.long sys_inotify_init		/* 290 */
+	.long sys_inotify_add_watch
+	.long sys_inotify_rm_watch
+	.long sys_migrate_pages
+	.long sys_openat
+	.long sys_mkdirat		/* 295 */
+	.long sys_mknodat
+	.long sys_fchownat
+	.long sys_futimesat
+	.long sys_fstatat64
+	.long sys_unlinkat		/* 300 */
+	.long sys_renameat
+	.long sys_linkat
+	.long sys_symlinkat
+	.long sys_readlinkat
+	.long sys_fchmodat		/* 305 */
+	.long sys_faccessat
+	.long sys_ni_syscall		/* Reserved for pselect6 */
+	.long sys_ni_syscall		/* Reserved for ppoll */
+	.long sys_unshare
+	.long sys_set_robust_list	/* 310 */
+	.long sys_get_robust_list
+	.long sys_splice
+	.long sys_sync_file_range
+	.long sys_tee
+	.long sys_vmsplice		/* 315 */
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/time.c linux-2.6.17/arch/sh/kernel/time.c
--- linux-2.6.17-vanilla/arch/sh/kernel/time.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/time.c	2006-07-12 16:54:22.000000000 +0000
@@ -30,11 +30,11 @@
 /* XXX: Can we initialize this in a routine somewhere?  Dreamcast doesn't want
  * these routines anywhere... */
 #ifdef CONFIG_SH_RTC
-void (*rtc_get_time)(struct timespec *) = sh_rtc_gettimeofday;
-int (*rtc_set_time)(const time_t) = sh_rtc_settimeofday;
+void (*rtc_sh_get_time)(struct timespec *) = sh_rtc_gettimeofday;
+int (*rtc_sh_set_time)(const time_t) = sh_rtc_settimeofday;
 #else
-void (*rtc_get_time)(struct timespec *);
-int (*rtc_set_time)(const time_t);
+void (*rtc_sh_get_time)(struct timespec *);
+int (*rtc_sh_set_time)(const time_t);
 #endif
 
 /*
@@ -136,7 +136,7 @@
 	    xtime.tv_sec > last_rtc_update + 660 &&
 	    (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 &&
 	    (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) {
-		if (rtc_set_time(xtime.tv_sec) == 0)
+		if (rtc_sh_set_time(xtime.tv_sec) == 0)
 			last_rtc_update = xtime.tv_sec;
 		else
 			/* do it again in 60s */
@@ -144,8 +144,33 @@
 	}
 }
 
+#ifdef CONFIG_PM
+int timer_suspend(struct sys_device *dev, pm_message_t state)
+{
+	struct sys_timer *sys_timer = container_of(dev, struct sys_timer, dev);
+
+	sys_timer->ops->stop();
+	
+	return 0;
+}
+
+int timer_resume(struct sys_device *dev)
+{
+	struct sys_timer *sys_timer = container_of(dev, struct sys_timer, dev);
+
+	sys_timer->ops->start();
+	
+	return 0;
+}
+#else
+#define timer_suspend NULL
+#define timer_resume NULL
+#endif
+
 static struct sysdev_class timer_sysclass = {
 	set_kset_name("timer"),
+	.suspend = timer_suspend,
+	.resume	 = timer_resume,
 };
 
 static int __init timer_init_sysfs(void)
@@ -169,8 +194,8 @@
 
 	clk_init();
 
-	if (rtc_get_time) {
-		rtc_get_time(&xtime);
+	if (rtc_sh_get_time) {
+		rtc_sh_get_time(&xtime);
 	} else {
 		xtime.tv_sec = mktime(2000, 1, 1, 0, 0, 0);
 		xtime.tv_nsec = 0;
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/timers/CVS/Entries linux-2.6.17/arch/sh/kernel/timers/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/kernel/timers/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/timers/CVS/Entries	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1,4 @@
+/Makefile/1.1/Sat Mar 26 20:25:36 2005/-ko/
+/timer.c/1.1/Sat Mar 26 20:25:36 2005/-ko/
+/timer-tmu.c/1.4/Sat Jul  8 20:16:10 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/timers/CVS/Repository linux-2.6.17/arch/sh/kernel/timers/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/kernel/timers/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/timers/CVS/Repository	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/kernel/timers
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/timers/CVS/Root linux-2.6.17/arch/sh/kernel/timers/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/kernel/timers/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/timers/CVS/Root	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/timers/timer-tmu.c linux-2.6.17/arch/sh/kernel/timers/timer-tmu.c
--- linux-2.6.17-vanilla/arch/sh/kernel/timers/timer-tmu.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/timers/timer-tmu.c	2006-07-12 16:54:22.000000000 +0000
@@ -132,17 +132,17 @@
 	ctrl_outl(0xffffffff, TMU0_TCOR);
 	ctrl_outl(0xffffffff, TMU0_TCNT);
 
-	rtc_get_time(&ts2);
+	rtc_sh_get_time(&ts2);
 
 	do {
-		rtc_get_time(&ts1);
+		rtc_sh_get_time(&ts1);
 	} while (ts1.tv_nsec == ts2.tv_nsec && ts1.tv_sec == ts2.tv_sec);
 
 	/* actually start the timer */
 	ctrl_outb(TMU_TSTR_INIT, TMU_TSTR);
 
 	do {
-		rtc_get_time(&ts2);
+		rtc_sh_get_time(&ts2);
 	} while (ts1.tv_nsec == ts2.tv_nsec && ts1.tv_sec == ts2.tv_sec);
 
 	freq = 0xffffffff - ctrl_inl(TMU0_TCNT);
@@ -188,6 +188,18 @@
 	.ops		= &tmu_clk_ops,
 };
 
+static int tmu_timer_start(void)
+{
+	ctrl_outb(TMU_TSTR_INIT, TMU_TSTR);
+	return 0;
+}
+
+static int tmu_timer_stop(void)
+{
+	ctrl_outb(0, TMU_TSTR);
+	return 0;
+}
+
 static int tmu_timer_init(void)
 {
 	unsigned long interval;
@@ -197,7 +209,7 @@
 	tmu0_clk.parent = clk_get("module_clk");
 
 	/* Start TMU0 */
-	ctrl_outb(0, TMU_TSTR);
+	tmu_timer_stop();
 #if !defined(CONFIG_CPU_SUBTYPE_SH7300) && !defined(CONFIG_CPU_SUBTYPE_SH7760)
 	ctrl_outb(TMU_TOCR_INIT, TMU_TOCR);
 #endif
@@ -211,13 +223,15 @@
 	ctrl_outl(interval, TMU0_TCOR);
 	ctrl_outl(interval, TMU0_TCNT);
 
-	ctrl_outb(TMU_TSTR_INIT, TMU_TSTR);
+	tmu_timer_start();
 
 	return 0;
 }
 
 struct sys_timer_ops tmu_timer_ops = {
 	.init		= tmu_timer_init,
+	.start		= tmu_timer_start,
+	.stop		= tmu_timer_stop,
 	.get_frequency	= tmu_timer_get_frequency,
 	.get_offset	= tmu_timer_get_offset,
 };
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/traps.c linux-2.6.17/arch/sh/kernel/traps.c
--- linux-2.6.17-vanilla/arch/sh/kernel/traps.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/traps.c	2006-07-12 16:54:22.000000000 +0000
@@ -37,40 +37,15 @@
 
 #ifdef CONFIG_SH_KGDB
 #include <asm/kgdb.h>
-#define CHK_REMOTE_DEBUG(regs)                                               \
-{                                                                            \
-  if ((kgdb_debug_hook != (kgdb_debug_hook_t *) NULL) && (!user_mode(regs))) \
-  {                                                                          \
-    (*kgdb_debug_hook)(regs);                                                \
-  }                                                                          \
+#define CHK_REMOTE_DEBUG(regs)                 	\
+{       					\
+	if (kgdb_debug_hook && !user_mode(regs))\
+		(*kgdb_debug_hook)(regs);       \
 }
 #else
 #define CHK_REMOTE_DEBUG(regs)
 #endif
 
-#define DO_ERROR(trapnr, signr, str, name, tsk)				\
-asmlinkage void do_##name(unsigned long r4, unsigned long r5,		\
-			  unsigned long r6, unsigned long r7,		\
-			  struct pt_regs regs)				\
-{									\
-	unsigned long error_code;					\
- 									\
-	/* Check if it's a DSP instruction */				\
- 	if (is_dsp_inst(&regs)) {					\
-		/* Enable DSP mode, and restart instruction. */		\
-		regs.sr |= SR_DSP;					\
-		return;							\
-	}								\
-									\
-	asm volatile("stc	r2_bank, %0": "=r" (error_code));	\
-	local_irq_enable();						\
-	tsk->thread.error_code = error_code;				\
-	tsk->thread.trap_no = trapnr;					\
-        CHK_REMOTE_DEBUG(&regs);					\
-	force_sig(signr, tsk);						\
-	die_if_no_fixup(str,&regs,error_code);				\
-}
-
 #ifdef CONFIG_CPU_SH2
 #define TRAP_RESERVED_INST	4
 #define TRAP_ILLEGAL_SLOT_INST	6
@@ -87,7 +62,7 @@
 #define VMALLOC_OFFSET (8*1024*1024)
 #define MODULE_RANGE (8*1024*1024)
 
-spinlock_t die_lock;
+DEFINE_SPINLOCK(die_lock);
 
 void die(const char * str, struct pt_regs * regs, long err)
 {
@@ -576,8 +551,117 @@
 #define is_dsp_inst(regs)	(0)
 #endif /* CONFIG_SH_DSP */
 
-DO_ERROR(TRAP_RESERVED_INST, SIGILL, "reserved instruction", reserved_inst, current)
-DO_ERROR(TRAP_ILLEGAL_SLOT_INST, SIGILL, "illegal slot instruction", illegal_slot_inst, current)
+extern int do_fpu_inst(unsigned short, struct pt_regs*);
+
+asmlinkage void do_reserved_inst(unsigned long r4, unsigned long r5,
+				unsigned long r6, unsigned long r7,
+				struct pt_regs regs)
+{
+	unsigned long error_code;
+	struct task_struct *tsk = current;
+
+#ifdef CONFIG_SH_FPU_EMU
+	unsigned short inst;
+	int err;
+
+	get_user(inst, (unsigned short*)regs.pc);
+
+	err = do_fpu_inst(inst, &regs);
+	if (!err) {
+		regs.pc += 2;
+		return;
+	}
+	/* not a FPU inst. */
+#endif
+
+#ifdef CONFIG_SH_DSP
+	/* Check if it's a DSP instruction */
+ 	if (is_dsp_inst(&regs)) {
+		/* Enable DSP mode, and restart instruction. */
+		regs.sr |= SR_DSP;
+		return;
+	}
+#endif
+
+	asm volatile("stc	r2_bank, %0": "=r" (error_code));
+	local_irq_enable();
+	tsk->thread.error_code = error_code;
+	tsk->thread.trap_no = TRAP_RESERVED_INST;
+	CHK_REMOTE_DEBUG(&regs);
+	force_sig(SIGILL, tsk);
+	die_if_no_fixup("reserved instruction", &regs, error_code);
+}
+
+#ifdef CONFIG_SH_FPU_EMU
+static int emulate_branch(unsigned short inst, struct pt_regs* regs)
+{
+	/*
+	 * bfs: 8fxx: PC+=d*2+4;
+	 * bts: 8dxx: PC+=d*2+4;
+	 * bra: axxx: PC+=D*2+4;
+	 * bsr: bxxx: PC+=D*2+4  after PR=PC+4;
+	 * braf:0x23: PC+=Rn*2+4;
+	 * bsrf:0x03: PC+=Rn*2+4 after PR=PC+4;
+	 * jmp: 4x2b: PC=Rn;
+	 * jsr: 4x0b: PC=Rn      after PR=PC+4;
+	 * rts: 000b: PC=PR;
+	 */
+	if ((inst & 0xfd00) == 0x8d00) {
+		regs->pc += SH_PC_8BIT_OFFSET(inst);
+		return 0;
+	}
+
+	if ((inst & 0xe000) == 0xa000) {
+		regs->pc += SH_PC_12BIT_OFFSET(inst);
+		return 0;
+	}
+
+	if ((inst & 0xf0df) == 0x0003) {
+		regs->pc += regs->regs[(inst & 0x0f00) >> 8] + 4;
+		return 0;
+	}
+
+	if ((inst & 0xf0df) == 0x400b) {
+		regs->pc = regs->regs[(inst & 0x0f00) >> 8];
+		return 0;
+	}
+
+	if ((inst & 0xffff) == 0x000b) {
+		regs->pc = regs->pr;
+		return 0;
+	}
+
+	return 1;
+}
+#endif
+
+asmlinkage void do_illegal_slot_inst(unsigned long r4, unsigned long r5,
+				unsigned long r6, unsigned long r7,
+				struct pt_regs regs)
+{
+	unsigned long error_code;
+	struct task_struct *tsk = current;
+#ifdef CONFIG_SH_FPU_EMU
+	unsigned short inst;
+
+	get_user(inst, (unsigned short *)regs.pc + 1);
+	if (!do_fpu_inst(inst, &regs)) {
+		get_user(inst, (unsigned short *)regs.pc);
+		if (!emulate_branch(inst, &regs))
+			return;
+		/* fault in branch.*/
+	}
+	/* not a FPU inst. */
+#endif
+
+	asm volatile("stc	r2_bank, %0": "=r" (error_code));
+	local_irq_enable();
+	tsk->thread.error_code = error_code;
+	tsk->thread.trap_no = TRAP_RESERVED_INST;
+	CHK_REMOTE_DEBUG(&regs);
+	force_sig(SIGILL, tsk);
+	die_if_no_fixup("illegal slot instruction", &regs, error_code);
+}
 
 asmlinkage void do_exception_error(unsigned long r4, unsigned long r5,
 				   unsigned long r6, unsigned long r7,
@@ -635,14 +719,16 @@
 	exception_handling_table[TRAP_ILLEGAL_SLOT_INST]
 		= (void *)do_illegal_slot_inst;
 
-#ifdef CONFIG_CPU_SH4
-	if (!(cpu_data->flags & CPU_HAS_FPU)) {
-		/* For SH-4 lacking an FPU, treat floating point instructions
-		   as reserved. */
-		/* entry 64 corresponds to EXPEVT=0x800 */
-		exception_handling_table[64] = (void *)do_reserved_inst;
-		exception_handling_table[65] = (void *)do_illegal_slot_inst;
-	}
+#if defined(CONFIG_CPU_SH4) && !defined(CONFIG_SH_FPU) || \
+    defined(CONFIG_SH_FPU_EMU)
+	/*
+	 * For SH-4 lacking an FPU, treat floating point instructions as
+	 * reserved. They'll be handled in the math-emu case, or faulted on
+	 * otherwise.
+	 */
+	/* entry 64 corresponds to EXPEVT=0x800 */
+	exception_handling_table[64] = (void *)do_reserved_inst;
+	exception_handling_table[65] = (void *)do_illegal_slot_inst;
 #endif
 		
 	/* Setup VBR for boot cpu */
diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/vmlinux.lds.S linux-2.6.17/arch/sh/kernel/vmlinux.lds.S
--- linux-2.6.17-vanilla/arch/sh/kernel/vmlinux.lds.S	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/kernel/vmlinux.lds.S	2006-07-12 16:54:22.000000000 +0000
@@ -63,8 +63,6 @@
 
   . = ALIGN(8192);		/* init_task */
   .data.init_task : { *(.data.init_task) }
-  /* stack */
-  .stack : { stack = .;  _stack = .; }
 
   . = ALIGN(4096);		/* Init code and data */
   __init_begin = .;
diff -ruN linux-2.6.17-vanilla/arch/sh/lib/CVS/Entries linux-2.6.17/arch/sh/lib/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/lib/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/lib/CVS/Entries	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1,13 @@
+/Makefile/1.9/Tue Jun 29 01:59:02 2004/-ko/
+/checksum.S/1.3/Fri Sep  2 23:02:18 2005/-ko/
+/delay.c/1.5/Mon Aug 29 21:01:18 2005/-ko/
+/div64-generic.c/1.2/Sat Sep  6 00:27:16 2003//
+/div64.S/1.2/Sat Jul 19 22:56:20 2003//
+/memchr.S/1.2/Wed Apr  7 20:18:39 2004/-ko/
+/memcpy-sh4.S/1.1/Tue Jun 29 01:59:02 2004/-ko/
+/memcpy.S/1.2/Wed Apr  7 20:18:39 2004/-ko/
+/memmove.S/1.4/Tue Apr 20 13:06:06 2004/-ko/
+/memset.S/1.3/Mon Jul 25 00:55:36 2005/-ko/
+/strlen.S/1.2/Wed Apr  7 20:18:39 2004/-ko/
+/udivdi3.c/1.2/Sat Jul 19 22:56:20 2003//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/lib/CVS/Repository linux-2.6.17/arch/sh/lib/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/lib/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/lib/CVS/Repository	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/lib
diff -ruN linux-2.6.17-vanilla/arch/sh/lib/CVS/Root linux-2.6.17/arch/sh/lib/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/lib/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/lib/CVS/Root	2006-07-12 16:54:22.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/lib/checksum.S linux-2.6.17/arch/sh/lib/checksum.S
--- linux-2.6.17-vanilla/arch/sh/lib/checksum.S	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/lib/checksum.S	2006-07-12 16:54:22.000000000 +0000
@@ -202,8 +202,9 @@
 	cmp/pz	r6		! Jump if we had at least two bytes.
 	bt/s	1f
 	 clrt
+	add	#2,r6		! r6 was < 2.	Deal with it.
 	bra	4f
-	 add	#2,r6		! r6 was < 2.	Deal with it.
+	 mov	r6,r2
 
 3:	! Handle different src and dest alignments.
 	! This is not common, so simple byte by byte copy will do.
diff -ruN linux-2.6.17-vanilla/arch/sh/lib/memcpy-sh4.S linux-2.6.17/arch/sh/lib/memcpy-sh4.S
--- linux-2.6.17-vanilla/arch/sh/lib/memcpy-sh4.S	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/lib/memcpy-sh4.S	2006-07-12 16:54:22.000000000 +0000
@@ -20,7 +20,7 @@
 	!
 	!	GHIJ KLMN OPQR -->  ...G HIJK LMNO PQR.
 	!
-
+	
 	! Size is 16 or greater, and may have trailing bytes
 
 	.balign	32
@@ -39,7 +39,7 @@
 	! 6 cycles, 4 bytes per iteration
 3:	mov.l	@(r0,r5),r1	!  21 LS (latency=2)	! NMLK
 	mov	r7, r3		!   5 MT (latency=0)	! RQPO
-
+	
 	cmp/hi	r2,r0		!  57 MT
 	shll16	r3		! 103 EX
 
@@ -48,7 +48,7 @@
 
 	shlr8	r6		! 106 EX		! xNML
 	mov	r1, r7		!   5 MT (latency=0)
-
+	
 	or	r6,r3		!  82 EX		! ONML
 	bt/s	3b		! 109 BR
 
@@ -81,7 +81,7 @@
 
 8:	cmp/hi	r2,r0		!  57 MT
 	mov.b	@(r0,r5),r1	!  20 LS (latency=2)
-
+	
 	bt/s	8b		! 109 BR
 
 	 mov.b	r1,@-r0		!  29 LS
@@ -89,11 +89,11 @@
 9:	rts
 	 nop
 
-
+	
 	!
 	!	GHIJ KLMN OPQR -->  .GHI JKLM NOPQ R...
 	!
-
+	
 	! Size is 16 or greater, and may have trailing bytes
 
 	.balign	32
@@ -112,7 +112,7 @@
 	! 6 cycles, 4 bytes per iteration
 3:	mov.l	@(r0,r5),r1	!  21 LS (latency=2)	! NMLK
 	mov	r7, r3		!   5 MT (latency=0)	! RQPO
-
+	
 	cmp/hi	r2,r0		!  57 MT
 	shll8	r3		! 102 EX		! QPOx
 
@@ -121,7 +121,7 @@
 
 	shlr8	r6		! 106 EX		! xxxN
 	mov	r1, r7		!   5 MT (latency=0)
-
+	
 	or	r6,r3		!  82 EX		! QPON
 	bt/s	3b		! 109 BR
 
@@ -149,14 +149,14 @@
 
 8:	cmp/hi	r2,r0		!  57 MT
 	mov.b	@(r0,r5),r1	!  20 LS (latency=2)
-
+	
 	bt/s	8b		! 109 BR
 
 	 mov.b	r1,@-r0		!  29 LS
 
 9:	rts
 	 nop
-
+	
 ENTRY(memcpy)
 
 	! Calculate the invariants which will be used in the remainder
@@ -168,7 +168,7 @@
 	!      r0   -->  [ ...  ]       r0+r5 --> [ ...  ]
 	!
 	!
-
+	
 	! Short circuit the common case of src, dst and len being 32 bit aligned
 	! and test for zero length move
 
@@ -201,7 +201,7 @@
 	!	36	82		49-50	66-70	80-85
 	! However the penalty for getting it 'wrong' is much higher for long word
 	! aligned data (and this is more common), so use a value of 16.
-
+	
 	cmp/gt	r6,r1		!  56 MT
 
 	add	#-1,r5		!  50 EX
@@ -212,7 +212,7 @@
 
 	mov.b	@(r0,r5),r1	!  20 LS (latency=2)
 	bf/s	4f		! 111 BR
-
+	
 	 add	#-1,r3		!  50 EX
 	tst	r6, r6		!  86 MT
 
@@ -247,7 +247,7 @@
 	bt/s	2f		! 111 BR
 	 and	r0,r3		!  78 EX
 
-	! 3 cycles, 1 byte per iteration
+	! 3 cycles, 1 byte per iteration	
 1:	dt	r3		!  67 EX
 	mov.b	@(r0,r5),r1	!  19 LS (latency=2)
 
@@ -257,10 +257,10 @@
 	 mov.b	r1,@-r0		!  28 LS
 
 2:	add	#1, r5		!  79 EX
-
+	
 	! Now select the appropriate bulk transfer code based on relative
 	! alignment of src and dst.
-
+	
 	mov	r0, r3		!   5 MT (latency=0)
 
 	mov	r5, r0		!   5 MT (latency=0)
@@ -270,7 +270,7 @@
 	 mov	#64, r7		!   6 EX
 
 	! bit 0 clear
-
+		
 	cmp/ge	r7, r6		!  55 MT
 
 	bt/s	2f		! 111 BR
@@ -289,7 +289,7 @@
 
 	bra	.Lcase2b
 	 nop
-
+	
 	! bit 0 set
 1:	tst	#2, r0		! 87 MT
 
@@ -298,7 +298,7 @@
 
 	bra	.Lcase3
 	 nop
-
+	
 
 	!
 	!	GHIJ KLMN OPQR -->  GHIJ KLMN OPQR
@@ -306,7 +306,7 @@
 
 	! src, dst and size are all long word aligned
 	! size is non-zero
-
+	
 	.balign	32
 .Lcase00:
 	mov	#64, r1		!   6 EX
@@ -319,7 +319,7 @@
 	shlr2	r6		! 105 EX
 
 	shlr	r6		! 104 EX
-	mov.l	@(r0, r5), r1	!  21 LS (latency=2)
+	mov.l	@(r0, r5), r1	!  21 LS (latency=2)	
 
 	bf/s	4f		! 111 BR
 	 add	#-8, r3		!  50 EX
@@ -343,7 +343,7 @@
 5:	rts
 	 nop
 
-
+	
 	! Size is 16 or greater and less than 64, but may have trailing bytes
 
 	.balign	32
@@ -351,7 +351,7 @@
 	add	#-4, r5		!  50 EX
 	mov	r4, r7		!   5 MT (latency=0)
 
-	mov.l	@(r0, r5), r1	!  21 LS (latency=2)
+	mov.l	@(r0, r5), r1	!  21 LS (latency=2)	
 	mov	#4, r2		!   6 EX
 
 	add	#11, r7		!  50 EX
@@ -377,7 +377,7 @@
 	! Copy the final 0-3 bytes
 
 	add	#3,r5		!  50 EX
-
+	
 	cmp/eq	r0, r4		!  54 MT
 	add	#-10, r7	!  50 EX
 
@@ -386,7 +386,7 @@
 	! 3 cycles, 1 byte per iteration
 1:	mov.b	@(r0,r5),r1	!  19 LS
 	cmp/hi	r7,r0		!  57 MT
-
+	
 	bt/s	1b		! 111 BR
 	 mov.b	r1,@-r0		!  28 LS
 
@@ -427,10 +427,10 @@
 	 add	#8, r3		!  50 EX
 
 	tst	#0x18, r0	!  87 MT
-
+	
 	bt/s	1f		! 109 BR
 	 mov.l	r1,@-r0		!  30 LS
-
+	
 	! 4 cycles, 2 long words per iteration
 3:	mov.l	@(r0, r5), r1	!  21 LS (latency=2)
 
@@ -450,7 +450,7 @@
 	! We could do this with the four scratch registers, but if src
 	! and dest hit the same cache line, this will thrash, so make
 	! use of additional registers.
-	!
+	! 
 	! We also need r0 as a temporary (for movca), so 'undo' the invariant:
 	!   r5:	 src (was r0+r5)
 	!   r1:	 dest (was r0)
@@ -459,14 +459,14 @@
 	!
 1:	mov.l	r8, @-r15	!  30 LS
 	add	r0, r5		!  49 EX
-
+	
 	mov.l	r9, @-r15	!  30 LS
 	mov	r0, r1		!   5 MT (latency=0)
-
+	
 	mov.l	r10, @-r15	!  30 LS
 	add	#-0x1c, r5	!  50 EX
-
-	mov.l	r11, @-r15	!  30 LS
+	
+	mov.l	r11, @-r15	!  30 LS			
 
 	! 16 cycles, 32 bytes per iteration
 2:	mov.l	@(0x00,r5),r0	! 18 LS (latency=2)
@@ -510,10 +510,10 @@
 	sub	r4, r1		!  75 EX		(len remaining)
 
 	! number of trailing bytes is non-zero
-	!
+	!	
 	! invariants restored (r5 already decremented by 4)
 	! also r1=num bytes remaining
-
+	
 	mov	#4, r2		!   6 EX
 	mov	r4, r7		!   5 MT (latency=0)
 
@@ -523,7 +523,7 @@
 	bf/s	5f		! 108 BR
 	 add	 #11, r7	!  50 EX
 
-	mov.l	@(r0, r5), r6	!  21 LS (latency=2)
+	mov.l	@(r0, r5), r6	!  21 LS (latency=2)	
 	tst	r2, r1		!  86 MT
 
 	mov	r5, r3		!   5 MT (latency=0)
@@ -553,11 +553,11 @@
 
 	bt	9f		! 110 BR
 	add	#3,r5		!  50 EX
-
+	
 	! 3 cycles, 1 byte per iteration
 1:	mov.b	@(r0,r5),r1	!  19 LS
 	cmp/hi	r7,r0		!  57 MT
-
+	
 	bt/s	1b		! 111 BR
 	 mov.b	r1,@-r0		!  28 LS
 
@@ -567,7 +567,7 @@
 	!
 	!	GHIJ KLMN OPQR -->  ..GH IJKL MNOP QR..
 	!
-
+		
 	.balign	32
 .Lcase2:
 	! Size is 16 or greater and less then 64, but may have trailing bytes
@@ -608,21 +608,21 @@
 
 	cmp/eq	r3, r0		!  54 MT
 	add	#0x1f, r2	!  50 EX
-
+	
 	add	#-2, r5		!  50 EX
 	bt/s	1f		! 110 BR
 	 and	r1, r2		!  78 EX
-
+	
 	! Copy a short word one at a time until we are cache line aligned
 	!   Normal values: r0, r2, r3, r4
 	!   Unused: r1, r6, r7
 	!   Mod: r5 (=r5-2)
 	!
 	add	#2, r3		!  50 EX
-
+	
 2:	mov.w	@(r0,r5),r1	!  20 LS (latency=2)
 	cmp/eq	r3,r0		!  54 MT
-
+		
 	bf/s	2b		! 111 BR
 
 	 mov.w	r1,@-r0		!  29 LS
@@ -635,7 +635,7 @@
 	! We could do this with the four scratch registers, but if src
 	! and dest hit the same cache line, this will thrash, so make
 	! use of additional registers.
-	!
+	! 
 	! We also need r0 as a temporary (for movca), so 'undo' the invariant:
 	!   r5:	 src (was r0+r5)
 	!   r1:	 dest (was r0)
@@ -644,16 +644,16 @@
 	!
 1:	mov.l	r8, @-r15	!  30 LS
 	add	r0, r5		!  49 EX
-
+	
 	mov.l	r9, @-r15	!  30 LS
 	mov	r0, r1		!   5 MT (latency=0)
-
+	
 	mov.l	r10, @-r15	!  30 LS
 	add	#-0x1e, r5	!  50 EX
-
-	mov.l	r11, @-r15	!  30 LS
-
-	mov.l	r12, @-r15	!  30 LS
+	
+	mov.l	r11, @-r15	!  30 LS			
+	
+	mov.l	r12, @-r15	!  30 LS			
 
 	! 17 cycles, 32 bytes per iteration
 #ifdef CONFIG_CPU_LITTLE_ENDIAN
@@ -690,7 +690,7 @@
 	xtrct	r12, r11	!  48 EX
 
 	mov.l	r6, @(0x08,r1)	!  33 LS
-
+	
 	mov.l	r7, @(0x0c,r1)	!  33 LS
 
 	mov.l	r8, @(0x10,r1)	!  33 LS
@@ -739,7 +739,7 @@
 
 	mov.l	r6, @(0x18,r1)	!  33 LS
 	xtrct	r12, r11	!  48 EX
-
+	
 	mov.l	r7, @(0x14,r1)	!  33 LS
 
 	mov.l	r8, @(0x10,r1)	!  33 LS
@@ -770,7 +770,7 @@
 1:	 mov.l	@r15+, r8	!  15 LS
 
 	add	#0x1e, r5	!  50 EX
-
+	
 	! Finish off a short word at a time
 	! r5 must be invariant - 2
 10:	mov	r4,r2		!   5 MT (latency=0)
@@ -780,7 +780,7 @@
 	bf/s	1f		! 109 BR
 
 	 add	#2, r2		!  50 EX
-
+	
 3:	mov.w	@(r0,r5),r1	!  20 LS
 	cmp/hi	r2,r0		!  57 MT
 
@@ -788,7 +788,7 @@
 
 	 mov.w	r1,@-r0		!  29 LS
 1:
-
+		
 	!
 	! Finally, copy the last byte if necessary
 	cmp/eq	r4,r0		!  54 MT
diff -ruN linux-2.6.17-vanilla/arch/sh/lib/memmove.S linux-2.6.17/arch/sh/lib/memmove.S
--- linux-2.6.17-vanilla/arch/sh/lib/memmove.S	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/lib/memmove.S	2006-07-12 16:54:22.000000000 +0000
@@ -1,4 +1,4 @@
-/* $Id: memmove.S,v 1.2 2001/07/27 11:51:09 gniibe Exp $
+/* $Id: memmove.S,v 1.3 2003/05/04 19:29:54 lethal Exp $
  *
  * "memmove" implementation of SuperH
  *
diff -ruN linux-2.6.17-vanilla/arch/sh/lib/memset.S linux-2.6.17/arch/sh/lib/memset.S
--- linux-2.6.17-vanilla/arch/sh/lib/memset.S	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/lib/memset.S	2006-07-12 16:54:23.000000000 +0000
@@ -29,6 +29,7 @@
 	bf/s	1b
 	 mov.b	r5,@-r4
 2:				! make VVVV
+	extu.b	r5,r5
 	swap.b	r5,r0		!   V0
 	or	r0,r5		!   VV
 	swap.w	r5,r0		! VV00
diff -ruN linux-2.6.17-vanilla/arch/sh/math-emu/CVS/Entries linux-2.6.17/arch/sh/math-emu/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/math-emu/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/math-emu/CVS/Entries	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,4 @@
+/Makefile/1.1/Wed Jul 12 10:35:55 2006/-ko/
+/math.c/1.1/Wed Jul 12 10:35:55 2006/-ko/
+/sfp-util.h/1.1/Wed Jul 12 10:35:55 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/math-emu/CVS/Repository linux-2.6.17/arch/sh/math-emu/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/math-emu/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/math-emu/CVS/Repository	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/math-emu
diff -ruN linux-2.6.17-vanilla/arch/sh/math-emu/CVS/Root linux-2.6.17/arch/sh/math-emu/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/math-emu/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/math-emu/CVS/Root	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/math-emu/Makefile linux-2.6.17/arch/sh/math-emu/Makefile
--- linux-2.6.17-vanilla/arch/sh/math-emu/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/math-emu/Makefile	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+obj-y	:= math.o
diff -ruN linux-2.6.17-vanilla/arch/sh/math-emu/math.c linux-2.6.17/arch/sh/math-emu/math.c
--- linux-2.6.17-vanilla/arch/sh/math-emu/math.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/math-emu/math.c	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,624 @@
+/*
+ * arch/sh/math-emu/math.c
+ *
+ * Copyright (C) 2006 Takashi YOSHII <takasi-y@ops.dti.ne.jp>
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/config.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/types.h>
+#include <linux/sched.h>
+#include <linux/signal.h>
+
+#include <asm/system.h>
+#include <asm/uaccess.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+
+#include "sfp-util.h"
+#include <math-emu/soft-fp.h>
+#include <math-emu/single.h>
+#include <math-emu/double.h>
+
+#define	FPUL		(fregs->fpul)
+#define FPSCR		(fregs->fpscr)
+#define FPSCR_RM	(FPSCR&3)
+#define FPSCR_DN	((FPSCR>>18)&1)
+#define FPSCR_PR	((FPSCR>>19)&1)
+#define FPSCR_SZ	((FPSCR>>20)&1)
+#define FPSCR_FR	((FPSCR>>21)&1)
+#define FPSCR_MASK	0x003fffffUL
+
+#define BANK(n)	(n^(FPSCR_FR?16:0))
+#define FR	((unsigned long*)(fregs->fp_regs))
+#define FR0	(FR[BANK(0)])
+#define FRn	(FR[BANK(n)])
+#define FRm	(FR[BANK(m)])
+#define DR	((unsigned long long*)(fregs->fp_regs))
+#define DRn	(DR[BANK(n)/2])
+#define DRm	(DR[BANK(m)/2])
+
+#define XREG(n)	(n^16)
+#define XFn	(FR[BANK(XREG(n))])
+#define XFm	(FR[BANK(XREG(m))])
+#define XDn	(DR[BANK(XREG(n))/2])
+#define XDm	(DR[BANK(XREG(m))/2])
+
+#define R0	(regs->regs[0])
+#define Rn	(regs->regs[n])
+#define Rm	(regs->regs[m])
+
+#define WRITE(d,a)	({if(put_user(d, (typeof (d)*)a)) return -EFAULT;})
+#define READ(d,a)	({if(get_user(d, (typeof (d)*)a)) return -EFAULT;})
+
+#define PACK_S(r,f)	FP_PACK_SP(&r,f)
+#define UNPACK_S(f,r)	FP_UNPACK_SP(f,&r)
+#define PACK_D(r,f) \
+	{u32 t[2]; FP_PACK_DP(t,f); ((u32*)&r)[0]=t[1]; ((u32*)&r)[1]=t[0];}
+#define UNPACK_D(f,r) \
+	{u32 t[2]; t[0]=((u32*)&r)[1]; t[1]=((u32*)&r)[0]; FP_UNPACK_DP(f,t);}
+
+// 2 args instructions.
+#define BOTH_PRmn(op,x) \
+	FP_DECL_EX; if(FPSCR_PR) op(D,x,DRm,DRn); else op(S,x,FRm,FRn);
+
+#define CMP_X(SZ,R,M,N) do{ \
+	FP_DECL_##SZ(Fm); FP_DECL_##SZ(Fn); \
+	UNPACK_##SZ(Fm, M); UNPACK_##SZ(Fn, N); \
+	FP_CMP_##SZ(R, Fn, Fm, 2); }while(0)
+#define EQ_X(SZ,R,M,N) do{ \
+	FP_DECL_##SZ(Fm); FP_DECL_##SZ(Fn); \
+	UNPACK_##SZ(Fm, M); UNPACK_##SZ(Fn, N); \
+	FP_CMP_EQ_##SZ(R, Fn, Fm); }while(0)
+#define CMP(OP) ({ int r; BOTH_PRmn(OP##_X,r); r; })
+
+static int
+fcmp_gt(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n)
+{
+	if (CMP(CMP) > 0)
+		regs->sr |= 1;
+	else
+		regs->sr &= ~1;
+
+	return 0;
+}
+
+static int
+fcmp_eq(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n)
+{
+	if (CMP(CMP /*EQ*/) == 0)
+		regs->sr |= 1;
+	else
+		regs->sr &= ~1;
+	return 0;
+}
+
+#define ARITH_X(SZ,OP,M,N) do{ \
+	FP_DECL_##SZ(Fm); FP_DECL_##SZ(Fn); FP_DECL_##SZ(Fr); \
+	UNPACK_##SZ(Fm, M); UNPACK_##SZ(Fn, N); \
+	FP_##OP##_##SZ(Fr, Fn, Fm); \
+	PACK_##SZ(N, Fr); }while(0)
+
+static int
+fadd(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n)
+{
+	BOTH_PRmn(ARITH_X, ADD);
+	return 0;
+}
+
+static int
+fsub(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n)
+{
+	BOTH_PRmn(ARITH_X, SUB);
+	return 0;
+}
+
+static int
+fmul(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n)
+{
+	BOTH_PRmn(ARITH_X, MUL);
+	return 0;
+}
+
+static int
+fdiv(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n)
+{
+	BOTH_PRmn(ARITH_X, DIV);
+	return 0;
+}
+
+static int
+fmac(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n)
+{
+	FP_DECL_EX;
+	FP_DECL_S(Fr);
+	FP_DECL_S(Ft);
+	FP_DECL_S(F0);
+	FP_DECL_S(Fm);
+	FP_DECL_S(Fn);
+	UNPACK_S(F0, FR0);
+	UNPACK_S(Fm, FRm);
+	UNPACK_S(Fn, FRn);
+	FP_MUL_S(Ft, Fm, F0);
+	FP_ADD_S(Fr, Fn, Ft);
+	PACK_S(FRn, Fr);
+	return 0;
+}
+
+// to process fmov's extention (odd n for DR access XD).
+#define FMOV_EXT(x) if(x&1) x+=16-1
+
+static int
+fmov_idx_reg(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m,
+	     int n)
+{
+	if (FPSCR_SZ) {
+		FMOV_EXT(n);
+		READ(FRn, Rm + R0 + 4);
+		n++;
+		READ(FRn, Rm + R0);
+	} else {
+		READ(FRn, Rm + R0);
+	}
+
+	return 0;
+}
+
+static int
+fmov_mem_reg(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m,
+	     int n)
+{
+	if (FPSCR_SZ) {
+		FMOV_EXT(n);
+		READ(FRn, Rm + 4);
+		n++;
+		READ(FRn, Rm);
+	} else {
+		READ(FRn, Rm);
+	}
+
+	return 0;
+}
+
+static int
+fmov_inc_reg(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m,
+	     int n)
+{
+	if (FPSCR_SZ) {
+		FMOV_EXT(n);
+		READ(FRn, Rm + 4);
+		n++;
+		READ(FRn, Rm);
+		Rm += 8;
+	} else {
+		READ(FRn, Rm);
+		Rm += 4;
+	}
+
+	return 0;
+}
+
+static int
+fmov_reg_idx(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m,
+	     int n)
+{
+	if (FPSCR_SZ) {
+		FMOV_EXT(m);
+		WRITE(FRm, Rn + R0 + 4);
+		m++;
+		WRITE(FRm, Rn + R0);
+	} else {
+		WRITE(FRm, Rn + R0);
+	}
+
+	return 0;
+}
+
+static int
+fmov_reg_mem(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m,
+	     int n)
+{
+	if (FPSCR_SZ) {
+		FMOV_EXT(m);
+		WRITE(FRm, Rn + 4);
+		m++;
+		WRITE(FRm, Rn);
+	} else {
+		WRITE(FRm, Rn);
+	}
+
+	return 0;
+}
+
+static int
+fmov_reg_dec(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m,
+	     int n)
+{
+	if (FPSCR_SZ) {
+		FMOV_EXT(m);
+		Rn -= 8;
+		WRITE(FRm, Rn + 4);
+		m++;
+		WRITE(FRm, Rn);
+	} else {
+		Rn -= 4;
+		WRITE(FRm, Rn);
+	}
+
+	return 0;
+}
+
+static int
+fmov_reg_reg(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m,
+	     int n)
+{
+	if (FPSCR_SZ) {
+		FMOV_EXT(m);
+		FMOV_EXT(n);
+		DRn = DRm;
+	} else {
+		FRn = FRm;
+	}
+
+	return 0;
+}
+
+static int
+fnop_mn(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n)
+{
+	return -EINVAL;
+}
+
+// 1 arg instructions.
+#define NOTYETn(i) static int i(struct sh_fpu_soft_struct *fregs, int n) \
+	{ printk( #i " not yet done.\n"); return 0; }
+
+NOTYETn(ftrv)
+NOTYETn(fsqrt)
+NOTYETn(fipr)
+NOTYETn(fsca)
+NOTYETn(fsrra)
+
+#define EMU_FLOAT_X(SZ,N) do { \
+	FP_DECL_##SZ(Fn); \
+	FP_FROM_INT_##SZ(Fn, FPUL, 32, int); \
+	PACK_##SZ(N, Fn); }while(0)
+static int ffloat(struct sh_fpu_soft_struct *fregs, int n)
+{
+	FP_DECL_EX;
+
+	if (FPSCR_PR)
+		EMU_FLOAT_X(D, DRn);
+	else
+		EMU_FLOAT_X(S, FRn);
+
+	return 0;
+}
+
+#define EMU_FTRC_X(SZ,N) do { \
+	FP_DECL_##SZ(Fn); \
+	UNPACK_##SZ(Fn, N); \
+	FP_TO_INT_##SZ(FPUL, Fn, 32, 1); }while(0)
+static int ftrc(struct sh_fpu_soft_struct *fregs, int n)
+{
+	FP_DECL_EX;
+
+	if (FPSCR_PR)
+		EMU_FTRC_X(D, DRn);
+	else
+		EMU_FTRC_X(S, FRn);
+
+	return 0;
+}
+
+static int fcnvsd(struct sh_fpu_soft_struct *fregs, int n)
+{
+	FP_DECL_EX;
+	FP_DECL_S(Fn);
+	FP_DECL_D(Fr);
+	UNPACK_S(Fn, FPUL);
+	FP_CONV(D, S, 2, 1, Fr, Fn);
+	PACK_D(DRn, Fr);
+	return 0;
+}
+
+static int fcnvds(struct sh_fpu_soft_struct *fregs, int n)
+{
+	FP_DECL_EX;
+	FP_DECL_D(Fn);
+	FP_DECL_S(Fr);
+	UNPACK_D(Fn, DRn);
+	FP_CONV(S, D, 1, 2, Fr, Fn);
+	PACK_S(FPUL, Fr);
+	return 0;
+}
+
+static int fxchg(struct sh_fpu_soft_struct *fregs, int flag)
+{
+	FPSCR ^= flag;
+	return 0;
+}
+
+static int fsts(struct sh_fpu_soft_struct *fregs, int n)
+{
+	FRn = FPUL;
+	return 0;
+}
+
+static int flds(struct sh_fpu_soft_struct *fregs, int n)
+{
+	FPUL = FRn;
+	return 0;
+}
+
+static int fneg(struct sh_fpu_soft_struct *fregs, int n)
+{
+	FRn ^= (1 << (_FP_W_TYPE_SIZE - 1));
+	return 0;
+}
+
+static int fabs(struct sh_fpu_soft_struct *fregs, int n)
+{
+	FRn &= ~(1 << (_FP_W_TYPE_SIZE - 1));
+	return 0;
+}
+
+static int fld0(struct sh_fpu_soft_struct *fregs, int n)
+{
+	FRn = 0;
+	return 0;
+}
+
+static int fld1(struct sh_fpu_soft_struct *fregs, int n)
+{
+	FRn = (_FP_EXPBIAS_S << (_FP_FRACBITS_S - 1));
+	return 0;
+}
+
+static int fnop_n(struct sh_fpu_soft_struct *fregs, int n)
+{
+	return -EINVAL;
+}
+
+/// Instruction decoders.
+
+static int id_fxfd(struct sh_fpu_soft_struct *, int);
+static int id_fnxd(struct sh_fpu_soft_struct *, struct pt_regs *, int, int);
+
+static int (*fnxd[])(struct sh_fpu_soft_struct *, int) = {
+	fsts, flds, ffloat, ftrc, fneg, fabs, fsqrt, fsrra,
+	fld0, fld1, fcnvsd, fcnvds, fnop_n, fnop_n, fipr, id_fxfd
+};
+
+static int (*fnmx[])(struct sh_fpu_soft_struct *, struct pt_regs *, int, int) = {
+	fadd, fsub, fmul, fdiv, fcmp_eq, fcmp_gt, fmov_idx_reg, fmov_reg_idx,
+	fmov_mem_reg, fmov_inc_reg, fmov_reg_mem, fmov_reg_dec,
+	fmov_reg_reg, id_fnxd, fmac, fnop_mn};
+
+static int id_fxfd(struct sh_fpu_soft_struct *fregs, int x)
+{
+	const int flag[] = { FPSCR_SZ, FPSCR_PR, FPSCR_FR, 0 };
+	switch (x & 3) {
+	case 3:
+		fxchg(fregs, flag[x >> 2]);
+		break;
+	case 1:
+		ftrv(fregs, x - 1);
+		break;
+	default:
+		fsca(fregs, x);
+	}
+	return 0;
+}
+
+static int
+id_fnxd(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int x, int n)
+{
+	return (fnxd[x])(fregs, n);
+}
+
+static int
+id_fnmx(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, u16 code)
+{
+	int n = (code >> 8) & 0xf, m = (code >> 4) & 0xf, x = code & 0xf;
+	return (fnmx[x])(fregs, regs, m, n);
+}
+
+static int
+id_sys(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, u16 code)
+{
+	int n = ((code >> 8) & 0xf);
+	unsigned long *reg = (code & 0x0010) ? &FPUL : &FPSCR;
+
+	switch (code & 0xf0ff) {
+	case 0x005a:
+	case 0x006a:
+		Rn = *reg;
+		break;
+	case 0x405a:
+	case 0x406a:
+		*reg = Rn;
+		break;
+	case 0x4052:
+	case 0x4062:
+		Rn -= 4;
+		WRITE(*reg, Rn);
+		break;
+	case 0x4056:
+	case 0x4066:
+		READ(*reg, Rn);
+		Rn += 4;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int fpu_emulate(u16 code, struct sh_fpu_soft_struct *fregs, struct pt_regs *regs)
+{
+	if ((code & 0xf000) == 0xf000)
+		return id_fnmx(fregs, regs, code);
+	else
+		return id_sys(fregs, regs, code);
+}
+
+/**
+ *	denormal_to_double - Given denormalized float number,
+ *	                     store double float
+ *
+ *	@fpu: Pointer to sh_fpu_hard structure
+ *	@n: Index to FP register
+ */
+static void denormal_to_double(struct sh_fpu_hard_struct *fpu, int n)
+{
+	unsigned long du, dl;
+	unsigned long x = fpu->fpul;
+	int exp = 1023 - 126;
+
+	if (x != 0 && (x & 0x7f800000) == 0) {
+		du = (x & 0x80000000);
+		while ((x & 0x00800000) == 0) {
+			x <<= 1;
+			exp--;
+		}
+		x &= 0x007fffff;
+		du |= (exp << 20) | (x >> 3);
+		dl = x << 29;
+
+		fpu->fp_regs[n] = du;
+		fpu->fp_regs[n+1] = dl;
+	}
+}
+
+/**
+ *	ieee_fpe_handler - Handle denormalized number exception
+ *
+ *	@regs: Pointer to register structure
+ *
+ *	Returns 1 when it's handled (should not cause exception).
+ */
+static int ieee_fpe_handler(struct pt_regs *regs)
+{
+	unsigned short insn = *(unsigned short *)regs->pc;
+	unsigned short finsn;
+	unsigned long nextpc;
+	int nib[4] = {
+		(insn >> 12) & 0xf,
+		(insn >> 8) & 0xf,
+		(insn >> 4) & 0xf,
+		insn & 0xf};
+
+	if (nib[0] == 0xb ||
+	    (nib[0] == 0x4 && nib[2] == 0x0 && nib[3] == 0xb)) /* bsr & jsr */
+		regs->pr = regs->pc + 4;
+  
+	if (nib[0] == 0xa || nib[0] == 0xb) { /* bra & bsr */
+		nextpc = regs->pc + 4 + ((short) ((insn & 0xfff) << 4) >> 3);
+		finsn = *(unsigned short *) (regs->pc + 2);
+	} else if (nib[0] == 0x8 && nib[1] == 0xd) { /* bt/s */
+		if (regs->sr & 1)
+			nextpc = regs->pc + 4 + ((char) (insn & 0xff) << 1);
+		else
+			nextpc = regs->pc + 4;
+		finsn = *(unsigned short *) (regs->pc + 2);
+	} else if (nib[0] == 0x8 && nib[1] == 0xf) { /* bf/s */
+		if (regs->sr & 1)
+			nextpc = regs->pc + 4;
+		else
+			nextpc = regs->pc + 4 + ((char) (insn & 0xff) << 1);
+		finsn = *(unsigned short *) (regs->pc + 2);
+	} else if (nib[0] == 0x4 && nib[3] == 0xb &&
+		 (nib[2] == 0x0 || nib[2] == 0x2)) { /* jmp & jsr */
+		nextpc = regs->regs[nib[1]];
+		finsn = *(unsigned short *) (regs->pc + 2);
+	} else if (nib[0] == 0x0 && nib[3] == 0x3 &&
+		 (nib[2] == 0x0 || nib[2] == 0x2)) { /* braf & bsrf */
+		nextpc = regs->pc + 4 + regs->regs[nib[1]];
+		finsn = *(unsigned short *) (regs->pc + 2);
+	} else if (insn == 0x000b) { /* rts */
+		nextpc = regs->pr;
+		finsn = *(unsigned short *) (regs->pc + 2);
+	} else {
+		nextpc = regs->pc + 2;
+		finsn = insn;
+	}
+
+	if ((finsn & 0xf1ff) == 0xf0ad) { /* fcnvsd */
+		struct task_struct *tsk = current;
+
+		if ((tsk->thread.fpu.hard.fpscr & (1 << 17))) {
+			/* FPU error */
+			denormal_to_double (&tsk->thread.fpu.hard,
+					    (finsn >> 8) & 0xf);
+			tsk->thread.fpu.hard.fpscr &=
+				~(FPSCR_CAUSE_MASK | FPSCR_FLAG_MASK);
+			set_tsk_thread_flag(tsk, TIF_USEDFPU);
+		} else {
+			tsk->thread.trap_no = 11;
+			tsk->thread.error_code = 0;
+			force_sig(SIGFPE, tsk);
+		}
+
+		regs->pc = nextpc;
+		return 1;
+	}
+
+	return 0;
+}
+
+asmlinkage void do_fpu_error(unsigned long r4, unsigned long r5,
+			     unsigned long r6, unsigned long r7,
+			     struct pt_regs regs)
+{
+	struct task_struct *tsk = current;
+
+	if (ieee_fpe_handler (&regs))
+		return;
+
+	regs.pc += 2;
+	tsk->thread.trap_no = 11;
+	tsk->thread.error_code = 0;
+	force_sig(SIGFPE, tsk);
+}
+
+/**
+ * fpu_init - Initialize FPU registers
+ * @fpu: Pointer to software emulated FPU registers.
+ */
+static void fpu_init(struct sh_fpu_soft_struct *fpu)
+{
+	int i;
+
+	fpu->fpscr = FPSCR_INIT;
+	fpu->fpul = 0;
+
+	for (i = 0; i < 16; i++) {
+		fpu->fp_regs[i] = 0;
+		fpu->xfp_regs[i]= 0;
+	}
+}
+
+/**
+ * do_fpu_inst - Handle reserved instructions for FPU emulation
+ * @inst: instruction code.
+ * @regs: registers on stack.
+ */
+int do_fpu_inst(unsigned short inst, struct pt_regs *regs)
+{
+	struct task_struct *tsk = current;
+	struct sh_fpu_soft_struct *fpu = &(tsk->thread.fpu.soft);
+
+	if (!test_tsk_thread_flag(tsk, TIF_USEDFPU)) {
+		/* initialize once. */
+		fpu_init(fpu);
+		set_tsk_thread_flag(tsk, TIF_USEDFPU);
+	}
+
+	return fpu_emulate(inst, fpu, regs);
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/math-emu/sfp-util.h linux-2.6.17/arch/sh/math-emu/sfp-util.h
--- linux-2.6.17-vanilla/arch/sh/math-emu/sfp-util.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/math-emu/sfp-util.h	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,72 @@
+/*
+ * These are copied from glibc/stdlib/longlong.h
+ */
+
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  do {                                                                  \
+    UWtype __x;                                                         \
+    __x = (al) + (bl);                                                  \
+    (sh) = (ah) + (bh) + (__x < (al));                                  \
+    (sl) = __x;                                                         \
+  } while (0)
+
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  do {                                                                  \
+    UWtype __x;                                                         \
+    __x = (al) - (bl);                                                  \
+    (sh) = (ah) - (bh) - (__x > (al));                                  \
+    (sl) = __x;                                                         \
+  } while (0)
+
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("dmulu.l %2,%3\n\tsts    macl,%1\n\tsts  mach,%0"	\
+	: "=r" ((u32)(w1)), "=r" ((u32)(w0))	\
+	:  "r" ((u32)(u)),   "r" ((u32)(v))	\
+	: "macl", "mach")
+
+#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2))
+#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1))
+#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2))
+
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  do {									\
+    UWtype __d1, __d0, __q1, __q0;					\
+    UWtype __r1, __r0, __m;						\
+    __d1 = __ll_highpart (d);						\
+    __d0 = __ll_lowpart (d);						\
+									\
+    __r1 = (n1) % __d1;							\
+    __q1 = (n1) / __d1;							\
+    __m = (UWtype) __q1 * __d0;						\
+    __r1 = __r1 * __ll_B | __ll_highpart (n0);				\
+    if (__r1 < __m)							\
+      {									\
+	__q1--, __r1 += (d);						\
+	if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
+	  if (__r1 < __m)						\
+	    __q1--, __r1 += (d);					\
+      }									\
+    __r1 -= __m;							\
+									\
+    __r0 = __r1 % __d1;							\
+    __q0 = __r1 / __d1;							\
+    __m = (UWtype) __q0 * __d0;						\
+    __r0 = __r0 * __ll_B | __ll_lowpart (n0);				\
+    if (__r0 < __m)							\
+      {									\
+	__q0--, __r0 += (d);						\
+	if (__r0 >= (d))						\
+	  if (__r0 < __m)						\
+	    __q0--, __r0 += (d);					\
+      }									\
+    __r0 -= __m;							\
+									\
+    (q) = (UWtype) __q1 * __ll_B | __q0;				\
+    (r) = __r0;								\
+  } while (0)
+
+#define abort()	return 0
+
+#define __BYTE_ORDER __LITTLE_ENDIAN
+
+
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/CVS/Entries linux-2.6.17/arch/sh/mm/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/mm/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/CVS/Entries	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,25 @@
+/Kconfig/1.10/Sun Jan  8 12:22:58 2006/-ko/
+/Makefile/1.14/Wed Jan  4 14:49:04 2006//
+/cache-sh2.c/1.5/Thu Jul  8 13:52:22 2004/-ko/
+/cache-sh3.c/1.11/Thu Jul  8 13:52:22 2004/-ko/
+/cache-sh4.c/1.38/Thu Oct 20 22:48:04 2005/-ko/
+/cache-sh7705.c/1.2/Tue Jun 21 04:15:48 2005/-ko/
+/clear_page.S/1.14/Sat Jul  2 13:00:24 2005/-ko/
+/copy_page.S/1.8/Mon Aug 25 17:03:10 2003//
+/extable.c/1.5/Tue Jun 15 18:40:43 2004/-ko/
+/fault-nommu.c/1.3/Mon Oct 25 10:41:02 2004/-ko/
+/fault.c/1.21/Mon Mar 27 21:06:14 2006/-ko/
+/ioremap.c/1.16/Wed Feb  8 13:21:41 2006/-ko/
+/pg-dma.c/1.4/Sat Mar  6 22:26:37 2004//
+/pg-nommu.c/1.1/Sat Oct 25 21:45:29 2003//
+/pg-sh4.c/1.5/Thu Sep  1 18:59:11 2005/-ko/
+/pg-sh7705.c/1.2/Tue Jun 21 04:15:48 2005/-ko/
+/pmb.c/1.2/Tue Jan  3 22:51:47 2006/-ko/
+/tlb-flush.c/1.1/Sat Dec 31 11:30:47 2005/-ko/
+/tlb-nommu.c/1.2/Sun May  4 19:29:55 2003/-ko/
+/tlb-sh3.c/1.7/Sat Aug 13 14:30:27 2005/-ko/
+/tlb-sh4.c/1.7/Sat Oct  8 22:08:39 2005/-ko/
+/consistent.c/1.10/Wed Jul  5 14:50:50 2006//
+/hugetlbpage.c/1.12/Wed Jul  5 14:50:50 2006/-ko/
+/init.c/1.28/Wed Jul  5 14:50:50 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/CVS/Repository linux-2.6.17/arch/sh/mm/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/mm/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/CVS/Repository	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/mm
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/CVS/Root linux-2.6.17/arch/sh/mm/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/mm/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/CVS/Root	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/Kconfig linux-2.6.17/arch/sh/mm/Kconfig
--- linux-2.6.17-vanilla/arch/sh/mm/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/Kconfig	2006-07-12 16:54:23.000000000 +0000
@@ -20,7 +20,6 @@
 config CPU_SH4A
 	bool
 	select CPU_SH4
-	select CPU_HAS_INTC2_IRQ
 
 config CPU_SUBTYPE_ST40
 	bool
@@ -144,6 +143,7 @@
 config CPU_SUBTYPE_SH7780
 	bool "Support SH7780 processor"
 	select CPU_SH4A
+	select CPU_HAS_INTC2_IRQ
 
 endmenu
 
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/Makefile linux-2.6.17/arch/sh/mm/Makefile
--- linux-2.6.17-vanilla/arch/sh/mm/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/Makefile	2006-07-12 16:54:23.000000000 +0000
@@ -12,14 +12,16 @@
 obj-$(CONFIG_HUGETLB_PAGE)	+= hugetlbpage.o
 
 mmu-y			:= fault-nommu.o tlb-nommu.o pg-nommu.o
-mmu-$(CONFIG_MMU)	:= fault.o clear_page.o copy_page.o
+mmu-$(CONFIG_MMU)	:= fault.o clear_page.o copy_page.o tlb-flush.o	\
+			   ioremap.o
 
 obj-y			+= $(mmu-y)
 
 ifdef CONFIG_MMU
-obj-$(CONFIG_CPU_SH3)	+= tlb-sh3.o
-obj-$(CONFIG_CPU_SH4)	+= tlb-sh4.o ioremap.o
+obj-$(CONFIG_CPU_SH3)		+= tlb-sh3.o
+obj-$(CONFIG_CPU_SH4)		+= tlb-sh4.o
 obj-$(CONFIG_SH7705_CACHE_32KB) += pg-sh7705.o
 endif
 
-obj-$(CONFIG_SH7705_CACHE_32KB) += cache-sh7705.o
+obj-$(CONFIG_SH7705_CACHE_32KB)	+= cache-sh7705.o
+obj-$(CONFIG_32BIT)		+= pmb.o
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/cache-sh4.c linux-2.6.17/arch/sh/mm/cache-sh4.c
--- linux-2.6.17-vanilla/arch/sh/mm/cache-sh4.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/cache-sh4.c	2006-07-12 16:54:23.000000000 +0000
@@ -2,7 +2,7 @@
  * arch/sh/mm/cache-sh4.c
  *
  * Copyright (C) 1999, 2000, 2002  Niibe Yutaka
- * Copyright (C) 2001, 2002, 2003, 2004  Paul Mundt
+ * Copyright (C) 2001, 2002, 2003, 2004, 2005  Paul Mundt
  * Copyright (C) 2003  Richard Curnow
  *
  * This file is subject to the terms and conditions of the GNU General Public
@@ -26,26 +26,95 @@
 #include <asm/mmu_context.h>
 #include <asm/cacheflush.h>
 
-extern void __flush_cache_4096_all(unsigned long start);
-static void __flush_cache_4096_all_ex(unsigned long start);
-extern void __flush_dcache_all(void);
-static void __flush_dcache_all_ex(void);
+static void __flush_dcache_segment_1way(unsigned long start,
+					unsigned long extent);
+static void __flush_dcache_segment_2way(unsigned long start,
+					unsigned long extent);
+static void __flush_dcache_segment_4way(unsigned long start,
+					unsigned long extent);
+
+static void __flush_cache_4096(unsigned long addr, unsigned long phys,
+			       unsigned long exec_offset);
+
+/*
+ * This is initialised here to ensure that it is not placed in the BSS.  If
+ * that were to happen, note that cache_init gets called before the BSS is
+ * cleared, so this would get nulled out which would be hopeless.
+ */
+static void (*__flush_dcache_segment_fn)(unsigned long, unsigned long) =
+	(void (*)(unsigned long, unsigned long))0xdeadbeef;
+
+static void compute_alias(struct cache_info *c)
+{
+	c->alias_mask = ((c->sets - 1) << c->entry_shift) & ~(PAGE_SIZE - 1);
+	c->n_aliases = (c->alias_mask >> PAGE_SHIFT) + 1;
+}
+
+static void __init emit_cache_params(void)
+{
+	printk("PVR=%08x CVR=%08x PRR=%08x\n",
+		ctrl_inl(CCN_PVR),
+		ctrl_inl(CCN_CVR),
+		ctrl_inl(CCN_PRR));
+	printk("I-cache : n_ways=%d n_sets=%d way_incr=%d\n",
+		cpu_data->icache.ways,
+		cpu_data->icache.sets,
+		cpu_data->icache.way_incr);
+	printk("I-cache : entry_mask=0x%08x alias_mask=0x%08x n_aliases=%d\n",
+		cpu_data->icache.entry_mask,
+		cpu_data->icache.alias_mask,
+		cpu_data->icache.n_aliases);
+	printk("D-cache : n_ways=%d n_sets=%d way_incr=%d\n",
+		cpu_data->dcache.ways,
+		cpu_data->dcache.sets,
+		cpu_data->dcache.way_incr);
+	printk("D-cache : entry_mask=0x%08x alias_mask=0x%08x n_aliases=%d\n",
+		cpu_data->dcache.entry_mask,
+		cpu_data->dcache.alias_mask,
+		cpu_data->dcache.n_aliases);
+
+	if (!__flush_dcache_segment_fn)
+		panic("unknown number of cache ways\n");
+}
 
 /*
  * SH-4 has virtually indexed and physically tagged cache.
  */
 
-struct semaphore p3map_sem[4];
+/* Worst case assumed to be 64k cache, direct-mapped i.e. 4 synonym bits. */
+#define MAX_P3_SEMAPHORES 16
+
+struct semaphore p3map_sem[MAX_P3_SEMAPHORES];
 
 void __init p3_cache_init(void)
 {
-	if (remap_area_pages(P3SEG, 0, PAGE_SIZE*4, _PAGE_CACHABLE))
+	int i;
+
+	compute_alias(&cpu_data->icache);
+	compute_alias(&cpu_data->dcache);
+
+	switch (cpu_data->dcache.ways) {
+	case 1:
+		__flush_dcache_segment_fn = __flush_dcache_segment_1way;
+		break;
+	case 2:
+		__flush_dcache_segment_fn = __flush_dcache_segment_2way;
+		break;
+	case 4:
+		__flush_dcache_segment_fn = __flush_dcache_segment_4way;
+		break;
+	default:
+		__flush_dcache_segment_fn = NULL;
+		break;
+	}
+
+	emit_cache_params();
+
+	if (remap_area_pages(P3SEG, 0, PAGE_SIZE * 4, _PAGE_CACHABLE))
 		panic("%s failed.", __FUNCTION__);
 
-	sema_init (&p3map_sem[0], 1);
-	sema_init (&p3map_sem[1], 1);
-	sema_init (&p3map_sem[2], 1);
-	sema_init (&p3map_sem[3], 1);
+	for (i = 0; i < cpu_data->dcache.n_aliases; i++)
+		sema_init(&p3map_sem[i], 1);
 }
 
 /*
@@ -90,7 +159,6 @@
 	}
 }
 
-
 /*
  * No write back please
  */
@@ -109,40 +177,6 @@
 	}
 }
 
-static void __flush_dcache_all_ex(void)
-{
-	unsigned long addr, end_addr, entry_offset;
-
-	end_addr = CACHE_OC_ADDRESS_ARRAY + (cpu_data->dcache.sets << cpu_data->dcache.entry_shift) * cpu_data->dcache.ways;
-	entry_offset = 1 << cpu_data->dcache.entry_shift;
-	for (addr = CACHE_OC_ADDRESS_ARRAY; addr < end_addr; addr += entry_offset) {
-		ctrl_outl(0, addr);
-	}
-}
-
-static void __flush_cache_4096_all_ex(unsigned long start)
-{
-	unsigned long addr, entry_offset;
-	int i;
-
-	entry_offset = 1 << cpu_data->dcache.entry_shift;
-	for (i = 0; i < cpu_data->dcache.ways; i++, start += cpu_data->dcache.way_incr) {
-		for (addr = CACHE_OC_ADDRESS_ARRAY + start;
-		     addr < CACHE_OC_ADDRESS_ARRAY + 4096 + start;
-		     addr += entry_offset) {
-			ctrl_outl(0, addr);
-		}
-	}
-}
-
-void flush_cache_4096_all(unsigned long start)
-{
-	if (cpu_data->dcache.ways == 1)
-		__flush_cache_4096_all(start);
-	else
-		__flush_cache_4096_all_ex(start);
-}
-
 /*
  * Write back the range of D-cache, and purge the I-cache.
  *
@@ -154,14 +188,14 @@
 }
 
 /*
- * Write back the D-cache and purge the I-cache for signal trampoline. 
+ * Write back the D-cache and purge the I-cache for signal trampoline.
  * .. which happens to be the same behavior as flush_icache_range().
  * So, we simply flush out a line.
  */
 void flush_cache_sigtramp(unsigned long addr)
 {
 	unsigned long v, index;
-	unsigned long flags; 
+	unsigned long flags;
 	int i;
 
 	v = addr & ~(L1_CACHE_BYTES-1);
@@ -173,29 +207,34 @@
 
 	local_irq_save(flags);
 	jump_to_P2();
-	for(i = 0; i < cpu_data->icache.ways; i++, index += cpu_data->icache.way_incr)
+
+	for (i = 0; i < cpu_data->icache.ways;
+	     i++, index += cpu_data->icache.way_incr)
 		ctrl_outl(0, index);	/* Clear out Valid-bit */
+
 	back_to_P1();
+	wmb();
 	local_irq_restore(flags);
 }
 
 static inline void flush_cache_4096(unsigned long start,
 				    unsigned long phys)
 {
-	unsigned long flags; 
-	extern void __flush_cache_4096(unsigned long addr, unsigned long phys, unsigned long exec_offset);
+	unsigned long flags;
 
 	/*
-	 * SH7751, SH7751R, and ST40 have no restriction to handle cache.
-	 * (While SH7750 must do that at P2 area.)
+	 * All types of SH-4 require PC to be in P2 to operate on the I-cache.
+	 * Some types of SH-4 require PC to be in P2 to operate on the D-cache.
 	 */
 	if ((cpu_data->flags & CPU_HAS_P2_FLUSH_BUG)
 	   || start < CACHE_OC_ADDRESS_ARRAY) {
 		local_irq_save(flags);
-		__flush_cache_4096(start | SH_CACHE_ASSOC, P1SEGADDR(phys), 0x20000000);
+		__flush_cache_4096(start | SH_CACHE_ASSOC,
+				   P1SEGADDR(phys), 0x20000000);
 		local_irq_restore(flags);
 	} else {
-		__flush_cache_4096(start | SH_CACHE_ASSOC, P1SEGADDR(phys), 0);
+		__flush_cache_4096(start | SH_CACHE_ASSOC,
+				   P1SEGADDR(phys), 0);
 	}
 }
 
@@ -207,13 +246,16 @@
 {
 	if (test_bit(PG_mapped, &page->flags)) {
 		unsigned long phys = PHYSADDR(page_address(page));
+		unsigned long addr = CACHE_OC_ADDRESS_ARRAY;
+		int i, n;
 
 		/* Loop all the D-cache */
-		flush_cache_4096(CACHE_OC_ADDRESS_ARRAY,          phys);
-		flush_cache_4096(CACHE_OC_ADDRESS_ARRAY | 0x1000, phys);
-		flush_cache_4096(CACHE_OC_ADDRESS_ARRAY | 0x2000, phys);
-		flush_cache_4096(CACHE_OC_ADDRESS_ARRAY | 0x3000, phys);
+		n = cpu_data->dcache.n_aliases;
+		for (i = 0; i < n; i++, addr += PAGE_SIZE)
+			flush_cache_4096(addr, phys);
 	}
+
+	wmb();
 }
 
 static inline void flush_icache_all(void)
@@ -228,32 +270,38 @@
 	ccr |= CCR_CACHE_ICI;
 	ctrl_outl(ccr, CCR);
 
+	/*
+	 * back_to_P1() will take care of the barrier for us, don't add
+	 * another one!
+	 */
+
 	back_to_P1();
 	local_irq_restore(flags);
 }
 
+void flush_dcache_all(void)
+{
+	(*__flush_dcache_segment_fn)(0UL, cpu_data->dcache.way_size);
+	wmb();
+}
+
 void flush_cache_all(void)
 {
-	if (cpu_data->dcache.ways == 1)
-		__flush_dcache_all();
-	else
-		__flush_dcache_all_ex();
+	flush_dcache_all();
 	flush_icache_all();
 }
 
 void flush_cache_mm(struct mm_struct *mm)
 {
-	/* Is there any good way? */
-	/* XXX: possibly call flush_cache_range for each vm area */
-	/* 
-	 * FIXME: Really, the optimal solution here would be able to flush out
-	 * individual lines created by the specified context, but this isn't
-	 * feasible for a number of architectures (such as MIPS, and some
-	 * SPARC) .. is this possible for SuperH?
-	 *
-	 * In the meantime, we'll just flush all of the caches.. this
-	 * seems to be the simplest way to avoid at least a few wasted
-	 * cache flushes. -Lethal
+	/*
+	 * Note : (RPC) since the caches are physically tagged, the only point
+	 * of flush_cache_mm for SH-4 is to get rid of aliases from the
+	 * D-cache.  The assumption elsewhere, e.g. flush_cache_range, is that
+	 * lines can stay resident so long as the virtual address they were
+	 * accessed with (hence cache set) is in accord with the physical
+	 * address (i.e. tag).  It's no different here.  So I reckon we don't
+	 * need to flush the I-cache, since aliases don't matter for that.  We
+	 * should try that.
 	 */
 	flush_cache_all();
 }
@@ -267,24 +315,36 @@
 void flush_cache_page(struct vm_area_struct *vma, unsigned long address, unsigned long pfn)
 {
 	unsigned long phys = pfn << PAGE_SHIFT;
+	unsigned int alias_mask;
+
+	alias_mask = cpu_data->dcache.alias_mask;
 
 	/* We only need to flush D-cache when we have alias */
-	if ((address^phys) & CACHE_ALIAS) {
+	if ((address^phys) & alias_mask) {
 		/* Loop 4K of the D-cache */
 		flush_cache_4096(
-			CACHE_OC_ADDRESS_ARRAY | (address & CACHE_ALIAS),
+			CACHE_OC_ADDRESS_ARRAY | (address & alias_mask),
 			phys);
 		/* Loop another 4K of the D-cache */
 		flush_cache_4096(
-			CACHE_OC_ADDRESS_ARRAY | (phys & CACHE_ALIAS),
+			CACHE_OC_ADDRESS_ARRAY | (phys & alias_mask),
 			phys);
 	}
 
-	if (vma->vm_flags & VM_EXEC)
-		/* Loop 4K (half) of the I-cache */
+	alias_mask = cpu_data->icache.alias_mask;
+	if (vma->vm_flags & VM_EXEC) {
+		/*
+		 * Evict entries from the portion of the cache from which code
+		 * may have been executed at this address (virtual).  There's
+		 * no need to evict from the portion corresponding to the
+		 * physical address as for the D-cache, because we know the
+		 * kernel has never executed the code through its identity
+		 * translation.
+		 */
 		flush_cache_4096(
-			CACHE_IC_ADDRESS_ARRAY | (address & 0x1000),
+			CACHE_IC_ADDRESS_ARRAY | (address & alias_mask),
 			phys);
+	}
 }
 
 /*
@@ -299,52 +359,96 @@
 void flush_cache_range(struct vm_area_struct *vma, unsigned long start,
 		       unsigned long end)
 {
-	unsigned long p = start & PAGE_MASK;
+	unsigned long d = 0, p = start & PAGE_MASK;
+	unsigned long alias_mask = cpu_data->dcache.alias_mask;
+	unsigned long n_aliases = cpu_data->dcache.n_aliases;
+	unsigned long select_bit;
+	unsigned long all_aliases_mask;
+	unsigned long addr_offset;
+	unsigned long phys;
 	pgd_t *dir;
 	pmd_t *pmd;
+	pud_t *pud;
 	pte_t *pte;
 	pte_t entry;
-	unsigned long phys;
-	unsigned long d = 0;
+	int i;
+
+	/*
+	 * If cache is only 4k-per-way, there are never any 'aliases'.  Since
+	 * the cache is physically tagged, the data can just be left in there.
+	 */
+	if (n_aliases == 0)
+		return;
+
+	all_aliases_mask = (1 << n_aliases) - 1;
+
+	/*
+	 * Don't bother with the lookup and alias check if we have a
+	 * wide range to cover, just blow away the dcache in its
+	 * entirety instead. -- PFM.
+	 */
+	if (((end - start) >> PAGE_SHIFT) >= 64) {
+		flush_dcache_all();
+
+		if (vma->vm_flags & VM_EXEC)
+			flush_icache_all();
+
+		return;
+	}
 
 	dir = pgd_offset(vma->vm_mm, p);
-	pmd = pmd_offset(dir, p);
+	pud = pud_offset(dir, p);
+	pmd = pmd_offset(pud, p);
+	end = PAGE_ALIGN(end);
 
 	do {
 		if (pmd_none(*pmd) || pmd_bad(*pmd)) {
-			p &= ~((1 << PMD_SHIFT) -1);
+			p &= ~((1 << PMD_SHIFT) - 1);
 			p += (1 << PMD_SHIFT);
 			pmd++;
+
 			continue;
 		}
+
 		pte = pte_offset_kernel(pmd, p);
+
 		do {
 			entry = *pte;
+
 			if ((pte_val(entry) & _PAGE_PRESENT)) {
-				phys = pte_val(entry)&PTE_PHYS_MASK;
-				if ((p^phys) & CACHE_ALIAS) {
-					d |= 1 << ((p & CACHE_ALIAS)>>12); 
-					d |= 1 << ((phys & CACHE_ALIAS)>>12);
-					if (d == 0x0f)
+				phys = pte_val(entry) & PTE_PHYS_MASK;
+
+				if ((p ^ phys) & alias_mask) {
+					d |= 1 << ((p & alias_mask) >> PAGE_SHIFT);
+					d |= 1 << ((phys & alias_mask) >> PAGE_SHIFT);
+
+					if (d == all_aliases_mask)
 						goto loop_exit;
 				}
 			}
+
 			pte++;
 			p += PAGE_SIZE;
 		} while (p < end && ((unsigned long)pte & ~PAGE_MASK));
 		pmd++;
 	} while (p < end);
- loop_exit:
-	if (d & 1)
-		flush_cache_4096_all(0);
-	if (d & 2)
-		flush_cache_4096_all(0x1000);
-	if (d & 4)
-		flush_cache_4096_all(0x2000);
-	if (d & 8)
-		flush_cache_4096_all(0x3000);
-	if (vma->vm_flags & VM_EXEC)
+
+loop_exit:
+	for (i = 0, select_bit = 0x1, addr_offset = 0x0; i < n_aliases;
+	     i++, select_bit <<= 1, addr_offset += PAGE_SIZE)
+		if (d & select_bit) {
+			(*__flush_dcache_segment_fn)(addr_offset, PAGE_SIZE);
+			wmb();
+		}
+
+	if (vma->vm_flags & VM_EXEC) {
+		/*
+		 * TODO: Is this required???  Need to look at how I-cache
+		 * coherency is assured when new programs are loaded to see if
+		 * this matters.
+		 */
 		flush_icache_all();
+	}
 }
 
 /*
@@ -358,5 +462,274 @@
 			     struct page *page, unsigned long addr, int len)
 {
 	flush_cache_page(vma, addr, page_to_pfn(page));
+	mb();
+}
+
+/**
+ * __flush_cache_4096
+ *
+ * @addr:  address in memory mapped cache array
+ * @phys:  P1 address to flush (has to match tags if addr has 'A' bit
+ *         set i.e. associative write)
+ * @exec_offset: set to 0x20000000 if flush has to be executed from P2
+ *               region else 0x0
+ *
+ * The offset into the cache array implied by 'addr' selects the
+ * 'colour' of the virtual address range that will be flushed.  The
+ * operation (purge/write-back) is selected by the lower 2 bits of
+ * 'phys'.
+ */
+static void __flush_cache_4096(unsigned long addr, unsigned long phys,
+			       unsigned long exec_offset)
+{
+	int way_count;
+	unsigned long base_addr = addr;
+	struct cache_info *dcache;
+	unsigned long way_incr;
+	unsigned long a, ea, p;
+	unsigned long temp_pc;
+
+	dcache = &cpu_data->dcache;
+	/* Write this way for better assembly. */
+	way_count = dcache->ways;
+	way_incr = dcache->way_incr;
+
+	/*
+	 * Apply exec_offset (i.e. branch to P2 if required.).
+	 *
+	 * FIXME:
+	 *
+	 *	If I write "=r" for the (temp_pc), it puts this in r6 hence
+	 *	trashing exec_offset before it's been added on - why?  Hence
+	 *	"=&r" as a 'workaround'
+	 */
+	asm volatile("mov.l 1f, %0\n\t"
+		     "add   %1, %0\n\t"
+		     "jmp   @%0\n\t"
+		     "nop\n\t"
+		     ".balign 4\n\t"
+		     "1:  .long 2f\n\t"
+		     "2:\n" : "=&r" (temp_pc) : "r" (exec_offset));
+
+	/*
+	 * We know there will be >=1 iteration, so write as do-while to avoid
+	 * pointless nead-of-loop check for 0 iterations.
+	 */
+	do {
+		ea = base_addr + PAGE_SIZE;
+		a = base_addr;
+		p = phys;
+
+		do {
+			*(volatile unsigned long *)a = p;
+			/*
+			 * Next line: intentionally not p+32, saves an add, p
+			 * will do since only the cache tag bits need to
+			 * match.
+			 */
+			*(volatile unsigned long *)(a+32) = p;
+			a += 64;
+			p += 64;
+		} while (a < ea);
+
+		base_addr += way_incr;
+	} while (--way_count != 0);
+}
+
+/*
+ * Break the 1, 2 and 4 way variants of this out into separate functions to
+ * avoid nearly all the overhead of having the conditional stuff in the function
+ * bodies (+ the 1 and 2 way cases avoid saving any registers too).
+ */
+static void __flush_dcache_segment_1way(unsigned long start,
+					unsigned long extent_per_way)
+{
+	unsigned long orig_sr, sr_with_bl;
+	unsigned long base_addr;
+	unsigned long way_incr, linesz, way_size;
+	struct cache_info *dcache;
+	register unsigned long a0, a0e;
+
+	asm volatile("stc sr, %0" : "=r" (orig_sr));
+	sr_with_bl = orig_sr | (1<<28);
+	base_addr = ((unsigned long)&empty_zero_page[0]);
+
+	/*
+	 * The previous code aligned base_addr to 16k, i.e. the way_size of all
+	 * existing SH-4 D-caches.  Whilst I don't see a need to have this
+	 * aligned to any better than the cache line size (which it will be
+	 * anyway by construction), let's align it to at least the way_size of
+	 * any existing or conceivable SH-4 D-cache.  -- RPC
+	 */
+	base_addr = ((base_addr >> 16) << 16);
+	base_addr |= start;
+
+	dcache = &cpu_data->dcache;
+	linesz = dcache->linesz;
+	way_incr = dcache->way_incr;
+	way_size = dcache->way_size;
+
+	a0 = base_addr;
+	a0e = base_addr + extent_per_way;
+	do {
+		asm volatile("ldc %0, sr" : : "r" (sr_with_bl));
+		asm volatile("movca.l r0, @%0\n\t"
+			     "ocbi @%0" : : "r" (a0));
+		a0 += linesz;
+		asm volatile("movca.l r0, @%0\n\t"
+			     "ocbi @%0" : : "r" (a0));
+		a0 += linesz;
+		asm volatile("movca.l r0, @%0\n\t"
+			     "ocbi @%0" : : "r" (a0));
+		a0 += linesz;
+		asm volatile("movca.l r0, @%0\n\t"
+			     "ocbi @%0" : : "r" (a0));
+		asm volatile("ldc %0, sr" : : "r" (orig_sr));
+		a0 += linesz;
+	} while (a0 < a0e);
+}
+
+static void __flush_dcache_segment_2way(unsigned long start,
+					unsigned long extent_per_way)
+{
+	unsigned long orig_sr, sr_with_bl;
+	unsigned long base_addr;
+	unsigned long way_incr, linesz, way_size;
+	struct cache_info *dcache;
+	register unsigned long a0, a1, a0e;
+
+	asm volatile("stc sr, %0" : "=r" (orig_sr));
+	sr_with_bl = orig_sr | (1<<28);
+	base_addr = ((unsigned long)&empty_zero_page[0]);
+
+	/* See comment under 1-way above */
+	base_addr = ((base_addr >> 16) << 16);
+	base_addr |= start;
+
+	dcache = &cpu_data->dcache;
+	linesz = dcache->linesz;
+	way_incr = dcache->way_incr;
+	way_size = dcache->way_size;
+
+	a0 = base_addr;
+	a1 = a0 + way_incr;
+	a0e = base_addr + extent_per_way;
+	do {
+		asm volatile("ldc %0, sr" : : "r" (sr_with_bl));
+		asm volatile("movca.l r0, @%0\n\t"
+			     "movca.l r0, @%1\n\t"
+			     "ocbi @%0\n\t"
+			     "ocbi @%1" : :
+			     "r" (a0), "r" (a1));
+		a0 += linesz;
+		a1 += linesz;
+		asm volatile("movca.l r0, @%0\n\t"
+			     "movca.l r0, @%1\n\t"
+			     "ocbi @%0\n\t"
+			     "ocbi @%1" : :
+			     "r" (a0), "r" (a1));
+		a0 += linesz;
+		a1 += linesz;
+		asm volatile("movca.l r0, @%0\n\t"
+			     "movca.l r0, @%1\n\t"
+			     "ocbi @%0\n\t"
+			     "ocbi @%1" : :
+			     "r" (a0), "r" (a1));
+		a0 += linesz;
+		a1 += linesz;
+		asm volatile("movca.l r0, @%0\n\t"
+			     "movca.l r0, @%1\n\t"
+			     "ocbi @%0\n\t"
+			     "ocbi @%1" : :
+			     "r" (a0), "r" (a1));
+		asm volatile("ldc %0, sr" : : "r" (orig_sr));
+		a0 += linesz;
+		a1 += linesz;
+	} while (a0 < a0e);
+}
+
+static void __flush_dcache_segment_4way(unsigned long start,
+					unsigned long extent_per_way)
+{
+	unsigned long orig_sr, sr_with_bl;
+	unsigned long base_addr;
+	unsigned long way_incr, linesz, way_size;
+	struct cache_info *dcache;
+	register unsigned long a0, a1, a2, a3, a0e;
+
+	asm volatile("stc sr, %0" : "=r" (orig_sr));
+	sr_with_bl = orig_sr | (1<<28);
+	base_addr = ((unsigned long)&empty_zero_page[0]);
+
+	/* See comment under 1-way above */
+	base_addr = ((base_addr >> 16) << 16);
+	base_addr |= start;
+
+	dcache = &cpu_data->dcache;
+	linesz = dcache->linesz;
+	way_incr = dcache->way_incr;
+	way_size = dcache->way_size;
+
+	a0 = base_addr;
+	a1 = a0 + way_incr;
+	a2 = a1 + way_incr;
+	a3 = a2 + way_incr;
+	a0e = base_addr + extent_per_way;
+	do {
+		asm volatile("ldc %0, sr" : : "r" (sr_with_bl));
+		asm volatile("movca.l r0, @%0\n\t"
+			     "movca.l r0, @%1\n\t"
+			     "movca.l r0, @%2\n\t"
+			     "movca.l r0, @%3\n\t"
+			     "ocbi @%0\n\t"
+			     "ocbi @%1\n\t"
+			     "ocbi @%2\n\t"
+			     "ocbi @%3\n\t" : :
+			     "r" (a0), "r" (a1), "r" (a2), "r" (a3));
+		a0 += linesz;
+		a1 += linesz;
+		a2 += linesz;
+		a3 += linesz;
+		asm volatile("movca.l r0, @%0\n\t"
+			     "movca.l r0, @%1\n\t"
+			     "movca.l r0, @%2\n\t"
+			     "movca.l r0, @%3\n\t"
+			     "ocbi @%0\n\t"
+			     "ocbi @%1\n\t"
+			     "ocbi @%2\n\t"
+			     "ocbi @%3\n\t" : :
+			     "r" (a0), "r" (a1), "r" (a2), "r" (a3));
+		a0 += linesz;
+		a1 += linesz;
+		a2 += linesz;
+		a3 += linesz;
+		asm volatile("movca.l r0, @%0\n\t"
+			     "movca.l r0, @%1\n\t"
+			     "movca.l r0, @%2\n\t"
+			     "movca.l r0, @%3\n\t"
+			     "ocbi @%0\n\t"
+			     "ocbi @%1\n\t"
+			     "ocbi @%2\n\t"
+			     "ocbi @%3\n\t" : :
+			     "r" (a0), "r" (a1), "r" (a2), "r" (a3));
+		a0 += linesz;
+		a1 += linesz;
+		a2 += linesz;
+		a3 += linesz;
+		asm volatile("movca.l r0, @%0\n\t"
+			     "movca.l r0, @%1\n\t"
+			     "movca.l r0, @%2\n\t"
+			     "movca.l r0, @%3\n\t"
+			     "ocbi @%0\n\t"
+			     "ocbi @%1\n\t"
+			     "ocbi @%2\n\t"
+			     "ocbi @%3\n\t" : :
+			     "r" (a0), "r" (a1), "r" (a2), "r" (a3));
+		asm volatile("ldc %0, sr" : : "r" (orig_sr));
+		a0 += linesz;
+		a1 += linesz;
+		a2 += linesz;
+		a3 += linesz;
+	} while (a0 < a0e);
 }
 
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/clear_page.S linux-2.6.17/arch/sh/mm/clear_page.S
--- linux-2.6.17-vanilla/arch/sh/mm/clear_page.S	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/clear_page.S	2006-07-12 16:54:23.000000000 +0000
@@ -194,102 +194,5 @@
 	 nop
 .L4096:	.word	4096
 
-ENTRY(__flush_cache_4096)
-	mov.l	1f,r3
-	add	r6,r3
-	mov	r4,r0
-	mov	#64,r2
-	shll	r2
-	mov	#64,r6
-	jmp	@r3
-	 mov	#96,r7
-	.align	2
-1:	.long	2f
-2:
-	.rept	32
-	mov.l	r5,@r0
-	mov.l	r5,@(32,r0)
-	mov.l	r5,@(r0,r6)
-	mov.l	r5,@(r0,r7)
-	add	r2,r5
-	add	r2,r0
-	.endr
-	nop
-	nop
-	nop
-	nop
-	nop
-	nop
-	nop
-	rts
-	 nop
-
-ENTRY(__flush_dcache_all)
-	mov.l	2f,r0
-	mov.l	3f,r4
-	and	r0,r4		! r4 = (unsigned long)&empty_zero_page[0] & ~0xffffc000
-	stc	sr,r1		! save SR
-	mov.l	4f,r2
-	or	r1,r2
-	mov	#32,r3
-	shll2	r3
-1:
-	ldc	r2,sr		! set BL bit
-	movca.l	r0,@r4
-	ocbi	@r4
-	add	#32,r4
-	movca.l	r0,@r4
-	ocbi	@r4
-	add	#32,r4
-	movca.l	r0,@r4
-	ocbi	@r4
-	add	#32,r4
-	movca.l	r0,@r4
-	ocbi	@r4
-	ldc	r1,sr		! restore SR
-	dt	r3
-	bf/s	1b
-	 add	#32,r4
-
-	rts
-	 nop
-	.align	2
-2:	.long	0xffffc000
-3:	.long	empty_zero_page
-4:	.long	0x10000000	! BL bit
-
-/* __flush_cache_4096_all(unsigned long addr) */
-ENTRY(__flush_cache_4096_all)
-	mov.l	2f,r0
-	mov.l	3f,r2
-	and	r0,r2
-	or	r2,r4		! r4 = addr | (unsigned long)&empty_zero_page[0] & ~0x3fff
-	stc	sr,r1		! save SR
-	mov.l	4f,r2
-	or	r1,r2
-	mov	#32,r3
-1:
-	ldc	r2,sr		! set BL bit
-	movca.l	r0,@r4
-	ocbi	@r4
-	add	#32,r4
-	movca.l	r0,@r4
-	ocbi	@r4
-	add	#32,r4
-	movca.l	r0,@r4
-	ocbi	@r4
-	add	#32,r4
-	movca.l	r0,@r4
-	ocbi	@r4
-	ldc	r1,sr		! restore SR
-	dt	r3
-	bf/s	1b
-	 add	#32,r4
-
-	rts
-	 nop
-	.align	2
-2:	.long	0xffffc000
-3:	.long	empty_zero_page
-4:	.long	0x10000000	! BL bit
 #endif
+
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/consistent.c linux-2.6.17/arch/sh/mm/consistent.c
--- linux-2.6.17-vanilla/arch/sh/mm/consistent.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/consistent.c	2006-07-12 16:54:23.000000000 +0000
@@ -9,6 +9,8 @@
  */
 #include <linux/mm.h>
 #include <linux/dma-mapping.h>
+#include <asm/cacheflush.h>
+#include <asm/addrspace.h>
 #include <asm/io.h>
 
 void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *handle)
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/fault.c linux-2.6.17/arch/sh/mm/fault.c
--- linux-2.6.17-vanilla/arch/sh/mm/fault.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/fault.c	2006-07-12 16:54:23.000000000 +0000
@@ -1,33 +1,21 @@
-/* $Id: fault.c,v 1.14 2004/01/13 05:52:11 kkojima Exp $
+/*
+ * Page fault handler for SH with an MMU.
  *
- *  linux/arch/sh/mm/fault.c
  *  Copyright (C) 1999  Niibe Yutaka
  *  Copyright (C) 2003  Paul Mundt
  *
  *  Based on linux/arch/i386/mm/fault.c:
  *   Copyright (C) 1995  Linus Torvalds
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
  */
-
-#include <linux/signal.h>
-#include <linux/sched.h>
 #include <linux/kernel.h>
-#include <linux/errno.h>
-#include <linux/string.h>
-#include <linux/types.h>
-#include <linux/ptrace.h>
-#include <linux/mman.h>
 #include <linux/mm.h>
-#include <linux/smp.h>
-#include <linux/smp_lock.h>
-#include <linux/interrupt.h>
-#include <linux/module.h>
-
+#include <linux/hardirq.h>
 #include <asm/system.h>
-#include <asm/io.h>
-#include <asm/uaccess.h>
-#include <asm/pgalloc.h>
 #include <asm/mmu_context.h>
-#include <asm/cacheflush.h>
 #include <asm/kgdb.h>
 
 extern void die(const char *,struct pt_regs *,long);
@@ -187,14 +175,25 @@
 		goto no_context;
 }
 
+#ifdef CONFIG_SH_STORE_QUEUES
+/*
+ * This is a special case for the SH-4 store queues, as pages for this
+ * space still need to be faulted in before it's possible to flush the
+ * store queue cache for writeout to the remapped region.
+ */
+#define P3_ADDR_MAX		(P4SEG_STORE_QUE + 0x04000000)
+#else
+#define P3_ADDR_MAX		P4SEG
+#endif
+
 /*
- * Called with interrupt disabled.
+ * Called with interrupts disabled.
  */
 asmlinkage int __do_page_fault(struct pt_regs *regs, unsigned long writeaccess,
 			       unsigned long address)
 {
-	unsigned long addrmax = P4SEG;
 	pgd_t *pgd;
+	pud_t *pud;
 	pmd_t *pmd;
 	pte_t *pte;
 	pte_t entry;
@@ -207,31 +206,37 @@
 		kgdb_bus_err_hook();
 #endif
 
-#ifdef CONFIG_SH_STORE_QUEUES
-	addrmax = P4SEG_STORE_QUE + 0x04000000;
-#endif
-
-	if (address >= P3SEG && address < addrmax) {
+	/*
+	 * We don't take page faults for P1, P2, and parts of P4, these
+	 * are always mapped, whether it be due to legacy behaviour in
+	 * 29-bit mode, or due to PMB configuration in 32-bit mode.
+	 */
+	if (address >= P3SEG && address < P3_ADDR_MAX) {
 		pgd = pgd_offset_k(address);
 		mm = NULL;
-	} else if (address >= TASK_SIZE)
-		return 1;
-	else if (!(mm = current->mm))
-		return 1;
-	else
-		pgd = pgd_offset(mm, address);
+	} else {
+		if (unlikely(address >= TASK_SIZE || !(mm = current->mm)))
+			return 1;
 
-	pmd = pmd_offset(pgd, address);
+		pgd = pgd_offset(current->mm, address);
+	}
+
+	pud = pud_offset(pgd, address);
+	if (pud_none_or_clear_bad(pud))
+		return 1;
+	pmd = pmd_offset(pud, address);
 	if (pmd_none_or_clear_bad(pmd))
 		return 1;
+
 	if (mm)
 		pte = pte_offset_map_lock(mm, pmd, address, &ptl);
 	else
 		pte = pte_offset_kernel(pmd, address);
 
 	entry = *pte;
-	if (pte_none(entry) || pte_not_present(entry)
-	    || (writeaccess && !pte_write(entry)))
+	if (unlikely(pte_none(entry) || pte_not_present(entry)))
+		goto unlock;
+	if (unlikely(writeaccess && !pte_write(entry)))
 		goto unlock;
 
 	if (writeaccess)
@@ -243,13 +248,7 @@
 	 * ITLB is not affected by "ldtlb" instruction.
 	 * So, we need to flush the entry by ourselves.
 	 */
-
-	{
-		unsigned long flags;
-		local_irq_save(flags);
-		__flush_tlb_page(get_asid(), address&PAGE_MASK);
-		local_irq_restore(flags);
-	}
+	__flush_tlb_page(get_asid(), address & PAGE_MASK);
 #endif
 
 	set_pte(pte, entry);
@@ -260,121 +259,3 @@
 		pte_unmap_unlock(pte, ptl);
 	return ret;
 }
-
-void flush_tlb_page(struct vm_area_struct *vma, unsigned long page)
-{
-	if (vma->vm_mm && vma->vm_mm->context != NO_CONTEXT) {
-		unsigned long flags;
-		unsigned long asid;
-		unsigned long saved_asid = MMU_NO_ASID;
-
-		asid = vma->vm_mm->context & MMU_CONTEXT_ASID_MASK;
-		page &= PAGE_MASK;
-
-		local_irq_save(flags);
-		if (vma->vm_mm != current->mm) {
-			saved_asid = get_asid();
-			set_asid(asid);
-		}
-		__flush_tlb_page(asid, page);
-		if (saved_asid != MMU_NO_ASID)
-			set_asid(saved_asid);
-		local_irq_restore(flags);
-	}
-}
-
-void flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
-		     unsigned long end)
-{
-	struct mm_struct *mm = vma->vm_mm;
-
-	if (mm->context != NO_CONTEXT) {
-		unsigned long flags;
-		int size;
-
-		local_irq_save(flags);
-		size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
-		if (size > (MMU_NTLB_ENTRIES/4)) { /* Too many TLB to flush */
-			mm->context = NO_CONTEXT;
-			if (mm == current->mm)
-				activate_context(mm);
-		} else {
-			unsigned long asid = mm->context&MMU_CONTEXT_ASID_MASK;
-			unsigned long saved_asid = MMU_NO_ASID;
-
-			start &= PAGE_MASK;
-			end += (PAGE_SIZE - 1);
-			end &= PAGE_MASK;
-			if (mm != current->mm) {
-				saved_asid = get_asid();
-				set_asid(asid);
-			}
-			while (start < end) {
-				__flush_tlb_page(asid, start);
-				start += PAGE_SIZE;
-			}
-			if (saved_asid != MMU_NO_ASID)
-				set_asid(saved_asid);
-		}
-		local_irq_restore(flags);
-	}
-}
-
-void flush_tlb_kernel_range(unsigned long start, unsigned long end)
-{
-	unsigned long flags;
-	int size;
-
-	local_irq_save(flags);
-	size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
-	if (size > (MMU_NTLB_ENTRIES/4)) { /* Too many TLB to flush */
-		flush_tlb_all();
-	} else {
-		unsigned long asid = init_mm.context&MMU_CONTEXT_ASID_MASK;
-		unsigned long saved_asid = get_asid();
-
-		start &= PAGE_MASK;
-		end += (PAGE_SIZE - 1);
-		end &= PAGE_MASK;
-		set_asid(asid);
-		while (start < end) {
-			__flush_tlb_page(asid, start);
-			start += PAGE_SIZE;
-		}
-		set_asid(saved_asid);
-	}
-	local_irq_restore(flags);
-}
-
-void flush_tlb_mm(struct mm_struct *mm)
-{
-	/* Invalidate all TLB of this process. */
-	/* Instead of invalidating each TLB, we get new MMU context. */
-	if (mm->context != NO_CONTEXT) {
-		unsigned long flags;
-
-		local_irq_save(flags);
-		mm->context = NO_CONTEXT;
-		if (mm == current->mm)
-			activate_context(mm);
-		local_irq_restore(flags);
-	}
-}
-
-void flush_tlb_all(void)
-{
-	unsigned long flags, status;
-
-	/*
-	 * Flush all the TLB.
-	 *
-	 * Write to the MMU control register's bit:
-	 * 	TF-bit for SH-3, TI-bit for SH-4.
-	 *      It's same position, bit #2.
-	 */
-	local_irq_save(flags);
-	status = ctrl_inl(MMUCR);
-	status |= 0x04;		
-	ctrl_outl(status, MMUCR);
-	local_irq_restore(flags);
-}
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/hugetlbpage.c linux-2.6.17/arch/sh/mm/hugetlbpage.c
--- linux-2.6.17-vanilla/arch/sh/mm/hugetlbpage.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/hugetlbpage.c	2006-07-12 16:54:23.000000000 +0000
@@ -27,61 +27,41 @@
 pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr)
 {
 	pgd_t *pgd;
+	pud_t *pud;
 	pmd_t *pmd;
 	pte_t *pte = NULL;
 
 	pgd = pgd_offset(mm, addr);
 	if (pgd) {
-		pmd = pmd_alloc(mm, pgd, addr);
-		if (pmd)
-			pte = pte_alloc_map(mm, pmd, addr);
+		pud = pud_alloc(mm, pgd, addr);
+		if (pud) {
+			pmd = pmd_alloc(mm, pud, addr);
+			if (pmd)
+				pte = pte_alloc_map(mm, pmd, addr);
+		}
 	}
+
 	return pte;
 }
 
 pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
 {
 	pgd_t *pgd;
+	pud_t *pud;
 	pmd_t *pmd;
 	pte_t *pte = NULL;
 
 	pgd = pgd_offset(mm, addr);
 	if (pgd) {
-		pmd = pmd_offset(pgd, addr);
-		if (pmd)
-			pte = pte_offset_map(pmd, addr);
-	}
-	return pte;
-}
-
-void set_huge_pte_at(struct mm_struct *mm, unsigned long addr,
-		     pte_t *ptep, pte_t entry)
-{
-	int i;
-
-	for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) {
-		set_pte_at(mm, addr, ptep, entry);
-		ptep++;
-		addr += PAGE_SIZE;
-		pte_val(entry) += PAGE_SIZE;
+		pud = pud_offset(pgd, addr);
+		if (pud) {
+			pmd = pmd_offset(pud, addr);
+			if (pmd)
+				pte = pte_offset_map(pmd, addr);
+		}
 	}
-}
-
-pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr,
-			      pte_t *ptep)
-{
-	pte_t entry;
-	int i;
-
-	entry = *ptep;
 
-	for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) {
-		pte_clear(mm, addr, ptep);
-		addr += PAGE_SIZE;
-		ptep++;
-	}
-
-	return entry;
+	return pte;
 }
 
 struct page *follow_huge_addr(struct mm_struct *mm,
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/init.c linux-2.6.17/arch/sh/mm/init.c
--- linux-2.6.17-vanilla/arch/sh/mm/init.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/init.c	2006-07-12 16:54:23.000000000 +0000
@@ -61,7 +61,7 @@
 
 	printk("Mem-info:\n");
 	show_free_areas();
-	printk("Free swap:       %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
+	printk("Free swap:       %6ldkB\n",nr_swap_pages<<(PAGE_SHIFT-10));
 	i = max_mapnr;
 	while (i-- > 0) {
 		total++;
@@ -81,6 +81,7 @@
 static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot)
 {
 	pgd_t *pgd;
+	pud_t *pud;
 	pmd_t *pmd;
 	pte_t *pte;
 
@@ -90,7 +91,17 @@
 		return;
 	}
 
-	pmd = pmd_offset(pgd, addr);
+	pud = pud_offset(pgd, addr);
+	if (pud_none(*pud)) {
+		pmd = (pmd_t *)get_zeroed_page(GFP_ATOMIC);
+		set_pud(pud, __pud(__pa(pmd) | _KERNPG_TABLE | _PAGE_USER));
+		if (pmd != pmd_offset(pud, 0)) {
+			pud_ERROR(*pud);
+			return;
+		}
+	}
+
+	pmd = pmd_offset(pud, addr);
 	if (pmd_none(*pmd)) {
 		pte = (pte_t *)get_zeroed_page(GFP_ATOMIC);
 		set_pmd(pmd, __pmd(__pa(pte) | _KERNPG_TABLE | _PAGE_USER));
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/ioremap.c linux-2.6.17/arch/sh/mm/ioremap.c
--- linux-2.6.17-vanilla/arch/sh/mm/ioremap.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/ioremap.c	2006-07-12 16:54:23.000000000 +0000
@@ -15,6 +15,7 @@
 #include <linux/vmalloc.h>
 #include <linux/module.h>
 #include <linux/mm.h>
+#include <linux/pci.h>
 #include <asm/io.h>
 #include <asm/page.h>
 #include <asm/pgalloc.h>
@@ -135,6 +136,20 @@
 		return (void __iomem *)phys_to_virt(phys_addr);
 
 	/*
+	 * If we're on an SH7751 or SH7780 PCI controller, PCI memory is
+	 * mapped at the end of the address space (typically 0xfd000000)
+	 * in a non-translatable area, so mapping through page tables for
+	 * this area is not only pointless, but also fundamentally
+	 * broken. Just return the physical address instead.
+	 *
+	 * For boards that map a small PCI memory aperture somewhere in
+	 * P1/P2 space, ioremap() will already do the right thing,
+	 * and we'll never get this far.
+	 */
+	if (is_pci_memaddr(phys_addr) && is_pci_memaddr(last_addr))
+		return (void __iomem *)phys_addr;
+
+	/*
 	 * Don't allow anybody to remap normal RAM that we're using..
 	 */
 	if (phys_addr < virt_to_phys(high_memory))
@@ -192,7 +207,7 @@
 	unsigned long vaddr = (unsigned long __force)addr;
 	struct vm_struct *p;
 
-	if (PXSEG(vaddr) < P3SEG)
+	if (PXSEG(vaddr) < P3SEG || is_pci_memaddr(vaddr))
 		return;
 
 #ifdef CONFIG_32BIT
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/pg-sh4.c linux-2.6.17/arch/sh/mm/pg-sh4.c
--- linux-2.6.17-vanilla/arch/sh/mm/pg-sh4.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/pg-sh4.c	2006-07-12 16:54:23.000000000 +0000
@@ -2,7 +2,7 @@
  * arch/sh/mm/pg-sh4.c
  *
  * Copyright (C) 1999, 2000, 2002  Niibe Yutaka
- * Copyright (C) 2002  Paul Mundt
+ * Copyright (C) 2002 - 2005  Paul Mundt
  *
  * Released under the terms of the GNU GPL v2.0.
  */
@@ -24,6 +24,8 @@
 
 extern struct semaphore p3map_sem[];
 
+#define CACHE_ALIAS (cpu_data->dcache.alias_mask)
+
 /*
  * clear_user_page
  * @to: P1 address
@@ -36,14 +38,15 @@
 	if (((address ^ (unsigned long)to) & CACHE_ALIAS) == 0)
 		clear_page(to);
 	else {
-		pgprot_t pgprot = __pgprot(_PAGE_PRESENT | 
+		pgprot_t pgprot = __pgprot(_PAGE_PRESENT |
 					   _PAGE_RW | _PAGE_CACHABLE |
-					   _PAGE_DIRTY | _PAGE_ACCESSED | 
+					   _PAGE_DIRTY | _PAGE_ACCESSED |
 					   _PAGE_HW_SHARED | _PAGE_FLAGS_HARD);
 		unsigned long phys_addr = PHYSADDR(to);
 		unsigned long p3_addr = P3SEG + (address & CACHE_ALIAS);
-		pgd_t *dir = pgd_offset_k(p3_addr);
-		pmd_t *pmd = pmd_offset(dir, p3_addr);
+		pgd_t *pgd = pgd_offset_k(p3_addr);
+		pud_t *pud = pud_offset(pgd, p3_addr);
+		pmd_t *pmd = pmd_offset(pud, p3_addr);
 		pte_t *pte = pte_offset_kernel(pmd, p3_addr);
 		pte_t entry;
 		unsigned long flags;
@@ -68,21 +71,22 @@
  * @address: U0 address to be mapped
  * @page: page (virt_to_page(to))
  */
-void copy_user_page(void *to, void *from, unsigned long address, 
+void copy_user_page(void *to, void *from, unsigned long address,
 		    struct page *page)
 {
 	__set_bit(PG_mapped, &page->flags);
 	if (((address ^ (unsigned long)to) & CACHE_ALIAS) == 0)
 		copy_page(to, from);
 	else {
-		pgprot_t pgprot = __pgprot(_PAGE_PRESENT | 
+		pgprot_t pgprot = __pgprot(_PAGE_PRESENT |
 					   _PAGE_RW | _PAGE_CACHABLE |
-					   _PAGE_DIRTY | _PAGE_ACCESSED | 
+					   _PAGE_DIRTY | _PAGE_ACCESSED |
 					   _PAGE_HW_SHARED | _PAGE_FLAGS_HARD);
 		unsigned long phys_addr = PHYSADDR(to);
 		unsigned long p3_addr = P3SEG + (address & CACHE_ALIAS);
-		pgd_t *dir = pgd_offset_k(p3_addr);
-		pmd_t *pmd = pmd_offset(dir, p3_addr);
+		pgd_t *pgd = pgd_offset_k(p3_addr);
+		pud_t *pud = pud_offset(pgd, p3_addr);
+		pmd_t *pmd = pmd_offset(pud, p3_addr);
 		pte_t *pte = pte_offset_kernel(pmd, p3_addr);
 		pte_t entry;
 		unsigned long flags;
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/pmb.c linux-2.6.17/arch/sh/mm/pmb.c
--- linux-2.6.17-vanilla/arch/sh/mm/pmb.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/pmb.c	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,404 @@
+/*
+ * arch/sh/mm/pmb.c
+ *
+ * Privileged Space Mapping Buffer (PMB) Support.
+ *
+ * Copyright (C) 2005, 2006 Paul Mundt
+ *
+ * P1/P2 Section mapping definitions from map32.h, which was:
+ *
+ *	Copyright 2003 (c) Lineo Solutions,Inc.
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/slab.h>
+#include <linux/bitops.h>
+#include <linux/debugfs.h>
+#include <linux/fs.h>
+#include <linux/seq_file.h>
+#include <linux/err.h>
+#include <asm/system.h>
+#include <asm/uaccess.h>
+#include <asm/pgtable.h>
+#include <asm/mmu.h>
+#include <asm/io.h>
+
+#define NR_PMB_ENTRIES	16
+
+static kmem_cache_t *pmb_cache;
+static unsigned long pmb_map;
+
+static struct pmb_entry pmb_init_map[] = {
+	/* vpn         ppn         flags (ub/sz/c/wt) */
+
+	/* P1 Section Mappings */
+	{ 0x80000000, 0x00000000, PMB_SZ_64M  | PMB_C, },
+	{ 0x84000000, 0x04000000, PMB_SZ_64M  | PMB_C, },
+	{ 0x88000000, 0x08000000, PMB_SZ_128M | PMB_C, },
+	{ 0x90000000, 0x10000000, PMB_SZ_64M  | PMB_C, },
+	{ 0x94000000, 0x14000000, PMB_SZ_64M  | PMB_C, },
+	{ 0x98000000, 0x18000000, PMB_SZ_64M  | PMB_C, },
+
+	/* P2 Section Mappings */
+	{ 0xa0000000, 0x00000000, PMB_UB | PMB_SZ_64M  | PMB_WT, },
+	{ 0xa4000000, 0x04000000, PMB_UB | PMB_SZ_64M  | PMB_WT, },
+	{ 0xa8000000, 0x08000000, PMB_UB | PMB_SZ_128M | PMB_WT, },
+	{ 0xb0000000, 0x10000000, PMB_UB | PMB_SZ_64M  | PMB_WT, },
+	{ 0xb4000000, 0x14000000, PMB_UB | PMB_SZ_64M  | PMB_WT, },
+	{ 0xb8000000, 0x18000000, PMB_UB | PMB_SZ_64M  | PMB_WT, },
+};
+
+static inline unsigned long mk_pmb_entry(unsigned int entry)
+{
+	return (entry & PMB_E_MASK) << PMB_E_SHIFT;
+}
+
+static inline unsigned long mk_pmb_addr(unsigned int entry)
+{
+	return mk_pmb_entry(entry) | PMB_ADDR;
+}
+
+static inline unsigned long mk_pmb_data(unsigned int entry)
+{
+	return mk_pmb_entry(entry) | PMB_DATA;
+}
+
+struct pmb_entry *pmb_alloc(unsigned long vpn, unsigned long ppn,
+			    unsigned long flags)
+{
+	struct pmb_entry *pmbe;
+
+	pmbe = kmem_cache_alloc(pmb_cache, GFP_KERNEL);
+	if (!pmbe)
+		return ERR_PTR(-ENOMEM);
+
+	pmbe->vpn	= vpn;
+	pmbe->ppn	= ppn;
+	pmbe->flags	= flags;
+
+	return pmbe;
+}
+
+void pmb_free(struct pmb_entry *pmbe)
+{
+	kmem_cache_free(pmb_cache, pmbe);
+}
+
+/*
+ * Must be in P2 for __set_pmb_entry()
+ */
+int __set_pmb_entry(unsigned long vpn, unsigned long ppn,
+		    unsigned long flags, int *entry)
+{
+	unsigned int pos = *entry;
+
+	if (unlikely(pos == PMB_NO_ENTRY))
+		pos = find_first_zero_bit(&pmb_map, NR_PMB_ENTRIES);
+
+repeat:
+	if (unlikely(pos > NR_PMB_ENTRIES))
+		return -ENOSPC;
+
+	if (test_and_set_bit(pos, &pmb_map)) {
+		pos = find_first_zero_bit(&pmb_map, NR_PMB_ENTRIES);
+		goto repeat;
+	}
+
+	ctrl_outl(vpn | PMB_V, mk_pmb_addr(pos));
+
+#ifdef CONFIG_SH_WRITETHROUGH
+	/*
+	 * When we are in 32-bit address extended mode, CCR.CB becomes
+	 * invalid, so care must be taken to manually adjust cacheable
+	 * translations.
+	 */
+	if (likely(flags & PMB_C))
+		flags |= PMB_WT;
+#endif
+
+	ctrl_outl(ppn | flags | PMB_V, mk_pmb_data(pos));
+
+	*entry = pos;
+
+	return 0;
+}
+
+int set_pmb_entry(struct pmb_entry *pmbe)
+{
+	int ret;
+
+	jump_to_P2();
+	ret = __set_pmb_entry(pmbe->vpn, pmbe->ppn, pmbe->flags, &pmbe->entry);
+	back_to_P1();
+
+	return ret;
+}
+
+void clear_pmb_entry(struct pmb_entry *pmbe)
+{
+	unsigned int entry = pmbe->entry;
+	unsigned long addr;
+
+	/*
+	 * Don't allow clearing of wired init entries, P1 or P2 access
+	 * without a corresponding mapping in the PMB will lead to reset
+	 * by the TLB.
+	 */
+	if (unlikely(entry < ARRAY_SIZE(pmb_init_map) ||
+		     entry >= NR_PMB_ENTRIES))
+		return;
+
+	jump_to_P2();
+
+	/* Clear V-bit */
+	addr = mk_pmb_addr(entry);
+	ctrl_outl(ctrl_inl(addr) & ~PMB_V, addr);
+
+	addr = mk_pmb_data(entry);
+	ctrl_outl(ctrl_inl(addr) & ~PMB_V, addr);
+
+	back_to_P1();
+
+	clear_bit(entry, &pmb_map);
+}
+
+static DEFINE_SPINLOCK(pmb_list_lock);
+static struct pmb_entry *pmb_list;
+
+static inline void pmb_list_add(struct pmb_entry *pmbe)
+{
+	struct pmb_entry **p, *tmp;
+
+	p = &pmb_list;
+	while ((tmp = *p) != NULL)
+		p = &tmp->next;
+
+	pmbe->next = tmp;
+	*p = pmbe;
+}
+
+static inline void pmb_list_del(struct pmb_entry *pmbe)
+{
+	struct pmb_entry **p, *tmp;
+
+	for (p = &pmb_list; (tmp = *p); p = &tmp->next)
+		if (tmp == pmbe) {
+			*p = tmp->next;
+			return;
+		}
+}
+
+static struct {
+	unsigned long size;
+	int flag;
+} pmb_sizes[] = {
+	{ .size	= 0x20000000, .flag = PMB_SZ_512M, },
+	{ .size = 0x08000000, .flag = PMB_SZ_128M, },
+	{ .size = 0x04000000, .flag = PMB_SZ_64M,  },
+	{ .size = 0x01000000, .flag = PMB_SZ_16M,  },
+};
+
+long pmb_remap(unsigned long vaddr, unsigned long phys,
+	       unsigned long size, unsigned long flags)
+{
+	struct pmb_entry *pmbp;
+	unsigned long wanted;
+	int pmb_flags, i;
+
+	/* Convert typical pgprot value to the PMB equivalent */
+	if (flags & _PAGE_CACHABLE) {
+		if (flags & _PAGE_WT)
+			pmb_flags = PMB_WT;
+		else
+			pmb_flags = PMB_C;
+	} else
+		pmb_flags = PMB_WT | PMB_UB;
+
+	pmbp = NULL;
+	wanted = size;
+
+again:
+	for (i = 0; i < ARRAY_SIZE(pmb_sizes); i++) {
+		struct pmb_entry *pmbe;
+		int ret;
+
+		if (size < pmb_sizes[i].size)
+			continue;
+
+		pmbe = pmb_alloc(vaddr, phys, pmb_flags | pmb_sizes[i].flag);
+		if (IS_ERR(pmbe))
+			return PTR_ERR(pmbe);
+
+		ret = set_pmb_entry(pmbe);
+		if (ret != 0) {
+			pmb_free(pmbe);
+			return -EBUSY;
+		}
+
+		phys	+= pmb_sizes[i].size;
+		vaddr	+= pmb_sizes[i].size;
+		size	-= pmb_sizes[i].size;
+
+		/*
+		 * Link adjacent entries that span multiple PMB entries
+		 * for easier tear-down.
+		 */
+		if (likely(pmbp))
+			pmbp->link = pmbe;
+
+		pmbp = pmbe;
+	}
+
+	if (size >= 0x1000000)
+		goto again;
+
+	return wanted - size;
+}
+
+void pmb_unmap(unsigned long addr)
+{
+	struct pmb_entry **p, *pmbe;
+
+	for (p = &pmb_list; (pmbe = *p); p = &pmbe->next)
+		if (pmbe->vpn == addr)
+			break;
+
+	if (unlikely(!pmbe))
+		return;
+
+	WARN_ON(!test_bit(pmbe->entry, &pmb_map));
+
+	do {
+		struct pmb_entry *pmblink = pmbe;
+
+		clear_pmb_entry(pmbe);
+		pmbe = pmblink->link;
+
+		pmb_free(pmblink);
+	} while (pmbe);
+}
+
+static void pmb_cache_ctor(void *pmb, kmem_cache_t *cachep, unsigned long flags)
+{
+	struct pmb_entry *pmbe = pmb;
+
+	memset(pmb, 0, sizeof(struct pmb_entry));
+
+	spin_lock_irq(&pmb_list_lock);
+
+	pmbe->entry = PMB_NO_ENTRY;
+	pmb_list_add(pmbe);
+
+	spin_unlock_irq(&pmb_list_lock);
+}
+
+static void pmb_cache_dtor(void *pmb, kmem_cache_t *cachep, unsigned long flags)
+{
+	spin_lock_irq(&pmb_list_lock);
+	pmb_list_del(pmb);
+	spin_unlock_irq(&pmb_list_lock);
+}
+
+static int __init pmb_init(void)
+{
+	unsigned int nr_entries = ARRAY_SIZE(pmb_init_map);
+	unsigned int entry;
+
+	BUG_ON(unlikely(nr_entries >= NR_PMB_ENTRIES));
+
+	pmb_cache = kmem_cache_create("pmb", sizeof(struct pmb_entry),
+				      0, 0, pmb_cache_ctor, pmb_cache_dtor);
+	BUG_ON(!pmb_cache);
+
+	jump_to_P2();
+
+	/*
+	 * Ordering is important, P2 must be mapped in the PMB before we
+	 * can set PMB.SE, and P1 must be mapped before we jump back to
+	 * P1 space.
+	 */
+	for (entry = 0; entry < nr_entries; entry++) {
+		struct pmb_entry *pmbe = pmb_init_map + entry;
+
+		__set_pmb_entry(pmbe->vpn, pmbe->ppn, pmbe->flags, &entry);
+	}
+
+	ctrl_outl(0, PMB_IRMCR);
+
+	/* PMB.SE and UB[7] */
+	ctrl_outl((1 << 31) | (1 << 7), PMB_PASCR);
+
+	back_to_P1();
+
+	return 0;
+}
+
+arch_initcall(pmb_init);
+
+#ifdef CONFIG_DEBUG_FS
+static int pmb_seq_show(struct seq_file *file, void *iter)
+{
+	int i;
+
+	seq_printf(file, "V: Valid, C: Cacheable, WT: Write-Through\n"
+			 "CB: Copy-Back, B: Buffered, UB: Unbuffered\n");
+	seq_printf(file, "ety   vpn  ppn  size   flags\n");
+
+	for (i = 0; i < NR_PMB_ENTRIES; i++) {
+		unsigned long addr, data;
+		unsigned int size;
+		char *sz_str = NULL;
+
+		addr = ctrl_inl(mk_pmb_addr(i));
+		data = ctrl_inl(mk_pmb_data(i));
+
+		size = data & PMB_SZ_MASK;
+		sz_str = (size == PMB_SZ_16M)  ? " 16MB":
+			 (size == PMB_SZ_64M)  ? " 64MB":
+			 (size == PMB_SZ_128M) ? "128MB":
+					         "512MB";
+
+		/* 02: V 0x88 0x08 128MB C CB  B */
+		seq_printf(file, "%02d: %c 0x%02lx 0x%02lx %s %c %s %s\n",
+			   i, ((addr & PMB_V) && (data & PMB_V)) ? 'V' : ' ',
+			   (addr >> 24) & 0xff, (data >> 24) & 0xff,
+			   sz_str, (data & PMB_C) ? 'C' : ' ',
+			   (data & PMB_WT) ? "WT" : "CB",
+			   (data & PMB_UB) ? "UB" : " B");
+	}
+
+	return 0;
+}
+
+static int pmb_debugfs_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, pmb_seq_show, NULL);
+}
+
+static struct file_operations pmb_debugfs_fops = {
+	.owner		= THIS_MODULE,
+	.open		= pmb_debugfs_open,
+	.read		= seq_read,
+	.llseek		= seq_lseek,
+	.release	= seq_release,
+};
+
+static int __init pmb_debugfs_init(void)
+{
+	struct dentry *dentry;
+
+	dentry = debugfs_create_file("pmb", S_IFREG | S_IRUGO,
+				     NULL, NULL, &pmb_debugfs_fops);
+	if (IS_ERR(dentry))
+		return PTR_ERR(dentry);
+
+	return 0;
+}
+
+postcore_initcall(pmb_debugfs_init);
+#endif
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/tlb-flush.c linux-2.6.17/arch/sh/mm/tlb-flush.c
--- linux-2.6.17-vanilla/arch/sh/mm/tlb-flush.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/tlb-flush.c	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,132 @@
+/*
+ * TLB flushing operations for SH with an MMU.
+ *
+ *  Copyright (C) 1999  Niibe Yutaka
+ *  Copyright (C) 2003  Paul Mundt
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/mm.h>
+#include <asm/mmu_context.h>
+#include <asm/tlbflush.h>
+
+void flush_tlb_page(struct vm_area_struct *vma, unsigned long page)
+{
+	if (vma->vm_mm && vma->vm_mm->context != NO_CONTEXT) {
+		unsigned long flags;
+		unsigned long asid;
+		unsigned long saved_asid = MMU_NO_ASID;
+
+		asid = vma->vm_mm->context & MMU_CONTEXT_ASID_MASK;
+		page &= PAGE_MASK;
+
+		local_irq_save(flags);
+		if (vma->vm_mm != current->mm) {
+			saved_asid = get_asid();
+			set_asid(asid);
+		}
+		__flush_tlb_page(asid, page);
+		if (saved_asid != MMU_NO_ASID)
+			set_asid(saved_asid);
+		local_irq_restore(flags);
+	}
+}
+
+void flush_tlb_range(struct vm_area_struct *vma, unsigned long start,
+		     unsigned long end)
+{
+	struct mm_struct *mm = vma->vm_mm;
+
+	if (mm->context != NO_CONTEXT) {
+		unsigned long flags;
+		int size;
+
+		local_irq_save(flags);
+		size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
+		if (size > (MMU_NTLB_ENTRIES/4)) { /* Too many TLB to flush */
+			mm->context = NO_CONTEXT;
+			if (mm == current->mm)
+				activate_context(mm);
+		} else {
+			unsigned long asid = mm->context&MMU_CONTEXT_ASID_MASK;
+			unsigned long saved_asid = MMU_NO_ASID;
+
+			start &= PAGE_MASK;
+			end += (PAGE_SIZE - 1);
+			end &= PAGE_MASK;
+			if (mm != current->mm) {
+				saved_asid = get_asid();
+				set_asid(asid);
+			}
+			while (start < end) {
+				__flush_tlb_page(asid, start);
+				start += PAGE_SIZE;
+			}
+			if (saved_asid != MMU_NO_ASID)
+				set_asid(saved_asid);
+		}
+		local_irq_restore(flags);
+	}
+}
+
+void flush_tlb_kernel_range(unsigned long start, unsigned long end)
+{
+	unsigned long flags;
+	int size;
+
+	local_irq_save(flags);
+	size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT;
+	if (size > (MMU_NTLB_ENTRIES/4)) { /* Too many TLB to flush */
+		flush_tlb_all();
+	} else {
+		unsigned long asid = init_mm.context&MMU_CONTEXT_ASID_MASK;
+		unsigned long saved_asid = get_asid();
+
+		start &= PAGE_MASK;
+		end += (PAGE_SIZE - 1);
+		end &= PAGE_MASK;
+		set_asid(asid);
+		while (start < end) {
+			__flush_tlb_page(asid, start);
+			start += PAGE_SIZE;
+		}
+		set_asid(saved_asid);
+	}
+	local_irq_restore(flags);
+}
+
+void flush_tlb_mm(struct mm_struct *mm)
+{
+	/* Invalidate all TLB of this process. */
+	/* Instead of invalidating each TLB, we get new MMU context. */
+	if (mm->context != NO_CONTEXT) {
+		unsigned long flags;
+
+		local_irq_save(flags);
+		mm->context = NO_CONTEXT;
+		if (mm == current->mm)
+			activate_context(mm);
+		local_irq_restore(flags);
+	}
+}
+
+void flush_tlb_all(void)
+{
+	unsigned long flags, status;
+
+	/*
+	 * Flush all the TLB.
+	 *
+	 * Write to the MMU control register's bit:
+	 *	TF-bit for SH-3, TI-bit for SH-4.
+	 *      It's same position, bit #2.
+	 */
+	local_irq_save(flags);
+	status = ctrl_inl(MMUCR);
+	status |= 0x04;
+	ctrl_outl(status, MMUCR);
+	ctrl_barrier();
+	local_irq_restore(flags);
+}
diff -ruN linux-2.6.17-vanilla/arch/sh/mm/tlb-sh4.c linux-2.6.17/arch/sh/mm/tlb-sh4.c
--- linux-2.6.17-vanilla/arch/sh/mm/tlb-sh4.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/mm/tlb-sh4.c	2006-07-12 16:54:23.000000000 +0000
@@ -36,7 +36,6 @@
 	unsigned long vpn;
 	struct page *page;
 	unsigned long pfn;
-	unsigned long ptea;
 
 	/* Ptrace may call this routine. */
 	if (vma && current->active_mm != vma->vm_mm)
@@ -59,10 +58,11 @@
 	ctrl_outl(vpn, MMU_PTEH);
 
 	pteval = pte_val(pte);
+
 	/* Set PTEA register */
-	/* TODO: make this look less hacky */
-	ptea = ((pteval >> 28) & 0xe) | (pteval & 0x1);
-	ctrl_outl(ptea, MMU_PTEA);
+	if (cpu_data->flags & CPU_HAS_PTEA)
+		/* TODO: make this look less hacky */
+		ctrl_outl(((pteval >> 28) & 0xe) | (pteval & 0x1), MMU_PTEA);
 
 	/* Set PTEL register */
 	pteval &= _PAGE_FLAGS_HARDWARE_MASK; /* drop software flags */
diff -ruN linux-2.6.17-vanilla/arch/sh/oprofile/CVS/Entries linux-2.6.17/arch/sh/oprofile/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/oprofile/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/oprofile/CVS/Entries	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,5 @@
+/Kconfig/1.1/Sun Oct 12 21:34:48 2003//
+/Makefile/1.4/Sun Aug 21 23:08:54 2005//
+/op_model_null.c/1.2/Wed Mar  2 13:02:56 2005//
+/op_model_sh7750.c/1.2/Wed Mar  2 13:02:57 2005/-ko/
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/oprofile/CVS/Repository linux-2.6.17/arch/sh/oprofile/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/oprofile/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/oprofile/CVS/Repository	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/oprofile
diff -ruN linux-2.6.17-vanilla/arch/sh/oprofile/CVS/Root linux-2.6.17/arch/sh/oprofile/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/oprofile/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/oprofile/CVS/Root	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/oprofile/Makefile linux-2.6.17/arch/sh/oprofile/Makefile
--- linux-2.6.17-vanilla/arch/sh/oprofile/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/oprofile/Makefile	2006-07-12 16:54:23.000000000 +0000
@@ -7,7 +7,11 @@
 		timer_int.o )
 
 profdrvr-y				:= op_model_null.o
+
+# SH7750-style performance counters exist across 7750/7750S and 7091.
+profdrvr-$(CONFIG_CPU_SUBTYPE_SH7750S)	:= op_model_sh7750.o
 profdrvr-$(CONFIG_CPU_SUBTYPE_SH7750)	:= op_model_sh7750.o
+profdrvr-$(CONFIG_CPU_SUBTYPE_SH7091)	:= op_model_sh7750.o
 
 oprofile-y				:= $(DRIVER_OBJS) $(profdrvr-y)
 
diff -ruN linux-2.6.17-vanilla/arch/sh/tools/CVS/Entries linux-2.6.17/arch/sh/tools/CVS/Entries
--- linux-2.6.17-vanilla/arch/sh/tools/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/tools/CVS/Entries	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,4 @@
+/Makefile/1.2/Fri Sep 24 15:12:43 2004//
+/gen-mach-types/1.1/Fri Sep 24 15:12:45 2004/-ko/
+/mach-types/1.15/Thu Jul  6 12:38:12 2006//
+D
diff -ruN linux-2.6.17-vanilla/arch/sh/tools/CVS/Repository linux-2.6.17/arch/sh/tools/CVS/Repository
--- linux-2.6.17-vanilla/arch/sh/tools/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/tools/CVS/Repository	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+linux/arch/sh/tools
diff -ruN linux-2.6.17-vanilla/arch/sh/tools/CVS/Root linux-2.6.17/arch/sh/tools/CVS/Root
--- linux-2.6.17-vanilla/arch/sh/tools/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/arch/sh/tools/CVS/Root	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/arch/sh/tools/mach-types linux-2.6.17/arch/sh/tools/mach-types
--- linux-2.6.17-vanilla/arch/sh/tools/mach-types	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/arch/sh/tools/mach-types	2006-07-12 16:54:23.000000000 +0000
@@ -7,7 +7,7 @@
 #
 SE			SH_SOLUTION_ENGINE
 7751SE			SH_7751_SOLUTION_ENGINE		
-7300SE			SH_7300_SOLUTION_ENGINE
+7300SE			SH_7300_SOLUTION_ENGINE		
 73180SE			SH_73180_SOLUTION_ENGINE
 7751SYSTEMH		SH_7751_SYSTEMH
 HP6XX			SH_HP6XX
@@ -25,4 +25,7 @@
 EDOSK7705		SH_EDOSK7705
 SH4202_MICRODEV		SH_SH4202_MICRODEV
 SH03			SH_SH03
-
+LANDISK			SH_LANDISK
+R7780RP			SH_R7780RP
+R7780MP			SH_R7780MP
+TITAN			SH_TITAN
diff -ruN linux-2.6.17-vanilla/drivers/CVS/Entries linux-2.6.17/drivers/CVS/Entries
--- linux-2.6.17-vanilla/drivers/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/CVS/Entries	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,12 @@
+D/char////
+D/i2c////
+D/ide////
+D/input////
+D/mtd////
+D/net////
+D/pcmcia////
+D/serial////
+D/sh////
+D/usb////
+D/video////
+D/rtc////
diff -ruN linux-2.6.17-vanilla/drivers/CVS/Repository linux-2.6.17/drivers/CVS/Repository
--- linux-2.6.17-vanilla/drivers/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/CVS/Repository	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers
diff -ruN linux-2.6.17-vanilla/drivers/CVS/Root linux-2.6.17/drivers/CVS/Root
--- linux-2.6.17-vanilla/drivers/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/CVS/Root	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/char/CVS/Entries linux-2.6.17/drivers/char/CVS/Entries
--- linux-2.6.17-vanilla/drivers/char/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/char/CVS/Entries	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,8 @@
+/rs5c313_rtc.c/1.1/Thu Sep 29 07:19:20 2005/-ko/
+/rtc.c/1.8/Mon Mar 27 21:06:14 2006/-ko/
+/rtc9701_rtc.c/1.2/Mon May 30 06:24:28 2005/-ko/
+/sh03rtc.c/1.3/Wed Jan 18 05:37:19 2006/-ko/
+D/watchdog////
+/Kconfig/1.15/Wed Jul  5 14:50:58 2006/-ko/
+/Makefile/1.50/Wed Jul  5 14:50:59 2006/-ko/
+/sysrq.c/1.17/Wed Jul  5 14:50:59 2006/-ko/
diff -ruN linux-2.6.17-vanilla/drivers/char/CVS/Repository linux-2.6.17/drivers/char/CVS/Repository
--- linux-2.6.17-vanilla/drivers/char/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/char/CVS/Repository	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/char
diff -ruN linux-2.6.17-vanilla/drivers/char/CVS/Root linux-2.6.17/drivers/char/CVS/Root
--- linux-2.6.17-vanilla/drivers/char/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/char/CVS/Root	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/char/Kconfig linux-2.6.17/drivers/char/Kconfig
--- linux-2.6.17-vanilla/drivers/char/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/char/Kconfig	2006-07-12 16:54:23.000000000 +0000
@@ -737,6 +737,22 @@
 	  To compile this driver as a module, choose M here: the
 	  module will be called rtc.
 
+config SH03_RTC
+	tristate "Enhanced Real Time Clock (SH03) Support"
+	depends on SH_SH03
+
+config RS5C313_RTC
+	tristate "RICHO RS5C313 RTC Support for LANDISK"
+	depends on SH_LANDISK
+	help
+	  Selecting this option will support RICHO RS5C313 RTC for LANDISK.
+
+config RTC_9701JE
+	tristate "EPSON RTC-9701JE support"
+	depends on SH_RTS7751R2D
+	help
+	  Selecting this option will support EPSON RTC-9701JE.
+
 config SGI_DS1286
 	tristate "SGI DS1286 RTC support"
 	depends on SGI_IP22
diff -ruN linux-2.6.17-vanilla/drivers/char/Makefile linux-2.6.17/drivers/char/Makefile
--- linux-2.6.17-vanilla/drivers/char/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/char/Makefile	2006-07-12 16:54:23.000000000 +0000
@@ -67,6 +67,9 @@
 obj-$(CONFIG_SGI_IP27_RTC)	+= ip27-rtc.o
 obj-$(CONFIG_DS1302)		+= ds1302.o
 obj-$(CONFIG_S3C2410_RTC)	+= s3c2410-rtc.o
+obj-$(CONFIG_RTC_9701JE)	+= rtc9701_rtc.o
+obj-$(CONFIG_RS5C313_RTC)	+= rs5c313_rtc.o
+obj-$(CONFIG_SH03_RTC)		+= sh03rtc.o
 ifeq ($(CONFIG_GENERIC_NVRAM),y)
   obj-$(CONFIG_NVRAM)	+= generic_nvram.o
 else
diff -ruN linux-2.6.17-vanilla/drivers/char/rs5c313_rtc.c linux-2.6.17/drivers/char/rs5c313_rtc.c
--- linux-2.6.17-vanilla/drivers/char/rs5c313_rtc.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/char/rs5c313_rtc.c	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,855 @@
+/*
+ * RICHO RS5C313 Real Time Clock interface for Linux 
+ *
+ *  2005-09-19 modifed by kogiidena  
+ *
+ *  Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org>
+ *  Copyright (C) 1999 Tetsuya Okada & Niibe Yutaka
+ *
+ * Based on code written by Paul Gortmaker.
+ *  Copyright (C) 1996 Paul Gortmaker
+ *	
+ *  This driver allows use of the real time clock (built into
+ *  nearly all computers) from user space. It exports the /dev/rtc
+ *  interface supporting various ioctl() and also the
+ *  /proc/driver/rtc pseudo-file for status information.
+ *
+ *  The ioctls can be used to set the interrupt behaviour and
+ *  generation rate from the RTC via IRQ 8. Then the /dev/rtc
+ *  interface can be used to make use of these timer interrupts,
+ *  be they interval or alarm based.
+ *
+ *  The /dev/rtc interface will block on reads until an interrupt
+ *  has been received. If a RTC interrupt has already happened,
+ *  it will output an unsigned long and then block. The output value
+ *  contains the interrupt status in the low byte and the number of
+ *  interrupts since the last read in the remaining high bytes. The 
+ *  /dev/rtc interface can also be used with the select(2) call.
+ *
+ *  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.
+ *
+ *  Based on other minimal char device drivers, like Alan's
+ *  watchdog, Ted's random, etc. etc.
+ *
+ *	1.07	Paul Gortmaker.
+ *	1.08	Miquel van Smoorenburg: disallow certain things on the
+ *		DEC Alpha as the CMOS clock is also used for other things.
+ *	1.09	Nikita Schmidt: epoch support and some Alpha cleanup.
+ *	1.09a	Pete Zaitcev: Sun SPARC
+ *	1.09b	Jeff Garzik: Modularize, init cleanup
+ *	1.09c	Jeff Garzik: SMP cleanup
+ *	1.10    Paul Barton-Davis: add support for async I/O
+ *	1.10a	Andrea Arcangeli: Alpha updates
+ *	1.10b	Andrew Morton: SMP lock fix
+ *	1.10c	Cesar Barros: SMP locking fixes and cleanup
+ *	1.10d	Paul Gortmaker: delete paranoia check in rtc_exit
+ *	1.10e	Maciej W. Rozycki: Handle DECstation's year weirdness.
+ *      1.11    Takashi Iwai: Kernel access functions
+ *			      rtc_register/rtc_unregister/rtc_control
+ *      1.11a   Daniele Bellucci: Audit create_proc_read_entry in rtc_init
+ *	1.12	Venkatesh Pallipadi: Hooks for emulating rtc on HPET base-timer
+ *		CONFIG_HPET_EMULATE_RTC
+ *
+ */
+
+#define RTC_VERSION		"1.12"
+
+#include <linux/config.h>
+#include <linux/delay.h>
+#include <linux/bcd.h> 
+#include <linux/interrupt.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/miscdevice.h>
+#include <linux/ioport.h>
+#include <linux/fcntl.h>
+#include <linux/mc146818rtc.h>
+#include <linux/init.h>
+#include <linux/poll.h>
+#include <linux/proc_fs.h>
+#include <linux/seq_file.h>
+#include <linux/spinlock.h>
+#include <linux/sysctl.h>
+#include <linux/wait.h>
+#include <asm/current.h>
+#include <asm/uaccess.h>
+#include <asm/system.h>
+#include <asm/io.h>
+
+
+#ifndef CONFIG_SH_LANDISK
+#error  rs5c313 read and write function not defined
+#endif
+
+#ifdef CONFIG_SH_LANDISK
+/*****************************************************/
+/* LANDISK dependence part of RS5C313                */
+/*****************************************************/
+
+#define SCSMR1	0xFFE00000
+#define SCSCR1	0xFFE00008
+#define SCSMR1_CA	0x80
+#define SCSCR1_CKE	0x03
+#define SCSPTR1	0xFFE0001C
+#define SCSPTR1_EIO	0x80
+#define SCSPTR1_SPB1IO	0x08
+#define SCSPTR1_SPB1DT	0x04
+#define SCSPTR1_SPB0IO	0x02
+#define SCSPTR1_SPB0DT	0x01
+
+#define SDA_OEN	SCSPTR1_SPB1IO
+#define SDA	SCSPTR1_SPB1DT
+#define SCL_OEN	SCSPTR1_SPB0IO
+#define SCL	SCSPTR1_SPB0DT
+
+/* RICOH RS5C313 CE port */
+#define RS5C313_CE		0xB0000003
+
+/* RICOH RS5C313 CE port bit */
+#define RS5C313_CE_RTCCE	0x02
+
+/* SCSPTR1 data */
+unsigned char scsptr1_data;
+
+#define RS5C313_CEENABLE    ctrl_outb(RS5C313_CE_RTCCE, RS5C313_CE);
+#define RS5C313_CEDISABLE   ctrl_outb(0x00, RS5C313_CE)
+#define RS5C313_MISCOP      ctrl_outb(0x02, 0xB0000008)
+
+static void rs5c313_initialize(void)
+{
+	/* Set SCK as I/O port and Initialize SCSPTR1 data & I/O port. */
+	ctrl_outb(ctrl_inb(SCSMR1) & ~SCSMR1_CA, SCSMR1);
+	ctrl_outb(ctrl_inb(SCSCR1) & ~SCSCR1_CKE, SCSCR1);
+
+	/* And Initialize SCL for RS5C313 clock */
+	scsptr1_data = ctrl_inb(SCSPTR1) | SCL;	/* SCL:H */
+	ctrl_outb(scsptr1_data, SCSPTR1);
+	scsptr1_data = ctrl_inb(SCSPTR1) | SCL_OEN;	/* SCL output enable */
+	ctrl_outb(scsptr1_data, SCSPTR1);
+	RS5C313_CEDISABLE;	/* CE:L */
+}
+
+static void rs5c313_write(unsigned char data)
+{
+	int i;
+
+	for (i = 0; i < 8; i++) {
+		/* SDA:Write Data */
+		scsptr1_data = (scsptr1_data & ~SDA) 
+		             | ((((0x80 >> i) & data) >> (7 - i)) << 2);  
+		ctrl_outb(scsptr1_data, SCSPTR1);
+		if (i == 0) {
+			scsptr1_data |= SDA_OEN;	/* SDA:output enable */
+			ctrl_outb(scsptr1_data, SCSPTR1);
+		}
+		ndelay(700);
+		scsptr1_data &= ~SCL;	/* SCL:L */
+		ctrl_outb(scsptr1_data, SCSPTR1);
+		ndelay(700);
+		scsptr1_data |= SCL;	/* SCL:H */
+		ctrl_outb(scsptr1_data, SCSPTR1);
+	}
+
+	scsptr1_data &= ~SDA_OEN;	/* SDA:output disable */
+	ctrl_outb(scsptr1_data, SCSPTR1);
+
+}
+
+static unsigned char rs5c313_read_data(void)
+{
+	int i;
+	unsigned char data = 0;
+
+	for (i = 0; i < 8; i++) {
+		ndelay(700);
+		/* SDA:Read Data */
+		data |= ((ctrl_inb(SCSPTR1) & SDA) >> 2) << (7 - i);
+		scsptr1_data &= ~SCL;	/* SCL:L */
+		ctrl_outb(scsptr1_data, SCSPTR1);
+		ndelay(700);
+		scsptr1_data |= SCL;	/* SCL:H */
+		ctrl_outb(scsptr1_data, SCSPTR1);
+	}
+	return data & 0x0F;
+}
+
+#endif  /* CONFIG_SH_LANDISK */
+
+
+/*****************************************************/
+/* machine independence part of RS5C313              */
+/*****************************************************/
+
+/* RICOH RS5C313 address */
+#define RS5C313_ADDR_SEC	0x00
+#define RS5C313_ADDR_SEC10	0x01
+#define RS5C313_ADDR_MIN	0x02
+#define RS5C313_ADDR_MIN10	0x03
+#define RS5C313_ADDR_HOUR	0x04
+#define RS5C313_ADDR_HOUR10	0x05
+#define RS5C313_ADDR_WEEK	0x06
+#define RS5C313_ADDR_INTINTVREG	0x07
+#define RS5C313_ADDR_DAY	0x08
+#define RS5C313_ADDR_DAY10	0x09
+#define RS5C313_ADDR_MON	0x0A
+#define RS5C313_ADDR_MON10	0x0B
+#define RS5C313_ADDR_YEAR	0x0C
+#define RS5C313_ADDR_YEAR10	0x0D
+#define RS5C313_ADDR_CNTREG	0x0E
+#define RS5C313_ADDR_TESTREG	0x0F
+
+/* RICOH RS5C313 control register */
+#define RS5C313_CNTREG_ADJ_BSY	0x01
+#define RS5C313_CNTREG_WTEN_XSTP	0x02
+#define RS5C313_CNTREG_12_24	0x04
+#define RS5C313_CNTREG_CTFG	0x08
+
+/* RICOH RS5C313 test register */
+#define RS5C313_TESTREG_TEST	0x01
+
+/* RICOH RS5C313 control bit */
+#define RS5C313_CNTBIT_READ	0x40
+#define RS5C313_CNTBIT_AD	0x20
+#define RS5C313_CNTBIT_DT	0x10
+
+static unsigned char rs5c313_read_reg(unsigned char addr)
+{
+
+	rs5c313_write(addr | RS5C313_CNTBIT_READ | RS5C313_CNTBIT_AD);
+	return rs5c313_read_data();
+
+}
+
+static void rs5c313_write_reg(unsigned char addr, unsigned char data)
+{
+        data &= 0x0f;
+	rs5c313_write(addr | RS5C313_CNTBIT_AD);
+	rs5c313_write(data | RS5C313_CNTBIT_DT);
+	return;
+}
+
+#define rs5c313_read_cntreg()       rs5c313_read_reg(RS5C313_ADDR_CNTREG)
+#define rs5c313_write_cntreg(data)  rs5c313_write_reg(RS5C313_ADDR_CNTREG,data)
+#define rs5c313_write_intintvreg(data) rs5c313_write_reg(RS5C313_ADDR_INTINTVREG,data)
+
+
+static void rs5c313_get_cur_time(unsigned char *sec, unsigned char *min,
+				 unsigned char *hr,
+				 unsigned char *day, unsigned char *mon,
+				 unsigned char *yr)
+{
+
+	while (1) {
+	        RS5C313_CEENABLE;	/* CE:H */
+
+		/* Initialize control reg. 24 hour */
+		rs5c313_write_cntreg(0x04);
+
+		if (!(rs5c313_read_cntreg() & RS5C313_CNTREG_ADJ_BSY))
+			break;
+		RS5C313_MISCOP;
+		RS5C313_CEDISABLE;
+		ndelay(700);	/* CE:L */
+	}
+
+	*sec = rs5c313_read_reg(RS5C313_ADDR_SEC);
+	*sec |= (rs5c313_read_reg(RS5C313_ADDR_SEC10) << 4);
+
+	*min = rs5c313_read_reg(RS5C313_ADDR_MIN);
+	*min |= (rs5c313_read_reg(RS5C313_ADDR_MIN10) << 4);
+
+	*hr = rs5c313_read_reg(RS5C313_ADDR_HOUR);
+	*hr |= (rs5c313_read_reg(RS5C313_ADDR_HOUR10) << 4);
+
+	*day = rs5c313_read_reg(RS5C313_ADDR_DAY);
+	*day |= (rs5c313_read_reg(RS5C313_ADDR_DAY10) << 4);
+
+	*mon = rs5c313_read_reg(RS5C313_ADDR_MON);
+	*mon |= (rs5c313_read_reg(RS5C313_ADDR_MON10) << 4);
+
+	*yr = rs5c313_read_reg(RS5C313_ADDR_YEAR);
+	*yr |= (rs5c313_read_reg(RS5C313_ADDR_YEAR10) << 4);
+
+	RS5C313_CEDISABLE;
+	ndelay(700);		/* CE:L */
+
+}
+
+static void rs5c313_set_cur_time(unsigned char sec, unsigned char min,
+				 unsigned char hr,
+				 unsigned char day, unsigned char mon,
+				 unsigned char yr)
+{
+
+	/* bysy check. */
+	while (1) {
+	        RS5C313_CEENABLE;  /* CE:H */
+
+		/* Initialize control reg. 24 hour */
+		rs5c313_write_cntreg(0x04);
+
+		if (!(rs5c313_read_cntreg() & RS5C313_CNTREG_ADJ_BSY))
+			break;
+		RS5C313_MISCOP;
+		RS5C313_CEDISABLE;
+		ndelay(700);	/* CE:L */
+	}
+
+	rs5c313_write_reg(RS5C313_ADDR_SEC, sec);
+	rs5c313_write_reg(RS5C313_ADDR_SEC10, (sec >> 4));
+
+	rs5c313_write_reg(RS5C313_ADDR_MIN, min);
+	rs5c313_write_reg(RS5C313_ADDR_MIN10, (min >> 4));
+
+	rs5c313_write_reg(RS5C313_ADDR_HOUR, hr);
+	rs5c313_write_reg(RS5C313_ADDR_HOUR10, (hr >> 4));
+
+	rs5c313_write_reg(RS5C313_ADDR_DAY, day);
+	rs5c313_write_reg(RS5C313_ADDR_DAY10,(day >> 4));
+
+	rs5c313_write_reg(RS5C313_ADDR_MON, mon);
+	rs5c313_write_reg(RS5C313_ADDR_MON10, (mon >> 4));
+
+	rs5c313_write_reg(RS5C313_ADDR_YEAR, yr);
+	rs5c313_write_reg(RS5C313_ADDR_YEAR10, (yr >> 4));
+
+	RS5C313_CEDISABLE;
+	ndelay(700);		/* CE:H */
+
+}
+
+unsigned long rs5c313_get_cmos_time(
+        unsigned int *BCD_yr,  unsigned int *BCD_mon,
+	unsigned int *BCD_day, unsigned int *BCD_hr,
+	unsigned int *BCD_min, unsigned int *BCD_sec)
+{
+
+	unsigned int sec128, sec, min, hr, day, mon, yr, yr100;
+	int clkstop = 0;
+
+	/* Set SCK as I/O port and Initialize SCSPTR1 data & I/O port. */
+	/* And Initialize SCL for RS5C313 clock */
+	rs5c313_initialize();
+
+      again:
+	/* check XSTP bit for clock stoped */
+	RS5C313_CEENABLE;	/* CE:H */
+	if (rs5c313_read_cntreg() & RS5C313_CNTREG_WTEN_XSTP) {
+		/* INT interval reg. OFF */
+		rs5c313_write_intintvreg(0x00);
+		/* Initialize control reg. 24 hour & adjust */
+		rs5c313_write_cntreg(0x07);
+		/* bysy check. */
+		while (rs5c313_read_cntreg() & RS5C313_CNTREG_ADJ_BSY)
+			RS5C313_MISCOP;
+		/* Initialize control reg. 24 hour */
+		rs5c313_write_cntreg(0x04);
+		clkstop = 1;
+	} else {
+		clkstop = 0;
+	}
+	RS5C313_CEDISABLE;
+	ndelay(700);		/* CE:L */
+
+	/* Get current time. */
+	sec = 0;
+	min = 0;
+	hr = 0;
+	day = 0;
+	mon = 0;
+	yr = 0;
+	rs5c313_get_cur_time((unsigned char *)&sec,
+			     (unsigned char *)&min, (unsigned char *)&hr,
+			     (unsigned char *)&day,
+			     (unsigned char *)&mon, (unsigned char *)&yr);
+
+	/* S-3531A count year from 2000 to 2099. */
+	yr100 = 0x20;
+	/* S-3531A can't get sec128. */
+	sec128 = 0;
+
+	*BCD_yr = yr;
+	*BCD_mon = mon;
+	*BCD_day = day;
+	*BCD_hr = hr;
+	*BCD_min = min;
+	*BCD_sec = sec;
+
+	yr100 = BCD2BIN(yr100);
+	yr    = BCD2BIN(yr);
+	mon   = BCD2BIN(mon);
+	day   = BCD2BIN(day);
+	hr    = BCD2BIN(hr);
+	min   = BCD2BIN(min);
+	sec   = BCD2BIN(sec);
+
+	if (yr > 99 || mon < 1 || mon > 12 || day > 31 || day < 1 ||
+	    hr > 23 || min > 59 || sec > 59 || clkstop) {
+		printk(KERN_ERR
+		       "RICHO RS5C313: invalid value, resetting to 1 Jan 2000\n");
+		/* Reset S-3531A set (20)00year/01month/01day  */
+		/*                    00hour 00minute 00second */
+		sec = 0;
+		min = 0;
+		hr  = 0;
+		day = 1;
+		mon = 1;
+		yr = 00;
+		rs5c313_set_cur_time((unsigned char)sec,
+				     (unsigned char)min, (unsigned char)hr,
+				     (unsigned char)day,
+				     (unsigned char)mon, (unsigned char)yr);
+
+		goto again;
+	}
+
+	return mktime(yr100 * 100 + yr, mon, day, hr, min, sec);
+}
+
+void rs5c313_set_cmos_time(unsigned int BCD_yr,  unsigned int BCD_mon,
+			   unsigned int BCD_day, unsigned int BCD_hr,
+			   unsigned int BCD_min, unsigned int BCD_sec)
+{
+
+	rs5c313_set_cur_time((unsigned char)BCD_sec,
+			     (unsigned char)BCD_min,
+			     (unsigned char)BCD_hr,
+			     (unsigned char)BCD_day,
+			     (unsigned char)BCD_mon, (unsigned char)BCD_yr);
+
+}
+
+/*****************************************************/
+/* machine independence part of RTC driver           */
+/*****************************************************/
+
+#define RTC_IO_EXTENT	0x8
+
+static struct fasync_struct *rtc_async_queue;
+static DECLARE_WAIT_QUEUE_HEAD(rtc_wait);
+static ssize_t rtc_read(struct file *file, char __user *buf,
+			size_t count, loff_t *ppos);
+static int rtc_ioctl(struct inode *inode, struct file *file,
+		     unsigned int cmd, unsigned long arg);
+static int rtc_proc_open(struct inode *inode, struct file *file);
+
+/*
+ *	Bits in rtc_status. (6 bits of room for future expansion)
+ */
+
+#define RTC_IS_OPEN		0x01	/* means /dev/rtc is in use	*/
+#define RTC_TIMER_ON		0x02	/* missed irq timer active	*/
+
+/*
+ * rtc_status is never changed by rtc_interrupt, and ioctl/open/close is
+ * protected by the big kernel lock. However, ioctl can still disable the timer
+ * in rtc_status and then with del_timer after the interrupt has read
+ * rtc_status but before mod_timer is called, which would then reenable the
+ * timer (but you would need to have an awful timing before you'd trip on it)
+ */
+static unsigned long rtc_status = 0;	/* bitmapped status byte.	*/
+static unsigned long rtc_freq = 0;	/* Current periodic IRQ rate	*/
+static unsigned long rtc_irq_data = 0;	/* our output to the world	*/
+static unsigned long rtc_max_user_freq = 64; /* > this, need CAP_SYS_RESOURCE */
+
+/*
+ *	If this driver ever becomes modularised, it will be really nice
+ *	to make the epoch retain its value across module reload...
+ */
+
+static unsigned long epoch = 1900;	/* year corresponding to 0x00	*/
+
+static const unsigned char days_in_mo[] = 
+{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
+
+/*
+ * sysctl-tuning infrastructure.
+ */
+static ctl_table rtc_table[] = {
+	{
+		.ctl_name	= 1,
+		.procname	= "max-user-freq",
+		.data		= &rtc_max_user_freq,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{ .ctl_name = 0 }
+};
+
+static ctl_table rtc_root[] = {
+	{
+		.ctl_name	= 1,
+		.procname	= "rtc",
+		.maxlen		= 0,
+		.mode		= 0555,
+		.child		= rtc_table,
+	},
+	{ .ctl_name = 0 }
+};
+
+static ctl_table dev_root[] = {
+	{
+		.ctl_name	= CTL_DEV,
+		.procname	= "dev",
+		.maxlen		= 0,
+		.mode		= 0555,
+		.child		= rtc_root,
+	},
+	{ .ctl_name = 0 }
+};
+
+static struct ctl_table_header *sysctl_header;
+
+static int __init init_sysctl(void)
+{
+    sysctl_header = register_sysctl_table(dev_root, 0);
+    return 0;
+}
+
+static void __exit cleanup_sysctl(void)
+{
+    unregister_sysctl_table(sysctl_header);
+}
+
+/*
+ *	Now all the various file operations that we export.
+ */
+
+static ssize_t rtc_read(struct file *file, char __user *buf,
+			size_t count, loff_t *ppos)
+{
+	return -EIO;
+}
+
+static int rtc_do_ioctl(unsigned int cmd, unsigned long arg, int kernel)
+{
+	struct rtc_time wtime; 
+
+	switch (cmd) {
+	case RTC_RD_TIME:	/* Read the time/date from RTC	*/
+	{
+		memset(&wtime, 0, sizeof(struct rtc_time));
+		rtc_get_rtc_time(&wtime);
+		break;
+	}
+	case RTC_SET_TIME:	/* Set the RTC */
+	{
+		struct rtc_time rtc_tm;
+		unsigned char mon, day, hrs, min, sec, leap_yr;
+		unsigned int yrs;
+
+		if (!capable(CAP_SYS_TIME))
+			return -EACCES;
+
+		if (copy_from_user(&rtc_tm, (struct rtc_time __user *)arg,
+				   sizeof(struct rtc_time)))
+			return -EFAULT;
+
+		yrs = rtc_tm.tm_year + 1900;
+		mon = rtc_tm.tm_mon + 1;   /* tm_mon starts at zero */
+		day = rtc_tm.tm_mday;
+		hrs = rtc_tm.tm_hour;
+		min = rtc_tm.tm_min;
+		sec = rtc_tm.tm_sec;
+
+		if (yrs < 1970)
+			return -EINVAL;
+
+		leap_yr = ((!(yrs % 4) && (yrs % 100)) || !(yrs % 400));
+
+		if ((mon > 12) || (day == 0))
+			return -EINVAL;
+
+		if (day > (days_in_mo[mon] + ((mon == 2) && leap_yr)))
+			return -EINVAL;
+			
+		if ((hrs >= 24) || (min >= 60) || (sec >= 60))
+			return -EINVAL;
+
+		if ((yrs -= epoch) > 255)    /* They are unsigned */
+			return -EINVAL;
+
+		/* These limits and adjustments are independent of
+		 * whether the chip is in binary mode or not.
+		 */
+		if (yrs > 169) {
+			return -EINVAL;
+		}
+		if (yrs >= 100)
+			yrs -= 100;
+
+		sec = BIN2BCD(sec);
+		min = BIN2BCD(min);
+		hrs = BIN2BCD(hrs);
+		day = BIN2BCD(day);
+		mon = BIN2BCD(mon);
+		yrs = BIN2BCD(yrs);
+
+		spin_lock_irq(&rtc_lock);
+		rs5c313_set_cmos_time(yrs, mon, day, hrs, min, sec);
+		spin_unlock_irq(&rtc_lock);
+
+		return 0;
+	}
+	case RTC_EPOCH_READ:	/* Read the epoch.	*/
+	{
+		return put_user (epoch, (unsigned long __user *)arg);
+	}
+	case RTC_EPOCH_SET:	/* Set the epoch.	*/
+	{
+		/* 
+		 * There were no RTC clocks before 1900.
+		 */
+		if (arg < 1900)
+			return -EINVAL;
+
+		if (!capable(CAP_SYS_TIME))
+			return -EACCES;
+
+		epoch = arg;
+		return 0;
+	}
+	default:
+		return -ENOTTY;
+	}
+	return copy_to_user((void __user *)arg, &wtime, sizeof wtime) ? -EFAULT : 0;
+}
+
+static int rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
+		     unsigned long arg)
+{
+	return rtc_do_ioctl(cmd, arg, 0);
+}
+
+/*
+ *	We enforce only one user at a time here with the open/close.
+ *	Also clear the previous interrupt data on an open, and clean
+ *	up things on a close.
+ */
+
+/* We use rtc_lock to protect against concurrent opens. So the BKL is not
+ * needed here. Or anywhere else in this driver. */
+static int rtc_open(struct inode *inode, struct file *file)
+{
+	spin_lock_irq (&rtc_lock);
+
+	if(rtc_status & RTC_IS_OPEN)
+		goto out_busy;
+
+	rtc_status |= RTC_IS_OPEN;
+
+	rtc_irq_data = 0;
+	spin_unlock_irq (&rtc_lock);
+	return 0;
+
+out_busy:
+	spin_unlock_irq (&rtc_lock);
+	return -EBUSY;
+}
+
+static int rtc_fasync (int fd, struct file *filp, int on)
+
+{
+	return fasync_helper (fd, filp, on, &rtc_async_queue);
+}
+
+static int rtc_release(struct inode *inode, struct file *file)
+{
+	spin_lock_irq (&rtc_lock);
+	rtc_irq_data = 0;
+	rtc_status &= ~RTC_IS_OPEN;
+	spin_unlock_irq (&rtc_lock);
+	return 0;
+}
+
+
+/*
+ * exported stuffs
+ */
+
+EXPORT_SYMBOL(rtc_register);
+EXPORT_SYMBOL(rtc_unregister);
+EXPORT_SYMBOL(rtc_control);
+
+int rtc_register(rtc_task_t *task)
+{
+	return -EIO;
+}
+
+int rtc_unregister(rtc_task_t *task)
+{
+	return -EIO;
+}
+
+int rtc_control(rtc_task_t *task, unsigned int cmd, unsigned long arg)
+{
+	return -EIO;
+}
+
+
+/*
+ *	The various file operations we support.
+ */
+
+static struct file_operations rtc_fops = {
+	.owner		= THIS_MODULE,
+	.llseek		= no_llseek,
+	.read		= rtc_read,
+	.ioctl		= rtc_ioctl,
+	.open		= rtc_open,
+	.release	= rtc_release,
+	.fasync		= rtc_fasync,
+};
+
+static struct miscdevice rtc_dev = {
+	.minor		= RTC_MINOR,
+	.name		= "rtc",
+	.fops		= &rtc_fops,
+};
+
+static struct file_operations rtc_proc_fops = {
+	.owner = THIS_MODULE,
+	.open = rtc_proc_open,
+	.read  = seq_read,
+	.llseek = seq_lseek,
+	.release = single_release,
+};
+
+
+static int __init rtc_init(void)
+{
+	struct proc_dir_entry *ent;
+
+	if (!request_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc")) {
+		printk(KERN_ERR "rtc: I/O port %d is not free.\n", RTC_PORT (0));
+		return -EIO;
+	}
+
+	if (misc_register(&rtc_dev)) {
+		release_region(RTC_PORT(0), RTC_IO_EXTENT);
+		return -ENODEV;
+	}
+
+	ent = create_proc_entry("driver/rtc", 0, NULL);
+	if (!ent) {
+		release_region(RTC_PORT(0), RTC_IO_EXTENT);
+		misc_deregister(&rtc_dev);
+		return -ENOMEM;
+	}
+	ent->proc_fops = &rtc_proc_fops;
+	(void) init_sysctl();
+
+	printk(KERN_INFO "RICHO RS5C313 Real Time Clock Driver v" RTC_VERSION "\n");
+
+	return 0;
+}
+
+static void __exit rtc_exit (void)
+{
+	cleanup_sysctl();
+	remove_proc_entry ("driver/rtc", NULL);
+	misc_deregister(&rtc_dev);
+	release_region (RTC_PORT (0), RTC_IO_EXTENT);
+}
+
+module_init(rtc_init);
+module_exit(rtc_exit);
+
+
+/*
+ *	Info exported via "/proc/driver/rtc".
+ */
+
+static int rtc_proc_show(struct seq_file *seq, void *v)
+{
+#define YN(bit) ((ctrl & bit) ? "yes" : "no")
+#define NY(bit) ((ctrl & bit) ? "no" : "yes")
+	struct rtc_time tm;
+	unsigned char batt, ctrl;
+	unsigned long freq;
+
+	batt = 1;
+	freq = rtc_freq;
+	ctrl = RTC_24H; 
+
+	rtc_get_rtc_time(&tm);
+
+	/*
+	 * There is no way to tell if the luser has the RTC set for local
+	 * time or for Universal Standard Time (GMT). Probably local though.
+	 */
+	seq_printf(seq,
+		   "rtc_time\t: %02d:%02d:%02d\n"
+		   "rtc_date\t: %04d-%02d-%02d\n"
+		   "rtc_epoch\t: %04lu\n",
+		   tm.tm_hour, tm.tm_min, tm.tm_sec,
+		   tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, epoch);
+
+	seq_puts(seq, "alarm\t\t: **:**:**\n");
+
+	seq_printf(seq,
+		   "DST_enable\t: %s\n"
+		   "BCD\t\t: %s\n"
+		   "24hr\t\t: %s\n"
+		   "square_wave\t: %s\n"
+		   "alarm_IRQ\t: %s\n"
+		   "update_IRQ\t: %s\n"
+		   "periodic_IRQ\t: %s\n"
+		   "periodic_freq\t: %ld\n"
+		   "batt_status\t: %s\n",
+		   YN(RTC_DST_EN),
+		   NY(RTC_DM_BINARY),
+		   YN(RTC_24H),
+		   YN(RTC_SQWE),
+		   YN(RTC_AIE),
+		   YN(RTC_UIE),
+		   YN(RTC_PIE),
+		   freq,
+		   batt ? "okay" : "dead");
+
+	return  0;
+#undef YN
+#undef NY
+}
+
+static int rtc_proc_open(struct inode *inode, struct file *file)
+{
+	return single_open(file, rtc_proc_show, NULL);
+}
+
+void rtc_get_rtc_time(struct rtc_time *rtc_tm)
+{
+	unsigned int BCD_yr, BCD_mon, BCD_day, BCD_hr, BCD_min, BCD_sec;
+
+	spin_lock_irq(&rtc_lock);
+	rs5c313_get_cmos_time(&BCD_yr, &BCD_mon, &BCD_day, 
+			      &BCD_hr, &BCD_min, &BCD_sec);
+	spin_unlock_irq(&rtc_lock);
+
+	rtc_tm->tm_sec  = BCD2BIN(BCD_sec);
+	rtc_tm->tm_min  = BCD2BIN(BCD_min);
+	rtc_tm->tm_hour = BCD2BIN(BCD_hr);
+	rtc_tm->tm_mday = BCD2BIN(BCD_day);
+	rtc_tm->tm_mon  = BCD2BIN(BCD_mon);
+	rtc_tm->tm_year = BCD2BIN(BCD_yr);
+
+	/*
+	 * Account for differences between how the RTC uses the values
+	 * and how they are defined in a struct rtc_time;
+	 */
+	if ((rtc_tm->tm_year += (epoch - 1900)) <= 69)
+		rtc_tm->tm_year += 100;
+
+	rtc_tm->tm_mon--;
+}
+
+
+MODULE_AUTHOR("kogiidena");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS_MISCDEV(RTC_MINOR);
+
diff -ruN linux-2.6.17-vanilla/drivers/char/rtc.c linux-2.6.17/drivers/char/rtc.c
--- linux-2.6.17-vanilla/drivers/char/rtc.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/char/rtc.c	2006-07-12 16:54:23.000000000 +0000
@@ -104,7 +104,7 @@
 #endif
 
 #ifdef RTC_IRQ
-static int rtc_has_irq = 1;
+static int rtc_has_irq = RTC_IRQ;
 #endif
 
 #ifndef CONFIG_HPET_EMULATE_RTC
diff -ruN linux-2.6.17-vanilla/drivers/char/rtc9701_rtc.c linux-2.6.17/drivers/char/rtc9701_rtc.c
--- linux-2.6.17-vanilla/drivers/char/rtc9701_rtc.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/char/rtc9701_rtc.c	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,888 @@
+/*
+ * linux/drivers/char/rtc9701_rtc.c
+ *
+ * Real Time Clock interface for Linux
+ * EPSON RTC-9701JE support
+ *
+ */
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/fs.h>
+#include <linux/miscdevice.h>
+#include <linux/delay.h>
+#include <asm/delay.h>
+#include <linux/string.h>
+#include <linux/interrupt.h>
+#include <linux/init.h>
+#include <linux/poll.h>
+#ifdef CONFIG_PROC_FS
+#include <linux/proc_fs.h>
+#endif
+
+#include <asm/io.h>
+#include <asm/rts7751r2d/rts7751r2d.h>
+
+#include <linux/rtc.h>
+
+/* define to 1 enable copious debugging info */
+#undef RTC9701_DEBUG
+#undef RTC9701_DEBUG_IO
+#undef RTC9701_DEBUG_INTR
+
+#ifndef BCD_TO_BIN
+#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10)
+#endif
+
+#ifndef BIN_TO_BCD
+#define BIN_TO_BCD(val) ((val)=(((val)/10)<<4) + (val)%10)
+#endif
+
+#define	DRIVER_VERSION	"0.02"
+
+#define RSECCNT	0x00	/* Second Counter */
+#define	RMINCNT	0x01	/* Minute Counter */
+#define	RHRCNT	0x02	/* Hour Counter */
+#define	RWKCNT	0x03	/* Week Counter */
+#define	RDAYCNT	0x04	/* Day Counter */
+#define	RMONCNT	0x05	/* Month Counter */
+#define	RYRCNT	0x06	/* Year Counter */
+#define R100CNT	0x07	/* Y100 Counter */
+#define	RMINAR	0x08	/* Minute Alarm */
+#define	RHRAR	0x09	/* Hour Alarm */
+#define	RWKAR	0x0a	/* Week/Day Alarm */
+#define	RTIMCNT	0x0c	/* Interval Timer */
+#define REXT	0x0d	/* Extension Register */
+#define	RFLAG	0x0e	/* RTC Flag Register */
+#define	RCR	0x0f	/* RTC Control Register */
+
+#define WRITE_CMD	0x00	/* Write Command */
+#define	READ_CMD	0x08	/* Read Command */
+
+#define SCSMR1	0xffe00000	/* Serial Mode Register(SCI) */
+#define SCSCR1	0xffe00008	/* Serial Control Register(SCI) */
+#define SCSPTR1	0xffe0001c	/* Serial Port Register(SCI) */
+
+static int rtc_usage;
+static int rtc_irq_data;
+
+static struct fasync_struct* rtc_async_queue;
+
+static DECLARE_WAIT_QUEUE_HEAD(rtc_wait);
+extern spinlock_t rtc_lock;
+static unsigned int epoch = 1900;      /* year corresponding to 0x00   */
+
+static const unsigned char days_in_mo[] =
+{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
+
+static __inline__ unsigned char rtc9701_inb(unsigned long addr)
+{
+	unsigned char data, retval;
+	int i;
+
+	ctrl_outw(0x0001, PA_RTCCE);		/* CE=1 */
+	ndelay(170);				/* 170ns delay (tZR) */
+	ctrl_outb(0x8c, SCSPTR1);
+	for (i=0 ; i<18 ; i++)
+		if (ctrl_inb(SCSPTR1) & 0x01)	/* Check ready */
+			break;
+		else
+			mdelay(1);		/* 1ms delay */
+//#ifdef RTC9701_DEBUG_IO
+	if (i >= 18)
+		printk("RTC-9701JE Read Time out ready wait\n");
+//#endif
+	ndelay(65);				/* 65ns delay (tRDY) */
+
+	for (i=0 ; i<4 ; i++) {			/* Command Set */
+		if ((READ_CMD << i) & 0x08)
+			data = 0x8b;		/* DATA=1 */
+		else
+			data = 0x8a;		/* DATA=0 */
+		ctrl_outb(data, SCSPTR1);	/* CLK=0, DATA */
+		ndelay(250);			/* 250ns delay (tWL) */
+		data |= 0x04;
+		ctrl_outb(data, SCSPTR1);	/* CLK=1 */
+		ndelay(250);			/* 250ns delay (tWH) */
+	}
+
+	for (i=0 ; i<4 ; i++) {			/* Address Set */
+		if ((addr << i) & 0x08)
+			data = 0x8b;		/* DATA=1 */
+		else
+			data = 0x8a;		/* DATA=0 */
+		ctrl_outb(data, SCSPTR1);	/* CLK=0, DATA */
+		ndelay(250);			/* 250ns delay (tWL) */
+		data |= 0x04;
+		ctrl_outb(data, SCSPTR1);	/* CLK=1 */
+		ndelay(250);			/* 250ns delay (tWH) */
+	}
+
+#if 0
+	/* Dummy clock */
+	ctrl_outb(0x88, SCSPTR1);		/* CLK=0 */
+	ndelay(250);				/* 250ns delay (tWL) */
+	ctrl_inb(SCSPTR1);			/* Dummy read */
+	ctrl_outb(0x8c, SCSPTR1);		/* CLK=1 */
+	ndelay(250);				/* 250ns delay (tWH) */
+#endif
+
+	retval = 0;
+	for (i=0 ; i<8 ; i++) {			/* DATA Read */
+		ctrl_outb(0x88, SCSPTR1);	/* CLK=0 */
+#if 0
+		if (i == 0)
+			ndelay(200);		/* 200ns delay (tZR) */
+#endif
+		ndelay(250);			/* 250ns delay (tWL) */
+		retval <<= 1;
+		retval &= 0xfe;
+		if (ctrl_inb(SCSPTR1) & 0x01)
+			retval |= 0x01;
+		ctrl_outb(0x8c, SCSPTR1);	/* CLK=1 */
+		ndelay(250);			/* 250ns delay (tWH) */
+	}
+
+	ctrl_outw(0x0000, PA_RTCCE);		/* CE=0 */
+#if 0
+	mdelay(1);				/* 1ms delay (tCR) */
+#endif
+
+#ifdef RTC9701_DEBUG_IO
+	printk("rtc9701_inb addr=%x value=%x\n", (unsigned int)addr, retval);
+#endif
+	return retval;
+}
+
+static __inline__ void rtc9701_outb(unsigned char b, unsigned long addr)
+{
+	int i;
+	unsigned char data;
+
+#ifdef RTC9701_DEBUG_IO
+	printk("rtc9701_outb addr=%x value=%x\n", (unsigned int)addr, b);
+#endif
+	ctrl_outw(0x0001, PA_RTCCE);		/* CE=1 */
+	ndelay(170);				/* 170ns delay (tZR) */
+	ctrl_outb(0x8c, SCSPTR1);
+	for (i=0 ; i<18 ; i++)
+		if (ctrl_inb(SCSPTR1) & 0x01)	/* Check ready */
+			break;
+		else
+			mdelay(1);		/* 1ms delay */
+//#ifdef RTC9701_DEBUG_IO
+	if (i >= 18)
+		printk("RTC-9701JE Write Time out ready wait\n");
+//#endif
+	ndelay(65);				/* 65ns delay (tRDY) */
+
+	for (i=0 ; i<4 ; i++) {			/* Command Set */
+		if ((WRITE_CMD << i) & 0x08)
+			data = 0x8b;		/* DATA=1 */
+		else
+			data = 0x8a;		/* DATA=0 */
+		ctrl_outb(data, SCSPTR1);	/* CLK=0, DATA */
+		ndelay(250);			/* 250ns delay (tWL) */
+		data |= 0x04;
+		ctrl_outb(data, SCSPTR1);	/* CLK=1 */
+		ndelay(250);			/* 250ns delay (tWH) */
+	}
+
+	for (i=0 ; i<4 ; i++) {			/* Address Set */
+		if ((addr << i) & 0x08)
+			data = 0x8b;		/* DATA=1 */
+		else
+			data = 0x8a;		/* DATA=0 */
+		ctrl_outb(data, SCSPTR1);	/* CLK=0, DATA */
+		ndelay(250);			/* 250ns delay (tWL) */
+		data |= 0x04;
+		ctrl_outb(data, SCSPTR1);	/* CLK=1 */
+		ndelay(250);			/* 250ns delay (tWH) */
+	}
+
+	for (i=0 ; i<8 ; i++) {			/* DATA Write */
+		if ((b << i ) & 0x80)
+			data = 0x8b;		/* DATA=1 */
+		else
+			data = 0x8a;		/* DATA=0 */
+		ctrl_outb(data, SCSPTR1);	/* CLK=0, DATA */
+		ndelay(250);			/* 250ns delay (tWL) */
+		data |= 0x04;
+		ctrl_outb(data, SCSPTR1);	/* CLK=1 */
+		ndelay(250);			/* 250ns delay (tWH) */
+	}
+
+	ctrl_outw(0x0000, PA_RTCCE);		/* CE=0 */
+#if 0
+	mdelay(1);				/* 1ms delay (tCR) */
+#endif
+}
+
+static irqreturn_t rtc9701_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+	unsigned char	wk;
+
+#ifdef RTC9701_DEBUG
+	printk("RTC-9701JE Interrupt irq=%d\n", irq);
+#endif
+	spin_lock(&rtc_lock);
+
+	if (irq == IRQ_RTCALM) {
+		wk = rtc9701_inb(RFLAG);
+#ifdef RTC9701_DEBUG_INTR
+		printk("RTC-9701JE Interrupt alarm flag=%02x\n", wk);
+#endif
+		if (wk & 0x08) {
+			wk &= 0xb6;
+			rtc9701_outb(wk, RFLAG);
+			rtc_irq_data = 1;
+		}
+	} else if (irq == IRQ_RTCTIME) {
+		wk = rtc9701_inb(RFLAG);
+#ifdef RTC9701_DEBUG_INTR
+		printk("RTC-9701JE Interrupt timer flag=%02x\n", wk);
+#endif
+		if (wk & 0x10) {	/* Interval timer */
+			wk &= 0xae;
+			rtc9701_outb(wk, RFLAG);
+			rtc_irq_data = 2;
+		}
+		if (wk & 0x20) {	/* Update time */
+			wk &= 0x9e;
+			rtc9701_outb(wk, RFLAG);
+			rtc_irq_data = 2;
+		}
+	}
+
+	spin_unlock(&rtc_lock);
+#if 0
+	mdelay(20);
+#endif
+	wake_up_interruptible(&rtc_wait);
+
+	kill_fasync(&rtc_async_queue, SIGIO, POLL_IN);
+
+	return IRQ_HANDLED;
+}
+
+static int rtc9701_rtc_open(struct inode *minode, struct file *mfile)
+{
+	if (rtc_usage != 0)
+		return -EBUSY;
+
+	rtc_usage = 1;
+
+        return 0;
+}
+
+static int rtc9701_rtc_release(struct inode *minode, struct file *mfile)
+{
+	rtc_usage = 0;
+
+        return 0;
+}
+
+static int rtc9701_rtc_fasync(int fd, struct file *filp, int on)
+{
+        return fasync_helper(fd, filp, on, &rtc_async_queue);
+}
+
+static loff_t rtc9701_rtc_llseek(struct file *file, loff_t offset, int origin)
+{
+        return -ESPIPE;
+}
+
+static ssize_t rtc9701_rtc_read(struct file* file,
+			      char*        buf,
+			      size_t       count,
+			      loff_t*      ppos)
+{
+        DECLARE_WAITQUEUE(wait, current);
+	unsigned long data = 1;
+        ssize_t retval;
+
+	if (count < sizeof(unsigned long))
+		return -EINVAL;
+
+	add_wait_queue(&rtc_wait, &wait);
+
+	current->state = TASK_INTERRUPTIBLE;
+
+	do {
+		spin_lock_irq (&rtc_lock);
+		data = rtc_irq_data;
+		spin_unlock_irq (&rtc_lock);
+
+		if (data != 0) {
+			rtc_irq_data = 0;
+			break;
+		}
+
+		if (file->f_flags & O_NONBLOCK) {
+			retval = -EAGAIN;
+			goto out;
+		}
+		if (signal_pending(current)) {
+			retval = -ERESTARTSYS;
+			goto out;
+		}
+		schedule();
+	} while (1);
+
+	retval = put_user(data, (unsigned long *)buf);
+	if (!retval)
+		retval = sizeof(unsigned long);
+out:
+	current->state = TASK_RUNNING;
+	remove_wait_queue(&rtc_wait, &wait);
+
+        return retval;
+}
+
+static void rtc_set_timer(unsigned long value)
+{
+	unsigned char time;
+
+	time = (unsigned char)value | 0x80;
+	rtc9701_outb(time, RTIMCNT);
+#ifdef RTC9701_DEBUG
+	time = rtc9701_inb(RTIMCNT);
+	printk("RTC-9701JE Set timer value=%x\n", time);
+#endif
+}
+
+static unsigned long rtc_read_timer(void)
+{
+	unsigned char time;
+
+	time = rtc9701_inb(RTIMCNT);
+#ifdef RTC9701_DEBUG
+	printk("RTC-9701JE Read timer value=%x\n", time);
+#endif
+	return (unsigned long)time;
+}
+
+static void control_periodic_irq(int mode)
+{
+	unsigned char wk;
+	unsigned char rcr;
+
+	if (mode == 0) {	/* OFF */
+		rcr	= rtc9701_inb(RCR);
+		wk	= rcr & 0x2e;
+		rtc9701_outb(wk, RCR);
+	} else {		/* ON */
+		rcr	= rtc9701_inb(RCR);
+		wk	= rcr | 0x10;
+		rtc9701_outb(wk, RCR);
+	}
+
+	rtc_irq_data = 0;
+}
+
+static void control_alarm_irq(int mode)
+{
+	unsigned char rcr;
+
+	if (mode == 0) {	/* AIE = OFF */
+		rcr = rtc9701_inb(RCR);
+		rcr &= 0x36;
+		rtc9701_outb(rcr, RCR);
+	} else {		/* AIE = ON */
+		rcr = rtc9701_inb(RCR);
+		rcr |= 0x08;
+		rtc9701_outb(rcr, RCR);
+	}
+
+	rtc_irq_data = 0;
+}
+
+static void get_rtc_data(struct rtc_time *tm)
+{
+	unsigned char wk;
+
+	tm->tm_sec	= 0;
+	tm->tm_min	= 0;
+	tm->tm_hour	= 0;
+	tm->tm_mday	= 0;
+	tm->tm_mon	= 0;
+	tm->tm_year	= 0;
+	tm->tm_wday	= 0;
+	tm->tm_yday	= 0;
+	tm->tm_isdst	= 0;
+
+	wk = rtc9701_inb(RSECCNT);
+	wk &= 0x7f;
+	BCD_TO_BIN(wk);
+	tm->tm_sec	= wk;
+
+	wk = rtc9701_inb(RMINCNT);
+	wk &= 0x7f;
+	BCD_TO_BIN(wk);
+	tm->tm_min	= wk;
+
+	wk = rtc9701_inb(RHRCNT);
+	wk &= 0x7f;
+	BCD_TO_BIN(wk);
+	tm->tm_hour	= wk;
+
+	wk = rtc9701_inb(RWKCNT);
+	wk &= 0x7f;
+	tm->tm_wday	= wk - 1;
+
+	wk = rtc9701_inb(RDAYCNT);
+	wk &= 0x7f;
+	BCD_TO_BIN(wk);
+	tm->tm_mday	= wk;
+
+	wk = rtc9701_inb(RMONCNT);
+	wk &= 0x7f;
+	BCD_TO_BIN(wk);
+	tm->tm_mon	= wk - 1;
+
+	wk = rtc9701_inb(RYRCNT);
+	BCD_TO_BIN(wk);
+	tm->tm_year	= wk + 100;
+}
+
+static void get_rtc_alarm_data(struct rtc_time *tm)
+{
+	unsigned char wk;
+	unsigned char rflag, rcr;
+
+	tm->tm_sec	= 0;
+	tm->tm_min	= 0;
+	tm->tm_hour	= 0;
+	tm->tm_mday	= 0;
+	tm->tm_mon	= 0;
+	tm->tm_year	= 0;
+	tm->tm_wday	= 0;
+	tm->tm_yday	= 0;
+	tm->tm_isdst	= 0;
+
+	rflag = rtc9701_inb(RFLAG);
+	wk = rflag & 0xf7;
+	rtc9701_outb(wk, RFLAG);	/* AF=0 */
+	rcr = rtc9701_inb(RCR);
+	wk = rcr & 0xf7;
+	rtc9701_outb(wk, RCR);		/* AIE=0 */
+
+	wk = rtc9701_inb(RMINAR);
+	wk &= 0x7f;
+	BCD_TO_BIN(wk);
+	tm->tm_min	= wk;
+
+	wk = rtc9701_inb(RHRAR);
+	wk &= 0x7f;
+	BCD_TO_BIN(wk);
+	tm->tm_hour	= wk;
+
+	rtc9701_outb(rflag, RFLAG);
+	rtc9701_outb(rcr, RCR);
+#ifdef RTC9701_DEBUG
+	printk("get_rtc_alarm_data: hour:%x min:%x\n", tm->tm_hour, tm->tm_min);
+#endif
+}
+
+static void set_rtc_data(struct rtc_time *tm)
+{
+	unsigned char sec, min, hour, mday, wday, mon, year;
+
+#ifdef RTC9701_DEBUG
+	printk("set_rtc_data:%d/%d/%d %d:%d:%d\n", tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
+#endif
+	sec = tm->tm_sec;
+	min = tm->tm_min;
+	hour = tm->tm_hour;
+	mday = tm->tm_mday;
+	wday = tm->tm_wday;
+	mon = tm->tm_mon;
+
+	BIN_TO_BCD(sec);
+	rtc9701_outb(sec, RSECCNT);
+
+	BIN_TO_BCD(min);
+	rtc9701_outb(min, RMINCNT);
+
+	BIN_TO_BCD(hour);
+	rtc9701_outb(hour, RHRCNT);
+
+	rtc9701_outb(wday, RWKCNT);
+
+	BIN_TO_BCD(mday);
+	rtc9701_outb(mday, RDAYCNT);
+
+	BIN_TO_BCD(mon);
+	rtc9701_outb(mon, RMONCNT);
+
+	if (tm->tm_year > 100)
+		tm->tm_year -= 100;
+	year = tm->tm_year;
+	BIN_TO_BCD(year);
+	rtc9701_outb(year, RYRCNT);
+}
+
+static void set_rtc_alarm_data(struct rtc_time *tm)
+{
+	unsigned char wk;
+	unsigned char min, hour;
+
+#ifdef RTC9701_DEBUG
+	printk("set_rtc_alarm_data: hour:%x min:%x\n", tm->tm_hour, tm->tm_min);
+#endif
+	wk = rtc9701_inb(RFLAG);
+	wk &= 0xf7;
+	rtc9701_outb(wk, RFLAG);	/* AF=0 */
+	wk = rtc9701_inb(RCR);
+	wk &= 0xf7;
+	rtc9701_outb(wk, RCR);		/* AIE=0 */
+
+	min = tm->tm_min;
+	BIN_TO_BCD(min);
+	rtc9701_outb(min, RMINAR);
+
+	hour = tm->tm_hour;
+	BIN_TO_BCD(hour);
+	rtc9701_outb(hour, RHRAR);
+
+	wk = rtc9701_inb(RFLAG);
+	wk &= 0xf7;
+	rtc9701_outb(wk, RFLAG);	/* AF=0 */
+}
+
+static int rtc9701_rtc_ioctl(struct inode* inode,
+			   struct file*  file,
+			   unsigned int  cmd,
+			   unsigned long arg)
+{
+	struct rtc_time	wtime, rtc_tm;
+	unsigned char	mon, day, hrs, min, sec, week, leap_yr;
+	unsigned int	yrs;
+	unsigned long	value;
+
+	wtime.tm_sec	= 0;
+	wtime.tm_min	= 0;
+	wtime.tm_hour	= 0;
+	wtime.tm_mday	= 0;
+	wtime.tm_mon	= 0;
+	wtime.tm_year	= 0;
+	wtime.tm_wday	= 0;
+	wtime.tm_yday	= 0;
+	wtime.tm_isdst	= 0;
+
+	switch (cmd) {
+	case RTC_AIE_OFF:			/* =2:Alarm int. disable */
+		spin_lock_irq(&rtc_lock);
+		control_alarm_irq(0);
+		spin_unlock_irq(&rtc_lock);
+		mdelay(20);
+		return 0;
+
+	case RTC_AIE_ON:			/* =1:Alarm int. enable */
+		spin_lock_irq(&rtc_lock);
+		control_alarm_irq(1);
+		spin_unlock_irq(&rtc_lock);
+		mdelay(20);
+		return 0;
+
+	case RTC_PIE_OFF:			/* =6:Periodic int. disable */
+		spin_lock_irq(&rtc_lock);
+		control_periodic_irq(0);
+		spin_unlock_irq(&rtc_lock);
+		mdelay(20);
+		return 0;
+
+	case RTC_PIE_ON:			/* =5:Periodic int. enable */
+		spin_lock_irq(&rtc_lock);
+		control_periodic_irq(1);
+		spin_unlock_irq(&rtc_lock);
+		mdelay(20);
+		return 0;
+
+	case RTC_IRQP_SET:
+		if (copy_from_user(&value, (unsigned long *)arg, sizeof(value)))
+			return -EFAULT;
+		rtc_set_timer(value);
+		mdelay(20);
+		return 0;
+
+	case RTC_IRQP_READ:
+		value = rtc_read_timer();
+		mdelay(20);
+		return put_user(value, (unsigned long *)arg);
+
+	case RTC_ALM_READ:			/* =8:Read alarm time */
+		get_rtc_alarm_data(&wtime);
+		mdelay(20);
+		break;
+
+	case RTC_ALM_SET:			/* =7:Set alarm time */
+		if (copy_from_user(&rtc_tm, (struct rtc_time*)arg,
+                                   sizeof(struct rtc_time)))
+			return -EFAULT;
+
+		hrs = rtc_tm.tm_hour;
+		min = rtc_tm.tm_min;
+
+		if ((hrs >= 24) || (min >= 60)) {
+			return -EINVAL;
+		}
+
+		/* update the alarm register */
+		spin_lock_irq(&rtc_lock);
+		wtime.tm_min	= min;
+		wtime.tm_hour	= hrs;
+		set_rtc_alarm_data(&wtime);
+		spin_unlock_irq(&rtc_lock);
+		mdelay(20);
+		return 0;
+
+	case RTC_RD_TIME:			/* =9:Read RTC time */
+		spin_lock_irq(&rtc_lock);
+		get_rtc_data(&wtime);
+		spin_unlock_irq(&rtc_lock);
+		mdelay(20);
+		break;
+
+	case RTC_SET_TIME:			/* =10:Set RTC time */
+		if (copy_from_user(&rtc_tm, (struct rtc_time*)arg,
+                                   sizeof(struct rtc_time)))
+			return -EFAULT;
+
+		yrs = rtc_tm.tm_year + epoch;
+		mon = rtc_tm.tm_mon+1;
+		day = rtc_tm.tm_mday;
+		hrs = rtc_tm.tm_hour;
+		min = rtc_tm.tm_min;
+		sec = rtc_tm.tm_sec;
+		week = rtc_tm.tm_wday+1;
+
+		if (yrs < epoch){
+			return -EINVAL;
+		}
+		leap_yr = ((!(yrs % 4) && (yrs % 100)) || !(yrs % 400));
+		if ((mon > 12) || (day == 0)){
+			return -EINVAL;
+		}
+		if (day > (days_in_mo[mon] + ((mon == 2) && leap_yr))){
+			return -EINVAL;
+		}
+		if ((hrs >= 24) || (min >= 60) || (sec >= 60) || (week > 64)){
+			return -EINVAL;
+		}
+		if ((yrs - epoch) > 255){
+			return -EINVAL;
+		}
+
+		spin_lock_irq(&rtc_lock);
+		wtime.tm_sec	= sec;
+		wtime.tm_min	= min;
+		wtime.tm_hour	= hrs;
+		wtime.tm_mday	= day;
+		wtime.tm_mon	= mon;
+		wtime.tm_wday	= week;
+		wtime.tm_year	= yrs - epoch;
+		set_rtc_data(&wtime);
+		spin_unlock_irq(&rtc_lock);
+		mdelay(20);
+		return 0;
+
+	default:
+		return -EINVAL;
+	}
+
+        return copy_to_user((void*)arg, &wtime, sizeof(wtime)) ? -EFAULT : 0;
+}
+
+static unsigned int rtc9701_rtc_poll(struct file* file, poll_table* wait)
+{
+	unsigned long l;
+
+	poll_wait(file, &rtc_wait, wait);
+
+	spin_lock_irq(&rtc_lock);
+	l = rtc_irq_data;
+	spin_unlock_irq(&rtc_lock);
+
+	if (l != 0)
+		return POLLIN | POLLRDNORM;
+	else
+        	return 0;
+}
+
+#ifdef CONFIG_PROC_FS
+
+static int rtc9701_rtc_proc_output(char *buf)
+{
+        char		*p;
+        struct rtc_time	tm;
+
+	get_rtc_data(&tm);
+	mdelay(20);
+
+	p = buf;
+	p += sprintf(p,
+                     "rtc_time\t: %02d:%02d:%02d\n"
+                     "rtc_date\t: %04d-%02d-%02d\n"
+                     "rtc_epoch\t: %04lu\n",
+                     tm.tm_hour, tm.tm_min, tm.tm_sec,
+                     tm.tm_year + epoch, tm.tm_mon+1, tm.tm_mday,
+		     (unsigned long)epoch);
+
+	get_rtc_alarm_data(&tm);
+	mdelay(20);
+
+	p += sprintf(p,
+		     "alrm_time\t: %02d:%02d\n",
+                     tm.tm_hour, tm.tm_min);
+
+	p += sprintf(p,"alarm_IRQ\t: %s\n",
+		     (rtc9701_inb(RCR) & 0x08) ? "yes" : "no" );
+	mdelay(20);
+	p += sprintf(p,"periodic_IRQ\t: %s\n",
+		     (rtc9701_inb(RCR) & 0x10) ? "yes" : "no" );
+	mdelay(20);
+
+	p += sprintf(p,"periodic_freq\t: 1\n");
+	p += sprintf(p,"batt_status\t: unsupported\n");
+
+        return (p - buf);
+}
+
+static int rtc9701_rtc_read_proc(char*  page,
+			       char** start,
+			       off_t  off,
+			       int    count,
+			       int*   eof,
+			       void*  data)
+{
+        int len = rtc9701_rtc_proc_output(page);
+
+	if (len <= off + count) { *eof = 1; }
+	*start = page + off;
+	len -= off;
+	if (len > count) { len = count; }
+	if (len < 0)     { len = 0; }
+
+        return len;
+}
+
+#endif
+
+static void rtc9701_initial_check(void)
+{
+	unsigned int sec, min, hr, day, mon, yr;
+
+	sec = rtc9701_inb(RSECCNT) & 0x7f;
+	min = rtc9701_inb(RMINCNT) & 0x7f;
+	hr  = rtc9701_inb(RHRCNT) & 0x7f;
+	day = rtc9701_inb(RDAYCNT) & 0x7f;
+	mon = rtc9701_inb(RMONCNT) & 0x7f;
+	yr  = rtc9701_inb(RYRCNT) & 0x7f;
+
+	BCD_TO_BIN(sec);
+	BCD_TO_BIN(min);
+	BCD_TO_BIN(hr);
+	BCD_TO_BIN(day);
+	BCD_TO_BIN(mon);
+	BCD_TO_BIN(yr);
+
+	if (yr > 99 || mon < 1 || mon > 12 || day > 31 || day < 1 ||
+	    hr > 23 || min > 59 || sec > 59) {
+		printk("Current RTC Time:%d-%d-%d %d:%d:%d\n", yr, mon, day, hr, min, sec);
+		printk(KERN_ERR "RTC-9701: invalid value, resetting to 1 Jan 2000\n");
+		rtc9701_outb(0, RSECCNT);
+		rtc9701_outb(0, RMINCNT);
+		rtc9701_outb(0, RHRCNT);
+		rtc9701_outb(0x40, RWKCNT);
+		rtc9701_outb(1, RDAYCNT);
+		rtc9701_outb(1, RMONCNT);
+		rtc9701_outb(0, RYRCNT);
+	}
+}
+
+static struct file_operations rtc_fops = {
+	.owner		= THIS_MODULE,
+	.llseek		= rtc9701_rtc_llseek,
+	.read		= rtc9701_rtc_read,
+	.poll		= rtc9701_rtc_poll,
+	.ioctl		= rtc9701_rtc_ioctl,
+	.open		= rtc9701_rtc_open,
+	.release	= rtc9701_rtc_release,
+	.fasync		= rtc9701_rtc_fasync,
+};
+
+
+static struct miscdevice rts7751r2drtc_miscdev = {
+	RTC_MINOR,
+	"rtc",
+	&rtc_fops
+};
+
+static void rtc9701_rtc_exit(void)
+{
+	spin_lock_irq(&rtc_lock);
+	rtc9701_outb(0x00, RCR);
+	spin_unlock_irq(&rtc_lock);
+	mdelay(20);
+
+	free_irq(IRQ_RTCALM, NULL);
+	free_irq(IRQ_RTCTIME, NULL);
+#ifdef CONFIG_PROC_FS
+	remove_proc_entry("driver/rtc", NULL);
+#endif
+
+	misc_deregister(&rts7751r2drtc_miscdev);
+}
+
+static int __init rtc9701_rtc_init(void)
+{
+	unsigned char val;
+
+	misc_register(&rts7751r2drtc_miscdev);
+
+#ifdef CONFIG_PROC_FS
+	create_proc_read_entry("driver/rtc", 0, 0, rtc9701_rtc_read_proc, NULL);
+#endif
+	ctrl_outb((ctrl_inb(SCSMR1) & 0x7f), SCSMR1);
+	ctrl_outb((ctrl_inb(SCSCR1) & 0x9c), SCSCR1);
+	ctrl_outw(0x0000, PA_RTCCE);	/* CE=0 */
+	ctrl_outb(0x8c, SCSPTR1);	/* EIO=1, SPB1IO=1, SPB1DT=1, SPB0IO=0 */
+
+	rtc9701_initial_check();	/* RTC Data Initial check */
+	mdelay(20);
+
+	rtc9701_outb(0x02, REXT);	/* WADA=0, UDUTY=0, USEL=0, TSEL1=1, TSEL0=0 */
+	mdelay(20);
+	rtc9701_outb(0x00, RCR);	/* UIE=0, TIE=0, AIE=0, EXIE=0, VLIE=0 */
+	mdelay(20);
+	rtc9701_outb(0x00, RFLAG);
+	mdelay(20);
+#if 0
+	val = rtc9701_inb(REXT);
+	val &= 0x33;
+	rtc9701_outb(val, REXT);	/* WADA=0 */
+#endif
+	val = 0xff;
+	rtc9701_outb(val, RWKAR);
+	mdelay(20);
+
+	rtc9701_outb(0x00, RTIMCNT);
+	mdelay(20);
+
+	if (request_irq(IRQ_RTCALM, rtc9701_rtc_interrupt, SA_INTERRUPT, "rtc_alarm", NULL)) {
+		printk(KERN_ERR "rtc: IRQ %d already in use.\n", IRQ_RTCALM);
+		return -EIO;
+	}
+
+	if (request_irq(IRQ_RTCTIME, rtc9701_rtc_interrupt, SA_INTERRUPT, "rtc_timer", NULL)) {
+		printk(KERN_ERR "rtc: IRQ %d already in use.\n", IRQ_RTCTIME);
+		return -EIO;
+	}
+
+	printk(KERN_INFO "RTC-9701JE Real Time Clock Driver v" DRIVER_VERSION "\n");
+
+        return 0;
+}
+
+module_init(rtc9701_rtc_init);
+module_exit(rtc9701_rtc_exit);
diff -ruN linux-2.6.17-vanilla/drivers/char/sh03rtc.c linux-2.6.17/drivers/char/sh03rtc.c
--- linux-2.6.17-vanilla/drivers/char/sh03rtc.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/char/sh03rtc.c	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,1185 @@
+/*
+ *	Real Time Clock interface for Linux	
+ *
+ *	Copyright (C) 2004 Interface Corporation Saito.K
+ *
+ *	Based on skelrton from the drivers/char/rtc.c
+ *
+ *	This driver allows use of the real time clock (built into
+ *	nearly all computers) from user space. It exports the /dev/rtc
+ *	interface supporting various ioctl() and also the
+ *	/proc/driver/rtc pseudo-file for status information.
+ *
+ *	The ioctls can be used to set the interrupt behaviour and
+ *	generation rate from the RTC via IRQ 8. Then the /dev/rtc
+ *	interface can be used to make use of these timer interrupts,
+ *	be they interval or alarm based.
+ *
+ *	The /dev/rtc interface will block on reads until an interrupt
+ *	has been received. If a RTC interrupt has already happened,
+ *	it will output an unsigned long and then block. The output value
+ *	contains the interrupt status in the low byte and the number of
+ *	interrupts since the last read in the remaining high bytes. The 
+ *	/dev/rtc interface can also be used with the select(2) call.
+ *
+ *	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.
+ *
+ *	Based on other minimal char device drivers, like Alan's
+ *	watchdog, Ted's random, etc. etc.
+ *
+ *	1.07	Paul Gortmaker.
+ *	1.08	Miquel van Smoorenburg: disallow certain things on the
+ *		DEC Alpha as the CMOS clock is also used for other things.
+ *	1.09	Nikita Schmidt: epoch support and some Alpha cleanup.
+ *	1.09a	Pete Zaitcev: Sun SPARC
+ *	1.09b	Jeff Garzik: Modularize, init cleanup
+ *	1.09c	Jeff Garzik: SMP cleanup
+ *	1.10    Paul Barton-Davis: add support for async I/O
+ *	1.10a	Andrea Arcangeli: Alpha updates
+ *	1.10b	Andrew Morton: SMP lock fix
+ *	1.10c	Cesar Barros: SMP locking fixes and cleanup
+ *	1.10d	Paul Gortmaker: delete paranoia check in rtc_exit
+ *	1.10e	Maciej W. Rozycki: Handle DECstation's year weirdness.
+ *      1.11    Takashi Iwai: Kernel access functions
+ *			      rtc_register/rtc_unregister/rtc_control
+ *      1.11a   Daniele Bellucci: Audit create_proc_read_entry in rtc_init
+ *	1.12	Venkatesh Pallipadi: Hooks for emulating rtc on HPET base-timer
+ *		CONFIG_HPET_EMULATE_RTC
+ *
+ */
+
+#define SH03_RTC_VERSION	"0.09"
+
+#define RTC_IO_EXTENT	0x8
+
+/*
+ *	Note that *all* calls to CMOS_READ and CMOS_WRITE are done with
+ *	interrupts disabled. Due to the index-port/data-port (0x70/0x71)
+ *	design of the RTC, we don't want two different things trying to
+ *	get to it at once. (e.g. the periodic 11 min sync from time.c vs.
+ *	this driver.)
+ */
+
+#include <linux/config.h>
+#include <linux/interrupt.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/miscdevice.h>
+#include <linux/ioport.h>
+#include <linux/fcntl.h>
+
+// @@@@@ 16.09.29 #include <linux/mc146818rtc.h>
+#include <linux/rtc.h>
+
+#include <linux/init.h>
+#include <linux/poll.h>
+#include <linux/proc_fs.h>
+#include <linux/spinlock.h>
+#include <linux/sysctl.h>
+#include <linux/wait.h>
+#include <linux/bcd.h>
+
+#include <asm/current.h>
+#include <asm/uaccess.h>
+#include <asm/system.h>
+#include <asm/io.h>
+
+extern spinlock_t	rtc_lock;
+
+/*
+TODO: Timer
+*/
+#define	SH03_RTC_IRQ	11
+
+#define RTC_BASE	0xb0000000
+#define RTC_SEC1	(RTC_BASE + 0)
+#define RTC_SEC10	(RTC_BASE + 1)
+#define RTC_MIN1	(RTC_BASE + 2)
+#define RTC_MIN10	(RTC_BASE + 3)
+#define RTC_HOU1	(RTC_BASE + 4)
+#define RTC_HOU10	(RTC_BASE + 5)
+#define RTC_WEE1	(RTC_BASE + 6)
+#define RTC_DAY1	(RTC_BASE + 7)
+#define RTC_DAY10	(RTC_BASE + 8)
+#define RTC_MON1	(RTC_BASE + 9)
+#define RTC_MON10	(RTC_BASE + 10)
+#define RTC_YEA1	(RTC_BASE + 11)
+#define RTC_YEA10	(RTC_BASE + 12)
+#define RTC_YEA100	(RTC_BASE + 13)
+#define RTC_YEA1000	(RTC_BASE + 14)
+#define RTC_CTL		(RTC_BASE + 15)
+#define RTC_BUSY	1
+#define RTC_STOP	2
+#define RTC_BANK0	(0 << 2)
+#define RTC_BANK1	(1 << 2)
+#define RTC_BANK2	(2 << 2)
+
+#define RTC_ATCTL	(RTC_BASE + 14)
+#define RTC_AIE		1
+#define RTC_AF		2
+
+#define RTC_TE_CLOCK	(RTC_BASE +  8)
+#define RTC_TMCTL	(RTC_BASE + 14)
+#define RTC_TIE		1
+#define RTC_TF		2
+
+#define SH03_RTC_PORT(n)	((RTC_BASE) + n)
+#define SH03_RTC_IO_EXTENT	0x10
+
+#ifndef BIN_TO_BCD
+#define BIN_TO_BCD(val)	((val)=(((val)/10)<<4) + (val)%10)
+#endif
+
+#define SELECT_BANK(n)	ctrl_outb((n), RTC_CTL)
+
+#define READ_SECONDS	((ctrl_inb(RTC_SEC1) & 15) + (ctrl_inb(RTC_SEC10) &  7) * 10)
+#define READ_MINUTES	((ctrl_inb(RTC_MIN1) & 15) + (ctrl_inb(RTC_MIN10) &  7) * 10)
+#define READ_HOURS	((ctrl_inb(RTC_HOU1) & 15) + (ctrl_inb(RTC_HOU10) &  3) * 10)
+#define READ_WEEK	 (ctrl_inb(RTC_WEE1) &  7)
+#define READ_DAY	((ctrl_inb(RTC_DAY1) & 15) + (ctrl_inb(RTC_DAY10) &  3) * 10)
+#define READ_MONTH	((ctrl_inb(RTC_MON1) & 15) + (ctrl_inb(RTC_MON10) &  1) * 10)
+#define READ_YEAR	((ctrl_inb(RTC_YEA1) & 15) + (ctrl_inb(RTC_YEA10) & 15) * 10 \
+		       + (ctrl_inb(RTC_YEA100) & 15) * 100 + (ctrl_inb(RTC_YEA1000) & 3) * 1000)
+
+#define WRITE_SECONDS(d)	ctrl_outb((d) & 15, RTC_SEC1); ctrl_outb((d) >> 4, RTC_SEC10)
+#define WRITE_MINUTES(d)	ctrl_outb((d) & 15, RTC_MIN1); ctrl_outb((d) >> 4, RTC_MIN10)
+#define WRITE_HOURS(d)		ctrl_outb((d) & 15, RTC_HOU1); ctrl_outb((d) >> 4, RTC_HOU10)
+#define WRITE_WEEK(d)		ctrl_outb((d) & 15, RTC_WEE1)
+#define WRITE_DAY(d)		ctrl_outb((d) & 15, RTC_DAY1); ctrl_outb((d) >> 4, RTC_DAY10)
+#define WRITE_MONTH(d)		ctrl_outb((d) & 15, RTC_MON1); ctrl_outb((d) >> 4, RTC_MON10)
+#define WRITE_YEAR_LOW(d)	ctrl_outb((d) & 15, RTC_YEA1); ctrl_outb((d) >> 4, RTC_YEA10)
+#define WRITE_YEAR_HIGH(d)	ctrl_outb((d) & 15, RTC_YEA100); ctrl_outb((d) >> 4, RTC_YEA1000)
+
+#define READ_ATCTL		(ctrl_inb(RTC_ATCTL))
+#define WRITE_ATCTL(d)		ctrl_outb((d), RTC_ATCTL)
+
+#define READ_TMCTL		(ctrl_inb(RTC_TMCTL))
+#define WRITE_TMCTL(d)		ctrl_outb((d), RTC_TMCTL)
+
+#define READ_CLOCK		(ctrl_inb(RTC_TE_CLOCK))
+#define WRITE_CLOCK(d)		ctrl_outb((d) & 15, RTC_TE_CLOCK)
+
+
+
+#ifdef SH03_RTC_IRQ
+static int sh03_rtc_has_irq = SH03_RTC_IRQ;
+#endif
+
+/*
+ *	We sponge a minor off of the misc major. No need slurping
+ *	up another valuable major dev number for this. If you add
+ *	an ioctl, make sure you don't conflict with SPARC's RTC
+ *	ioctls.
+ */
+
+static struct fasync_struct *sh03_rtc_async_queue;
+
+static DECLARE_WAIT_QUEUE_HEAD(sh03_rtc_wait);
+
+#ifdef SH03_RTC_IRQ
+static struct timer_list sh03_rtc_irq_timer;
+#endif
+
+static ssize_t sh03_rtc_read(struct file *file, char __user *buf,
+			size_t count, loff_t *ppos);
+
+static int sh03_rtc_ioctl(struct inode *inode, struct file *file,
+		     unsigned int cmd, unsigned long arg);
+
+#ifdef SH03_RTC_IRQ
+static unsigned int sh03_rtc_poll(struct file *file, poll_table *wait);
+#endif
+
+void sh03_rtc_get_rtc_time(struct rtc_time *rtc_tm);
+static void sh03_get_rtc_alm_time (struct rtc_time *alm_tm);
+#ifdef SH03_RTC_IRQ
+static void sh03_rtc_dropped_irq(unsigned long data);
+
+static void sh03_set_rtc_irq_bit(unsigned int bit);
+static void sh03_mask_rtc_irq_bit(unsigned int bit);
+#endif
+
+static int sh03_rtc_read_proc(char *page, char **start, off_t off,
+                         int count, int *eof, void *data);
+
+/*
+ *	Bits in rtc_status. (6 bits of room for future expansion)
+ */
+
+#define RTC_IS_OPEN		0x01	/* means /dev/rtc is in use	*/
+#define RTC_TIMER_ON		0x02	/* missed irq timer active	*/
+
+/*
+ * rtc_status is never changed by rtc_interrupt, and ioctl/open/close is
+ * protected by the big kernel lock. However, ioctl can still disable the timer
+ * in rtc_status and then with del_timer after the interrupt has read
+ * rtc_status but before mod_timer is called, which would then reenable the
+ * timer (but you would need to have an awful timing before you'd trip on it)
+ */
+static unsigned long rtc_status = 0;	/* bitmapped status byte.	*/
+static unsigned long rtc_freq = 0;	/* Current periodic IRQ rate	*/
+static unsigned long rtc_irq_data = 0;	/* our output to the world	*/
+static unsigned long rtc_max_user_freq = 64; /* > this, need CAP_SYS_RESOURCE */
+
+#ifdef SH03_RTC_IRQ
+/*
+ * rtc_task_lock nests inside rtc_lock.
+ */
+static spinlock_t rtc_task_lock = SPIN_LOCK_UNLOCKED;
+static rtc_task_t *rtc_callback = NULL;
+#endif
+
+/*
+ *	If this driver ever becomes modularised, it will be really nice
+ *	to make the epoch retain its value across module reload...
+ */
+
+static unsigned long epoch = 1900;	/* year corresponding to 0x00	*/
+
+static const unsigned char days_in_mo[] = 
+{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
+
+#if 0 /* @@@@@ 16.09.29 TODO */
+/*
+ * Returns true if a clock update is in progress
+ */
+static inline unsigned char rtc_is_updating(void)
+{
+	unsigned char uip;
+
+	spin_lock_irq(&rtc_lock);
+	uip = (CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP);
+	spin_unlock_irq(&rtc_lock);
+	return uip;
+}
+#endif
+
+#ifdef SH03_RTC_IRQ
+/*
+ *	A very tiny interrupt handler. It runs with SA_INTERRUPT set,
+ *	but there is possibility of conflicting with the set_rtc_mmss()
+ *	call (the rtc irq and the timer irq can easily run at the same
+ *	time in two different CPUs). So we need to serialize
+ *	accesses to the chip with the rtc_lock spinlock that each
+ *	architecture should implement in the timer code.
+ *	(See ./arch/XXXX/kernel/time.c for the set_rtc_mmss() function.)
+ */
+
+irqreturn_t sh03_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+	/*
+	 *	Can be an alarm interrupt, update complete interrupt,
+	 *	or a periodic interrupt. We store the status in the
+	 *	low byte and the number of interrupts received since
+	 *	the last read in the remainder of rtc_irq_data.
+	 */
+
+	spin_lock (&rtc_lock);
+	rtc_irq_data += 0x100;
+	rtc_irq_data &= ~0xff;
+	SELECT_BANK(RTC_BANK1);
+	rtc_irq_data |= (READ_ATCTL & RTC_AF) >> 1;
+	WRITE_ATCTL(READ_ATCTL & ~ RTC_AF);
+	SELECT_BANK(RTC_BANK2);
+	rtc_irq_data |= (READ_TMCTL & RTC_TF);
+	WRITE_TMCTL(READ_TMCTL & ~ RTC_TF);
+	SELECT_BANK(RTC_BANK0);
+
+	if (rtc_status & RTC_TIMER_ON)
+		mod_timer(&sh03_rtc_irq_timer, jiffies + HZ/rtc_freq + 2*HZ/100);
+
+	spin_unlock (&rtc_lock);
+
+	/* Now do the rest of the actions */
+	spin_lock(&rtc_task_lock);
+	if (rtc_callback)
+		rtc_callback->func(rtc_callback->private_data);
+	spin_unlock(&rtc_task_lock);
+	wake_up_interruptible(&sh03_rtc_wait);	
+
+	kill_fasync (&sh03_rtc_async_queue, SIGIO, POLL_IN);
+
+	return IRQ_HANDLED;
+}
+#endif
+
+/*
+ * sysctl-tuning infrastructure.
+ */
+static ctl_table rtc_table[] = {
+	{
+		.ctl_name	= 1,
+		.procname	= "max-user-freq",
+		.data		= &rtc_max_user_freq,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{ .ctl_name = 0 }
+};
+
+static ctl_table rtc_root[] = {
+	{
+		.ctl_name	= 1,
+		.procname	= "rtc",
+		.maxlen		= 0,
+		.mode		= 0555,
+		.child		= rtc_table,
+	},
+	{ .ctl_name = 0 }
+};
+
+static ctl_table dev_root[] = {
+	{
+		.ctl_name	= CTL_DEV,
+		.procname	= "dev",
+		.maxlen		= 0,
+		.mode		= 0555,
+		.child		= rtc_root,
+	},
+	{ .ctl_name = 0 }
+};
+
+static struct ctl_table_header *sysctl_header;
+
+static int __init init_sysctl(void)
+{
+    sysctl_header = register_sysctl_table(dev_root, 0);
+    return 0;
+}
+
+static void __exit cleanup_sysctl(void)
+{
+    unregister_sysctl_table(sysctl_header);
+}
+
+/*
+ *	Now all the various file operations that we export.
+ */
+
+static ssize_t sh03_rtc_read(struct file *file, char __user *buf,
+			size_t count, loff_t *ppos)
+{
+#ifndef SH03_RTC_IRQ
+	return -EIO;
+#else
+	DECLARE_WAITQUEUE(wait, current);
+	unsigned long data;
+	ssize_t retval;
+	
+	if (sh03_rtc_has_irq == 0)
+		return -EIO;
+
+	if (count < sizeof(unsigned))
+		return -EINVAL;
+
+	add_wait_queue(&sh03_rtc_wait, &wait);
+
+	do {
+		/* First make it right. Then make it fast. Putting this whole
+		 * block within the parentheses of a while would be too
+		 * confusing. And no, xchg() is not the answer. */
+
+		__set_current_state(TASK_INTERRUPTIBLE);
+		
+		spin_lock_irq (&rtc_lock);
+		data = rtc_irq_data;
+		rtc_irq_data = 0;
+		spin_unlock_irq (&rtc_lock);
+
+		if (data != 0)
+			break;
+
+		if (file->f_flags & O_NONBLOCK) {
+			retval = -EAGAIN;
+			goto out;
+		}
+		if (signal_pending(current)) {
+			retval = -ERESTARTSYS;
+			goto out;
+		}
+		schedule();
+	} while (1);
+
+	if (count < sizeof(unsigned long))
+		retval = put_user(data, (unsigned int __user *)buf) ?: sizeof(int); 
+	else
+		retval = put_user(data, (unsigned long __user *)buf) ?: sizeof(long);
+ out:
+	current->state = TASK_RUNNING;
+	remove_wait_queue(&sh03_rtc_wait, &wait);
+
+	return retval;
+#endif
+}
+
+static int sh03_rtc_do_ioctl(unsigned int cmd, unsigned long arg, int kernel)
+{
+	struct rtc_time wtime; 
+
+#ifdef SH03_RTC_IRQ
+	if (sh03_rtc_has_irq == 0) {
+		switch (cmd) {
+		case RTC_AIE_OFF:
+		case RTC_AIE_ON:
+		case RTC_PIE_OFF:
+		case RTC_PIE_ON:
+		case RTC_UIE_OFF:
+		case RTC_UIE_ON:
+		case RTC_IRQP_READ:
+		case RTC_IRQP_SET:
+			return -EINVAL;
+		};
+	}
+#endif
+
+	switch (cmd) {
+#ifdef SH03_RTC_IRQ
+	case RTC_AIE_OFF:	/* Mask alarm int. enab. bit	*/
+	{
+		sh03_mask_rtc_irq_bit(RTC_AIE);
+		return 0;
+	}
+	case RTC_AIE_ON:	/* Allow alarm interrupts.	*/
+	{
+		sh03_set_rtc_irq_bit(RTC_AIE);
+		return 0;
+	}
+	case RTC_PIE_OFF:	/* Mask periodic int. enab. bit	*/
+	{
+		sh03_mask_rtc_irq_bit(RTC_PIE_OFF);
+		if (rtc_status & RTC_TIMER_ON) {
+			spin_lock_irq (&rtc_lock);
+			rtc_status &= ~RTC_TIMER_ON;
+			del_timer(&sh03_rtc_irq_timer);
+			spin_unlock_irq (&rtc_lock);
+		}
+		return 0;
+	}
+	case RTC_PIE_ON:	/* Allow periodic ints		*/
+	{
+
+		/*
+		 * We don't really want Joe User enabling more
+		 * than 64Hz of interrupts on a multi-user machine.
+		 */
+		if (!kernel && (rtc_freq > rtc_max_user_freq) &&
+			(!capable(CAP_SYS_RESOURCE)))
+			return -EACCES;
+
+		if (!(rtc_status & RTC_TIMER_ON)) {
+			spin_lock_irq (&rtc_lock);
+			sh03_rtc_irq_timer.expires = jiffies + HZ/rtc_freq + 2*HZ/100;
+			add_timer(&sh03_rtc_irq_timer);
+			rtc_status |= RTC_TIMER_ON;
+			spin_unlock_irq (&rtc_lock);
+		}
+		sh03_set_rtc_irq_bit(RTC_PIE_ON);
+		return 0;
+	}
+#if 1 /* @@@@@ 16.09.29 TODO */
+	case RTC_UIE_OFF:	/* Mask ints from RTC updates.	*/
+	case RTC_UIE_ON:	/* Allow ints for RTC updates.	*/
+		return -EINVAL;
+#else
+	case RTC_UIE_OFF:	/* Mask ints from RTC updates.	*/
+	{
+		sh03_mask_rtc_irq_bit(RTC_UIE);
+		return 0;
+	}
+	case RTC_UIE_ON:	/* Allow ints for RTC updates.	*/
+	{
+		sh03_set_rtc_irq_bit(RTC_UIE);
+		return 0;
+	}
+#endif
+#endif
+	case RTC_ALM_READ:	/* Read the present alarm time */
+	{
+		/*
+		 * This returns a struct rtc_time. Reading >= 0xc0
+		 * means "don't care" or "match all". Only the tm_hour,
+		 * tm_min, and tm_sec values are filled in.
+		 */
+		memset(&wtime, 0, sizeof(struct rtc_time));
+		sh03_get_rtc_alm_time(&wtime);
+		break; 
+	}
+	case RTC_ALM_SET:	/* Store a time into the alarm */
+	{
+		/*
+		 * This expects a struct rtc_time. Writing 0xff means
+		 * "don't care" or "match all". Only the tm_hour,
+		 * tm_min and tm_sec are used.
+		 */
+		unsigned char day, week, hrs, min, sec;
+		struct rtc_time alm_tm;
+
+		if (copy_from_user(&alm_tm, (struct rtc_time __user *)arg,
+				   sizeof(struct rtc_time)))
+			return -EFAULT;
+
+		day  = alm_tm.tm_mday;
+		week = alm_tm.tm_wday;
+		hrs  = alm_tm.tm_hour;
+		min  = alm_tm.tm_min;
+		sec  = alm_tm.tm_sec;
+		if (day >= 31)
+			day = 99;
+
+		if (week >= 7)
+			week = 9;
+
+		if (hrs >= 24)
+			hrs = 99;
+
+		if (min >= 60)
+			min = 99;
+
+		if (sec >= 60)
+			sec = 99;
+
+		spin_lock_irq(&rtc_lock);
+		BIN_TO_BCD(sec);
+		BIN_TO_BCD(min);
+		BIN_TO_BCD(hrs);
+		BIN_TO_BCD(day);
+		SELECT_BANK(RTC_BANK1);
+		WRITE_DAY(day);
+		WRITE_WEEK(week);
+		WRITE_HOURS(hrs);
+		WRITE_MINUTES(min);
+		WRITE_SECONDS(sec);
+		SELECT_BANK(RTC_BANK0);
+		spin_unlock_irq(&rtc_lock);
+
+		return 0;
+	}
+	case RTC_RD_TIME:	/* Read the time/date from RTC	*/
+	{
+		memset(&wtime, 0, sizeof(struct rtc_time));
+		sh03_rtc_get_rtc_time(&wtime);
+		break;
+	}
+	case RTC_SET_TIME:	/* Set the RTC */
+	{
+		struct rtc_time rtc_tm;
+		unsigned char mon, day, hrs, min, sec, leap_yr;
+		unsigned int yrs, yrs_low, yrs_high;
+
+		if (!capable(CAP_SYS_TIME))
+			return -EACCES;
+
+		if (copy_from_user(&rtc_tm, (struct rtc_time __user *)arg,
+				   sizeof(struct rtc_time)))
+			return -EFAULT;
+
+		yrs = rtc_tm.tm_year + 1900;
+		mon = rtc_tm.tm_mon + 1;   /* tm_mon starts at zero */
+		day = rtc_tm.tm_mday;
+		hrs = rtc_tm.tm_hour;
+		min = rtc_tm.tm_min;
+		sec = rtc_tm.tm_sec;
+
+		if (yrs < 1970)
+			return -EINVAL;
+
+		leap_yr = ((!(yrs % 4) && (yrs % 100)) || !(yrs % 400));
+
+		if ((mon > 12) || (day == 0))
+			return -EINVAL;
+
+		if (day > (days_in_mo[mon] + ((mon == 2) && leap_yr)))
+			return -EINVAL;
+			
+		if ((hrs >= 24) || (min >= 60) || (sec >= 60))
+			return -EINVAL;
+
+		if ((yrs -= epoch) > 255)    /* They are unsigned */
+			return -EINVAL;
+
+		spin_lock_irq(&rtc_lock);
+
+		/* These limits and adjustments are independent of
+		 * whether the chip is in binary mode or not.
+		 */
+		if (yrs > 169) {
+			spin_unlock_irq(&rtc_lock);
+			return -EINVAL;
+		}
+		if (yrs >= 100)
+			yrs -= 100;
+
+		yrs += epoch;
+		BIN_TO_BCD(sec);
+		BIN_TO_BCD(min);
+		BIN_TO_BCD(hrs);
+		BIN_TO_BCD(day);
+		BIN_TO_BCD(mon);
+		yrs_low = yrs % 100;
+		yrs_high = yrs / 100;
+		BIN_TO_BCD(yrs_low);
+		BIN_TO_BCD(yrs_high);
+
+		WRITE_YEAR_HIGH(yrs_high);
+		WRITE_YEAR_LOW(yrs_low);
+		WRITE_MONTH(mon);
+		WRITE_DAY(day);
+		WRITE_HOURS(hrs);
+		WRITE_MINUTES(min);
+		WRITE_SECONDS(sec);
+
+		spin_unlock_irq(&rtc_lock);
+		return 0;
+	}
+#ifdef SH03_RTC_IRQ
+	case RTC_IRQP_READ:	/* Read the periodic IRQ rate.	*/
+	{
+		return put_user(rtc_freq, (unsigned long __user *)arg);
+	}
+	case RTC_IRQP_SET:	/* Set periodic IRQ rate.	*/
+	{
+		int tmp = 0;
+
+		/*
+		 * We don't really want Joe User generating more
+		 * than 64Hz of interrupts on a multi-user machine.
+		 */
+		if (!kernel && (arg > rtc_max_user_freq) && (!capable(CAP_SYS_RESOURCE)))
+			return -EACCES;
+
+		switch (arg) {
+		case    1: tmp = 2; break;
+		case   64: tmp = 1; break;
+		case 4096: tmp = 0; break;
+		default:   return -EINVAL;
+		}
+
+		spin_lock_irq(&rtc_lock);
+		rtc_freq = arg;
+		SELECT_BANK(RTC_BANK2);
+		WRITE_CLOCK((READ_CLOCK & ~3) | tmp);
+		SELECT_BANK(RTC_BANK0);
+		spin_unlock_irq(&rtc_lock);
+		return 0;
+	}
+#endif
+	case RTC_EPOCH_READ:	/* Read the epoch.	*/
+	{
+		return put_user (epoch, (unsigned long __user *)arg);
+	}
+	case RTC_EPOCH_SET:	/* Set the epoch.	*/
+	{
+		/* 
+		 * There were no RTC clocks before 1900.
+		 */
+		if (arg < 1900)
+			return -EINVAL;
+
+		if (!capable(CAP_SYS_TIME))
+			return -EACCES;
+
+		epoch = arg;
+		return 0;
+	}
+	default:
+		return -ENOTTY;
+	}
+	return copy_to_user((void __user *)arg, &wtime, sizeof wtime) ? -EFAULT : 0;
+}
+
+static int sh03_rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd,
+		     unsigned long arg)
+{
+	return sh03_rtc_do_ioctl(cmd, arg, 0);
+}
+
+/*
+ *	We enforce only one user at a time here with the open/close.
+ *	Also clear the previous interrupt data on an open, and clean
+ *	up things on a close.
+ */
+
+/* We use rtc_lock to protect against concurrent opens. So the BKL is not
+ * needed here. Or anywhere else in this driver. */
+static int sh03_rtc_open(struct inode *inode, struct file *file)
+{
+	spin_lock_irq (&rtc_lock);
+
+	if(rtc_status & RTC_IS_OPEN)
+		goto out_busy;
+
+	rtc_status |= RTC_IS_OPEN;
+
+	rtc_irq_data = 0;
+	spin_unlock_irq (&rtc_lock);
+	return 0;
+
+out_busy:
+	spin_unlock_irq (&rtc_lock);
+	return -EBUSY;
+}
+
+static int sh03_rtc_fasync (int fd, struct file *filp, int on)
+
+{
+	return fasync_helper (fd, filp, on, &sh03_rtc_async_queue);
+}
+
+static int sh03_rtc_release(struct inode *inode, struct file *file)
+{
+#ifdef SH03_RTC_IRQ
+	if (sh03_rtc_has_irq == 0)
+		goto no_irq;
+
+	/*
+	 * Turn off all interrupts once the device is no longer
+	 * in use, and clear the data.
+	 */
+
+	spin_lock_irq(&rtc_lock);
+	SELECT_BANK(RTC_BANK1);
+	ctrl_outb(0, RTC_ATCTL);
+	SELECT_BANK(RTC_BANK2);
+	ctrl_outb(0, RTC_TMCTL);
+	SELECT_BANK(RTC_BANK0);
+
+	if (rtc_status & RTC_TIMER_ON) {
+		rtc_status &= ~RTC_TIMER_ON;
+		del_timer(&sh03_rtc_irq_timer);
+	}
+	spin_unlock_irq(&rtc_lock);
+
+	if (file->f_flags & FASYNC) {
+		sh03_rtc_fasync (-1, file, 0);
+	}
+no_irq:
+#endif
+
+	spin_lock_irq (&rtc_lock);
+	rtc_irq_data = 0;
+	rtc_status &= ~RTC_IS_OPEN;
+	spin_unlock_irq (&rtc_lock);
+	return 0;
+}
+
+#ifdef SH03_RTC_IRQ
+/* Called without the kernel lock - fine */
+static unsigned int sh03_rtc_poll(struct file *file, poll_table *wait)
+{
+	unsigned long l;
+
+	if (sh03_rtc_has_irq == 0)
+		return 0;
+
+	poll_wait(file, &sh03_rtc_wait, wait);
+
+	spin_lock_irq (&rtc_lock);
+	l = rtc_irq_data;
+	spin_unlock_irq (&rtc_lock);
+
+	if (l != 0)
+		return POLLIN | POLLRDNORM;
+	return 0;
+}
+#endif
+
+int rtc_control(rtc_task_t *task, unsigned int cmd, unsigned long arg)
+{
+#ifndef SH03_RTC_IRQ
+	return -EIO;
+#else
+	spin_lock_irq(&rtc_task_lock);
+	if (rtc_callback != task) {
+		spin_unlock_irq(&rtc_task_lock);
+		return -ENXIO;
+	}
+	spin_unlock_irq(&rtc_task_lock);
+	return sh03_rtc_do_ioctl(cmd, arg, 1);
+#endif
+}
+
+
+/*
+ *	The various file operations we support.
+ */
+
+static struct file_operations sh03_rtc_fops = {
+	.owner		= THIS_MODULE,
+	.llseek		= no_llseek,
+	.read		= sh03_rtc_read,
+#ifdef SH03_RTC_IRQ
+	.poll		= sh03_rtc_poll,
+#endif
+	.ioctl		= sh03_rtc_ioctl,
+	.open		= sh03_rtc_open,
+	.release	= sh03_rtc_release,
+	.fasync		= sh03_rtc_fasync,
+};
+
+static struct miscdevice sh03_rtc_dev=
+{
+	RTC_MINOR,
+	"sh03-rtc",
+	&sh03_rtc_fops
+};
+
+#ifdef SH03_RTC_IRQ
+static irqreturn_t (*rtc_int_handler_ptr)(int irq, void *dev_id, struct pt_regs *regs);
+#endif
+
+static int __init sh03_rtc_init(void)
+{
+	if (!request_region(SH03_RTC_PORT(0), SH03_RTC_IO_EXTENT, "sh03-rtc")) {
+		printk(KERN_ERR "sh03-rtc: I/O port %d is not free.\n", SH03_RTC_PORT (0));
+		return -EIO;
+	}
+
+#ifdef SH03_RTC_IRQ
+	rtc_int_handler_ptr = sh03_rtc_interrupt;
+	if(request_irq(SH03_RTC_IRQ, rtc_int_handler_ptr, SA_INTERRUPT, "sh03-rtc", NULL)) {
+		/* Yeah right, seeing as irq 8 doesn't even hit the bus. */
+		printk(KERN_ERR "sh03-rtc: IRQ %d is not free.\n", RTC_IRQ);
+		release_region(SH03_RTC_PORT(0), SH03_RTC_IO_EXTENT);
+		return -EIO;
+	}
+#endif
+
+	if (misc_register(&sh03_rtc_dev)) {
+#ifdef SH03_RTC_IRQ
+		free_irq(SH03_RTC_IRQ, NULL);
+#endif
+		release_region(SH03_RTC_PORT(0), SH03_RTC_IO_EXTENT);
+		return -ENODEV;
+	}
+	if (!create_proc_read_entry ("driver/sh03-rtc", 0, NULL, sh03_rtc_read_proc, NULL)) {
+#ifdef SH03_RTC_IRQ
+		free_irq(SH03_RTC_IRQ, NULL);
+#endif
+		release_region(SH03_RTC_PORT(0), SH03_RTC_IO_EXTENT);
+		misc_deregister(&sh03_rtc_dev);
+		return -ENOMEM;
+	}
+
+#ifdef SH03_RTC_IRQ
+	if (sh03_rtc_has_irq == 0)
+		goto no_irq2;
+
+	init_timer(&sh03_rtc_irq_timer);
+	sh03_rtc_irq_timer.function = sh03_rtc_dropped_irq;
+	spin_lock_irq(&rtc_lock);
+	SELECT_BANK(RTC_BANK2);
+	WRITE_CLOCK(2);
+	SELECT_BANK(RTC_BANK0);
+	rtc_freq = 1;
+	spin_unlock_irq(&rtc_lock);
+no_irq2:
+#endif
+
+	(void) init_sysctl();
+
+	printk(KERN_INFO "CTP/PCI-SH03 Real Time Clock Driver v" SH03_RTC_VERSION "\n");
+
+	return 0;
+}
+
+static void __exit sh03_rtc_exit (void)
+{
+	cleanup_sysctl();
+	remove_proc_entry ("driver/sh03-rtc", NULL);
+	misc_deregister(&sh03_rtc_dev);
+	release_region (SH03_RTC_PORT (0), SH03_RTC_IO_EXTENT);
+#ifdef SH03_RTC_IRQ
+	if (sh03_rtc_has_irq)
+		free_irq (SH03_RTC_IRQ, NULL);
+#endif
+}
+
+module_init(sh03_rtc_init);
+module_exit(sh03_rtc_exit);
+
+#ifdef SH03_RTC_IRQ
+/*
+ * 	At IRQ rates >= 4096Hz, an interrupt may get lost altogether.
+ *	(usually during an IDE disk interrupt, with IRQ unmasking off)
+ *	Since the interrupt handler doesn't get called, the IRQ status
+ *	byte doesn't get read, and the RTC stops generating interrupts.
+ *	A timer is set, and will call this function if/when that happens.
+ *	To get it out of this stalled state, we just read the status.
+ *	At least a jiffy of interrupts (rtc_freq/HZ) will have been lost.
+ *	(You *really* shouldn't be trying to use a non-realtime system 
+ *	for something that requires a steady > 1KHz signal anyways.)
+ */
+
+static void sh03_rtc_dropped_irq(unsigned long data)
+{
+	unsigned long freq;
+
+	spin_lock_irq (&rtc_lock);
+
+	/* Just in case someone disabled the timer from behind our back... */
+	if (rtc_status & RTC_TIMER_ON)
+		mod_timer(&sh03_rtc_irq_timer, jiffies + HZ/rtc_freq + 2*HZ/100);
+
+	rtc_irq_data += ((rtc_freq/HZ)<<8);
+	rtc_irq_data &= ~0xff;
+	SELECT_BANK(RTC_BANK1);
+	rtc_irq_data |= (READ_ATCTL & RTC_AF) >> 1;
+	SELECT_BANK(RTC_BANK2);
+	rtc_irq_data |= (READ_TMCTL & RTC_TF);
+	SELECT_BANK(RTC_BANK0);
+
+	freq = rtc_freq;
+
+	spin_unlock_irq(&rtc_lock);
+
+	printk(KERN_WARNING "sh03-rtc: lost some interrupts at %ldHz.\n", freq);
+
+	/* Now we have new data */
+	wake_up_interruptible(&sh03_rtc_wait);
+
+	kill_fasync (&sh03_rtc_async_queue, SIGIO, POLL_IN);
+}
+#endif
+
+/*
+ *	Info exported via "/proc/driver/sh03-rtc".
+ */
+
+static int sh03_rtc_proc_output (char *buf)
+{
+#define YN(bit) ((bit) ? "yes" : "no")
+#define NY(bit) ((bit) ? "no" : "yes")
+	char *p;
+	struct rtc_time tm;
+	unsigned char aie, tie, af, tf;
+	unsigned long freq;
+	int sec_ae, min_ae, hour_ae, week_ae, day_ae;
+
+	spin_lock_irq(&rtc_lock);
+	SELECT_BANK(RTC_BANK1);
+	aie = READ_ATCTL & RTC_AIE;
+	af  = READ_ATCTL & 2;
+	sec_ae  = ctrl_inb(RTC_SEC10) & 8;
+	min_ae  = ctrl_inb(RTC_MIN10) & 8;
+	hour_ae = ctrl_inb(RTC_HOU10) & 8;
+	week_ae = ctrl_inb(RTC_WEE1 ) & 8;
+	day_ae  = ctrl_inb(RTC_DAY10) & 8;
+	SELECT_BANK(RTC_BANK2);
+	tie = READ_TMCTL & RTC_TIE;
+	tf  = READ_TMCTL & 2;
+	SELECT_BANK(RTC_BANK0);
+	freq = rtc_freq;
+	spin_unlock_irq(&rtc_lock);
+
+	p = buf;
+
+	sh03_rtc_get_rtc_time(&tm);
+
+	/*
+	 * There is no way to tell if the luser has the RTC set for local
+	 * time or for Universal Standard Time (GMT). Probably local though.
+	 */
+	p += sprintf(p,
+		     "rtc_time\t: %02d:%02d:%02d\n"
+		     "rtc_date\t: %04d-%02d-%02d\n"
+	 	     "rtc_epoch\t: %04lu\n",
+		     tm.tm_hour, tm.tm_min, tm.tm_sec,
+		     tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, epoch);
+
+	sh03_get_rtc_alm_time(&tm);
+
+	/*
+	 * We implicitly assume 24hr mode here. Alarm values >= 0xc0 will
+	 * match any value for that particular field. Values that are
+	 * greater than a valid time, but less than 0xc0 shouldn't appear.
+	 */
+	p += sprintf(p, "alarm\t\t: ");
+	if (!day_ae)
+		p += sprintf(p, "%02d ", tm.tm_mday);
+	else
+		p += sprintf(p, "** ");
+	if (!week_ae)
+		p += sprintf(p, "%01d ", tm.tm_wday);
+	else
+		p += sprintf(p, "* ");
+	if (!hour_ae)
+		p += sprintf(p, "%02d:", tm.tm_hour);
+	else
+		p += sprintf(p, "**:");
+
+	if (!min_ae)
+		p += sprintf(p, "%02d:", tm.tm_min);
+	else
+		p += sprintf(p, "**:");
+
+	if (!sec_ae)
+		p += sprintf(p, "%02d\n", tm.tm_sec);
+	else
+		p += sprintf(p, "**\n");
+
+	p += sprintf(p,
+		     "alarm_IRQ\t: %s-%s\n"
+		     "periodic_IRQ\t: %s-%s\n"
+		     "periodic_freq\t: %ld\n"
+		     "FOS\t\t: %s\n"
+		     "Control Reg\t: %x\n",
+		     YN(aie),YN(af),
+		     YN(tie),YN(tf),
+		     freq,
+		     ctrl_inb(RTC_SEC10) & 8 ? "on" : "off",
+		     ctrl_inb(RTC_CTL) & 15);
+
+	return  p - buf;
+#undef YN
+#undef NY
+}
+
+static int sh03_rtc_read_proc(char *page, char **start, off_t off,
+                         int count, int *eof, void *data)
+{
+        int len = sh03_rtc_proc_output (page);
+        if (len <= off+count) *eof = 1;
+        *start = page + off;
+        len -= off;
+        if (len>count) len = count;
+        if (len<0) len = 0;
+        return len;
+}
+
+void sh03_rtc_get_rtc_time(struct rtc_time *rtc_tm)
+{
+// @@@@@ 16.09.29 TODO	unsigned long uip_watchdog = jiffies;
+
+	/*
+	 * read RTC once any update in progress is done. The update
+	 * can take just over 2ms. We wait 10 to 20ms. There is no need to
+	 * to poll-wait (up to 1s - eeccch) for the falling edge of RTC_UIP.
+	 * If you need to know *exactly* when a second has started, enable
+	 * periodic update complete interrupts, (via ioctl) and then 
+	 * immediately read /dev/rtc which will block until you get the IRQ.
+	 * Once the read clears, read the RTC time (again via ioctl). Easy.
+	 */
+
+#if 0 /* @@@@@ 16.09.29 TODO */
+	if (rtc_is_updating() != 0)
+		while (jiffies - uip_watchdog < 2*HZ/100) {
+			barrier();
+			cpu_relax();
+		}
+#endif
+	/*
+	 * Only the values that we read from the RTC are set. We leave
+	 * tm_wday, tm_yday and tm_isdst untouched. Even though the
+	 * RTC has RTC_DAY_OF_WEEK, we ignore it, as it is only updated
+	 * by the RTC when initially set to a non-zero value.
+	 */
+	spin_lock_irq(&rtc_lock);
+	rtc_tm->tm_sec = READ_SECONDS;
+	rtc_tm->tm_min = READ_MINUTES;
+	rtc_tm->tm_hour = READ_HOURS;
+	rtc_tm->tm_wday = READ_WEEK;
+	rtc_tm->tm_mday = READ_DAY;
+	rtc_tm->tm_mon = READ_MONTH;
+	rtc_tm->tm_year = READ_YEAR - epoch;
+	spin_unlock_irq(&rtc_lock);
+
+	/*
+	 * Account for differences between how the RTC uses the values
+	 * and how they are defined in a struct rtc_time;
+	 */
+	if ((rtc_tm->tm_year += (epoch - 1900)) <= 69)
+		rtc_tm->tm_year += 100;
+
+	rtc_tm->tm_mon--;
+}
+
+static void sh03_get_rtc_alm_time(struct rtc_time *alm_tm)
+{
+	/*
+	 * Only the values that we read from the RTC are set. That
+	 * means only tm_hour, tm_min, and tm_sec.
+	 */
+	spin_lock_irq(&rtc_lock);
+	SELECT_BANK(RTC_BANK1);
+	alm_tm->tm_sec = READ_SECONDS;
+	alm_tm->tm_min = READ_MINUTES;
+	alm_tm->tm_hour = READ_HOURS;
+	alm_tm->tm_wday = READ_WEEK;
+	alm_tm->tm_mday = READ_DAY;
+	SELECT_BANK(RTC_BANK0);
+	spin_unlock_irq(&rtc_lock);
+}
+
+#ifdef SH03_RTC_IRQ
+/*
+ * Used to disable/enable interrupts for any one of UIE, AIE, PIE.
+ * Rumour has it that if you frob the interrupt enable/disable
+ * bits in RTC_CONTROL, you should read RTC_INTR_FLAGS, to
+ * ensure you actually start getting interrupts. Probably for
+ * compatibility with older/broken chipset RTC implementations.
+ * We also clear out any old irq data after an ioctl() that
+ * meddles with the interrupt enable/disable bits.
+ */
+
+static void sh03_mask_rtc_irq_bit(unsigned int bit)
+{
+	unsigned char val;
+
+	spin_lock_irq(&rtc_lock);
+	switch(bit) {
+	case RTC_AIE_OFF:
+	  SELECT_BANK(RTC_BANK1);
+	  val = READ_ATCTL;
+	  val &= ~RTC_AIE;
+	  WRITE_ATCTL(val);
+	  SELECT_BANK(RTC_BANK0);
+	  break;
+	case RTC_PIE_OFF:
+	  SELECT_BANK(RTC_BANK2);
+	  val = READ_TMCTL;
+	  val &= ~RTC_TIE;
+	  WRITE_TMCTL(val);
+	  SELECT_BANK(RTC_BANK0);
+	  break;
+	}
+
+	rtc_irq_data = 0;
+	spin_unlock_irq(&rtc_lock);
+}
+
+static void sh03_set_rtc_irq_bit(unsigned int bit)
+{
+	unsigned char val;
+
+	spin_lock_irq(&rtc_lock);
+	switch(bit) {
+	case RTC_AIE_ON:
+	  SELECT_BANK(RTC_BANK1);
+	  val = READ_ATCTL;
+	  val |= RTC_AIE;
+	  WRITE_ATCTL(val);
+	  SELECT_BANK(RTC_BANK0);
+	  break;
+	case RTC_PIE_ON:
+	  SELECT_BANK(RTC_BANK2);
+	  val = READ_TMCTL;
+	  val |= RTC_TIE;
+	  WRITE_TMCTL(val);
+	  SELECT_BANK(RTC_BANK0);
+	  break;
+	}
+
+	rtc_irq_data = 0;
+	spin_unlock_irq(&rtc_lock);
+}
+#endif
+
+MODULE_AUTHOR("Saito.K Interface Corporation");
+MODULE_LICENSE("GPL");
+MODULE_ALIAS_MISCDEV(RTC_MINOR);
+
diff -ruN linux-2.6.17-vanilla/drivers/char/sysrq.c linux-2.6.17/drivers/char/sysrq.c
--- linux-2.6.17-vanilla/drivers/char/sysrq.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/char/sysrq.c	2006-07-12 16:54:23.000000000 +0000
@@ -38,6 +38,18 @@
 #include <linux/kexec.h>
 
 #include <asm/ptrace.h>
+#ifdef CONFIG_KGDB_SYSRQ
+#include <asm/kgdb.h>
+#define  GDB_OP &kgdb_op
+static struct sysrq_key_op kgdb_op={
+	.handler	= (void *)breakpoint,
+	.help_msg	= "kGdb ",
+	.action_msg	= "Debug breakpoint\n",
+};
+
+#else
+#define  GDB_OP NULL
+#endif
 
 /* Whether we react on sysrq keys or just ignore them */
 int sysrq_enabled = 1;
@@ -296,7 +308,7 @@
 	&sysrq_showlocks_op,		/* d */
 	&sysrq_term_op,			/* e */
 	&sysrq_moom_op,			/* f */
-	NULL,				/* g */
+	GDB_OP,				/* g */
 	NULL,				/* h */
 	&sysrq_kill_op,			/* i */
 	NULL,				/* j */
diff -ruN linux-2.6.17-vanilla/drivers/char/watchdog/CVS/Entries linux-2.6.17/drivers/char/watchdog/CVS/Entries
--- linux-2.6.17-vanilla/drivers/char/watchdog/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/char/watchdog/CVS/Entries	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,2 @@
+/shwdt.c/1.12/Mon Aug 29 21:01:18 2005/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/char/watchdog/CVS/Repository linux-2.6.17/drivers/char/watchdog/CVS/Repository
--- linux-2.6.17-vanilla/drivers/char/watchdog/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/char/watchdog/CVS/Repository	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/char/watchdog
diff -ruN linux-2.6.17-vanilla/drivers/char/watchdog/CVS/Root linux-2.6.17/drivers/char/watchdog/CVS/Root
--- linux-2.6.17-vanilla/drivers/char/watchdog/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/char/watchdog/CVS/Root	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/i2c/CVS/Entries linux-2.6.17/drivers/i2c/CVS/Entries
--- linux-2.6.17-vanilla/drivers/i2c/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/i2c/CVS/Entries	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,2 @@
+D/algos////
+D/busses////
diff -ruN linux-2.6.17-vanilla/drivers/i2c/CVS/Repository linux-2.6.17/drivers/i2c/CVS/Repository
--- linux-2.6.17-vanilla/drivers/i2c/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/i2c/CVS/Repository	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/i2c
diff -ruN linux-2.6.17-vanilla/drivers/i2c/CVS/Root linux-2.6.17/drivers/i2c/CVS/Root
--- linux-2.6.17-vanilla/drivers/i2c/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/i2c/CVS/Root	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/CVS/Entries linux-2.6.17/drivers/i2c/algos/CVS/Entries
--- linux-2.6.17-vanilla/drivers/i2c/algos/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/i2c/algos/CVS/Entries	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,5 @@
+/Kconfig/1.3/Wed Mar  2 13:02:57 2005/-ko/
+/Makefile/1.3/Wed Mar  2 13:02:57 2005/-ko/
+/i2c-algo-voyager.c/1.1/Wed Apr 21 00:09:16 2004/-ko/
+/i2c-algo-voyager.h/1.2/Wed Feb  8 22:08:10 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/CVS/Repository linux-2.6.17/drivers/i2c/algos/CVS/Repository
--- linux-2.6.17-vanilla/drivers/i2c/algos/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/i2c/algos/CVS/Repository	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/i2c/algos
diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/CVS/Root linux-2.6.17/drivers/i2c/algos/CVS/Root
--- linux-2.6.17-vanilla/drivers/i2c/algos/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/i2c/algos/CVS/Root	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/Kconfig linux-2.6.17/drivers/i2c/algos/Kconfig
--- linux-2.6.17-vanilla/drivers/i2c/algos/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/i2c/algos/Kconfig	2006-07-12 16:54:23.000000000 +0000
@@ -53,6 +53,10 @@
 	tristate "MPC8xx CPM I2C interface"
 	depends on 8xx && I2C
 
+config I2C_ALGOVOYAGER
+	tristate "Silicon Motion Voyager GX Algorithm"
+	depends on SH_RTS7751R2D && I2C
+
 config I2C_ALGO_SIBYTE
 	tristate "SiByte SMBus interface"
 	depends on SIBYTE_SB1xxx_SOC && I2C
diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/Makefile linux-2.6.17/drivers/i2c/algos/Makefile
--- linux-2.6.17-vanilla/drivers/i2c/algos/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/i2c/algos/Makefile	2006-07-12 16:54:23.000000000 +0000
@@ -6,6 +6,7 @@
 obj-$(CONFIG_I2C_ALGOPCF)	+= i2c-algo-pcf.o
 obj-$(CONFIG_I2C_ALGOPCA)	+= i2c-algo-pca.o
 obj-$(CONFIG_I2C_ALGOITE)	+= i2c-algo-ite.o
+obj-$(CONFIG_I2C_ALGOVOYAGER)	+= i2c-algo-voyager.o
 obj-$(CONFIG_I2C_ALGO_SIBYTE)	+= i2c-algo-sibyte.o
 obj-$(CONFIG_I2C_ALGO_SGI)	+= i2c-algo-sgi.o
 
diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/i2c-algo-voyager.c linux-2.6.17/drivers/i2c/algos/i2c-algo-voyager.c
--- linux-2.6.17-vanilla/drivers/i2c/algos/i2c-algo-voyager.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/i2c/algos/i2c-algo-voyager.c	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,415 @@
+/* -------------------------------------------------------------------- */
+/* i2c-algo-voyagergx.c:                                                */
+/* -------------------------------------------------------------------- */
+/*
+    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.
+
+    Copyright 2003 (c) Lineo uSolutions,Inc.
+    Copyright 2004 (c) Paul Mundt
+*/
+/* -------------------------------------------------------------------- */
+
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/delay.h>
+#include <linux/slab.h>
+#include <linux/version.h>
+#include <linux/init.h>
+#include <asm/uaccess.h>
+#include <linux/ioport.h>
+#include <linux/errno.h>
+#include <linux/sched.h>
+
+#include <linux/i2c.h>
+#include "i2c-algo-voyager.h"
+
+/* ----- global defines ----------------------------------------------- */
+#define DEB(x) if (i2c_debug>=1) x
+#define DEB2(x) if (i2c_debug>=2) x
+#define DEB3(x) if (i2c_debug>=3) x /* print several statistical values*/
+#define DEBPROTO(x) if (i2c_debug>=9) x;
+ 	/* debug the protocol by showing transferred bits */
+#define DEF_TIMEOUT 16
+
+/* debugging - slow down transfer to have a look at the data .. 	*/
+/* I use this with two leds&resistors, each one connected to sda,scl 	*/
+/* respectively. This makes sure that the algorithm works. Some chips   */
+/* might not like this, as they have an internal timeout of some mils	*/
+
+
+/* ----- global variables ---------------------------------------------	*/
+
+/* module parameters:
+ */
+static int i2c_debug=0;
+
+/* --- setting states on the bus with the right timing: ---------------	*/
+
+#define iic_outb(adap, reg, val) adap->setiic(adap->data, reg, val)
+#define iic_inb(adap, reg) adap->getiic(adap->data, reg)
+
+/* --- other auxiliary functions --------------------------------------	*/
+
+static void iic_start(struct i2c_algo_iic_data *adap)
+{
+	unsigned char ctl;
+ 	ctl = iic_inb(adap, I2C_CONTROL);
+	ctl = (ctl | I2C_CONTROL_STATUS);
+	DEB(printk("iic_start I2C_CONTROL = 0x%x\n", ctl));
+	iic_outb(adap,I2C_CONTROL,ctl);
+}
+
+static void iic_stop(struct i2c_algo_iic_data *adap)
+{
+	unsigned char ctl;
+	ctl = iic_inb(adap, I2C_CONTROL);
+	ctl = (ctl & ~I2C_CONTROL_STATUS);
+	DEB(printk("iic_stop I2C_CONTROL = 0x%x\n", ctl));
+	iic_outb(adap,I2C_CONTROL,ctl);
+}
+
+static void iic_reset(struct i2c_algo_iic_data *adap)
+{
+	unsigned char ctl;
+	ctl = iic_inb(adap, I2C_RESET);
+	ctl = (ctl & ~I2C_RESET_ERROR);
+	DEB(printk("iic_reset I2C_CONTROL = 0x%x\n", ctl));
+	iic_outb(adap,I2C_RESET,ctl);
+}
+
+
+static int wait_for_bb(struct i2c_algo_iic_data *adap)
+{
+	int timeout = DEF_TIMEOUT;
+	char status;
+
+	status = iic_inb(adap, I2C_STATUS);
+#ifndef STUB_I2C
+	while (timeout-- && (status & I2C_STATUS_BUSY)) {
+		udelay(1000); /* How much is this? */
+		status = iic_inb(adap, I2C_STATUS);
+	}
+#endif
+	if (timeout<=0) {
+		printk(KERN_ERR "Timeout, host is busy (%d)\n",timeout);
+		iic_reset(adap);
+	}
+	return(timeout<=0);
+}
+
+/*
+ * Puts this process to sleep for a period equal to timeout 
+ */
+static inline void iic_sleep(unsigned long timeout)
+{
+	schedule_timeout( timeout * HZ);
+}
+
+static int wait_for_pin(struct i2c_algo_iic_data *adap, char *status)
+{
+	int timeout = DEF_TIMEOUT;
+
+	timeout = wait_for_bb(adap);
+	if (timeout) {
+  		DEB2(printk("Timeout waiting for host not busy\n");)
+  		return -EIO;
+	}
+
+	timeout = DEF_TIMEOUT;
+
+	*status = iic_inb(adap, I2C_STATUS);
+	while (timeout-- && !(*status & I2C_STATUS_ACK)) {
+	   adap->waitforpin();
+	   *status = iic_inb(adap, I2C_STATUS);
+	}
+	if (timeout <= 0)
+		return(-1);
+	else
+		return(0);
+}
+
+/* Verify the device we want to talk to on the IIC bus really exists. */
+static inline int try_address(struct i2c_algo_iic_data *adap,
+		       unsigned int addr, int retries)
+{
+	int i, ret = -1;
+	unsigned char status;
+
+	for (i=0;i<retries;i++) {
+		iic_outb(adap, I2C_SADDRESS, addr);
+		iic_start(adap);
+		if (wait_for_pin(adap, &status) == 0) {
+			ret=1;
+			break;	/* success! */
+		}
+		iic_stop(adap);
+		udelay(adap->udelay);
+	}
+	DEB2(if (i) printk("try_address: needed %d retries for 0x%x\n",i,
+	                   addr));
+	return ret;
+}
+
+int iic_sendbytes(struct i2c_adapter *i2c_adap,const char *buf,
+                         int count)
+{
+	struct i2c_algo_iic_data	*adap = i2c_adap->algo_data;
+	int				wrcount,timeout,i;
+	unsigned char			*addr,status;
+
+	if (count != PACKET_SIZE)
+		return -EPROTO;
+
+	iic_outb(adap,I2C_BYTECOUNT,(unsigned char)(count - 1));
+	iic_outb(adap,I2C_SADDRESS,(unsigned char)SERIAL_WRITE_ADDR);
+
+	timeout = wait_for_bb(adap);
+	if (timeout)
+		return -ETIMEDOUT;
+
+	wrcount	= 0;
+	addr	= (unsigned char *)I2C_DATA;
+
+	for (i = 0;i < count;i++){
+		iic_outb(adap,(int)addr++,buf[wrcount++]);
+	}
+
+	iic_start(adap);
+		
+	/* Wait for transmission to complete */
+	timeout = wait_for_pin(adap,&status);
+	if (timeout){
+		iic_stop(adap);
+		printk("iic_sendbytes: %s write timeout.\n", i2c_adap->name);
+		return -EREMOTEIO; /* got a better one ?? */
+     	}
+
+	iic_stop(adap);
+
+	return wrcount;
+}
+
+static int iic_readbytes(struct i2c_adapter *i2c_adap, char *buf, int count,
+	int sread)
+{
+	struct i2c_algo_iic_data	*adap = i2c_adap->algo_data;
+	int				rdcount,timeout,i;
+	unsigned char			*addr,wk,status;
+
+	iic_outb(adap,I2C_BYTECOUNT,(unsigned char)(PACKET_SIZE - 1));
+	iic_outb(adap,I2C_SADDRESS,(unsigned char)SERIAL_READ_ADDR);
+
+	rdcount	= 0;
+	addr	= (unsigned char *)I2C_DATA;
+
+	iic_start(adap);
+
+	timeout = wait_for_pin(adap,&status);
+	if (timeout){
+		iic_stop(adap);
+		printk("iic_readbytes: %s read timeout.\n", i2c_adap->name);
+		return -EREMOTEIO; /* got a better one ?? */
+     	}
+
+	for (i = 0;i < PACKET_SIZE;i++){
+		wk = iic_inb(adap,(int)addr++);
+		buf[rdcount++] = wk;
+	}
+
+	iic_stop(adap);
+
+	return rdcount;
+}
+
+/* Whenever we initiate a transaction, the first byte clocked
+ * onto the bus after the start condition is the address (7 bit) of the
+ * device we want to talk to.  This function manipulates the address specified
+ * so that it makes sense to the hardware when written to the IIC peripheral.
+ *
+ * Note: 10 bit addresses are not supported in this driver, although they are
+ * supported by the hardware.  This functionality needs to be implemented.
+ */
+static inline int iic_doAddress(struct i2c_algo_iic_data *adap,
+                                struct i2c_msg *msg, int retries) 
+{
+	unsigned int addr;
+	int ret;
+
+	addr = ( msg->addr << 1 );
+
+	if (iic_inb(adap, I2C_SADDRESS) != addr) {
+		iic_outb(adap, I2C_SADDRESS, addr);
+		ret = try_address(adap, addr, retries);
+		if (ret!=1) {
+			printk("iic_doAddress: died at address code.\n");
+				return -EREMOTEIO;
+		}
+	}
+
+	return 0;
+}
+
+
+/* Description: Prepares the controller for a transaction (clearing status
+ * registers, data buffers, etc), and then calls either iic_readbytes or
+ * iic_sendbytes to do the actual transaction.
+ *
+ * still to be done: Before we issue a transaction, we should
+ * verify that the bus is not busy or in some unknown state.
+ */
+static int iic_xfer(struct i2c_adapter *i2c_adap,
+		    struct i2c_msg msgs[], 
+		    int num)
+{
+	struct i2c_algo_iic_data *adap = i2c_adap->algo_data;
+	struct i2c_msg *pmsg;
+	int i = 0;
+	int ret, timeout;
+    
+	pmsg = &msgs[i];
+
+	if(!pmsg->len) {
+		DEB2(printk("iic_xfer: read/write length is 0\n");)
+		return -EIO;
+	}
+
+	/* Wait for any pending transfers to complete */
+	timeout = wait_for_bb(adap);
+	if (timeout) {
+		DEB2(printk("iic_xfer: Timeout waiting for host not busy\n");)
+		return -EIO;
+	}
+
+	/* Load address */
+	ret = iic_doAddress(adap, pmsg, i2c_adap->retries);
+	if (ret)
+		return -EIO;
+
+	DEB3(printk("iic_xfer: Msg %d, addr=0x%x, flags=0x%x, len=%d\n",
+		i, msgs[i].addr, msgs[i].flags, msgs[i].len);)
+
+	if (pmsg->flags & I2C_M_RD) {		/* Read */
+		ret = iic_readbytes(i2c_adap, pmsg->buf, pmsg->len, 0);
+	} else {				/* Write */ 
+		udelay(1000);
+		ret = iic_sendbytes(i2c_adap, pmsg->buf, pmsg->len);
+	}
+
+	if (ret != pmsg->len) {
+		DEB3(printk("iic_xfer: error or fail on read/write %d bytes.\n",ret)); 
+	} else {
+		DEB3(printk("iic_xfer: read/write %d bytes.\n",ret));
+	}
+
+	return ret;
+}
+
+
+/* Implements device specific ioctls.  Higher level ioctls can
+ * be found in i2c-core.c and are typical of any i2c controller (specifying
+ * slave address, timeouts, etc).  These ioctls take advantage of any hardware
+ * features built into the controller for which this algorithm-adapter set
+ * was written.  These ioctls allow you to take control of the data and clock
+ * lines and set the either high or low,
+ * similar to a GPIO pin.
+ */
+static int algo_control(struct i2c_adapter *adapter, 
+	unsigned int cmd, unsigned long arg)
+{
+	struct i2c_iic_msg s_msg;
+	char *buf;
+	int ret;
+
+	if (cmd == I2C_SREAD) {
+		if(copy_from_user(&s_msg, (struct i2c_iic_msg *)arg, 
+				sizeof(struct i2c_iic_msg))) 
+			return -EFAULT;
+		buf = kmalloc(s_msg.len, GFP_KERNEL);
+		if (buf== NULL)
+			return -ENOMEM;
+
+		ret = iic_readbytes(adapter, buf, s_msg.len, 1);
+		if (ret>=0) {
+			if(copy_to_user( s_msg.buf, buf, s_msg.len) ) 
+				ret = -EFAULT;
+		}
+		kfree(buf);
+	}
+	return 0;
+}
+
+
+static u32 iic_func(struct i2c_adapter *adap)
+{
+	return I2C_FUNC_SMBUS_EMUL | I2C_FUNC_10BIT_ADDR | 
+	       I2C_FUNC_PROTOCOL_MANGLING; 
+}
+
+/* -----exported algorithm data: -------------------------------------	*/
+
+static struct i2c_algorithm iic_algo = {
+	.name		= "VoyagerGX I2C algorithm",
+	.id		= I2C_ALGO_VOYAGER,
+	.master_xfer	= iic_xfer,
+	.algo_control	= algo_control,
+	.functionality	= iic_func,
+};
+
+
+/* 
+ * registering functions to load algorithms at runtime 
+ */
+int i2c_voyager_add_bus(struct i2c_adapter *adap)
+{
+	DEB2(printk("i2c-algo-voyagergx: hw routines for %s registered.\n",
+	            adap->name));
+
+	adap->id |= iic_algo.id;
+	adap->algo = &iic_algo;
+
+	adap->timeout = 100;	/* default values, should	*/
+	adap->retries = 3;		/* be replaced by defines	*/
+	adap->flags = 0;
+
+	return i2c_add_adapter(adap);
+}
+
+
+int i2c_voyager_del_bus(struct i2c_adapter *adap)
+{
+	return i2c_del_adapter(adap);
+}
+
+int __init i2c_algo_iic_init (void)
+{
+	printk(KERN_INFO "VoyagerGX iic (i2c) algorithm module\n");
+	return 0;
+}
+
+void i2c_algo_iic_exit(void)
+{
+}
+
+MODULE_AUTHOR("Lineo uSolutions,Inc. <www.lineo.co.jp>");
+MODULE_DESCRIPTION("VoyagerGX I2C algorithm");
+MODULE_LICENSE("GPL");
+
+MODULE_PARM(i2c_debug,"i");
+MODULE_PARM_DESC(i2c_debug,
+        "debug level - 0 off; 1 normal; 2,3 more verbose; 9 iic-protocol");
+
+module_init(i2c_algo_iic_init);
+module_exit(i2c_algo_iic_exit);
diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/i2c-algo-voyager.h linux-2.6.17/drivers/i2c/algos/i2c-algo-voyager.h
--- linux-2.6.17-vanilla/drivers/i2c/algos/i2c-algo-voyager.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/i2c/algos/i2c-algo-voyager.h	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,99 @@
+/* ------------------------------------------------------------------------- */
+/* i2c-algo-ite.h i2c driver algorithms for ITE IIC adapters                 */
+/* ------------------------------------------------------------------------- */
+/*   Copyright (C) 1995-97 Simon G. Vogl
+                   1998-99 Hans Berglund
+
+    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.                */
+/* ------------------------------------------------------------------------- */
+
+/* With some changes from Ky�sti M�lkki <kmalkki@cc.hut.fi> and even
+   Frodo Looijaard <frodol@dds.nl> */
+
+/* Modifications by MontaVista Software, 2001
+   Changes made to support the ITE IIC peripheral */
+
+
+#ifndef I2C_ALGO_ITE_H
+#define I2C_ALGO_ITE_H 1
+
+#include <linux/i2c.h>
+#include <asm/mach/voyagergx_reg.h>
+
+/* Example of a sequential read request:
+	struct i2c_iic_msg s_msg; 
+
+	s_msg.addr=device_address;
+	s_msg.len=length;
+	s_msg.buf=buffer;
+	s_msg.waddr=word_address;
+	ioctl(file,I2C_SREAD, &s_msg);
+ */
+#define I2C_SREAD	0x780	/* SREAD ioctl command */
+
+struct i2c_iic_msg {
+	__u16 addr;	/* device address */
+	__u16 waddr;	/* word address */
+	short len;	/* msg length */
+	char *buf;	/* pointer to msg data */
+};
+
+struct i2c_algo_iic_data {
+	void *data;		/* private data for lolevel routines	*/
+	void (*setiic) (void *data, int ctl, int val);
+	int  (*getiic) (void *data, int ctl);
+	int  (*getown) (void *data);
+	int  (*getclock) (void *data);
+	void (*waitforpin) (void);     
+
+	/* local settings */
+	int udelay;
+	int mdelay;
+	int timeout;
+};
+
+int i2c_voyager_add_bus(struct i2c_adapter *);
+int i2c_voyager_del_bus(struct i2c_adapter *);
+
+//#define TC56XX
+#define OV7640
+//#define OV7141
+
+#if defined(TC56XX)
+#define PACKET_SIZE		4
+#define SERIAL_WRITE_ADDR	((0x56 << 1) + 0)	//0xAC
+#define SERIAL_READ_ADDR	((0x56 << 1) + 1)	//0xAD
+//#define SERIAL_WRITE_ADDR	((0x57 << 1) + 0)       //0xAE
+//#define SERIAL_READ_ADDR	((0x57 << 1) + 0)       //0xAF
+
+#elif defined(OV7640)
+#define PACKET_SIZE		2
+//#define SERIAL_WRITE_ADDR	((0x42 << 1) + 0)
+//#define SERIAL_READ_ADDR	((0x42 << 1) + 1)
+#define SERIAL_WRITE_ADDR	(0x42)
+#define SERIAL_READ_ADDR	(0x43)
+
+#elif defined(OV7141)
+#define PACKET_SIZE		2
+#define SERIAL_WRITE_ADDR	((0x42 << 1) + 0)
+#define SERIAL_READ_ADDR	((0x42 << 1) + 1)
+//#define SERIAL_WRITE_ADDR	((0x43 << 1) + 0)
+//#define SERIAL_READ_ADDR	((0x43 << 1) + 1)
+
+#else
+#define PACKET_SIZE		16
+#endif
+
+#endif /* I2C_ALGO_ITE_H */
diff -ruN linux-2.6.17-vanilla/drivers/i2c/busses/CVS/Entries linux-2.6.17/drivers/i2c/busses/CVS/Entries
--- linux-2.6.17-vanilla/drivers/i2c/busses/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/i2c/busses/CVS/Entries	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,4 @@
+/Makefile/1.9/Mon Mar 27 21:06:14 2006/-ko/
+/i2c-voyager.c/1.1/Wed Apr 21 00:09:16 2004/-ko/
+/Kconfig/1.12/Wed Jul  5 14:51:03 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/i2c/busses/CVS/Repository linux-2.6.17/drivers/i2c/busses/CVS/Repository
--- linux-2.6.17-vanilla/drivers/i2c/busses/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/i2c/busses/CVS/Repository	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/i2c/busses
diff -ruN linux-2.6.17-vanilla/drivers/i2c/busses/CVS/Root linux-2.6.17/drivers/i2c/busses/CVS/Root
--- linux-2.6.17-vanilla/drivers/i2c/busses/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/i2c/busses/CVS/Root	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/i2c/busses/Kconfig linux-2.6.17/drivers/i2c/busses/Kconfig
--- linux-2.6.17-vanilla/drivers/i2c/busses/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/i2c/busses/Kconfig	2006-07-12 16:54:23.000000000 +0000
@@ -496,6 +496,16 @@
 	  This driver can also be built as a module.  If so, the module
 	  will be called i2c-voodoo3.
 
+config I2C_VOYAGER
+	tristate "Silicon Motion Voyager GX"
+	depends on I2C && SH_RTS7751R2D
+	help
+	  If you say yes to this option, support will be included for the
+	  Silicon Motion SM501 of mainboard I2C interfaces.
+
+	  This driver can also be built as a module.  If so, the module
+	  will be called i2c-voyager.
+
 config I2C_PCA_ISA
 	tristate "PCA9564 on an ISA bus"
 	depends on I2C
diff -ruN linux-2.6.17-vanilla/drivers/i2c/busses/Makefile linux-2.6.17/drivers/i2c/busses/Makefile
--- linux-2.6.17-vanilla/drivers/i2c/busses/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/i2c/busses/Makefile	2006-07-12 16:54:23.000000000 +0000
@@ -40,6 +40,7 @@
 obj-$(CONFIG_I2C_VIA)		+= i2c-via.o
 obj-$(CONFIG_I2C_VIAPRO)	+= i2c-viapro.o
 obj-$(CONFIG_I2C_VOODOO3)	+= i2c-voodoo3.o
+obj-$(CONFIG_I2C_VOYAGER)	+= i2c-voyager.o
 obj-$(CONFIG_SCx200_ACB)	+= scx200_acb.o
 obj-$(CONFIG_SCx200_I2C)	+= scx200_i2c.o
 
diff -ruN linux-2.6.17-vanilla/drivers/i2c/busses/i2c-voyager.c linux-2.6.17/drivers/i2c/busses/i2c-voyager.c
--- linux-2.6.17-vanilla/drivers/i2c/busses/i2c-voyager.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/i2c/busses/i2c-voyager.c	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1,216 @@
+/* -------------------------------------------------------------------- */
+/* i2c-voyagergx.c:                                                     */
+/* -------------------------------------------------------------------- */
+/*  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.
+
+    Copyright 2003 (c) Lineo uSolutions,Inc.
+    Copyright 2004 (c) Paul Mundt
+*/
+/* -------------------------------------------------------------------- */
+
+#include <linux/kernel.h>
+#include <linux/ioport.h>
+#include <linux/module.h>
+#include <linux/delay.h>
+#include <linux/slab.h>
+#include <linux/version.h>
+#include <linux/init.h>
+#include <linux/interrupt.h>
+#include <asm/irq.h>
+#include <asm/io.h>
+
+#include <linux/i2c.h>
+#include "../algos/i2c-algo-voyager.h"
+
+//#define I2C_USE_INTR
+
+#if defined(I2C_USE_INTR)
+#define DEFAULT_IRQ   10
+#else
+#define DEFAULT_IRQ   0
+#endif
+
+struct iic_voyagergx {
+	unsigned long	iic_base;
+	int 		iic_irq;
+};
+static struct iic_voyagergx gpi;
+
+static wait_queue_head_t iic_wait;
+static int iic_pending;
+
+static void iic_voyagergx_setiic(void *data, int ctl, int val)
+{
+	outw(val,ctl);
+}
+
+static int iic_voyagergx_getiic(void *data, int ctl)
+{
+	return inw(ctl);
+}
+
+/* Put this process to sleep.  We will wake up when the
+ * IIC controller interrupts.
+ */
+static void iic_voyagergx_waitforpin(void)
+{
+	int timeout = 2;
+
+	/* If interrupts are enabled (which they are), then put the process to
+	 * sleep.  This process will be awakened by two events -- either the
+	 * the IIC peripheral interrupts or the timeout expires. 
+	 * If interrupts are not enabled then delay for a reasonable amount 
+	 * of time and return.
+	 */
+	if (gpi.iic_irq > 0) {
+		local_irq_disable();
+
+		if (iic_pending == 0) {
+			interruptible_sleep_on_timeout(&iic_wait, timeout*HZ);
+		} else {
+			iic_pending = 0;
+		}
+
+		local_irq_enable();
+	} else {
+		udelay(100);
+	}
+}
+
+#if defined(I2C_USE_INTR)
+static irqreturn_t iic_voyagergx_handler(int this_irq, void *dev_id,
+					 struct pt_regs *regs) 
+{
+	iic_pending = 1;
+
+	pr_debug("iic_voyagergx_handler: in interrupt handler\n");
+	wake_up_interruptible(&iic_wait);
+
+	return IRQ_HANDLED;
+}
+#endif
+
+/* Lock the region of memory where I/O registers exist.  Request our
+ * interrupt line and register its associated handler.
+ */
+static int iic_hw_resrc_init(void)
+{
+	unsigned char		ctl;
+	unsigned long		val;
+
+	// Power Mode Gate
+	val = inl(POWER_MODE0_GATE);
+	val |= 0x00000040;
+	outl(val, POWER_MODE0_GATE);
+	val = inl(POWER_MODE1_GATE);
+	val |= 0x00000040;
+	outl(val, POWER_MODE1_GATE);
+
+	// GPIO Control
+	val = inl( GPIO_MUX_HIGH);
+	val |= 0x0000c000;
+	outl(val, GPIO_MUX_HIGH);
+
+#if defined(I2C_USE_INTR)
+	// Interrupt Mask
+	val = inl(VOYAGER_INT_MASK);
+	val |= 0x00800000;
+	outl(val, VOYAGER_INT_MASK);
+#endif
+
+        // Enable I2c controller and select mode to high
+        ctl = inb(I2C_CONTROL);
+        outb((ctl | I2C_CONTROL_E | I2C_CONTROL_MODE), I2C_CONTROL);
+
+#if defined(I2C_USE_INTR)
+	if (gpi.iic_irq > 0) {
+		if (request_irq(gpi.iic_irq, iic_voyagergx_handler, 0,
+				"VoyagerGX IIC", 0) < 0) {
+			gpi.iic_irq = 0;
+		} else {
+			pr_debug("Enabled IIC IRQ %d\n", gpi.iic_irq);
+		}
+
+		enable_irq(gpi.iic_irq);
+	}
+#endif
+
+	return 0;
+}
+
+static struct i2c_algo_iic_data iic_voyagergx_data = {
+	.setiic		= iic_voyagergx_setiic,
+	.getiic		= iic_voyagergx_getiic,
+	.waitforpin	= iic_voyagergx_waitforpin,
+	.udelay		= 80,
+	.mdelay		= 80,
+	.timeout	= 100,
+};
+
+static struct i2c_adapter iic_voyagergx_ops = {
+	.owner		= THIS_MODULE,
+	.name		= "VoyagerGX I2C",
+	.id		= I2C_HW_SMBUS_VOYAGER,
+	.class		= I2C_ADAP_CLASS_SMBUS,
+	.algo_data	= &iic_voyagergx_data,
+};
+
+static int __init iic_voyagergx_init(void) 
+{
+	struct iic_voyagergx *piic = &gpi;
+
+	printk(KERN_INFO "Initialize VoyagerGX I2C module\n");
+
+	piic->iic_base	= VOYAGER_BASE;
+	piic->iic_irq	= DEFAULT_IRQ;
+
+	iic_voyagergx_data.data = (void *)piic;
+	init_waitqueue_head(&iic_wait);
+
+	if (iic_hw_resrc_init() == 0) {
+		if (i2c_voyager_add_bus(&iic_voyagergx_ops) < 0)
+			return -ENODEV;
+	} else {
+		return -ENODEV;
+	}
+
+#if defined(I2C_USE_INTR)
+	printk(KERN_INFO " found device at %#lx irq %d.\n", 
+		piic->iic_base, piic->iic_irq);
+#else
+	printk(KERN_INFO " found device at %#lx\n", piic->iic_base);
+#endif
+
+	return 0;
+}
+
+
+static void iic_voyagergx_exit(void)
+{
+	if (gpi.iic_irq > 0) {
+		disable_irq(gpi.iic_irq);
+		free_irq(gpi.iic_irq, 0);
+	}
+
+	release_region(gpi.iic_base, 2);
+}
+
+MODULE_AUTHOR("Lineo uSolutions,Inc. <www.lineo.co.jp>");
+MODULE_DESCRIPTION("I2C-Bus adapter for VoyagerGX Silicon Motion, Inc.");
+MODULE_LICENSE("GPL");
+
+module_init(iic_voyagergx_init);
+module_exit(iic_voyagergx_exit); 
+
diff -ruN linux-2.6.17-vanilla/drivers/ide/CVS/Entries linux-2.6.17/drivers/ide/CVS/Entries
--- linux-2.6.17-vanilla/drivers/ide/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/ide/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,6 @@
+/Kconfig/1.28/Mon Mar 27 21:06:14 2006/-ko/
+/Makefile/1.7/Tue Jan  3 22:35:55 2006/-ko/
+D/legacy////
+D/pci////
+D/sh////
+/ide.c/1.11/Wed Jul  5 14:51:04 2006/-ko/
diff -ruN linux-2.6.17-vanilla/drivers/ide/CVS/Repository linux-2.6.17/drivers/ide/CVS/Repository
--- linux-2.6.17-vanilla/drivers/ide/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/ide/CVS/Repository	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/ide
diff -ruN linux-2.6.17-vanilla/drivers/ide/CVS/Root linux-2.6.17/drivers/ide/CVS/Root
--- linux-2.6.17-vanilla/drivers/ide/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/ide/CVS/Root	2006-07-12 16:54:23.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/ide/Kconfig linux-2.6.17/drivers/ide/Kconfig
--- linux-2.6.17-vanilla/drivers/ide/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/ide/Kconfig	2006-07-12 16:54:24.000000000 +0000
@@ -780,6 +780,9 @@
 	  This option enables the use of the sleep LED as a hard drive
 	  activity LED.
 
+config IDE_SH
+	def_bool SUPERH
+
 config BLK_DEV_IDE_SWARM
 	tristate "IDE for Sibyte evaluation boards"
 	depends on SIBYTE_SB1xxx_SOC
diff -ruN linux-2.6.17-vanilla/drivers/ide/Makefile linux-2.6.17/drivers/ide/Makefile
--- linux-2.6.17-vanilla/drivers/ide/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/ide/Makefile	2006-07-12 16:54:24.000000000 +0000
@@ -37,6 +37,8 @@
 ide-core-$(CONFIG_BLK_DEV_MPC8xx_IDE)	+= ppc/mpc8xx.o
 ide-core-$(CONFIG_BLK_DEV_IDE_PMAC)	+= ppc/pmac.o
 
+# built-in only drivers from sh/
+ide-core-$(CONFIG_IDE_SH)		+= sh/ide-sh.o
 # built-in only drivers from h8300/
 ide-core-$(CONFIG_H8300)		+= h8300/ide-h8300.o
 
diff -ruN linux-2.6.17-vanilla/drivers/ide/ide.c linux-2.6.17/drivers/ide/ide.c
--- linux-2.6.17-vanilla/drivers/ide/ide.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/ide/ide.c	2006-07-12 16:54:24.000000000 +0000
@@ -1776,6 +1776,7 @@
 
 extern void pnpide_init(void);
 extern void h8300_ide_init(void);
+extern void ide_sh_init(void);
 
 /*
  * probe_for_hwifs() finds/initializes "known" IDE interfaces
@@ -1840,6 +1841,9 @@
 #ifdef CONFIG_H8300
 	h8300_ide_init();
 #endif
+#ifdef CONFIG_IDE_SH
+	ide_sh_init();
+#endif
 }
 
 void ide_register_subdriver(ide_drive_t *drive, ide_driver_t *driver)
diff -ruN linux-2.6.17-vanilla/drivers/ide/legacy/CVS/Entries linux-2.6.17/drivers/ide/legacy/CVS/Entries
--- linux-2.6.17-vanilla/drivers/ide/legacy/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/ide/legacy/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,2 @@
+/ide-cs.c/1.13/Thu Jul  6 12:38:14 2006//
+D
diff -ruN linux-2.6.17-vanilla/drivers/ide/legacy/CVS/Repository linux-2.6.17/drivers/ide/legacy/CVS/Repository
--- linux-2.6.17-vanilla/drivers/ide/legacy/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/ide/legacy/CVS/Repository	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/ide/legacy
diff -ruN linux-2.6.17-vanilla/drivers/ide/legacy/CVS/Root linux-2.6.17/drivers/ide/legacy/CVS/Root
--- linux-2.6.17-vanilla/drivers/ide/legacy/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/ide/legacy/CVS/Root	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/ide/legacy/ide-cs.c linux-2.6.17/drivers/ide/legacy/ide-cs.c
--- linux-2.6.17-vanilla/drivers/ide/legacy/ide-cs.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/ide/legacy/ide-cs.c	2006-07-12 16:54:24.000000000 +0000
@@ -73,6 +73,11 @@
 #define DEBUG(n, args...)
 #endif
 
+
+#if defined(CONFIG_HD64461_PCMCIA) || defined(CONFIG_HD64461_PCMCIA_MODULE)
+#define USE_MEM 1
+#endif
+
 /*====================================================================*/
 
 static const char ide_major[] = {
@@ -117,13 +122,19 @@
     info->p_dev = link;
     link->priv = info;
 
+#ifndef USE_MEM
     link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO;
     link->io.Attributes2 = IO_DATA_PATH_WIDTH_8;
     link->io.IOAddrLines = 3;
+#endif
     link->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
     link->irq.IRQInfo1 = IRQ_LEVEL_ID;
     link->conf.Attributes = CONF_ENABLE_IRQ;
+#ifdef USE_MEM
+    link->conf.IntType = INT_MEMORY;
+#else
     link->conf.IntType = INT_MEMORY_AND_IO;
+#endif
 
     return ide_config(link);
 } /* ide_attach */
@@ -229,6 +240,22 @@
 	    }
 	}
 
+#ifdef USE_MEM
+	if ((cfg->mem.nwin > 0) || (stk->dflt.mem.nwin > 0)) {
+		win_req_t wr;
+		wr.Attributes = WIN_ENABLE|WIN_MEMORY_TYPE_CM;
+		wr.Base = 0;
+		wr.Size = 0;
+		wr.AccessSpeed = 0;
+		link->win = (window_handle_t)link;
+		link->conf.ConfigIndex = cfg->index;
+		if (pcmcia_request_window(&link, &wr, &link->win) != 0)
+			goto next_entry;
+		io_base = wr.Base;
+		ctl_base = io_base + 0x0e;
+		break;
+	}
+#else
 	if (cfg->vpp1.present & (1 << CISTPL_POWER_VNOM))
 	    link->conf.Vpp =
 		cfg->vpp1.param[CISTPL_POWER_VNOM] / 10000;
@@ -262,6 +289,7 @@
 	    /* If we've got this far, we're done */
 	    break;
 	}
+#endif
 
     next_entry:
 	if (cfg->flags & CISTPL_CFTABLE_DEFAULT)
@@ -278,12 +306,19 @@
     CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq));
     CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf));
 
+#ifndef USE_MEM
+    /* deal with brain dead IDE resource management */
+    release_region(link->io.BasePort1, link->io.NumPorts1);
+    if (link->io.NumPorts2)
+	release_region(link->io.BasePort2, link->io.NumPorts2);
+
     /* disable drive interrupts during IDE probe */
     outb(0x02, ctl_base);
 
     /* special setup for KXLC005 card */
     if (is_kme)
 	outb(0x81, ctl_base+1);
+#endif
 
     /* retry registration in case device is still spinning up */
     for (hd = -1, i = 0; i < 10; i++) {
@@ -352,6 +387,13 @@
 	   -- need to investigate the required PCMCIA magic */
 	ide_unregister(info->hd);
     }
+
+#ifndef USE_MEM
+    request_region(link->io.BasePort1, link->io.NumPorts1,"ide-cs");
+    if (link->io.NumPorts2)
+		request_region(link->io.BasePort2, link->io.NumPorts2,"ide-cs");
+#endif
+
     info->ndev = 0;
 
     pcmcia_disable_device(link);
diff -ruN linux-2.6.17-vanilla/drivers/ide/pci/CVS/Entries linux-2.6.17/drivers/ide/pci/CVS/Entries
--- linux-2.6.17-vanilla/drivers/ide/pci/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/ide/pci/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,2 @@
+/alim15x3.c/1.16/Wed Jul  5 14:51:05 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/ide/pci/CVS/Repository linux-2.6.17/drivers/ide/pci/CVS/Repository
--- linux-2.6.17-vanilla/drivers/ide/pci/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/ide/pci/CVS/Repository	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/ide/pci
diff -ruN linux-2.6.17-vanilla/drivers/ide/pci/CVS/Root linux-2.6.17/drivers/ide/pci/CVS/Root
--- linux-2.6.17-vanilla/drivers/ide/pci/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/ide/pci/CVS/Root	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/ide/pci/alim15x3.c linux-2.6.17/drivers/ide/pci/alim15x3.c
--- linux-2.6.17-vanilla/drivers/ide/pci/alim15x3.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/ide/pci/alim15x3.c	2006-07-12 16:54:24.000000000 +0000
@@ -65,6 +65,16 @@
 	"PIO mode" };
 
 static char *udmaT[8] = {
+#if defined(CONFIG_SH_MPC1211)
+	"  1T",
+	"1.5T",
+	"  2T",
+	"  3T",
+	"  4T",
+	"2.5T",
+	"  6T",
+	"3.5T"
+#else
 	"1.5T",
 	"  2T",
 	"2.5T",
@@ -73,6 +83,7 @@
 	"  4T",
 	"  6T",
 	"  8T"
+#endif
 };
 
 static char *channel_status[8] = {
@@ -303,7 +314,11 @@
 	u8 cd_dma_fifo = 0;
 	int unit = drive->select.b.unit & 1;
 
+#if defined(CONFIG_SH_MPC1211)
+	pio = ide_get_best_pio_mode(drive, pio, 0, &d);
+#else
 	pio = ide_get_best_pio_mode(drive, pio, 5, &d);
+#endif
 	s_time = ide_pio_timings[pio].setup_time;
 	a_time = ide_pio_timings[pio].active_time;
 	if ((s_clc = (s_time * bus_speed + 999) / 1000) >= 8)
@@ -420,6 +435,10 @@
 		return 0;
 	}
 
+#ifdef CONFIG_SH_MPC1211
+	mode = 1;
+#endif
+
 	/*
 	 *	If the drive sees no suitable cable then UDMA 33
 	 *	is the highest permitted mode
diff -ruN linux-2.6.17-vanilla/drivers/ide/sh/CVS/Entries linux-2.6.17/drivers/ide/sh/CVS/Entries
--- linux-2.6.17-vanilla/drivers/ide/sh/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/ide/sh/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,2 @@
+/ide-sh.c/1.2/Thu Mar 17 10:26:58 2005/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/ide/sh/CVS/Repository linux-2.6.17/drivers/ide/sh/CVS/Repository
--- linux-2.6.17-vanilla/drivers/ide/sh/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/ide/sh/CVS/Repository	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/ide/sh
diff -ruN linux-2.6.17-vanilla/drivers/ide/sh/CVS/Root linux-2.6.17/drivers/ide/sh/CVS/Root
--- linux-2.6.17-vanilla/drivers/ide/sh/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/ide/sh/CVS/Root	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/ide/sh/ide-sh.c linux-2.6.17/drivers/ide/sh/ide-sh.c
--- linux-2.6.17-vanilla/drivers/ide/sh/ide-sh.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/ide/sh/ide-sh.c	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,95 @@
+/*
+ * SuperH default IDE host driver
+ *
+ * Copyright (C) 2004, 2005  Paul Mundt
+ *
+ * Based on the old include/asm-sh/ide.h
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/ide.h>
+
+#include <asm/irq.h>
+
+enum {
+	IDE_SH_CFCARD_IO = 0x1f0,
+	IDE_SH_PCMCIA_IO = 0x170,
+};
+
+static struct sh_ide_hwif {
+	unsigned long base;
+	int irq;
+} sh_ide_hwifs[] __initdata = {
+	{ IDE_SH_CFCARD_IO, IRQ_CFCARD },
+	{ IDE_SH_PCMCIA_IO, IRQ_PCMCIA },
+	{ 0, },
+};
+
+static inline int __init hw_setup(hw_regs_t *hw, int idx)
+{
+	unsigned long base = sh_ide_hwifs[idx].base;
+
+	if (!request_region(base, 8, "ide-sh"))
+		return -EBUSY;
+	if (!request_region(base + 0x206, 1, "ide-sh")) {
+		release_region(base, 8);
+		return -EBUSY;
+	}
+
+	memset(hw, 0, sizeof(hw_regs_t));
+	ide_std_init_ports(hw, base, base + 0x206);
+
+	hw->irq		= sh_ide_hwifs[idx].irq;
+	hw->chipset	= ide_generic;
+
+	return 0;
+}
+
+static inline void __init hwif_setup(ide_hwif_t *hwif)
+{
+	hwif->mmio = 2;
+}
+
+void __init ide_sh_init(void)
+{
+	int i, idx;
+
+	printk(KERN_INFO "ide: SuperH generic IDE interface\n");
+
+	for (i = 0; i < MAX_HWIFS; i++) {
+		ide_hwif_t *hwif;
+		hw_regs_t hw;
+
+		if (!sh_ide_hwifs[i].base) {
+			printk(KERN_ERR "ide-sh: Attempting to register ide%d "
+			       "when only %d interfaces are available.\n",
+			       i, i - 1);
+			break;
+		}
+
+		if (hw_setup(&hw, i) < 0)
+			goto region_cleanup;
+
+		idx = ide_register_hw(&hw, &hwif);
+		if (idx == -1) {
+			printk(KERN_ERR "ide-sh: IDE interface registration failed\n");
+			i++;	/* release this interface too */
+			goto region_cleanup;
+		}
+
+		hwif_setup(hwif);
+	}
+
+region_cleanup:
+	for (idx = 0; idx < i; idx++) {
+		unsigned long base = sh_ide_hwifs[idx].base;
+
+		release_region(base + 0x206, 1);
+		release_region(base, 8);
+	}
+}
+
diff -ruN linux-2.6.17-vanilla/drivers/input/CVS/Entries linux-2.6.17/drivers/input/CVS/Entries
--- linux-2.6.17-vanilla/drivers/input/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/input/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,2 @@
+D/keyboard////
+D/touchscreen////
diff -ruN linux-2.6.17-vanilla/drivers/input/CVS/Repository linux-2.6.17/drivers/input/CVS/Repository
--- linux-2.6.17-vanilla/drivers/input/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/input/CVS/Repository	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/input
diff -ruN linux-2.6.17-vanilla/drivers/input/CVS/Root linux-2.6.17/drivers/input/CVS/Root
--- linux-2.6.17-vanilla/drivers/input/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/input/CVS/Root	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/CVS/Entries linux-2.6.17/drivers/input/keyboard/CVS/Entries
--- linux-2.6.17-vanilla/drivers/input/keyboard/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/input/keyboard/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,7 @@
+/Makefile/1.6/Thu Nov 10 14:20:52 2005/-ko/
+/hp620_keyb.c/1.2/Mon Jan 30 11:14:01 2006//
+/hp680_keyb.c/1.2/Mon Jan 30 11:14:01 2006//
+/scan_keyb.c/1.3/Mon Jan 30 11:14:01 2006/-ko/
+/scan_keyb.h/1.2/Mon Jan 30 11:14:01 2006/-ko/
+/Kconfig/1.14/Wed Jul  5 14:51:11 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/CVS/Repository linux-2.6.17/drivers/input/keyboard/CVS/Repository
--- linux-2.6.17-vanilla/drivers/input/keyboard/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/input/keyboard/CVS/Repository	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/input/keyboard
diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/CVS/Root linux-2.6.17/drivers/input/keyboard/CVS/Root
--- linux-2.6.17-vanilla/drivers/input/keyboard/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/input/keyboard/CVS/Root	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/Kconfig linux-2.6.17/drivers/input/keyboard/Kconfig
--- linux-2.6.17-vanilla/drivers/input/keyboard/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/input/keyboard/Kconfig	2006-07-12 16:54:24.000000000 +0000
@@ -183,4 +183,21 @@
 	  This driver implements support for HIL-keyboards attached
 	  to your machine, so normally you should say Y here.
 
+choice
+	prompt "HP6XX keyboard"
+	depends on SH_HP6XX
+	default KEYBOARD_HP680
+
+config KEYBOARD_HP620
+	tristate "HP620 keyboard"
+	help
+	  Say Y here if you are running Linux on HP Jornada 620.
+
+config KEYBOARD_HP680
+	tristate "HP680 keyboard"
+	help
+	  Say Y here if you are running Linux on HP Jornada 680.
+
+endchoice
+
 endif
diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/Makefile linux-2.6.17/drivers/input/keyboard/Makefile
--- linux-2.6.17-vanilla/drivers/input/keyboard/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/input/keyboard/Makefile	2006-07-12 16:54:24.000000000 +0000
@@ -11,8 +11,11 @@
 obj-$(CONFIG_KEYBOARD_AMIGA)		+= amikbd.o
 obj-$(CONFIG_KEYBOARD_LOCOMO)		+= locomokbd.o
 obj-$(CONFIG_KEYBOARD_NEWTON)		+= newtonkbd.o
+obj-$(CONFIG_KEYBOARD_98KBD)		+= 98kbd.o
 obj-$(CONFIG_KEYBOARD_CORGI)		+= corgikbd.o
 obj-$(CONFIG_KEYBOARD_SPITZ)		+= spitzkbd.o
 obj-$(CONFIG_KEYBOARD_HIL)		+= hil_kbd.o
 obj-$(CONFIG_KEYBOARD_HIL_OLD)		+= hilkbd.o
+obj-$(CONFIG_KEYBOARD_HP620)		+= scan_keyb.o hp620_keyb.o
+obj-$(CONFIG_KEYBOARD_HP680)		+= scan_keyb.o hp680_keyb.o
 
diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/hp620_keyb.c linux-2.6.17/drivers/input/keyboard/hp620_keyb.c
--- linux-2.6.17-vanilla/drivers/input/keyboard/hp620_keyb.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/input/keyboard/hp620_keyb.c	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,169 @@
+/*
+ * drivers/input/keyboard/hp680_keyb.c
+ *
+ * HP Jornada 620 scan keyboard
+ *
+ *  Copyright (C) 2005  Andriy Skulysh
+ *  Copyright (C) 2006  Paul Mundt
+ *
+ * Splited from drivers/input/keyboard/hp600_keyb.c
+ *
+ *	Copyright (C) 2000 YAEGASHI Takeshi
+ *	HP600 keyboard scan routine and translation table
+ *	Copyright (C) 2000 Niibe Yutaka
+ *	HP620 keyboard translation table
+ */
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <asm/delay.h>
+#include <asm/io.h>
+#include "scan_keyb.h"
+
+#define PCDR 0xa4000124
+#define PDDR 0xa4000126
+#define PEDR 0xa4000128
+#define PFDR 0xa400012a
+#define PGDR 0xa400012c
+#define PHDR 0xa400012e
+#define PJDR 0xa4000130
+#define PKDR 0xa4000132
+#define PLDR 0xa4000134
+
+/****************************************************************
+HP Jornada 620(Japanese version) keyboard scan matrix
+
+	PTC7	PTC6	PTC5	PTC4	PTC3	PTC2	PTC1	PTC0
+PTD1	EREC		BS	Ctrl	on/off	-	0	9
+PTD5	EREC		BS	Ctrl	on/off	^	P	O
+PTD7	EREC		BS	Ctrl	on/off	]	@	L
+PTE0	EREC		BS	Ctrl	on/off	Han/Zen [	;
+PTE1	EREC		BS	Ctrl	on/off	Enter	:	/
+PTE3	EREC		BS	Ctrl	on/off		Right	Up
+PTE6	EREC		BS	Ctrl	on/off		Down	Left
+PTE7	EREC		BS	Ctrl	on/off		F8	F7
+
+	PTF7	PTF6	PTF5	PTF4	PTF3	PTF2	PTF1	PTF0
+PTD1	8	7	6	5	4	3	2	1
+PTD5	I	U	Y	T	R	E	W	Q
+PTD7	K	J	H	G	F	D	S	A
+PTE0						ESC	Tab	Shift
+PTE1	.			V			Caps	Hira
+PTE3	,	M	N	B	Muhen	C	X
+PTE6	_	\	Henkan	Space		Alt	Z
+PTE7	F6	F5	F4	F3	F2	F1		REC
+
+	PTH0
+*	on/off
+
+		7	6	5	4	3	2	1	0
+C: 0xffff 0xff	IP	IP	IP	IP	IP	IP	IP	IP
+D: 0x4404 0xaf	O	F	O	F	F	F	O	F
+E: 0x5045 0xff	O	O	F	F	O	F	O	O
+F: 0xffff 0xff	IP	IP	IP	IP	IP	IP	IP	IP
+G: 0xd5ff 0x00	IP	O	O	O	IP	IP	IP	IP
+H: 0x63ff 0xd1	O	I	F	IP	IP	IP	IP	IP
+J: 0x0004 0x02	F	F	F	F	F	F	O	F
+K: 0x0401 0xff	F	F	O	F	F	F	F	O
+L: 0x0c00 0x20	F	F	IP	F	F	F	F	F
+
+ADCSR: 0x08
+ADCR: 0x3f
+
+ ****************************************************************/
+
+/****************************************************************
+Japanese 109 keyboard scan code layout
+
+                                              E02A-     E1-
+01    3B 3C 3D 3E  3F 40 41 42  43 44 57 58   E037  46  1045
+
+29 02 03 04 05 06 07 08 09 0A 0B 0C 0D 7D 0E  E052 E047 E049   45 E035 37  4A
+0F  10 11 12 13 14 15 16 17 18 19 1A 1B   1C  E053 E04F E051   47  48  49  4E
+3A   1E 1F 20 21 22 23 24 25 26 27 28 2B                       4B  4C  4D
+2A    2C 2D 2E 2F 30 31 32 33 34 35 73    36       E048        4F  50  51  E0-
+1D  DB  38  7B   39   79 70  E038 DC DD E01D  E04B E050 E04D     52    53  1C
+
+****************************************************************/
+
+static const unsigned char hp620_japanese_table[] = {
+	/* PTD1 */
+	0x0a, 0x0b, 0x0c, 0x00, 0x00, 0x0e, 0x00, 0x00,
+	0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
+	/* PTD5 */
+	0x18, 0x19, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+	/* PTD7 */
+	0x26, 0x1a, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25,
+	/* PTE0 */
+	0x27, 0x1b, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x2a, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* PTE1 */
+	0x35, 0x28, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x70, 0x3a, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x34,
+	/* PTE3 */
+	0x48, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x2d, 0x2e, 0x7b, 0x30, 0x31, 0x32, 0x33,
+	/* PTE6 */
+	0x4b, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x2c, 0x38, 0x00, 0x39, 0x79, 0x7d, 0x73,
+	/* PTE7 */
+	0x41, 0x42, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40,
+	/* **** */
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+static int hp620_japanese_scan_kbd(unsigned char *s)
+{
+	int i;
+	unsigned char matrix_switch[] = {
+		0xfd, 0xff,	/* PTD1 */
+		0xdf, 0xff,	/* PTD5 */
+		0x7f, 0xff,	/* PTD7 */
+		0xff, 0xfe,	/* PTE0 */
+		0xff, 0xfd,	/* PTE1 */
+		0xff, 0xf7,	/* PTE3 */
+		0xff, 0xbf,	/* PTE6 */
+		0xff, 0x7f,	/* PTE7 */
+	}, *t=matrix_switch;
+
+	for(i=0; i<8; i++) {
+		ctrl_outb(*t++, PDDR);
+		ctrl_outb(*t++, PEDR);
+		udelay(50);
+		*s++=ctrl_inb(PCDR);
+		*s++=ctrl_inb(PFDR);
+	}
+
+	ctrl_outb(0xff, PDDR);
+	ctrl_outb(0xff, PEDR);
+
+	*s++=ctrl_inb(PGDR);
+	*s++=ctrl_inb(PHDR);
+
+	return 0;
+}
+
+static struct scan_keyboard hp620_kbd = {
+	.scan		= hp620_japanese_scan_kbd,
+	.table		= hp620_japanese_table,
+	.length		= 18,
+};
+
+static int __init hp620_kbd_init_hw(void)
+{
+	printk(KERN_INFO "HP620 matrix scan keyboard registered\n");
+	return register_scan_keyboard(&hp620_kbd);
+}
+
+static void __exit hp620_kbd_exit_hw(void)
+{
+	unregister_scan_keyboard(&hp620_kbd);
+}
+
+module_init(hp620_kbd_init_hw);
+module_exit(hp620_kbd_exit_hw);
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/hp680_keyb.c linux-2.6.17/drivers/input/keyboard/hp680_keyb.c
--- linux-2.6.17-vanilla/drivers/input/keyboard/hp680_keyb.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/input/keyboard/hp680_keyb.c	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,152 @@
+/*
+ * drivers/input/keyboard/hp680_keyb.c
+ *
+ * HP Jornada 680/690 scan keyboard
+ *
+ *  Copyright (C) 2005  Andriy Skulysh
+ *  Copyright (C) 2006  Paul Mundt
+ *
+ * Splited from drivers/input/keyboard/hp600_keyb.c
+ *
+ *	Copyright (C) 2000 YAEGASHI Takeshi
+ *	HP600 keyboard scan routine and translation table
+ *	Copyright (C) 2000 Niibe Yutaka
+ *	HP620 keyboard translation table
+ */
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <asm/delay.h>
+#include <asm/io.h>
+#include "scan_keyb.h"
+
+#define PCDR 0xa4000124
+#define PDDR 0xa4000126
+#define PEDR 0xa4000128
+#define PFDR 0xa400012a
+#define PGDR 0xa400012c
+#define PHDR 0xa400012e
+#define PJDR 0xa4000130
+#define PKDR 0xa4000132
+#define PLDR 0xa4000134
+
+/****************************************************************
+HP Jornada 690(Japanese version) keyboard scan matrix
+
+	PTC7	PTC6	PTC5	PTC4	PTC3	PTC2	PTC1	PTC0
+PTD1	REC			Escape	on/off	Han/Zen	Hira	Eisu
+PTD5	REC			Z	on/off	Enter	:	/
+PTD7	REC						Right	Down
+PTE0	REC			Windows	on/off
+PTE1	REC			A	on/off	]	[	;
+PTE3	REC			Tab	on/off	ShirtR	\	Up
+PTE6	REC			Q	on/off	BS	@	P
+PTE7	REC			1	on/off	^	-	0
+
+	PTF7	PTF6	PTF5	PTF4	PTF3	PTF2	PTF1	PTF0
+PTD1	F5	F4	F6	F7	F8	F3	F2	F1
+PTD5	N	B	M	,	.	V	C	X
+PTD7	Muhen	Alt			Left
+PTE0			Henkan	_	Del	Space		Ctrl
+PTE1	H	G	J	K	L	F	D	S
+PTE3							ShiftL
+PTE6	Y	T	U	I	O	R	E	W
+PTE7	6	5	7	8	9	4	3	2
+
+	PTG5	PTG4	PTG3	PTG0	PTH0
+*	REC	REW	FWW	Cover	on/off
+
+
+		7	6	5	4	3	2	1	0
+C: 0xffff 0xdf	IP	IP	IP	IP	IP	IP	IP	IP
+D: 0x6786 0x59	O	I	O	IP	I	F	O	I
+E: 0x5045 0x00	O	O	F	F	O	F	O	O
+F: 0xffff 0xff	IP	IP	IP	IP	IP	IP	IP	IP
+G: 0xaffe 0xfd	I	I	IP	IP	IP	IP	IP	I
+H: 0x70f2 0x49	O	IP	F	F	IP	IP	F	I
+J: 0x0704 0x22	F	F	O	IP	F	F	O	F
+K: 0x0100 0x10	F	F	F	O	F	F	F	F
+L: 0x0c3c 0x26	F	F	IP	F	F	IP	IP	F
+
+****************************************************************/
+
+static const unsigned char hp680_japanese_table[] = {
+	/* PTD1 */
+	0x3a, 0x70, 0x29, 0x00, 0x01, 0x00, 0x00, 0x00,
+	0x3b, 0x3c, 0x3d, 0x42, 0x41, 0x40, 0x3e, 0x3f,
+	/* PTD5 */
+	0x35, 0x28, 0x1c, 0x00, 0x2c, 0x00, 0x00, 0x00,
+	0x2d, 0x2e, 0x2f, 0x34, 0x33, 0x32, 0x30, 0x31,
+	/* PTD7 */
+	0x50, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x38, 0x7b,
+	/* PTE0 */
+	0x00, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00,
+	0x1d, 0x00, 0x39, 0x53, 0x73, 0xf9, 0x00, 0x00,
+	/* PTE1 */
+	0x27, 0x1b, 0x2b, 0x00, 0x1e, 0x00, 0x00, 0x00,
+	0x1f, 0x20, 0x21, 0x26, 0x25, 0x24, 0x22, 0x23,
+	/* PTE3 */
+	0x48, 0x7d, 0x36, 0x00, 0x0f, 0x00, 0x00, 0x00,
+	0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	/* PTE6 */
+	0x19, 0x1a, 0x0e, 0x00, 0x10, 0x00, 0x00, 0x00,
+	0x11, 0x12, 0x13, 0x18, 0x17, 0x16, 0x14, 0x15,
+	/* PTE7 */
+	0x0b, 0x0c, 0x0d, 0x00, 0x02, 0x00, 0x00, 0x00,
+	0x03, 0x04, 0x05, 0x0a, 0x09, 0x08, 0x06, 0x07,
+	/* **** */
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+};
+
+static int hp680_japanese_scan_kbd(unsigned char *s)
+{
+	int i;
+	unsigned char matrix_switch[] = {
+		0xfd, 0xff,	/* PTD1 */
+		0xdf, 0xff,	/* PTD5 */
+		0x7f, 0xff,	/* PTD7 */
+		0xff, 0xfe,	/* PTE0 */
+		0xff, 0xfd,	/* PTE1 */
+		0xff, 0xf7,	/* PTE3 */
+		0xff, 0xbf,	/* PTE6 */
+		0xff, 0x7f,	/* PTE7 */
+	}, *t=matrix_switch;
+
+	for(i=0; i<8; i++) {
+		ctrl_outb(*t++, PDDR);
+		ctrl_outb(*t++, PEDR);
+		*s++=ctrl_inb(PCDR);
+		*s++=ctrl_inb(PFDR);
+	}
+
+	ctrl_outb(0xff, PDDR);
+	ctrl_outb(0xff, PEDR);
+
+	*s++=ctrl_inb(PGDR);
+	*s++=ctrl_inb(PHDR);
+
+	return 0;
+}
+
+static struct scan_keyboard hp680_kbd = {
+	.scan		= hp680_japanese_scan_kbd,
+	.table		= hp680_japanese_table,
+	.length		= 18,
+};
+
+static int __init hp680_kbd_init_hw(void)
+{
+	printk(KERN_INFO "HP680 matrix scan keyboard registered\n");
+	return register_scan_keyboard(&hp680_kbd);
+}
+
+static void __exit hp680_kbd_exit_hw(void)
+{
+	unregister_scan_keyboard(&hp680_kbd);
+}
+
+module_init(hp680_kbd_init_hw);
+module_exit(hp680_kbd_exit_hw);
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/scan_keyb.c linux-2.6.17/drivers/input/keyboard/scan_keyb.c
--- linux-2.6.17-vanilla/drivers/input/keyboard/scan_keyb.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/input/keyboard/scan_keyb.c	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,148 @@
+/*
+ * Generic scan keyboard driver
+ *
+ * Copyright (C) 2000 YAEGASHI Takeshi
+ * Copyright (C) 2003 Andriy Skulysh
+ * Copyright (C) 2006 Paul Mundt
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/sched.h>
+#include <linux/init.h>
+#include <linux/slab.h>
+#include <linux/interrupt.h>
+#include <linux/kbd_kern.h>
+#include <linux/input.h>
+#include <linux/timer.h>
+#include "scan_keyb.h"
+
+#define SCANHZ	(HZ/20)
+
+static int scan_jiffies;
+static struct scan_keyboard *keyboards;
+struct timer_list scan_timer;
+static char *hpkbd_name = "Hitachi scankeyboard";
+static char *hpkbd_phys = "input0";
+
+static void check_kbd(struct scan_keyboard *kbd,
+		      unsigned char *new, unsigned char *old)
+{
+	const unsigned char *table = kbd->table;
+	int length = kbd->length;
+	int need_tasklet_schedule = 0;
+	unsigned int xor, bit;
+
+	while (length-- > 0) {
+		if ((xor = *new ^ *old) == 0)
+			table += 8;
+		else {
+			for (bit = 0x01; bit < 0x100; bit <<= 1) {
+				if (xor & bit) {
+					input_report_key(kbd->dev, *table,
+							 !(*new & bit));
+					need_tasklet_schedule = 1;
+				}
+
+				table++;
+			}
+		}
+
+		new++;
+		old++;
+	}
+
+	if (need_tasklet_schedule) {
+		input_sync(kbd->dev);
+		tasklet_schedule(&keyboard_tasklet);
+	}
+}
+
+static void scan_kbd(unsigned long dummy)
+{
+	struct scan_keyboard *kbd;
+
+	scan_jiffies++;
+
+	for (kbd = keyboards; kbd != NULL; kbd = kbd->next) {
+		if (scan_jiffies & 1) {
+			if (!kbd->scan(kbd->s0))
+				check_kbd(kbd, kbd->s0, kbd->s1);
+			else
+				memcpy(kbd->s0, kbd->s1, kbd->length);
+		} else {
+			if (!kbd->scan(kbd->s1))
+				check_kbd(kbd, kbd->s1, kbd->s0);
+			else
+				memcpy(kbd->s1, kbd->s0, kbd->length);
+		}
+	}
+
+	mod_timer(&scan_timer, jiffies + SCANHZ);
+}
+
+int register_scan_keyboard(struct scan_keyboard *kbd)
+{
+	int i;
+
+	kbd->s0 = kmalloc(kbd->length, GFP_KERNEL);
+	if (kbd->s0 == NULL)
+		goto error;
+
+	kbd->s1 = kmalloc(kbd->length, GFP_KERNEL);
+	if (kbd->s1 == NULL)
+		goto error;
+
+	memset(kbd->s0, -1, kbd->length);
+	memset(kbd->s1, -1, kbd->length);
+
+	kbd->dev = input_allocate_device();
+	if (!kbd->dev)
+		goto error;
+
+	kbd->dev->name = hpkbd_name;
+	kbd->dev->phys = hpkbd_phys;
+	kbd->dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
+	init_input_dev(kbd->dev);
+	kbd->dev->keycode = (unsigned char *)kbd->table;
+	kbd->dev->keycodesize = sizeof(unsigned char);
+	kbd->dev->keycodemax = ARRAY_SIZE(kbd->table);
+
+	for (i = 0; i < 128; i++)
+		if (kbd->table[i])
+			set_bit(kbd->table[i], kbd->dev->keybit);
+
+	clear_bit(0, kbd->dev->keybit);
+	input_register_device(kbd->dev);
+
+	kbd->next = keyboards;
+	keyboards = kbd;
+
+	init_timer(&scan_timer);
+	scan_timer.expires = jiffies + SCANHZ;
+	scan_timer.data = 0;
+	scan_timer.function = scan_kbd;
+	add_timer(&scan_timer);
+
+	return 0;
+
+error:
+	kfree(kbd->s1);
+	kfree(kbd->s0);
+
+	return -ENOMEM;
+}
+EXPORT_SYMBOL_GPL(register_scan_keyboard);
+
+void unregister_scan_keyboard(struct scan_keyboard *kbd)
+{
+	del_timer_sync(&scan_timer);
+	keyboards = kbd->next;
+	input_unregister_device(kbd->dev);
+	input_free_device(kbd->dev);
+}
+EXPORT_SYMBOL_GPL(unregister_scan_keyboard);
diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/scan_keyb.h linux-2.6.17/drivers/input/keyboard/scan_keyb.h
--- linux-2.6.17-vanilla/drivers/input/keyboard/scan_keyb.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/input/keyboard/scan_keyb.h	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,16 @@
+#ifndef	__DRIVER_CHAR_SCAN_KEYB_H
+#define	__DRIVER_CHAR_SCAN_KEYB_H
+
+struct scan_keyboard {
+	struct scan_keyboard *next;
+	int (*scan)(unsigned char *buffer);
+	const unsigned char *table;
+	unsigned char *s0, *s1;
+	int length;
+	struct input_dev *dev;
+};
+
+int register_scan_keyboard(struct scan_keyboard *);
+void unregister_scan_keyboard(struct scan_keyboard *);
+
+#endif
diff -ruN linux-2.6.17-vanilla/drivers/input/touchscreen/CVS/Entries linux-2.6.17/drivers/input/touchscreen/CVS/Entries
--- linux-2.6.17-vanilla/drivers/input/touchscreen/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/input/touchscreen/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,2 @@
+/hp680_ts_input.c/1.3/Sun Jan 29 22:13:39 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/input/touchscreen/CVS/Repository linux-2.6.17/drivers/input/touchscreen/CVS/Repository
--- linux-2.6.17-vanilla/drivers/input/touchscreen/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/input/touchscreen/CVS/Repository	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/input/touchscreen
diff -ruN linux-2.6.17-vanilla/drivers/input/touchscreen/CVS/Root linux-2.6.17/drivers/input/touchscreen/CVS/Root
--- linux-2.6.17-vanilla/drivers/input/touchscreen/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/input/touchscreen/CVS/Root	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/input/touchscreen/hp680_ts_input.c linux-2.6.17/drivers/input/touchscreen/hp680_ts_input.c
--- linux-2.6.17-vanilla/drivers/input/touchscreen/hp680_ts_input.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/input/touchscreen/hp680_ts_input.c	2006-07-12 16:54:24.000000000 +0000
@@ -15,7 +15,6 @@
 #define HP680_TS_ABS_Y_MIN	80
 #define HP680_TS_ABS_Y_MAX	910
 
-#define	SCPCR	0xa4000116
 #define	PHDR	0xa400012e
 #define SCPDR	0xa4000136
 
@@ -77,19 +76,6 @@
 
 static int __init hp680_ts_init(void)
 {
-	u8 scpdr;
-	u16 scpcr;
-
-	scpdr = ctrl_inb(SCPDR);
-	scpdr |= SCPDR_TS_SCAN_X | SCPDR_TS_SCAN_Y;
-	scpdr &= ~SCPDR_TS_SCAN_ENABLE;
-	ctrl_outb(scpdr, SCPDR);
-
-	scpcr = ctrl_inw(SCPCR);
-	scpcr &= ~SCPCR_TS_MASK;
-	scpcr |= SCPCR_TS_ENABLE;
-	ctrl_outw(scpcr, SCPCR);
-
 	hp680_ts_dev = input_allocate_device();
 	if (!hp680_ts_dev)
 		return -ENOMEM;
diff -ruN linux-2.6.17-vanilla/drivers/mtd/CVS/Entries linux-2.6.17/drivers/mtd/CVS/Entries
--- linux-2.6.17-vanilla/drivers/mtd/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/mtd/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,2 @@
+/mtdpart.c/1.11/Tue Jan  3 22:35:56 2006/-ko/
+D/maps////
diff -ruN linux-2.6.17-vanilla/drivers/mtd/CVS/Repository linux-2.6.17/drivers/mtd/CVS/Repository
--- linux-2.6.17-vanilla/drivers/mtd/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/mtd/CVS/Repository	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/mtd
diff -ruN linux-2.6.17-vanilla/drivers/mtd/CVS/Root linux-2.6.17/drivers/mtd/CVS/Root
--- linux-2.6.17-vanilla/drivers/mtd/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/mtd/CVS/Root	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/CVS/Entries linux-2.6.17/drivers/mtd/maps/CVS/Entries
--- linux-2.6.17-vanilla/drivers/mtd/maps/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/mtd/maps/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,5 @@
+/Kconfig/1.18/Mon Mar 27 21:06:14 2006/-ko/
+/Makefile/1.16/Mon Mar 27 21:06:14 2006/-ko/
+/microdev-flash.c/1.1/Thu Mar 17 11:42:48 2005/-ko/
+/rts7751r2d-flash.c/1.2/Thu Mar 17 11:42:48 2005/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/CVS/Repository linux-2.6.17/drivers/mtd/maps/CVS/Repository
--- linux-2.6.17-vanilla/drivers/mtd/maps/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/mtd/maps/CVS/Repository	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/mtd/maps
diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/CVS/Root linux-2.6.17/drivers/mtd/maps/CVS/Root
--- linux-2.6.17-vanilla/drivers/mtd/maps/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/mtd/maps/CVS/Root	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/Kconfig linux-2.6.17/drivers/mtd/maps/Kconfig
--- linux-2.6.17-vanilla/drivers/mtd/maps/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/mtd/maps/Kconfig	2006-07-12 16:54:24.000000000 +0000
@@ -409,11 +409,37 @@
 
 config MTD_SOLUTIONENGINE
 	tristate "CFI Flash device mapped on Hitachi SolutionEngine"
-	depends on SUPERH && MTD_CFI && MTD_REDBOOT_PARTS
+	depends on SUPERH && MTD_CFI 
 	help
 	  This enables access to the flash chips on the Hitachi SolutionEngine and
 	  similar boards. Say 'Y' if you are building a kernel for such a board.
 
+config MTD_SUPERH_RESERVE
+    hex "Default reserved Flash size"
+    depends on MTD_SOLUTIONENGINE
+    default 300000
+    help
+      The reserved memory is used by kernel and ram disk themselves. It's 
+      starting from 0.
+
+config MTD_MPC1211
+	tristate "CFI Flash device mapped on Interface MPC-1211"
+	depends on SUPERH && SH_MPC1211 && MTD_CFI
+	help
+	  This enables access to the flash chips on the Interface MPC-1211(CTP/PCI/MPC-SH02).
+	  Say 'Y' if you are building a kernel for such a board.
+
+config MTD_RTS7751R2D
+	tristate "CFI Flash device mapped on Renesas RTS7751R2D"
+	depends on SUPERH && SH_RTS7751R2D && MTD_CFI && MTD_PARTITIONS
+	help
+	  This enables access to the flash chips on the Renesas Technology Sales RTS7751R2D.
+	  Say 'Y' if you are building a kernel for such a board.
+
+config MTD_MICRODEV
+	tristate "CFI Flash device mapped on SuperH SH4-202 MicroDev"
+	depends on SUPERH && SH_SH4202_MICRODEV && MTD_CFI && MTD_PARTITIONS
+
 config MTD_ARM_INTEGRATOR
 	tristate "CFI Flash device mapped on ARM Integrator/P720T"
 	depends on ARM && MTD_CFI
diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/Makefile linux-2.6.17/drivers/mtd/maps/Makefile
--- linux-2.6.17-vanilla/drivers/mtd/maps/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/mtd/maps/Makefile	2006-07-12 16:54:24.000000000 +0000
@@ -62,6 +62,7 @@
 obj-$(CONFIG_MTD_SBC8240)	+= sbc8240.o
 obj-$(CONFIG_MTD_NOR_TOTO)	+= omap-toto-flash.o
 obj-$(CONFIG_MTD_MPC1211)	+= mpc1211.o
+obj-$(CONFIG_MTD_RTS7751R2D)	+= rts7751r2d-flash.o
 obj-$(CONFIG_MTD_IXP4XX)	+= ixp4xx.o
 obj-$(CONFIG_MTD_IXP2000)	+= ixp2000.o
 obj-$(CONFIG_MTD_WRSBC8260)	+= wr_sbc82xx_flash.o
@@ -69,5 +70,6 @@
 obj-$(CONFIG_MTD_SHARP_SL)	+= sharpsl-flash.o
 obj-$(CONFIG_MTD_PLATRAM)	+= plat-ram.o
 obj-$(CONFIG_MTD_OMAP_NOR)	+= omap_nor.o
+obj-$(CONFIG_MTD_MICRODEV)	+= microdev-flash.o
 obj-$(CONFIG_MTD_MTX1)		+= mtx-1_flash.o
 obj-$(CONFIG_MTD_TQM834x)	+= tqm834x.o
diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/microdev-flash.c linux-2.6.17/drivers/mtd/maps/microdev-flash.c
--- linux-2.6.17-vanilla/drivers/mtd/maps/microdev-flash.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/mtd/maps/microdev-flash.c	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,165 @@
+/*
+ * drivers/mtd/maps/microdev-flash.c
+ *
+ * Flash Mapping for the SuperH SH4-202 MicroDev.
+ *
+ *  Copyright (C) 2004  SuperH, Inc.
+ *  Copyright (C) 2004  Paul Mundt
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
+#include <linux/types.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+#include <linux/mtd/partitions.h>
+#include <asm/io.h>
+
+/*
+ * The SH4-202 MicroDev has 32M of Intel StrataFlash mapped into the
+ * beginning of the FEMI address space (mapped to P0). MicroDev flash
+ * consists of 2x16M chips, mapped contiguously, and accessed with a
+ * 32-bit buswidth.
+ *
+ * Additionally, the MicroDev also supports booting from an EEPROM.
+ * In the event that the EEPROM is configured, it is mapped in the
+ * same address space window as the StrataFlash. As such, we can only
+ * use one at a time.
+ *
+ * Since the EEPROM is only accessible with an 8-bit buswidth, flash
+ * is preferrable as far as performance is concerned.
+ */
+struct map_info microdev_flash_map = {
+	.name		= "MicroDev Flash",
+	.size		= 0x02000000,
+	.bankwidth	= 4,
+};
+
+struct map_info microdev_eeprom_map = {
+	.name		= "MicroDev EEPROM",
+	.size		= 0x00100000,
+	.bankwidth	= 1,
+};
+
+static const char *probes[] = { "RedBoot", "cmdlinepart", NULL };
+static struct mtd_partition *parsed_parts;
+
+/*
+ * Default partition map.
+ */
+static struct mtd_partition microdev_partitions[] = {
+#ifdef CONFIG_MTD_PARTITIONS
+	{
+		.name		= "bootloader",
+		.size		= 0x00080000,
+		.mask_flags	= MTD_WRITEABLE, /* force read-only */
+	}, {
+		.name		= "User FS",
+		.offset		= MTDPART_OFS_APPEND,
+		.size		= MTDPART_SIZ_FULL,
+	},
+#endif
+};
+
+static struct mtd_info *microdev_flash;
+static struct mtd_info *microdev_eeprom;
+static struct mtd_info *microdev_mtd;
+
+static void show_map_info(struct map_info *info)
+{
+	unsigned long addr;
+
+	if (!info)
+		return;
+
+	addr = info->phys & 0x1fffffff;
+
+	printk(KERN_NOTICE "%s at 0x%08lx:0x%08lx, using a %d-bit bankwidth.\n",
+	       info->name, addr, addr + info->size, info->bankwidth << 3);
+}
+
+static int __init microdev_map_init(void)
+{
+	struct mtd_partition *parts;
+	int nr_parts, parsed_nr_parts;
+
+	/* Flash mapped at FEMI area 0 */
+	microdev_flash_map.phys  = 0;
+	microdev_flash_map.virt  = (void __iomem *)P2SEGADDR(0);
+
+	/* EEPROM mapped in the same place */
+	microdev_eeprom_map.phys = 0;
+	microdev_eeprom_map.virt = (void __iomem *)P2SEGADDR(0);
+
+	simple_map_init(&microdev_flash_map);
+	simple_map_init(&microdev_eeprom_map);
+
+	/* Try the flash first */
+	printk(KERN_NOTICE "MicroDev flash: probing for flash chips at 0x00000000:\n");
+	microdev_flash = do_map_probe("cfi_probe", &microdev_flash_map);
+	if (!microdev_flash) {
+		printk(KERN_NOTICE "Flash chips not detected, probing for EEPROM\n");
+
+		/* No luck, try EEPROM */
+		microdev_eeprom = do_map_probe("map_rom", &microdev_eeprom_map);
+		if (!microdev_eeprom) {
+			/* Nope.. */
+			printk(KERN_ERR "nothing found\n");
+			return -ENXIO;
+		}
+	}
+
+	if (microdev_flash) {
+		microdev_mtd = microdev_flash;
+		show_map_info(&microdev_flash_map);
+	} else {
+		microdev_mtd = microdev_eeprom;
+		show_map_info(&microdev_eeprom_map);
+	}
+
+	microdev_mtd->owner = THIS_MODULE;
+
+	/* Start out with a static map.. */
+	parts = microdev_partitions;
+	nr_parts = ARRAY_SIZE(microdev_partitions);
+
+#ifdef CONFIG_MTD_PARTITIONS
+	/* Try to parse the partitions */
+	parsed_nr_parts = parse_mtd_partitions(microdev_mtd, probes, &parsed_parts, 0);
+	if (parsed_nr_parts > 0) {
+		parts = parsed_parts;
+		nr_parts = parsed_nr_parts;
+	}
+#endif
+
+	if (nr_parts > 0) {
+		add_mtd_partitions(microdev_mtd, parts, nr_parts);
+	} else {
+		add_mtd_device(microdev_mtd);
+	}
+
+	return 0;
+}
+
+static void __exit microdev_map_exit(void)
+{
+	if (parsed_parts) {
+		del_mtd_partitions(microdev_mtd);
+	} else {
+		del_mtd_device(microdev_mtd);
+	}
+
+	map_destroy(microdev_mtd);
+}
+
+module_init(microdev_map_init);
+module_exit(microdev_map_exit);
+
+MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>");
+MODULE_DESCRIPTION("MTD map driver for SuperH SH4-202 MicroDev");
+MODULE_LICENSE("GPL");
+
diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/rts7751r2d-flash.c linux-2.6.17/drivers/mtd/maps/rts7751r2d-flash.c
--- linux-2.6.17-vanilla/drivers/mtd/maps/rts7751r2d-flash.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/mtd/maps/rts7751r2d-flash.c	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,167 @@
+/* -------------------------------------------------------------------- */
+/* rts7751r2d-flash.c:                                                     */
+/* -------------------------------------------------------------------- */
+/*  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.
+
+    Copyright 2003 (c) Lineo uSolutions,Inc.
+*/
+/* -------------------------------------------------------------------- */
+
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+#include <linux/mtd/partitions.h>
+
+#include <asm/io.h>
+
+#undef FLASH4M_16BIT
+#define FLASH16M_16BIT
+
+#if defined(FLASH4M_16BIT)
+#define RTS7751R2D_FLASH_SIZE 0x00100000
+#else
+#define RTS7751R2D_FLASH_SIZE 0x01000000
+#endif
+
+static struct map_info rts7751r2d_map = {
+	.name		= "SH-Graphic flash",
+	.bankwidth	= 2,
+	.size		= RTS7751R2D_FLASH_SIZE,
+};
+
+/*
+ * Here are partition information for all known SH-Graphic based devices.
+ * See include/linux/mtd/partitions.h for definition of the mtd_partition
+ * structure.
+ *
+ * The *_max_flash_size is the maximum possible mapped flash size which
+ * is not necessarily the actual flash size.  It must correspond to the
+ * value specified in the mapping definition defined by the
+ * "struct map_desc *_io_desc" for the corresponding machine.
+ */
+
+#if defined(FLASH4M_16BIT)
+static struct mtd_partition rts7751r2d_partitions[] = {
+	{
+		.name		= "bootloader",
+		.size		= 0x00080000,
+		.offset		= 0xa0000000,
+		.mask_flags	= MTD_WRITEABLE, /* force read-only */
+	},{
+		.name		= "SH-Graphic jffs",
+		.size		= 0x00080000,
+		.offset		= 0xa0080000,
+	}
+};
+#else
+static struct mtd_partition rts7751r2d_partitions[] = {
+	{
+		.name		= "bootloader",
+		.size		= 0x00020000,
+		.offset		= 0x00000000,
+		.mask_flags	= MTD_WRITEABLE, /* force read-only */
+	},{
+		.name		= "mtdblock1",
+		.size		= 0x00300000,
+		.offset		= 0x00020000,
+	},{
+		.name		= "mtdblock2",
+		.size		= 0x004e0000,
+		.offset		= 0x00320000,
+	},{
+		.name		= "mtdblock3",
+		.size		= 0x00800000,
+		.offset		= 0x00800000,
+	}
+};
+#endif
+
+static struct mtd_partition *parsed_parts;
+static struct mtd_info *mymtd;
+
+int __init rts7751r2d_mtd_init(void)
+{
+	struct mtd_partition *parts;
+	int nb_parts = 0;
+	int parsed_nr_parts = 0;
+	char *part_type;
+
+	/* Default flash buswidth */
+
+	/*
+	 * Static partition definition selection
+	 */
+	part_type = "static";
+	parts = rts7751r2d_partitions;
+
+	nb_parts = ARRAY_SIZE(rts7751r2d_partitions);
+	rts7751r2d_map.phys = 0;
+	rts7751r2d_map.virt = P2SEGADDR(0);
+
+	/*
+	 * Now let's probe for the actual flash.  Do it here since
+	 * specific machine settings might have been set above.
+	 */
+	printk(KERN_NOTICE "RTS7751R2D flash: probing %d-bit flash bus\n",
+			rts7751r2d_map.bankwidth*8);
+	simple_map_init(&rts7751r2d_map);
+
+	mymtd = do_map_probe("cfi_probe", &rts7751r2d_map);
+	if (!mymtd)
+		return -ENXIO;
+
+	mymtd->owner = THIS_MODULE;
+	mymtd->erasesize = 0x10000;
+
+	/*
+	 * Dynamic partition selection stuff (might override the static ones)
+	 */
+
+	if (parsed_nr_parts > 0) {
+		parts = parsed_parts;
+		nb_parts = parsed_nr_parts;
+	}
+
+	if (nb_parts == 0) {
+		printk(KERN_NOTICE "RTS7751R2D partition info available, registering whole flash at once\n");
+		add_mtd_device(mymtd);
+	} else {
+		printk(KERN_NOTICE "Using %s partition definition\n", part_type);
+		add_mtd_partitions(mymtd, parts, nb_parts);
+	}
+	return 0;
+}
+
+static void __exit rts7751r2d_mtd_cleanup(void)
+{
+	if (mymtd) {
+		del_mtd_partitions(mymtd);
+		map_destroy(mymtd);
+		if (parsed_parts)
+			kfree(parsed_parts);
+	}
+}
+
+module_init(rts7751r2d_mtd_init);
+module_exit(rts7751r2d_mtd_cleanup);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Lineo uSolutions,Inc.");
+MODULE_DESCRIPTION("MTD map driver for RTS7751R2D base board");
diff -ruN linux-2.6.17-vanilla/drivers/mtd/mtdpart.c linux-2.6.17/drivers/mtd/mtdpart.c
--- linux-2.6.17-vanilla/drivers/mtd/mtdpart.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/mtd/mtdpart.c	2006-07-12 16:54:24.000000000 +0000
@@ -481,6 +481,14 @@
 		printk (KERN_NOTICE "0x%08x-0x%08x : \"%s\"\n", slave->offset,
 			slave->offset + slave->mtd.size, slave->mtd.name);
 
+#ifdef CONFIG_SUPERH
+		/* 
+		 * slave->offset contains a P2 address, this confuses the rest
+		 * of the sanity checks, so kick it back down to P0.
+		 */
+		slave->offset &= 0x1fffffff;
+#endif
+
 		/* let's do some sanity checks */
 		if (slave->offset >= master->size) {
 				/* let's register it anyway to preserve ordering */
diff -ruN linux-2.6.17-vanilla/drivers/net/8139too.c linux-2.6.17/drivers/net/8139too.c
--- linux-2.6.17-vanilla/drivers/net/8139too.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/net/8139too.c	2006-07-12 16:54:24.000000000 +0000
@@ -257,7 +257,7 @@
 	{0x018a, 0x0106, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
 	{0x126c, 0x1211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
 	{0x1743, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
-	{0x021b, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 }, 
+	{0x021b, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 },
 
 #ifdef CONFIG_SH_SECUREEDGE5410
 	/* Bogus 8139 silicon reports 8129 without external PROM :-( */
@@ -970,11 +970,17 @@
 	ioaddr = tp->mmio_addr;
 	assert (ioaddr != NULL);
 
+#ifdef CONFIG_SH_SECUREEDGE5410
+	/* Don't rely on the eeprom, get MAC from chip. */
+	for (i = 0; i < 6; i++)
+		dev->dev_addr[i] = readb(ioaddr + MAC0 + i);
+#else
 	addr_len = read_eeprom (ioaddr, 0, 8) == 0x8129 ? 8 : 6;
 	for (i = 0; i < 3; i++)
 		((u16 *) (dev->dev_addr))[i] =
 		    le16_to_cpu (read_eeprom (ioaddr, i + 7, addr_len));
 	memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len);
+#endif
 
 	/* The Rtl8139-specific entries in the device structure. */
 	dev->open = rtl8139_open;
diff -ruN linux-2.6.17-vanilla/drivers/net/8390.c linux-2.6.17/drivers/net/8390.c
--- linux-2.6.17-vanilla/drivers/net/8390.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/net/8390.c	2006-07-12 16:54:24.000000000 +0000
@@ -108,6 +108,13 @@
 int ei_debug = 1;
 #endif
 
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+#ifdef ETH_ZLEN
+#undef ETH_ZLEN
+#define ETH_ZLEN	64
+#endif
+#endif
+
 /* Index to functions. */
 static void ei_tx_intr(struct net_device *dev);
 static void ei_tx_err(struct net_device *dev);
@@ -938,7 +945,11 @@
 	 */
 	 
 	if (netif_running(dev))
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+		outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR);
+#else
 		outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
+#endif
 	outb_p(E8390_NODMA + E8390_PAGE1, e8390_base + E8390_CMD);
 	for(i = 0; i < 8; i++) 
 	{
@@ -951,11 +962,23 @@
 	outb_p(E8390_NODMA + E8390_PAGE0, e8390_base + E8390_CMD);
 
   	if(dev->flags&IFF_PROMISC)
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+  		outb_p(E8390_RXCONFIG | 0x40 | 0x18, e8390_base + EN0_RXCR);
+#else
   		outb_p(E8390_RXCONFIG | 0x18, e8390_base + EN0_RXCR);
+#endif
 	else if(dev->flags&IFF_ALLMULTI || dev->mc_list)
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+  		outb_p(E8390_RXCONFIG | 0x40 | 0x08, e8390_base + EN0_RXCR);
+#else
   		outb_p(E8390_RXCONFIG | 0x08, e8390_base + EN0_RXCR);
+#endif
   	else
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+  		outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR);
+#else
   		outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR);
+#endif
  }
 
 /*
@@ -1029,8 +1052,13 @@
 	struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
 	int i;
 	int endcfg = ei_local->word16
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+	    ? (0x00 | ENDCFG_WTS | (ei_local->bigendian ? ENDCFG_BOS : 0))
+	    : 0x00;
+#else
 	    ? (0x48 | ENDCFG_WTS | (ei_local->bigendian ? ENDCFG_BOS : 0))
 	    : 0x48;
+#endif
     
 	if(sizeof(struct e8390_pkt_hdr)!=4)
     		panic("8390.c: header struct mispacked\n");    
@@ -1041,7 +1069,11 @@
 	outb_p(0x00,  e8390_base + EN0_RCNTLO);
 	outb_p(0x00,  e8390_base + EN0_RCNTHI);
 	/* Set to monitor and loopback mode -- this is vital!. */
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+	outb_p(E8390_RXOFF | 0x40, e8390_base + EN0_RXCR); /* 0x20 */
+#else
 	outb_p(E8390_RXOFF, e8390_base + EN0_RXCR); /* 0x20 */
+#endif
 	outb_p(E8390_TXOFF, e8390_base + EN0_TXCR); /* 0x02 */
 	/* Set the transmit page and receive ring. */
 	outb_p(ei_local->tx_start_page, e8390_base + EN0_TPSR);
@@ -1078,7 +1110,11 @@
 		outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base+E8390_CMD);
 		outb_p(E8390_TXCONFIG, e8390_base + EN0_TXCR); /* xmit on. */
 		/* 3c503 TechMan says rxconfig only after the NIC is started. */
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+		outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR); /* rx on,  */
+#else
 		outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR); /* rx on,  */
+#endif
 		do_set_multicast_list(dev);	/* (re)load the mcast table */
 	}
 }
diff -ruN linux-2.6.17-vanilla/drivers/net/88796l.c linux-2.6.17/drivers/net/88796l.c
--- linux-2.6.17-vanilla/drivers/net/88796l.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/net/88796l.c	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,95 @@
+#define	NE_EEPROM	0x14
+
+static inline void delay(void);
+static unsigned char asix88796_eeprom_getbit(int ioaddr);
+static void asix88796_eeprom_send(int ioaddr, int value);
+static unsigned short asix88796_eeprom_get(int ioaddr);
+static void asix88796_eeprom_setaddr(int ioaddr, int addr);
+static void asix88796_eeprom_command(int ioaddr);
+static void asix88796_eeprom_read(int ioaddr, unsigned char *buff);
+
+static inline void delay(void)
+{
+	ctrl_inw(0xa0000000);
+}
+
+static unsigned char asix88796_eeprom_getbit(int ioaddr)
+{
+	unsigned char value;
+
+	outb(inb(ioaddr + NE_EEPROM) & 0x7f, ioaddr + NE_EEPROM);
+	delay();
+	value = (inb(ioaddr + NE_EEPROM) & 0x40) >> 6;
+	outb(inb(ioaddr + NE_EEPROM) | 0x80, ioaddr + NE_EEPROM);
+	delay();
+
+	return value;
+}
+
+static void asix88796_eeprom_send(int ioaddr, int value)
+{
+	if (value)
+		outb(inb(ioaddr + NE_EEPROM) | 0x20, ioaddr + NE_EEPROM);
+	else
+		outb(inb(ioaddr + NE_EEPROM) & 0xdf, ioaddr + NE_EEPROM);
+	outb(inb(ioaddr + NE_EEPROM) & 0x7f, ioaddr + NE_EEPROM);
+	delay();
+	outb(inb(ioaddr + NE_EEPROM) | 0x80, ioaddr + NE_EEPROM);
+	delay();
+	outb(inb(ioaddr + NE_EEPROM) & 0xdf, ioaddr + NE_EEPROM);
+}
+
+static unsigned short asix88796_eeprom_get(int ioaddr)
+{
+	unsigned short value = 0;
+	int i;
+
+	asix88796_eeprom_getbit(ioaddr);
+	for (i=0; i<16; i++) {
+		value <<= 1;
+		value |= asix88796_eeprom_getbit(ioaddr);
+	}
+
+	return value;
+}
+
+static void asix88796_eeprom_setaddr(int ioaddr, int addr)
+{
+	asix88796_eeprom_send(ioaddr, addr & 0x0080);
+	asix88796_eeprom_send(ioaddr, addr & 0x0040);
+	asix88796_eeprom_send(ioaddr, addr & 0x0020);
+	asix88796_eeprom_send(ioaddr, addr & 0x0010);
+	asix88796_eeprom_send(ioaddr, addr & 0x0008);
+	asix88796_eeprom_send(ioaddr, addr & 0x0004);
+	asix88796_eeprom_send(ioaddr, addr & 0x0002);
+	asix88796_eeprom_send(ioaddr, addr & 0x0001);
+}
+
+static void asix88796_eeprom_command(int ioaddr)
+{
+	asix88796_eeprom_send(ioaddr, 0);
+	asix88796_eeprom_send(ioaddr, 1);
+	asix88796_eeprom_send(ioaddr, 1);
+	asix88796_eeprom_send(ioaddr, 0);
+}
+
+static void asix88796_eeprom_read(int ioaddr, unsigned char *buff)
+{
+	int i;
+	int addr = 0;
+	unsigned short value;
+
+	for (i=0; i<3; i++) {
+		outb(inb(ioaddr + NE_EEPROM) | 0x10, ioaddr + NE_EEPROM);
+		outb(inb(ioaddr + NE_EEPROM) & 0xdf, ioaddr + NE_EEPROM);
+		delay();
+		asix88796_eeprom_command(ioaddr);
+		asix88796_eeprom_setaddr(ioaddr, addr++);
+		value = asix88796_eeprom_get(ioaddr);
+		*buff++ = (unsigned char)(value & 0xff);
+		*buff++ = (unsigned char)((value >> 8) & 0xff);
+		outb(inb(ioaddr + NE_EEPROM) & 0x7f, ioaddr + NE_EEPROM);
+		outb(inb(ioaddr + NE_EEPROM) & 0xdf, ioaddr + NE_EEPROM);
+		outb(inb(ioaddr + NE_EEPROM) & 0xef, ioaddr + NE_EEPROM);
+	}
+}
diff -ruN linux-2.6.17-vanilla/drivers/net/CVS/Entries linux-2.6.17/drivers/net/CVS/Entries
--- linux-2.6.17-vanilla/drivers/net/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/net/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,7 @@
+/8390.c/1.9/Sat Jan  7 20:02:47 2006/-ko/
+/88796l.c/1.1/Sat Jan  7 20:02:47 2006/-ko/
+/stnic.c/1.7/Wed Jan  4 17:53:54 2006/-ko/
+/8139too.c/1.51/Wed Jul  5 14:51:19 2006/-ko/
+/Kconfig/1.27/Wed Jul  5 14:51:19 2006/-ko/
+/ne.c/1.10/Wed Jul  5 14:51:19 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/net/CVS/Repository linux-2.6.17/drivers/net/CVS/Repository
--- linux-2.6.17-vanilla/drivers/net/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/net/CVS/Repository	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/net
diff -ruN linux-2.6.17-vanilla/drivers/net/CVS/Root linux-2.6.17/drivers/net/CVS/Root
--- linux-2.6.17-vanilla/drivers/net/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/net/CVS/Root	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/net/Kconfig linux-2.6.17/drivers/net/Kconfig
--- linux-2.6.17-vanilla/drivers/net/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/net/Kconfig	2006-07-12 16:54:24.000000000 +0000
@@ -1078,7 +1078,7 @@
 
 config NE2000
 	tristate "NE2000/NE1000 support"
-	depends on NET_ISA || (Q40 && m) || M32R
+	depends on NET_ISA || (Q40 && m) || M32R || SUPERH
 	select CRC32
 	---help---
 	  If you have a network (Ethernet) card of this type, say Y and read
diff -ruN linux-2.6.17-vanilla/drivers/net/ne.c linux-2.6.17/drivers/net/ne.c
--- linux-2.6.17-vanilla/drivers/net/ne.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/net/ne.c	2006-07-12 16:54:24.000000000 +0000
@@ -142,6 +142,10 @@
 #elif defined(CONFIG_PLAT_OAKS32R)  || \
    defined(CONFIG_TOSHIBA_RBTX4927) || defined(CONFIG_TOSHIBA_RBTX4938)
 #  define DCR_VAL 0x48		/* 8-bit mode */
+#elif defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || \
+   defined(CONFIG_SH_R7780RP)
+#  include "88796l.c"
+#  define DCR_VAL 0x01
 #else
 #  define DCR_VAL 0x49
 #endif
@@ -191,6 +195,11 @@
 
 	SET_MODULE_OWNER(dev);
 
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+	base_addr = AX88796L_IO_BASE;
+	dev->irq = IRQ_ONETH;
+#endif
+
 	/* First check any supplied i/o locations. User knows best. <cough> */
 	if (base_addr > 0x1ff)	/* Check a single specified location. */
 		return ne_probe1(dev, base_addr);
@@ -324,7 +333,11 @@
 	if (ei_debug  &&  version_printed++ == 0)
 		printk(KERN_INFO "%s" KERN_INFO "%s", version1, version2);
 
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+	printk(KERN_INFO "ASIX AX88796L ethercard probe at %#3x:", ioaddr);
+#else
 	printk(KERN_INFO "NE*000 ethercard probe at %#3x:", ioaddr);
+#endif
 
 	/* A user with a poor card that fails to ack the reset, or that
 	   does not have a valid 0x57,0x57 signature can still use this
@@ -365,12 +378,20 @@
 		struct {unsigned char value, offset; } program_seq[] =
 		{
 			{E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+			{0x00,	EN0_DCFG},	/* Set byte-wide (0x00) access. */
+#else
 			{0x48,	EN0_DCFG},	/* Set byte-wide (0x48) access. */
+#endif
 			{0x00,	EN0_RCNTLO},	/* Clear the count regs. */
 			{0x00,	EN0_RCNTHI},
 			{0x00,	EN0_IMR},	/* Mask completion irq. */
 			{0xFF,	EN0_ISR},
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+			{E8390_RXOFF|0x40, EN0_RXCR},	/* 0x60  Set to monitor */
+#else
 			{E8390_RXOFF, EN0_RXCR},	/* 0x20  Set to monitor */
+#endif
 			{E8390_TXOFF, EN0_TXCR},	/* 0x02  and loopback mode. */
 			{32,	EN0_RCNTLO},
 			{0x00,	EN0_RCNTHI},
@@ -395,6 +416,9 @@
 		for (i = 0; i < 16; i++)
 			SA_prom[i] = SA_prom[i+i];
 		/* We must set the 8390 for word mode. */
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+		asix88796_eeprom_read(ioaddr, SA_prom);
+#endif
 		outb_p(DCR_VAL, ioaddr + EN0_DCFG);
 		start_page = NESM_START_PG;
 
@@ -426,7 +450,11 @@
 
 	/* Set up the rest of the parameters. */
 	if (neX000 || bad_card || copam) {
+#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP)
+		name = (wordlength == 2) ? "AX88796L" : "NE1000";
+#else
 		name = (wordlength == 2) ? "NE2000" : "NE1000";
+#endif
 	}
 	else if (ctron)
 	{
diff -ruN linux-2.6.17-vanilla/drivers/net/stnic.c linux-2.6.17/drivers/net/stnic.c
--- linux-2.6.17-vanilla/drivers/net/stnic.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/net/stnic.c	2006-07-12 16:54:24.000000000 +0000
@@ -20,7 +20,7 @@
 
 #include <asm/system.h>
 #include <asm/io.h>
-#include <asm/se/se.h>
+#include <asm/se.h>
 #include <asm/machvec.h>
 #ifdef CONFIG_SH_STANDARD_BIOS 
 #include <asm/sh_bios.h>
diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/CVS/Entries linux-2.6.17/drivers/pcmcia/CVS/Entries
--- linux-2.6.17-vanilla/drivers/pcmcia/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/pcmcia/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,5 @@
+/hd64461_ss.c/1.16/Mon Mar 27 23:59:10 2006/-ko/
+/yenta_socket.c/1.13/Mon Mar 27 21:06:14 2006/-ko/
+/Kconfig/1.12/Wed Jul  5 14:51:21 2006/-ko/
+/Makefile/1.11/Wed Jul  5 14:51:21 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/CVS/Repository linux-2.6.17/drivers/pcmcia/CVS/Repository
--- linux-2.6.17-vanilla/drivers/pcmcia/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/pcmcia/CVS/Repository	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/pcmcia
diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/CVS/Root linux-2.6.17/drivers/pcmcia/CVS/Root
--- linux-2.6.17-vanilla/drivers/pcmcia/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/pcmcia/CVS/Root	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/Kconfig linux-2.6.17/drivers/pcmcia/Kconfig
--- linux-2.6.17-vanilla/drivers/pcmcia/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/pcmcia/Kconfig	2006-07-12 16:54:24.000000000 +0000
@@ -179,6 +179,19 @@
 	  "Bridge" is the name used for the hardware inside your computer that
 	  PCMCIA cards are plugged into. If unsure, say N.
 
+config HD64461_PCMCIA
+	tristate "HD64461 host bridge support"
+	depends on HD64461 && PCMCIA
+	
+config HD64461_PCMCIA_SOCKETS
+	int '     HD64461 PCMCIA sockets' 
+	default 1
+	depends on HD64461_PCMCIA
+
+config HD64465_PCMCIA
+	tristate "HD64465 host bridge support"
+	depends on HD64465 && PCMCIA
+
 config PCMCIA_M8XX
         tristate "MPC8xx PCMCIA support"
         depends on PCMCIA && PPC && 8xx 
@@ -189,10 +202,6 @@
 
         This driver is also available as a module called m8xx_pcmcia.
 
-config HD64465_PCMCIA
-	tristate "HD64465 host bridge support"
-	depends on HD64465 && PCMCIA
-
 config PCMCIA_AU1X00
 	tristate "Au1x00 pcmcia support"
 	depends on SOC_AU1X00 && PCMCIA
diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/Makefile linux-2.6.17/drivers/pcmcia/Makefile
--- linux-2.6.17-vanilla/drivers/pcmcia/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/pcmcia/Makefile	2006-07-12 16:54:24.000000000 +0000
@@ -25,8 +25,9 @@
 obj-$(CONFIG_I82365)				+= i82365.o
 obj-$(CONFIG_I82092)				+= i82092.o
 obj-$(CONFIG_TCIC)				+= tcic.o
-obj-$(CONFIG_PCMCIA_M8XX)			+= m8xx_pcmcia.o
+obj-$(CONFIG_HD64461_PCMCIA)			+= hd64461_ss.o
 obj-$(CONFIG_HD64465_PCMCIA)			+= hd64465_ss.o
+obj-$(CONFIG_PCMCIA_M8XX)			+= m8xx_pcmcia.o
 obj-$(CONFIG_PCMCIA_SA1100)			+= sa11xx_core.o sa1100_cs.o
 obj-$(CONFIG_PCMCIA_SA1111)			+= sa11xx_core.o sa1111_cs.o
 obj-$(CONFIG_PCMCIA_PXA2XX)                     += pxa2xx_core.o pxa2xx_cs.o
diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/hd64461_ss.c linux-2.6.17/drivers/pcmcia/hd64461_ss.c
--- linux-2.6.17-vanilla/drivers/pcmcia/hd64461_ss.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/pcmcia/hd64461_ss.c	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,679 @@
+/*
+ * drivers/pcmcia/hd64461_ss.c
+ *
+ * PCMCIA support for Hitachi HD64461 companion chip
+ * by Andriy Skulysh <askulysh@image.kiev.ua> 2002, 2003, 2004
+ *
+ *	based on hd64461_ss.c by Greg Banks <gbanks@pocketpenguins.com>
+ *
+ */
+#include <linux/config.h>
+#include <linux/types.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/string.h>
+#include <linux/kernel.h>
+#include <linux/ioport.h>
+#include <linux/mm.h>
+#include <linux/vmalloc.h>
+#include <linux/irq.h>
+#include <linux/interrupt.h>
+#include <linux/platform_device.h>
+#include <pcmcia/cs_types.h>
+#include <pcmcia/cs.h>
+#include <pcmcia/ss.h>
+#include <pcmcia/bulkmem.h>
+#include <pcmcia/cistpl.h>
+#include "cs_internal.h"
+#include <asm/io.h>
+#include <asm/hd64461.h>
+#include <asm/hp6xx/hp6xx.h>
+
+#define MODNAME "HD64461_ss"
+
+#ifdef DEBUG
+static int hd64461_pc_debug = 2;
+
+module_param_named(pc_debug, hd64461_pc_debug, int, 0644);
+
+#define DPRINTK(n, args...)		\
+do {					\
+	if (hd64461_pc_debug >= (n))	\
+		printk(args);		\
+} while (0)
+#else
+#define DPRINTK(n, args...)	do { } while (0)
+#endif
+
+#define HD64461_PCC(s,reg)						\
+	( CONFIG_HD64461_IOBASE-HD64461_STBCR+ ( (s) ? HD64461_PCC1##reg : \
+	HD64461_PCC0##reg ) )
+
+typedef struct hd64461_socket_t {
+	unsigned int irq;
+	unsigned long mem_base;
+	socket_state_t state;
+	pccard_mem_map mem_maps[MAX_WIN];
+	unsigned char IC_memory;
+	struct pcmcia_socket socket;
+ 	u8 cscier;
+} hd64461_socket_t;
+
+static hd64461_socket_t hd64461_sockets[CONFIG_HD64461_PCMCIA_SOCKETS];
+
+#define hd64461_sockno(sp)	(sp - hd64461_sockets)
+
+static void hd64461_enable_int(unsigned int irq)
+{
+	u8 cscier;
+	u32 cscier_reg = HD64461_PCC(0, CSCIER);
+
+	cscier = ctrl_inb(cscier_reg);
+	cscier &= ~HD64461_PCCCSCIER_IREQE_MASK;
+	cscier |= HD64461_PCCCSCIER_IREQE_LEVEL;
+	ctrl_outb(cscier, cscier_reg);
+}
+
+static void hd64461_disable_int(unsigned int irq)
+{
+	u8 cscier;
+	u32 cscier_reg = HD64461_PCC(0, CSCIER);
+
+	cscier = ctrl_inb(cscier_reg);
+	cscier &= ~HD64461_PCCCSCIER_IREQE_MASK;
+	ctrl_outb(cscier, cscier_reg);
+}
+
+static void hd64461_enable_irq(unsigned int irq)
+{
+	DPRINTK(3, "hd64461_enable_irq(irq=%d)\n", irq);
+	hd64461_enable_int(irq);
+}
+
+static void hd64461_disable_irq(unsigned int irq)
+{
+	DPRINTK(3, "hd64461_disable_irq(irq=%d)\n", irq);
+	hd64461_disable_int(irq);
+}
+
+static unsigned int hd64461_startup_irq(unsigned int irq)
+{
+	DPRINTK(3, "hd64461_startup_irq(irq=%d)\n", irq);
+	hd64461_enable_irq(irq);
+	return 0;
+}
+
+static void hd64461_shutdown_irq(unsigned int irq)
+{
+	DPRINTK(3, "hd64461_shutdown_irq(irq=%d)\n", irq);
+	hd64461_disable_irq(irq);
+}
+
+static void hd64461_mask_and_ack_irq(unsigned int irq)
+{
+	DPRINTK(3, "hd64461_mask_and_ack_irq(irq=%d)\n", irq);
+	hd64461_disable_irq(irq);
+}
+
+static void hd64461_end_irq(unsigned int irq)
+{
+	DPRINTK(3, "hd64461_end_irq(irq=%d)\n", irq);
+	hd64461_enable_irq(irq);
+}
+
+static struct hw_interrupt_type hd64461_ss_irq_type = {
+	.typename	= "HD64461_SS-IRQ",
+	.startup	= hd64461_startup_irq,
+	.shutdown	= hd64461_shutdown_irq,
+	.enable		= hd64461_enable_irq,
+	.disable	= hd64461_disable_irq,
+	.ack		= hd64461_mask_and_ack_irq,
+	.end		= hd64461_end_irq
+};
+
+static int hd64461_set_voltage(int sock, int Vcc, int Vpp)
+{
+	u8 gcr, scr;
+	u16 stbcr;
+	u32 gcr_reg = HD64461_PCC(sock, GCR);
+	u32 scr_reg = HD64461_PCC(sock, SCR);
+	DPRINTK(2, "hd64461_set_voltage(%d, %d, %d)\n", sock, Vcc, Vpp);
+
+	gcr = ctrl_inb(gcr_reg);
+	scr = ctrl_inb(scr_reg);
+
+	switch (Vcc) {
+	case 0:
+		gcr |= HD64461_PCCGCR_VCC0;
+		scr |= HD64461_PCCSCR_VCC1;
+		break;
+	case 33:
+		if (sock == 1) {
+			gcr &= ~HD64461_PCCGCR_VCC0;
+			scr &= ~HD64461_PCCSCR_VCC1;
+		} else {
+			gcr |= HD64461_PCCGCR_VCC0;
+			scr &= ~HD64461_PCCSCR_VCC1;
+		}
+		break;
+	case 50:
+		gcr &= ~HD64461_PCCGCR_VCC0;
+		scr &= ~HD64461_PCCSCR_VCC1;
+		break;
+	}
+
+	ctrl_outb(gcr, gcr_reg);
+	ctrl_outb(scr, scr_reg);
+
+	stbcr = inw(HD64461_STBCR);
+
+	if (Vcc > 0) {
+		stbcr &= ~(sock == 0 ? HD64461_STBCR_SPC0ST :
+			   HD64461_STBCR_SPC1ST);
+	} else {
+		stbcr |= (sock == 0 ? HD64461_STBCR_SPC0ST :
+			  HD64461_STBCR_SPC1ST);
+	}
+
+	outw(stbcr, HD64461_STBCR);
+
+	return 1;
+}
+
+static int hd64461_init(struct pcmcia_socket *s)
+{
+	u16 gpadr;
+	hd64461_socket_t *sp = container_of(s, struct hd64461_socket_t, socket);
+
+	DPRINTK(0, "hd64461_init(%d)\n", s->sock);
+
+	sp->state.Vcc = 0;
+	sp->state.Vpp = 0;
+	hd64461_set_voltage(s->sock, 0, 0);
+
+	if (mach_is_hp6xx() && s->sock == 0) {
+		gpadr = inw(HD64461_GPADR);
+		gpadr &= ~HD64461_GPADR_PCMCIA0;
+		outw(gpadr, HD64461_GPADR);
+	}
+
+	return 0;
+}
+
+static int hd64461_suspend(struct pcmcia_socket *s)
+{
+	u16 gpadr;
+	u8 gcr;
+	u32 gcr_reg = HD64461_PCC(s->sock, GCR);
+
+	DPRINTK(0, "hd64461_suspend(%d)\n", s->sock);
+
+	gcr = ctrl_inb(gcr_reg);
+	gcr &= ~HD64461_PCCGCR_DRVE;
+	ctrl_outb(gcr, gcr_reg);
+	hd64461_set_voltage(s->sock, 0, 0);
+
+	if ((mach_is_hp6xx())&&(s->sock == 0)) {
+		gpadr = inw(HD64461_GPADR);
+		gpadr |= HD64461_GPADR_PCMCIA0;
+		outw(gpadr, HD64461_GPADR);
+	}
+
+	return 0;
+}
+
+static int hd64461_get_status(struct pcmcia_socket *s, u32 * value)
+{
+	u8 isr;
+	u32 status = 0;
+	hd64461_socket_t *sp = container_of(s, struct hd64461_socket_t, socket);
+
+	isr = ctrl_inb(HD64461_PCC(s->sock, ISR));
+
+	if ((isr & HD64461_PCCISR_PCD_MASK) == 0) {
+		status |= SS_DETECT;
+
+		if (sp->IC_memory) {
+			switch (isr & HD64461_PCCISR_BVD_MASK) {
+			case HD64461_PCCISR_BVD_BATGOOD:
+				break;
+			case HD64461_PCCISR_BVD_BATWARN:
+				status |= SS_BATWARN;
+				break;
+			default:
+				status |= SS_BATDEAD;
+				break;
+			}
+
+			if (isr & HD64461_PCCISR_READY)
+				status |= SS_READY;
+			if (isr & HD64461_PCCISR_MWP)
+				status |= SS_WRPROT;
+		} else {
+			if (isr & HD64461_PCCISR_BVD1)
+				status |= SS_STSCHG;
+		}
+
+		switch (isr & (HD64461_PCCISR_VS2 | HD64461_PCCISR_VS1)) {
+		case HD64461_PCCISR_VS1:
+			printk(KERN_NOTICE MODNAME
+			       ": cannot handle X.XV card, ignored\n");
+			status = 0;
+			break;
+		case 0:
+		case HD64461_PCCISR_VS2:
+			status |= SS_3VCARD;
+			break;
+		case HD64461_PCCISR_VS2 | HD64461_PCCISR_VS1:
+			break;
+		}
+
+		if ((sp->state.Vcc != 0) || (sp->state.Vpp != 0))
+			status |= SS_POWERON;
+	}
+	DPRINTK(0, "hd64461_get_status(%d) = %x\n", s->sock, status);
+
+	*value = status;
+	return 0;
+}
+
+static int hd64461_set_socket(struct pcmcia_socket *s, socket_state_t * state)
+{
+	u32 flags;
+	u32 changed;
+	u8 gcr, cscier;
+	hd64461_socket_t *sp = container_of(s, struct hd64461_socket_t, socket);
+	u32 gcr_reg = HD64461_PCC(s->sock, GCR);
+	u32 cscier_reg = HD64461_PCC(s->sock, CSCIER);
+
+	DPRINTK(0, "%s(sock=%d, flags=%x, csc_mask=%x, Vcc=%d, Vpp=%d, io_irq=%d)\n",
+		__FUNCTION__, s->sock, state->flags, state->csc_mask, state->Vcc,
+		state->Vpp, state->io_irq);
+
+	local_irq_save(flags);
+
+	if (state->Vpp != sp->state.Vpp || state->Vcc != sp->state.Vcc) {
+		if (!hd64461_set_voltage(s->sock, state->Vcc, state->Vpp)) {
+    			local_irq_restore(flags);
+			return -EINVAL;
+		}
+	}
+
+	changed = sp->state.csc_mask ^ state->csc_mask;
+	cscier = ctrl_inb(cscier_reg);
+
+	if (changed & SS_DETECT) {
+		if (state->csc_mask & SS_DETECT)
+			cscier |= HD64461_PCCCSCIER_CDE;
+		else
+			cscier &= ~HD64461_PCCCSCIER_CDE;
+	}
+
+	if (changed & SS_READY) {
+		if (state->csc_mask & SS_READY)
+			cscier |= HD64461_PCCCSCIER_RE;
+		else
+			cscier &= ~HD64461_PCCCSCIER_RE;
+	}
+
+	if (changed & SS_BATDEAD) {
+		if (state->csc_mask & SS_BATDEAD)
+			cscier |= HD64461_PCCCSCIER_BDE;
+		else
+			cscier &= ~HD64461_PCCCSCIER_BDE;
+	}
+
+	if (changed & SS_BATWARN) {
+		if (state->csc_mask & SS_BATWARN)
+			cscier |= HD64461_PCCCSCIER_BWE;
+		else
+			cscier &= ~HD64461_PCCCSCIER_BWE;
+	}
+
+	if (changed & SS_STSCHG) {
+		if (state->csc_mask & SS_STSCHG)
+			cscier |= HD64461_PCCCSCIER_SCE;
+		else
+			cscier &= ~HD64461_PCCCSCIER_SCE;
+	}
+
+	ctrl_outb(cscier, cscier_reg);
+
+	changed = sp->state.flags ^ state->flags;
+
+	gcr = ctrl_inb(gcr_reg);
+
+	if (changed & SS_IOCARD) {
+		DPRINTK(0, "card type: %s\n",
+			(state->flags & SS_IOCARD ? "i/o" : "memory"));
+		if (state->flags & SS_IOCARD) {
+			if (s->sock == 1) {
+				printk(KERN_ERR
+				       "socket 1 can be only IC Memory card\n");
+			} else {
+				gcr |= HD64461_PCCGCR_PCCT;
+				sp->IC_memory = 0;
+			}
+		} else {
+			gcr &= ~HD64461_PCCGCR_PCCT;
+			sp->IC_memory = 1;
+		}
+	}
+
+	if (changed & SS_RESET) {
+		DPRINTK(0, "%s reset card\n",
+			(state->flags & SS_RESET ? "start" : "stop"));
+		if (state->flags & SS_RESET)
+			gcr |= HD64461_PCCGCR_PCCR;
+		else
+			gcr &= ~HD64461_PCCGCR_PCCR;
+	}
+
+	if (changed & SS_OUTPUT_ENA) {
+		DPRINTK(0, "%sabling card output\n",
+			(state->flags & SS_OUTPUT_ENA ? "en" : "dis"));
+		if (state->flags & SS_OUTPUT_ENA)
+			gcr |= HD64461_PCCGCR_DRVE;
+		else
+			gcr &= ~HD64461_PCCGCR_DRVE;
+	}
+
+	DPRINTK(2, "cscier=%02x ", cscier);
+	DPRINTK(2, "gcr=%02x\n", gcr);
+	ctrl_outb(gcr, gcr_reg);
+
+	sp->state = *state;
+
+	local_irq_restore(flags);
+
+	return 0;
+}
+
+static int hd64461_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io)
+{
+	/* this is not needed due to static mappings */
+	DPRINTK(0, "hd64461_set_io_map(%d)\n", s->sock);
+
+	return 0;
+}
+
+static int hd64461_set_mem_map(struct pcmcia_socket *s,
+			       struct pccard_mem_map *mem)
+{
+	hd64461_socket_t *sp = container_of(s, struct hd64461_socket_t, socket);
+	struct pccard_mem_map *smem;
+	int map = mem->map;
+	unsigned long saddr;
+
+	DPRINTK(0, "%s(sock=%d, map=%d, flags=0x%x,static_start=0x%08lx, card_start=0x%08x)\n",
+		__FUNCTION__, s->sock, map, mem->flags, mem->static_start, mem->card_start);
+
+	if (map >= MAX_WIN)
+		return -EINVAL;
+
+	smem = &sp->mem_maps[map];
+	saddr = sp->mem_base + mem->card_start;
+
+	if (!(mem->flags & MAP_ATTRIB))
+		saddr += HD64461_PCC_WINDOW;
+
+	mem->static_start = saddr;
+	*smem = *mem;
+
+	return 0;
+}
+
+static int hd64461_pcmcia_irq_demux(int irq, void *dev)
+{
+	hd64461_socket_t *sp = (hd64461_socket_t *) dev;
+	unsigned char cscr;
+	unsigned cscr_reg = HD64461_PCC(0, CSCR);
+
+	DPRINTK(3, "hd64461_pcmcia_irq_demux(irq= %d - ", irq);
+
+	cscr = ctrl_inb(cscr_reg);
+	if (cscr & HD64461_PCCCSCR_IREQ) {
+		cscr &= ~HD64461_PCCCSCR_IREQ;
+		ctrl_outb(cscr, cscr_reg);
+		irq = sp->socket.pci_irq;
+	}
+
+	DPRINTK(3, "%d)\n", irq);
+
+	return irq;
+}
+
+static irqreturn_t hd64461_interrupt(int irq, void *dev, struct pt_regs *regs)
+{
+	hd64461_socket_t *sp = (hd64461_socket_t *) dev;
+	unsigned events = 0;
+	unsigned char cscr;
+	unsigned cscr_reg = HD64461_PCC(hd64461_sockno(sp), CSCR);
+
+	cscr = ctrl_inb(cscr_reg);
+
+	DPRINTK(3, "hd64461_interrupt: cscr=%04x irq=%d\n", cscr, irq);
+
+	if (cscr & HD64461_PCCCSCR_CDC) {
+		cscr &= ~HD64461_PCCCSCR_CDC;
+		events |= SS_DETECT;
+
+		if ((ctrl_inb(HD64461_PCC(hd64461_sockno(sp), ISR)) &
+		     HD64461_PCCISR_PCD_MASK) != 0) {
+			cscr &= ~(HD64461_PCCCSCR_RC | HD64461_PCCCSCR_BW |
+				  HD64461_PCCCSCR_BD | HD64461_PCCCSCR_SC);
+		}
+	}
+
+	if (sp->IC_memory) {
+		if (cscr & HD64461_PCCCSCR_RC) {
+			cscr &= ~HD64461_PCCCSCR_RC;
+			events |= SS_READY;
+		}
+
+		if (cscr & HD64461_PCCCSCR_BW) {
+			cscr &= ~HD64461_PCCCSCR_BW;
+			events |= SS_BATWARN;
+		}
+
+		if (cscr & HD64461_PCCCSCR_BD) {
+			cscr &= ~HD64461_PCCCSCR_BD;
+			events |= SS_BATDEAD;
+		}
+	} else {
+		if (cscr & HD64461_PCCCSCR_SC) {
+			cscr &= ~HD64461_PCCCSCR_SC;
+			events |= SS_STSCHG;
+		}
+	}
+
+	ctrl_outb(cscr, cscr_reg);
+
+	if (events)
+		pcmcia_parse_events(&sp->socket, events);
+
+	return IRQ_HANDLED;
+}
+
+static struct pccard_operations hd64461_operations = {
+	.init = hd64461_init,
+	.suspend = hd64461_suspend,
+	.get_status = hd64461_get_status,
+	.set_socket = hd64461_set_socket,
+	.set_io_map = hd64461_set_io_map,
+	.set_mem_map = hd64461_set_mem_map,
+};
+
+int hd64461_init_socket(int sock, int irq, int io_irq, unsigned long mem_base,
+			unsigned short io_offset)
+{
+	hd64461_socket_t *sp = &hd64461_sockets[sock];
+	unsigned gcr_reg = HD64461_PCC(sock, GCR);
+	int irq_flags = (sock == 0) ? SA_INTERRUPT : SA_SHIRQ;
+	u8 gcr;
+	int i, err;
+
+	ctrl_outb(0, HD64461_PCC(sock, CSCIER));
+
+	memset(sp, 0, sizeof(*sp));
+	sp->IC_memory = 1;
+	sp->irq = irq;
+	sp->mem_base = mem_base;
+	sp->socket.features =
+	    SS_CAP_PCCARD | SS_CAP_STATIC_MAP | SS_CAP_PAGE_REGS;
+	sp->socket.resource_ops = &pccard_static_ops;
+	sp->socket.map_size = HD64461_PCC_WINDOW;	/* 16MB fixed window size */
+	sp->socket.pci_irq = io_irq;
+	sp->socket.io_offset = io_offset;
+	sp->socket.owner = THIS_MODULE;
+	sp->socket.ops = &hd64461_operations;
+
+	for (i = 0; i != MAX_WIN; i++)
+		sp->mem_maps[i].map = i;
+
+	if ((err =
+	     request_irq(irq, hd64461_interrupt, irq_flags, MODNAME, sp)) < 0) {
+		printk(KERN_ERR
+		       "HD64461 PCMCIA socket %d: can't request irq %d\n", sock,
+		       sp->irq);
+		return err;
+	}
+
+	if (sock == 0) {
+		irq_desc[io_irq].handler = &hd64461_ss_irq_type;
+		hd64461_register_irq_demux(sp->irq, hd64461_pcmcia_irq_demux,
+					   sp);
+	}
+
+	gcr = ctrl_inb(gcr_reg);
+	gcr |= HD64461_PCCGCR_PMMOD;	/* 16MB mapping mode */
+	gcr &= ~(HD64461_PCCGCR_PA25 | HD64461_PCCGCR_PA24);	/* lowest 16MB of Common */
+	ctrl_outb(gcr, gcr_reg);
+
+	return 0;
+}
+
+void hd64461_exit_socket(int sock)
+{
+	hd64461_socket_t *sp = &hd64461_sockets[sock];
+	unsigned cscier_reg = HD64461_PCC(sock, CSCIER);
+
+	ctrl_outb(0, cscier_reg);
+	hd64461_suspend(&sp->socket);
+
+	if (sp->irq) {
+		if (sock == 0)
+			hd64461_unregister_irq_demux(sp->irq);
+		free_irq(sp->irq, sp);
+		if (sock == 0)
+			irq_desc[sp->socket.pci_irq].handler = &no_irq_type;
+	}
+}
+
+static int __devexit hd64461_pcmcia_drv_remove(struct platform_device *dev)
+{
+	int i;
+
+	for (i = 0; i != CONFIG_HD64461_PCMCIA_SOCKETS; i++) {
+		pcmcia_unregister_socket(&hd64461_sockets[i].socket);
+		hd64461_exit_socket(i);
+	}
+	
+	return 0;
+}
+
+#ifdef CONFIG_PM
+static int hd64461_pcmcia_drv_suspend(struct platform_device *dev, pm_message_t state)
+{
+	int ret = 0;
+	int i;
+	
+	for (i = 0; i != CONFIG_HD64461_PCMCIA_SOCKETS; i++) {
+		u32 cscier_reg = HD64461_PCC(i, CSCIER);
+		hd64461_sockets[i].cscier = ctrl_inb(cscier_reg);
+		ctrl_outb(0, cscier_reg);
+		ret = pcmcia_socket_dev_suspend(&dev->dev, state);
+	}
+ 	return ret;
+ }
+ 
+static int hd64461_pcmcia_drv_resume(struct platform_device *dev)
+{
+	int ret = 0;
+	int i;
+	
+	for (i = 0; i != CONFIG_HD64461_PCMCIA_SOCKETS; i++) {
+		u32 cscier_reg = HD64461_PCC(i, CSCIER);
+		ctrl_outb(hd64461_sockets[i].cscier, cscier_reg);
+		ret = pcmcia_socket_dev_resume(&dev->dev);
+	}
+ 	
+	return ret;
+}
+#endif
+
+static struct platform_driver hd64461_pcmcia_driver = {
+	.remove = __devexit_p(hd64461_pcmcia_drv_remove),
+#ifdef CONFIG_PM
+	.suspend = hd64461_pcmcia_drv_suspend,
+	.resume = hd64461_pcmcia_drv_resume,
+#endif
+	.driver		= {
+		.name	= "hd64461-pcmcia",
+	},
+};
+
+static struct platform_device *hd64461_pcmcia_device;
+
+static int __init init_hd64461_ss(void)
+{
+	int i;
+
+	printk(KERN_INFO "HD64461 PCMCIA bridge.\n");
+	if (platform_driver_register(&hd64461_pcmcia_driver))
+		return -EINVAL;
+
+	i = hd64461_init_socket(0, HD64461_IRQ_PCC0, HD64461_IRQ_PCC0 + 1,
+				HD64461_PCC0_BASE, 0xf000);
+	if (i < 0) {
+		platform_driver_unregister(&hd64461_pcmcia_driver);
+		return i;
+	}
+#if CONFIG_HD64461_PCMCIA_SOCKETS==2
+	i = hd64461_init_socket(1, HD64461_IRQ_PCC1, HD64461_IRQ_PCC1,
+				HD64461_PCC1_BASE, 0);
+	if (i < 0) {
+		platform_driver_unregister(&hd64461_pcmcia_driver);
+		return i;
+	}
+#endif
+
+	hd64461_pcmcia_device = platform_device_register_simple("hd64461-pcmcia", -1, NULL, 0);
+	if (IS_ERR(hd64461_pcmcia_device)) {
+		platform_driver_unregister(&hd64461_pcmcia_driver);
+		return PTR_ERR(hd64461_pcmcia_device);
+	}
+
+	for (i = 0; i != CONFIG_HD64461_PCMCIA_SOCKETS; i++) {
+		unsigned int ret;
+		hd64461_sockets[i].socket.dev.dev = &hd64461_pcmcia_device->dev;
+		ret = pcmcia_register_socket(&hd64461_sockets[i].socket);
+		if (ret && i)
+			pcmcia_unregister_socket(&hd64461_sockets[0].socket);
+	}
+
+	return 0;
+}
+
+static void __exit exit_hd64461_ss(void)
+{
+	platform_device_unregister(hd64461_pcmcia_device);
+	platform_driver_unregister(&hd64461_pcmcia_driver);
+}
+
+module_init(init_hd64461_ss);
+module_exit(exit_hd64461_ss);
+
+MODULE_AUTHOR("Andriy Skulysh <askulysh@gmail.com>");
+MODULE_DESCRIPTION("PCMCIA driver for Hitachi HD64461 companion chip");
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/yenta_socket.c linux-2.6.17/drivers/pcmcia/yenta_socket.c
--- linux-2.6.17-vanilla/drivers/pcmcia/yenta_socket.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/pcmcia/yenta_socket.c	2006-07-12 16:54:24.000000000 +0000
@@ -49,6 +49,15 @@
 #define to_cycles(ns)	((ns)/120)
 #define to_ns(cycles)	((cycles)*120)
 
+#if defined(CONFIG_SH_HS7751RVOIP) || defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R7780RP)
+#define PCI_CB_SYSTEM_CONTROL	0x80	/* System Control Register */
+#define PCI_CB_MULTIFUNCTION	0x8c	/* Multifunction Routing Register */
+#define PCI_CB_RETRY_STATUS	0x90	/* Retry Status Register */
+#define PCI_CB_CARD_CONTROL	0x91	/* Card Control Register */
+#define PCI_CB_DEVICE_CONTROL	0x92	/* Device Control Register */
+#define PCI_CB_DIAGNOSTIC	0x93	/* Diagnostic Register */
+#endif
+
 /**
  * yenta PCI irq probing.
  * currently only used in the TI/EnE initialization code
@@ -511,7 +520,12 @@
 {
 	struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
 
+#if defined(CONFIG_SH_HS7751RVOIP) || defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R7780RP)
+	exca_writeb(socket, I365_GBLCTL, I365_GBL_CSC_LEV | I365_GBL_IRQ_0_LEV);
+	exca_writeb(socket, I365_INTCTL, I365_INTR_ENA);
+#else
 	exca_writeb(socket, I365_GBLCTL, 0x00);
+#endif
 	exca_writeb(socket, I365_GENCTL, 0x00);
 
 	/* Redo card voltage interrogation */
@@ -996,6 +1010,38 @@
 	bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN);
 	bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN;
 	config_writew(socket, CB_BRIDGE_CONTROL, bridge);
+#if defined(CONFIG_SH_HS7751RVOIP) || defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R7780RP)
+	/* System Contro Register
+	 *	SER_STEP=00, INTRTIE=1, RSVD=0, P2CCLK=1,
+	 *	SMIROUTE=0, SMISTATUS=0, SMIENB=0, RSVD=0,
+	 *	CBRSVD=0, VCCPROT=0, REDUCEZV=0, RSVD=0100,
+	 *	MRBURSTD=1, MRBURSTU=1, SOCACTIV=0, RSVD=1,
+	 *	PWRSTREAM=0, DELAYUP=0, DELAYCOWN=0, INTERROGATE=0,
+	 *	RSVD=0, PWRSAVINGS=1, SUBSYSRW=1, CB_DPAR=0,
+	 *	RSVD=0, EXCAPOWER=0, KEEPCLK=0, RIMUX=0
+	 */
+	config_writel(socket, PCI_CB_SYSTEM_CONTROL, 0x28449060);
+	/* Retry Status Register
+	 *	PCIRETRY=0, CBRETRY=0, TEXP_CBB=0, RSVD=0,
+	 *	TEXP_CBA=0, RSVD=0, TEXP_PCI=0, RSVD=0
+	 */
+	config_writeb(socket, PCI_CB_RETRY_STATUS, 0x00);
+	/* Device Control Register
+	 *	SKTPWR_LOCK=0, 3VCAPABLE=1, IO16V2=1, RSVD=0,
+	 *	TEST=0, INTMODE=01, RSVD=0
+	 */
+	config_writeb(socket, PCI_CB_DEVICE_CONTROL, 0x62);
+	/* Siagnostic Register
+	 *	TRUE_VAL=0, RSVD=1, CSC=0, DIAG4=0,
+	 *	DIAG3=0, DIAG2=0, DIAG1=0, STDZVEN=0
+	 */
+	config_writeb(socket, PCI_CB_DIAGNOSTIC, 0x40);
+	/* Multifucntion Routing Register
+	 *	RSVD=0000, MFUNC6=0000, MFUNC5=0000, MFUNC4=0000,
+	 *	MFUNC3=0001, MFUNC2=0000, MFUNC1=0000, MFUNC0=0010
+	 */
+	config_writel(socket, PCI_CB_MULTIFUNCTION, 0x00001002);
+#endif
 }
 
 /*
diff -ruN linux-2.6.17-vanilla/drivers/rtc/CVS/Entries linux-2.6.17/drivers/rtc/CVS/Entries
--- linux-2.6.17-vanilla/drivers/rtc/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/rtc/CVS/Entries	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,4 @@
+/Kconfig/1.1/Tue Jul 11 07:54:45 2006/-ko/
+/Makefile/1.1/Tue Jul 11 07:54:45 2006/-ko/
+/rtc-sh.c/1.1/Tue Jul 11 07:54:45 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/rtc/CVS/Repository linux-2.6.17/drivers/rtc/CVS/Repository
--- linux-2.6.17-vanilla/drivers/rtc/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/rtc/CVS/Repository	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/rtc
diff -ruN linux-2.6.17-vanilla/drivers/rtc/CVS/Root linux-2.6.17/drivers/rtc/CVS/Root
--- linux-2.6.17-vanilla/drivers/rtc/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/rtc/CVS/Root	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/rtc/Kconfig linux-2.6.17/drivers/rtc/Kconfig
--- linux-2.6.17-vanilla/drivers/rtc/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/rtc/Kconfig	2006-07-12 16:54:25.000000000 +0000
@@ -147,6 +147,16 @@
 	  To compile this driver as a module, choose M here: the
 	  module will be called rtc-sa1100.
 
+config RTC_DRV_SH
+	tristate "SuperH On-Chip RTC"
+	depends on RTC_CLASS && SUPERH
+	help
+	  Say Y here to enable support for the on-chip RTC found in
+	  most SuperH processors.
+
+ 	  To compile this driver as a module, choose M here: the
+	  module will be called rtc-sh.
+
 config RTC_DRV_VR41XX
 	tristate "NEC VR41XX"
 	depends on RTC_CLASS && CPU_VR41XX
diff -ruN linux-2.6.17-vanilla/drivers/rtc/Makefile linux-2.6.17/drivers/rtc/Makefile
--- linux-2.6.17-vanilla/drivers/rtc/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/rtc/Makefile	2006-07-12 16:54:25.000000000 +0000
@@ -20,3 +20,4 @@
 obj-$(CONFIG_RTC_DRV_EP93XX)	+= rtc-ep93xx.o
 obj-$(CONFIG_RTC_DRV_SA1100)	+= rtc-sa1100.o
 obj-$(CONFIG_RTC_DRV_VR41XX)	+= rtc-vr41xx.o
+obj-$(CONFIG_RTC_DRV_SH)	+= rtc-sh.o
diff -ruN linux-2.6.17-vanilla/drivers/rtc/rtc-sh.c linux-2.6.17/drivers/rtc/rtc-sh.c
--- linux-2.6.17-vanilla/drivers/rtc/rtc-sh.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/rtc/rtc-sh.c	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,467 @@
+/*
+ * SuperH On-Chip RTC Support
+ *
+ * Copyright (C) 2006  Paul Mundt
+ *
+ * Based on the old arch/sh/kernel/cpu/rtc.c by:
+ *
+ *  Copyright (C) 2000  Philipp Rumpf <prumpf@tux.org>
+ *  Copyright (C) 1999  Tetsuya Okada & Niibe Yutaka
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/bcd.h>
+#include <linux/rtc.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/seq_file.h>
+#include <linux/interrupt.h>
+#include <linux/spinlock.h>
+#include <asm/io.h>
+
+#ifdef CONFIG_CPU_SH3
+#define rtc_reg_size		sizeof(u16)
+#define RTC_BIT_INVERTED	0	/* No bug on SH7708, SH7709A */
+#elif defined(CONFIG_CPU_SH4)
+#define rtc_reg_size		sizeof(u32)
+#define RTC_BIT_INVERTED	0x40	/* bug on SH7750, SH7750S */
+#endif
+
+#define RTC_REG(r)	((r) * rtc_reg_size)
+
+#define R64CNT  	RTC_REG(0)
+#define RSECCNT 	RTC_REG(1)
+#define RMINCNT 	RTC_REG(2)
+#define RHRCNT  	RTC_REG(3)
+#define RWKCNT  	RTC_REG(4)
+#define RDAYCNT 	RTC_REG(5)
+#define RMONCNT 	RTC_REG(6)
+#define RYRCNT  	RTC_REG(7)
+#define RSECAR  	RTC_REG(8)
+#define RMINAR  	RTC_REG(9)
+#define RHRAR   	RTC_REG(10)
+#define RWKAR   	RTC_REG(11)
+#define RDAYAR  	RTC_REG(12)
+#define RMONAR  	RTC_REG(13)
+#define RCR1    	RTC_REG(14)
+#define RCR2    	RTC_REG(15)
+
+/* RCR1 Bits */
+#define RCR1_CF		0x80	/* Carry Flag             */
+#define RCR1_CIE	0x10	/* Carry Interrupt Enable */
+#define RCR1_AIE	0x08	/* Alarm Interrupt Enable */
+#define RCR1_AF		0x01	/* Alarm Flag             */
+
+/* RCR2 Bits */
+#define RCR2_PEF	0x80	/* PEriodic interrupt Flag */
+#define RCR2_PESMASK	0x70	/* Periodic interrupt Set  */
+#define RCR2_RTCEN	0x08	/* ENable RTC              */
+#define RCR2_ADJ	0x04	/* ADJustment (30-second)  */
+#define RCR2_RESET	0x02	/* Reset bit               */
+#define RCR2_START	0x01	/* Start bit               */
+
+struct sh_rtc {
+	void __iomem *regbase;
+	unsigned long regsize;
+	struct resource *res;
+	unsigned int alarm_irq, periodic_irq, carry_irq;
+	struct rtc_device *rtc_dev;
+	spinlock_t lock;
+};
+
+static irqreturn_t sh_rtc_interrupt(int irq, void *id, struct pt_regs *regs)
+{
+	struct platform_device *pdev = id;
+	struct sh_rtc *rtc = platform_get_drvdata(pdev);
+	unsigned int tmp, events = 0;
+
+	spin_lock(&rtc->lock);
+
+	tmp = readb(rtc->regbase + RCR1);
+
+	if (tmp & RCR1_AF)
+		events |= RTC_AF | RTC_IRQF;
+
+	tmp &= ~(RCR1_CF | RCR1_AF);
+
+	writeb(tmp, rtc->regbase + RCR1);
+	
+	rtc_update_irq(&rtc->rtc_dev->class_dev, 1, events);
+
+	spin_unlock(&rtc->lock);
+
+	return IRQ_HANDLED;
+}
+
+static irqreturn_t sh_rtc_periodic(int irq, void *id, struct pt_regs *regs)
+{
+	struct sh_rtc *rtc = dev_get_drvdata(id);
+
+	spin_lock(&rtc->lock);
+
+	rtc_update_irq(&rtc->rtc_dev->class_dev, 1, RTC_PF | RTC_IRQF);
+
+	spin_unlock(&rtc->lock);
+
+	return IRQ_HANDLED;
+}
+
+static inline void sh_rtc_setpie(struct device *dev, unsigned int enable)
+{
+	struct sh_rtc *rtc = dev_get_drvdata(dev);
+	unsigned int tmp;
+
+	spin_lock_irq(&rtc->lock);
+
+	tmp = readb(rtc->regbase + RCR2);
+
+	if (enable) {
+		tmp &= ~RCR2_PESMASK;
+		tmp |= RCR2_PEF | (2 << 4);
+	} else
+		tmp &= ~(RCR2_PESMASK | RCR2_PEF);
+
+	writeb(tmp, rtc->regbase + RCR2);
+
+	spin_unlock_irq(&rtc->lock);
+}
+
+static inline void sh_rtc_setaie(struct device *dev, unsigned int enable)
+{
+	struct sh_rtc *rtc = dev_get_drvdata(dev);
+	unsigned int tmp;
+
+	spin_lock_irq(&rtc->lock);
+
+	tmp = readb(rtc->regbase + RCR1);
+
+	if (enable)
+		tmp |= RCR1_AIE;
+	else
+		tmp &= ~RCR1_AIE;
+
+	writeb(tmp, rtc->regbase + RCR1);
+
+	spin_unlock_irq(&rtc->lock);
+}
+
+static int sh_rtc_open(struct device *dev)
+{
+	struct sh_rtc *rtc = dev_get_drvdata(dev);
+	unsigned int tmp;
+	int ret;
+
+	tmp = readb(rtc->regbase + RCR1);
+	tmp &= ~RCR1_CF;
+	tmp |= RCR1_CIE;
+	writeb(tmp, rtc->regbase + RCR1);
+
+	ret = request_irq(rtc->periodic_irq, sh_rtc_periodic, SA_INTERRUPT,
+			  "sh-rtc period", dev);
+	if (unlikely(ret)) {
+		dev_err(dev, "request period IRQ failed with %d, IRQ %d\n",
+			ret, rtc->periodic_irq);
+		return ret;
+	}
+
+	ret = request_irq(rtc->carry_irq, sh_rtc_interrupt, SA_INTERRUPT,
+			  "sh-rtc carry", dev);
+	if (unlikely(ret)) {
+		dev_err(dev, "request carry IRQ failed with %d, IRQ %d\n",
+			ret, rtc->carry_irq);
+		free_irq(rtc->periodic_irq, dev);
+		goto err_bad_carry;
+	}
+
+	ret = request_irq(rtc->alarm_irq, sh_rtc_interrupt, SA_INTERRUPT,
+			  "sh-rtc alarm", dev);
+	if (unlikely(ret)) {
+		dev_err(dev, "request alarm IRQ failed with %d, IRQ %d\n",
+			ret, rtc->alarm_irq);
+		goto err_bad_alarm;
+	}
+	
+	return 0;
+
+err_bad_alarm:
+	free_irq(rtc->carry_irq, dev);
+err_bad_carry:
+	free_irq(rtc->periodic_irq, dev);
+
+	return ret;
+}
+
+static void sh_rtc_release(struct device *dev)
+{
+	struct sh_rtc *rtc = dev_get_drvdata(dev);
+
+	sh_rtc_setpie(dev, 0);
+
+	free_irq(rtc->periodic_irq, dev);
+	free_irq(rtc->carry_irq, dev);
+	free_irq(rtc->alarm_irq, dev);
+}
+
+static int sh_rtc_proc(struct device *dev, struct seq_file *seq)
+{
+	struct sh_rtc *rtc = dev_get_drvdata(dev);
+	unsigned int tmp;
+
+	tmp = readb(rtc->regbase + RCR1);
+	seq_printf(seq, "alarm_IRQ\t: %s\n",
+		   (tmp & RCR1_AIE) ? "yes" : "no");
+	seq_printf(seq, "carry_IRQ\t: %s\n",
+		   (tmp & RCR1_CIE) ? "yes" : "no");
+
+	tmp = readb(rtc->regbase + RCR2);
+	seq_printf(seq, "periodic_IRQ\t: %s\n",
+		   (tmp & RCR2_PEF) ? "yes" : "no");
+
+	return 0;
+}
+
+static int sh_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg)
+{
+	unsigned int ret = -ENOIOCTLCMD;
+
+	switch (cmd) {
+	case RTC_PIE_OFF:
+	case RTC_PIE_ON:
+		sh_rtc_setpie(dev, cmd == RTC_PIE_ON);
+		ret = 0;
+		break;
+	case RTC_AIE_OFF:
+	case RTC_AIE_ON:
+		sh_rtc_setaie(dev, cmd == RTC_AIE_ON);
+		ret = 0;
+		break;
+	}
+
+	return ret;
+}
+
+static int sh_rtc_read_time(struct device *dev, struct rtc_time *tm)
+{
+	struct platform_device *pdev = to_platform_device(dev);
+	struct sh_rtc *rtc = platform_get_drvdata(pdev);
+	unsigned int sec128, sec2, yr, yr100, cf_bit;
+
+	do {
+		unsigned int tmp;
+
+		spin_lock_irq(&rtc->lock);
+
+		tmp = readb(rtc->regbase + RCR1);
+		tmp &= ~RCR1_CF; /* Clear CF-bit */
+		tmp |= RCR1_CIE;
+		writeb(tmp, rtc->regbase + RCR1);
+
+		sec128 = readb(rtc->regbase + R64CNT);
+
+		tm->tm_sec	= BCD2BIN(readb(rtc->regbase + RSECCNT));
+		tm->tm_min	= BCD2BIN(readb(rtc->regbase + RMINCNT));
+		tm->tm_hour	= BCD2BIN(readb(rtc->regbase + RHRCNT));
+		tm->tm_wday	= BCD2BIN(readb(rtc->regbase + RWKCNT));
+		tm->tm_mday	= BCD2BIN(readb(rtc->regbase + RDAYCNT));
+		tm->tm_mon	= BCD2BIN(readb(rtc->regbase + RMONCNT));
+
+#if defined(CONFIG_CPU_SH4)
+		yr  = readw(rtc->regbase + RYRCNT);
+		yr100 = BCD2BIN(yr >> 8);
+		yr &= 0xff;
+#else
+		yr  = readb(rtc->regbase + RYRCNT);
+		yr100 = BCD2BIN((yr == 0x99) ? 0x19 : 0x20);
+#endif
+
+		tm->tm_year = (yr100 * 100 + BCD2BIN(yr)) - 1900;
+
+		sec2 = readb(rtc->regbase + R64CNT);
+		cf_bit = readb(rtc->regbase + RCR1) & RCR1_CF;
+
+		spin_unlock_irq(&rtc->lock);
+	} while (cf_bit != 0 || ((sec128 ^ sec2) & RTC_BIT_INVERTED) != 0);
+
+#if RTC_BIT_INVERTED != 0
+	if ((sec128 & RTC_BIT_INVERTED))
+		tm->tm_sec--;
+#endif
+
+	dev_dbg(&dev, "%s: tm is secs=%d, mins=%d, hours=%d, "
+		"mday=%d, mon=%d, year=%d, wday=%d\n",
+		__FUNCTION__,
+		tm->tm_sec, tm->tm_min, tm->tm_hour,
+		tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday);
+
+	if (rtc_valid_tm(tm) < 0)
+		dev_err(dev, "invalid date\n");
+
+	return 0;
+}
+
+static int sh_rtc_set_time(struct device *dev, struct rtc_time *tm)
+{
+	struct platform_device *pdev = to_platform_device(dev);
+	struct sh_rtc *rtc = platform_get_drvdata(pdev);
+	unsigned int tmp;
+	int year;
+
+	spin_lock_irq(&rtc->lock);
+
+	/* Reset pre-scaler & stop RTC */
+	tmp = readb(rtc->regbase + RCR2);
+	tmp |= RCR2_RESET;
+	writeb(tmp, rtc->regbase + RCR2);
+
+	writeb(BIN2BCD(tm->tm_sec),  rtc->regbase + RSECCNT);
+	writeb(BIN2BCD(tm->tm_min),  rtc->regbase + RMINCNT);
+	writeb(BIN2BCD(tm->tm_hour), rtc->regbase + RHRCNT);
+	writeb(BIN2BCD(tm->tm_wday), rtc->regbase + RWKCNT);
+	writeb(BIN2BCD(tm->tm_mday), rtc->regbase + RDAYCNT);
+	writeb(BIN2BCD(tm->tm_mon),  rtc->regbase + RMONCNT);
+
+#ifdef CONFIG_CPU_SH3
+	year = tm->tm_year % 100;
+	writeb(BIN2BCD(year), rtc->regbase + RYRCNT);
+#else
+	year = (BIN2BCD((tm->tm_year + 1900) / 100) << 8) |
+		BIN2BCD(tm->tm_year % 100);
+	writew(year, rtc->regbase + RYRCNT);
+#endif
+
+	/* Start RTC */
+	tmp = readb(rtc->regbase + RCR2);
+	tmp &= ~RCR2_RESET;
+	tmp |= RCR2_RTCEN | RCR2_START;
+	writeb(tmp, rtc->regbase + RCR2);
+
+	spin_unlock_irq(&rtc->lock);
+
+	return 0;
+}
+
+static struct rtc_class_ops sh_rtc_ops = {
+	.open		= sh_rtc_open,
+	.release	= sh_rtc_release,
+	.ioctl		= sh_rtc_ioctl,
+	.read_time	= sh_rtc_read_time,
+	.set_time	= sh_rtc_set_time,
+	.proc		= sh_rtc_proc,
+};
+
+static int __devinit sh_rtc_probe(struct platform_device *pdev)
+{
+	struct sh_rtc *rtc;
+	struct resource *res;
+	int ret = -ENOENT;
+
+	rtc = kzalloc(sizeof(struct sh_rtc), GFP_KERNEL);
+	if (unlikely(!rtc))
+		return -ENOMEM;
+
+	spin_lock_init(&rtc->lock);
+
+	rtc->periodic_irq = platform_get_irq(pdev, 0);
+	if (unlikely(rtc->periodic_irq < 0)) {
+		dev_err(&pdev->dev, "No IRQ for period\n");
+		goto err_badres;
+	}
+
+	rtc->carry_irq = platform_get_irq(pdev, 1);
+	if (unlikely(rtc->carry_irq < 0)) {
+		dev_err(&pdev->dev, "No IRQ for carry\n");
+		goto err_badres;
+	}
+
+	rtc->alarm_irq = platform_get_irq(pdev, 2);
+	if (unlikely(rtc->alarm_irq < 0)) {
+		dev_err(&pdev->dev, "No IRQ for alarm\n");
+		goto err_badres;
+	}
+
+	res = platform_get_resource(pdev, IORESOURCE_IO, 0);
+	if (unlikely(res == NULL)) {
+		dev_err(&pdev->dev, "No IO resource\n");
+		goto err_badres;
+	}
+
+	rtc->regsize = res->end - res->start + 1;
+
+	rtc->res = request_mem_region(res->start, rtc->regsize, pdev->name);
+	if (unlikely(!rtc->res)) {
+		ret = -EBUSY;
+		goto err_badres;
+	}
+
+	rtc->regbase = (void __iomem *)rtc->res->start;
+	if (unlikely(!rtc->regbase)) {
+		ret = -EINVAL;
+		goto err_badmap;
+	}
+
+	rtc->rtc_dev = rtc_device_register("sh", &pdev->dev,
+					   &sh_rtc_ops, THIS_MODULE);
+	if (IS_ERR(rtc)) {
+		ret = PTR_ERR(rtc->rtc_dev);
+		goto err_badmap;
+	}
+
+	platform_set_drvdata(pdev, rtc);
+
+	return 0;
+
+err_badmap:
+	release_resource(rtc->res);
+err_badres:
+	kfree(rtc);
+
+	return ret;
+}
+
+static int __devexit sh_rtc_remove(struct platform_device *pdev)
+{
+	struct sh_rtc *rtc = platform_get_drvdata(pdev);
+	
+	if (likely(rtc->rtc_dev))
+		rtc_device_unregister(rtc->rtc_dev);
+
+	sh_rtc_setpie(&pdev->dev, 0);
+	sh_rtc_setaie(&pdev->dev, 0);
+
+	release_resource(rtc->res);
+
+	platform_set_drvdata(pdev, NULL);
+
+	kfree(rtc);
+
+	return 0;
+}
+static struct platform_driver sh_rtc_platform_driver = {
+	.driver		= {
+		.name	= "sh-rtc",
+		.owner	= THIS_MODULE,
+	},
+	.probe		= sh_rtc_probe,
+	.remove		= __devexit_p(sh_rtc_remove),
+};
+
+static int __init sh_rtc_init(void)
+{
+	return platform_driver_register(&sh_rtc_platform_driver);
+}
+
+static void __exit sh_rtc_exit(void)
+{
+	platform_driver_unregister(&sh_rtc_platform_driver);
+}
+
+module_init(sh_rtc_init);
+module_exit(sh_rtc_exit);
+
+MODULE_DESCRIPTION("SuperH on-chip RTC driver");
+MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>");
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/drivers/serial/8250.c linux-2.6.17/drivers/serial/8250.c
--- linux-2.6.17-vanilla/drivers/serial/8250.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/serial/8250.c	2006-07-12 16:54:24.000000000 +0000
@@ -193,6 +193,9 @@
 		.fifo_size	= 32,
 		.tx_loadsz	= 16,
 		.fcr		= UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 |
+#ifdef CONFIG_SH_RTS7751R2D
+				  UART_FCR_TRIGGER_14 |
+#endif
 				  UART_FCR_T_TRIG_00,
 		.flags		= UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP,
 	},
@@ -440,8 +443,13 @@
 {
 	if (p->capabilities & UART_CAP_SLEEP) {
 		if (p->capabilities & UART_CAP_EFR) {
+			int efr = UART_EFR_ECB;
+
 			serial_outp(p, UART_LCR, 0xBF);
-			serial_outp(p, UART_EFR, UART_EFR_ECB);
+#ifdef CONFIG_SH_RTS7751R2D
+			efr |= UART_EFR_CTS | UART_EFR_RTS;
+#endif
+			serial_outp(p, UART_EFR, efr);
 			serial_outp(p, UART_LCR, 0);
 		}
 		serial_outp(p, UART_IER, sleep ? UART_IERX_SLEEP : 0);
@@ -672,10 +680,16 @@
 	 * since that's the technique that was sent to me in the
 	 * serial driver update, but I'm not convinced this works.
 	 * I've had problems doing this in the past.  -TYT
+	 *
+	 * No, this won't work for everyone. At least in the RTS7751R2D
+	 * case we have a '650 with a 64 byte FIFO, so this ends up breaking
+	 * there.  -PFM
 	 */
+#ifndef CONFIG_SH_RTS7751R2D
 	if (size_fifo(up) == 64)
 		up->port.type = PORT_16654;
 	else
+#endif
 		up->port.type = PORT_16650V2;
 }
 
diff -ruN linux-2.6.17-vanilla/drivers/serial/CVS/Entries linux-2.6.17/drivers/serial/CVS/Entries
--- linux-2.6.17-vanilla/drivers/serial/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/serial/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,4 @@
+/sh-sci.c/1.43/Mon Mar 27 21:06:14 2006/-ko/
+/sh-sci.h/1.21/Wed Feb  8 12:24:41 2006/-ko/
+/8250.c/1.14/Wed Jul  5 14:51:22 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/serial/CVS/Repository linux-2.6.17/drivers/serial/CVS/Repository
--- linux-2.6.17-vanilla/drivers/serial/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/serial/CVS/Repository	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/serial
diff -ruN linux-2.6.17-vanilla/drivers/serial/CVS/Root linux-2.6.17/drivers/serial/CVS/Root
--- linux-2.6.17-vanilla/drivers/serial/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/serial/CVS/Root	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/serial/sh-sci.c linux-2.6.17/drivers/serial/sh-sci.c
--- linux-2.6.17-vanilla/drivers/serial/sh-sci.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/serial/sh-sci.c	2006-07-12 16:54:24.000000000 +0000
@@ -3,7 +3,7 @@
  *
  * SuperH on-chip serial module support.  (SCI with no FIFO / with FIFO)
  *
- *  Copyright (C) 2002, 2003, 2004  Paul Mundt
+ *  Copyright (C) 2002 - 2006  Paul Mundt
  *
  * based off of the old drivers/char/sh-sci.c by:
  *
@@ -56,10 +56,8 @@
 
 #if defined(CONFIG_SUPERH) && !defined(CONFIG_SUPERH64)
 #include <asm/clock.h>
-#endif
-
-#ifdef CONFIG_SH_STANDARD_BIOS
 #include <asm/sh_bios.h>
+#include <asm/kgdb.h>
 #endif
 
 #if defined(CONFIG_SERIAL_SH_SCI_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ)
@@ -69,25 +67,15 @@
 #include "sh-sci.h"
 
 #ifdef CONFIG_SH_KGDB
-#include <asm/kgdb.h>
-
-static int kgdb_get_char(struct sci_port *port);
-static void kgdb_put_char(struct sci_port *port, char c);
-static void kgdb_handle_error(struct sci_port *port);
 static struct sci_port *kgdb_sci_port;
-#endif /* CONFIG_SH_KGDB */
+#endif
 
 #ifdef CONFIG_SERIAL_SH_SCI_CONSOLE
-static struct sci_port *serial_console_port = 0;
-#endif /* CONFIG_SERIAL_SH_SCI_CONSOLE */
+static struct sci_port *serial_console_port;
+#endif
 
 /* Function prototypes */
 static void sci_stop_tx(struct uart_port *port);
-static void sci_start_tx(struct uart_port *port);
-static void sci_start_rx(struct uart_port *port, unsigned int tty_start);
-static void sci_stop_rx(struct uart_port *port);
-static int sci_request_irq(struct sci_port *port);
-static void sci_free_irq(struct sci_port *port);
 
 static struct sci_port sci_ports[];
 static struct uart_driver sci_uart_driver;
@@ -95,9 +83,9 @@
 #define SCI_NPORTS sci_uart_driver.nr
 
 #if defined(CONFIG_SH_STANDARD_BIOS) || defined(CONFIG_SH_KGDB)
-
-static void handle_error(struct uart_port *port)
-{				/* Clear error flags */
+static inline void handle_error(struct uart_port *port)
+{
+	/* Clear error flags */
 	sci_out(port, SCxSR, SCxSR_ERROR_CLEAR(port));
 }
 
@@ -122,28 +110,9 @@
 
 	return c;
 }
-
-/* Taken from sh-stub.c of GDB 4.18 */
-static const char hexchars[] = "0123456789abcdef";
-
-static __inline__ char highhex(int  x)
-{
-	return hexchars[(x >> 4) & 0xf];
-}
-
-static __inline__ char lowhex(int  x)
-{
-	return hexchars[x & 0xf];
-}
-
 #endif /* CONFIG_SH_STANDARD_BIOS || CONFIG_SH_KGDB */
 
-/*
- * Send the packet in buffer.  The host gets one chance to read it.
- * This routine does not wait for a positive acknowledge.
- */
-
-#ifdef CONFIG_SERIAL_SH_SCI_CONSOLE
+#if defined(CONFIG_SERIAL_SH_SCI_CONSOLE) || defined(CONFIG_SH_KGDB)
 static void put_char(struct uart_port *port, char c)
 {
 	unsigned long flags;
@@ -161,7 +130,9 @@
 
 	local_irq_restore(flags);
 }
+#endif
 
+#ifdef CONFIG_SERIAL_SH_SCI_CONSOLE
 static void put_string(struct sci_port *sci_port, const char *buffer, int count)
 {
 	struct uart_port *port = &sci_port->port;
@@ -214,96 +185,28 @@
 }
 #endif /* CONFIG_SERIAL_SH_SCI_CONSOLE */
 
-
 #ifdef CONFIG_SH_KGDB
-
-/* Is the SCI ready, ie is there a char waiting? */
-static int kgdb_is_char_ready(struct sci_port *port)
-{
-        unsigned short status = sci_in(port, SCxSR);
-
-        if (status & (SCxSR_ERRORS(port) | SCxSR_BRK(port)))
-                kgdb_handle_error(port);
-
-        return (status & SCxSR_RDxF(port));
-}
-
-/* Write a char */
-static void kgdb_put_char(struct sci_port *port, char c)
-{
-        unsigned short status;
-
-        do
-                status = sci_in(port, SCxSR);
-        while (!(status & SCxSR_TDxE(port)));
-
-        sci_out(port, SCxTDR, c);
-        sci_in(port, SCxSR);    /* Dummy read */
-        sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port));
-}
-
-/* Get a char if there is one, else ret -1 */
-static int kgdb_get_char(struct sci_port *port)
-{
-        int c;
-
-        if (kgdb_is_char_ready(port) == 0)
-                c = -1;
-        else {
-                c = sci_in(port, SCxRDR);
-                sci_in(port, SCxSR);    /* Dummy read */
-                sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port));
-        }
-
-        return c;
-}
-
-/* Called from kgdbstub.c to get a character, i.e. is blocking */
 static int kgdb_sci_getchar(void)
 {
-        volatile int c;
+        int c;
 
         /* Keep trying to read a character, this could be neater */
-        while ((c = kgdb_get_char(kgdb_sci_port)) < 0);
+        while ((c = get_char(kgdb_sci_port)) < 0)
+		cpu_relax();
 
         return c;
 }
 
-/* Called from kgdbstub.c to put a character, just a wrapper */
-static void kgdb_sci_putchar(int c)
+static inline void kgdb_sci_putchar(int c)
 {
-
-        kgdb_put_char(kgdb_sci_port, c);
+        put_char(kgdb_sci_port, c);
 }
-
-/* Clear any errors on the SCI */
-static void kgdb_handle_error(struct sci_port *port)
-{
-        sci_out(port, SCxSR, SCxSR_ERROR_CLEAR(port));  /* Clear error flags */
-}
-
-/* Breakpoint if there's a break sent on the serial port */
-static void kgdb_break_interrupt(int irq, void *ptr, struct pt_regs *regs)
-{
-        struct sci_port *port = ptr;
-        unsigned short status = sci_in(port, SCxSR);
-
-        if (status & SCxSR_BRK(port)) {
-
-                /* Break into the debugger if a break is detected */
-                BREAKPOINT();
-
-                /* Clear */
-                sci_out(port, SCxSR, SCxSR_BREAK_CLEAR(port));
-        }
-}
-
 #endif /* CONFIG_SH_KGDB */
 
 #if defined(__H8300S__)
 enum { sci_disable, sci_enable };
 
-static void h8300_sci_enable(struct uart_port* port, unsigned int ctrl)
+static void h8300_sci_config(struct uart_port* port, unsigned int ctrl)
 {
 	volatile unsigned char *mstpcrl=(volatile unsigned char *)MSTPCRL;
 	int ch = (port->mapbase  - SMR0) >> 3;
@@ -315,6 +218,16 @@
 		*mstpcrl &= ~mask;
 	}
 }
+
+static inline void h8300_sci_enable(struct uart_port *port)
+{
+	h8300_sci_config(port, sci_enable);
+}
+
+static inline void h8300_sci_disable(struct uart_port *port)
+{
+	h8300_sci_config(port, sci_disable);
+}
 #endif
 
 #if defined(SCI_ONLY) || defined(SCI_AND_SCIF)
@@ -324,8 +237,13 @@
 	int ch = (port->mapbase - SMR0) >> 3;
 
 	/* set DDR regs */
-	H8300_GPIO_DDR(h8300_sci_pins[ch].port,h8300_sci_pins[ch].rx,H8300_GPIO_INPUT);
-	H8300_GPIO_DDR(h8300_sci_pins[ch].port,h8300_sci_pins[ch].tx,H8300_GPIO_OUTPUT);
+	H8300_GPIO_DDR(h8300_sci_pins[ch].port,
+		       h8300_sci_pins[ch].rx,
+		       H8300_GPIO_INPUT);
+	H8300_GPIO_DDR(h8300_sci_pins[ch].port,
+		       h8300_sci_pins[ch].tx,
+		       H8300_GPIO_OUTPUT);
+
 	/* tx mark output*/
 	H8300_SCI_DR(ch) |= h8300_sci_pins[ch].tx;
 }
@@ -380,7 +298,6 @@
 }
 #endif
 #else
-
 /* For SH7750 */
 static void sci_init_pins_scif(struct uart_port *port, unsigned int cflag)
 {
@@ -397,10 +314,41 @@
 	}
 	sci_out(port, SCFCR, fcr_val);
 }
+#endif
+
+#if defined(CONFIG_CPU_SUBTYPE_SH7760) || defined(CONFIG_CPU_SUBTYPE_SH7780)
+static inline int scif_txroom(struct uart_port *port)
+{
+	return SCIF_TXROOM_MAX - (sci_in(port, SCTFDR) & 0x7f);
+}
+
+static inline int scif_rxroom(struct uart_port *port)
+{
+	return sci_in(port, SCRFDR) & 0x7f;
+}
+#else
+static inline int scif_txroom(struct uart_port *port)
+{
+	return SCIF_TXROOM_MAX - (sci_in(port, SCFDR) >> 8);
+}
 
+static inline int scif_rxroom(struct uart_port *port)
+{
+	return sci_in(port, SCFDR) & SCIF_RFDC_MASK;
+}
 #endif
 #endif /* SCIF_ONLY || SCI_AND_SCIF */
 
+static inline int sci_txroom(struct uart_port *port)
+{
+	return ((sci_in(port, SCxSR) & SCI_TDRE) != 0);
+}
+
+static inline int sci_rxroom(struct uart_port *port)
+{
+	return ((sci_in(port, SCxSR) & SCxSR_RDxF(port)) != 0);
+}
+
 /* ********************************************************************** *
  *                   the interrupt related routines                       *
  * ********************************************************************** */
@@ -412,7 +360,7 @@
 	unsigned long flags;
 	unsigned short status;
 	unsigned short ctrl;
-	int count, txroom;
+	int count;
 
 	status = sci_in(port, SCxSR);
 	if (!(status & SCxSR_TDxE(port))) {
@@ -428,21 +376,12 @@
 		return;
 	}
 
-#if !defined(SCI_ONLY)
-	if (port->type == PORT_SCIF) {
-#if defined(CONFIG_CPU_SUBTYPE_SH7760) || defined(CONFIG_CPU_SUBTYPE_SH7780)
-		txroom = SCIF_TXROOM_MAX - (sci_in(port, SCTFDR) & 0x7f);
-#else
-		txroom = SCIF_TXROOM_MAX - (sci_in(port, SCFDR)>>8);
-#endif
-	} else {
-		txroom = (sci_in(port, SCxSR) & SCI_TDRE)?1:0;
-	}
-#else
-	txroom = (sci_in(port, SCxSR) & SCI_TDRE)?1:0;
+#ifndef SCI_ONLY
+	if (port->type == PORT_SCIF)
+		count = scif_txroom(port);
+	else
 #endif
-
-	count = txroom;
+		count = sci_txroom(port);
 
 	do {
 		unsigned char c;
@@ -491,6 +430,7 @@
 static inline void sci_receive_chars(struct uart_port *port,
 				     struct pt_regs *regs)
 {
+	struct sci_port *sci_port = (struct sci_port *)port;
 	struct tty_struct *tty = port->info->tty;
 	int i, count, copied = 0;
 	unsigned short status;
@@ -502,18 +442,11 @@
 
 	while (1) {
 #if !defined(SCI_ONLY)
-		if (port->type == PORT_SCIF) {
-#if defined(CONFIG_CPU_SUBTYPE_SH7760) || defined(CONFIG_CPU_SUBTYPE_SH7780)
-			count = sci_in(port, SCRFDR) & 0x7f;
-#else
-			count = sci_in(port, SCFDR)&SCIF_RFDC_MASK ;
-#endif
-		} else {
-			count = (sci_in(port, SCxSR)&SCxSR_RDxF(port))?1:0;
-		}
-#else
-		count = (sci_in(port, SCxSR)&SCxSR_RDxF(port))?1:0;
+		if (port->type == PORT_SCIF)
+			count = scif_rxroom(port);
+		else
 #endif
+			count = sci_rxroom(port);
 
 		/* Don't copy more bytes than there is room for in the buffer */
 		count = tty_buffer_request_room(tty, count);
@@ -524,11 +457,10 @@
 
 		if (port->type == PORT_SCI) {
 			char c = sci_in(port, SCxRDR);
-                       if(((struct sci_port *)port)->break_flag
-			    || uart_handle_sysrq_char(port, c, regs)) {
+			if (uart_handle_sysrq_char(port, c, regs) || sci_port->break_flag)
 				count = 0;
-			} else {
-			    tty_insert_flip_char(tty, c, TTY_NORMAL);
+			else {
+				tty_insert_flip_char(tty, c, TTY_NORMAL);
 			}
 		} else {
 			for (i=0; i<count; i++) {
@@ -536,15 +468,17 @@
 				status = sci_in(port, SCxSR);
 #if defined(CONFIG_CPU_SH3)
 				/* Skip "chars" during break */
-				if (((struct sci_port *)port)->break_flag) {
+				if (sci_port->break_flag) {
 					if ((c == 0) &&
 					    (status & SCxSR_FER(port))) {
 						count--; i--;
 						continue;
 					}
+
 					/* Nonzero => end-of-break */
 					pr_debug("scif: debounce<%02x>\n", c);
-					((struct sci_port *)port)->break_flag = 0;
+					sci_port->break_flag = 0;
+
 					if (STEPFN(c)) {
 						count--; i--;
 						continue;
@@ -601,15 +535,17 @@
 /* Ensure that two consecutive samples find the break over. */
 static void sci_break_timer(unsigned long data)
 {
-    struct sci_port * port = (struct sci_port *)data;
-	if(sci_rxd_in(&port->port) == 0) {
+	struct sci_port *port = (struct sci_port *)data;
+
+	if (sci_rxd_in(&port->port) == 0) {
 		port->break_flag = 1;
-	    sci_schedule_break_timer(port);
-	} else if(port->break_flag == 1){
+		sci_schedule_break_timer(port);
+	} else if (port->break_flag == 1) {
 		/* break is over. */
 		port->break_flag = 2;
-	    sci_schedule_break_timer(port);
-	} else port->break_flag = 0;
+		sci_schedule_break_timer(port);
+	} else
+		port->break_flag = 0;
 }
 
 static inline int sci_handle_errors(struct uart_port *port)
@@ -618,40 +554,41 @@
 	unsigned short status = sci_in(port, SCxSR);
 	struct tty_struct *tty = port->info->tty;
 
-	if (status&SCxSR_ORER(port)) {
+	if (status & SCxSR_ORER(port)) {
 		/* overrun error */
-		if(tty_insert_flip_char(tty, 0, TTY_OVERRUN))
+		if (tty_insert_flip_char(tty, 0, TTY_OVERRUN))
 			copied++;
 		pr_debug("sci: overrun error\n");
 	}
 
-	if (status&SCxSR_FER(port)) {
+	if (status & SCxSR_FER(port)) {
 		if (sci_rxd_in(port) == 0) {
 			/* Notify of BREAK */
-			struct sci_port * sci_port = (struct sci_port *)port;
-			if(!sci_port->break_flag) {
-	                	sci_port->break_flag = 1;
-	                	sci_schedule_break_timer((struct sci_port *)port);
+			struct sci_port *sci_port = (struct sci_port *)port;
+
+			if (!sci_port->break_flag) {
+				sci_port->break_flag = 1;
+				sci_schedule_break_timer(sci_port);
+
 				/* Do sysrq handling. */
-				if(uart_handle_break(port))
+				if (uart_handle_break(port))
 					return 0;
 			        pr_debug("sci: BREAK detected\n");
-			        if(tty_insert_flip_char(tty, 0, TTY_BREAK))
+				if (tty_insert_flip_char(tty, 0, TTY_BREAK))
 				        copied++;
                        }
-		}
-		else {
+		} else {
 			/* frame error */
-			if(tty_insert_flip_char(tty, 0, TTY_FRAME))
+			if (tty_insert_flip_char(tty, 0, TTY_FRAME))
 				copied++;
 			pr_debug("sci: frame error\n");
 		}
 	}
 
-	if (status&SCxSR_PER(port)) {
-		if(tty_insert_flip_char(tty, 0, TTY_PARITY))
-			copied++;
+	if (status & SCxSR_PER(port)) {
 		/* parity error */
+		if (tty_insert_flip_char(tty, 0, TTY_PARITY))
+			copied++;
 		pr_debug("sci: parity error\n");
 	}
 
@@ -756,6 +693,12 @@
 
 	/* Handle BREAKs */
 	sci_handle_breaks(port);
+
+#ifdef CONFIG_SH_KGDB
+	/* Break into the debugger if a break is detected */
+	BREAKPOINT();
+#endif
+
 	sci_out(port, SCxSR, SCxSR_BREAK_CLEAR(port));
 
 	return IRQ_HANDLED;
@@ -964,9 +907,8 @@
 {
 	struct sci_port *s = &sci_ports[port->line];
 
-#if defined(__H8300S__)
-	h8300_sci_enable(port, sci_enable);
-#endif
+	if (s->enable)
+		s->enable(port);
 
 	sci_request_irq(s);
 	sci_start_tx(port);
@@ -983,9 +925,8 @@
 	sci_stop_tx(port);
 	sci_free_irq(s);
 
-#if defined(__H8300S__)
-	h8300_sci_enable(port, sci_disable);
-#endif
+	if (s->disable)
+		s->disable(port);
 }
 
 static void sci_set_termios(struct uart_port *port, struct termios *termios,
@@ -1434,6 +1375,8 @@
 		.type		= PORT_SCI,
 		.irqs		= H8S_SCI_IRQS0,
 		.init_pins	= sci_init_pins_sci,
+		.enable		= h8300_sci_enable,
+		.disable	= h8300_sci_disable,
 	},
 	{
 		.port	= {
@@ -1448,6 +1391,8 @@
 		.type		= PORT_SCI,
 		.irqs		= H8S_SCI_IRQS1,
 		.init_pins	= sci_init_pins_sci,
+		.enable		= h8300_sci_enable,
+		.disable	= h8300_sci_disable,
 	},
 	{
 		.port	= {
@@ -1462,6 +1407,8 @@
 		.type		= PORT_SCI,
 		.irqs		= H8S_SCI_IRQS2,
 		.init_pins	= sci_init_pins_sci,
+		.enable		= h8300_sci_enable,
+		.disable	= h8300_sci_disable,
 	},
 #elif defined(CONFIG_CPU_SUBTYPE_SH7770)
 	{
@@ -1569,19 +1516,21 @@
 	sci_config_port(port, 0);
 #endif
 
+	if (serial_console_port->enable)
+		serial_console_port->enable(port);
+
 	/*
 	 * We need to set the initial uartclk here, since otherwise it will
 	 * only ever be setup at sci_init() time.
 	 */
 #if defined(__H8300H__) || defined(__H8300S__)
 	port->uartclk = CONFIG_CPU_CLOCK;
-
-#if defined(__H8300S__)
-	h8300_sci_enable(port, sci_enable);
-#endif
 #elif defined(CONFIG_SUPERH64)
 	port->uartclk = current_cpu_info.module_clock * 16;
 #else
+	/*
+	 * XXX: Use a proper clock for SCI/SCIF
+	 */
 	{
 		struct clk *clk = clk_get("module_clk");
 		port->uartclk = clk_get_rate(clk) * 16;
@@ -1726,6 +1675,7 @@
 #elif defined(CONFIG_SUPERH64)
 			sciport->port.uartclk = current_cpu_info.module_clock * 16;
 #else
+			/* XXX: We should use a proper SCI/SCIF clock */
 			struct clk *clk = clk_get("module_clk");
 			sciport->port.uartclk = clk_get_rate(clk) * 16;
 			clk_put(clk);
@@ -1762,3 +1712,4 @@
 module_init(sci_init);
 module_exit(sci_exit);
 
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/drivers/serial/sh-sci.h linux-2.6.17/drivers/serial/sh-sci.h
--- linux-2.6.17-vanilla/drivers/serial/sh-sci.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/serial/sh-sci.h	2006-07-12 16:54:24.000000000 +0000
@@ -279,6 +279,8 @@
 	int type;
 	unsigned char irqs[4]; /* ERI, RXI, TXI, BRI */
 	void (*init_pins)(struct uart_port *port, unsigned int cflag);
+	void (*enable)(struct uart_port *port);
+	void (*disable)(struct uart_port *port);
 	int break_flag;
 	struct timer_list break_timer;
 };
diff -ruN linux-2.6.17-vanilla/drivers/sh/CVS/Entries linux-2.6.17/drivers/sh/CVS/Entries
--- linux-2.6.17-vanilla/drivers/sh/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/sh/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,2 @@
+/Makefile/1.3/Thu Nov 10 14:20:52 2005/-ko/
+D/superhyway////
diff -ruN linux-2.6.17-vanilla/drivers/sh/CVS/Repository linux-2.6.17/drivers/sh/CVS/Repository
--- linux-2.6.17-vanilla/drivers/sh/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/sh/CVS/Repository	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/sh
diff -ruN linux-2.6.17-vanilla/drivers/sh/CVS/Root linux-2.6.17/drivers/sh/CVS/Root
--- linux-2.6.17-vanilla/drivers/sh/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/sh/CVS/Root	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/sh/Makefile linux-2.6.17/drivers/sh/Makefile
--- linux-2.6.17-vanilla/drivers/sh/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/sh/Makefile	2006-07-12 16:54:24.000000000 +0000
@@ -2,5 +2,5 @@
 # Makefile for the SuperH specific drivers.
 #
 
-obj-$(CONFIG_SUPERHYWAY) += superhyway/
+obj-$(CONFIG_SUPERHYWAY)	+= superhyway/
 
diff -ruN linux-2.6.17-vanilla/drivers/sh/superhyway/CVS/Entries linux-2.6.17/drivers/sh/superhyway/CVS/Entries
--- linux-2.6.17-vanilla/drivers/sh/superhyway/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/sh/superhyway/CVS/Entries	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1,4 @@
+/Makefile/1.1/Fri Mar  4 18:56:52 2005/-ko/
+/superhyway-sysfs.c/1.3/Mon Aug 29 21:01:19 2005/-ko/
+/superhyway.c/1.4/Mon Mar 27 21:06:14 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/sh/superhyway/CVS/Repository linux-2.6.17/drivers/sh/superhyway/CVS/Repository
--- linux-2.6.17-vanilla/drivers/sh/superhyway/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/sh/superhyway/CVS/Repository	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/sh/superhyway
diff -ruN linux-2.6.17-vanilla/drivers/sh/superhyway/CVS/Root linux-2.6.17/drivers/sh/superhyway/CVS/Root
--- linux-2.6.17-vanilla/drivers/sh/superhyway/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/sh/superhyway/CVS/Root	2006-07-12 16:54:24.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/usb/CVS/Entries linux-2.6.17/drivers/usb/CVS/Entries
--- linux-2.6.17-vanilla/drivers/usb/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/usb/CVS/Entries	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,2 @@
+D/host////
+/Kconfig/1.3/Wed Jul  5 14:51:25 2006/-ko/
diff -ruN linux-2.6.17-vanilla/drivers/usb/CVS/Repository linux-2.6.17/drivers/usb/CVS/Repository
--- linux-2.6.17-vanilla/drivers/usb/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/usb/CVS/Repository	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/usb
diff -ruN linux-2.6.17-vanilla/drivers/usb/CVS/Root linux-2.6.17/drivers/usb/CVS/Root
--- linux-2.6.17-vanilla/drivers/usb/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/usb/CVS/Root	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/usb/Kconfig linux-2.6.17/drivers/usb/Kconfig
--- linux-2.6.17-vanilla/drivers/usb/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/usb/Kconfig	2006-07-12 16:54:25.000000000 +0000
@@ -29,6 +29,8 @@
 	default y if PPC_MPC52xx
 	# MIPS:
 	default y if SOC_AU1X00
+	# SH:
+	default y if VOYAGERGX
 	# more:
 	default PCI
 
diff -ruN linux-2.6.17-vanilla/drivers/usb/host/CVS/Entries linux-2.6.17/drivers/usb/host/CVS/Entries
--- linux-2.6.17-vanilla/drivers/usb/host/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/usb/host/CVS/Entries	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,4 @@
+/ohci-voyagergx.c/1.4/Fri Jan 27 16:11:52 2006/-ko/
+/Kconfig/1.12/Wed Jul  5 14:51:27 2006/-ko/
+/ohci-hcd.c/1.14/Wed Jul  5 14:51:27 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/usb/host/CVS/Repository linux-2.6.17/drivers/usb/host/CVS/Repository
--- linux-2.6.17-vanilla/drivers/usb/host/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/usb/host/CVS/Repository	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/usb/host
diff -ruN linux-2.6.17-vanilla/drivers/usb/host/CVS/Root linux-2.6.17/drivers/usb/host/CVS/Root
--- linux-2.6.17-vanilla/drivers/usb/host/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/usb/host/CVS/Root	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/usb/host/Kconfig linux-2.6.17/drivers/usb/host/Kconfig
--- linux-2.6.17-vanilla/drivers/usb/host/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/usb/host/Kconfig	2006-07-12 16:54:25.000000000 +0000
@@ -148,3 +148,13 @@
 	  To compile this driver as a module, choose M here: the
 	  module will be called "sl811_cs".
 
+config USB_SM501
+	tristate "USB Host Controller in SM501 support"
+	depends on USB && VOYAGERGX
+	help
+	  Say Y here if you have SM501 USB host controller your system.
+
+	  if you do not know what this is, please say N.
+
+	  To compile this driver as a module, choose M here: the
+	  module will be called SM501.
diff -ruN linux-2.6.17-vanilla/drivers/usb/host/ohci-hcd.c linux-2.6.17/drivers/usb/host/ohci-hcd.c
--- linux-2.6.17-vanilla/drivers/usb/host/ohci-hcd.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/usb/host/ohci-hcd.c	2006-07-12 16:54:25.000000000 +0000
@@ -878,7 +878,9 @@
 MODULE_DESCRIPTION (DRIVER_INFO);
 MODULE_LICENSE ("GPL");
 
-#ifdef CONFIG_PCI
+#ifdef CONFIG_USB_SM501
+#include "ohci-voyagergx.c"
+#elif defined(CONFIG_PCI)
 #include "ohci-pci.c"
 #endif
 
@@ -923,6 +925,7 @@
       || defined (CONFIG_SOC_AU1X00) \
       || defined (CONFIG_USB_OHCI_HCD_PPC_SOC) \
       || defined (CONFIG_ARCH_AT91RM9200) \
+      || defined (CONFIG_USB_SM501) \
 	)
 #error "missing bus glue for ohci-hcd"
 #endif
diff -ruN linux-2.6.17-vanilla/drivers/usb/host/ohci-voyagergx.c linux-2.6.17/drivers/usb/host/ohci-voyagergx.c
--- linux-2.6.17-vanilla/drivers/usb/host/ohci-voyagergx.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/usb/host/ohci-voyagergx.c	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,259 @@
+/*
+ * SM501 USB HCD for Linux Version.
+ *
+ * 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.
+ *
+ * Copyright 2003 (c) Lineo uSolutions,Inc.
+ * Copyright 2004 (c) Paul Mundt
+ */
+
+#include <linux/dma-mapping.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <asm/mach/voyagergx_reg.h>
+
+extern int usb_disabled(void);
+
+static void usb_hcd_voyager_remove(struct usb_hcd *hcd, struct platform_device *pdev);
+static int __devinit ohci_voyager_start(struct usb_hcd *hcd);
+static int __init voyagergx_ohci_init(void);
+static void __exit voyagergx_ohci_exit(void);
+
+/*
+ * VoyagerGX USB, when not used as a PCI device.
+ */
+#define VOYAGER_OHCI_NAME	"voyager-ohci"
+
+static void __init voyagergx_ohci_configure(void)
+{
+	unsigned long val;
+
+        // Power Mode 0 Gate
+        val = inl(POWER_MODE0_GATE);
+        outl((val | POWER_MODE0_GATE_UH), POWER_MODE0_GATE);
+
+	val = inl(POWER_MODE1_GATE);
+        outl((val | POWER_MODE1_GATE_UH), POWER_MODE1_GATE);
+
+        //Miscellaneous USB Clock Selsct
+        val = inl(MISC_CTRL);
+	val &= ~MISC_CTRL_USBCLK_48;
+        outl(val, MISC_CTRL);
+
+        // Interrupt Mask
+        val = inl(VOYAGER_INT_MASK);
+        val |= 0x00000040;
+        outl(val, VOYAGER_INT_MASK);
+}
+
+static int usb_hcd_voyager_probe(const struct hc_driver *driver,
+				 struct platform_device *dev)
+{
+	struct usb_hcd *hcd;
+	struct ohci_hcd *ohci;
+	struct resource *res;
+	int retval, irq;
+
+	res = platform_get_resource(dev, IORESOURCE_MEM, 0);
+	if (!res) {
+		err("no IO resources defined");
+		return -ENODEV;
+	}
+	irq = platform_get_irq(dev, 0);
+
+	hcd = usb_create_hcd(driver, &dev->dev, "sm501");
+	if (PTR_ERR(hcd) == 0) {
+		err("usb_create_hcd failed");
+		return -ENOMEM;
+	}
+
+	hcd->rsrc_start = res->start;
+	hcd->rsrc_len = res->end - res->start + 1;
+	hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
+	if (PTR_ERR(hcd->regs) == 0) {
+		err("ioremap failed");
+		retval = -ENOMEM;
+		goto err1;
+	}
+
+	ohci = hcd_to_ohci(hcd);
+	ohci_hcd_init(ohci);
+
+	retval = hcd_buffer_create(hcd);
+	if (retval != 0) {
+		err("hcd_buffer_create failed, %d", retval);
+		goto err2;
+	}
+
+	retval = usb_add_hcd(hcd, irq, SA_INTERRUPT);
+	if (!retval)
+		return retval;	/* all done */
+
+	/* error path */
+	hcd_buffer_destroy(hcd);
+err2:
+	iounmap(hcd->regs);
+err1:
+	usb_put_hcd(hcd);
+
+	return retval;
+}
+
+static void usb_hcd_voyager_remove(struct usb_hcd *hcd, struct platform_device *dev)
+{
+	hcd_buffer_destroy(hcd);
+	usb_remove_hcd(hcd);
+	iounmap(hcd->regs);
+	usb_put_hcd(hcd);
+}
+
+static int __devinit ohci_voyager_start(struct usb_hcd *hcd)
+{
+	struct ohci_hcd *ohci = hcd_to_ohci(hcd);
+	int ret;
+
+	if ((ret = ohci_init(ohci)) < 0)
+		return ret;
+
+	if ((ret = ohci_run(ohci)) < 0) {
+		err("can't start %s", hcd->self.bus_name);
+		ohci_stop(hcd);
+		return ret;
+	}
+
+	return 0;
+}
+
+static const struct hc_driver voyager_hc_driver = {
+	.description		= hcd_name,
+	.product_desc		= "SM501 OHCI",
+	.hcd_priv_size		= sizeof(struct ohci_hcd),
+
+	/*
+	 * generic hardware linkage
+	 */
+	.irq			= ohci_irq,
+	.flags			= HCD_USB11,
+
+	/*
+	 * basic lifecycle operations
+	 */
+	.start			= ohci_voyager_start,
+	.stop			= ohci_stop,
+
+	/*
+	 * managing i/o requests and associated device resources
+	 */
+	.urb_enqueue		= ohci_urb_enqueue,
+	.urb_dequeue		= ohci_urb_dequeue,
+	.endpoint_disable	= ohci_endpoint_disable,
+
+	/*
+	 * scheduling support
+	 */
+	.get_frame_number	= ohci_get_frame,
+
+	/*
+	 * root hub support
+	 */
+	.hub_status_data	= ohci_hub_status_data,
+	.hub_control		= ohci_hub_control,
+#ifdef	CONFIG_PM
+	.bus_suspend 		= ohci_bus_suspend,
+	.bus_resume 		= ohci_bus_resume,
+#endif
+	.start_port_reset	= ohci_start_port_reset,
+};
+
+static int usb_hcd_voyager_drv_probe(struct platform_device *pdev)
+{
+	if (usb_disabled())
+		return -ENODEV;
+
+	return usb_hcd_voyager_probe(&voyager_hc_driver, pdev);
+}
+
+static int usb_hcd_voyager_drv_remove(struct platform_device *pdev)
+{
+	struct usb_hcd *hcd = platform_get_drvdata(pdev);
+
+	usb_hcd_voyager_remove(hcd, pdev);
+
+	return 0;
+}
+
+/*
+ * Driver definitions to register with SH Bus
+ */
+static struct platform_driver usb_hcd_voyager_driver = {
+	.driver	= {
+		.owner	= THIS_MODULE,
+		.name	= VOYAGER_OHCI_NAME,
+	},
+	.probe		= usb_hcd_voyager_drv_probe,
+	.remove		= usb_hcd_voyager_drv_remove,
+};
+
+static struct resource voyager_hcd_res[] = {
+	[0] = {
+		.start	= VOYAGER_USBH_BASE,
+		.end	= VOYAGER_USBH_BASE + 0xfff,
+		.flags	= IORESOURCE_MEM,
+	},
+	[1] = {
+		.start	= VOYAGER_USBH_IRQ,
+		.end	= VOYAGER_USBH_IRQ,
+		.flags	= IORESOURCE_IRQ,
+	},
+};
+
+static struct platform_device usb_hcd_voyager_dev = {
+	.name		= VOYAGER_OHCI_NAME,
+	.id		= 0,
+	.resource	= voyager_hcd_res,
+	.num_resources	= ARRAY_SIZE(voyager_hcd_res),
+};
+
+static int __init voyagergx_ohci_init(void)
+{
+	int ret;
+
+	if (usb_disabled())
+		return -ENODEV;
+
+	voyagergx_ohci_configure();
+
+	ret = platform_driver_register(&usb_hcd_voyager_driver);
+	if (ret)
+		return -ENODEV;
+
+	ret = platform_device_register(&usb_hcd_voyager_dev);
+	if (ret) {
+		platform_driver_unregister(&usb_hcd_voyager_driver);
+		return -ENODEV;
+	}
+
+	return ret;
+}
+
+static void __exit voyagergx_ohci_exit(void)
+{
+	platform_device_unregister(&usb_hcd_voyager_dev);
+	platform_driver_unregister(&usb_hcd_voyager_driver);
+}
+
+module_init(voyagergx_ohci_init);
+module_exit(voyagergx_ohci_exit);
diff -ruN linux-2.6.17-vanilla/drivers/video/CVS/Entries linux-2.6.17/drivers/video/CVS/Entries
--- linux-2.6.17-vanilla/drivers/video/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/CVS/Entries	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,7 @@
+/hitfb.c/1.22/Sun Jan 29 17:46:24 2006/-ko/
+/pvr2fb.c/1.27/Sun Jan  8 13:56:39 2006//
+D/backlight////
+D/console////
+D/voyager////
+/Kconfig/1.27/Wed Jul  5 14:51:28 2006/-ko/
+/Makefile/1.22/Wed Jul  5 14:51:28 2006/-ko/
diff -ruN linux-2.6.17-vanilla/drivers/video/CVS/Repository linux-2.6.17/drivers/video/CVS/Repository
--- linux-2.6.17-vanilla/drivers/video/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/CVS/Repository	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/video
diff -ruN linux-2.6.17-vanilla/drivers/video/CVS/Root linux-2.6.17/drivers/video/CVS/Root
--- linux-2.6.17-vanilla/drivers/video/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/CVS/Root	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/video/Kconfig linux-2.6.17/drivers/video/Kconfig
--- linux-2.6.17-vanilla/drivers/video/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/video/Kconfig	2006-07-12 16:54:25.000000000 +0000
@@ -151,6 +151,21 @@
 	help
 	  Support the Permedia2 FIFO disconnect feature (see CONFIG_FB_PM2).
 
+config FB_VOYAGER_GX
+	bool "Silicon Motion Voyager GX support"
+	depends on FB && VOYAGERGX
+	select FB_CFB_FILLRECT
+	select FB_CFB_COPYAREA
+	select FB_CFB_IMAGEBLIT
+	help
+	  Say Y to enable support for the Silicon Motion VoyagerGX framebuffer.
+
+config FB_VOYAGER_GX_MP
+	bool "Voyager multi plane support"
+	depends on FB_VOYAGER_GX
+	help
+	  Say Y to enable support VoyagerGX multi plane.
+
 config FB_ARMCLCD
 	tristate "ARM PrimeCell PL110 support"
 	depends on FB && ARM && ARM_AMBA
diff -ruN linux-2.6.17-vanilla/drivers/video/Makefile linux-2.6.17/drivers/video/Makefile
--- linux-2.6.17-vanilla/drivers/video/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/video/Makefile	2006-07-12 16:54:25.000000000 +0000
@@ -38,6 +38,8 @@
 obj-$(CONFIG_FB_KYRO)             += kyro/
 obj-$(CONFIG_FB_SAVAGE)		  += savage/
 obj-$(CONFIG_FB_GEODE)		  += geode/
+obj-$(CONFIG_FB_VOYAGER_GX)	  += voyager/
+
 obj-$(CONFIG_FB_I810)             += vgastate.o
 obj-$(CONFIG_FB_NEOMAGIC)         += neofb.o vgastate.o
 obj-$(CONFIG_FB_VIRGE)            += virgefb.o
diff -ruN linux-2.6.17-vanilla/drivers/video/backlight/CVS/Entries linux-2.6.17/drivers/video/backlight/CVS/Entries
--- linux-2.6.17-vanilla/drivers/video/backlight/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/backlight/CVS/Entries	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,3 @@
+/Kconfig/1.2/Wed Jul  5 14:51:29 2006//
+/hp680_bl.c/1.6/Wed Jul 12 16:51:58 2006//
+D
diff -ruN linux-2.6.17-vanilla/drivers/video/backlight/CVS/Repository linux-2.6.17/drivers/video/backlight/CVS/Repository
--- linux-2.6.17-vanilla/drivers/video/backlight/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/backlight/CVS/Repository	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/video/backlight
diff -ruN linux-2.6.17-vanilla/drivers/video/backlight/CVS/Root linux-2.6.17/drivers/video/backlight/CVS/Root
--- linux-2.6.17-vanilla/drivers/video/backlight/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/backlight/CVS/Root	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/video/backlight/Kconfig linux-2.6.17/drivers/video/backlight/Kconfig
--- linux-2.6.17-vanilla/drivers/video/backlight/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/video/backlight/Kconfig	2006-07-12 16:54:25.000000000 +0000
@@ -51,7 +51,7 @@
 	  backlight driver.
 
 config BACKLIGHT_HP680
-	tristate "HP Jornada 680 Backlight Driver"
+	tristate "HP Jornada 680 Backlight Driver "
 	depends on BACKLIGHT_DEVICE && SH_HP6XX
 	default y
 	help
diff -ruN linux-2.6.17-vanilla/drivers/video/backlight/hp680_bl.c linux-2.6.17/drivers/video/backlight/hp680_bl.c
--- linux-2.6.17-vanilla/drivers/video/backlight/hp680_bl.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/video/backlight/hp680_bl.c	2006-07-12 16:54:25.000000000 +0000
@@ -1,7 +1,7 @@
 /*
  *  Backlight Driver for HP Jornada 680
  *
- *  Copyright (c) 2005 Andriy Skulysh
+ *  Copyright (c) 2005 Andriy Skulysh 
  *
  *  Based on Sharp's Corgi Backlight Driver
  *
@@ -20,7 +20,7 @@
 
 #include <asm/cpu/dac.h>
 #include <asm/hp6xx/hp6xx.h>
-#include <asm/hd64461/hd64461.h>
+#include <asm/hd64461.h>
 
 #define HP680_MAX_INTENSITY 255
 #define HP680_DEFAULT_INTENSITY 10
@@ -64,7 +64,6 @@
 	current_intensity = intensity;
 }
 
-
 #ifdef CONFIG_PM
 static int hp680bl_suspend(struct platform_device *dev, pm_message_t state)
 {
@@ -102,6 +101,8 @@
 	.update_status  = hp680bl_set_intensity,
 };
 
+static struct backlight_device *hp680_backlight_device;
+
 static int __init hp680bl_probe(struct platform_device *dev)
 {
 	hp680_backlight_device = backlight_device_register ("hp680-bl",
@@ -163,6 +164,6 @@
 module_init(hp680bl_init);
 module_exit(hp680bl_exit);
 
-MODULE_AUTHOR("Andriy Skulysh <askulysh@image.kiev.ua>");
+MODULE_AUTHOR("Andriy Skulysh <askulysh@gmail.com>");
 MODULE_DESCRIPTION("HP Jornada 680 Backlight Driver");
 MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/drivers/video/console/CVS/Entries linux-2.6.17/drivers/video/console/CVS/Entries
--- linux-2.6.17-vanilla/drivers/video/console/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/console/CVS/Entries	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,2 @@
+/Kconfig/1.7/Wed Jul  5 14:51:30 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/video/console/CVS/Repository linux-2.6.17/drivers/video/console/CVS/Repository
--- linux-2.6.17-vanilla/drivers/video/console/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/console/CVS/Repository	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/video/console
diff -ruN linux-2.6.17-vanilla/drivers/video/console/CVS/Root linux-2.6.17/drivers/video/console/CVS/Root
--- linux-2.6.17-vanilla/drivers/video/console/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/console/CVS/Root	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/video/console/Kconfig linux-2.6.17/drivers/video/console/Kconfig
--- linux-2.6.17-vanilla/drivers/video/console/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/video/console/Kconfig	2006-07-12 16:54:25.000000000 +0000
@@ -6,7 +6,7 @@
 
 config VGA_CONSOLE
 	bool "VGA text console" if EMBEDDED || !X86
-	depends on !ARCH_ACORN && !ARCH_EBSA110 && !4xx && !8xx && !SPARC && !M68K && !PARISC && !FRV && !ARCH_VERSATILE
+	depends on !ARCH_ACORN && !ARCH_EBSA110 && !4xx && !8xx && !SPARC && !M68K && !PARISC && !FRV && !ARCH_VERSATILE && !SUPERH
 	default y
 	help
 	  Saying Y here will allow you to use Linux in text mode through a
diff -ruN linux-2.6.17-vanilla/drivers/video/hitfb.c linux-2.6.17/drivers/video/hitfb.c
--- linux-2.6.17-vanilla/drivers/video/hitfb.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/video/hitfb.c	2006-07-12 16:54:25.000000000 +0000
@@ -4,7 +4,7 @@
  * (C) 1999 Mihai Spatar
  * (C) 2000 YAEGASHI Takeshi
  * (C) 2003, 2004 Paul Mundt
- * (C) 2003, 2004 Andriy Skulysh
+ * (C) 2003, 2004, 2006 Andriy Skulysh
  *
  *  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
@@ -22,18 +22,16 @@
 #include <linux/slab.h>
 #include <linux/delay.h>
 #include <linux/init.h>
+#include <linux/platform_device.h>
 #include <linux/fb.h>
 
 #include <asm/machvec.h>
 #include <asm/uaccess.h>
 #include <asm/pgtable.h>
 #include <asm/io.h>
-#include <asm/hd64461/hd64461.h>
-
-#ifdef MACH_HP600
+#include <asm/hd64461.h>
 #include <asm/cpu/dac.h>
 #include <asm/hp6xx/hp6xx.h>
-#endif
 
 #define	WIDTH 640
 
@@ -47,7 +45,6 @@
 static struct fb_fix_screeninfo hitfb_fix __initdata = {
 	.id		= "Hitachi HD64461",
 	.type		= FB_TYPE_PACKED_PIXELS,
-	.ypanstep	= 8,
 	.accel		= FB_ACCEL_NONE,
 };
 
@@ -75,26 +72,14 @@
 	if (truecolor)
 		saddr <<= 1;
 
-	fb_writew(width, HD64461_BBTDWR);
-	fb_writew(height, HD64461_BBTDHR);
+	fb_writew(width-1, HD64461_BBTDWR);
+	fb_writew(height-1, HD64461_BBTDHR);
 
 	fb_writew(saddr & 0xffff, HD64461_BBTDSARL);
 	fb_writew(saddr >> 16, HD64461_BBTDSARH);
 
 }
 
-static inline void hitfb_accel_solidfill(int truecolor, u16 dx, u16 dy,
-					 u16 width, u16 height, u16 color)
-{
-	hitfb_accel_set_dest(truecolor, dx, dy, width, height);
-
-	fb_writew(0x00f0, HD64461_BBTROPR);
-	fb_writew(16, HD64461_BBTMDR);
-	fb_writew(color, HD64461_GRSCR);
-
-	hitfb_accel_start(truecolor);
-}
-
 static inline void hitfb_accel_bitblt(int truecolor, u16 sx, u16 sy, u16 dx,
 				      u16 dy, u16 width, u16 height, u16 rop,
 				      u32 mask_addr)
@@ -102,6 +87,8 @@
 	u32 saddr, daddr;
 	u32 maddr = 0;
 
+	height--;
+	width--;
 	fb_writew(rop, HD64461_BBTROPR);
 	if ((sy < dy) || ((sy == dy) && (sx <= dx))) {
 		saddr = WIDTH * (sy + height) + sx + width;
@@ -148,6 +135,7 @@
 	if (rect->rop != ROP_COPY)
 		cfb_fillrect(p, rect);
 	else {
+		hitfb_accel_wait();
 		fb_writew(0x00f0, HD64461_BBTROPR);
 		fb_writew(16, HD64461_BBTMDR);
 
@@ -163,16 +151,15 @@
 					     rect->height);
 			hitfb_accel_start(0);
 		}
-		hitfb_accel_wait();
 	}
 }
 
 static void hitfb_copyarea(struct fb_info *p, const struct fb_copyarea *area)
 {
+	hitfb_accel_wait();
 	hitfb_accel_bitblt(p->var.bits_per_pixel == 16, area->sx, area->sy,
 			   area->dx, area->dy, area->width, area->height,
 			   0x00cc, 0);
-	hitfb_accel_wait();
 }
 
 static int hitfb_pan_display(struct fb_var_screeninfo *var,
@@ -184,7 +171,7 @@
 	if (xoffset != 0)
 		return -EINVAL;
 
-	fb_writew(yoffset, HD64461_LCDCBAR);
+	fb_writew((yoffset*info->fix.line_length)>>10, HD64461_LCDCBAR);
 
 	return 0;
 }
@@ -194,12 +181,6 @@
 	unsigned short v;
 
 	if (blank_mode) {
-#ifdef MACH_HP600
-		sh_dac_disable(DAC_LCD_BRIGHTNESS);
-		v = fb_readw(HD64461_GPBDR);
-		v |= HD64461_GPBDR_LCDOFF;
-		fb_writew(v, HD64461_GPBDR);
-#endif
 		v = fb_readw(HD64461_LDR1);
 		v &= ~HD64461_LDR1_DON;
 		fb_writew(v, HD64461_LDR1);
@@ -215,19 +196,18 @@
 		v = fb_readw(HD64461_STBCR);
 		v &= ~HD64461_STBCR_SLCDST;
 		fb_writew(v, HD64461_STBCR);
-#ifdef MACH_HP600
-		sh_dac_enable(DAC_LCD_BRIGHTNESS);
-		v = fb_readw(HD64461_GPBDR);
-		v &= ~HD64461_GPBDR_LCDOFF;
-		fb_writew(v, HD64461_GPBDR);
-#endif
-		v = fb_readw(HD64461_LDR1);
-		v |= HD64461_LDR1_DON;
-		fb_writew(v, HD64461_LDR1);
 
 		v = fb_readw(HD64461_LCDCCR);
-		v &= ~HD64461_LCDCCR_MOFF;
+		v &= ~(HD64461_LCDCCR_MOFF | HD64461_LCDCCR_STREQ);
 		fb_writew(v, HD64461_LCDCCR);
+
+		do {
+		    v = fb_readw(HD64461_LCDCCR);
+		} while(v&HD64461_LCDCCR_STBACK);
+
+		v = fb_readw(HD64461_LDR1);
+		v |= HD64461_LDR1_DON;
+		fb_writew(v, HD64461_LDR1);
 	}
 	return 0;
 }
@@ -235,7 +215,7 @@
 static int hitfb_setcolreg(unsigned regno, unsigned red, unsigned green,
 			   unsigned blue, unsigned transp, struct fb_info *info)
 {
-	if (regno >= info->cmap.len)
+	if (regno >= 256)
 		return 1;
 
 	switch (info->var.bits_per_pixel) {
@@ -246,6 +226,8 @@
 		fb_writew(blue >> 10, HD64461_CPTWDR);
 		break;
 	case 16:
+		if (regno >= 16)
+			return 1;
 		((u32 *) (info->pseudo_palette))[regno] =
 		    ((red & 0xf800)) |
 		    ((green & 0xfc00) >> 5) | ((blue & 0xf800) >> 11);
@@ -254,26 +236,113 @@
 	return 0;
 }
 
+static int hitfb_sync(struct fb_info *info)
+{
+	hitfb_accel_wait();
+
+	return 0;
+}
+
+static int hitfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
+{
+	int maxy;
+
+	var->xres = info->var.xres;
+	var->xres_virtual = info->var.xres;
+	var->yres = info->var.yres;
+
+	if ((var->bits_per_pixel != 8) && (var->bits_per_pixel != 16))
+		var->bits_per_pixel = info->var.bits_per_pixel;
+
+	if (var->yres_virtual < var->yres)
+		var->yres_virtual = var->yres;
+
+	maxy = info->fix.smem_len / var->xres;
+
+	if (var->bits_per_pixel == 16)
+		maxy /= 2;
+
+	if (var->yres_virtual > maxy)
+		var->yres_virtual = maxy;
+
+	var->xoffset = 0;
+	var->yoffset = 0;
+
+	switch (var->bits_per_pixel) {
+	case 8:
+		var->red.offset = 0;
+		var->red.length = 8;
+		var->green.offset = 0;
+		var->green.length = 8;
+		var->blue.offset = 0;
+		var->blue.length = 8;
+		var->transp.offset = 0;
+		var->transp.length = 0;
+		break;
+	case 16:		/* RGB 565 */
+		var->red.offset = 11;
+		var->red.length = 5;
+		var->green.offset = 5;
+		var->green.length = 6;
+		var->blue.offset = 0;
+		var->blue.length = 5;
+		var->transp.offset = 0;
+		var->transp.length = 0;
+		break;
+	}
+
+	return 0;
+}
+
+static int hitfb_set_par(struct fb_info *info)
+{
+	unsigned short ldr3;
+
+	switch (info->var.bits_per_pixel) {
+	case 8:
+		info->fix.line_length = info->var.xres;
+		info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
+		info->fix.ypanstep = 16;
+		break;
+	case 16:
+		info->fix.line_length = info->var.xres*2;
+		info->fix.visual = FB_VISUAL_TRUECOLOR;
+		info->fix.ypanstep = 8;
+		break;
+	}
+
+	fb_writew(info->fix.line_length, HD64461_LCDCLOR);
+	ldr3 = fb_readw(HD64461_LDR3);
+	ldr3 &= ~15;
+	ldr3 |= (info->var.bits_per_pixel == 8) ? 4 : 8;
+	fb_writew(ldr3, HD64461_LDR3);
+	return 0;
+}
+
 static struct fb_ops hitfb_ops = {
 	.owner		= THIS_MODULE,
+	.fb_check_var	= hitfb_check_var,
+	.fb_set_par	= hitfb_set_par,
 	.fb_setcolreg	= hitfb_setcolreg,
 	.fb_blank	= hitfb_blank,
+	.fb_sync	= hitfb_sync,
 	.fb_pan_display = hitfb_pan_display,
 	.fb_fillrect	= hitfb_fillrect,
 	.fb_copyarea	= hitfb_copyarea,
 	.fb_imageblit	= cfb_imageblit,
 };
 
-int __init hitfb_init(void)
+static int __init hitfb_probe(struct platform_device *dev)
 {
 	unsigned short lcdclor, ldr3, ldvndr;
-	int size;
 
 	if (fb_get_options("hitfb", NULL))
 		return -ENODEV;
 
+	hitfb_fix.mmio_start = CONFIG_HD64461_IOBASE+0x1000;
+	hitfb_fix.mmio_len = 0x1000;
 	hitfb_fix.smem_start = CONFIG_HD64461_IOBASE + 0x02000000;
-	hitfb_fix.smem_len = (MACH_HP690) ? 1024 * 1024 : 512 * 1024;
+	hitfb_fix.smem_len = 512 * 1024;
 
 	lcdclor = fb_readw(HD64461_LCDCLOR);
 	ldvndr = fb_readw(HD64461_LDVNDR);
@@ -323,12 +392,12 @@
 	fb_info.var = hitfb_var;
 	fb_info.fix = hitfb_fix;
 	fb_info.pseudo_palette = pseudo_palette;
-	fb_info.flags = FBINFO_DEFAULT;
+	fb_info.flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN |
+		FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_COPYAREA;
 
 	fb_info.screen_base = (void *)hitfb_fix.smem_start;
 
-	size = (fb_info.var.bits_per_pixel == 8) ? 256 : 16;
-	fb_alloc_cmap(&fb_info.cmap, size, 0);
+	fb_alloc_cmap(&fb_info.cmap, 256, 0);
 
 	if (register_framebuffer(&fb_info) < 0)
 		return -EINVAL;
@@ -338,9 +407,75 @@
 	return 0;
 }
 
+static int __devexit hitfb_remove(struct platform_device *dev)
+{
+	return unregister_framebuffer(&fb_info);
+}
+
+#ifdef CONFIG_PM
+static int hitfb_suspend(struct platform_device *dev, pm_message_t state)
+{
+	u16 v;
+	
+	hitfb_blank(1,0);
+	v = fb_readw(HD64461_STBCR);
+	v |= HD64461_STBCR_SLCKE_IST;
+	fb_writew(v, HD64461_STBCR);
+
+	return 0;
+}
+
+static int hitfb_resume(struct platform_device *dev)
+{
+	u16 v;
+
+	v = fb_readw(HD64461_STBCR);
+	v &= ~HD64461_STBCR_SLCKE_OST;
+	msleep(100);
+	v = fb_readw(HD64461_STBCR);
+	v &= ~HD64461_STBCR_SLCKE_IST;
+	fb_writew(v, HD64461_STBCR);
+	hitfb_blank(0,0);
+
+	return 0;
+}
+#endif
+
+static struct platform_driver hitfb_driver = {
+	.probe		= hitfb_probe,
+	.remove		= __devexit_p(hitfb_remove),
+#ifdef CONFIG_PM
+	.suspend	= hitfb_suspend,
+	.resume		= hitfb_resume,
+#endif
+	.driver		= {
+		.name	= "hitfb",
+	},
+};
+
+static struct platform_device hitfb_device = {
+	.name	= "hitfb",
+	.id	= -1,
+};
+
+static int __init hitfb_init(void)
+{
+	int ret;
+
+	ret = platform_driver_register(&hitfb_driver);
+	if (!ret) {
+		ret = platform_device_register(&hitfb_device);
+		if (ret)
+			platform_driver_unregister(&hitfb_driver);
+	}
+	return ret;
+}
+
+
 static void __exit hitfb_exit(void)
 {
-	unregister_framebuffer(&fb_info);
+	platform_device_unregister(&hitfb_device);
+	platform_driver_unregister(&hitfb_driver);
 }
 
 module_init(hitfb_init);
diff -ruN linux-2.6.17-vanilla/drivers/video/pvr2fb.c linux-2.6.17/drivers/video/pvr2fb.c
--- linux-2.6.17-vanilla/drivers/video/pvr2fb.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/drivers/video/pvr2fb.c	2006-07-12 16:54:25.000000000 +0000
@@ -189,7 +189,7 @@
 static unsigned int is_blanked = 0;		/* Is the screen blanked? */
 
 #ifdef CONFIG_SH_STORE_QUEUES
-static struct sq_mapping *pvr2fb_map;
+static unsigned long pvr2fb_map;
 #endif
 
 #ifdef CONFIG_SH_DMA
@@ -215,15 +215,17 @@
 static int pvr2_init_cable(void);
 static int pvr2_get_param(const struct pvr2_params *p, const char *s,
                             int val, int size);
+#ifdef CONFIG_SH_DMA
 static ssize_t pvr2fb_write(struct file *file, const char *buf,
 			    size_t count, loff_t *ppos);
+#endif
 
 static struct fb_ops pvr2fb_ops = {
-	.owner 		= THIS_MODULE,
-	.fb_setcolreg 	= pvr2fb_setcolreg,
-	.fb_blank 	= pvr2fb_blank,
-	.fb_check_var 	= pvr2fb_check_var,
-	.fb_set_par 	= pvr2fb_set_par,
+	.owner		= THIS_MODULE,
+	.fb_setcolreg	= pvr2fb_setcolreg,
+	.fb_blank	= pvr2fb_blank,
+	.fb_check_var	= pvr2fb_check_var,
+	.fb_set_par	= pvr2fb_set_par,
 #ifdef CONFIG_SH_DMA
 	.fb_write	= pvr2fb_write,
 #endif
@@ -785,7 +787,7 @@
 		goto out_err;
 	}
 
-	fb_memset((unsigned long)fb_info->screen_base, 0, pvr2_fix.smem_len);
+	fb_memset(fb_info->screen_base, 0, pvr2_fix.smem_len);
 
 	pvr2_fix.ypanstep	= nopan  ? 0 : 1;
 	pvr2_fix.ywrapstep	= nowrap ? 0 : 1;
@@ -822,7 +824,7 @@
 	       modememused >> 10, (unsigned long)(fb_info->fix.smem_len >> 10));
 	printk("fb%d: Mode %dx%d-%d pitch = %ld cable: %s video output: %s\n", 
 	       fb_info->node, fb_info->var.xres, fb_info->var.yres,
-	       fb_info->var.bits_per_pixel, 
+	       fb_info->var.bits_per_pixel,
 	       get_line_length(fb_info->var.xres, fb_info->var.bits_per_pixel),
 	       (char *)pvr2_get_param(cables, NULL, cable_type, 3),
 	       (char *)pvr2_get_param(outputs, NULL, video_output, 3));
@@ -831,10 +833,10 @@
 	printk(KERN_NOTICE "fb%d: registering with SQ API\n", fb_info->node);
 
 	pvr2fb_map = sq_remap(fb_info->fix.smem_start, fb_info->fix.smem_len,
-			      fb_info->fix.id);
+			      fb_info->fix.id, pgprot_val(PAGE_SHARED));
 
 	printk(KERN_NOTICE "fb%d: Mapped video memory to SQ addr 0x%lx\n",
-	       fb_info->node, pvr2fb_map->sq_addr);
+	       fb_info->node, pvr2fb_map);
 #endif
 
 	return 0;
diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/CVS/Entries linux-2.6.17/drivers/video/voyager/CVS/Entries
--- linux-2.6.17-vanilla/drivers/video/voyager/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/voyager/CVS/Entries	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,9 @@
+/Makefile/1.2/Tue May 31 14:19:09 2005/-ko/
+/voyager_alphafb.c/1.2/Wed Feb  8 22:08:10 2006/-ko/
+/voyager_crtcsrfb.c/1.2/Wed Feb  8 22:08:10 2006/-ko/
+/voyager_crtfb.c/1.2/Wed Feb  8 22:08:10 2006/-ko/
+/voyager_gxfb.c/1.4/Wed Feb  8 22:08:10 2006/-ko/
+/voyager_panelcsrfb.c/1.2/Wed Feb  8 22:08:10 2006/-ko/
+/voyager_valphafb.c/1.2/Wed Feb  8 22:08:10 2006/-ko/
+/voyager_videofb.c/1.2/Wed Feb  8 22:08:10 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/CVS/Repository linux-2.6.17/drivers/video/voyager/CVS/Repository
--- linux-2.6.17-vanilla/drivers/video/voyager/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/voyager/CVS/Repository	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+linux/drivers/video/voyager
diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/CVS/Root linux-2.6.17/drivers/video/voyager/CVS/Root
--- linux-2.6.17-vanilla/drivers/video/voyager/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/voyager/CVS/Root	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/Makefile linux-2.6.17/drivers/video/voyager/Makefile
--- linux-2.6.17-vanilla/drivers/video/voyager/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/voyager/Makefile	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,13 @@
+#
+# Makefile for the VoyagerGX framebuffer driver
+#
+
+my-obj-$(CONFIG_FB_VOYAGER_GX_MP)	+= voyager_alphafb.o \
+					   voyager_crtcsrfb.o \
+					   voyager_crtfb.o \
+					   voyager_panelcsrfb.o \
+					   voyager_valphafb.o \
+					   voyager_videofb.o
+
+obj-$(CONFIG_FB_VOYAGER_GX)		+= voyager_gxfb.o $(my-obj-y)
+
diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_alphafb.c linux-2.6.17/drivers/video/voyager/voyager_alphafb.c
--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_alphafb.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/voyager/voyager_alphafb.c	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,282 @@
+/*
+ *  linux/drivers/video/voyager_alphafb.c -- voyager alpha frame buffer driver
+ *
+ *     Copyright (C) 2003 Renesas Technology Sales Co.,Ltd.
+ *     Copyright (C) 2003 Atom Create Engineering Co.,Ltd.
+ *     Anthor : Atom Create Engineering Co.,Ltd.
+ *                   Kenichi Sakuma
+ *
+ *  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.
+ *
+ * 1.00
+ *  - initial version (ks)
+ * 1.01
+ *  - Kernel 2.6 correspondence
+ */
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/mm.h>
+#include <linux/tty.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/delay.h>
+#include <linux/interrupt.h>
+#include <linux/fb.h>
+#include <linux/init.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach/voyagergx_reg.h>
+#include <video/voyager.h>
+
+static struct fb_info voyafb_info;
+
+int voyafb_init4(void);
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *info);
+static int voyafb_set_par(struct fb_info *info);
+static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+			     u_int transp, struct fb_info *info);
+static int voyafb_blank(int blank, struct fb_info *info);
+static int voyafb_ioctl(struct inode*, struct file*,
+			   unsigned int, unsigned long, struct fb_info*);
+static int  change_mode(struct fb_var_screeninfo *var);
+
+static	unsigned	int	pseudo_palette[16];
+
+static struct fb_ops voyafb_ops = {
+	.owner		= THIS_MODULE,
+	.fb_check_var	= voyafb_check_var,
+	.fb_set_par	= voyafb_set_par,
+	.fb_setcolreg	= voyafb_setcolreg,
+	.fb_blank	= voyafb_blank,
+	.fb_fillrect	= cfb_fillrect,
+	.fb_copyarea	= cfb_copyarea,
+	.fb_imageblit	= cfb_imageblit,
+	.fb_ioctl       = voyafb_ioctl,
+};
+
+static struct fb_var_screeninfo voyafb_var __initdata = {
+	.xres = XRES,
+	.yres = YRES,
+	.xres_virtual = XRES,
+	.yres_virtual = YRES,
+	.bits_per_pixel = BPP,
+	.red = { 11,5,0 },
+	.green = { 5,6,0 },
+	.blue = { 0,5,0 },
+	.height = -1,
+	.width = -1,
+	.vmode = FB_VMODE_NONINTERLACED,
+	.pixclock = 10000,
+	.left_margin = 16,
+	.right_margin = 16,
+	.upper_margin = 16,
+	.lower_margin = 16,
+	.hsync_len = 8,
+	.vsync_len = 8,
+};
+
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *info)
+{
+	if (var->xres > XRES || var->yres > YRES
+	    || var->xres_virtual > XRES || var->yres_virtual > YRES
+	    || var->bits_per_pixel != BPP
+	    || var->nonstd
+	    || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED)
+		return -EINVAL;
+
+	var->xres_virtual = XRES;
+	var->yres_virtual = YRES;
+
+	if(change_mode(var) != 0) {
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int voyafb_set_par(struct fb_info *info)
+{
+	info->fix.line_length = XRES*2;
+	info->fix.visual = FB_VISUAL_TRUECOLOR;
+
+	info->var.red.offset = 11;
+	info->var.green.offset = 5;
+	info->var.blue.offset = 0;
+	info->var.red.length = info->var.blue.length = 5;
+	info->var.green.length = 6;
+	return 0;
+}
+
+static int voyafb_blank(int blank, struct fb_info *info)
+{
+	return 1;
+}
+
+static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green,
+			     unsigned blue, unsigned transp,
+			     struct fb_info* info)
+{
+	red   >>= 11;
+	green >>= 11;
+	blue  >>= 10;
+
+	if (regno < 16)
+		((u32 *)(info->pseudo_palette))[regno] = ((red & 31) << 6) |
+                                                         ((green & 31) << 11) |
+                                                         ((blue & 63));
+	return 0;
+}
+
+static int voyafb_ioctl(struct inode* inode, struct file* file,
+			 unsigned int cmd, unsigned long arg,
+			 struct fb_info* info)
+{
+	if(cmd == VOYAGER_IOCTL_ENABLE) {
+		if(arg == 0) {
+			*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xfffffffb;
+		}
+		else {
+			*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) |= 0x04;
+		}
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_ENABLE_CK) {
+		if(arg == 0) {
+			*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xfffffff7;
+		}
+		else {
+			*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) |= 0x00000008;
+		}
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_ENABLE_AL) {
+		if(arg == 0) {
+			*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xefffffff;
+		}
+		else {
+			*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) |= 0x10000000;
+		}
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_CHKEY) {
+		*(volatile unsigned long *)(ALPHA_CHROMA_KEY) = arg;
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_TYPE) {
+		*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xfffffffc;
+		*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) |= (arg & 0x03);
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_ALPHA) {
+		*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xf0ffffff;
+		*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) |= (arg & 0x0f) << 24;
+		return 0;
+	}
+	return -EINVAL;
+}
+
+
+static void __init voya_hw_init(void)
+{
+	*(volatile unsigned long *)(ALPHA_FB_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP4 & 0x00ffffff);
+	change_mode(&voyafb_var);
+	*(volatile unsigned long *)(ALPHA_CHROMA_KEY) = 0;
+
+	*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xfffffff0;
+	*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) |= 0x01;
+
+}
+
+
+
+static struct fb_fix_screeninfo voyafb_fix __initdata = {
+	.id =		"VOYAGER ALPHA",
+	.type =		FB_TYPE_PACKED_PIXELS,
+	.visual =	FB_VISUAL_TRUECOLOR,
+	.accel =	FB_ACCEL_NONE,
+	.line_length =	XRES*2,
+	.smem_len =	MAX_FRAMEBUFFER_MEM_SIZE,
+};
+
+
+static void __init init_voya(struct fb_info *p, unsigned long addr)
+{
+	p->fix = voyafb_fix;
+	p->fix.smem_start = addr;
+
+	p->var = voyafb_var;
+
+	p->fbops = &voyafb_ops;
+	p->flags = FBINFO_FLAG_DEFAULT;
+	p->pseudo_palette = pseudo_palette;
+
+	fb_alloc_cmap(&p->cmap, 16, 0);
+
+	if (register_framebuffer(p) < 0) {
+		printk(KERN_ERR "VOYAGER GX ALPHA framebuffer failed to register\n");
+		return;
+	}
+
+	printk(KERN_INFO "fb%d: VOYAGER GX_ALPHA frame buffer (%dK RAM detected)\n",
+		p->node, p->fix.smem_len / 1024);
+
+	voya_hw_init();
+}
+
+int __init voyafb_init4(void)
+{
+	struct fb_info *p = &voyafb_info;
+	unsigned long addr, size;
+
+        addr = VOY_VRAM_TOP4;
+	size = MAX_FRAMEBUFFER_MEM_SIZE;
+	p->screen_base = ioremap((u_long)addr,
+				     ALLOCATED_FB_MEM_SIZE);
+	if (p->screen_base == NULL) {
+		return -ENOMEM;
+	}
+	init_voya(p, addr);
+	memset(p->screen_base, 0, MAX_FRAMEBUFFER_MEM_SIZE);
+
+	return 0;
+}
+
+static void __exit voyafb_exit(void)
+{
+	*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xfffffffb;
+}
+
+
+//------------------------------------------------------------------------------------
+static	int	change_mode(struct fb_var_screeninfo *var)
+{
+int	x,ali;
+
+	if((var->xres < 0)||(var->xres > XRES)||
+	   (var->yres < 0)||(var->yres > YRES)||
+	   (var->xres_virtual < 0)||(var->xres_virtual > XRES)||
+	   (var->yres_virtual < 0)||(var->yres_virtual > YRES)||
+	   (var->xoffset < 0)||(var->xoffset > XRES)||
+	   (var->yoffset < 0)||(var->yoffset > YRES))
+	{
+		return(-1);
+	}
+	x = var->xres_virtual * 2;
+	ali = x + (x % 16);
+	*(volatile unsigned long *)(ALPHA_FB_WIDTH) = (ali << 16) | ali;
+	*(volatile unsigned long *)(ALPHA_PLANE_TL) = (var->yoffset << 16) | 
+								  var->xoffset;
+	*(volatile unsigned long *)(ALPHA_PLANE_BR) =
+			((var->yoffset + var->yres - 1) << 16) |
+			 (var->xoffset + var->xres - 1);
+	return(0);
+}
+
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_crtcsrfb.c linux-2.6.17/drivers/video/voyager/voyager_crtcsrfb.c
--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_crtcsrfb.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/voyager/voyager_crtcsrfb.c	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,240 @@
+/*
+ *  linux/drivers/video/voyager_crtcsrfb.c -- voyager crt HWC frame buffer driver
+ *
+ *     Copyright (C) 2003 Renesas Technology Sales Co.,Ltd.
+ *     Copyright (C) 2003 Atom Create Engineering Co.,Ltd.
+ *     Anthor : Atom Create Engineering Co.,Ltd.
+ *                   Kenichi Sakuma
+ *
+ *  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.
+ *
+ * 1.00
+ *  - initial version (ks)
+ * 1.01
+ *  - Kernel 2.6 correspondence
+ */
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/mm.h>
+#include <linux/tty.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/delay.h>
+#include <linux/interrupt.h>
+#include <linux/fb.h>
+#include <linux/init.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach/voyagergx_reg.h>
+#include <video/voyager.h>
+
+static struct fb_info voyafb_info;
+
+int voyafb_init7(void);
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *info);
+static int voyafb_set_par(struct fb_info *info);
+static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+			     u_int transp, struct fb_info *info);
+static int voyafb_blank(int blank, struct fb_info *info);
+static int voyafb_ioctl(struct inode*, struct file*,
+			   unsigned int, unsigned long, struct fb_info*);
+static int  change_mode(struct fb_var_screeninfo *var);
+
+static	unsigned	int	pseudo_palette[16];
+
+static struct fb_ops voyafb_ops = {
+	.owner		= THIS_MODULE,
+	.fb_check_var	= voyafb_check_var,
+	.fb_set_par	= voyafb_set_par,
+	.fb_setcolreg	= voyafb_setcolreg,
+	.fb_blank	= voyafb_blank,
+	.fb_fillrect	= cfb_fillrect,
+	.fb_copyarea	= cfb_copyarea,
+	.fb_imageblit	= cfb_imageblit,
+	.fb_ioctl       = voyafb_ioctl,
+};
+
+static struct fb_var_screeninfo voyafb_var __initdata = {
+	.xres = CSR_XRES,
+	.yres = CSR_YRES,
+	.xres_virtual = CSR_XRES,
+	.yres_virtual = CSR_YRES,
+	.bits_per_pixel = CSR_BPP,
+	.red = { 11,5,0 },
+	.green = { 5,6,0 },
+	.blue = { 0,5,0 },
+	.height = -1,
+	.width = -1,
+	.vmode = FB_VMODE_NONINTERLACED,
+	.pixclock = 10000,
+	.left_margin = 16,
+	.right_margin = 16,
+	.upper_margin = 16,
+	.lower_margin = 16,
+	.hsync_len = 8,
+	.vsync_len = 8,
+};
+
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *info)
+{
+	if (var->xres > CSR_XRES || var->yres > CSR_YRES
+	    || var->xres_virtual > CSR_XRES || var->yres_virtual > CSR_YRES
+	    || var->bits_per_pixel != CSR_BPP
+	    || var->nonstd
+	    || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED)
+		return -EINVAL;
+
+	var->xres = var->xres_virtual = CSR_XRES;
+	var->yres = var->yres_virtual = CSR_YRES;
+	if(change_mode(var) != 0) {
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int voyafb_set_par(struct fb_info *info)
+{
+	info->fix.line_length = CSR_XRES/2;
+	info->fix.visual = FB_VISUAL_TRUECOLOR;
+
+	info->var.red.offset = 11;
+	info->var.green.offset = 5;
+	info->var.blue.offset = 0;
+	info->var.red.length = info->var.blue.length = 5;
+	info->var.green.length = 6;
+	return 0;
+}
+
+static int voyafb_blank(int blank, struct fb_info *info)
+{
+	return 1;
+}
+
+static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green,
+			     unsigned blue, unsigned transp,
+			     struct fb_info* info)
+{
+	red   >>= 11;
+	green >>= 11;
+	blue  >>= 10;
+
+	if (regno < 16)
+		((u32 *)(info->pseudo_palette))[regno] = ((red & 31) << 6) |
+                                                         ((green & 31) << 11) |
+                                                         ((blue & 63));
+	return 0;
+}
+
+static int voyafb_ioctl(struct inode* inode, struct file* file,
+			 unsigned int cmd, unsigned long arg,
+			 struct fb_info* info)
+{
+	if(cmd == VOYAGER_IOCTL_ENABLE) {
+		if(arg == 0) {
+			*(volatile unsigned long *)(CRT_HWC_ADDRESS) &= 0x7fffffff;
+		}
+		else {
+			*(volatile unsigned long *)(CRT_HWC_ADDRESS) |= 0x80000000;
+		}
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_COLOR_1) {
+		*(volatile unsigned long *)(CRT_HWC_COLOR_12) = arg;
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_COLOR_2) {
+		*(volatile unsigned long *)(CRT_HWC_COLOR_3) = arg;
+		return 0;
+	}
+	return -EINVAL;
+}
+
+
+static void __init voya_hw_init(void)
+{
+	*(volatile unsigned long *)(CRT_HWC_ADDRESS) = (VOY_VRAM_TOP5 & 0x00ffffff);
+	*(volatile unsigned long *)(CRT_HWC_COLOR_12) = 0x5555aaaa;
+	*(volatile unsigned long *)(CRT_HWC_COLOR_3) = 0x0000ffff;
+	change_mode(&voyafb_var);
+}
+
+
+
+static struct fb_fix_screeninfo voyafb_fix __initdata = {
+	.id =		"VOYAGER C_CSR",
+	.type =		FB_TYPE_PACKED_PIXELS,
+	.visual =	FB_VISUAL_TRUECOLOR,
+	.accel =	FB_ACCEL_NONE,
+	.line_length =	CSR_XRES/2,
+	.smem_len =	MAX_HWC_MEM_SIZE,
+};
+
+
+static void __init init_voya(struct fb_info *p, unsigned long addr)
+{
+	p->fix = voyafb_fix;
+	p->fix.smem_start = addr;
+
+	p->var = voyafb_var;
+
+	p->fbops = &voyafb_ops;
+	p->flags = FBINFO_FLAG_DEFAULT;
+	p->pseudo_palette = pseudo_palette;
+
+	fb_alloc_cmap(&p->cmap, 16, 0);
+
+	if (register_framebuffer(p) < 0) {
+		printk(KERN_ERR "VOYAGER GX CRT CSR framebuffer failed to register\n");
+		return;
+	}
+
+	printk(KERN_INFO "fb%d: VOYAGER GX_CRT CSR frame buffer (%dK RAM detected)\n",
+		p->node, p->fix.smem_len / 1024);
+
+	voya_hw_init();
+}
+
+int __init voyafb_init7(void)
+{
+	struct fb_info *p = &voyafb_info;
+	unsigned long addr, size;
+
+        addr = VOY_VRAM_TOP6;
+	size = MAX_HWC_MEM_SIZE;
+	p->screen_base = ioremap((u_long)addr,
+				     ALLOCATED_FB_MEM_SIZE);
+	if (p->screen_base == NULL) {
+		return -ENOMEM;
+	}
+	init_voya(p, addr);
+	memset(p->screen_base, 0, MAX_HWC_MEM_SIZE);
+
+	return 0;
+}
+
+static void __exit voyafb_exit(void)
+{
+	*(volatile unsigned long *)(CRT_HWC_ADDRESS) &= 0x7fffffff;
+}
+
+static	int	change_mode(struct fb_var_screeninfo *var)
+{
+	if((var->xoffset < 0)||(var->xoffset > XRES)||
+	   (var->yoffset < 0)||(var->yoffset > YRES))
+	{
+		return(-1);
+	}
+	*(volatile unsigned long *)(CRT_HWC_LOCATION) = (var->yoffset << 16) | 
+								      var->xoffset;
+	return(0);
+}
+
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_crtfb.c linux-2.6.17/drivers/video/voyager/voyager_crtfb.c
--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_crtfb.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/voyager/voyager_crtfb.c	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,240 @@
+/*
+ *  linux/drivers/video/voyager_crtfb.c -- voyager crt frame buffer driver
+ *
+ *     Copyright (C) 2003 Renesas Technology Sales Co.,Ltd.
+ *     Copyright (C) 2003 Atom Create Engineering Co.,Ltd.
+ *     Anthor : Atom Create Engineering Co.,Ltd.
+ *                   Kenichi Sakuma
+ *
+ *  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.
+ *
+ * 1.00
+ *  - initial version (ks)
+ * 1.01
+ *  - Kernel 2.6 correspondence
+ */
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/mm.h>
+#include <linux/tty.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/delay.h>
+#include <linux/interrupt.h>
+#include <linux/fb.h>
+#include <linux/init.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach/voyagergx_reg.h>
+#include <video/voyager.h>
+
+static struct fb_info voyafb_info;
+
+int voyafb_init6(void);
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *info);
+static int voyafb_set_par(struct fb_info *info);
+static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+			     u_int transp, struct fb_info *info);
+static int voyafb_blank(int blank, struct fb_info *info);
+static int voyafb_ioctl(struct inode*, struct file*,
+			   unsigned int, unsigned long, struct fb_info*);
+
+static	unsigned	int	pseudo_palette[16];
+
+static struct fb_ops voyafb_ops = {
+	.owner		= THIS_MODULE,
+	.fb_check_var	= voyafb_check_var,
+	.fb_set_par	= voyafb_set_par,
+	.fb_setcolreg	= voyafb_setcolreg,
+	.fb_blank	= voyafb_blank,
+	.fb_fillrect	= cfb_fillrect,
+	.fb_copyarea	= cfb_copyarea,
+	.fb_imageblit	= cfb_imageblit,
+	.fb_ioctl       = voyafb_ioctl,
+};
+
+static struct fb_var_screeninfo voyafb_var __initdata = {
+	.xres = XRES,
+	.yres = YRES,
+	.xres_virtual = XRES,
+	.yres_virtual = YRES,
+	.bits_per_pixel = BPP,
+	.red = { 11,5,0 },
+	.green = { 5,6,0 },
+	.blue = { 0,5,0 },
+	.height = -1,
+	.width = -1,
+	.vmode = FB_VMODE_NONINTERLACED,
+	.pixclock = 10000,
+	.left_margin = 16,
+	.right_margin = 16,
+	.upper_margin = 16,
+	.lower_margin = 16,
+	.hsync_len = 8,
+	.vsync_len = 8,
+};
+
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *info)
+{
+	if (var->xres > XRES || var->yres > YRES
+	    || var->xres_virtual > XRES || var->yres_virtual > YRES
+	    || var->bits_per_pixel != BPP
+	    || var->nonstd
+	    || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED)
+		return -EINVAL;
+
+	var->xres = var->xres_virtual = XRES;
+	var->yres = var->yres_virtual = YRES;
+
+	return 0;
+}
+
+static int voyafb_set_par(struct fb_info *info)
+{
+	info->fix.line_length = XRES*2;
+	info->fix.visual = FB_VISUAL_TRUECOLOR;
+
+	info->var.red.offset = 11;
+	info->var.green.offset = 5;
+	info->var.blue.offset = 0;
+	info->var.red.length = info->var.blue.length = 5;
+	info->var.green.length = 6;
+	return 0;
+}
+
+static int voyafb_blank(int blank, struct fb_info *info)
+{
+	return 1;
+}
+
+static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green,
+			     unsigned blue, unsigned transp,
+			     struct fb_info* info)
+{
+	red   >>= 11;
+	green >>= 11;
+	blue  >>= 10;
+
+	if (regno < 16)
+		((u32 *)(info->pseudo_palette))[regno] = ((red & 31) << 6) |
+                                                         ((green & 31) << 11) |
+                                                         ((blue & 63));
+	return 0;
+}
+
+static int voyafb_ioctl(struct inode* inode, struct file* file,
+			 unsigned int cmd, unsigned long arg,
+			 struct fb_info* info)
+{
+	if(cmd == VOYAGER_IOCTL_ENABLE) {
+		if(arg == 0) {
+			*(volatile unsigned long *)(CRT_DISPLAY_CTRL) &= 0xfffffffb;
+		}
+		else {
+			*(volatile unsigned long *)(CRT_DISPLAY_CTRL) |= 0x04;
+		}
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_TYPE) {
+		*(volatile unsigned long *)(CRT_DISPLAY_CTRL) &= 0xfffffffc;
+		*(volatile unsigned long *)(CRT_DISPLAY_CTRL) |= (arg & 0x03);
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_SELECT) {
+		if(arg == 0) {
+			*(volatile unsigned long *)(CRT_DISPLAY_CTRL) &= 0xfffffdff;
+		}
+		else {
+			*(volatile unsigned long *)(CRT_DISPLAY_CTRL) |= 0x00000200;
+		}
+		return 0;
+	}
+	return -EINVAL;
+}
+
+
+static void __init voya_hw_init(void)
+{
+int	i;
+
+	*(volatile unsigned long *)(CRT_DISPLAY_CTRL) &= 0xfffffcf0;
+	*(volatile unsigned long *)(CRT_FB_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP6 & 0x00ffffff);
+	*(volatile unsigned long *)(CRT_FB_WIDTH) = 0x5000500;
+	*(volatile unsigned long *)(CRT_HORIZONTAL_TOTAL) = 0x033f027f;
+	*(volatile unsigned long *)(CRT_HORIZONTAL_SYNC) = 0x4a028b;
+	*(volatile unsigned long *)(CRT_VERTICAL_TOTAL) = 0x20c01df;
+	*(volatile unsigned long *)(CRT_VERTICAL_SYNC) = 0x201e9;
+	*(volatile unsigned long *)(CRT_DISPLAY_CTRL) |= 0x70000105;
+	//palet initialize
+	for(i=0;i<256;i++) {
+		*(volatile unsigned long *)(CRT_PALETTE_RAM+(i*4)) = (i << 16)+(i << 8)+i;
+	}
+}
+
+
+
+static struct fb_fix_screeninfo voyafb_fix __initdata = {
+	.id =		"VOYAGER CRT",
+	.type =		FB_TYPE_PACKED_PIXELS,
+	.visual =	FB_VISUAL_TRUECOLOR,
+	.accel =	FB_ACCEL_NONE,
+	.line_length =	XRES*2,
+	.smem_len =	MAX_FRAMEBUFFER_MEM_SIZE,
+};
+
+
+static void __init init_voya(struct fb_info *p, unsigned long addr)
+{
+	p->fix = voyafb_fix;
+	p->fix.smem_start = addr;
+
+	p->var = voyafb_var;
+
+	p->fbops = &voyafb_ops;
+	p->flags = FBINFO_FLAG_DEFAULT;
+	p->pseudo_palette = pseudo_palette;
+
+	fb_alloc_cmap(&p->cmap, 16, 0);
+
+	if (register_framebuffer(p) < 0) {
+		printk(KERN_ERR "VOYAGER GX CRT framebuffer failed to register\n");
+		return;
+	}
+
+	printk(KERN_INFO "fb%d: VOYAGER GX_CRT frame buffer (%dK RAM detected)\n",
+		p->node, p->fix.smem_len / 1024);
+
+	voya_hw_init();
+}
+
+int __init voyafb_init6(void)
+{
+	struct fb_info *p = &voyafb_info;
+	unsigned long addr, size;
+
+        addr = VOY_VRAM_TOP6;
+	size = MAX_FRAMEBUFFER_MEM_SIZE;
+	p->screen_base = ioremap((u_long)addr,
+				     ALLOCATED_FB_MEM_SIZE);
+	if (p->screen_base == NULL) {
+		return -ENOMEM;
+	}
+	init_voya(p, addr);
+	memset(p->screen_base, 0, MAX_FRAMEBUFFER_MEM_SIZE);
+
+	return 0;
+}
+
+static void __exit voyafb_exit(void)
+{
+	*(volatile unsigned long *)(CRT_DISPLAY_CTRL) &= 0xfffffffb;
+}
+
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_gxfb.c linux-2.6.17/drivers/video/voyager/voyager_gxfb.c
--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_gxfb.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/voyager/voyager_gxfb.c	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,441 @@
+/*
+ *  linux/drivers/video/voyager_gxfb.c -- voyager panel frame buffer driver
+ *
+ *     Copyright (C) 2003 Renesas Technology Sales Co.,Ltd.
+ *     Copyright (C) 2003 Atom Create Engineering Co.,Ltd.
+ *     Anthor : Atom Create Engineering Co.,Ltd.
+ *                   Kenichi Sakuma
+ *
+ *  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.
+ *
+ * 1.00
+ *  - initial version (ks)
+ * 1.01
+ *  - Kernel 2.6 correspondence
+ */
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/mm.h>
+#include <linux/tty.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/delay.h>
+#include <linux/interrupt.h>
+#include <linux/fb.h>
+#include <linux/init.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach/voyagergx_reg.h>
+#include <video/voyager.h>
+
+#ifdef CONFIG_FB_VOYAGER_GX_MP
+#define	MAX_VRAM	MAX_FRAMEBUFFER_MEM_SIZE
+#else
+#define	MAX_VRAM	1024*768*4
+#endif
+
+#ifdef CONFIG_FB_VOYAGER_GX_MP
+extern int voyafb_init2(void);
+extern int voyafb_init3(void);
+extern int voyafb_init4(void);
+extern int voyafb_init5(void);
+extern int voyafb_init6(void);
+extern int voyafb_init7(void);
+#endif
+
+static struct fb_info voyafb_info;
+
+static int voyafb_init(void);
+static int voyafbmem_init(void);
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+						struct fb_info *info);
+static int voyafb_set_par(struct fb_info *info);
+static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+					u_int transp, struct fb_info *info);
+static int voyafb_blank(int blank, struct fb_info *info);
+static int voyafb_ioctl(struct inode*, struct file*,
+				unsigned int, unsigned long, struct fb_info*);
+static int voyafb_pan_display(struct fb_var_screeninfo *var,
+						struct fb_info *info);
+static void vsyncwait(int delay);
+static int change_mode(void);
+
+typedef	struct {
+	__u32	xres;
+	__u32	yres;
+	__u32	clock;
+	__u32	h_total;
+	__u32	h_sync;
+	__u32	v_total;
+	__u32	v_sync;
+} VOYA_CRT_DATA;
+
+static	VOYA_CRT_DATA	clock_data[] = {
+	{ 640, 480, 0x10021801, 0x33f027f, 0x4a028b, 0x20c01df, 0x201e9, },
+	{ 800, 600, 0x023a1801, 0x454031f, 0x9b0350, 0x2730257, 0x40258, },
+	{1024, 768, 0x283a1801, 0x5460400, 0x800438, 0x3340300, 0x3031b, },
+	{-1, -1, -1, -1, -1, -1, -1, },
+};
+static int clock_data_index = 0;
+static int clock_data_bpp = BPP;
+
+static unsigned int pseudo_palette[17];
+
+static struct fb_ops voyafb_ops = {
+	.owner		= THIS_MODULE,
+	.fb_check_var	= voyafb_check_var,
+	.fb_set_par	= voyafb_set_par,
+	.fb_setcolreg	= voyafb_setcolreg,
+	.fb_blank	= voyafb_blank,
+	.fb_fillrect	= cfb_fillrect,
+	.fb_copyarea	= cfb_copyarea,
+	.fb_imageblit	= cfb_imageblit,
+	.fb_ioctl       = voyafb_ioctl,
+	.fb_pan_display = voyafb_pan_display,
+};
+
+static struct fb_var_screeninfo voyafb_var __initdata = {
+	.xres = XRES,
+	.yres = YRES,
+	.xres_virtual = XRES,
+	.yres_virtual = YRES,
+	.bits_per_pixel = BPP,
+	.red = { 11,5,0 },
+	.green = { 5,6,0 },
+	.blue = { 0,5,0 },
+	.height = -1,
+	.width = -1,
+	.vmode = FB_VMODE_NONINTERLACED,
+	.pixclock = 10000,
+	.left_margin = 0,
+	.right_margin = 0,
+	.upper_margin = 0,
+	.lower_margin = 0,
+	.hsync_len = 0,
+	.vsync_len = 0,
+};
+
+static int voyafb_pan_display(struct fb_var_screeninfo *var,
+				struct fb_info *info)
+{
+	info->var.xoffset = 0;
+	info->var.yoffset = 0;
+	info->var.vmode &= ~FB_VMODE_YWRAP;
+
+	return 0;
+}
+
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *info)
+{
+#ifndef CONFIG_FB_VOYAGER_GX_MP
+	int	i;
+#endif
+
+#ifdef CONFIG_FB_VOYAGER_GX_MP
+	if (var->xres > XRES || var->yres > YRES
+	    || var->xres_virtual > XRES || var->yres_virtual > YRES
+	    || var->bits_per_pixel != BPP
+	    || var->nonstd
+	    || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED)
+		return -EINVAL;
+
+	var->xres = var->xres_virtual = XRES;
+	var->yres = var->yres_virtual = YRES;
+#else
+	if ((var->bits_per_pixel != 8)  &&
+	    (var->bits_per_pixel != 16) &&
+	    (var->bits_per_pixel != 32))
+		return -EINVAL;
+
+	for (i=0; clock_data[i].xres != -1; i++)
+		if ((clock_data[i].xres == var->xres) &&
+		    (clock_data[i].yres == var->yres))
+			break;
+
+	if (clock_data[i].xres == -1)
+		return -EINVAL;
+
+	clock_data_index = i;
+	clock_data_bpp = var->bits_per_pixel;
+#endif
+
+	return 0;
+}
+
+static int voyafb_set_par(struct fb_info *info)
+{
+#ifdef CONFIG_FB_VOYAGER_GX_MP
+	info->fix.line_length = XRES * 2;
+	info->fix.visual = FB_VISUAL_TRUECOLOR;
+
+	info->var.bits_per_pixel = 16;
+	info->var.red.offset = 11;
+	info->var.green.offset = 5;
+	info->var.blue.offset = 0;
+	info->var.red.length = info->var.blue.length = 5;
+	info->var.green.length = 6;
+#else
+	if (clock_data_bpp == 8) {
+		info->fix.line_length = clock_data[clock_data_index].xres;
+		info->var.transp.offset  = 0;
+		info->var.transp.length  = 0;
+		info->var.red.length = info->var.blue.length = info->var.green.length = 8;
+		info->var.red.offset = info->var.blue.offset = info->var.green.offset = 0;
+		info->var.bits_per_pixel = 8;
+		info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
+	} else if (clock_data_bpp == 16) {
+		info->fix.line_length = clock_data[clock_data_index].xres * 2;
+		info->var.transp.offset  = 0;
+		info->var.transp.length  = 0;
+		info->var.red.length     = 5;
+		info->var.blue.length    = 5;
+		info->var.green.length   = 6;
+		info->var.red.offset     = 11;
+		info->var.green.offset   = 5;
+		info->var.blue.offset    = 0;
+		info->var.bits_per_pixel = 16;
+		info->fix.visual = FB_VISUAL_TRUECOLOR;
+	} else {
+		info->fix.line_length = clock_data[clock_data_index].xres * 4;
+		info->var.transp.offset  = 24;
+		info->var.transp.length  = 8;
+		info->var.red.length     = 8;
+		info->var.blue.length    = 8;
+		info->var.green.length   = 8;
+		info->var.red.offset     = 16;
+		info->var.green.offset   = 8;
+		info->var.blue.offset    = 0;
+		info->var.bits_per_pixel = 32;
+		info->fix.visual = FB_VISUAL_TRUECOLOR;
+	}
+	change_mode();
+#endif
+
+	return 0;
+}
+
+static int voyafb_blank(int blank, struct fb_info *info)
+{
+	return 0;
+}
+
+static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green,
+			     unsigned blue, unsigned transp,
+			     struct fb_info* info)
+{
+	int	*palette;
+
+	if (regno > 256)
+		return 1;
+
+	palette = (int *)PANEL_PALETTE_RAM;
+	palette[regno] = (red & 0xff) << 16 | (green & 0xff) << 8 | (blue & 0xff);
+	((u32 *)(info->pseudo_palette))[regno] = (red & 0xff) << 16 | (green & 0xff) << 8 | (blue & 0xff);
+
+	return 0;
+}
+
+static int voyafb_ioctl(struct inode* inode, struct file* file,
+			 unsigned int cmd, unsigned long arg,
+			 struct fb_info* info)
+{
+	static	long	*po;
+	int	*wk;
+
+	if (cmd == VOYAGER_IOCTL_DEBUG_ADD) {
+		po = (long *)arg;
+		return 0;
+	} else if (cmd == VOYAGER_IOCTL_DEBUG_GET) {
+		wk = (int *)arg;
+		*wk = *po;
+		return 0;
+	} else if (cmd == VOYAGER_IOCTL_DEBUG_PUT) {
+		*po = arg;
+		return 0;
+	} else if (cmd == VOYAGER_IOCTL_ENABLE) {
+		if (arg == 0)
+			*(volatile unsigned long *)(PANEL_DISPLAY_CTRL) &= 0xfffffffb;
+		else
+			*(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x04;
+		return 0;
+	} else if (cmd == VOYAGER_IOCTL_TYPE) {
+		*(volatile unsigned long *)(PANEL_DISPLAY_CTRL) &= 0xfffffffc;
+		*(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= (arg & 0x03);
+		return 0;
+	}
+
+	return -EINVAL;
+}
+
+static void __init voya_hw_init(void)
+{
+	int	i;
+
+	//DAC enable
+	*(volatile unsigned long *)(MISC_CTRL) &= 0xffffefff;
+
+	//Power Gate
+	*(volatile unsigned long *)(POWER_MODE0_GATE) |= 0x7f;
+	*(volatile unsigned long *)(POWER_MODE1_GATE) |= 0x7f;
+
+	//Power Clock
+	*(volatile unsigned long *)(POWER_MODE0_CLOCK) = 0x10021801;
+	*(volatile unsigned long *)(POWER_MODE1_CLOCK) = 0x10021801;
+
+	//Power Mode Control
+	*(volatile unsigned long *)(POWER_MODE_CTRL) = 0;
+
+	//Miscellaneous Timing
+	*(volatile unsigned long *)(PANEL_DISPLAY_CTRL) &= 0xfffffffb;
+	*(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) &= 0xfffffffb;
+	*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xfffffffb;
+	*(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xfffffffb;
+	*(volatile unsigned long *)(PANEL_HWC_ADDRESS) &= 0x7fffffff;
+	*(volatile unsigned long *)(CRT_DISPLAY_CTRL) &= 0xfffffffb;
+	*(volatile unsigned long *)(CRT_HWC_ADDRESS) &= 0x7fffffff;
+
+	change_mode();
+
+	vsyncwait(4);
+	*(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x1000000;
+	vsyncwait(4);
+	*(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x3000000;
+	vsyncwait(4);
+	*(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x7000000;
+
+	//palet initialize
+	for (i=0; i<256; i++) {
+		*(volatile unsigned long *)(PANEL_PALETTE_RAM+(i*4)) = (i << 16)+(i << 8)+i;
+	}
+}
+
+static struct fb_fix_screeninfo voyafb_fix __initdata = {
+	.id =		"VOYAGER PANEL",
+	.type =		FB_TYPE_PACKED_PIXELS,
+	.visual =	FB_VISUAL_TRUECOLOR,
+	.accel =	FB_ACCEL_NONE,
+	.line_length =	XRES * (BPP / 8),
+	.smem_len =	MAX_VRAM,
+};
+
+
+static void __init init_voya(struct fb_info *p, unsigned long addr)
+{
+	p->fix = voyafb_fix;
+	p->fix.smem_start = addr;
+
+	p->var = voyafb_var;
+
+	p->fbops = &voyafb_ops;
+	p->flags = FBINFO_DEFAULT;
+	p->pseudo_palette = pseudo_palette;
+
+	fb_alloc_cmap(&p->cmap, 16, 0);
+
+	if (register_framebuffer(p) < 0) {
+		printk(KERN_ERR "VOYAGER GX PANEL framebuffer failed to register\n");
+		return;
+	}
+
+	printk(KERN_INFO "fb%d: VOYAGER GX_PANEL frame buffer (%dK RAM detected)\n",
+		p->node, p->fix.smem_len / 1024);
+
+	voya_hw_init();
+}
+
+static int __init voyafb_init(void)
+{
+	struct fb_info *p = &voyafb_info;
+	unsigned long addr;
+
+	if (fb_get_options("voyager_panel_fb", NULL))
+		return -ENODEV;
+
+        addr = VOY_VRAM_TOP0;
+	p->screen_base = ioremap((u_long)addr, ALLOCATED_FB_MEM_SIZE);
+	if (p->screen_base == NULL)
+		return -ENOMEM;
+
+	init_voya(p, addr);
+
+	return 0;
+}
+
+static void __exit voyafb_exit(void)
+{
+	*(volatile unsigned long *)(PANEL_DISPLAY_CTRL) &= 0xfffffffb;
+}
+
+static int __init voyafbmem_init(void)
+{
+	voyafb_init();
+#ifdef CONFIG_FB_VOYAGER_GX_MP
+	voyafb_init2();
+	voyafb_init3();
+	voyafb_init4();
+	voyafb_init5();
+	voyafb_init6();
+	voyafb_init7();
+#endif
+
+	return 0;
+}
+
+module_init(voyafbmem_init);
+
+static void vsyncwait(int delay)
+{
+	int	reg;
+
+	while(delay-- > 0) {
+		do {
+			reg = *(volatile unsigned long *)(CMD_INTPR_STATUS);
+		} while(reg & 0x1000);
+		do {
+			reg = *(volatile unsigned long *)(CMD_INTPR_STATUS);
+		} while(!reg & 0x1000);
+	}
+}
+
+static int change_mode()
+{
+	int	size,xres,yres;
+
+	xres = clock_data[clock_data_index].xres;
+	yres = clock_data[clock_data_index].yres;
+	size = clock_data_bpp / 8;
+
+	//Power Clock
+	*(volatile unsigned long *)(POWER_MODE0_CLOCK) = clock_data[clock_data_index].clock;
+	*(volatile unsigned long *)(POWER_MODE1_CLOCK) = clock_data[clock_data_index].clock;
+	//PANEL register SET
+	*(volatile unsigned long *)(PANEL_FB_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP0 & 0x00ffffff);
+	*(volatile unsigned long *)(PANEL_FB_WIDTH) = (xres * size) << 16 | (xres * size);
+	*(volatile unsigned long *)(PANEL_WINDOW_WIDTH) = (xres << 16);
+	*(volatile unsigned long *)(PANEL_WINDOW_HEIGHT) = (yres << 16);
+	*(volatile unsigned long *)(PANEL_PLANE_TL) = 0;
+	*(volatile unsigned long *)(PANEL_PLANE_BR) = ((yres-1) << 16) | (xres-1);
+	*(volatile unsigned long *)(PANEL_HORIZONTAL_TOTAL) = clock_data[clock_data_index].h_total;
+	*(volatile unsigned long *)(PANEL_HORIZONTAL_SYNC) = clock_data[clock_data_index].h_sync;
+	*(volatile unsigned long *)(PANEL_VERTICAL_TOTAL) = clock_data[clock_data_index].v_total;
+	*(volatile unsigned long *)(PANEL_VERTICAL_SYNC) = clock_data[clock_data_index].v_sync;
+
+	*(volatile unsigned long *)(PANEL_DISPLAY_CTRL) &= 0xffffcea8;
+	if (size == 1)
+		*(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x3104;
+	else if (size == 2)
+		*(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x3105;
+	else
+		*(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x3106;
+
+	return(0);
+}
+
+MODULE_LICENSE("GPL");
+
diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_panelcsrfb.c linux-2.6.17/drivers/video/voyager/voyager_panelcsrfb.c
--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_panelcsrfb.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/voyager/voyager_panelcsrfb.c	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,240 @@
+/*
+ *  linux/drivers/video/voyager_panelcsrfb.c -- voyager panel HWC frame buffer driver
+ *
+ *     Copyright (C) 2003 Renesas Technology Sales Co.,Ltd.
+ *     Copyright (C) 2003 Atom Create Engineering Co.,Ltd.
+ *     Anthor : Atom Create Engineering Co.,Ltd.
+ *                   Kenichi Sakuma
+ *
+ *  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.
+ *
+ * 1.00
+ *  - initial version (ks)
+ * 1.01
+ *  - Kernel 2.6 correspondence
+ */
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/mm.h>
+#include <linux/tty.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/delay.h>
+#include <linux/interrupt.h>
+#include <linux/fb.h>
+#include <linux/init.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach/voyagergx_reg.h>
+#include <video/voyager.h>
+
+static struct fb_info voyafb_info;
+
+int voyafb_init5(void);
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *info);
+static int voyafb_set_par(struct fb_info *info);
+static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+			     u_int transp, struct fb_info *info);
+static int voyafb_blank(int blank, struct fb_info *info);
+static int voyafb_ioctl(struct inode*, struct file*,
+			   unsigned int, unsigned long, struct fb_info*);
+static int  change_mode(struct fb_var_screeninfo *var);
+
+static	unsigned	int	pseudo_palette[16];
+
+static struct fb_ops voyafb_ops = {
+	.owner		= THIS_MODULE,
+	.fb_check_var	= voyafb_check_var,
+	.fb_set_par	= voyafb_set_par,
+	.fb_setcolreg	= voyafb_setcolreg,
+	.fb_blank	= voyafb_blank,
+	.fb_fillrect	= cfb_fillrect,
+	.fb_copyarea	= cfb_copyarea,
+	.fb_imageblit	= cfb_imageblit,
+	.fb_ioctl       = voyafb_ioctl,
+};
+
+static struct fb_var_screeninfo voyafb_var __initdata = {
+	.xres = CSR_XRES,
+	.yres = CSR_YRES,
+	.xres_virtual = CSR_XRES,
+	.yres_virtual = CSR_YRES,
+	.bits_per_pixel = CSR_BPP,
+	.red = { 11,5,0 },
+	.green = { 5,6,0 },
+	.blue = { 0,5,0 },
+	.height = -1,
+	.width = -1,
+	.vmode = FB_VMODE_NONINTERLACED,
+	.pixclock = 10000,
+	.left_margin = 16,
+	.right_margin = 16,
+	.upper_margin = 16,
+	.lower_margin = 16,
+	.hsync_len = 8,
+	.vsync_len = 8,
+};
+
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *info)
+{
+	if (var->xres > CSR_XRES || var->yres > CSR_YRES
+	    || var->xres_virtual > CSR_XRES || var->yres_virtual > CSR_YRES
+	    || var->bits_per_pixel != CSR_BPP
+	    || var->nonstd
+	    || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED)
+		return -EINVAL;
+
+	var->xres = var->xres_virtual = CSR_XRES;
+	var->yres = var->yres_virtual = CSR_YRES;
+	if(change_mode(var) != 0) {
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int voyafb_set_par(struct fb_info *info)
+{
+	info->fix.line_length = CSR_XRES/2;
+	info->fix.visual = FB_VISUAL_TRUECOLOR;
+
+	info->var.red.offset = 11;
+	info->var.green.offset = 5;
+	info->var.blue.offset = 0;
+	info->var.red.length = info->var.blue.length = 5;
+	info->var.green.length = 6;
+	return 0;
+}
+
+static int voyafb_blank(int blank, struct fb_info *info)
+{
+	return 1;
+}
+
+static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green,
+			     unsigned blue, unsigned transp,
+			     struct fb_info* info)
+{
+	red   >>= 11;
+	green >>= 11;
+	blue  >>= 10;
+
+	if (regno < 16)
+		((u32 *)(info->pseudo_palette))[regno] = ((red & 31) << 6) |
+                                                         ((green & 31) << 11) |
+                                                         ((blue & 63));
+	return 0;
+}
+
+static int voyafb_ioctl(struct inode* inode, struct file* file,
+			 unsigned int cmd, unsigned long arg,
+			 struct fb_info* info)
+{
+	if(cmd == VOYAGER_IOCTL_ENABLE) {
+		if(arg == 0) {
+			*(volatile unsigned long *)(PANEL_HWC_ADDRESS) &= 0x7fffffff;
+		}
+		else {
+			*(volatile unsigned long *)(PANEL_HWC_ADDRESS) |= 0x80000000;
+		}
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_COLOR_1) {
+		*(volatile unsigned long *)(PANEL_HWC_COLOR_12) = arg;
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_COLOR_2) {
+		*(volatile unsigned long *)(PANEL_HWC_COLOR_3) = arg;
+		return 0;
+	}
+	return -EINVAL;
+}
+
+
+static void __init voya_hw_init(void)
+{
+	*(volatile unsigned long *)(PANEL_HWC_ADDRESS) = (VOY_VRAM_TOP5 & 0x00ffffff);
+	*(volatile unsigned long *)(PANEL_HWC_COLOR_12) = 0x5555aaaa;
+	*(volatile unsigned long *)(PANEL_HWC_COLOR_3) = 0x0000ffff;
+	change_mode(&voyafb_var);
+}
+
+
+
+static struct fb_fix_screeninfo voyafb_fix __initdata = {
+	.id =		"VOYAGER P_CSR",
+	.type =		FB_TYPE_PACKED_PIXELS,
+	.visual =	FB_VISUAL_TRUECOLOR,
+	.accel =	FB_ACCEL_NONE,
+	.line_length =	CSR_XRES/2,
+	.smem_len =	MAX_HWC_MEM_SIZE,
+};
+
+
+static void __init init_voya(struct fb_info *p, unsigned long addr)
+{
+	p->fix = voyafb_fix;
+	p->fix.smem_start = addr;
+
+	p->var = voyafb_var;
+
+	p->fbops = &voyafb_ops;
+	p->flags = FBINFO_FLAG_DEFAULT;
+	p->pseudo_palette = pseudo_palette;
+
+	fb_alloc_cmap(&p->cmap, 16, 0);
+
+	if (register_framebuffer(p) < 0) {
+		printk(KERN_ERR "VOYAGER GX PANEL CSR framebuffer failed to register\n");
+		return;
+	}
+
+	printk(KERN_INFO "fb%d: VOYAGER GX_PANEL CSR frame buffer (%dK RAM detected)\n",
+		p->node, p->fix.smem_len / 1024);
+
+	voya_hw_init();
+}
+
+int __init voyafb_init5(void)
+{
+	struct fb_info *p = &voyafb_info;
+	unsigned long addr, size;
+
+        addr = VOY_VRAM_TOP6;
+	size = MAX_HWC_MEM_SIZE;
+	p->screen_base = ioremap((u_long)addr,
+				     ALLOCATED_FB_MEM_SIZE);
+	if (p->screen_base == NULL) {
+		return -ENOMEM;
+	}
+	init_voya(p, addr);
+	memset(p->screen_base, 0, MAX_HWC_MEM_SIZE);
+
+	return 0;
+}
+
+static void __exit voyafb_exit(void)
+{
+	*(volatile unsigned long *)(PANEL_HWC_ADDRESS) &= 0x7fffffff;
+}
+
+static	int	change_mode(struct fb_var_screeninfo *var)
+{
+	if((var->xoffset < 0)||(var->xoffset > XRES)||
+	   (var->yoffset < 0)||(var->yoffset > YRES))
+	{
+		return(-1);
+	}
+	*(volatile unsigned long *)(PANEL_HWC_LOCATION) = (var->yoffset << 16) | 
+								      var->xoffset;
+	return(0);
+}
+
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_valphafb.c linux-2.6.17/drivers/video/voyager/voyager_valphafb.c
--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_valphafb.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/voyager/voyager_valphafb.c	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,286 @@
+/*
+ *  linux/drivers/video/voyager_valphafb.c -- voyager video alpha frame buffer driver
+ *
+ *     Copyright (C) 2003 Renesas Technology Sales Co.,Ltd.
+ *     Copyright (C) 2003 Atom Create Engineering Co.,Ltd.
+ *     Anthor : Atom Create Engineering Co.,Ltd.
+ *                   Kenichi Sakuma
+ *
+ *  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.
+ *
+ * 1.00
+ *  - initial version (ks)
+ * 1.01
+ *  - Kernel 2.6 correspondence
+ */
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/mm.h>
+#include <linux/tty.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/delay.h>
+#include <linux/interrupt.h>
+#include <linux/fb.h>
+#include <linux/init.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach/voyagergx_reg.h>
+#include <video/voyager.h>
+
+static struct fb_info voyafb_info;
+
+int voyafb_init3(void);
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *info);
+static int voyafb_set_par(struct fb_info *info);
+static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+			     u_int transp, struct fb_info *info);
+static int voyafb_blank(int blank, struct fb_info *info);
+static int voyafb_ioctl(struct inode*, struct file*,
+			   unsigned int, unsigned long, struct fb_info*);
+static int  change_mode(struct fb_var_screeninfo *var);
+
+static	unsigned	int	pseudo_palette[16];
+
+static struct fb_ops voyafb_ops = {
+	.owner		= THIS_MODULE,
+	.fb_check_var	= voyafb_check_var,
+	.fb_set_par	= voyafb_set_par,
+	.fb_setcolreg	= voyafb_setcolreg,
+	.fb_blank	= voyafb_blank,
+	.fb_fillrect	= cfb_fillrect,
+	.fb_copyarea	= cfb_copyarea,
+	.fb_imageblit	= cfb_imageblit,
+	.fb_ioctl       = voyafb_ioctl,
+};
+
+static struct fb_var_screeninfo voyafb_var __initdata = {
+	.xres = XRES,
+	.yres = YRES,
+	.xres_virtual = XRES,
+	.yres_virtual = YRES,
+	.bits_per_pixel = BPP,
+	.red = { 11,5,0 },
+	.green = { 5,6,0 },
+	.blue = { 0,5,0 },
+	.height = -1,
+	.width = -1,
+	.vmode = FB_VMODE_NONINTERLACED,
+	.pixclock = 10000,
+	.left_margin = 16,
+	.right_margin = 16,
+	.upper_margin = 16,
+	.lower_margin = 16,
+	.hsync_len = 8,
+	.vsync_len = 8,
+};
+
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *info)
+{
+	if (var->xres > XRES || var->yres > YRES
+	    || var->xres_virtual > XRES || var->yres_virtual > YRES
+	    || var->bits_per_pixel != BPP
+	    || var->nonstd
+	    || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED)
+		return -EINVAL;
+
+	var->xres_virtual = XRES;
+	var->yres_virtual = YRES;
+
+	if(change_mode(var) != 0) {
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int voyafb_set_par(struct fb_info *info)
+{
+	info->fix.line_length = XRES*2;
+	info->fix.visual = FB_VISUAL_TRUECOLOR;
+
+	info->var.red.offset = 11;
+	info->var.green.offset = 5;
+	info->var.blue.offset = 0;
+	info->var.red.length = info->var.blue.length = 5;
+	info->var.green.length = 6;
+	return 0;
+}
+
+static int voyafb_blank(int blank, struct fb_info *info)
+{
+	return 1;
+}
+
+static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green,
+			     unsigned blue, unsigned transp,
+			     struct fb_info* info)
+{
+	red   >>= 11;
+	green >>= 11;
+	blue  >>= 10;
+
+	if (regno < 16)
+		((u32 *)(info->pseudo_palette))[regno] = ((red & 31) << 6) |
+                                                         ((green & 31) << 11) |
+                                                         ((blue & 63));
+	return 0;
+}
+
+static int voyafb_ioctl(struct inode* inode, struct file* file,
+			 unsigned int cmd, unsigned long arg,
+			 struct fb_info* info)
+{
+	if(cmd == VOYAGER_IOCTL_ENABLE) {
+		if(arg == 0) {
+			*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xfffffffb;
+		}
+		else {
+			*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= 0x04;
+		}
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_ENABLE_CK) {
+		if(arg == 0) {
+			*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xfffffff7;
+		}
+		else {
+			*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= 0x08;
+		}
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_ENABLE_AL) {
+		if(arg == 0) {
+			*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xefffffff;
+		}
+		else {
+			*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= 0x10000000;
+		}
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_SCALE) {
+		*(volatile unsigned long *)(VIDEO_ALPHA_SCALE) = arg;
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_CHKEY) {
+		*(volatile unsigned long *)(VIDEO_ALPHA_CHROMA_KEY) = arg;
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_TYPE) {
+		*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xfffffffc;
+		*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= (arg & 0x03);
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_ALPHA) {
+		*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xf0ffffff;
+		*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= (arg & 0x0f) << 24;
+		return 0;
+	}
+	return -EINVAL;
+}
+
+static void __init voya_hw_init(void)
+{
+	*(volatile unsigned long *)(VIDEO_ALPHA_FB_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP3 & 0x00ffffff);
+	change_mode(&voyafb_var);
+	*(volatile unsigned long *)(VIDEO_ALPHA_SCALE) = 0;
+	*(volatile unsigned long *)(VIDEO_ALPHA_CHROMA_KEY) = 0;
+
+	*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xfffffff0;
+//	*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= 0x05;
+	*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= 0x01;
+}
+
+static struct fb_fix_screeninfo voyafb_fix __initdata = {
+	.id =		"VOYAGER VALPHA",
+	.type =		FB_TYPE_PACKED_PIXELS,
+	.visual =	FB_VISUAL_TRUECOLOR,
+	.accel =	FB_ACCEL_NONE,
+	.line_length =	XRES*2,
+	.smem_len =	MAX_FRAMEBUFFER_MEM_SIZE,
+};
+
+
+static void __init init_voya(struct fb_info *p, unsigned long addr)
+{
+	p->fix = voyafb_fix;
+	p->fix.smem_start = addr;
+
+	p->var = voyafb_var;
+
+	p->fbops = &voyafb_ops;
+	p->flags = FBINFO_FLAG_DEFAULT;
+	p->pseudo_palette = pseudo_palette;
+
+	fb_alloc_cmap(&p->cmap, 16, 0);
+
+	if (register_framebuffer(p) < 0) {
+		printk(KERN_ERR "VOYAGER GX VIDEO ALPHA framebuffer failed to register\n");
+		return;
+	}
+
+	printk(KERN_INFO "fb%d: VOYAGER GX_VIDEO_ALPHA frame buffer (%dK RAM detected)\n",
+		p->node, p->fix.smem_len / 1024);
+
+	voya_hw_init();
+}
+
+int __init voyafb_init3(void)
+{
+	struct fb_info *p = &voyafb_info;
+	unsigned long addr, size;
+
+        addr = VOY_VRAM_TOP3;
+	size = MAX_FRAMEBUFFER_MEM_SIZE;
+	p->screen_base = ioremap((u_long)addr,
+				     ALLOCATED_FB_MEM_SIZE);
+	if (p->screen_base == NULL) {
+		return -ENOMEM;
+	}
+	init_voya(p, addr);
+	memset(p->screen_base, 0, MAX_FRAMEBUFFER_MEM_SIZE);
+
+	return 0;
+}
+
+static void __exit voyafb_exit(void)
+{
+	*(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xfffffffb;
+}
+
+
+//------------------------------------------------------------------------------------
+static	int	change_mode(struct fb_var_screeninfo *var)
+{
+int	x,ali,size;
+
+	if((var->xres < 0)||(var->xres > XRES)||
+	   (var->yres < 0)||(var->yres > YRES)||
+	   (var->xres_virtual < 0)||(var->xres_virtual > XRES)||
+	   (var->yres_virtual < 0)||(var->yres_virtual > YRES)||
+	   (var->xoffset < 0)||(var->xoffset > XRES)||
+	   (var->yoffset < 0)||(var->yoffset > YRES))
+	{
+		return(-1);
+	}
+	x = var->xres_virtual * 2;
+	ali = x + (x % 16);
+	*(volatile unsigned long *)(VIDEO_ALPHA_FB_WIDTH) = (ali << 16) | ali;
+	*(volatile unsigned long *)(VIDEO_ALPHA_PLANE_TL) = (var->yoffset << 16) | 
+									var->xoffset;
+	*(volatile unsigned long *)(VIDEO_ALPHA_PLANE_BR) =
+			((var->yoffset + var->yres - 1) << 16) |
+			 (var->xoffset + var->xres - 1);
+	size = var->xres_virtual * var->yres_virtual * var->bits_per_pixel / 8;
+	*(volatile unsigned long *)(VIDEO_ALPHA_FB_LAST_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP3 & 0x00ffffff) + size;
+	return(0);
+}
+
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_videofb.c linux-2.6.17/drivers/video/voyager/voyager_videofb.c
--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_videofb.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/drivers/video/voyager/voyager_videofb.c	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,273 @@
+/*
+ *  linux/drivers/video/voyager_videofb.c -- voyager video frame buffer driver
+ *
+ *     Copyright (C) 2003 Renesas Technology Sales Co.,Ltd.
+ *     Copyright (C) 2003 Atom Create Engineering Co.,Ltd.
+ *     Anthor : Atom Create Engineering Co.,Ltd.
+ *                   Kenichi Sakuma
+ *
+ *  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.
+ *
+ * 1.00
+ *  - initial version (ks)
+ * 1.01
+ *  - Kernel 2.6 correspondence
+ */
+#include <linux/config.h>
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/errno.h>
+#include <linux/string.h>
+#include <linux/mm.h>
+#include <linux/tty.h>
+#include <linux/slab.h>
+#include <linux/vmalloc.h>
+#include <linux/delay.h>
+#include <linux/interrupt.h>
+#include <linux/fb.h>
+#include <linux/init.h>
+#include <asm/io.h>
+#include <asm/irq.h>
+#include <asm/mach/voyagergx_reg.h>
+#include <video/voyager.h>
+
+static struct fb_info voyafb_info;
+
+int voyafb_init2(void);
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *info);
+static int voyafb_set_par(struct fb_info *info);
+static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+			     u_int transp, struct fb_info *info);
+static int voyafb_blank(int blank, struct fb_info *info);
+static int voyafb_ioctl(struct inode*, struct file*,
+			   unsigned int, unsigned long, struct fb_info*);
+static int  change_mode(struct fb_var_screeninfo *var);
+
+static	unsigned	int	pseudo_palette[16];
+
+static struct fb_ops voyafb_ops = {
+	.owner		= THIS_MODULE,
+	.fb_check_var	= voyafb_check_var,
+	.fb_set_par	= voyafb_set_par,
+	.fb_setcolreg	= voyafb_setcolreg,
+	.fb_blank	= voyafb_blank,
+	.fb_fillrect	= cfb_fillrect,
+	.fb_copyarea	= cfb_copyarea,
+	.fb_imageblit	= cfb_imageblit,
+	.fb_ioctl       = voyafb_ioctl,
+};
+
+static struct fb_var_screeninfo voyafb_var __initdata = {
+	.xres = XRES,
+	.yres = YRES,
+	.xres_virtual = XRES,
+	.yres_virtual = YRES,
+	.bits_per_pixel = BPP,
+	.red = { 11,5,0 },
+	.green = { 5,6,0 },
+	.blue = { 0,5,0 },
+	.height = -1,
+	.width = -1,
+	.vmode = FB_VMODE_NONINTERLACED,
+	.pixclock = 10000,
+	.left_margin = 16,
+	.right_margin = 16,
+	.upper_margin = 16,
+	.lower_margin = 16,
+	.hsync_len = 8,
+	.vsync_len = 8,
+};
+
+static int voyafb_check_var(struct fb_var_screeninfo *var,
+			     struct fb_info *info)
+{
+	if (var->xres > XRES || var->yres > YRES
+	    || var->xres_virtual > XRES || var->yres_virtual > YRES
+	    || var->bits_per_pixel != BPP
+	    || var->nonstd
+	    || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED)
+		return -EINVAL;
+
+	var->xres_virtual = XRES;
+	var->yres_virtual = YRES;
+
+	if(change_mode(var) != 0) {
+		return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int voyafb_set_par(struct fb_info *info)
+{
+	info->fix.line_length = XRES*2;
+	info->fix.visual = FB_VISUAL_TRUECOLOR;
+
+	info->var.red.offset = 11;
+	info->var.green.offset = 5;
+	info->var.blue.offset = 0;
+	info->var.red.length = info->var.blue.length = 5;
+	info->var.green.length = 6;
+	return 0;
+}
+
+static int voyafb_blank(int blank, struct fb_info *info)
+{
+	return 1;
+}
+
+static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green,
+			     unsigned blue, unsigned transp,
+			     struct fb_info* info)
+{
+	red   >>= 11;
+	green >>= 11;
+	blue  >>= 10;
+
+	if (regno < 16)
+		((u32 *)(info->pseudo_palette))[regno] = ((red & 31) << 6) |
+                                                         ((green & 31) << 11) |
+                                                         ((blue & 63));
+	return 0;
+}
+
+static int voyafb_ioctl(struct inode* inode, struct file* file,
+			 unsigned int cmd, unsigned long arg,
+			 struct fb_info* info)
+{
+	if(cmd == VOYAGER_IOCTL_ENABLE) {
+		if(arg == 0) {
+			*(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) &= 0xfffffffb;
+		}
+		else {
+			*(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) |= 0x04;
+		}
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_ENABLE_CP) {
+		if(arg == 0) {
+			*(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) &= 0xffffbfff;
+		}
+		else {
+			*(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) |= 0x00004000;
+		}
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_SCALE) {
+		*(volatile unsigned long *)(VIDEO_SCALE) = arg;
+		return 0;
+	}
+	else if(cmd == VOYAGER_IOCTL_TYPE) {
+		*(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) &= 0xfffffffc;
+		*(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) |= (arg & 0x03);
+		return 0;
+	}
+	return -EINVAL;
+}
+
+static void __init voya_hw_init(void)
+{
+int	i;
+
+	*(volatile unsigned long *)(VIDEO_FB_0_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP1 & 0x00ffffff);
+	*(volatile unsigned long *)(VIDEO_FB_1_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP2 & 0x00ffffff);
+	change_mode(&voyafb_var);
+	*(volatile unsigned long *)(VIDEO_SCALE) = 0;
+
+	*(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) &= 0xffffcea8;
+	*(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) |= 0x10003;
+	//palet initialize
+	for(i=0;i<256;i++) {
+		*(volatile unsigned long *)(VIDEO_PALETTE_RAM+(i*4)) = (i << 16)+(i << 8)+i;
+	}
+}
+
+static struct fb_fix_screeninfo voyafb_fix __initdata = {
+	.id =		"VOYAGER VIDEO",
+	.type =		FB_TYPE_PACKED_PIXELS,
+	.visual =	FB_VISUAL_TRUECOLOR,
+	.accel =	FB_ACCEL_NONE,
+	.line_length =	XRES*2,
+	.smem_len =	MAX_FRAMEBUFFER_MEM_SIZE,
+};
+
+
+static void __init init_voya(struct fb_info *p, unsigned long addr)
+{
+	p->fix = voyafb_fix;
+	p->fix.smem_start = addr;
+
+	p->var = voyafb_var;
+
+	p->fbops = &voyafb_ops;
+	p->flags = FBINFO_FLAG_DEFAULT;
+	p->pseudo_palette = pseudo_palette;
+
+	fb_alloc_cmap(&p->cmap, 16, 0);
+
+	if (register_framebuffer(p) < 0) {
+		printk(KERN_ERR "VOYAGER GX VIDEO framebuffer failed to register\n");
+		return;
+	}
+
+	printk(KERN_INFO "fb%d: VOYAGER GX_VIDEO frame buffer (%dK RAM detected)\n",
+		p->node, p->fix.smem_len / 1024);
+
+	voya_hw_init();
+}
+
+int __init voyafb_init2(void)
+{
+	struct fb_info *p = &voyafb_info;
+	unsigned long addr, size;
+
+        addr = VOY_VRAM_TOP1;
+	size = MAX_FRAMEBUFFER_MEM_SIZE;
+	p->screen_base = ioremap((u_long)addr,
+				     ALLOCATED_FB_MEM_SIZE);
+	if (p->screen_base == NULL) {
+		return -ENOMEM;
+	}
+	init_voya(p, addr);
+	memset(p->screen_base, 0, MAX_FRAMEBUFFER_MEM_SIZE);
+
+	return 0;
+}
+
+static void __exit voyafb_exit(void)
+{
+	*(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) &= 0xfffffffb;
+}
+
+
+//------------------------------------------------------------------------------------
+static	int	change_mode(struct fb_var_screeninfo *var)
+{
+int	x,ali,size;
+
+	if((var->xres < 0)||(var->xres > XRES)||
+	   (var->yres < 0)||(var->yres > YRES)||
+	   (var->xres_virtual < 0)||(var->xres_virtual > XRES)||
+	   (var->yres_virtual < 0)||(var->yres_virtual > YRES)||
+	   (var->xoffset < 0)||(var->xoffset > XRES)||
+	   (var->yoffset < 0)||(var->yoffset > YRES))
+	{
+		return(-1);
+	}
+	x = var->xres_virtual * 2;
+	ali = x + (x % 16);
+	*(volatile unsigned long *)(VIDEO_FB_WIDTH) = (ali << 16) | ali;
+	*(volatile unsigned long *)(VIDEO_PLANE_TL) = (var->yoffset << 16) | var->xoffset;
+	*(volatile unsigned long *)(VIDEO_PLANE_BR) =
+			((var->yoffset + var->yres - 1) << 16) |
+			 (var->xoffset + var->xres - 1);
+	size = var->xres_virtual * var->yres_virtual * var->bits_per_pixel / 8;
+	*(volatile unsigned long *)(VIDEO_FB_0_LAST_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP1 & 0x00ffffff) + size;
+	*(volatile unsigned long *)(VIDEO_FB_1_LAST_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP2 & 0x00ffffff) + size;
+	return(0);
+}
+
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/include/CVS/Entries linux-2.6.17/include/CVS/Entries
--- linux-2.6.17-vanilla/include/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/CVS/Entries	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,3 @@
+D/asm-sh////
+D/linux////
+D/video////
diff -ruN linux-2.6.17-vanilla/include/CVS/Repository linux-2.6.17/include/CVS/Repository
--- linux-2.6.17-vanilla/include/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/CVS/Repository	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+linux/include
diff -ruN linux-2.6.17-vanilla/include/CVS/Root linux-2.6.17/include/CVS/Root
--- linux-2.6.17-vanilla/include/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/CVS/Root	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/CVS/Entries linux-2.6.17/include/asm-sh/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/CVS/Entries	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,114 @@
+/adc.h/1.2/Fri Sep 24 14:58:00 2004/-ko/
+/apm.h/1.1/Sun Jan 29 17:46:24 2006//
+/atomic.h/1.6/Mon Mar 27 21:06:15 2006/-ko/
+/bug.h/1.5/Tue Jun 21 04:15:52 2005//
+/bugs.h/1.8/Sun Aug 21 23:47:31 2005//
+/byteorder.h/1.4/Wed Feb  4 16:16:29 2004/-ko/
+/cache.h/1.11/Mon Mar 27 21:06:15 2006/-ko/
+/cacheflush.h/1.7/Sat Dec 31 11:30:47 2005//
+/checksum.h/1.9/Sat Jan  7 20:08:29 2006//
+/clock.h/1.2/Sun Nov 13 16:57:33 2005/-ko/
+/current.h/1.3/Sun May  4 19:30:00 2003/-ko/
+/delay.h/1.3/Tue May  6 23:33:19 2003/-ko/
+/div64.h/1.5/Mon Jul 21 13:36:14 2003/-ko/
+/dma-mapping.h/1.12/Wed Jan  4 13:24:06 2006//
+/dma.h/1.18/Sun Oct 16 18:27:54 2005//
+/elf.h/1.5/Tue Jan  3 22:35:58 2006/-ko/
+/fixmap.h/1.1/Tue Mar 30 01:02:55 2004//
+/flat.h/1.2/Wed Jun 16 15:21:48 2004/-ko/
+/floppy.h/1.3/Tue Jun 21 04:15:52 2005/-ko/
+/freq.h/1.4/Sat Mar 26 20:25:36 2005/-ko/
+/hardirq.h/1.10/Mon Jan 31 20:45:09 2005/-ko/
+/hd64461.h/1.4/Sun Jan 29 17:46:24 2006/-ko/
+/hw_irq.h/1.4/Sun May  4 19:30:01 2003//
+/ide.h/1.15/Tue Jan  3 22:35:58 2006/-ko/
+/io_generic.h/1.4/Wed Nov 23 15:47:38 2005/-ko/
+/ioctl.h/1.3/Mon Mar 27 21:06:15 2006/-ko/
+/ioctls.h/1.5/Sun Jan 22 17:35:31 2006/-ko/
+/ipc.h/1.5/Tue Jun 21 04:15:52 2005/-ko/
+/irq-sh73180.h/1.2/Sun Jan  8 12:22:58 2006//
+/keyboard.h/1.3/Fri May 16 17:19:08 2003/-ko/
+/kgdb.h/1.6/Sun Feb  5 12:27:59 2006//
+/kmap_types.h/1.3/Thu Mar 11 18:08:05 2004//
+/local.h/1.1/Sun Jul 27 20:21:41 2003//
+/machvec.h/1.13/Wed Jan  4 13:20:32 2006//
+/mc146818rtc.h/1.5/Wed Jan  4 18:42:42 2006//
+/microdev.h/1.1/Sat Dec 17 23:34:08 2005/-ko/
+/mman.h/1.5/Mon Mar 27 21:06:15 2006//
+/mmu.h/1.4/Tue Jan  3 22:51:48 2006//
+/mmu_context.h/1.12/Thu Oct 20 22:48:05 2005//
+/module.h/1.4/Sun Oct 26 23:34:34 2003//
+/namei.h/1.2/Wed Apr  7 20:19:00 2004/-ko/
+/param.h/1.4/Thu Mar 11 18:08:05 2004//
+/pci.h/1.19/Sun Feb  5 21:55:30 2006//
+/percpu.h/1.1/Sat Oct 19 07:31:03 2002//
+/pgalloc.h/1.20/Sat Dec 31 11:30:47 2005/-ko/
+/pgtable.h/1.33/Sun Jan 22 17:26:20 2006//
+/pm.h/1.1/Sun Jan 29 17:46:24 2006//
+/posix_types.h/1.3/Thu Oct  9 14:59:21 2003//
+/ptrace.h/1.13/Mon Mar 27 21:06:15 2006//
+/rwsem.h/1.2/Tue Jan  3 22:35:58 2006/-ko/
+/scatterlist.h/1.6/Sat Sep  3 20:05:39 2005/-ko/
+/se.h/1.1/Wed Jan  4 17:53:54 2006/-ko/
+/se7300.h/1.1/Wed Jan  4 17:25:52 2006/-ko/
+/se73180.h/1.1/Wed Jan  4 17:33:14 2006/-ko/
+/se7751.h/1.1/Wed Jan  4 18:13:24 2006/-ko/
+/sections.h/1.1/Sun Jul 27 21:05:50 2003//
+/segment.h/1.4/Wed Jul 16 03:58:49 2003//
+/semaphore.h/1.7/Tue Jan  3 22:35:58 2006//
+/serial.h/1.4/Mon Aug 29 21:01:19 2005/-ko/
+/shmparam.h/1.3/Fri Sep 24 14:58:00 2004//
+/sigcontext.h/1.4/Wed Apr 28 08:53:25 2004/-ko/
+/signal.h/1.7/Tue Jun 21 04:15:52 2005//
+/smc37c93x.h/1.3/Tue May 31 14:08:54 2005/-ko/
+/smp.h/1.6/Mon Aug 29 21:01:19 2005//
+/snapgear.h/1.1/Wed Jan  4 18:42:42 2006/-ko/
+/spinlock.h/1.8/Fri Oct 28 13:12:50 2005/-ko/
+/statfs.h/1.3/Sat Jun 28 15:44:06 2003//
+/system.h/1.24/Mon Mar 27 21:06:15 2006//
+/systemh7751.h/1.1/Wed Jan  4 18:52:50 2006/-ko/
+/timer.h/1.2/Sun Jan 29 17:46:24 2006/-ko/
+/timex.h/1.6/Tue Jun 21 04:15:52 2005//
+/titan.h/1.1/Tue Nov 29 04:01:49 2005//
+/tlb.h/1.5/Tue May  6 23:28:51 2003//
+/tlbflush.h/1.1/Fri Apr 12 04:26:29 2002//
+/ubc.h/1.4/Fri Sep 24 14:58:00 2004//
+/user.h/1.5/Fri Sep 24 14:58:00 2004/-ko/
+/watchdog.h/1.4/Fri Sep 24 14:58:00 2004/-ko/
+D/bigsur////
+D/cat68701////
+D/cpu-sh2////
+D/cpu-sh3////
+D/cpu-sh4////
+D/cqreek////
+D/dmida////
+D/dreamcast////
+D/ec3104////
+D/edosk7705////
+D/harp////
+D/hd64465////
+D/hp6xx////
+D/hs7751rvoip////
+D/landisk////
+D/mpc1211////
+D/overdrive////
+D/r7780rp////
+D/rts7751r2d////
+D/saturn////
+D/sh03////
+D/sh2000////
+/addrspace.h/1.4/Wed Jul  5 14:51:36 2006//
+/bitops.h/1.11/Wed Jul  5 14:51:36 2006/-ko/
+/io.h/1.20/Wed Jul  5 14:51:36 2006//
+/kexec.h/1.2/Wed Jul  5 14:51:36 2006/-ko/
+/page.h/1.15/Wed Jul  5 14:51:36 2006//
+/poll.h/1.3/Wed Jul  5 14:51:37 2006//
+/types.h/1.7/Wed Jul  5 14:51:37 2006/-ko/
+/processor.h/1.36/Fri Jul  7 10:15:20 2006/-ko/
+/thread_info.h/1.18/Fri Jul  7 10:15:20 2006/-ko/
+/uaccess.h/1.17/Fri Jul  7 10:15:20 2006/-ko/
+/unistd.h/1.29/Fri Jul  7 10:15:20 2006/-ko/
+/rtc.h/1.6/Sat Jul  8 20:16:14 2006/-ko/
+/irq-sh7780.h/1.3/Wed Jul 12 16:51:59 2006/-ko/
+/irq.h/1.31/Wed Jul 12 16:51:59 2006/-ko/
+/sfp-machine.h/1.1/Wed Jul 12 10:35:55 2006/-ko/
diff -ruN linux-2.6.17-vanilla/include/asm-sh/CVS/Repository linux-2.6.17/include/asm-sh/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/CVS/Repository	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/CVS/Root linux-2.6.17/include/asm-sh/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/CVS/Root	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/apm.h linux-2.6.17/include/asm-sh/apm.h
--- linux-2.6.17-vanilla/include/asm-sh/apm.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/apm.h	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,46 @@
+/* 
+ * Copyright 2006 (c) Andriy Skulysh <askulysh@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 more details.
+ *
+ */
+
+#ifndef __ASM_SH_APM_H
+#define __ASM_SH_APM_H
+
+#define APM_AC_OFFLINE			0
+#define APM_AC_ONLINE			1
+#define APM_AC_BACKUP			2
+#define APM_AC_UNKNOWN			0xff
+
+#define APM_BATTERY_STATUS_HIGH		0
+#define APM_BATTERY_STATUS_LOW		1
+#define APM_BATTERY_STATUS_CRITICAL	2
+#define APM_BATTERY_STATUS_CHARGING	3
+#define APM_BATTERY_STATUS_NOT_PRESENT	4
+#define APM_BATTERY_STATUS_UNKNOWN	0xff
+
+#define APM_BATTERY_LIFE_UNKNOWN	0xFFFF
+#define APM_BATTERY_LIFE_MINUTES	0x8000
+#define APM_BATTERY_LIFE_VALUE_MASK	0x7FFF
+
+#define APM_BATTERY_FLAG_HIGH		(1 << 0)
+#define APM_BATTERY_FLAG_LOW		(1 << 1)
+#define APM_BATTERY_FLAG_CRITICAL	(1 << 2)
+#define APM_BATTERY_FLAG_CHARGING	(1 << 3)
+#define APM_BATTERY_FLAG_NOT_PRESENT	(1 << 7)
+#define APM_BATTERY_FLAG_UNKNOWN	0xff
+
+#define APM_UNITS_MINS			0
+#define APM_UNITS_SECS			1
+#define APM_UNITS_UNKNOWN		-1
+
+
+extern int (*apm_get_info)(char *buf, char **start, off_t fpos, int length);
+extern int apm_suspended;
+
+void apm_queue_event(apm_event_t event);
+
+#endif
diff -ruN linux-2.6.17-vanilla/include/asm-sh/atomic.h linux-2.6.17/include/asm-sh/atomic.h
--- linux-2.6.17-vanilla/include/asm-sh/atomic.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/atomic.h	2006-07-12 16:54:25.000000000 +0000
@@ -14,6 +14,7 @@
 #define atomic_read(v)		((v)->counter)
 #define atomic_set(v,i)		((v)->counter = (i))
 
+#include <linux/compiler.h>
 #include <asm/system.h>
 
 /*
diff -ruN linux-2.6.17-vanilla/include/asm-sh/bigsur/CVS/Entries linux-2.6.17/include/asm-sh/bigsur/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/bigsur/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/bigsur/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,4 @@
+/bigsur.h/1.2/Fri Nov  1 17:19:28 2002//
+/io.h/1.4/Mon Aug  4 01:38:06 2003//
+/serial.h/1.4/Mon Aug 29 21:01:19 2005//
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/bigsur/CVS/Repository linux-2.6.17/include/asm-sh/bigsur/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/bigsur/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/bigsur/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/bigsur
diff -ruN linux-2.6.17-vanilla/include/asm-sh/bigsur/CVS/Root linux-2.6.17/include/asm-sh/bigsur/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/bigsur/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/bigsur/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/bitops.h linux-2.6.17/include/asm-sh/bitops.h
--- linux-2.6.17-vanilla/include/asm-sh/bitops.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/bitops.h	2006-07-12 16:54:25.000000000 +0000
@@ -6,7 +6,7 @@
 /* For __swab32 */
 #include <asm/byteorder.h>
 
-static __inline__ void set_bit(int nr, volatile void * addr)
+static inline void set_bit(int nr, volatile void * addr)
 {
 	int	mask;
 	volatile unsigned int *a = addr;
@@ -24,7 +24,7 @@
  */
 #define smp_mb__before_clear_bit()	barrier()
 #define smp_mb__after_clear_bit()	barrier()
-static __inline__ void clear_bit(int nr, volatile void * addr)
+static inline void clear_bit(int nr, volatile void * addr)
 {
 	int	mask;
 	volatile unsigned int *a = addr;
@@ -37,7 +37,7 @@
 	local_irq_restore(flags);
 }
 
-static __inline__ void change_bit(int nr, volatile void * addr)
+static inline void change_bit(int nr, volatile void * addr)
 {
 	int	mask;
 	volatile unsigned int *a = addr;
@@ -50,7 +50,7 @@
 	local_irq_restore(flags);
 }
 
-static __inline__ int test_and_set_bit(int nr, volatile void * addr)
+static inline int test_and_set_bit(int nr, volatile void * addr)
 {
 	int	mask, retval;
 	volatile unsigned int *a = addr;
@@ -66,7 +66,7 @@
 	return retval;
 }
 
-static __inline__ int test_and_clear_bit(int nr, volatile void * addr)
+static inline int test_and_clear_bit(int nr, volatile void * addr)
 {
 	int	mask, retval;
 	volatile unsigned int *a = addr;
@@ -82,7 +82,7 @@
 	return retval;
 }
 
-static __inline__ int test_and_change_bit(int nr, volatile void * addr)
+static inline int test_and_change_bit(int nr, volatile void * addr)
 {
 	int	mask, retval;
 	volatile unsigned int *a = addr;
@@ -100,7 +100,7 @@
 
 #include <asm-generic/bitops/non-atomic.h>
 
-static __inline__ unsigned long ffz(unsigned long word)
+static inline unsigned long ffz(unsigned long word)
 {
 	unsigned long result;
 
@@ -120,7 +120,7 @@
  *
  * Undefined if no bit exists, so code should check against 0 first.
  */
-static __inline__ unsigned long __ffs(unsigned long word)
+static inline unsigned long __ffs(unsigned long word)
 {
 	unsigned long result;
 
diff -ruN linux-2.6.17-vanilla/include/asm-sh/bugs.h linux-2.6.17/include/asm-sh/bugs.h
--- linux-2.6.17-vanilla/include/asm-sh/bugs.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/bugs.h	2006-07-12 16:54:25.000000000 +0000
@@ -32,6 +32,10 @@
 	case CPU_SH7750 ... CPU_SH4_501:
 		*p++ = '4';
 		break;
+	case CPU_SH7770 ... CPU_SH7781:
+		*p++ = '4';
+		*p++ = 'a';
+		break;
 	default:
 		*p++ = '?';
 		*p++ = '!';
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cache.h linux-2.6.17/include/asm-sh/cache.h
--- linux-2.6.17-vanilla/include/asm-sh/cache.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cache.h	2006-07-12 16:54:25.000000000 +0000
@@ -10,7 +10,6 @@
 #ifdef __KERNEL__
 
 #include <asm/cpu/cache.h>
-#include <asm/cpu/cacheflush.h>
 
 #define SH_CACHE_VALID		1
 #define SH_CACHE_UPDATED	2
@@ -23,24 +22,31 @@
 #define L1_CACHE_ALIGN(x)	(((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
 
 struct cache_info {
-	unsigned int ways;
-	unsigned int sets;
-	unsigned int linesz;
-
+	unsigned int ways;		/* Number of cache ways */
+	unsigned int sets;		/* Number of cache sets */
+	unsigned int linesz;		/* Cache line size (bytes) */
+
+	unsigned int way_size;		/* sets * line size */
+
+	/*
+	 * way_incr is the address offset for accessing the next way
+	 * in memory mapped cache array ops.
+	 */
 	unsigned int way_incr;
-
 	unsigned int entry_shift;
 	unsigned int entry_mask;
 
+	/*
+	 * Compute a mask which selects the address bits which overlap between
+	 * 1. those used to select the cache set during indexing
+	 * 2. those in the physical page number.
+	 */
+	unsigned int alias_mask;
+
+	unsigned int n_aliases;		/* Number of aliases */
+
 	unsigned long flags;
 };
 
-/* Flush (write-back only) a region (smaller than a page) */
-extern void __flush_wback_region(void *start, int size);
-/* Flush (write-back & invalidate) a region (smaller than a page) */
-extern void __flush_purge_region(void *start, int size);
-/* Flush (invalidate only) a region (smaller than a page) */
-extern void __flush_invalidate_region(void *start, int size);
-
 #endif /* __KERNEL__ */
 #endif /* __ASM_SH_CACHE_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cacheflush.h linux-2.6.17/include/asm-sh/cacheflush.h
--- linux-2.6.17-vanilla/include/asm-sh/cacheflush.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cacheflush.h	2006-07-12 16:54:25.000000000 +0000
@@ -2,6 +2,7 @@
 #define __ASM_SH_CACHEFLUSH_H
 #ifdef __KERNEL__
 
+#include <linux/mm.h>
 #include <asm/cpu/cacheflush.h>
 
 /* Flush (write-back only) a region (smaller than a page) */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cat68701/CVS/Entries linux-2.6.17/include/asm-sh/cat68701/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/cat68701/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cat68701/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,2 @@
+/io.h/1.4/Mon Aug  4 01:44:40 2003//
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cat68701/CVS/Repository linux-2.6.17/include/asm-sh/cat68701/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/cat68701/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cat68701/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/cat68701
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cat68701/CVS/Root linux-2.6.17/include/asm-sh/cat68701/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/cat68701/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cat68701/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/checksum.h linux-2.6.17/include/asm-sh/checksum.h
--- linux-2.6.17-vanilla/include/asm-sh/checksum.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/checksum.h	2006-07-12 16:54:25.000000000 +0000
@@ -160,6 +160,7 @@
 }
 
 #define _HAVE_ARCH_IPV6_CSUM
+#ifdef CONFIG_IPV6
 static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr,
 						     struct in6_addr *daddr,
 						     __u32 len,
@@ -195,6 +196,7 @@
 
 	return csum_fold(sum);
 }
+#endif
 
 /* 
  *	Copy and checksum to user
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh2/CVS/Entries linux-2.6.17/include/asm-sh/cpu-sh2/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh2/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh2/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,8 @@
+/addrspace.h/1.1/Fri Jul  4 13:01:46 2003//
+/cache.h/1.3/Wed Jul 16 04:08:29 2003/-ko/
+/cacheflush.h/1.4/Tue Jun 21 04:15:52 2005/-ko/
+/dma.h/1.1/Fri Jul  4 13:01:46 2003//
+/shmparam.h/1.1/Fri Jul  4 13:01:46 2003//
+/ubc.h/1.1/Fri Jul  4 13:01:46 2003//
+/watchdog.h/1.1/Sat May 24 19:12:09 2003//
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh2/CVS/Repository linux-2.6.17/include/asm-sh/cpu-sh2/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh2/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh2/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/cpu-sh2
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh2/CVS/Root linux-2.6.17/include/asm-sh/cpu-sh2/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh2/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh2/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/CVS/Entries linux-2.6.17/include/asm-sh/cpu-sh3/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh3/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,14 @@
+/adc.h/1.2/Sun Aug 15 16:59:32 2004/-ko/
+/addrspace.h/1.2/Sun May  4 19:30:07 2003/-ko/
+/cache.h/1.4/Mon Aug 30 12:55:32 2004/-ko/
+/cacheflush.h/1.8/Tue Jan  3 23:01:25 2006/-ko/
+/dac.h/1.2/Sat Jun  5 17:17:34 2004/-ko/
+/dma.h/1.7/Wed Jan  4 14:59:08 2006/-ko/
+/freq.h/1.4/Sun Jan 29 17:46:24 2006/-ko/
+/mmu_context.h/1.4/Sat Jan  7 20:05:01 2006/-ko/
+/rtc.h/1.2/Sun May  4 19:30:08 2003/-ko/
+/shmparam.h/1.2/Sun May  4 19:30:08 2003/-ko/
+/timer.h/1.3/Tue May 31 14:07:35 2005/-ko/
+/ubc.h/1.2/Sun May  4 19:30:08 2003/-ko/
+/watchdog.h/1.1/Sat May 24 19:12:09 2003//
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/CVS/Repository linux-2.6.17/include/asm-sh/cpu-sh3/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh3/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/cpu-sh3
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/CVS/Root linux-2.6.17/include/asm-sh/cpu-sh3/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh3/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/cache.h linux-2.6.17/include/asm-sh/cpu-sh3/cache.h
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/cache.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh3/cache.h	2006-07-12 16:54:26.000000000 +0000
@@ -26,7 +26,7 @@
 #define CCR_CACHE_ENABLE	CCR_CACHE_CE
 #define CCR_CACHE_INVALIDATE	CCR_CACHE_CF
 
-#if defined(CONFIG_CPU_SUBTYPE_SH7705)
+#if defined(CONFIG_CPU_SUBTYPE_SH7705) 
 #define CCR3	0xa40000b4
 #define CCR_CACHE_16KB  0x00010000
 #define CCR_CACHE_32KB	0x00020000
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/cacheflush.h linux-2.6.17/include/asm-sh/cpu-sh3/cacheflush.h
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/cacheflush.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh3/cacheflush.h	2006-07-12 16:54:26.000000000 +0000
@@ -10,7 +10,7 @@
 #ifndef __ASM_CPU_SH3_CACHEFLUSH_H
 #define __ASM_CPU_SH3_CACHEFLUSH_H
 
-/* 
+/*
  * Cache flushing:
  *
  *  - flush_cache_all() flushes entire cache
@@ -35,53 +35,41 @@
  /* 32KB cache, 4kb PAGE sizes need to check bit 12 */
 #define CACHE_ALIAS 0x00001000
 
-struct page;
-struct mm_struct;
-struct vm_area_struct;
-
-extern void flush_cache_all(void);
-extern void flush_cache_mm(struct mm_struct *mm);
-extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start,
-                              unsigned long end);
-extern void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn);
-extern void flush_dcache_page(struct page *pg);
-extern void flush_icache_range(unsigned long start, unsigned long end);
-extern void flush_icache_page(struct vm_area_struct *vma, struct page *page);
-
-#define flush_dcache_mmap_lock(mapping)		do { } while (0)
-#define flush_dcache_mmap_unlock(mapping)	do { } while (0)
-
-/* SH3 has unified cache so no special action needed here */
-#define flush_cache_sigtramp(vaddr)		do { } while (0)
-#define flush_page_to_ram(page)			do { } while (0)
-#define flush_icache_user_range(vma,pg,adr,len)	do { } while (0)
-
-#define p3_cache_init()				do { } while (0)
-
 #define PG_mapped	PG_arch_1
 
-/* We provide our own get_unmapped_area to avoid cache alias issue */
-#define HAVE_ARCH_UNMAPPED_AREA
-
+void flush_cache_all(void);
+void flush_cache_mm(struct mm_struct *mm);
+void flush_cache_range(struct vm_area_struct *vma, unsigned long start,
+                              unsigned long end);
+void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn);
+void flush_dcache_page(struct page *pg);
+void flush_icache_range(unsigned long start, unsigned long end);
+void flush_icache_page(struct vm_area_struct *vma, struct page *page);
 #else
-
 #define flush_cache_all()			do { } while (0)
 #define flush_cache_mm(mm)			do { } while (0)
 #define flush_cache_range(vma, start, end)	do { } while (0)
 #define flush_cache_page(vma, vmaddr, pfn)	do { } while (0)
 #define flush_dcache_page(page)			do { } while (0)
-#define flush_dcache_mmap_lock(mapping)		do { } while (0)
-#define flush_dcache_mmap_unlock(mapping)	do { } while (0)
 #define flush_icache_range(start, end)		do { } while (0)
 #define flush_icache_page(vma,pg)		do { } while (0)
-#define flush_icache_user_range(vma,pg,adr,len)	do { } while (0)
+#endif
+
+#define flush_dcache_mmap_lock(mapping)		do { } while (0)
+#define flush_dcache_mmap_unlock(mapping)	do { } while (0)
+
+/* SH3 has unified cache so no special action needed here */
 #define flush_cache_sigtramp(vaddr)		do { } while (0)
+#define flush_icache_user_range(vma,pg,adr,len)	do { } while (0)
 
 #define p3_cache_init()				do { } while (0)
 
+/*
+ * We provide our own get_unmapped_area to avoid cache aliasing issues
+ * on SH7705 with a 32KB cache, and to page align addresses in the
+ * non-aliasing case.
+ */
 #define HAVE_ARCH_UNMAPPED_AREA
 
-#endif
-
 #endif /* __ASM_CPU_SH3_CACHEFLUSH_H */
 
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/freq.h linux-2.6.17/include/asm-sh/cpu-sh3/freq.h
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/freq.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh3/freq.h	2006-07-12 16:54:26.000000000 +0000
@@ -18,5 +18,9 @@
 #define MIN_DIVISOR_NR		0
 #define MAX_DIVISOR_NR		4
 
+#define FRQCR_CKOEN	0x0100
+#define FRQCR_PLLEN	0x0080
+#define FRQCR_PSTBY	0x0040
+
 #endif /* __ASM_CPU_SH3_FREQ_H */
 
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/timer.h linux-2.6.17/include/asm-sh/cpu-sh3/timer.h
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/timer.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh3/timer.h	2006-07-12 16:54:26.000000000 +0000
@@ -23,6 +23,10 @@
  * ---------------------------------------------------------------------------
  */
 
+#if !defined(CONFIG_CPU_SUBTYPE_SH7727)
+#define TMU_TOCR	0xfffffe90	/* Byte access */
+#endif
+
 #if defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7710)
 #define TMU_TSTR	0xa412fe92	/* Byte access */
 
@@ -39,9 +43,6 @@
 #define TMU2_TCR	0xa412feb4	/* Word access */
 
 #else
-#if !defined(CONFIG_CPU_SUBTYPE_SH7727)
-#define TMU_TOCR	0xfffffe90	/* Byte access */
-#endif
 #define TMU_TSTR	0xfffffe92	/* Byte access */
 
 #define TMU0_TCOR	0xfffffe94	/* Long access */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/CVS/Entries linux-2.6.17/include/asm-sh/cpu-sh4/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh4/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,14 @@
+/addrspace.h/1.3/Wed Jan 18 05:43:01 2006/-ko/
+/cache.h/1.5/Sun Aug 21 23:47:31 2005/-ko/
+/cacheflush.h/1.6/Sat Dec 31 11:30:49 2005/-ko/
+/dma-sh7780.h/1.2/Sun Feb  5 15:29:22 2006/-ko/
+/dma.h/1.10/Sun Feb  5 15:29:22 2006/-ko/
+/freq.h/1.4/Sun Aug 21 23:47:31 2005/-ko/
+/mmu_context.h/1.5/Sat Jan  7 20:05:01 2006/-ko/
+/rtc.h/1.2/Sun May  4 19:30:12 2003/-ko/
+/shmparam.h/1.2/Sun May  4 19:30:13 2003/-ko/
+/sq.h/1.2/Sat Jan  7 13:14:44 2006//
+/timer.h/1.1/Thu Oct 14 12:22:25 2004/-ko/
+/ubc.h/1.2/Sun May  4 19:30:13 2003/-ko/
+/watchdog.h/1.1/Sat May 24 19:12:09 2003//
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/CVS/Repository linux-2.6.17/include/asm-sh/cpu-sh4/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh4/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/cpu-sh4
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/CVS/Root linux-2.6.17/include/asm-sh/cpu-sh4/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh4/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/addrspace.h linux-2.6.17/include/asm-sh/cpu-sh4/addrspace.h
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/addrspace.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh4/addrspace.h	2006-07-12 16:54:26.000000000 +0000
@@ -22,5 +22,8 @@
 #define P4SEG_TLB_DATA	0xf7000000
 #define P4SEG_REG_BASE	0xff000000
 
+#define PA_AREA5_IO	0xb4000000	/* Area 5 IO Memory */
+#define PA_AREA6_IO	0xb8000000	/* Area 6 IO Memory */
+
 #endif /* __ASM_CPU_SH4_ADDRSPACE_H */
 
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/cache.h linux-2.6.17/include/asm-sh/cpu-sh4/cache.h
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/cache.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh4/cache.h	2006-07-12 16:54:26.000000000 +0000
@@ -22,7 +22,9 @@
 #define CCR_CACHE_ICE	0x0100	/* Instruction Cache Enable */
 #define CCR_CACHE_ICI	0x0800	/* IC Invalidate */
 #define CCR_CACHE_IIX	0x8000	/* IC Index Enable */
+#ifndef CONFIG_CPU_SUBTYPE_SH7780
 #define CCR_CACHE_EMODE	0x80000000	/* EMODE Enable */
+#endif
 
 /* Default CCR setup: 8k+16k-byte cache,P1-wb,enable */
 #define CCR_CACHE_ENABLE	(CCR_CACHE_OCE|CCR_CACHE_ICE)
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/cacheflush.h linux-2.6.17/include/asm-sh/cpu-sh4/cacheflush.h
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/cacheflush.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh4/cacheflush.h	2006-07-12 16:54:26.000000000 +0000
@@ -16,34 +16,26 @@
  *  caching; in which case they're only semi-broken),
  *  so we need them.
  */
-
-/* Page is 4K, OC size is 16K, there are four lines. */
-#define CACHE_ALIAS 0x00003000
-
-struct page;
-struct mm_struct;
-struct vm_area_struct;
-
-extern void flush_cache_all(void);
-extern void flush_cache_mm(struct mm_struct *mm);
-extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start,
-			      unsigned long end);
-extern void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn);
-extern void flush_dcache_page(struct page *pg);
+void flush_cache_all(void);
+void flush_cache_mm(struct mm_struct *mm);
+void flush_cache_range(struct vm_area_struct *vma, unsigned long start,
+		       unsigned long end);
+void flush_cache_page(struct vm_area_struct *vma, unsigned long addr,
+		      unsigned long pfn);
+void flush_dcache_page(struct page *pg);
 
 #define flush_dcache_mmap_lock(mapping)		do { } while (0)
 #define flush_dcache_mmap_unlock(mapping)	do { } while (0)
 
-extern void flush_icache_range(unsigned long start, unsigned long end);
-extern void flush_cache_sigtramp(unsigned long addr);
-extern void flush_icache_user_range(struct vm_area_struct *vma,
-				    struct page *page, unsigned long addr,
-				    int len);
+void flush_icache_range(unsigned long start, unsigned long end);
+void flush_cache_sigtramp(unsigned long addr);
+void flush_icache_user_range(struct vm_area_struct *vma, struct page *page,
+			     unsigned long addr, int len);
 
 #define flush_icache_page(vma,pg)		do { } while (0)
 
 /* Initialization of P3 area for copy_user_page */
-extern void p3_cache_init(void);
+void p3_cache_init(void);
 
 #define PG_mapped	PG_arch_1
 
@@ -61,4 +53,3 @@
 }
 #endif /* CONFIG_MMU */
 #endif /* __ASM_CPU_SH4_CACHEFLUSH_H */
-
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/dma-sh7780.h linux-2.6.17/include/asm-sh/cpu-sh4/dma-sh7780.h
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/dma-sh7780.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh4/dma-sh7780.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,39 @@
+#ifndef __ASM_SH_CPU_SH4_DMA_SH7780_H
+#define __ASM_SH_CPU_SH4_DMA_SH7780_H
+
+#define REQ_HE	0x000000C0
+#define REQ_H	0x00000080
+#define REQ_LE	0x00000040
+#define TM_BURST 0x0000020
+#define TS_8	0x00000000
+#define TS_16	0x00000008
+#define TS_32	0x00000010
+#define TS_16BLK	0x00000018
+#define TS_32BLK	0x00100000
+
+/*
+ * The SuperH DMAC supports a number of transmit sizes, we list them here,
+ * with their respective values as they appear in the CHCR registers.
+ *
+ * Defaults to a 64-bit transfer size.
+ */
+enum {
+	XMIT_SZ_8BIT,
+	XMIT_SZ_16BIT,
+	XMIT_SZ_32BIT,
+	XMIT_SZ_128BIT,
+	XMIT_SZ_256BIT,
+};
+
+/*
+ * The DMA count is defined as the number of bytes to transfer.
+ */
+static unsigned int __attribute__ ((used)) ts_shift[] = {
+	[XMIT_SZ_8BIT]		= 0,
+	[XMIT_SZ_16BIT]		= 1,
+	[XMIT_SZ_32BIT]		= 2,
+	[XMIT_SZ_128BIT]	= 4,
+	[XMIT_SZ_256BIT]	= 5,
+};
+
+#endif /* __ASM_SH_CPU_SH4_DMA_SH7780_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/dma.h linux-2.6.17/include/asm-sh/cpu-sh4/dma.h
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/dma.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh4/dma.h	2006-07-12 16:54:26.000000000 +0000
@@ -1,11 +1,17 @@
 #ifndef __ASM_CPU_SH4_DMA_H
 #define __ASM_CPU_SH4_DMA_H
 
+#define DMAOR_INIT	( 0x8000 | DMAOR_DME )
+
 #ifdef CONFIG_CPU_SH4A
 #define SH_DMAC_BASE	0xfc808020
+
+#define CHCR_TS_MASK	0x18
+#define CHCR_TS_SHIFT	3
+
+#include <asm/cpu/dma-sh7780.h>
 #else
 #define SH_DMAC_BASE	0xffa00000
-#endif
 
 /* Definitions for the SuperH DMAC */
 #define TM_BURST	0x0000080
@@ -19,8 +25,6 @@
 
 #define DMAOR_COD	0x00000008
 
-#define DMAOR_INIT	( 0x8000 | DMAOR_DME )
-
 /*
  * The SuperH DMAC supports a number of transmit sizes, we list them here,
  * with their respective values as they appear in the CHCR registers.
@@ -45,5 +49,6 @@
 	[XMIT_SZ_32BIT]		= 2,
 	[XMIT_SZ_256BIT]	= 5,
 };
+#endif
 
 #endif /* __ASM_CPU_SH4_DMA_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/sq.h linux-2.6.17/include/asm-sh/cpu-sh4/sq.h
--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/sq.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cpu-sh4/sq.h	2006-07-12 16:54:26.000000000 +0000
@@ -17,7 +17,7 @@
  * Store queues range from e0000000-e3fffffc, allowing approx. 64MB to be
  * mapped to any physical address space. Since data is written (and aligned)
  * to 32-byte boundaries, we need to be sure that all allocations are aligned.
- */ 
+ */
 #define SQ_SIZE                 32
 #define SQ_ALIGN_MASK           (~(SQ_SIZE - 1))
 #define SQ_ALIGN(addr)          (((addr)+SQ_SIZE-1) & SQ_ALIGN_MASK)
@@ -26,23 +26,10 @@
 #define SQ_QACR1		(P4SEG_REG_BASE  + 0x3c)
 #define SQ_ADDRMAX              (P4SEG_STORE_QUE + 0x04000000)
 
-struct sq_mapping {
-	const char *name;
-
-	unsigned long sq_addr;
-	unsigned long addr;
-	unsigned int size;
-
-	struct list_head list;
-};
-
 /* arch/sh/kernel/cpu/sh4/sq.c */
-extern struct sq_mapping *sq_remap(unsigned long phys, unsigned int size, const char *name);
-extern void sq_unmap(struct sq_mapping *map);
-
-extern void sq_clear(unsigned long addr, unsigned int len);
-extern void sq_flush(void *addr);
-extern void sq_flush_range(unsigned long start, unsigned int len);
+unsigned long sq_remap(unsigned long phys, unsigned int size,
+		       const char *name, unsigned long flags);
+void sq_unmap(unsigned long vaddr);
+void sq_flush_range(unsigned long start, unsigned int len);
 
 #endif /* __ASM_CPU_SH4_SQ_H */
-
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cqreek/CVS/Entries linux-2.6.17/include/asm-sh/cqreek/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/cqreek/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cqreek/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,2 @@
+/cqreek.h/1.2/Fri Nov  1 17:19:28 2002//
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cqreek/CVS/Repository linux-2.6.17/include/asm-sh/cqreek/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/cqreek/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cqreek/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/cqreek
diff -ruN linux-2.6.17-vanilla/include/asm-sh/cqreek/CVS/Root linux-2.6.17/include/asm-sh/cqreek/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/cqreek/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/cqreek/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/dmida/CVS/Entries linux-2.6.17/include/asm-sh/dmida/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/dmida/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/dmida/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,2 @@
+/io.h/1.2/Sun May  4 19:30:13 2003/-ko/
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/dmida/CVS/Repository linux-2.6.17/include/asm-sh/dmida/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/dmida/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/dmida/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/dmida
diff -ruN linux-2.6.17-vanilla/include/asm-sh/dmida/CVS/Root linux-2.6.17/include/asm-sh/dmida/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/dmida/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/dmida/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/dreamcast/CVS/Entries linux-2.6.17/include/asm-sh/dreamcast/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/dreamcast/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/dreamcast/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,4 @@
+/dma.h/1.2/Wed Aug 27 12:35:06 2003//
+/pci.h/1.1/Sun Aug 17 16:27:11 2003//
+/sysasic.h/1.4/Sat Aug 23 00:46:39 2003//
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/dreamcast/CVS/Repository linux-2.6.17/include/asm-sh/dreamcast/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/dreamcast/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/dreamcast/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/dreamcast
diff -ruN linux-2.6.17-vanilla/include/asm-sh/dreamcast/CVS/Root linux-2.6.17/include/asm-sh/dreamcast/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/dreamcast/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/dreamcast/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/ec3104/CVS/Entries linux-2.6.17/include/asm-sh/ec3104/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/ec3104/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/ec3104/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,5 @@
+/ec3104.h/1.2/Fri Nov  1 17:19:29 2002//
+/io.h/1.3/Tue Jul 29 14:27:12 2003//
+/keyboard.h/1.2/Fri Nov  1 17:19:29 2002//
+/serial.h/1.4/Mon Aug 29 21:01:19 2005//
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/ec3104/CVS/Repository linux-2.6.17/include/asm-sh/ec3104/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/ec3104/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/ec3104/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/ec3104
diff -ruN linux-2.6.17-vanilla/include/asm-sh/ec3104/CVS/Root linux-2.6.17/include/asm-sh/ec3104/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/ec3104/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/ec3104/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/edosk7705/CVS/Entries linux-2.6.17/include/asm-sh/edosk7705/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/edosk7705/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/edosk7705/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,2 @@
+/io.h/1.1/Mon Aug 30 12:55:33 2004/-ko/
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/edosk7705/CVS/Repository linux-2.6.17/include/asm-sh/edosk7705/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/edosk7705/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/edosk7705/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/edosk7705
diff -ruN linux-2.6.17-vanilla/include/asm-sh/edosk7705/CVS/Root linux-2.6.17/include/asm-sh/edosk7705/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/edosk7705/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/edosk7705/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/harp/CVS/Entries linux-2.6.17/include/asm-sh/harp/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/harp/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/harp/CVS/Entries	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,3 @@
+/harp.h/1.2/Fri Nov  1 17:19:29 2002//
+/io.h/1.2/Sun May  4 19:30:14 2003/-ko/
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/harp/CVS/Repository linux-2.6.17/include/asm-sh/harp/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/harp/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/harp/CVS/Repository	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/harp
diff -ruN linux-2.6.17-vanilla/include/asm-sh/harp/CVS/Root linux-2.6.17/include/asm-sh/harp/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/harp/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/harp/CVS/Root	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/hd64461.h linux-2.6.17/include/asm-sh/hd64461.h
--- linux-2.6.17-vanilla/include/asm-sh/hd64461.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/hd64461.h	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,208 @@
+#ifndef __ASM_SH_HD64461
+#define __ASM_SH_HD64461
+/*
+ *	$Id: hd64461.h,v 1.5 2004/03/16 00:07:51 lethal Exp $
+ *	Copyright (C) 2000 YAEGASHI Takeshi
+ *	Hitachi HD64461 companion chip support
+ */
+
+/* Constants for PCMCIA mappings */
+#define HD64461_PCC_WINDOW	0x01000000
+
+#define HD64461_PCC0_BASE	0xb8000000	/* area 6 */
+#define HD64461_PCC0_ATTR	(HD64461_PCC0_BASE)
+#define HD64461_PCC0_COMM	(HD64461_PCC0_BASE+HD64461_PCC_WINDOW)
+#define HD64461_PCC0_IO		(HD64461_PCC0_BASE+2*HD64461_PCC_WINDOW)
+
+#define HD64461_PCC1_BASE	0xb4000000	/* area 5 */
+#define HD64461_PCC1_ATTR	(HD64461_PCC1_BASE)
+#define HD64461_PCC1_COMM	(HD64461_PCC1_BASE+HD64461_PCC_WINDOW)
+
+#define HD64461_STBCR	0x10000
+#define HD64461_STBCR_CKIO_STBY			0x2000
+#define HD64461_STBCR_SAFECKE_IST		0x1000
+#define HD64461_STBCR_SLCKE_IST			0x0800
+#define HD64461_STBCR_SAFECKE_OST		0x0400
+#define HD64461_STBCR_SLCKE_OST			0x0200
+#define HD64461_STBCR_SMIAST			0x0100
+#define HD64461_STBCR_SLCDST			0x0080
+#define HD64461_STBCR_SPC0ST			0x0040
+#define HD64461_STBCR_SPC1ST			0x0020
+#define HD64461_STBCR_SAFEST			0x0010
+#define HD64461_STBCR_STM0ST			0x0008
+#define HD64461_STBCR_STM1ST			0x0004
+#define HD64461_STBCR_SIRST				0x0002
+#define HD64461_STBCR_SURTST			0x0001
+
+#define HD64461_SYSCR	0x10002
+#define HD64461_SCPUCR	0x10004
+
+#define HD64461_LCDCBAR		0x11000
+#define HD64461_LCDCLOR		0x11002
+#define HD64461_LCDCCR		0x11004
+#define HD64461_LCDCCR_STBACK	0x0400
+#define HD64461_LCDCCR_STREQ	0x0100
+#define HD64461_LCDCCR_MOFF	0x0080
+#define HD64461_LCDCCR_REFSEL	0x0040
+#define HD64461_LCDCCR_EPON	0x0020
+#define HD64461_LCDCCR_SPON	0x0010
+
+#define	HD64461_LDR1		0x11010
+#define	HD64461_LDR1_DON	0x01
+#define	HD64461_LDR1_DINV	0x80
+
+#define	HD64461_LDR2		0x11012
+#define	HD64461_LDHNCR		0x11014
+#define	HD64461_LDHNSR		0x11016
+#define HD64461_LDVNTR		0x11018
+#define HD64461_LDVNDR		0x1101a
+#define HD64461_LDVSPR		0x1101c
+#define HD64461_LDR3		0x1101e
+
+#define HD64461_CPTWAR		0x11030
+#define HD64461_CPTWDR		0x11032
+#define HD64461_CPTRAR		0x11034
+#define HD64461_CPTRDR		0x11036
+
+#define HD64461_GRDOR		0x11040
+#define HD64461_GRSCR		0x11042
+#define HD64461_GRCFGR		0x11044
+#define HD64461_GRCFGR_ACCSTATUS		0x10
+#define HD64461_GRCFGR_ACCRESET			0x08
+#define HD64461_GRCFGR_ACCSTART_BITBLT	0x06
+#define HD64461_GRCFGR_ACCSTART_LINE	0x04
+#define HD64461_GRCFGR_COLORDEPTH16		0x01
+
+#define HD64461_LNSARH		0x11046
+#define HD64461_LNSARL		0x11048
+#define HD64461_LNAXLR		0x1104a
+#define HD64461_LNDGR		0x1104c
+#define HD64461_LNAXR		0x1104e
+#define HD64461_LNERTR		0x11050
+#define HD64461_LNMDR		0x11052
+#define HD64461_BBTSSARH	0x11054
+#define HD64461_BBTSSARL	0x11056
+#define HD64461_BBTDSARH	0x11058
+#define HD64461_BBTDSARL	0x1105a
+#define HD64461_BBTDWR		0x1105c
+#define HD64461_BBTDHR		0x1105e
+#define HD64461_BBTPARH		0x11060
+#define HD64461_BBTPARL		0x11062
+#define HD64461_BBTMARH		0x11064
+#define HD64461_BBTMARL		0x11066
+#define HD64461_BBTROPR		0x11068
+#define HD64461_BBTMDR		0x1106a
+
+/* PC Card Controller Registers */
+#define HD64461_PCC0ISR         0x12000 /* socket 0 interface status */
+#define HD64461_PCC0GCR         0x12002 /* socket 0 general control */
+#define HD64461_PCC0CSCR        0x12004 /* socket 0 card status change */
+#define HD64461_PCC0CSCIER      0x12006 /* socket 0 card status change interrupt enable */
+#define HD64461_PCC0SCR         0x12008 /* socket 0 software control */
+#define HD64461_PCC1ISR         0x12010 /* socket 1 interface status */
+#define HD64461_PCC1GCR         0x12012 /* socket 1 general control */
+#define HD64461_PCC1CSCR        0x12014 /* socket 1 card status change */
+#define HD64461_PCC1CSCIER      0x12016 /* socket 1 card status change interrupt enable */
+#define HD64461_PCC1SCR         0x12018 /* socket 1 software control */
+
+/* PCC Interface Status Register */
+#define HD64461_PCCISR_READY		0x80	/* card ready */
+#define HD64461_PCCISR_MWP		0x40	/* card write-protected */
+#define HD64461_PCCISR_VS2		0x20	/* voltage select pin 2 */
+#define HD64461_PCCISR_VS1		0x10	/* voltage select pin 1 */
+#define HD64461_PCCISR_CD2		0x08	/* card detect 2 */
+#define HD64461_PCCISR_CD1		0x04	/* card detect 1 */
+#define HD64461_PCCISR_BVD2		0x02	/* battery 1 */
+#define HD64461_PCCISR_BVD1		0x01	/* battery 1 */
+
+#define HD64461_PCCISR_PCD_MASK		0x0c    /* card detect */
+#define HD64461_PCCISR_BVD_MASK		0x03    /* battery voltage */
+#define HD64461_PCCISR_BVD_BATGOOD	0x03    /* battery good */
+#define HD64461_PCCISR_BVD_BATWARN	0x01    /* battery low warning */
+#define HD64461_PCCISR_BVD_BATDEAD1	0x02    /* battery dead */
+#define HD64461_PCCISR_BVD_BATDEAD2	0x00    /* battery dead */
+
+/* PCC General Control Register */
+#define HD64461_PCCGCR_DRVE		0x80    /* output drive */
+#define HD64461_PCCGCR_PCCR		0x40    /* PC card reset */
+#define HD64461_PCCGCR_PCCT		0x20    /* PC card type, 1=IO&mem, 0=mem */
+#define HD64461_PCCGCR_VCC0		0x10    /* voltage control pin VCC0SEL0 */
+#define HD64461_PCCGCR_PMMOD		0x08    /* memory mode */
+#define HD64461_PCCGCR_PA25		0x04    /* pin A25 */
+#define HD64461_PCCGCR_PA24		0x02    /* pin A24 */
+#define HD64461_PCCGCR_REG		0x01    /* pin PCC0REG# */
+
+/* PCC Card Status Change Register */
+#define HD64461_PCCCSCR_SCDI		0x80    /* sw card detect intr */
+#define HD64461_PCCCSCR_SRV1		0x40    /* reserved */
+#define HD64461_PCCCSCR_IREQ		0x20    /* IREQ intr req */
+#define HD64461_PCCCSCR_SC		0x10    /* STSCHG (status change) pin */
+#define HD64461_PCCCSCR_CDC		0x08    /* CD (card detect) change */
+#define HD64461_PCCCSCR_RC		0x04    /* READY change */
+#define HD64461_PCCCSCR_BW		0x02    /* battery warning change */
+#define HD64461_PCCCSCR_BD		0x01    /* battery dead change */
+
+/* PCC Card Status Change Interrupt Enable Register */
+#define HD64461_PCCCSCIER_CRE		0x80    /* change reset enable */
+#define HD64461_PCCCSCIER_IREQE_MASK	0x60   /* IREQ enable */
+#define HD64461_PCCCSCIER_IREQE_DISABLED	0x00   /* IREQ disabled */
+#define HD64461_PCCCSCIER_IREQE_LEVEL	0x20   /* IREQ level-triggered */
+#define HD64461_PCCCSCIER_IREQE_FALLING	0x40   /* IREQ falling-edge-trig */
+#define HD64461_PCCCSCIER_IREQE_RISING	0x60   /* IREQ rising-edge-trig */
+
+#define HD64461_PCCCSCIER_SCE		0x10    /* status change enable */
+#define HD64461_PCCCSCIER_CDE		0x08    /* card detect change enable */
+#define HD64461_PCCCSCIER_RE		0x04    /* ready change enable */
+#define HD64461_PCCCSCIER_BWE		0x02    /* battery warn change enable */
+#define HD64461_PCCCSCIER_BDE		0x01    /* battery dead change enable*/
+
+/* PCC Software Control Register */
+#define HD64461_PCCSCR_VCC1		0x02	/* voltage control pin 1 */
+#define HD64461_PCCSCR_SWP		0x01    /* write protect */
+
+#define HD64461_P0OCR           0x1202a
+#define HD64461_P1OCR           0x1202c
+#define HD64461_PGCR            0x1202e
+
+#define HD64461_GPACR		0x14000
+#define HD64461_GPBCR		0x14002
+#define HD64461_GPCCR		0x14004
+#define HD64461_GPDCR		0x14006
+#define HD64461_GPADR		0x14010
+#define HD64461_GPBDR		0x14012
+#define HD64461_GPCDR		0x14014
+#define HD64461_GPDDR		0x14016
+#define HD64461_GPAICR		0x14020
+#define HD64461_GPBICR		0x14022
+#define HD64461_GPCICR		0x14024
+#define HD64461_GPDICR		0x14026
+#define HD64461_GPAISR		0x14040
+#define HD64461_GPBISR		0x14042
+#define HD64461_GPCISR		0x14044
+#define HD64461_GPDISR		0x14046
+
+#define HD64461_NIRR		0x15000
+#define HD64461_NIMR		0x15002
+
+#define HD64461_IRQBASE		OFFCHIP_IRQ_BASE
+#define HD64461_IRQ_NUM		16
+
+#define HD64461_IRQ_UART	(HD64461_IRQBASE+5)
+#define HD64461_IRQ_IRDA	(HD64461_IRQBASE+6)
+#define HD64461_IRQ_TMU1	(HD64461_IRQBASE+9)
+#define HD64461_IRQ_TMU0	(HD64461_IRQBASE+10)
+#define HD64461_IRQ_GPIO	(HD64461_IRQBASE+11)
+#define HD64461_IRQ_AFE		(HD64461_IRQBASE+12)
+#define HD64461_IRQ_PCC1	(HD64461_IRQBASE+13)
+#define HD64461_IRQ_PCC0	(HD64461_IRQBASE+14)
+
+#define __IO_PREFIX	hd64461
+#include <asm/io_generic.h>
+
+/* arch/sh/cchips/hd6446x/hd64461/setup.c */
+int hd64461_irq_demux(int irq);
+void hd64461_register_irq_demux(int irq,
+				int (*demux) (int irq, void *dev), void *dev);
+void hd64461_unregister_irq_demux(int irq);
+
+#endif
diff -ruN linux-2.6.17-vanilla/include/asm-sh/hd64465/CVS/Entries linux-2.6.17/include/asm-sh/hd64465/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/hd64465/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/hd64465/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,4 @@
+/gpio.h/1.3/Sun May  4 19:30:14 2003//
+/hd64465.h/1.3/Sun May  4 19:30:15 2003//
+/io.h/1.4/Sun Aug  3 03:05:11 2003//
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/hd64465/CVS/Repository linux-2.6.17/include/asm-sh/hd64465/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/hd64465/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/hd64465/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/hd64465
diff -ruN linux-2.6.17-vanilla/include/asm-sh/hd64465/CVS/Root linux-2.6.17/include/asm-sh/hd64465/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/hd64465/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/hd64465/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/hp6xx/CVS/Entries linux-2.6.17/include/asm-sh/hp6xx/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/hp6xx/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/hp6xx/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,4 @@
+/hp6xx.h/1.3/Sun Jan 29 17:46:24 2006/-ko/
+/ide.h/1.2/Sat Jun  5 17:17:34 2004/-ko/
+/io.h/1.3/Wed Jan  4 14:53:17 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/hp6xx/CVS/Repository linux-2.6.17/include/asm-sh/hp6xx/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/hp6xx/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/hp6xx/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/hp6xx
diff -ruN linux-2.6.17-vanilla/include/asm-sh/hp6xx/CVS/Root linux-2.6.17/include/asm-sh/hp6xx/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/hp6xx/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/hp6xx/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/hp6xx/hp6xx.h linux-2.6.17/include/asm-sh/hp6xx/hp6xx.h
--- linux-2.6.17-vanilla/include/asm-sh/hp6xx/hp6xx.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/hp6xx/hp6xx.h	2006-07-12 16:54:26.000000000 +0000
@@ -2,16 +2,33 @@
 #define __ASM_SH_HP6XX_H
 
 /*
- * Copyright (C) 2003  Andriy Skulysh
+ * Copyright (C) 2003, 2004, 2005  Andriy Skulysh
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
  */
 
-#define HP680_TS_IRQ IRQ3_IRQ
+#define HP680_BTN_IRQ		IRQ0_IRQ
+#define HP680_TS_IRQ		IRQ3_IRQ
+#define HP680_HD64461_IRQ	IRQ4_IRQ
 
 #define DAC_LCD_BRIGHTNESS	0
 #define DAC_SPEAKER_VOLUME	1
 
+#define PGDR_OPENED		0x01
+#define PGDR_MAIN_BATTERY_OUT	0x04
+#define PGDR_PLAY_BUTTON	0x08
+#define PGDR_REWIND_BUTTON	0x10
+#define PGDR_RECORD_BUTTON	0x20
+
 #define PHDR_TS_PEN_DOWN	0x08
 
+#define PJDR_LED_BLINK		0x02
+
+#define PKDR_LED_GREEN		0x10
+
 #define SCPDR_TS_SCAN_ENABLE	0x20
 #define SCPDR_TS_SCAN_Y		0x02
 #define SCPDR_TS_SCAN_X		0x01
@@ -21,11 +38,43 @@
 
 #define ADC_CHANNEL_TS_Y	1
 #define ADC_CHANNEL_TS_X	2
+#define ADC_CHANNEL_BATTERY	3
+#define ADC_CHANNEL_BACKUP	4
+#define ADC_CHANNEL_CHARGE	5
 
 #define HD64461_GPADR_SPEAKER	0x01
 #define HD64461_GPADR_PCMCIA0	(0x02|0x08)
+
 #define HD64461_GPBDR_LCDOFF	0x01
+#define HD64461_GPBDR_LCD_CONTRAST_MASK	0x78
 #define HD64461_GPBDR_LED_RED	0x80
 
+#include <asm/hd64461.h>
+#include <asm/io.h>
+
+#define PJDR	0xa4000130
+#define PKDR	0xa4000132
+
+static inline void hp6xx_led_red(int on)
+{
+	u16 v16;
+	v16 = ctrl_inw(CONFIG_HD64461_IOBASE + HD64461_GPBDR - 0x10000);
+	if (on)
+	    ctrl_outw(v16 & (~HD64461_GPBDR_LED_RED), CONFIG_HD64461_IOBASE + HD64461_GPBDR - 0x10000);
+	else
+	    ctrl_outw(v16 | HD64461_GPBDR_LED_RED, CONFIG_HD64461_IOBASE + HD64461_GPBDR - 0x10000);
+}
+
+static inline void hp6xx_led_green(int on)
+{
+	u8 v8;
+	
+	v8 = ctrl_inb(PKDR);
+	if (on)
+	    ctrl_outb(v8 & (~PKDR_LED_GREEN), PKDR);
+	else
+	    ctrl_outb(v8 | PKDR_LED_GREEN, PKDR);
+}
+
 
 #endif /* __ASM_SH_HP6XX_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/hp6xx/io.h linux-2.6.17/include/asm-sh/hp6xx/io.h
--- linux-2.6.17-vanilla/include/asm-sh/hp6xx/io.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/hp6xx/io.h	2006-07-12 16:54:26.000000000 +0000
@@ -4,7 +4,7 @@
 /*
  * Nothing special here.. just use the generic cchip io routines.
  */
-#include <asm/hd64461/io.h>
+#include <asm/hd64461.h>
 
 #endif /* __ASM_SH_HP6XX_IO_H */
 
diff -ruN linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/CVS/Entries linux-2.6.17/include/asm-sh/hs7751rvoip/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/hs7751rvoip/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,3 @@
+/hs7751rvoip.h/1.4/Wed Jan 18 05:43:01 2006/-ko/
+/ide.h/1.1/Wed Apr 21 00:09:19 2004/-ko/
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/CVS/Repository linux-2.6.17/include/asm-sh/hs7751rvoip/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/hs7751rvoip/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/hs7751rvoip
diff -ruN linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/CVS/Root linux-2.6.17/include/asm-sh/hs7751rvoip/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/hs7751rvoip/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/hs7751rvoip.h linux-2.6.17/include/asm-sh/hs7751rvoip/hs7751rvoip.h
--- linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/hs7751rvoip.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/hs7751rvoip/hs7751rvoip.h	2006-07-12 16:54:26.000000000 +0000
@@ -19,8 +19,6 @@
 #define PA_OUTPORTR	0xa400000e	/* Output Port Reguster */
 #define PA_VERREG	0xa4000014	/* FPGA Version Register */
 
-#define PA_AREA5_IO	0xb4000000	/* Area 5 IO Memory */
-#define PA_AREA6_IO	0xb8000000	/* Area 6 IO Memory */
 #define PA_IDE_OFFSET	0x1f0		/* CF IDE Offset */
 
 #define IRLCNTR1	(PA_BCR + 0)	/* Interrupt Control Register1 */
@@ -44,4 +42,13 @@
 #define	IRQ_RINGING	4		/* Ringing IRQ */
 #define	IRQ_CODEC	5		/* CODEC IRQ */
 
+#define __IO_PREFIX	hs7751rvoip
+#include <asm/io_generic.h>
+
+/* arch/sh/boards/renesas/hs7751rvoip/irq.c */
+void init_hs7751rvoip_IRQ(void);
+
+/* arch/sh/boards/renesas/hs7751rvoip/io.c */
+void *hs7751rvoip_ioremap(unsigned long, unsigned long);
+
 #endif  /* __ASM_SH_RENESAS_HS7751RVOIP */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/io.h linux-2.6.17/include/asm-sh/io.h
--- linux-2.6.17-vanilla/include/asm-sh/io.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/io.h	2006-07-12 16:54:25.000000000 +0000
@@ -210,6 +210,11 @@
         *(volatile unsigned long*)addr = b;
 }
 
+static inline void ctrl_delay(void)
+{
+	ctrl_inw(P2SEG);
+}
+
 #define IO_SPACE_LIMIT 0xffffffff
 
 /*
diff -ruN linux-2.6.17-vanilla/include/asm-sh/irq-sh73180.h linux-2.6.17/include/asm-sh/irq-sh73180.h
--- linux-2.6.17-vanilla/include/asm-sh/irq-sh73180.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/irq-sh73180.h	2006-07-12 16:54:25.000000000 +0000
@@ -12,14 +12,14 @@
 #undef INTC_IPRC
 #undef INTC_IPRD
 
-#undef DMTE0_IRQ
-#undef DMTE1_IRQ
-#undef DMTE2_IRQ
-#undef DMTE3_IRQ
-#undef DMTE4_IRQ
-#undef DMTE5_IRQ
-#undef DMTE6_IRQ
-#undef DMTE7_IRQ
+#undef DMTE0_IRQ	
+#undef DMTE1_IRQ	
+#undef DMTE2_IRQ	
+#undef DMTE3_IRQ	
+#undef DMTE4_IRQ	
+#undef DMTE5_IRQ	
+#undef DMTE6_IRQ	
+#undef DMTE7_IRQ	
 #undef DMAE_IRQ
 #undef DMA_IPR_ADDR
 #undef DMA_IPR_POS
@@ -180,7 +180,7 @@
 #define FLSTE_IRQ	92
 #define FLTEND_IRQ	93
 #define FLTRQ0_IRQ	94
-#define FLTRQ1_IRQ	95
+#define FLTRQ1_IRQ	95	
 #define FLCTL_IPR_ADDR	INTC_IPRH
 #define FLCTL_IPR_POS	1
 #define FLCTL_PRIORITY	3
diff -ruN linux-2.6.17-vanilla/include/asm-sh/irq-sh7780.h linux-2.6.17/include/asm-sh/irq-sh7780.h
--- linux-2.6.17-vanilla/include/asm-sh/irq-sh7780.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/irq-sh7780.h	2006-07-12 16:54:25.000000000 +0000
@@ -145,11 +145,6 @@
 #define	TMU_CH5_IPR_POS		1
 #define TMU_CH5_PRIORITY	2
 
-#define	RTC_IRQ		22
-#define	RTC_IPR_ADDR	INTC_INT2PRI1
-#define	RTC_IPR_POS	0
-#define	RTC_PRIORITY	TIMER_PRIORITY
-
 /* SCIF0 */
 #define SCIF0_ERI_IRQ	40
 #define SCIF0_RXI_IRQ	41
diff -ruN linux-2.6.17-vanilla/include/asm-sh/irq.h linux-2.6.17/include/asm-sh/irq.h
--- linux-2.6.17-vanilla/include/asm-sh/irq.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/irq.h	2006-07-12 16:54:25.000000000 +0000
@@ -336,6 +336,11 @@
 extern unsigned short *irq_mask_register;
 
 /*
+ * PINT IRQs
+ */
+void init_IRQ_pint(void);
+
+/*
  * Function for "on chip support modules".
  */
 extern void make_ipr_irq(unsigned int irq, unsigned int addr,
@@ -578,7 +583,7 @@
 #define NR_INTC2_IRQS	64
 #elif defined(CONFIG_CPU_SUBTYPE_SH7780)
 #define INTC2_BASE	0xffd40000
-#define INTC2_FIRST_IRQ	22
+#define INTC2_FIRST_IRQ	21
 #define INTC2_INTMSK_OFFSET	(0x38)
 #define INTC2_INTMSKCLR_OFFSET	(0x3c)
 #define NR_INTC2_IRQS	60
diff -ruN linux-2.6.17-vanilla/include/asm-sh/kexec.h linux-2.6.17/include/asm-sh/kexec.h
--- linux-2.6.17-vanilla/include/asm-sh/kexec.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/kexec.h	2006-07-12 16:54:25.000000000 +0000
@@ -23,6 +23,8 @@
 /* The native architecture */
 #define KEXEC_ARCH KEXEC_ARCH_SH
 
+#define MAX_NOTE_BYTES 1024
+
 #ifndef __ASSEMBLY__
 
 extern void machine_shutdown(void);
diff -ruN linux-2.6.17-vanilla/include/asm-sh/kgdb.h linux-2.6.17/include/asm-sh/kgdb.h
--- linux-2.6.17-vanilla/include/asm-sh/kgdb.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/kgdb.h	2006-07-12 16:54:25.000000000 +0000
@@ -128,4 +128,19 @@
 #define KGDB_ASSERT(condition, message)
 #endif
 
+/* Taken from sh-stub.c of GDB 4.18 */
+static const char hexchars[] = "0123456789abcdef";
+
+/* Get high hex bits */
+static inline char highhex(const int x)
+{
+	return hexchars[(x >> 4) & 0xf];
+}
+
+/* Get low hex bits */
+static inline char lowhex(const int x)
+{
+	return hexchars[x & 0xf];
+}
+
 #endif
diff -ruN linux-2.6.17-vanilla/include/asm-sh/landisk/CVS/Entries linux-2.6.17/include/asm-sh/landisk/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/landisk/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/landisk/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,4 @@
+/gio.h/1.1/Thu Sep 29 07:23:18 2005/-ko/
+/ide.h/1.1/Thu Sep 29 07:23:18 2005/-ko/
+/iodata_landisk.h/1.3/Wed Jan 18 05:43:01 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/landisk/CVS/Repository linux-2.6.17/include/asm-sh/landisk/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/landisk/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/landisk/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/landisk
diff -ruN linux-2.6.17-vanilla/include/asm-sh/landisk/CVS/Root linux-2.6.17/include/asm-sh/landisk/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/landisk/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/landisk/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/landisk/gio.h linux-2.6.17/include/asm-sh/landisk/gio.h
--- linux-2.6.17-vanilla/include/asm-sh/landisk/gio.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/landisk/gio.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,45 @@
+#ifndef __ASM_SH_LANDISK_GIO_H
+#define __ASM_SH_LANDISK_GIO_H
+
+#include <linux/ioctl.h>
+
+/* version */
+#define VERSION_STR	"1.00"
+
+/* Driver name */
+#define GIO_DRIVER_NAME		"/dev/giodrv"
+
+/* Use 'k' as magic number */
+#define GIODRV_IOC_MAGIC  'k'
+
+#define GIODRV_IOCRESET    _IO(GIODRV_IOC_MAGIC, 0)
+/*
+ * S means "Set" through a ptr,
+ * T means "Tell" directly
+ * G means "Get" (to a pointed var)
+ * Q means "Query", response is on the return value
+ * X means "eXchange": G and S atomically
+ * H means "sHift": T and Q atomically
+ */
+#define GIODRV_IOCSGIODATA1   _IOW(GIODRV_IOC_MAGIC,  1, unsigned char *)
+#define GIODRV_IOCGGIODATA1   _IOR(GIODRV_IOC_MAGIC,  2, unsigned char *)
+#define GIODRV_IOCSGIODATA2   _IOW(GIODRV_IOC_MAGIC,  3, unsigned short *)
+#define GIODRV_IOCGGIODATA2   _IOR(GIODRV_IOC_MAGIC,  4, unsigned short *)
+#define GIODRV_IOCSGIODATA4   _IOW(GIODRV_IOC_MAGIC,  5, unsigned long *)
+#define GIODRV_IOCGGIODATA4   _IOR(GIODRV_IOC_MAGIC,  6, unsigned long *)
+#define GIODRV_IOCSGIOSETADDR _IOW(GIODRV_IOC_MAGIC,  7, unsigned long *)
+#define GIODRV_IOCHARDRESET   _IO(GIODRV_IOC_MAGIC, 8) /* debugging tool */
+
+#define GIODRV_IOCSGIO_LED    _IOW(GIODRV_IOC_MAGIC,  9, unsigned long *)
+#define GIODRV_IOCGGIO_LED    _IOR(GIODRV_IOC_MAGIC,  10, unsigned long *)
+#define GIODRV_IOCSGIO_BUZZER _IOW(GIODRV_IOC_MAGIC,  11, unsigned long *)
+#define GIODRV_IOCGGIO_LANDISK _IOR(GIODRV_IOC_MAGIC,  14, unsigned long *)
+#define GIODRV_IOCGGIO_BTN _IOR(GIODRV_IOC_MAGIC,  22, unsigned long *)
+#define GIODRV_IOCSGIO_BTNPID _IOW(GIODRV_IOC_MAGIC,  23, unsigned long *)
+#define GIODRV_IOCGGIO_BTNPID _IOR(GIODRV_IOC_MAGIC,  24, unsigned long *)
+
+#define GIODRV_IOC_MAXNR 8
+#define GIO_READ 0x00000000
+#define GIO_WRITE 0x00000001
+
+#endif /* __ASM_SH_LANDISK_GIO_H  */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/landisk/ide.h linux-2.6.17/include/asm-sh/landisk/ide.h
--- linux-2.6.17-vanilla/include/asm-sh/landisk/ide.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/landisk/ide.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,14 @@
+/*
+ * modifed by kogiidena  
+ * 2005.03.03
+ */
+
+#ifndef __ASM_SH_LANDISK_IDE_H
+#define __ASM_SH_LANDISK_IDE_H
+
+/* Nothing to see here.. */
+#include <asm/landisk/iodata_landisk.h>
+#define IRQ_CFCARD	IRQ_FATA	/* CF Card IRQ */
+#define IRQ_PCMCIA	IRQ_ATA		/* PCMCIA IRQ */
+
+#endif /* __ASM_SH_LANDISK_IDE_H  */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/landisk/iodata_landisk.h linux-2.6.17/include/asm-sh/landisk/iodata_landisk.h
--- linux-2.6.17-vanilla/include/asm-sh/landisk/iodata_landisk.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/landisk/iodata_landisk.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,79 @@
+#ifndef __ASM_SH_IODATA_LANDISK_H
+#define __ASM_SH_IODATA_LANDISK_H
+
+/*
+ * linux/include/asm-sh/landisk/iodata_landisk.h
+ *
+ * Copyright (C) 2000  Atom Create Engineering Co., Ltd.
+ *
+ * IO-DATA LANDISK support
+ */
+
+/* Box specific addresses.  */
+
+#define PA_USB		0xa4000000	/* USB Controller M66590 */
+
+#define PA_ATARST	0xb0000000	/* ATA/FATA Access Control Register */
+#define PA_LED		0xb0000001	/* LED Control Register */
+#define PA_STATUS	0xb0000002	/* Switch Status Register */
+#define PA_SHUTDOWN	0xb0000003	/* Shutdown Control Register */
+#define PA_PCIPME	0xb0000004	/* PCI PME Status Register */
+#define PA_IMASK	0xb0000005	/* Interrupt Mask Register */
+/* 2003.10.31 I-O DATA NSD NWG	add.	for shutdown port clear */
+#define PA_PWRINT_CLR	0xb0000006	/* Shutdown Interrupt clear Register */
+
+#define PA_LCD_CLRDSP	0x00		/* LCD Clear Display Offset */
+#define PA_LCD_RTNHOME	0x00		/* LCD Return Home Offset */
+#define PA_LCD_ENTMODE	0x00		/* LCD Entry Mode Offset */
+#define PA_LCD_DSPCTL	0x00		/* LCD Display ON/OFF Control Offset */
+#define PA_LCD_FUNC	0x00		/* LCD Function Set Offset */
+#define PA_LCD_CGRAM	0x00		/* LCD Set CGRAM Address Offset */
+#define PA_LCD_DDRAM	0x00		/* LCD Set DDRAM Address Offset */
+#define PA_LCD_RDFLAG	0x01		/* LCD Read Busy Flag Offset */
+#define PA_LCD_WTDATA	0x02		/* LCD Write Datat to RAM Offset */
+#define PA_LCD_RDDATA	0x03		/* LCD Read Data from RAM Offset */
+#define PA_PIDE_OFFSET	0x40		/* CF IDE Offset */
+#define PA_SIDE_OFFSET	0x40		/* HDD IDE Offset */
+
+#define IRQ_PCIINTA	5		/* PCI INTA IRQ */
+#define IRQ_PCIINTB	6		/* PCI INTB IRQ */
+#define IRQ_PCIINDC	7		/* PCI INTC IRQ */
+#define IRQ_PCIINTD	8		/* PCI INTD IRQ */
+#define IRQ_ATA		9		/* ATA IRQ */
+#define IRQ_FATA	10		/* FATA IRQ */
+#define IRQ_POWER	11		/* Power Switch IRQ */
+#define IRQ_BUTTON	12		/* USL-5P Button IRQ */
+#define IRQ_FAULT	13		/* USL-5P Fault  IRQ */
+
+#define SHUTDOWN_BTN_MAJOR	99	/* Shutdown button device major no. */
+
+#define SHUTDOWN_LOOP_CNT	5	/* Shutdown button Detection loop */
+#define SHUTDOWN_DELAY		200	/* Shutdown button delay value(ms) */
+
+
+/* added by kogiidena */
+/*
+ *  landisk_ledparam
+ *            
+ * led  ------10 -6543210 -6543210 -6543210  
+ *     |000000..|0.......|0.......|U.......|
+ *     |  HARD  |fastblik| blink  |   on   | 
+ *  
+ *   led0: power       U:update flag
+ *   led1: error
+ *   led2: usb1
+ *   led3: usb2
+ *   led4: usb3
+ *   led5: usb4
+ *   led6: usb5
+ *
+ */
+extern int landisk_ledparam;    /* from setup.c */
+extern int landisk_buzzerparam; /* from setup.c */
+extern int landisk_arch;        /* from setup.c */
+
+#define __IO_PREFIX landisk
+#include <asm/io_generic.h>
+
+#endif  /* __ASM_SH_IODATA_LANDISK_H */
+
diff -ruN linux-2.6.17-vanilla/include/asm-sh/mc146818rtc.h linux-2.6.17/include/asm-sh/mc146818rtc.h
--- linux-2.6.17-vanilla/include/asm-sh/mc146818rtc.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/mc146818rtc.h	2006-07-12 16:54:25.000000000 +0000
@@ -24,7 +24,7 @@
 #define CMOS_WRITE(val,addr)	__CMOS_WRITE(val,addr,b)
 
 #elif defined(CONFIG_SH_SECUREEDGE5410)
-#include <asm/snapgear/io.h>
+#include <asm/snapgear.h>
 
 #define RTC_PORT(n)             SECUREEDGE_IOPORT_ADDR
 #define CMOS_READ(addr)         secureedge5410_cmos_read(addr)
diff -ruN linux-2.6.17-vanilla/include/asm-sh/mmu.h linux-2.6.17/include/asm-sh/mmu.h
--- linux-2.6.17-vanilla/include/asm-sh/mmu.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/mmu.h	2006-07-12 16:54:25.000000000 +0000
@@ -25,5 +25,60 @@
 typedef unsigned long mm_context_t;
 
 #endif /* CONFIG_MMU */
-#endif /* __MMH_H */
+
+/*
+ * Privileged Space Mapping Buffer (PMB) definitions
+ */
+#define PMB_PASCR		0xff000070
+#define PMB_IRMCR		0xff000078
+
+#define PMB_ADDR		0xf6100000
+#define PMB_DATA		0xf7100000
+#define PMB_ENTRY_MAX		16
+#define PMB_E_MASK		0x0000000f
+#define PMB_E_SHIFT		8
+
+#define PMB_SZ_16M		0x00000000
+#define PMB_SZ_64M		0x00000010
+#define PMB_SZ_128M		0x00000080
+#define PMB_SZ_512M		0x00000090
+#define PMB_SZ_MASK		PMB_SZ_512M
+#define PMB_C			0x00000008
+#define PMB_WT			0x00000001
+#define PMB_UB			0x00000200
+#define PMB_V			0x00000100
+
+#define PMB_NO_ENTRY		(-1)
+
+struct pmb_entry;
+
+struct pmb_entry {
+	unsigned long vpn;
+	unsigned long ppn;
+	unsigned long flags;
+
+	/*
+	 * 0 .. NR_PMB_ENTRIES for specific entry selection, or
+	 * PMB_NO_ENTRY to search for a free one
+	 */
+	int entry;
+
+	struct pmb_entry *next;
+	/* Adjacent entry link for contiguous multi-entry mappings */
+	struct pmb_entry *link;
+};
+
+/* arch/sh/mm/pmb.c */
+int __set_pmb_entry(unsigned long vpn, unsigned long ppn,
+		    unsigned long flags, int *entry);
+int set_pmb_entry(struct pmb_entry *pmbe);
+void clear_pmb_entry(struct pmb_entry *pmbe);
+struct pmb_entry *pmb_alloc(unsigned long vpn, unsigned long ppn,
+			    unsigned long flags);
+void pmb_free(struct pmb_entry *pmbe);
+long pmb_remap(unsigned long virt, unsigned long phys,
+	       unsigned long size, unsigned long flags);
+void pmb_unmap(unsigned long addr);
+
+#endif /* __MMU_H */
 
diff -ruN linux-2.6.17-vanilla/include/asm-sh/mmu_context.h linux-2.6.17/include/asm-sh/mmu_context.h
--- linux-2.6.17-vanilla/include/asm-sh/mmu_context.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/mmu_context.h	2006-07-12 16:54:25.000000000 +0000
@@ -174,9 +174,7 @@
 {
 	/* Enable MMU */
 	ctrl_outl(MMU_CONTROL_INIT, MMUCR);
-
-	/* The manual suggests doing some nops after turning on the MMU */
-	__asm__ __volatile__ ("nop;nop;nop;nop;nop;nop;nop;nop\n\t");
+	ctrl_barrier();
 
 	if (mmu_context_cache == NO_CONTEXT)
 		mmu_context_cache = MMU_CONTEXT_FIRST_VERSION;
@@ -191,7 +189,8 @@
 	cr = ctrl_inl(MMUCR);
 	cr &= ~MMU_CONTROL_INIT;
 	ctrl_outl(cr, MMUCR);
-	__asm__ __volatile__ ("nop;nop;nop;nop;nop;nop;nop;nop\n\t");
+
+	ctrl_barrier();
 }
 #else
 /*
diff -ruN linux-2.6.17-vanilla/include/asm-sh/mpc1211/CVS/Entries linux-2.6.17/include/asm-sh/mpc1211/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/mpc1211/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/mpc1211/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,8 @@
+/dma.h/1.1/Fri May 16 17:19:08 2003/-ko/
+/io.h/1.3/Mon Aug  4 01:51:58 2003/-ko/
+/keyboard.h/1.2/Wed Mar  2 13:03:01 2005/-ko/
+/m1543c.h/1.1/Fri May 16 17:19:08 2003/-ko/
+/mc146818rtc.h/1.1/Fri May 16 17:19:08 2003/-ko/
+/mpc1211.h/1.1/Fri May 16 17:19:08 2003/-ko/
+/pci.h/1.1/Fri May 16 17:19:08 2003/-ko/
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/mpc1211/CVS/Repository linux-2.6.17/include/asm-sh/mpc1211/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/mpc1211/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/mpc1211/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/mpc1211
diff -ruN linux-2.6.17-vanilla/include/asm-sh/mpc1211/CVS/Root linux-2.6.17/include/asm-sh/mpc1211/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/mpc1211/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/mpc1211/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/namei.h linux-2.6.17/include/asm-sh/namei.h
--- linux-2.6.17-vanilla/include/asm-sh/namei.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/namei.h	2006-07-12 16:54:25.000000000 +0000
@@ -1,4 +1,4 @@
-/* $Id: namei.h,v 1.3 2000/07/04 06:24:49 gniibe Exp $
+/* $Id: namei.h,v 1.2 2000/04/14 19:14:01 mjd Exp $
  * linux/include/asm-sh/namei.h
  *
  * Included from linux/fs/namei.c
diff -ruN linux-2.6.17-vanilla/include/asm-sh/overdrive/CVS/Entries linux-2.6.17/include/asm-sh/overdrive/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/overdrive/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/overdrive/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,5 @@
+/fpga.h/1.2/Fri Nov  1 17:19:31 2002//
+/gt64111.h/1.2/Fri Nov  1 17:19:31 2002//
+/io.h/1.3/Tue Jul 29 14:27:12 2003//
+/overdrive.h/1.2/Fri Nov  1 17:19:31 2002//
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/overdrive/CVS/Repository linux-2.6.17/include/asm-sh/overdrive/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/overdrive/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/overdrive/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/overdrive
diff -ruN linux-2.6.17-vanilla/include/asm-sh/overdrive/CVS/Root linux-2.6.17/include/asm-sh/overdrive/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/overdrive/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/overdrive/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/page.h linux-2.6.17/include/asm-sh/page.h
--- linux-2.6.17-vanilla/include/asm-sh/page.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/page.h	2006-07-12 16:54:25.000000000 +0000
@@ -31,7 +31,6 @@
 #define HPAGE_SIZE		(1UL << HPAGE_SHIFT)
 #define HPAGE_MASK		(~(HPAGE_SIZE-1))
 #define HUGETLB_PAGE_ORDER	(HPAGE_SHIFT-PAGE_SHIFT)
-#define ARCH_HAS_SETCLEAR_HUGE_PTE
 #endif
 
 #ifdef __KERNEL__
@@ -43,38 +42,30 @@
 extern void clear_page_slow(void *to);
 extern void copy_page_slow(void *to, void *from);
 
-#if defined(CONFIG_SH7705_CACHE_32KB) && defined(CONFIG_MMU)
+#if defined(CONFIG_MMU) && (defined(CONFIG_CPU_SH4) || \
+	defined(CONFIG_SH7705_CACHE_32KB))
 struct page;
 extern void clear_user_page(void *to, unsigned long address, struct page *pg);
 extern void copy_user_page(void *to, void *from, unsigned long address, struct page *pg);
 extern void __clear_user_page(void *to, void *orig_to);
 extern void __copy_user_page(void *to, void *from, void *orig_to);
-#elif defined(CONFIG_CPU_SH2) || defined(CONFIG_CPU_SH3) || !defined(CONFIG_MMU)
+#elif defined(CONFIG_CPU_SH3) || !defined(CONFIG_MMU)
 #define clear_user_page(page, vaddr, pg)	clear_page(page)
 #define copy_user_page(to, from, vaddr, pg)	copy_page(to, from)
-#elif defined(CONFIG_CPU_SH4)
-struct page;
-extern void clear_user_page(void *to, unsigned long address, struct page *pg);
-extern void copy_user_page(void *to, void *from, unsigned long address, struct page *pg);
-extern void __clear_user_page(void *to, void *orig_to);
-extern void __copy_user_page(void *to, void *from, void *orig_to);
 #endif
 
 /*
  * These are used to make use of C type-checking..
  */
 typedef struct { unsigned long pte; } pte_t;
-typedef struct { unsigned long pmd; } pmd_t;
 typedef struct { unsigned long pgd; } pgd_t;
 typedef struct { unsigned long pgprot; } pgprot_t;
 
 #define pte_val(x)	((x).pte)
-#define pmd_val(x)	((x).pmd)
 #define pgd_val(x)	((x).pgd)
 #define pgprot_val(x)	((x).pgprot)
 
 #define __pte(x) ((pte_t) { (x) } )
-#define __pmd(x) ((pmd_t) { (x) } )
 #define __pgd(x) ((pgd_t) { (x) } )
 #define __pgprot(x)	((pgprot_t) { (x) } )
 
@@ -105,7 +96,7 @@
 
 /* PFN start number, because of __MEMORY_START */
 #define PFN_START		(__MEMORY_START >> PAGE_SHIFT)
-#define ARCH_PFN_OFFSET		(FPN_START)
+#define ARCH_PFN_OFFSET		(PFN_START)
 #define virt_to_page(kaddr)	pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
 #define pfn_valid(pfn)		(((pfn) - PFN_START) < max_mapnr)
 #define virt_addr_valid(kaddr)	pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
diff -ruN linux-2.6.17-vanilla/include/asm-sh/pci.h linux-2.6.17/include/asm-sh/pci.h
--- linux-2.6.17-vanilla/include/asm-sh/pci.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/pci.h	2006-07-12 16:54:25.000000000 +0000
@@ -32,6 +32,34 @@
 #define PCIBIOS_MIN_IO		board_pci_channels->io_resource->start
 #define PCIBIOS_MIN_MEM		board_pci_channels->mem_resource->start
 
+/*
+ * I/O routine helpers
+ */
+#ifdef CONFIG_CPU_SUBTYPE_SH7780
+#define PCI_IO_AREA		0xFE400000
+#define PCI_IO_SIZE		0x00400000
+#else
+#define PCI_IO_AREA		0xFE240000
+#define PCI_IO_SIZE		0X00040000
+#endif
+
+#define PCI_MEM_SIZE		0x01000000
+
+#define SH4_PCIIOBR_MASK	0xFFFC0000
+#define pci_ioaddr(addr)	(PCI_IO_AREA + (addr & ~SH4_PCIIOBR_MASK))
+
+#if defined(CONFIG_PCI)
+#define is_pci_ioaddr(port)		\
+	(((port) >= PCIBIOS_MIN_IO) &&	\
+	 ((port) < (PCIBIOS_MIN_IO + PCI_IO_SIZE)))
+#define is_pci_memaddr(port)		\
+	(((port) >= PCIBIOS_MIN_MEM) &&	\
+	 ((port) < (PCIBIOS_MIN_MEM + PCI_MEM_SIZE)))
+#else
+#define is_pci_ioaddr(port)	(0)
+#define is_pci_memaddr(port)	(0)
+#endif
+
 struct pci_dev;
 
 extern void pcibios_set_master(struct pci_dev *dev);
@@ -87,15 +115,6 @@
  */
 #define pci_dac_dma_supported(pci_dev, mask) (0)
 
-/* These macros should be used after a pci_map_sg call has been done
- * to get bus addresses of each of the SG entries and their lengths.
- * You should only work with the number of sg entries pci_map_sg
- * returns, or alternatively stop on the first sg_dma_len(sg) which
- * is 0.
- */
-#define sg_dma_address(sg)	(virt_to_bus((sg)->dma_address))
-#define sg_dma_len(sg)		((sg)->length)
-
 #ifdef CONFIG_PCI
 static inline void pci_dma_burst_advice(struct pci_dev *pdev,
 					enum pci_dma_burst_strategy *strat,
@@ -107,11 +126,12 @@
 #endif
 
 /* Board-specific fixup routines. */
-extern void pcibios_fixup(void);
-extern void pcibios_fixup_irqs(void);
+void pcibios_fixup(void);
+int pcibios_init_platform(void);
+int pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin);
 
 #ifdef CONFIG_PCI_AUTO
-extern int pciauto_assign_resources(int busno, struct pci_channel *hose);
+int pciauto_assign_resources(int busno, struct pci_channel *hose);
 #endif
 
 static inline void pcibios_add_platform_entries(struct pci_dev *dev)
diff -ruN linux-2.6.17-vanilla/include/asm-sh/pgalloc.h linux-2.6.17/include/asm-sh/pgalloc.h
--- linux-2.6.17-vanilla/include/asm-sh/pgalloc.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/pgalloc.h	2006-07-12 16:54:25.000000000 +0000
@@ -1,15 +1,6 @@
 #ifndef __ASM_SH_PGALLOC_H
 #define __ASM_SH_PGALLOC_H
 
-#include <linux/threads.h>
-#include <linux/slab.h>
-#include <linux/mm.h>
-
-#define pgd_quicklist ((unsigned long *)0)
-#define pmd_quicklist ((unsigned long *)0)
-#define pte_quicklist ((unsigned long *)0)
-#define pgtable_cache_size 0L
-
 #define pmd_populate_kernel(mm, pmd, pte) \
 		set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte)))
 
@@ -24,38 +15,24 @@
  */
 static inline pgd_t *pgd_alloc(struct mm_struct *mm)
 {
-	unsigned int pgd_size = (USER_PTRS_PER_PGD * sizeof(pgd_t));
-	pgd_t *pgd = (pgd_t *)kmalloc(pgd_size, GFP_KERNEL);
-
-	if (pgd)
-		memset(pgd, 0, pgd_size);
-
-	return pgd;
+	return (pgd_t *)__get_free_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO);
 }
 
 static inline void pgd_free(pgd_t *pgd)
 {
-	kfree(pgd);
+	free_page((unsigned long)pgd);
 }
 
 static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm,
 					  unsigned long address)
 {
-	pte_t *pte;
-
-	pte = (pte_t *) __get_free_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO);
-
-	return pte;
+	return (pte_t *)__get_free_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO);
 }
 
 static inline struct page *pte_alloc_one(struct mm_struct *mm,
 					 unsigned long address)
 {
-	struct page *pte;
-
-   	pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0);
-
-	return pte;
+	return alloc_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO);
 }
 
 static inline void pte_free_kernel(pte_t *pte)
@@ -75,14 +52,8 @@
  * inside the pgd, so has no extra memory associated with it.
  */
 
-#define pmd_alloc_one(mm, addr)		({ BUG(); ((pmd_t *)2); })
 #define pmd_free(x)			do { } while (0)
 #define __pmd_free_tlb(tlb,x)		do { } while (0)
-#define pgd_populate(mm, pmd, pte)	BUG()
 #define check_pgt_cache()		do { } while (0)
 
-#ifdef CONFIG_CPU_SH4
-#define PG_mapped			PG_arch_1
-#endif
-
 #endif /* __ASM_SH_PGALLOC_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/pgtable.h linux-2.6.17/include/asm-sh/pgtable.h
--- linux-2.6.17-vanilla/include/asm-sh/pgtable.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/pgtable.h	2006-07-12 16:54:25.000000000 +0000
@@ -1,43 +1,43 @@
-#ifndef __ASM_SH_PGTABLE_H
-#define __ASM_SH_PGTABLE_H
-
-#include <asm-generic/4level-fixup.h>
-
 /*
+ * This file contains the functions and defines necessary to modify and
+ * use the SuperH page table tree.
+ *
  * Copyright (C) 1999 Niibe Yutaka
- * Copyright (C) 2002, 2003, 2004 Paul Mundt
+ * Copyright (C) 2002 - 2005 Paul Mundt
+ *
+ * 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 __ASM_SH_PGTABLE_H
+#define __ASM_SH_PGTABLE_H
 
 #include <linux/config.h>
-#include <asm/pgtable-2level.h>
+#include <asm-generic/pgtable-nopmd.h>
+#include <asm/page.h>
+
+#define PTRS_PER_PGD		1024
 
-/*
- * This file contains the functions and defines necessary to modify and use
- * the SuperH page table tree.
- */
 #ifndef __ASSEMBLY__
-#include <asm/processor.h>
 #include <asm/addrspace.h>
 #include <asm/fixmap.h>
-#include <linux/threads.h>
 
 extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
 extern void paging_init(void);
 
 /*
- * Basically we have the same two-level (which is the logical three level
- * Linux page table layout folded) page tables as the i386.
- */
-
-/*
  * ZERO_PAGE is a global shared page that is always zero: used
  * for zero-mapped memory areas etc..
  */
-extern unsigned long empty_zero_page[1024];
+extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)];
 #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page))
 
 #endif /* !__ASSEMBLY__ */
 
+/* traditional two-level paging structure */
+#define PGDIR_SHIFT	22
+#define PTRS_PER_PMD	1
+#define PTRS_PER_PTE	1024
 #define PMD_SIZE	(1UL << PMD_SHIFT)
 #define PMD_MASK	(~(PMD_SIZE-1))
 #define PGDIR_SIZE	(1UL << PGDIR_SHIFT)
@@ -48,7 +48,6 @@
 
 #define PTE_PHYS_MASK	0x1ffff000
 
-#ifndef __ASSEMBLY__
 /*
  * First 1MB map is used by fixed purpose.
  * Currently only 4-enty (16kB) is used (see arch/sh/mm/cache.c)
@@ -56,20 +55,41 @@
 #define VMALLOC_START	(P3SEG+0x00100000)
 #define VMALLOC_END	(FIXADDR_START-2*PAGE_SIZE)
 
-#define	_PAGE_WT	0x001  /* WT-bit on SH-4, 0 on SH-3 */
-#define _PAGE_HW_SHARED	0x002  /* SH-bit  : page is shared among processes */
-#define _PAGE_DIRTY	0x004  /* D-bit   : page changed */
-#define _PAGE_CACHABLE	0x008  /* C-bit   : cachable */
-#define _PAGE_SZ0	0x010  /* SZ0-bit : Size of page */
-#define _PAGE_RW	0x020  /* PR0-bit : write access allowed */
-#define _PAGE_USER	0x040  /* PR1-bit : user space access allowed */
-#define _PAGE_SZ1	0x080  /* SZ1-bit : Size of page (on SH-4) */
-#define _PAGE_PRESENT	0x100  /* V-bit   : page is valid */
-#define _PAGE_PROTNONE	0x200  /* software: if not present  */
-#define _PAGE_ACCESSED 	0x400  /* software: page referenced */
-#define _PAGE_U0_SHARED 0x800  /* software: page is shared in user space */
-
-#define	_PAGE_FILE	_PAGE_WT  /* software: pagecache or swap? */
+/*
+ * Linux PTEL encoding.
+ *
+ * Hardware and software bit definitions for the PTEL value:
+ *
+ * - Bits 0 and 7 are reserved on SH-3 (_PAGE_WT and _PAGE_SZ1 on SH-4).
+ *
+ * - Bit 1 is the SH-bit, but is unused on SH-3 due to an MMU bug (the
+ *   hardware PTEL value can't have the SH-bit set when MMUCR.IX is set,
+ *   which is the default in cpu-sh3/mmu_context.h:MMU_CONTROL_INIT).
+ *
+ *   In order to keep this relatively clean, do not use these for defining
+ *   SH-3 specific flags until all of the other unused bits have been
+ *   exhausted.
+ *
+ * - Bit 9 is reserved by everyone and used by _PAGE_PROTNONE.
+ *
+ * - Bits 10 and 11 are low bits of the PPN that are reserved on >= 4K pages.
+ *   Bit 10 is used for _PAGE_ACCESSED, bit 11 remains unused.
+ *
+ * - Bits 31, 30, and 29 remain unused by everyone and can be used for future
+ *   software flags, although care must be taken to update _PAGE_CLEAR_FLAGS.
+ */
+#define	_PAGE_WT	0x001		/* WT-bit on SH-4, 0 on SH-3 */
+#define _PAGE_HW_SHARED	0x002		/* SH-bit  : shared among processes */
+#define _PAGE_DIRTY	0x004		/* D-bit   : page changed */
+#define _PAGE_CACHABLE	0x008		/* C-bit   : cachable */
+#define _PAGE_SZ0	0x010		/* SZ0-bit : Size of page */
+#define _PAGE_RW	0x020		/* PR0-bit : write access allowed */
+#define _PAGE_USER	0x040		/* PR1-bit : user space access allowed */
+#define _PAGE_SZ1	0x080		/* SZ1-bit : Size of page (on SH-4) */
+#define _PAGE_PRESENT	0x100		/* V-bit   : page is valid */
+#define _PAGE_PROTNONE	0x200		/* software: if not present  */
+#define _PAGE_ACCESSED	0x400		/* software: page referenced */
+#define _PAGE_FILE	_PAGE_WT	/* software: pagecache or swap? */
 
 /* software: moves to PTEA.TC (Timing Control) */
 #define _PAGE_PCC_AREA5	0x00000000	/* use BSC registers for area5 */
@@ -84,23 +104,17 @@
 #define _PAGE_PCC_ATR8	0x60000000	/* Attribute Memory space, 8 bit bus */
 #define _PAGE_PCC_ATR16	0x60000001	/* Attribute Memory space, 6 bit bus */
 
-
-/* Mask which drop software flags
- * We also drop WT bit since it is used for _PAGE_FILE
- * bit in this implementation.
- */
-#define _PAGE_CLEAR_FLAGS	(_PAGE_WT | _PAGE_PROTNONE | _PAGE_ACCESSED | _PAGE_U0_SHARED)
-
-#if defined(CONFIG_CPU_SH3)
-/*
- * MMU on SH-3 has bug on SH-bit: We can't use it if MMUCR.IX=1.
- * Work around: Just drop SH-bit.
- */
-#define _PAGE_FLAGS_HARDWARE_MASK	(0x1fffffff & ~(_PAGE_CLEAR_FLAGS | _PAGE_HW_SHARED))
+/* Mask which drops unused bits from the PTEL value */
+#ifdef CONFIG_CPU_SH3
+#define _PAGE_CLEAR_FLAGS	(_PAGE_PROTNONE | _PAGE_ACCESSED| \
+				 _PAGE_FILE	| _PAGE_SZ1	| \
+				 _PAGE_HW_SHARED)
 #else
-#define _PAGE_FLAGS_HARDWARE_MASK	(0x1fffffff & ~(_PAGE_CLEAR_FLAGS))
+#define _PAGE_CLEAR_FLAGS	(_PAGE_PROTNONE | _PAGE_ACCESSED | _PAGE_FILE)
 #endif
 
+#define _PAGE_FLAGS_HARDWARE_MASK	(0x1fffffff & ~(_PAGE_CLEAR_FLAGS))
+
 /* Hardware flags: SZ0=1 (4k-byte) */
 #define _PAGE_FLAGS_HARD	_PAGE_SZ0
 
@@ -110,15 +124,15 @@
 #define _PAGE_SZHUGE	(_PAGE_SZ0 | _PAGE_SZ1)
 #endif
 
-#define _PAGE_SHARED	_PAGE_U0_SHARED
-
 #define _PAGE_TABLE	(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY)
 #define _KERNPG_TABLE	(_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY)
-#define _PAGE_CHG_MASK	(PTE_MASK | _PAGE_ACCESSED | _PAGE_CACHABLE | _PAGE_DIRTY | _PAGE_SHARED)
+#define _PAGE_CHG_MASK	(PTE_MASK | _PAGE_ACCESSED | _PAGE_CACHABLE | _PAGE_DIRTY)
+
+#ifndef __ASSEMBLY__
 
 #ifdef CONFIG_MMU
 #define PAGE_NONE	__pgprot(_PAGE_PROTNONE | _PAGE_CACHABLE |_PAGE_ACCESSED | _PAGE_FLAGS_HARD)
-#define PAGE_SHARED	__pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_CACHABLE |_PAGE_ACCESSED | _PAGE_SHARED | _PAGE_FLAGS_HARD)
+#define PAGE_SHARED	__pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_CACHABLE |_PAGE_ACCESSED | _PAGE_FLAGS_HARD)
 #define PAGE_COPY	__pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_CACHABLE | _PAGE_ACCESSED | _PAGE_FLAGS_HARD)
 #define PAGE_READONLY	__pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_CACHABLE | _PAGE_ACCESSED | _PAGE_FLAGS_HARD)
 #define PAGE_KERNEL	__pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_CACHABLE | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_HW_SHARED | _PAGE_FLAGS_HARD)
@@ -138,12 +152,13 @@
 #define PAGE_KERNEL_PCC		__pgprot(0)
 #endif
 
+#endif /* __ASSEMBLY__ */
+
 /*
  * As i386 and MIPS, SuperH can't do page protection for execute, and
  * considers that the same as a read.  Also, write permissions imply
- * read permissions. This is the closest we can get..  
+ * read permissions. This is the closest we can get..
  */
-
 #define __P000	PAGE_NONE
 #define __P001	PAGE_READONLY
 #define __P010	PAGE_COPY
@@ -162,6 +177,26 @@
 #define __S110	PAGE_SHARED
 #define __S111	PAGE_SHARED
 
+#ifndef __ASSEMBLY__
+
+/*
+ * Certain architectures need to do special things when PTEs
+ * within a page table are directly modified.  Thus, the following
+ * hook is made available.
+ */
+#define set_pte(pteptr, pteval) (*(pteptr) = pteval)
+#define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval)
+
+/*
+ * (pmds are folded into pgds so this doesn't get actually called,
+ * but the define is needed for a generic inline function.)
+ */
+#define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval)
+
+#define pte_pfn(x)		((unsigned long)(((x).pte >> PAGE_SHIFT)))
+#define pfn_pte(pfn, prot)	__pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
+#define pfn_pmd(pfn, prot)	__pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot))
+
 #define pte_none(x)	(!pte_val(x))
 #define pte_present(x)	(pte_val(x) & (_PAGE_PRESENT | _PAGE_PROTNONE))
 #define pte_clear(mm,addr,xp)	do { set_pte_at(mm, addr, xp, __pte(0)); } while (0)
@@ -172,7 +207,7 @@
 #define	pmd_bad(x)	((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE)
 
 #define pages_to_mb(x)	((x) >> (20-PAGE_SHIFT))
-#define pte_page(x) 	phys_to_page(pte_val(x)&PTE_PHYS_MASK)
+#define pte_page(x)	phys_to_page(pte_val(x)&PTE_PHYS_MASK)
 
 /*
  * The following only work if pte_present() is true.
@@ -249,6 +284,11 @@
 #define pte_unmap(pte)		do { } while (0)
 #define pte_unmap_nested(pte)	do { } while (0)
 
+#define pte_ERROR(e) \
+	printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e))
+#define pgd_ERROR(e) \
+	printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e))
+
 struct vm_area_struct;
 extern void update_mmu_cache(struct vm_area_struct * vma,
 			     unsigned long address, pte_t pte);
@@ -273,8 +313,6 @@
 
 typedef pte_t *pte_addr_t;
 
-#endif /* !__ASSEMBLY__ */
-
 #define kern_addr_valid(addr)	(1)
 
 #define io_remap_pfn_range(vma, vaddr, pfn, size, prot)		\
@@ -302,5 +340,7 @@
 
 #include <asm-generic/pgtable.h>
 
+#endif /* !__ASSEMBLY__ */
+
 #endif /* __ASM_SH_PAGE_H */
 
diff -ruN linux-2.6.17-vanilla/include/asm-sh/pm.h linux-2.6.17/include/asm-sh/pm.h
--- linux-2.6.17-vanilla/include/asm-sh/pm.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/pm.h	2006-07-12 16:54:25.000000000 +0000
@@ -0,0 +1,17 @@
+/* 
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ *
+ * Copyright 2006 (c) Andriy Skulysh <askulysh@gmail.com>
+ *
+ */
+#ifndef __ASM_SH_PM_H
+#define __ASM_SH_PM_H
+
+extern u8 wakeup_start;
+extern u8 wakeup_end;
+
+void pm_enter(void);
+
+#endif
diff -ruN linux-2.6.17-vanilla/include/asm-sh/processor.h linux-2.6.17/include/asm-sh/processor.h
--- linux-2.6.17-vanilla/include/asm-sh/processor.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/processor.h	2006-07-12 16:54:26.000000000 +0000
@@ -148,6 +148,10 @@
 	union sh_fpu_union fpu;
 };
 
+typedef struct {
+	unsigned long seg;
+} mm_segment_t;
+
 /* Count of active tasks with UBC settings */
 extern int ubc_usercnt;
 
@@ -265,5 +269,18 @@
 #define cpu_sleep()	__asm__ __volatile__ ("sleep" : : : "memory")
 #define cpu_relax()	do { } while (0)
 
+#if defined(CONFIG_CPU_SH2A) || defined(CONFIG_CPU_SH3) || \
+    defined(CONFIG_CPU_SH4)
+#define PREFETCH_STRIDE		L1_CACHE_BYTES
+#define ARCH_HAS_PREFETCH
+#define ARCH_HAS_PREFETCHW
+static inline void prefetch(void *x)
+{
+	__asm__ __volatile__ ("pref @%0\n\t" : : "r" (x) : "memory");
+}
+
+#define prefetchw(x)	prefetch(x)
+#endif
+
 #endif /* __KERNEL__ */
 #endif /* __ASM_SH_PROCESSOR_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/r7780rp/CVS/Entries linux-2.6.17/include/asm-sh/r7780rp/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/r7780rp/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/r7780rp/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,3 @@
+/ide.h/1.1/Sat Jan  7 19:55:57 2006/-ko/
+/r7780rp.h/1.3/Thu Jul  6 12:38:31 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/r7780rp/CVS/Repository linux-2.6.17/include/asm-sh/r7780rp/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/r7780rp/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/r7780rp/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/r7780rp
diff -ruN linux-2.6.17-vanilla/include/asm-sh/r7780rp/CVS/Root linux-2.6.17/include/asm-sh/r7780rp/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/r7780rp/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/r7780rp/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/r7780rp/ide.h linux-2.6.17/include/asm-sh/r7780rp/ide.h
--- linux-2.6.17-vanilla/include/asm-sh/r7780rp/ide.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/r7780rp/ide.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,8 @@
+#ifndef __ASM_SH_R7780RP_IDE_H
+#define __ASM_SH_R7780RP_IDE_H
+
+/* Nothing to see here.. */
+#include <asm/mach/r7780rp.h>
+
+#endif /* __ASM_SH_R7780RP_IDE_H */
+
diff -ruN linux-2.6.17-vanilla/include/asm-sh/r7780rp/r7780rp.h linux-2.6.17/include/asm-sh/r7780rp/r7780rp.h
--- linux-2.6.17-vanilla/include/asm-sh/r7780rp/r7780rp.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/r7780rp/r7780rp.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,177 @@
+#ifndef __ASM_SH_RENESAS_R7780RP_H
+#define __ASM_SH_RENESAS_R7780RP_H
+
+/*
+ * linux/include/asm-sh/r7780rp.h
+ *
+ * Copyright (C) 2000  Atom Create Engineering Co., Ltd.
+ *
+ * Renesas Solutions Highlander R7780RP support
+ */
+
+/* Box specific addresses.  */
+#if defined(CONFIG_SH_R7780MP)
+#define PA_BCR          0xa4000000      /* FPGA */
+#define PA_IRLMSK       (PA_BCR+0x0000) /* Interrupt Mask control */
+#define PA_IRLMON       (PA_BCR+0x0002) /* Interrupt Status control */
+#define PA_IRLPRI1      (PA_BCR+0x0004) /* Interrupt Priorty 1 */
+#define PA_IRLPRI2      (PA_BCR+0x0006) /* Interrupt Priorty 2 */
+#define PA_IRLPRI3      (PA_BCR+0x0008) /* Interrupt Priorty 3 */
+#define PA_IRLPRI4      (PA_BCR+0x000a) /* Interrupt Priorty 4 */
+#define PA_RSTCTL       (PA_BCR+0x000c) /* Reset Control */
+#define PA_PCIBD        (PA_BCR+0x000e) /* PCI Board detect control */
+#define PA_PCICD        (PA_BCR+0x0010) /* PCI Conector detect control */
+#define PA_EXTGIO       (PA_BCR+0x0016) /* Extension GPIO Control */
+#define PA_IVDRMON      (PA_BCR+0x0018) /* iVDR Moniter control */
+#define PA_IVDRCTL      (PA_BCR+0x001a) /* iVDR control */
+#define PA_OBLED        (PA_BCR+0x001c) /* On Board LED control */
+#define PA_OBSW         (PA_BCR+0x001e) /* On Board Switch control */
+#define PA_AUDIOSEL     (PA_BCR+0x0020) /* Sound Interface Select control */
+#define PA_EXTPLR       (PA_BCR+0x001e) /* Extention Pin Polarity control */
+#define PA_TPCTL        (PA_BCR+0x0100) /* Touch Panel Access control */
+#define PA_TPDCKCTL     (PA_BCR+0x0102) /* Touch Panel Access data control */
+#define PA_TPCTLCLR     (PA_BCR+0x0104) /* Touch Panel Access control */
+#define PA_TPXPOS       (PA_BCR+0x0106) /* Touch Panel X position control */
+#define PA_TPYPOS       (PA_BCR+0x0108) /* Touch Panel Y position control */
+#define PA_DBSW         (PA_BCR+0x0200) /* Debug Board Switch control */
+#define PA_CFCTL        (PA_BCR+0x0300) /* CF Timing control */
+#define PA_CFPOW        (PA_BCR+0x0302) /* CF Power control */
+#define PA_CFCDINTCLR   (PA_BCR+0x0304) /* CF Insert Interrupt clear */
+#define PA_SCSMR0       (PA_BCR+0x0400) /* SCIF0 Serial mode control */
+#define PA_SCBRR0       (PA_BCR+0x0404) /* SCIF0 Bit rate control */
+#define PA_SCSCR0       (PA_BCR+0x0408) /* SCIF0 Serial control */
+#define PA_SCFTDR0      (PA_BCR+0x040c) /* SCIF0 Send FIFO control */
+#define PA_SCFSR0       (PA_BCR+0x0410) /* SCIF0 Serial status control */
+#define PA_SCFRDR0      (PA_BCR+0x0414) /* SCIF0 Receive FIFO control */
+#define PA_SCFCR0       (PA_BCR+0x0418) /* SCIF0 FIFO control */
+#define PA_SCTFDR0      (PA_BCR+0x041c) /* SCIF0 Send FIFO data control */
+#define PA_SCRFDR0      (PA_BCR+0x0420) /* SCIF0 Receive FIFO data control */
+#define PA_SCSPTR0      (PA_BCR+0x0424) /* SCIF0 Serial Port control */
+#define PA_SCLSR0       (PA_BCR+0x0428) /* SCIF0 Line Status control */
+#define PA_SCRER0       (PA_BCR+0x042c) /* SCIF0 Serial Error control */
+#define PA_SCSMR1       (PA_BCR+0x0500) /* SCIF1 Serial mode control */
+#define PA_SCBRR1       (PA_BCR+0x0504) /* SCIF1 Bit rate control */
+#define PA_SCSCR1       (PA_BCR+0x0508) /* SCIF1 Serial control */
+#define PA_SCFTDR1      (PA_BCR+0x050c) /* SCIF1 Send FIFO control */
+#define PA_SCFSR1       (PA_BCR+0x0510) /* SCIF1 Serial status control */
+#define PA_SCFRDR1      (PA_BCR+0x0514) /* SCIF1 Receive FIFO control */
+#define PA_SCFCR1       (PA_BCR+0x0518) /* SCIF1 FIFO control */
+#define PA_SCTFDR1      (PA_BCR+0x051c) /* SCIF1 Send FIFO data control */
+#define PA_SCRFDR1      (PA_BCR+0x0520) /* SCIF1 Receive FIFO data control */
+#define PA_SCSPTR1      (PA_BCR+0x0524) /* SCIF1 Serial Port control */
+#define PA_SCLSR1       (PA_BCR+0x0528) /* SCIF1 Line Status control */
+#define PA_SCRER1       (PA_BCR+0x052c) /* SCIF1 Serial Error control */
+#define PA_ICCR         (PA_BCR+0x0600) /* Serial control */
+#define PA_SAR          (PA_BCR+0x0602) /* Serial Slave control */
+#define PA_MDR          (PA_BCR+0x0604) /* Serial Mode control */
+#define PA_ADR1         (PA_BCR+0x0606) /* Serial Address1 control */
+#define PA_DAR1         (PA_BCR+0x0646) /* Serial Data1 control */
+#define PA_VERREG       (PA_BCR+0x0700) /* FPGA Version Register */
+#define PA_POFF         (PA_BCR+0x0800) /* System Power Off control */
+#define PA_PMR          (PA_BCR+0x0900) /*  */
+
+#define PA_AX88796L     0xa4100400      /* AX88796L Area */
+#define PA_SC1602BSLB   0xa6000000      /* SC1602BSLB Area */
+#define PA_AREA5_IO     0xb4000000      /* Area 5 IO Memory */
+#define PA_AREA6_IO     0xb8000000      /* Area 6 IO Memory */
+#define PA_IDE_OFFSET   0x1f0           /* CF IDE Offset */
+#define AX88796L_IO_BASE        0x1000  /* AX88796L IO Base Address */
+
+#define IRLCNTR1        (PA_BCR + 0)    /* Interrupt Control Register1 */
+
+#define IRQ_PCISLOT1    65              /* PCI Slot #1 IRQ */
+#define IRQ_PCISLOT2    66              /* PCI Slot #2 IRQ */
+#define IRQ_PCISLOT3    67              /* PCI Slot #3 IRQ */
+#define IRQ_PCISLOT4    68              /* PCI Slot #4 IRQ */
+#define IRQ_CFCARD      1               /* CF Card IRQ */
+// #define IRQ_CFINST   0               /* CF Card Insert IRQ */
+#define IRQ_TP          2               /* Touch Panel IRQ */
+#define IRQ_SCI1        3               /* SCI1 IRQ */
+#define IRQ_SCI0        4               /* SCI0 IRQ */
+#define IRQ_2SERIAL     5               /* Serial IRQ */
+#define IRQ_RTC         6               /* RTC A / B IRQ */
+#define IRQ_EXTENTION6  7               /* EXT6n IRQ */
+#define IRQ_EXTENTION5  8               /* EXT5n IRQ */
+#define IRQ_EXTENTION4  9               /* EXT4n IRQ */
+#define IRQ_EXTENTION2  10              /* EXT2n IRQ */
+#define IRQ_EXTENTION1  11              /* EXT1n IRQ */
+#define IRQ_ONETH       13              /* On board Ethernet IRQ */
+#define IRQ_PSW         14              /* Push Switch IRQ */
+
+#else /* R7780RP */
+
+#define PA_BCR		0xa5000000	/* FPGA */
+#define	PA_IRLMSK	(PA_BCR+0x0000)	/* Interrupt Mask control */
+#define PA_IRLMON	(PA_BCR+0x0002)	/* Interrupt Status control */
+#define	PA_SDPOW	(PA_BCR+0x0004)	/* SD Power control */
+#define	PA_RSTCTL	(PA_BCR+0x0006)	/* Device Reset control */
+#define	PA_PCIBD	(PA_BCR+0x0008)	/* PCI Board detect control */
+#define	PA_PCICD	(PA_BCR+0x000a)	/* PCI Conector detect control */
+#define	PA_ZIGIO1	(PA_BCR+0x000c)	/* Zigbee IO control 1 */
+#define	PA_ZIGIO2	(PA_BCR+0x000e)	/* Zigbee IO control 2 */
+#define	PA_ZIGIO3	(PA_BCR+0x0010)	/* Zigbee IO control 3 */
+#define	PA_ZIGIO4	(PA_BCR+0x0012)	/* Zigbee IO control 4 */
+#define	PA_IVDRMON	(PA_BCR+0x0014)	/* iVDR Moniter control */
+#define	PA_IVDRCTL	(PA_BCR+0x0016)	/* iVDR control */
+#define PA_OBLED	(PA_BCR+0x0018)	/* On Board LED control */
+#define PA_OBSW		(PA_BCR+0x001a)	/* On Board Switch control */
+#define PA_AUDIOSEL	(PA_BCR+0x001c)	/* Sound Interface Select control */
+#define PA_EXTPLR	(PA_BCR+0x001e)	/* Extention Pin Polarity control */
+#define PA_TPCTL	(PA_BCR+0x0100)	/* Touch Panel Access control */
+#define PA_TPDCKCTL	(PA_BCR+0x0102)	/* Touch Panel Access data control */
+#define PA_TPCTLCLR	(PA_BCR+0x0104)	/* Touch Panel Access control */
+#define PA_TPXPOS	(PA_BCR+0x0106)	/* Touch Panel X position control */
+#define PA_TPYPOS	(PA_BCR+0x0108)	/* Touch Panel Y position control */
+#define PA_DBDET	(PA_BCR+0x0200)	/* Debug Board detect control */
+#define PA_DBDISPCTL	(PA_BCR+0x0202)	/* Debug Board Dot timing control */
+#define PA_DBSW		(PA_BCR+0x0204)	/* Debug Board Switch control */
+#define PA_CFCTL	(PA_BCR+0x0300)	/* CF Timing control */
+#define PA_CFPOW	(PA_BCR+0x0302)	/* CF Power control */
+#define PA_CFCDINTCLR	(PA_BCR+0x0304)	/* CF Insert Interrupt clear */
+#define PA_SCSMR	(PA_BCR+0x0400)	/* SCIF Serial mode control */
+#define PA_SCBRR	(PA_BCR+0x0402)	/* SCIF Bit rate control */
+#define PA_SCSCR	(PA_BCR+0x0404)	/* SCIF Serial control */
+#define PA_SCFDTR	(PA_BCR+0x0406)	/* SCIF Send FIFO control */
+#define PA_SCFSR	(PA_BCR+0x0408)	/* SCIF Serial status control */
+#define PA_SCFRDR	(PA_BCR+0x040a)	/* SCIF Receive FIFO control */
+#define PA_SCFCR	(PA_BCR+0x040c)	/* SCIF FIFO control */
+#define PA_SCFDR	(PA_BCR+0x040e)	/* SCIF FIFO data control */
+#define PA_SCLSR	(PA_BCR+0x0412)	/* SCIF Line Status control */
+#define PA_ICCR		(PA_BCR+0x0500)	/* Serial control */
+#define PA_SAR		(PA_BCR+0x0502)	/* Serial Slave control */
+#define PA_MDR		(PA_BCR+0x0504)	/* Serial Mode control */
+#define PA_ADR1		(PA_BCR+0x0506)	/* Serial Address1 control */
+#define PA_DAR1		(PA_BCR+0x0546)	/* Serial Data1 control */
+#define PA_VERREG	(PA_BCR+0x0600)	/* FPGA Version Register */
+
+#define PA_AX88796L	0xa5800400	/* AX88796L Area */
+#define PA_SC1602BSLB	0xa6000000	/* SC1602BSLB Area */
+#define PA_AREA5_IO	0xb4000000	/* Area 5 IO Memory */
+#define PA_AREA6_IO	0xb8000000	/* Area 6 IO Memory */
+#define PA_IDE_OFFSET	0x1f0		/* CF IDE Offset */
+#define AX88796L_IO_BASE	0x1000	/* AX88796L IO Base Address */
+
+#define IRLCNTR1	(PA_BCR + 0)	/* Interrupt Control Register1 */
+
+#define IRQ_PCISLOT1	0		/* PCI Slot #1 IRQ */
+#define IRQ_PCISLOT2	1		/* PCI Slot #2 IRQ */
+#define IRQ_PCISLOT3	2		/* PCI Slot #3 IRQ */
+#define IRQ_PCISLOT4	3		/* PCI Slot #4 IRQ */
+#define IRQ_CFCARD	4		/* CF Card IRQ */
+#define IRQ_CFINST	5		/* CF Card Insert IRQ */
+#define IRQ_M66596	6		/* M66596 IRQ */
+#define IRQ_SDCARD	7		/* SD Card IRQ */
+#define IRQ_TUCHPANEL	8		/* Touch Panel IRQ */
+#define IRQ_SCI		9		/* SCI IRQ */
+#define IRQ_2SERIAL	10		/* Serial IRQ */
+#define	IRQ_EXTENTION	11		/* EXTn IRQ */
+#define IRQ_ONETH	12		/* On board Ethernet IRQ */
+#define IRQ_PSW		13		/* Push Switch IRQ */
+#define IRQ_ZIGBEE	14		/* Ziggbee IO IRQ */
+
+#endif  /* CONFIG_SH_R7780MP */
+
+#define __IO_PREFIX	r7780rp
+#include <asm/io_generic.h>
+
+#endif  /* __ASM_SH_RENESAS_R7780RP */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/rtc.h linux-2.6.17/include/asm-sh/rtc.h
--- linux-2.6.17-vanilla/include/asm-sh/rtc.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/rtc.h	2006-07-12 16:54:26.000000000 +0000
@@ -8,8 +8,8 @@
 extern void sh_rtc_gettimeofday(struct timespec *ts);
 extern int sh_rtc_settimeofday(const time_t secs);
 extern void (*board_time_init)(void);
-extern void (*rtc_get_time)(struct timespec *);
-extern int (*rtc_set_time)(const time_t);
+extern void (*rtc_sh_get_time)(struct timespec *);
+extern int (*rtc_sh_set_time)(const time_t);
 
 /* RCR1 Bits */
 #define RCR1_CF		0x80	/* Carry Flag             */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/CVS/Entries linux-2.6.17/include/asm-sh/rts7751r2d/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/rts7751r2d/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,4 @@
+/ide.h/1.1/Wed Apr 21 00:09:19 2004/-ko/
+/rts7751r2d.h/1.3/Wed Jan 18 05:43:02 2006/-ko/
+/voyagergx_reg.h/1.2/Sun Aug 15 16:59:32 2004/-ko/
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/CVS/Repository linux-2.6.17/include/asm-sh/rts7751r2d/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/rts7751r2d/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/rts7751r2d
diff -ruN linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/CVS/Root linux-2.6.17/include/asm-sh/rts7751r2d/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/rts7751r2d/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/rts7751r2d.h linux-2.6.17/include/asm-sh/rts7751r2d/rts7751r2d.h
--- linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/rts7751r2d.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/rts7751r2d/rts7751r2d.h	2006-07-12 16:54:26.000000000 +0000
@@ -41,8 +41,6 @@
 
 #define PA_AX88796L	0xaa000400	/* AX88796L Area */
 #define PA_VOYAGER	0xab000000	/* VOYAGER GX Area */
-#define PA_AREA5_IO	0xb4000000	/* Area 5 IO Memory */
-#define PA_AREA6_IO	0xb8000000	/* Area 6 IO Memory */
 #define PA_IDE_OFFSET	0x1f0		/* CF IDE Offset */
 #define AX88796L_IO_BASE	0x1000	/* AX88796L IO Base Address */
 
@@ -70,4 +68,7 @@
 #define IRQ_PCISLOT2	10		/* PCI Slot #2 IRQ */
 #define	IRQ_EXTENTION	11		/* EXTn IRQ */
 
+#define __IO_PREFIX rts7751r2d
+#include <asm/io_generic.h>
+
 #endif  /* __ASM_SH_RENESAS_RTS7751R2D */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/saturn/CVS/Entries linux-2.6.17/include/asm-sh/saturn/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/saturn/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/saturn/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,3 @@
+/io.h/1.3/Tue Jul 29 14:27:12 2003/-ko/
+/smpc.h/1.2/Sun May  4 19:30:16 2003/-ko/
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/saturn/CVS/Repository linux-2.6.17/include/asm-sh/saturn/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/saturn/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/saturn/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/saturn
diff -ruN linux-2.6.17-vanilla/include/asm-sh/saturn/CVS/Root linux-2.6.17/include/asm-sh/saturn/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/saturn/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/saturn/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/scatterlist.h linux-2.6.17/include/asm-sh/scatterlist.h
--- linux-2.6.17-vanilla/include/asm-sh/scatterlist.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/scatterlist.h	2006-07-12 16:54:26.000000000 +0000
@@ -10,4 +10,13 @@
 
 #define ISA_DMA_THRESHOLD (0x1fffffff)
 
+/* These macros should be used after a pci_map_sg call has been done
+ * to get bus addresses of each of the SG entries and their lengths.
+ * You should only work with the number of sg entries pci_map_sg
+ * returns, or alternatively stop on the first sg_dma_len(sg) which
+ * is 0.
+ */
+#define sg_dma_address(sg)	((sg)->dma_address)
+#define sg_dma_len(sg)		((sg)->length)
+
 #endif /* !(__ASM_SH_SCATTERLIST_H) */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/se.h linux-2.6.17/include/asm-sh/se.h
--- linux-2.6.17-vanilla/include/asm-sh/se.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/se.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,80 @@
+#ifndef __ASM_SH_HITACHI_SE_H
+#define __ASM_SH_HITACHI_SE_H
+
+/*
+ * linux/include/asm-sh/hitachi_se.h
+ *
+ * Copyright (C) 2000  Kazumoto Kojima
+ *
+ * Hitachi SolutionEngine support
+ */
+
+/* Box specific addresses.  */
+
+#define PA_ROM		0x00000000	/* EPROM */
+#define PA_ROM_SIZE	0x00400000	/* EPROM size 4M byte */
+#define PA_FROM		0x01000000	/* EPROM */
+#define PA_FROM_SIZE	0x00400000	/* EPROM size 4M byte */
+#define PA_EXT1		0x04000000
+#define PA_EXT1_SIZE	0x04000000
+#define PA_EXT2		0x08000000
+#define PA_EXT2_SIZE	0x04000000
+#define PA_SDRAM	0x0c000000
+#define PA_SDRAM_SIZE	0x04000000
+
+#define PA_EXT4		0x12000000
+#define PA_EXT4_SIZE	0x02000000
+#define PA_EXT5		0x14000000
+#define PA_EXT5_SIZE	0x04000000
+#define PA_PCIC		0x18000000	/* MR-SHPC-01 PCMCIA */
+
+#define PA_83902	0xb0000000	/* DP83902A */
+#define PA_83902_IF	0xb0040000	/* DP83902A remote io port */
+#define PA_83902_RST	0xb0080000	/* DP83902A reset port */
+
+#define PA_SUPERIO	0xb0400000	/* SMC37C935A super io chip */
+#define PA_DIPSW0	0xb0800000	/* Dip switch 5,6 */
+#define PA_DIPSW1	0xb0800002	/* Dip switch 7,8 */
+#define PA_LED		0xb0c00000	/* LED */
+#if defined(CONFIG_CPU_SUBTYPE_SH7705)
+#define PA_BCR		0xb0e00000
+#else
+#define PA_BCR		0xb1400000	/* FPGA */
+#endif
+
+#define PA_MRSHPC	0xb83fffe0	/* MR-SHPC-01 PCMCIA controller */
+#define PA_MRSHPC_MW1	0xb8400000	/* MR-SHPC-01 memory window base */
+#define PA_MRSHPC_MW2	0xb8500000	/* MR-SHPC-01 attribute window base */
+#define PA_MRSHPC_IO	0xb8600000	/* MR-SHPC-01 I/O window base */
+#define MRSHPC_OPTION   (PA_MRSHPC + 6)
+#define MRSHPC_CSR      (PA_MRSHPC + 8)
+#define MRSHPC_ISR      (PA_MRSHPC + 10)
+#define MRSHPC_ICR      (PA_MRSHPC + 12)
+#define MRSHPC_CPWCR    (PA_MRSHPC + 14)
+#define MRSHPC_MW0CR1   (PA_MRSHPC + 16)
+#define MRSHPC_MW1CR1   (PA_MRSHPC + 18)
+#define MRSHPC_IOWCR1   (PA_MRSHPC + 20)
+#define MRSHPC_MW0CR2   (PA_MRSHPC + 22)
+#define MRSHPC_MW1CR2   (PA_MRSHPC + 24)
+#define MRSHPC_IOWCR2   (PA_MRSHPC + 26)
+#define MRSHPC_CDCR     (PA_MRSHPC + 28)
+#define MRSHPC_PCIC_INFO (PA_MRSHPC + 30)
+
+#define BCR_ILCRA	(PA_BCR + 0)
+#define BCR_ILCRB	(PA_BCR + 2)
+#define BCR_ILCRC	(PA_BCR + 4)
+#define BCR_ILCRD	(PA_BCR + 6)
+#define BCR_ILCRE	(PA_BCR + 8)
+#define BCR_ILCRF	(PA_BCR + 10)
+#define BCR_ILCRG	(PA_BCR + 12)
+
+#if defined(CONFIG_CPU_SUBTYPE_SH7705)
+#define IRQ_STNIC   12
+#else
+#define IRQ_STNIC	10
+#endif
+
+#define __IO_PREFIX	se
+#include <asm/io_generic.h>
+
+#endif  /* __ASM_SH_HITACHI_SE_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/se7300.h linux-2.6.17/include/asm-sh/se7300.h
--- linux-2.6.17-vanilla/include/asm-sh/se7300.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/se7300.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,64 @@
+#ifndef __ASM_SH_HITACHI_SE7300_H
+#define __ASM_SH_HITACHI_SE7300_H
+
+/*
+ * linux/include/asm-sh/se/se7300.h
+ *
+ * Copyright (C) 2003 Takashi Kusuda <kusuda-takashi@hitachi-ul.co.jp>
+ *
+ * SH-Mobile SolutionEngine 7300 support
+ */
+
+/* Box specific addresses.  */
+
+/* Area 0 */
+#define PA_ROM		0x00000000	/* EPROM */
+#define PA_ROM_SIZE	0x00400000	/* EPROM size 4M byte(Actually 2MB) */
+#define PA_FROM		0x00400000	/* Flash ROM */
+#define PA_FROM_SIZE	0x00400000	/* Flash size 4M byte */
+#define PA_SRAM		0x00800000	/* SRAM */
+#define PA_FROM_SIZE	0x00400000	/* SRAM size 4M byte */
+/* Area 1 */
+#define PA_EXT1		0x04000000
+#define PA_EXT1_SIZE	0x04000000
+/* Area 2 */
+#define PA_EXT2		0x08000000
+#define PA_EXT2_SIZE	0x04000000
+/* Area 3 */
+#define PA_SDRAM	0x0c000000
+#define PA_SDRAM_SIZE	0x04000000
+/* Area 4 */
+#define PA_PCIC		0x10000000	/* MR-SHPC-01 PCMCIA */
+#define PA_MRSHPC       0xb03fffe0      /* MR-SHPC-01 PCMCIA controller */
+#define PA_MRSHPC_MW1   0xb0400000      /* MR-SHPC-01 memory window base */
+#define PA_MRSHPC_MW2   0xb0500000      /* MR-SHPC-01 attribute window base */
+#define PA_MRSHPC_IO    0xb0600000      /* MR-SHPC-01 I/O window base */
+#define MRSHPC_OPTION   (PA_MRSHPC + 6)
+#define MRSHPC_CSR      (PA_MRSHPC + 8)
+#define MRSHPC_ISR      (PA_MRSHPC + 10)
+#define MRSHPC_ICR      (PA_MRSHPC + 12)
+#define MRSHPC_CPWCR    (PA_MRSHPC + 14)
+#define MRSHPC_MW0CR1   (PA_MRSHPC + 16)
+#define MRSHPC_MW1CR1   (PA_MRSHPC + 18)
+#define MRSHPC_IOWCR1   (PA_MRSHPC + 20)
+#define MRSHPC_MW0CR2   (PA_MRSHPC + 22)
+#define MRSHPC_MW1CR2   (PA_MRSHPC + 24)
+#define MRSHPC_IOWCR2   (PA_MRSHPC + 26)
+#define MRSHPC_CDCR     (PA_MRSHPC + 28)
+#define MRSHPC_PCIC_INFO (PA_MRSHPC + 30)
+#define PA_LED		0xb0800000	/* LED */
+#define PA_DIPSW	0xb0900000	/* Dip switch 31 */
+#define PA_EPLD_MODESET	0xb0a00000	/* FPGA Mode set register */
+#define PA_EPLD_ST1	0xb0a80000	/* FPGA Interrupt status register1 */
+#define PA_EPLD_ST2	0xb0ac0000	/* FPGA Interrupt status register2 */
+/* Area 5 */
+#define PA_EXT5		0x14000000
+#define PA_EXT5_SIZE	0x04000000
+/* Area 6 */
+#define PA_LCD1		0xb8000000
+#define PA_LCD2		0xb8800000
+
+#define __IO_PREFIX	sh7300se
+#include <asm/io_generic.h>
+
+#endif  /* __ASM_SH_HITACHI_SE7300_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/se73180.h linux-2.6.17/include/asm-sh/se73180.h
--- linux-2.6.17-vanilla/include/asm-sh/se73180.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/se73180.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,65 @@
+#ifndef __ASM_SH_HITACHI_SE73180_H
+#define __ASM_SH_HITACHI_SE73180_H
+
+/*
+ * include/asm-sh/se/se73180.h
+ *
+ * Copyright (C) 2003 Takashi Kusuda <kusuda-takashi@hitachi-ul.co.jp>
+ *
+ * SH-Mobile SolutionEngine 73180 support
+ */
+
+/* Box specific addresses.  */
+
+/* Area 0 */
+#define PA_ROM		0x00000000	/* EPROM */
+#define PA_ROM_SIZE	0x00400000	/* EPROM size 4M byte(Actually 2MB) */
+#define PA_FROM		0x00400000	/* Flash ROM */
+#define PA_FROM_SIZE	0x00400000	/* Flash size 4M byte */
+#define PA_SRAM		0x00800000	/* SRAM */
+#define PA_FROM_SIZE	0x00400000	/* SRAM size 4M byte */
+/* Area 1 */
+#define PA_EXT1		0x04000000
+#define PA_EXT1_SIZE	0x04000000
+/* Area 2 */
+#define PA_EXT2		0x08000000
+#define PA_EXT2_SIZE	0x04000000
+/* Area 3 */
+#define PA_SDRAM	0x0c000000
+#define PA_SDRAM_SIZE	0x04000000
+/* Area 4 */
+#define PA_PCIC		0x10000000	/* MR-SHPC-01 PCMCIA */
+#define PA_MRSHPC       0xb03fffe0      /* MR-SHPC-01 PCMCIA controller */
+#define PA_MRSHPC_MW1   0xb0400000      /* MR-SHPC-01 memory window base */
+#define PA_MRSHPC_MW2   0xb0500000      /* MR-SHPC-01 attribute window base */
+#define PA_MRSHPC_IO    0xb0600000      /* MR-SHPC-01 I/O window base */
+#define MRSHPC_OPTION   (PA_MRSHPC + 6)
+#define MRSHPC_CSR      (PA_MRSHPC + 8)
+#define MRSHPC_ISR      (PA_MRSHPC + 10)
+#define MRSHPC_ICR      (PA_MRSHPC + 12)
+#define MRSHPC_CPWCR    (PA_MRSHPC + 14)
+#define MRSHPC_MW0CR1   (PA_MRSHPC + 16)
+#define MRSHPC_MW1CR1   (PA_MRSHPC + 18)
+#define MRSHPC_IOWCR1   (PA_MRSHPC + 20)
+#define MRSHPC_MW0CR2   (PA_MRSHPC + 22)
+#define MRSHPC_MW1CR2   (PA_MRSHPC + 24)
+#define MRSHPC_IOWCR2   (PA_MRSHPC + 26)
+#define MRSHPC_CDCR     (PA_MRSHPC + 28)
+#define MRSHPC_PCIC_INFO (PA_MRSHPC + 30)
+#define PA_LED		0xb0C00000	/* LED */
+#define LED_SHIFT       0
+#define PA_DIPSW	0xb0900000	/* Dip switch 31 */
+#define PA_EPLD_MODESET	0xb0a00000	/* FPGA Mode set register */
+#define PA_EPLD_ST1	0xb0a80000	/* FPGA Interrupt status register1 */
+#define PA_EPLD_ST2	0xb0ac0000	/* FPGA Interrupt status register2 */
+/* Area 5 */
+#define PA_EXT5		0x14000000
+#define PA_EXT5_SIZE	0x04000000
+/* Area 6 */
+#define PA_LCD1		0xb8000000
+#define PA_LCD2		0xb8800000
+
+#define __IO_PREFIX	sh73180se
+#include <asm/io_generic.h>
+
+#endif  /* __ASM_SH_HITACHI_SE73180_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/se7751.h linux-2.6.17/include/asm-sh/se7751.h
--- linux-2.6.17-vanilla/include/asm-sh/se7751.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/se7751.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,71 @@
+#ifndef __ASM_SH_HITACHI_7751SE_H
+#define __ASM_SH_HITACHI_7751SE_H
+
+/*
+ * linux/include/asm-sh/hitachi_7751se.h
+ *
+ * Copyright (C) 2000  Kazumoto Kojima
+ *
+ * Hitachi SolutionEngine support
+
+ * Modified for 7751 Solution Engine by
+ * Ian da Silva and Jeremy Siegel, 2001.
+ */
+
+/* Box specific addresses.  */
+
+#define PA_ROM		0x00000000	/* EPROM */
+#define PA_ROM_SIZE	0x00400000	/* EPROM size 4M byte */
+#define PA_FROM		0x01000000	/* EPROM */
+#define PA_FROM_SIZE	0x00400000	/* EPROM size 4M byte */
+#define PA_EXT1		0x04000000
+#define PA_EXT1_SIZE	0x04000000
+#define PA_EXT2		0x08000000
+#define PA_EXT2_SIZE	0x04000000
+#define PA_SDRAM	0x0c000000
+#define PA_SDRAM_SIZE	0x04000000
+
+#define PA_EXT4		0x12000000
+#define PA_EXT4_SIZE	0x02000000
+#define PA_EXT5		0x14000000
+#define PA_EXT5_SIZE	0x04000000
+#define PA_PCIC		0x18000000	/* MR-SHPC-01 PCMCIA */
+
+#define PA_DIPSW0	0xb9000000	/* Dip switch 5,6 */
+#define PA_DIPSW1	0xb9000002	/* Dip switch 7,8 */
+#define PA_LED		0xba000000	/* LED */
+#define	PA_BCR		0xbb000000	/* FPGA on the MS7751SE01 */
+
+#define PA_MRSHPC	0xb83fffe0	/* MR-SHPC-01 PCMCIA controler */
+#define PA_MRSHPC_MW1	0xb8400000	/* MR-SHPC-01 memory window base */
+#define PA_MRSHPC_MW2	0xb8500000	/* MR-SHPC-01 attribute window base */
+#define PA_MRSHPC_IO	0xb8600000	/* MR-SHPC-01 I/O window base */
+#define MRSHPC_MODE     (PA_MRSHPC + 4)
+#define MRSHPC_OPTION   (PA_MRSHPC + 6)
+#define MRSHPC_CSR      (PA_MRSHPC + 8)
+#define MRSHPC_ISR      (PA_MRSHPC + 10)
+#define MRSHPC_ICR      (PA_MRSHPC + 12)
+#define MRSHPC_CPWCR    (PA_MRSHPC + 14)
+#define MRSHPC_MW0CR1   (PA_MRSHPC + 16)
+#define MRSHPC_MW1CR1   (PA_MRSHPC + 18)
+#define MRSHPC_IOWCR1   (PA_MRSHPC + 20)
+#define MRSHPC_MW0CR2   (PA_MRSHPC + 22)
+#define MRSHPC_MW1CR2   (PA_MRSHPC + 24)
+#define MRSHPC_IOWCR2   (PA_MRSHPC + 26)
+#define MRSHPC_CDCR     (PA_MRSHPC + 28)
+#define MRSHPC_PCIC_INFO (PA_MRSHPC + 30)
+
+#define BCR_ILCRA	(PA_BCR + 0)
+#define BCR_ILCRB	(PA_BCR + 2)
+#define BCR_ILCRC	(PA_BCR + 4)
+#define BCR_ILCRD	(PA_BCR + 6)
+#define BCR_ILCRE	(PA_BCR + 8)
+#define BCR_ILCRF	(PA_BCR + 10)
+#define BCR_ILCRG	(PA_BCR + 12)
+
+#define IRQ_79C973	13
+
+#define __IO_PREFIX	sh7751se
+#include <asm/io_generic.h>
+
+#endif  /* __ASM_SH_HITACHI_7751SE_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/sfp-machine.h linux-2.6.17/include/asm-sh/sfp-machine.h
--- linux-2.6.17-vanilla/include/asm-sh/sfp-machine.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/sfp-machine.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,86 @@
+/* Machine-dependent software floating-point definitions.
+   SuperH kernel version.
+   Copyright (C) 1997,1998,1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Richard Henderson (rth@cygnus.com),
+		  Jakub Jelinek (jj@ultra.linux.cz),
+		  David S. Miller (davem@redhat.com) and
+		  Peter Maydell (pmaydell@chiark.greenend.org.uk).
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If
+   not, write to the Free Software Foundation, Inc.,
+   59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
+
+#ifndef _SFP_MACHINE_H
+#define _SFP_MACHINE_H
+   
+#include <linux/config.h>
+
+#define _FP_W_TYPE_SIZE		32
+#define _FP_W_TYPE		unsigned long
+#define _FP_WS_TYPE		signed long
+#define _FP_I_TYPE		long
+
+#define _FP_MUL_MEAT_S(R,X,Y)					\
+  _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_D(R,X,Y)					\
+  _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm)
+#define _FP_MUL_MEAT_Q(R,X,Y)					\
+  _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm)
+
+#define _FP_DIV_MEAT_S(R,X,Y)	_FP_DIV_MEAT_1_udiv(S,R,X,Y)
+#define _FP_DIV_MEAT_D(R,X,Y)	_FP_DIV_MEAT_2_udiv(D,R,X,Y)
+#define _FP_DIV_MEAT_Q(R,X,Y)	_FP_DIV_MEAT_4_udiv(Q,R,X,Y)
+
+#define _FP_NANFRAC_S		((_FP_QNANBIT_S << 1) - 1)
+#define _FP_NANFRAC_D		((_FP_QNANBIT_D << 1) - 1), -1
+#define _FP_NANFRAC_Q		((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1
+#define _FP_NANSIGN_S		0
+#define _FP_NANSIGN_D		0
+#define _FP_NANSIGN_Q		0
+
+#define _FP_KEEPNANFRACP 1
+
+/*
+ * If one NaN is signaling and the other is not,
+ * we choose that one, otherwise we choose X.
+ */
+#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP)                      \
+  do {                                                          \
+    if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs)          \
+        && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs))     \
+      {                                                         \
+        R##_s = Y##_s;                                          \
+        _FP_FRAC_COPY_##wc(R,Y);                                \
+      }                                                         \
+    else                                                        \
+      {                                                         \
+        R##_s = X##_s;                                          \
+        _FP_FRAC_COPY_##wc(R,X);                                \
+      }                                                         \
+    R##_c = FP_CLS_NAN;                                         \
+  } while (0)
+
+//#define FP_ROUNDMODE		FPSCR_RM
+#define FP_DENORM_ZERO		1/*FPSCR_DN*/
+
+/* Exception flags. */
+#define FP_EX_INVALID		(1<<4)
+#define FP_EX_DIVZERO		(1<<3)
+#define FP_EX_OVERFLOW		(1<<2)
+#define FP_EX_UNDERFLOW		(1<<1)
+#define FP_EX_INEXACT		(1<<0)
+
+#endif
+
diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh03/CVS/Entries linux-2.6.17/include/asm-sh/sh03/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/sh03/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/sh03/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,4 @@
+/ide.h/1.1/Fri Dec  3 01:43:33 2004/-ko/
+/io.h/1.2/Wed Jan  4 18:27:49 2006/-ko/
+/sh03.h/1.2/Sat Aug 13 14:34:12 2005/-ko/
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh03/CVS/Repository linux-2.6.17/include/asm-sh/sh03/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/sh03/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/sh03/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/sh03
diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh03/CVS/Root linux-2.6.17/include/asm-sh/sh03/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/sh03/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/sh03/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh03/io.h linux-2.6.17/include/asm-sh/sh03/io.h
--- linux-2.6.17-vanilla/include/asm-sh/sh03/io.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/sh03/io.h	2006-07-12 16:54:26.000000000 +0000
@@ -33,14 +33,6 @@
 #define IRL3_IPR_POS	0
 #define IRL3_PRIORITY	4
 
-
-extern unsigned long sh03_isa_port2addr(unsigned long offset);
-
-extern void setup_sh03(void);
-extern void init_sh03_IRQ(void);
-extern void heartbeat_sh03(void);
-
-extern void sh03_rtc_gettimeofday(struct timeval *tv);
-extern int sh03_rtc_settimeofday(const struct timeval *tv);
+void heartbeat_sh03(void);
 
 #endif /* _ASM_SH_IO_SH03_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh2000/CVS/Entries linux-2.6.17/include/asm-sh/sh2000/CVS/Entries
--- linux-2.6.17-vanilla/include/asm-sh/sh2000/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/sh2000/CVS/Entries	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,2 @@
+/sh2000.h/1.2/Fri Nov  1 17:19:31 2002//
+D
diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh2000/CVS/Repository linux-2.6.17/include/asm-sh/sh2000/CVS/Repository
--- linux-2.6.17-vanilla/include/asm-sh/sh2000/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/sh2000/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/asm-sh/sh2000
diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh2000/CVS/Root linux-2.6.17/include/asm-sh/sh2000/CVS/Root
--- linux-2.6.17-vanilla/include/asm-sh/sh2000/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/sh2000/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/asm-sh/smc37c93x.h linux-2.6.17/include/asm-sh/smc37c93x.h
--- linux-2.6.17-vanilla/include/asm-sh/smc37c93x.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/smc37c93x.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,190 @@
+#ifndef __ASM_SH_SMC37C93X_H
+#define __ASM_SH_SMC37C93X_H
+
+/*
+ * linux/include/asm-sh/smc37c93x.h
+ *
+ * Copyright (C) 2000  Kazumoto Kojima
+ *
+ * SMSC 37C93x Super IO Chip support
+ */
+
+/* Default base I/O address */
+#define FDC_PRIMARY_BASE	0x3f0
+#define IDE1_PRIMARY_BASE	0x1f0
+#define IDE1_SECONDARY_BASE	0x170
+#define PARPORT_PRIMARY_BASE	0x378
+#define COM1_PRIMARY_BASE	0x2f8
+#define COM2_PRIMARY_BASE	0x3f8
+#define RTC_PRIMARY_BASE	0x070
+#define KBC_PRIMARY_BASE	0x060
+#define AUXIO_PRIMARY_BASE	0x000	/* XXX */
+
+/* Logical device number */
+#define LDN_FDC			0
+#define LDN_IDE1		1
+#define LDN_IDE2		2
+#define LDN_PARPORT		3
+#define LDN_COM1		4
+#define LDN_COM2		5
+#define LDN_RTC			6
+#define LDN_KBC			7
+#define LDN_AUXIO		8
+
+/* Configuration port and key */
+#define CONFIG_PORT		0x3f0
+#define INDEX_PORT		CONFIG_PORT
+#define DATA_PORT		0x3f1
+#define CONFIG_ENTER		0x55
+#define CONFIG_EXIT		0xaa
+
+/* Configuration index */
+#define CURRENT_LDN_INDEX	0x07
+#define POWER_CONTROL_INDEX	0x22
+#define ACTIVATE_INDEX		0x30
+#define IO_BASE_HI_INDEX	0x60
+#define IO_BASE_LO_INDEX	0x61
+#define IRQ_SELECT_INDEX	0x70
+#define DMA_SELECT_INDEX	0x74
+
+#define GPIO46_INDEX		0xc6
+#define GPIO47_INDEX		0xc7
+
+/* UART stuff. Only for debugging.  */
+/* UART Register */
+
+#define UART_RBR	0x0	/* Receiver Buffer Register (Read Only) */
+#define UART_THR	0x0	/* Transmitter Holding Register (Write Only) */
+#define UART_IER	0x2	/* Interrupt Enable Register */
+#define UART_IIR	0x4	/* Interrupt Ident Register (Read Only) */
+#define UART_FCR	0x4	/* FIFO Control Register (Write Only) */
+#define UART_LCR	0x6	/* Line Control Register */
+#define UART_MCR	0x8	/* MODEM Control Register */
+#define UART_LSR	0xa	/* Line Status Register */
+#define UART_MSR	0xc	/* MODEM Status Register */
+#define UART_SCR	0xe	/* Scratch Register */
+#define UART_DLL	0x0	/* Divisor Latch (LS) */
+#define UART_DLM	0x2	/* Divisor Latch (MS) */
+
+#ifndef __ASSEMBLY__
+typedef struct uart_reg {
+	volatile __u16 rbr;
+	volatile __u16 ier;
+	volatile __u16 iir;
+	volatile __u16 lcr;
+	volatile __u16 mcr;
+	volatile __u16 lsr;
+	volatile __u16 msr;
+	volatile __u16 scr;
+} uart_reg;
+#endif /* ! __ASSEMBLY__ */
+
+/* Alias for Write Only Register */
+
+#define thr	rbr
+#define tcr	iir
+
+/* Alias for Divisor Latch Register */
+
+#define dll	rbr
+#define dlm	ier
+#define fcr	iir
+
+/* Interrupt Enable Register */
+
+#define IER_ERDAI	0x0100	/* Enable Received Data Available Interrupt */
+#define IER_ETHREI	0x0200	/* Enable Transmitter Holding Register Empty Interrupt */
+#define IER_ELSI	0x0400	/* Enable Receiver Line Status Interrupt */
+#define IER_EMSI	0x0800	/* Enable MODEM Status Interrupt */
+
+/* Interrupt Ident Register */
+
+#define IIR_IP		0x0100	/* "0" if Interrupt Pending */
+#define IIR_IIB0	0x0200	/* Interrupt ID Bit 0 */
+#define IIR_IIB1	0x0400	/* Interrupt ID Bit 1 */
+#define IIR_IIB2	0x0800	/* Interrupt ID Bit 2 */
+#define IIR_FIFO	0xc000	/* FIFOs enabled */
+
+/* FIFO Control Register */
+
+#define FCR_FEN		0x0100	/* FIFO enable */
+#define FCR_RFRES	0x0200	/* Receiver FIFO reset */
+#define FCR_TFRES	0x0400	/* Transmitter FIFO reset */
+#define FCR_DMA		0x0800	/* DMA mode select */
+#define FCR_RTL		0x4000	/* Receiver triger (LSB) */
+#define FCR_RTM		0x8000	/* Receiver triger (MSB) */
+
+/* Line Control Register */
+
+#define LCR_WLS0	0x0100	/* Word Length Select Bit 0 */
+#define LCR_WLS1	0x0200	/* Word Length Select Bit 1 */
+#define LCR_STB		0x0400	/* Number of Stop Bits */
+#define LCR_PEN		0x0800	/* Parity Enable */
+#define LCR_EPS		0x1000	/* Even Parity Select */
+#define LCR_SP		0x2000	/* Stick Parity */
+#define LCR_SB		0x4000	/* Set Break */
+#define LCR_DLAB	0x8000	/* Divisor Latch Access Bit */
+
+/* MODEM Control Register */
+
+#define MCR_DTR		0x0100	/* Data Terminal Ready */
+#define MCR_RTS		0x0200	/* Request to Send */
+#define MCR_OUT1	0x0400	/* Out 1 */
+#define MCR_IRQEN	0x0800	/* IRQ Enable */
+#define MCR_LOOP	0x1000	/* Loop */
+
+/* Line Status Register */
+
+#define LSR_DR		0x0100	/* Data Ready */
+#define LSR_OE		0x0200	/* Overrun Error */
+#define LSR_PE		0x0400	/* Parity Error */
+#define LSR_FE		0x0800	/* Framing Error */
+#define LSR_BI		0x1000	/* Break Interrupt */
+#define LSR_THRE	0x2000	/* Transmitter Holding Register Empty */
+#define LSR_TEMT	0x4000	/* Transmitter Empty */
+#define LSR_FIFOE	0x8000	/* Receiver FIFO error */
+
+/* MODEM Status Register */
+
+#define MSR_DCTS	0x0100	/* Delta Clear to Send */
+#define MSR_DDSR	0x0200	/* Delta Data Set Ready */
+#define MSR_TERI	0x0400	/* Trailing Edge Ring Indicator */
+#define MSR_DDCD	0x0800	/* Delta Data Carrier Detect */
+#define MSR_CTS		0x1000	/* Clear to Send */
+#define MSR_DSR		0x2000	/* Data Set Ready */
+#define MSR_RI		0x4000	/* Ring Indicator */
+#define MSR_DCD		0x8000	/* Data Carrier Detect */
+
+/* Baud Rate Divisor */
+
+#define UART_CLK	(1843200)	/* 1.8432 MHz */
+#define UART_BAUD(x)	(UART_CLK / (16 * (x)))
+
+/* RTC register definition */
+#define RTC_SECONDS             0
+#define RTC_SECONDS_ALARM       1
+#define RTC_MINUTES             2
+#define RTC_MINUTES_ALARM       3
+#define RTC_HOURS               4
+#define RTC_HOURS_ALARM         5
+#define RTC_DAY_OF_WEEK         6
+#define RTC_DAY_OF_MONTH        7
+#define RTC_MONTH               8
+#define RTC_YEAR                9
+#define RTC_FREQ_SELECT		10
+# define RTC_UIP 0x80
+# define RTC_DIV_CTL 0x70
+/* This RTC can work under 32.768KHz clock only.  */
+# define RTC_OSC_ENABLE 0x20
+# define RTC_OSC_DISABLE 0x00
+#define RTC_CONTROL     	11
+# define RTC_SET 0x80
+# define RTC_PIE 0x40
+# define RTC_AIE 0x20
+# define RTC_UIE 0x10
+# define RTC_SQWE 0x08
+# define RTC_DM_BINARY 0x04
+# define RTC_24H 0x02
+# define RTC_DST_EN 0x01
+
+#endif  /* __ASM_SH_SMC37C93X_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/smp.h linux-2.6.17/include/asm-sh/smp.h
--- linux-2.6.17-vanilla/include/asm-sh/smp.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/smp.h	2006-07-12 16:54:26.000000000 +0000
@@ -20,11 +20,6 @@
 #include <asm/atomic.h>
 #include <asm/current.h>
 
-extern cpumask_t cpu_online_map;
-extern cpumask_t cpu_possible_map;
-
-#define cpu_online(cpu)		cpu_isset(cpu, cpu_online_map)
-
 #define raw_smp_processor_id()	(current_thread_info()->cpu)
 
 /* I've no idea what the real meaning of this is */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/snapgear.h linux-2.6.17/include/asm-sh/snapgear.h
--- linux-2.6.17-vanilla/include/asm-sh/snapgear.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/snapgear.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,79 @@
+/*
+ * include/asm-sh/snapgear/io.h
+ *
+ * Modified version of io_se.h for the snapgear-specific functions.
+ *
+ * May be copied or modified under the terms of the GNU General Public
+ * License.  See linux/COPYING for more information.
+ *
+ * IO functions for a SnapGear
+ */
+
+#ifndef _ASM_SH_IO_SNAPGEAR_H
+#define _ASM_SH_IO_SNAPGEAR_H
+
+#if defined(CONFIG_CPU_SH4)
+/*
+ * The external interrupt lines, these take up ints 0 - 15 inclusive
+ * depending on the priority for the interrupt.  In fact the priority
+ * is the interrupt :-)
+ */
+
+#define IRL0_IRQ		2
+#define IRL0_IPR_ADDR	INTC_IPRD
+#define IRL0_IPR_POS	3
+#define IRL0_PRIORITY	13
+
+#define IRL1_IRQ		5
+#define IRL1_IPR_ADDR	INTC_IPRD
+#define IRL1_IPR_POS	2
+#define IRL1_PRIORITY	10
+
+#define IRL2_IRQ		8
+#define IRL2_IPR_ADDR	INTC_IPRD
+#define IRL2_IPR_POS	1
+#define IRL2_PRIORITY	7
+
+#define IRL3_IRQ		11
+#define IRL3_IPR_ADDR	INTC_IPRD
+#define IRL3_IPR_POS	0
+#define IRL3_PRIORITY	4
+#endif
+
+#define __IO_PREFIX	snapgear
+#include <asm/io_generic.h>
+
+#ifdef CONFIG_SH_SECUREEDGE5410
+/*
+ * We need to remember what was written to the ioport as some bits
+ * are shared with other functions and you cannot read back what was
+ * written :-|
+ *
+ * Bit        Read                   Write
+ * -----------------------------------------------
+ * D0         DCD on ttySC1          power
+ * D1         Reset Switch           heatbeat
+ * D2         ttySC0 CTS (7100)      LAN
+ * D3         -                      WAN
+ * D4         ttySC0 DCD (7100)      CONSOLE
+ * D5         -                      ONLINE
+ * D6         -                      VPN
+ * D7         -                      DTR on ttySC1
+ * D8         -                      ttySC0 RTS (7100)
+ * D9         -                      ttySC0 DTR (7100)
+ * D10        -                      RTC SCLK
+ * D11        RTC DATA               RTC DATA
+ * D12        -                      RTS RESET
+ */
+
+#define SECUREEDGE_IOPORT_ADDR ((volatile short *) 0xb0000000)
+extern unsigned short secureedge5410_ioport;
+
+#define SECUREEDGE_WRITE_IOPORT(val, mask) (*SECUREEDGE_IOPORT_ADDR = \
+	 (secureedge5410_ioport = \
+			((secureedge5410_ioport & ~(mask)) | ((val) & (mask)))))
+#define SECUREEDGE_READ_IOPORT() \
+	 ((*SECUREEDGE_IOPORT_ADDR&0x0817) | (secureedge5410_ioport&~0x0817))
+#endif
+
+#endif /* _ASM_SH_IO_SNAPGEAR_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/system.h linux-2.6.17/include/asm-sh/system.h
--- linux-2.6.17-vanilla/include/asm-sh/system.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/system.h	2006-07-12 16:54:26.000000000 +0000
@@ -7,6 +7,7 @@
  */
 
 #include <linux/config.h>
+#include <asm/types.h>
 
 /*
  *	switch_to() should switch tasks to task nr n, first
@@ -67,13 +68,20 @@
 {
 }
 
-#define nop() __asm__ __volatile__ ("nop")
-
-
-#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr))))
+#ifdef CONFIG_CPU_SH4A
+#define __icbi()			\
+{					\
+	unsigned long __addr;		\
+	__addr = 0xa8000000;		\
+	__asm__ __volatile__(		\
+		"icbi   %0\n\t"		\
+		: /* no output */	\
+		: "m" (__m(__addr)));	\
+}
+#endif
 
 static __inline__ unsigned long tas(volatile int *m)
-{ /* #define tas(ptr) (xchg((ptr),1)) */
+{
 	unsigned long retval;
 
 	__asm__ __volatile__ ("tas.b	@%1\n\t"
@@ -82,12 +90,33 @@
 	return retval;
 }
 
-extern void __xchg_called_with_bad_pointer(void);
-
-#define mb()	__asm__ __volatile__ ("": : :"memory")
-#define rmb()	mb()
-#define wmb()	__asm__ __volatile__ ("": : :"memory")
+/*
+ * A brief note on ctrl_barrier(), the control register write barrier.
+ *
+ * Legacy SH cores typically require a sequence of 8 nops after
+ * modification of a control register in order for the changes to take
+ * effect. On newer cores (like the sh4a and sh5) this is accomplished
+ * with icbi.
+ *
+ * Also note that on sh4a in the icbi case we can forego a synco for the
+ * write barrier, as it's not necessary for control registers.
+ *
+ * Historically we have only done this type of barrier for the MMUCR, but
+ * it's also necessary for the CCR, so we make it generic here instead.
+ */
+#ifdef CONFIG_CPU_SH4A
+#define mb()		__asm__ __volatile__ ("synco": : :"memory")
+#define rmb()		mb()
+#define wmb()		__asm__ __volatile__ ("synco": : :"memory")
+#define ctrl_barrier()	__icbi()
 #define read_barrier_depends()	do { } while(0)
+#else
+#define mb()		__asm__ __volatile__ ("": : :"memory")
+#define rmb()		mb()
+#define wmb()		__asm__ __volatile__ ("": : :"memory")
+#define ctrl_barrier()	__asm__ __volatile__ ("nop;nop;nop;nop;nop;nop;nop;nop")
+#define read_barrier_depends()	do { } while(0)
+#endif
 
 #ifdef CONFIG_SMP
 #define smp_mb()	mb()
@@ -105,7 +134,8 @@
 #define set_wmb(var, value) do { var = value; wmb(); } while (0)
 
 /* Interrupt Control */
-static __inline__ void local_irq_enable(void)
+#ifdef CONFIG_CPU_HAS_SR_RB
+static inline void local_irq_enable(void)
 {
 	unsigned long __dummy0, __dummy1;
 
@@ -118,6 +148,20 @@
 			     : "1" (~0x000000f0)
 			     : "memory");
 }
+#else
+static inline void local_irq_enable(void)
+{
+	unsigned long __dummy0, __dummy1;
+
+	__asm__ __volatile__ (
+		"stc	sr, %0\n\t"
+		"and	%1, %0\n\t"
+		"ldc	%0, sr\n\t"
+		: "=&r" (__dummy0), "=r" (__dummy1)
+		: "1" (~0x000000f0)
+		: "memory");
+}
+#endif
 
 static __inline__ void local_irq_disable(void)
 {
@@ -130,6 +174,31 @@
 			     : "memory");
 }
 
+static __inline__ void set_bl_bit(void)
+{
+	unsigned long __dummy0, __dummy1;
+
+	__asm__ __volatile__ ("stc	sr, %0\n\t"
+			     "or	%2, %0\n\t"
+			     "and	%3, %0\n\t"
+			     "ldc	%0, sr"
+			     : "=&r" (__dummy0), "=r" (__dummy1)
+			     : "r" (0x10000000), "r" (0xffffff0f)
+			     : "memory");
+}
+
+static __inline__ void clear_bl_bit(void)
+{
+	unsigned long __dummy0, __dummy1;
+
+	__asm__ __volatile__ ("stc	sr, %0\n\t"
+			     "and	%2, %0\n\t"
+			     "ldc	%0, sr"
+			     : "=&r" (__dummy0), "=r" (__dummy1)
+			     : "1" (~0x10000000)
+			     : "memory");
+}
+
 #define local_save_flags(x) \
 	__asm__("stc sr, %0; and #0xf0, %0" : "=&z" (x) :/**/: "memory" )
 
@@ -174,17 +243,17 @@
 	}
 }
 #else
-#define local_irq_restore(x) do { 			\
+#define local_irq_restore(x) do {			\
 	if ((x & 0x000000f0) != 0x000000f0)		\
-		local_irq_enable();				\
+		local_irq_enable();			\
 } while (0)
 #endif
 
-#define really_restore_flags(x) do { 			\
+#define really_restore_flags(x) do {			\
 	if ((x & 0x000000f0) != 0x000000f0)		\
-		local_irq_enable();				\
+		local_irq_enable();			\
 	else						\
-		local_irq_disable();				\
+		local_irq_disable();			\
 } while (0)
 
 /*
@@ -212,8 +281,8 @@
 #define back_to_P1()					\
 do {							\
 	unsigned long __dummy;				\
+	ctrl_barrier();					\
 	__asm__ __volatile__(				\
-		"nop;nop;nop;nop;nop;nop;nop\n\t"	\
 		"mov.l	1f, %0\n\t"			\
 		"jmp	@%0\n\t"			\
 		" nop\n\t"				\
@@ -226,7 +295,7 @@
 /* For spinlocks etc */
 #define local_irq_save(x)	x = local_irq_save()
 
-static __inline__ unsigned long xchg_u32(volatile int * m, unsigned long val)
+static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val)
 {
 	unsigned long flags, retval;
 
@@ -237,7 +306,7 @@
 	return retval;
 }
 
-static __inline__ unsigned long xchg_u8(volatile unsigned char * m, unsigned long val)
+static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val)
 {
 	unsigned long flags, retval;
 
@@ -248,20 +317,70 @@
 	return retval;
 }
 
-static __inline__ unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
+extern void __xchg_called_with_bad_pointer(void);
+
+#define __xchg(ptr, x, size)				\
+({							\
+	unsigned long __xchg__res;			\
+	volatile void *__xchg_ptr = (ptr);		\
+	switch (size) {					\
+	case 4:						\
+		__xchg__res = xchg_u32(__xchg_ptr, x);	\
+		break;					\
+	case 1:						\
+		__xchg__res = xchg_u8(__xchg_ptr, x);	\
+		break;					\
+	default:					\
+		__xchg_called_with_bad_pointer();	\
+		__xchg__res = x;			\
+		break;					\
+	}						\
+							\
+	__xchg__res;					\
+})
+
+#define xchg(ptr,x)	\
+	((__typeof__(*(ptr)))__xchg((ptr),(unsigned long)(x), sizeof(*(ptr))))
+
+static inline unsigned long __cmpxchg_u32(volatile int * m, unsigned long old,
+	unsigned long new)
+{
+	__u32 retval;
+	unsigned long flags;
+
+	local_irq_save(flags);
+	retval = *m;
+	if (retval == old)
+		*m = new;
+	local_irq_restore(flags);       /* implies memory barrier  */
+	return retval;
+}
+
+/* This function doesn't exist, so you'll get a linker error
+ * if something tries to do an invalid cmpxchg(). */
+extern void __cmpxchg_called_with_bad_pointer(void);
+
+#define __HAVE_ARCH_CMPXCHG 1
+
+static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old,
+		unsigned long new, int size)
 {
 	switch (size) {
 	case 4:
-		return xchg_u32(ptr, x);
-		break;
-	case 1:
-		return xchg_u8(ptr, x);
-		break;
+		return __cmpxchg_u32(ptr, old, new);
 	}
-	__xchg_called_with_bad_pointer();
-	return x;
+	__cmpxchg_called_with_bad_pointer();
+	return old;
 }
 
+#define cmpxchg(ptr,o,n)						 \
+  ({									 \
+     __typeof__(*(ptr)) _o_ = (o);					 \
+     __typeof__(*(ptr)) _n_ = (n);					 \
+     (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_,		 \
+				    (unsigned long)_n_, sizeof(*(ptr))); \
+  })
+
 /* XXX
  * disable hlt during certain critical i/o operations
  */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/systemh7751.h linux-2.6.17/include/asm-sh/systemh7751.h
--- linux-2.6.17-vanilla/include/asm-sh/systemh7751.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/systemh7751.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,71 @@
+#ifndef __ASM_SH_SYSTEMH_7751SYSTEMH_H
+#define __ASM_SH_SYSTEMH_7751SYSTEMH_H
+
+/*
+ * linux/include/asm-sh/systemh/7751systemh.h
+ *
+ * Copyright (C) 2000  Kazumoto Kojima
+ *
+ * Hitachi SystemH support
+
+ * Modified for 7751 SystemH by
+ * Jonathan Short, 2002.
+ */
+
+/* Box specific addresses.  */
+
+#define PA_ROM		0x00000000	/* EPROM */
+#define PA_ROM_SIZE	0x00400000	/* EPROM size 4M byte */
+#define PA_FROM		0x01000000	/* EPROM */
+#define PA_FROM_SIZE	0x00400000	/* EPROM size 4M byte */
+#define PA_EXT1		0x04000000
+#define PA_EXT1_SIZE	0x04000000
+#define PA_EXT2		0x08000000
+#define PA_EXT2_SIZE	0x04000000
+#define PA_SDRAM	0x0c000000
+#define PA_SDRAM_SIZE	0x04000000
+
+#define PA_EXT4		0x12000000
+#define PA_EXT4_SIZE	0x02000000
+#define PA_EXT5		0x14000000
+#define PA_EXT5_SIZE	0x04000000
+#define PA_PCIC		0x18000000	/* MR-SHPC-01 PCMCIA */
+
+#define PA_DIPSW0	0xb9000000	/* Dip switch 5,6 */
+#define PA_DIPSW1	0xb9000002	/* Dip switch 7,8 */
+#define PA_LED		0xba000000	/* LED */
+#define	PA_BCR		0xbb000000	/* FPGA on the MS7751SE01 */
+
+#define PA_MRSHPC	0xb83fffe0	/* MR-SHPC-01 PCMCIA controler */
+#define PA_MRSHPC_MW1	0xb8400000	/* MR-SHPC-01 memory window base */
+#define PA_MRSHPC_MW2	0xb8500000	/* MR-SHPC-01 attribute window base */
+#define PA_MRSHPC_IO	0xb8600000	/* MR-SHPC-01 I/O window base */
+#define MRSHPC_MODE     (PA_MRSHPC + 4)
+#define MRSHPC_OPTION   (PA_MRSHPC + 6)
+#define MRSHPC_CSR      (PA_MRSHPC + 8)
+#define MRSHPC_ISR      (PA_MRSHPC + 10)
+#define MRSHPC_ICR      (PA_MRSHPC + 12)
+#define MRSHPC_CPWCR    (PA_MRSHPC + 14)
+#define MRSHPC_MW0CR1   (PA_MRSHPC + 16)
+#define MRSHPC_MW1CR1   (PA_MRSHPC + 18)
+#define MRSHPC_IOWCR1   (PA_MRSHPC + 20)
+#define MRSHPC_MW0CR2   (PA_MRSHPC + 22)
+#define MRSHPC_MW1CR2   (PA_MRSHPC + 24)
+#define MRSHPC_IOWCR2   (PA_MRSHPC + 26)
+#define MRSHPC_CDCR     (PA_MRSHPC + 28)
+#define MRSHPC_PCIC_INFO (PA_MRSHPC + 30)
+
+#define BCR_ILCRA	(PA_BCR + 0)
+#define BCR_ILCRB	(PA_BCR + 2)
+#define BCR_ILCRC	(PA_BCR + 4)
+#define BCR_ILCRD	(PA_BCR + 6)
+#define BCR_ILCRE	(PA_BCR + 8)
+#define BCR_ILCRF	(PA_BCR + 10)
+#define BCR_ILCRG	(PA_BCR + 12)
+
+#define IRQ_79C973	13
+
+#define __IO_PREFIX	sh7751systemh
+#include <asm/io_generic.h>
+
+#endif  /* __ASM_SH_SYSTEMH_7751SYSTEMH_H */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/thread_info.h linux-2.6.17/include/asm-sh/thread_info.h
--- linux-2.6.17-vanilla/include/asm-sh/thread_info.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/thread_info.h	2006-07-12 16:54:26.000000000 +0000
@@ -20,7 +20,8 @@
 	struct exec_domain	*exec_domain;	/* execution domain */
 	unsigned long		flags;		/* low level flags */
 	__u32			cpu;
-	int			preempt_count; /* 0 => preemptable, <0 => BUG */
+	int			preempt_count;	/* 0 => preemptable, <0 => BUG */
+	mm_segment_t		addr_limit;	/* thread address space */
 	struct restart_block	restart_block;
 	__u8			supervisor_stack[0];
 };
@@ -40,6 +41,7 @@
 	.flags		= 0,			\
 	.cpu		= 0,			\
 	.preempt_count	= 1,			\
+	.addr_limit	= KERNEL_DS,		\
 	.restart_block	= {			\
 		.fn = do_no_restart_syscall,	\
 	},					\
@@ -48,16 +50,29 @@
 #define init_thread_info	(init_thread_union.thread_info)
 #define init_stack		(init_thread_union.stack)
 
+#define THREAD_SIZE (2*PAGE_SIZE)
+
 /* how to get the thread information struct from C */
 static inline struct thread_info *current_thread_info(void)
 {
 	struct thread_info *ti;
+#ifdef CONFIG_CPU_HAS_SR_RB
 	__asm__("stc	r7_bank, %0" : "=r" (ti));
+#else
+	unsigned long __dummy;
+
+	__asm__ __volatile__ (
+		"mov	r15, %0\n\t"
+		"and	%1, %0\n\t"
+		: "=&r" (ti), "=r" (__dummy)
+		: "1" (~(THREAD_SIZE - 1))
+		: "memory");
+#endif
+
 	return ti;
 }
 
 /* thread information allocation */
-#define THREAD_SIZE (2*PAGE_SIZE)
 #define alloc_thread_info(ti) ((struct thread_info *) __get_free_pages(GFP_KERNEL,1))
 #define free_thread_info(ti) free_pages((unsigned long) (ti), 1)
 
@@ -65,7 +80,7 @@
 
 /* how to get the thread information struct from ASM */
 #define GET_THREAD_INFO(reg) \
-	stc	r7_bank, reg
+	stc     r7_bank, reg
 
 #endif
 
@@ -82,7 +97,6 @@
 #define TIF_USEDFPU		16	/* FPU was used by this task this quantum (SMP) */
 #define TIF_POLLING_NRFLAG	17	/* true if poll_idle() is polling TIF_NEED_RESCHED */
 #define TIF_MEMDIE		18
-#define TIF_USERSPACE		31	/* true if FS sets userspace */
 
 #define _TIF_SYSCALL_TRACE	(1<<TIF_SYSCALL_TRACE)
 #define _TIF_NOTIFY_RESUME	(1<<TIF_NOTIFY_RESUME)
@@ -90,7 +104,6 @@
 #define _TIF_NEED_RESCHED	(1<<TIF_NEED_RESCHED)
 #define _TIF_USEDFPU		(1<<TIF_USEDFPU)
 #define _TIF_POLLING_NRFLAG	(1<<TIF_POLLING_NRFLAG)
-#define _TIF_USERSPACE		(1<<TIF_USERSPACE)
 
 #define _TIF_WORK_MASK		0x000000FE	/* work to do on interrupt/exception return */
 #define _TIF_ALLWORK_MASK	0x000000FF	/* work to do on any return to u-space */
diff -ruN linux-2.6.17-vanilla/include/asm-sh/timer.h linux-2.6.17/include/asm-sh/timer.h
--- linux-2.6.17-vanilla/include/asm-sh/timer.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/timer.h	2006-07-12 16:54:26.000000000 +0000
@@ -6,6 +6,8 @@
 
 struct sys_timer_ops {
 	int (*init)(void);
+	int (*start)(void);
+	int (*stop)(void);
 	unsigned long (*get_offset)(void);
 	unsigned long (*get_frequency)(void);
 };
diff -ruN linux-2.6.17-vanilla/include/asm-sh/timex.h linux-2.6.17/include/asm-sh/timex.h
--- linux-2.6.17-vanilla/include/asm-sh/timex.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/timex.h	2006-07-12 16:54:26.000000000 +0000
@@ -6,7 +6,7 @@
 #ifndef __ASM_SH_TIMEX_H
 #define __ASM_SH_TIMEX_H
 
-#define CLOCK_TICK_RATE		(CONFIG_SH_PCLK_FREQ / 4) /* Underlying HZ */
+#define CLOCK_TICK_RATE		(HZ * 100000UL)
 
 typedef unsigned long long cycles_t;
 
diff -ruN linux-2.6.17-vanilla/include/asm-sh/titan.h linux-2.6.17/include/asm-sh/titan.h
--- linux-2.6.17-vanilla/include/asm-sh/titan.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/asm-sh/titan.h	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1,43 @@
+/*
+ * Platform defintions for Titan
+ */
+
+#ifndef _ASM_SH_TITAN_TITAN_H
+#define _ASM_SH_TITAN_TITAN_H
+
+#define __IO_PREFIX titan
+#include <asm/io_generic.h>
+
+/* IRQ assignments */
+#define TITAN_IRQ_WAN		2	/* eth0 (WAN) */
+#define TITAN_IRQ_LAN		5	/* eth1 (LAN) */
+#define TITAN_IRQ_MPCIA		8	/* mPCI A */
+#define TITAN_IRQ_MPCIB		11	/* mPCI B */
+#define TITAN_IRQ_USB		11	/* USB */
+
+/*
+ * The external interrupt lines, these take up ints 0 - 15 inclusive
+ * depending on the priority for the interrupt.  In fact the priority
+ * is the interrupt :-)
+ */
+#define IRL0_IRQ	0
+#define IRL0_IPR_ADDR	INTC_IPRD
+#define IRL0_IPR_POS	3
+#define IRL0_PRIORITY	8
+
+#define IRL1_IRQ	1
+#define IRL1_IPR_ADDR	INTC_IPRD
+#define IRL1_IPR_POS	2
+#define IRL1_PRIORITY	8
+
+#define IRL2_IRQ	2
+#define IRL2_IPR_ADDR	INTC_IPRD
+#define IRL2_IPR_POS	1
+#define IRL2_PRIORITY	8
+
+#define IRL3_IRQ	3
+#define IRL3_IPR_ADDR	INTC_IPRD
+#define IRL3_IPR_POS	0
+#define IRL3_PRIORITY	8
+
+#endif
diff -ruN linux-2.6.17-vanilla/include/asm-sh/uaccess.h linux-2.6.17/include/asm-sh/uaccess.h
--- linux-2.6.17-vanilla/include/asm-sh/uaccess.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/uaccess.h	2006-07-12 16:54:26.000000000 +0000
@@ -1,5 +1,4 @@
-/* $Id: uaccess.h,v 1.11 2003/10/13 07:21:20 lethal Exp $
- *
+/*
  * User space memory access functions
  *
  * Copyright (C) 1999, 2002  Niibe Yutaka
@@ -16,21 +15,9 @@
 #include <linux/errno.h>
 #include <linux/sched.h>
 
-/*
- * NOTE: Macro/functions in this file depends on threads_info.h implementation.
- * Assumes:
- * TI_FLAGS == 8
- * TIF_USERSPACE == 31
- * USER_ADDR_LIMIT == 0x80000000
- */
-
 #define VERIFY_READ    0
 #define VERIFY_WRITE   1
 
-typedef struct {
-	unsigned int is_user_space;
-} mm_segment_t;
-
 /*
  * The fs value determines whether argument validity checking should be
  * performed or not.  If get_fs() == USER_DS, checking is performed, with
@@ -40,12 +27,14 @@
  */
 
 #define MAKE_MM_SEG(s)	((mm_segment_t) { (s) })
-#define segment_eq(a,b)	((a).is_user_space == (b).is_user_space)
 
-#define USER_ADDR_LIMIT	0x80000000
+#define KERNEL_DS	MAKE_MM_SEG(0xFFFFFFFFUL)
+#define USER_DS		MAKE_MM_SEG(PAGE_OFFSET)
 
-#define KERNEL_DS	MAKE_MM_SEG(0)
-#define USER_DS		MAKE_MM_SEG(1)
+#define segment_eq(a,b)	((a).seg == (b).seg)
+
+#define __addr_ok(addr) \
+	((unsigned long)(addr) < (current_thread_info()->addr_limit.seg))
 
 #define get_ds()	(KERNEL_DS)
 
@@ -76,31 +65,8 @@
 	return ((addr >= memory_start) && ((addr + size) < memory_end));
 }
 #else /* CONFIG_MMU */
-static inline mm_segment_t get_fs(void)
-{
-	return MAKE_MM_SEG(test_thread_flag(TIF_USERSPACE));
-}
-
-static inline void set_fs(mm_segment_t s)
-{
-	unsigned long ti, flag;
-	__asm__ __volatile__(
-		"stc	r7_bank, %0\n\t"
-		"mov.l	@(8,%0), %1\n\t"
-		"shal	%1\n\t"
-		"cmp/pl	%2\n\t"
-		"rotcr	%1\n\t"
-		"mov.l	%1, @(8,%0)"
-		: "=&r" (ti), "=&r" (flag)
-		: "r" (s.is_user_space)
-		: "t");
-/****
-	if (s.is_user_space)
-		set_thread_flag(TIF_USERSPACE);
-	else
-		clear_thread_flag(TIF_USERSPACE);
-****/
-}
+#define get_fs()	(current_thread_info()->addr_limit)
+#define set_fs(x)	(current_thread_info()->addr_limit = (x))
 
 /*
  * __access_ok: Check if address with size is OK or not.
@@ -108,7 +74,7 @@
  * We do three checks:
  * (1) is it user space? 
  * (2) addr + size --> carry?
- * (3) addr + size >= 0x80000000  (USER_ADDR_LIMIT)
+ * (3) addr + size >= 0x80000000  (PAGE_OFFSET)
  *
  * (1) (2) (3) | RESULT
  *  0   0   0  |  ok
@@ -541,7 +507,7 @@
 		"3:\n\t"
 		"mov.l	4f, %1\n\t"
 		"jmp	@%1\n\t"
-		" mov	%5, %0\n"
+		" mov	#0, %0\n"
 		".balign 4\n"
 		"4:	.long 2b\n"
 		".previous\n"
@@ -550,26 +516,20 @@
 		"	.long 1b,3b\n"
 		".previous"
 		: "=z" (res), "=&r" (__dummy)
-		: "0" (0), "r" (__s), "r" (__n), "i" (-EFAULT)
+		: "0" (0), "r" (__s), "r" (__n)
 		: "t");
 	return res;
 }
 
 static __inline__ long strnlen_user(const char __user *s, long n)
 {
-	if (!access_ok(VERIFY_READ, s, n))
+	if (!__addr_ok(s))
 		return 0;
 	else
 		return __strnlen_user(s, n);
 }
 
-static __inline__ long strlen_user(const char __user *s)
-{
-	if (!access_ok(VERIFY_READ, s, 0))
-		return 0;
-	else
-		return __strnlen_user(s, ~0UL >> 1);
-}
+#define strlen_user(str)	strnlen_user(str, ~0UL >> 1)
 
 /*
  * The exception table consists of pairs of addresses: the first is the
diff -ruN linux-2.6.17-vanilla/include/asm-sh/unistd.h linux-2.6.17/include/asm-sh/unistd.h
--- linux-2.6.17-vanilla/include/asm-sh/unistd.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/asm-sh/unistd.h	2006-07-12 16:54:26.000000000 +0000
@@ -300,9 +300,31 @@
 #define __NR_inotify_init	290
 #define __NR_inotify_add_watch	291
 #define __NR_inotify_rm_watch	292
+#define __NR_migrate_pages	293
+#define __NR_openat		294
+#define __NR_mkdirat		295
+#define __NR_mknodat		296
+#define __NR_fchownat		297
+#define __NR_futimesat		298
+#define __NR_fstatat64		299
+#define __NR_unlinkat		300
+#define __NR_renameat		301
+#define __NR_linkat		302
+#define __NR_symlinkat		303
+#define __NR_readlinkat		304
+#define __NR_fchmodat		305
+#define __NR_faccessat		305
+#define __NR_pselect6		307
+#define __NR_ppoll		308
+#define __NR_unshare		309
+#define __NR_set_robust_list	310
+#define __NR_get_robust_list	311
+#define __NR_splice		312
+#define __NR_sync_file_range	313
+#define __NR_tee		314
+#define __NR_vmsplice		315
 
-
-#define NR_syscalls 293
+#define NR_syscalls 316
 
 /* user-visible error numbers are in the range -1 - -124: see <asm-sh/errno.h> */
 
diff -ruN linux-2.6.17-vanilla/include/linux/CVS/Entries linux-2.6.17/include/linux/CVS/Entries
--- linux-2.6.17-vanilla/include/linux/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/linux/CVS/Entries	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,3 @@
+/superhyway.h/1.2/Thu Mar 17 07:43:07 2005/-ko/
+/i2c-id.h/1.11/Wed Jul  5 14:51:55 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/include/linux/CVS/Repository linux-2.6.17/include/linux/CVS/Repository
--- linux-2.6.17-vanilla/include/linux/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/linux/CVS/Repository	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+linux/include/linux
diff -ruN linux-2.6.17-vanilla/include/linux/CVS/Root linux-2.6.17/include/linux/CVS/Root
--- linux-2.6.17-vanilla/include/linux/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/linux/CVS/Root	2006-07-12 16:54:26.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/linux/i2c-id.h linux-2.6.17/include/linux/i2c-id.h
--- linux-2.6.17-vanilla/include/linux/i2c-id.h	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/include/linux/i2c-id.h	2006-07-12 16:54:27.000000000 +0000
@@ -245,6 +245,7 @@
 #define I2C_HW_SMBUS_OV518	0x04000f /* OV518(+) USB 1.1 webcam ICs */
 #define I2C_HW_SMBUS_OV519	0x040010 /* OV519 USB 1.1 webcam IC */
 #define I2C_HW_SMBUS_OVFX2	0x040011 /* Cypress/OmniVision FX2 webcam */
+#define I2C_HW_SMBUS_VOYAGER	0x040012
 
 /* --- ISA pseudo-adapter						*/
 #define I2C_HW_ISA		0x050000
diff -ruN linux-2.6.17-vanilla/include/video/CVS/Entries linux-2.6.17/include/video/CVS/Entries
--- linux-2.6.17-vanilla/include/video/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/video/CVS/Entries	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,2 @@
+/voyager.h/1.1/Wed Apr 21 00:09:20 2004/-ko/
+D
diff -ruN linux-2.6.17-vanilla/include/video/CVS/Repository linux-2.6.17/include/video/CVS/Repository
--- linux-2.6.17-vanilla/include/video/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/video/CVS/Repository	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+linux/include/video
diff -ruN linux-2.6.17-vanilla/include/video/CVS/Root linux-2.6.17/include/video/CVS/Root
--- linux-2.6.17-vanilla/include/video/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/video/CVS/Root	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/include/video/voyager.h linux-2.6.17/include/video/voyager.h
--- linux-2.6.17-vanilla/include/video/voyager.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/include/video/voyager.h	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,39 @@
+#define	VOY_REG_TOP	0xb3e00000	//voyager register
+#define	VOY_VRAM_TOP0	0xb0400000	//PANEL PLANE
+#define	VOY_VRAM_TOP1	0xb04a0000	//VIDEO PLANE 0
+#define	VOY_VRAM_TOP2	0xb0540000	//VIDEO PLANE 1
+#define	VOY_VRAM_TOP3	0xb05e0000	//VIDEO ALPHA PLANE
+#define	VOY_VRAM_TOP4	0xb0680000	//ALPHA PLANE
+#define	VOY_VRAM_TOP5	0xb0720000	//PANEL CURSOR PLANE
+#define	VOY_VRAM_TOP6	0xb0730000	//CRT PLANE
+#define	VOY_VRAM_TOP7	0xb07d0000	//CRT CURSOR PLANE
+
+#define XRES 640
+#define YRES 480
+#define BPP  16
+
+#define CSR_XRES 64
+#define CSR_YRES 64
+#define CSR_BPP  2
+
+#define MAX_PIXEL_MEM_SIZE ((XRES * YRES * BPP) / 8)
+#define LINE_LENGTH        ((XRES * BPP) / 8)
+#define MAX_FRAMEBUFFER_MEM_SIZE (MAX_PIXEL_MEM_SIZE)
+#define MAX_HWC_MEM_SIZE ((CSR_XRES * CSR_YRES * CSR_BPP) / 8)
+#define ALLOCATED_FB_MEM_SIZE \
+	(PAGE_ALIGN(MAX_FRAMEBUFFER_MEM_SIZE + PAGE_SIZE))
+
+#define	VOYAGER_IOCTL_DEBUG_ADD		0x00
+#define	VOYAGER_IOCTL_DEBUG_GET		0x01
+#define	VOYAGER_IOCTL_DEBUG_PUT		0x02
+#define	VOYAGER_IOCTL_ENABLE		0x10
+#define	VOYAGER_IOCTL_ENABLE_CK		0x11
+#define	VOYAGER_IOCTL_ENABLE_CP		0x12
+#define	VOYAGER_IOCTL_ENABLE_AL		0x13
+#define	VOYAGER_IOCTL_SCALE		0x20
+#define	VOYAGER_IOCTL_CHKEY		0x30
+#define	VOYAGER_IOCTL_COLOR_1		0x40
+#define	VOYAGER_IOCTL_COLOR_2		0x41
+#define	VOYAGER_IOCTL_TYPE		0x50
+#define	VOYAGER_IOCTL_SELECT		0x51
+#define	VOYAGER_IOCTL_ALPHA		0x60
diff -ruN linux-2.6.17-vanilla/lib/CVS/Entries linux-2.6.17/lib/CVS/Entries
--- linux-2.6.17-vanilla/lib/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/lib/CVS/Entries	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,3 @@
+/Kconfig.debug/1.4/Wed Jul  5 14:51:56 2006/-ko/
+/bitmap.c/1.5/Wed Jul  5 14:51:56 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/lib/CVS/Repository linux-2.6.17/lib/CVS/Repository
--- linux-2.6.17-vanilla/lib/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/lib/CVS/Repository	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+linux/lib
diff -ruN linux-2.6.17-vanilla/lib/CVS/Root linux-2.6.17/lib/CVS/Root
--- linux-2.6.17-vanilla/lib/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/lib/CVS/Root	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/lib/Kconfig.debug linux-2.6.17/lib/Kconfig.debug
--- linux-2.6.17-vanilla/lib/Kconfig.debug	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/lib/Kconfig.debug	2006-07-12 16:54:27.000000000 +0000
@@ -178,7 +178,7 @@
 
 config FRAME_POINTER
 	bool "Compile the kernel with frame pointers"
-	depends on DEBUG_KERNEL && (X86 || CRIS || M68K || M68KNOMMU || FRV || UML)
+	depends on DEBUG_KERNEL && (X86 || CRIS || M68K || M68KNOMMU || FRV || UML || SUPERH)
 	default y if DEBUG_INFO && UML
 	help
 	  If you say Y here the resulting kernel image will be slightly larger
diff -ruN linux-2.6.17-vanilla/lib/bitmap.c linux-2.6.17/lib/bitmap.c
--- linux-2.6.17-vanilla/lib/bitmap.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/lib/bitmap.c	2006-07-12 16:54:27.000000000 +0000
@@ -525,7 +525,7 @@
 	ord = 0;
 	while (i < pos) {
 		i = find_next_bit(buf, bits, i + 1);
-	     	ord++;
+		ord++;
 	}
 	BUG_ON(i != pos);
 
@@ -748,6 +748,11 @@
  * a power (@order) of two, aligned to that power of two, which
  * makes the search algorithm much faster.
  *
+ * Find a region of free (zero) bits in a @bitmap of @bits bits and
+ * allocate them (set them to one).  Only consider regions of length
+ * a power (@order) of two, aligned to that power of two, which
+ * makes the search algorithm much faster.
+ *
  * Return the bit offset in bitmap of the allocated region,
  * or -errno on failure.
  */
diff -ruN linux-2.6.17-vanilla/mm/CVS/Entries linux-2.6.17/mm/CVS/Entries
--- linux-2.6.17-vanilla/mm/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/mm/CVS/Entries	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,2 @@
+/memory.c/1.66/Wed Jul  5 14:51:57 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/mm/CVS/Repository linux-2.6.17/mm/CVS/Repository
--- linux-2.6.17-vanilla/mm/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/mm/CVS/Repository	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+linux/mm
diff -ruN linux-2.6.17-vanilla/mm/CVS/Root linux-2.6.17/mm/CVS/Root
--- linux-2.6.17-vanilla/mm/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/mm/CVS/Root	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/mm/memory.c linux-2.6.17/mm/memory.c
--- linux-2.6.17-vanilla/mm/memory.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/mm/memory.c	2006-07-12 16:54:27.000000000 +0000
@@ -1455,7 +1455,9 @@
 		int reuse = can_share_swap_page(old_page);
 		unlock_page(old_page);
 		if (reuse) {
+#ifdef CONFIG_ARM
 			flush_cache_page(vma, address, pte_pfn(orig_pte));
+#endif
 			entry = pte_mkyoung(orig_pte);
 			entry = maybe_mkwrite(pte_mkdirty(entry), vma);
 			ptep_set_access_flags(vma, address, page_table, entry, 1);
diff -ruN linux-2.6.17-vanilla/net/CVS/Entries linux-2.6.17/net/CVS/Entries
--- linux-2.6.17-vanilla/net/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/net/CVS/Entries	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+D/ipv4////
diff -ruN linux-2.6.17-vanilla/net/CVS/Repository linux-2.6.17/net/CVS/Repository
--- linux-2.6.17-vanilla/net/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/net/CVS/Repository	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+linux/net
diff -ruN linux-2.6.17-vanilla/net/CVS/Root linux-2.6.17/net/CVS/Root
--- linux-2.6.17-vanilla/net/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/net/CVS/Root	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/net/ipv4/CVS/Entries linux-2.6.17/net/ipv4/CVS/Entries
--- linux-2.6.17-vanilla/net/ipv4/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/net/ipv4/CVS/Entries	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,2 @@
+/ipconfig.c/1.12/Wed Jul  5 14:51:59 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/net/ipv4/CVS/Repository linux-2.6.17/net/ipv4/CVS/Repository
--- linux-2.6.17-vanilla/net/ipv4/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/net/ipv4/CVS/Repository	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+linux/net/ipv4
diff -ruN linux-2.6.17-vanilla/net/ipv4/CVS/Root linux-2.6.17/net/ipv4/CVS/Root
--- linux-2.6.17-vanilla/net/ipv4/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/net/ipv4/CVS/Root	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/net/ipv4/ipconfig.c linux-2.6.17/net/ipv4/ipconfig.c
--- linux-2.6.17-vanilla/net/ipv4/ipconfig.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/net/ipv4/ipconfig.c	2006-07-12 16:54:27.000000000 +0000
@@ -113,7 +113,7 @@
  */
 int ic_set_manually __initdata = 0;		/* IPconfig parameters set manually */
 
-static int ic_enable __initdata = 0;		/* IP config enabled? */
+static int ic_enable __initdata = 1;		/* IP config enabled? */
 
 /* Protocol choice */
 int ic_proto_enabled __initdata = 0
diff -ruN linux-2.6.17-vanilla/scripts/CVS/Entries linux-2.6.17/scripts/CVS/Entries
--- linux-2.6.17-vanilla/scripts/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/scripts/CVS/Entries	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,3 @@
+/treelink.sh/1.3/Sun Jan  4 18:30:15 2004//
+/treeunlink.sh/1.3/Sun Jan  4 18:30:15 2004//
+D
diff -ruN linux-2.6.17-vanilla/scripts/CVS/Repository linux-2.6.17/scripts/CVS/Repository
--- linux-2.6.17-vanilla/scripts/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/scripts/CVS/Repository	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+linux/scripts
diff -ruN linux-2.6.17-vanilla/scripts/CVS/Root linux-2.6.17/scripts/CVS/Root
--- linux-2.6.17-vanilla/scripts/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/scripts/CVS/Root	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/scripts/treelink.sh linux-2.6.17/scripts/treelink.sh
--- linux-2.6.17-vanilla/scripts/treelink.sh	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/scripts/treelink.sh	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# treelink.sh - Tree Linking Script
+#
+# Copyright (C) 2001, 2004 Paul Mundt <lethal@linux-sh.org>
+#
+# Modified by M. R. Brown <mrbrown@0xd6.org>
+#
+# A simple shell script for linking a drop in tree into a stock
+# kernel tree. Usable for drop in trees such as the linux-mips
+# and linuxconsole trees.
+#
+# Released under the terms of the GNU GPL v2
+#
+[ "$#" -ne "2" ] && echo "Usage: $0 <drop in tree> <kernel tree>" && exit 1
+
+ODIR=${PWD}
+cd $1 || exit 1
+LDIR=${PWD}
+echo -n "Building file list ... "
+LIST=`find * \( -type d -name CVS -prune \) -o \
+	     \( -type d -name {arch} -prune \) -o \
+	     \( -type d -name .arch-ids -prune \) -o \
+	     \( -type d -name SCCS -prune \) -o \
+	     \( -type d -name BitKeeper -prune \) -o -type f -print`
+echo -e "done."
+cd ${ODIR}
+
+cd $2 || exit 1
+
+# Make this a seperate step so that the user can cancel the operation
+echo -n "Saving originals ..... "
+for file in $LIST; do
+	if [ -e $file  -a  ! -h $file ]; then
+		DIR=`dirname $file`
+		ofile=`basename $file`
+		[ ! -d ${DIR}/.orig ] && mkdir -p ${DIR}/.orig
+		cp $file ${DIR}/.orig/$ofile
+	fi
+done
+echo -e "done."
+
+echo -n "Linking files ........ "
+for file in $LIST; do
+	DIR=`dirname $file`
+	[ ! -d $DIR ] && mkdir -p $DIR
+	ln -sf $LDIR/$file $file
+done
+echo -e "done."
diff -ruN linux-2.6.17-vanilla/scripts/treeunlink.sh linux-2.6.17/scripts/treeunlink.sh
--- linux-2.6.17-vanilla/scripts/treeunlink.sh	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/scripts/treeunlink.sh	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,37 @@
+#!/bin/sh
+#
+# treeunlink.sh - Tree Unlinking Script
+#
+# Copyright (c) 2001 M. R. Brown <mrbrown@0xd6.org>
+#
+# Modified by Paul Mundt <lethal@linux-sh.org>
+#
+# This script attempts to restore a previously tree-linked tree.
+# It's the anti-thesis of (and based on) treelink.sh by Paul Mundt.
+#
+# Released under the terms of the GNU GPL v2
+
+[ "$#" -ne "1" ] && echo "Usage: $0 <kernel tree>" && exit 1
+
+cd $1 || exit 1
+echo -n "Building file list ... "
+LIST=`find * \( -type d -name CVS -prune \) -o \
+	     \( -type d -name {arch} -prune \) -o \
+	     \( -type d -name .arch-ids -prune \) -o \
+	     \( -type d -name SCCS -prune \) -o \
+	     \( -type d -name BitKeeper -prune \) -o -type l -print`
+echo -e "done."
+
+[ -z "$LIST" ] && echo "No linked files to unlink." && exit 1
+
+echo -n "Restoring originals .. "
+for file in $LIST; do
+	DIR=`dirname $file`
+	ofile=`basename $file`
+	rm -f $file
+	if [ -d ${DIR}/.orig  -a  -e ${DIR}/.orig/$ofile ]; then
+		mv ${DIR}/.orig/$ofile $file
+		[ -z "`ls ${DIR}/.orig`" ] && rmdir ${DIR}/.orig
+	fi
+done
+echo -e "done."
diff -ruN linux-2.6.17-vanilla/sound/CVS/Entries linux-2.6.17/sound/CVS/Entries
--- linux-2.6.17-vanilla/sound/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/CVS/Entries	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,4 @@
+/Kconfig/1.1/Sun Jun  4 12:13:04 2006//
+/Makefile/1.1/Sun Jun  4 12:13:04 2006//
+D/oss////
+D/sh////
diff -ruN linux-2.6.17-vanilla/sound/CVS/Repository linux-2.6.17/sound/CVS/Repository
--- linux-2.6.17-vanilla/sound/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/CVS/Repository	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+linux/sound
diff -ruN linux-2.6.17-vanilla/sound/CVS/Root linux-2.6.17/sound/CVS/Root
--- linux-2.6.17-vanilla/sound/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/CVS/Root	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/sound/Kconfig linux-2.6.17/sound/Kconfig
--- linux-2.6.17-vanilla/sound/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/sound/Kconfig	2006-07-12 16:54:27.000000000 +0000
@@ -62,6 +62,8 @@
 
 source "sound/mips/Kconfig"
 
+source "sound/sh/Kconfig"
+
 # the following will depenend on the order of config.
 # here assuming USB is defined before ALSA
 source "sound/usb/Kconfig"
diff -ruN linux-2.6.17-vanilla/sound/Makefile linux-2.6.17/sound/Makefile
--- linux-2.6.17-vanilla/sound/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/sound/Makefile	2006-07-12 16:54:27.000000000 +0000
@@ -4,7 +4,7 @@
 obj-$(CONFIG_SOUND) += soundcore.o
 obj-$(CONFIG_SOUND_PRIME) += oss/
 obj-$(CONFIG_DMASOUND) += oss/
-obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ synth/ usb/ sparc/ parisc/ pcmcia/ mips/
+obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ synth/ usb/ sparc/ parisc/ pcmcia/ mips/ sh/
 
 ifeq ($(CONFIG_SND),y)
   obj-y += last.o
diff -ruN linux-2.6.17-vanilla/sound/oss/CVS/Entries linux-2.6.17/sound/oss/CVS/Entries
--- linux-2.6.17-vanilla/sound/oss/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/oss/CVS/Entries	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,7 @@
+/Makefile/1.7/Mon Aug 29 21:01:20 2005/-ko/
+/voyagergx_8051.c/1.2/Sat Jun 26 15:29:38 2004/-ko/
+/voyagergx_sound.c/1.4/Fri Dec 23 08:25:06 2005/-ko/
+/voyagergx_sound.h/1.1/Wed Apr 21 00:09:21 2004/-ko/
+/Kconfig/1.11/Wed Jul  5 14:52:00 2006/-ko/
+/sh_dac_audio.c/1.7/Wed Jul  5 14:52:00 2006/-ko/
+D
diff -ruN linux-2.6.17-vanilla/sound/oss/CVS/Repository linux-2.6.17/sound/oss/CVS/Repository
--- linux-2.6.17-vanilla/sound/oss/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/oss/CVS/Repository	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+linux/sound/oss
diff -ruN linux-2.6.17-vanilla/sound/oss/CVS/Root linux-2.6.17/sound/oss/CVS/Root
--- linux-2.6.17-vanilla/sound/oss/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/oss/CVS/Root	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/sound/oss/Kconfig linux-2.6.17/sound/oss/Kconfig
--- linux-2.6.17-vanilla/sound/oss/Kconfig	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/sound/oss/Kconfig	2006-07-12 16:54:27.000000000 +0000
@@ -833,6 +833,12 @@
 	tristate "XpressAudio Sound Blaster emulation"
 	depends on SOUND_SB
 
+config SOUND_VOYAGERGX
+	tristate "VoyagerGX/SH4 AC97 support"
+	depends on SOUND_PRIME!=n && SOUND && SH_RTS7751R2D
+	help
+	  Say Y or M if you have a VoyagerGX sound audio.
+
 config SOUND_SH_DAC_AUDIO
 	tristate "SuperH DAC audio support"
 	depends on SOUND_PRIME && CPU_SH3
diff -ruN linux-2.6.17-vanilla/sound/oss/Makefile linux-2.6.17/sound/oss/Makefile
--- linux-2.6.17-vanilla/sound/oss/Makefile	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/sound/oss/Makefile	2006-07-12 16:54:27.000000000 +0000
@@ -82,6 +82,7 @@
 
 obj-$(CONFIG_SOUND_AD1980)	+= ac97_plugin_ad1980.o ac97_codec.o
 obj-$(CONFIG_SOUND_WM97XX)	+= ac97_plugin_wm97xx.o
+obj-$(CONFIG_SOUND_VOYAGERGX)	+= voyagergx_sound.o voyagergx_8051.o ac97_codec.o
 
 ifeq ($(CONFIG_MIDI_EMU10K1),y)
   obj-$(CONFIG_SOUND_EMU10K1)	+= sound.o
diff -ruN linux-2.6.17-vanilla/sound/oss/sh_dac_audio.c linux-2.6.17/sound/oss/sh_dac_audio.c
--- linux-2.6.17-vanilla/sound/oss/sh_dac_audio.c	2006-06-18 01:49:35.000000000 +0000
+++ linux-2.6.17/sound/oss/sh_dac_audio.c	2006-07-12 16:54:27.000000000 +0000
@@ -1,3 +1,14 @@
+/*
+ * sound/oss/sh_dac_audio.c
+ *
+ * SH DAC based sound :(
+ *
+ *  Copyright (C) 2004,2005  Andriy Skulysh
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
 #include <linux/config.h>
 #include <linux/module.h>
 #include <linux/init.h>
@@ -7,18 +18,17 @@
 #include <linux/fs.h>
 #include <linux/sound.h>
 #include <linux/soundcard.h>
+#include <linux/interrupt.h>
 #include <asm/io.h>
 #include <asm/uaccess.h>
 #include <asm/irq.h>
 #include <asm/delay.h>
-#include <linux/interrupt.h>
-
+#include <asm/clock.h>
 #include <asm/cpu/dac.h>
-
-#ifdef MACH_HP600
+#include <asm/cpu/timer.h>
+#include <asm/machvec.h>
 #include <asm/hp6xx/hp6xx.h>
-#include <asm/hd64461/hd64461.h>
-#endif
+#include <asm/hd64461.h>
 
 #define MODNAME "sh_dac_audio"
 
@@ -27,11 +37,6 @@
 #define TMU1_TCR_INIT	0x0020	/* Clock/4, rising edge; interrupt on */
 #define TMU1_TSTR_INIT  0x02	/* Bit to turn on TMU1 */
 
-#define TMU_TSTR	0xfffffe92
-#define TMU1_TCOR	0xfffffea0
-#define TMU1_TCNT	0xfffffea4
-#define TMU1_TCR	0xfffffea8
-
 #define BUFFER_SIZE 48000
 
 static int rate;
@@ -72,34 +77,37 @@
 
 static void dac_audio_start(void)
 {
-#ifdef MACH_HP600
-	u16 v;
-	v = inw(HD64461_GPADR);
-	v &= ~HD64461_GPADR_SPEAKER;
-	outw(v, HD64461_GPADR);
-#endif
+	if (mach_is_hp6xx()) {
+		u16 v = inw(HD64461_GPADR);
+		v &= ~HD64461_GPADR_SPEAKER;
+		outw(v, HD64461_GPADR);
+	}
+
 	sh_dac_enable(CONFIG_SOUND_SH_DAC_AUDIO_CHANNEL);
 	ctrl_outw(TMU1_TCR_INIT, TMU1_TCR);
 }
 static void dac_audio_stop(void)
 {
-#ifdef MACH_HP600
-	u16 v;
-#endif
 	dac_audio_stop_timer();
-#ifdef MACH_HP600
-	v = inw(HD64461_GPADR);
-	v |= HD64461_GPADR_SPEAKER;
-	outw(v, HD64461_GPADR);
-#endif
+
+	if (mach_is_hp6xx()) {
+		u16 v = inw(HD64461_GPADR);
+		v |= HD64461_GPADR_SPEAKER;
+		outw(v, HD64461_GPADR);
+	}
+
+ 	sh_dac_output(0, CONFIG_SOUND_SH_DAC_AUDIO_CHANNEL);
 	sh_dac_disable(CONFIG_SOUND_SH_DAC_AUDIO_CHANNEL);
 }
 
 static void dac_audio_set_rate(void)
 {
 	unsigned long interval;
+ 	struct clk *clk;
 
-	interval = (current_cpu_data.module_clock / 4) / rate;
+ 	clk = clk_get("module_clk");
+ 	interval = (clk_get_rate(clk) / 4) / rate;
+ 	clk_put(clk);
 	ctrl_outl(interval, TMU1_TCOR);
 	ctrl_outl(interval, TMU1_TCNT);
 }
diff -ruN linux-2.6.17-vanilla/sound/oss/voyagergx_8051.c linux-2.6.17/sound/oss/voyagergx_8051.c
--- linux-2.6.17-vanilla/sound/oss/voyagergx_8051.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/oss/voyagergx_8051.c	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,204 @@
+#include <linux/module.h>
+#include <linux/delay.h>
+#include <asm/rts7751r2d/voyagergx_reg.h>
+#include "voyagergx_sound.h"
+
+#define DELAY_8051	300000
+
+
+static	unsigned char	code_8051[] = {
+	0x02,0x01,0x00,0x02,0x07,0x73,0x90,0x08,0xae,0xe0,0xfa,0xa3,0xe0,0x8a,0x82,0xf5,
+	0x83,0xe0,0x60,0x13,0x90,0x08,0xa2,0xe4,0xf0,0xa3,0x74,0x30,0xf0,0x78,0x19,0x76,
+	0x01,0x78,0x1e,0x76,0x01,0x80,0x04,0x78,0x19,0x76,0x00,0x90,0x3f,0xf2,0x74,0x01,
+	0xf0,0xa3,0xe4,0xf0,0x22,0xff,0xff,0xff,0xff,0xff,0xff,0x02,0x06,0x83,0xff,0xff,
+	0xff,0xff,0xff,0x02,0x04,0xe3,0x90,0x3f,0xf2,0xe4,0xf0,0xa3,0xf0,0x90,0x3f,0xf0,
+	0xe0,0x70,0x02,0xa3,0xe0,0x70,0x06,0x12,0x08,0x8d,0x02,0x00,0xd4,0x90,0x3f,0xf0,
+	0xc3,0xe0,0x94,0x01,0x70,0x04,0xa3,0xe0,0x94,0x00,0x70,0x06,0x12,0x00,0xd9,0x02,
+	0x00,0xd4,0x90,0x3f,0xf0,0xc3,0xe0,0x94,0x02,0x70,0x04,0xa3,0xe0,0x94,0x00,0x70,
+	0x05,0x12,0x07,0xf3,0x80,0x4e,0x90,0x3f,0xf0,0xc3,0xe0,0x94,0x03,0x70,0x04,0xa3,
+	0xe0,0x94,0x00,0x70,0x05,0x12,0x08,0x1a,0x80,0x3a,0x90,0x3f,0xf0,0xc3,0xe0,0x94,
+	0x04,0x70,0x04,0xa3,0xe0,0x94,0x00,0x70,0x05,0x12,0x08,0x41,0x80,0x26,0x90,0x3f,
+	0xf0,0xc3,0xe0,0x94,0x05,0x70,0x04,0xa3,0xe0,0x94,0x00,0x70,0x05,0x12,0x08,0x7c,
+	0x80,0x12,0x90,0x3f,0xf0,0xc3,0xe0,0x94,0x07,0x70,0x04,0xa3,0xe0,0x94,0x00,0x70,
+	0x03,0x12,0x00,0x06,0x78,0x1b,0x76,0x00,0x22,0x90,0x3f,0xf4,0x7a,0x04,0x78,0x08,
+	0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90,0x91,0x04,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,
+	0x08,0xda,0xfa,0x12,0x06,0xd6,0x90,0x3f,0xf2,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x22,
+	0x75,0x81,0x2b,0x75,0x0c,0xc0,0x75,0x0d,0x08,0x75,0x0e,0xff,0x75,0x0f,0x2f,0xc2,
+	0xd3,0xc2,0xd4,0x12,0x03,0x4a,0x12,0x03,0xb6,0x12,0x03,0x2c,0x12,0x03,0x0e,0x12,
+	0x02,0xac,0x12,0x07,0xcb,0x12,0x01,0x2a,0x01,0x00,0x90,0x08,0xc1,0x85,0x82,0x0a,
+	0x85,0x83,0x0b,0x74,0x98,0xf5,0x82,0xf5,0x08,0x74,0x02,0xf5,0x83,0xf5,0x09,0x7a,
+	0x14,0xe4,0x93,0xa3,0x85,0x82,0x08,0x85,0x83,0x09,0x85,0x0a,0x82,0x85,0x0b,0x83,
+	0xf0,0xa3,0x85,0x83,0x0b,0x85,0x82,0x0a,0x85,0x09,0x83,0x85,0x08,0x82,0xda,0xe1,
+	0x90,0x08,0xd5,0xe4,0xf0,0xa3,0xf0,0x90,0x08,0xd7,0xe4,0xf0,0xa3,0xf0,0x90,0x08,
+	0xd9,0xe4,0xf0,0xa3,0xf0,0x90,0x08,0xdb,0xe4,0xf0,0xa3,0xf0,0x78,0x18,0x76,0x00,
+	0x78,0x1f,0x76,0x00,0x90,0x91,0x80,0x74,0x03,0xf0,0x90,0x08,0xc1,0x7a,0x04,0x78,
+	0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90,0x91,0x00,0x7a,0x04,0x78,0x08,0xe6,0xf0,
+	0xa3,0x08,0xda,0xfa,0x90,0x08,0xc5,0x7a,0x04,0x78,0x08,0xe0,0xf6,0xa3,0x08,0xda,
+	0xfa,0x90,0x91,0x04,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x90,0x08,
+	0xc9,0x7a,0x04,0x78,0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90,0x91,0x08,0x7a,0x04,
+	0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x90,0x08,0xcd,0x7a,0x04,0x78,0x08,0xe0,
+	0xf6,0xa3,0x08,0xda,0xfa,0x90,0x91,0x0c,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,
+	0xda,0xfa,0x90,0x08,0xd1,0x7a,0x04,0x78,0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90,
+	0x91,0x10,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x90,0x91,0x40,0xe4,
+	0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x91,0x44,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,
+	0xa3,0xf0,0x90,0x91,0x48,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x43,0xa0,0x01,
+	0x90,0x08,0xdd,0xe4,0xf0,0xa3,0xf0,0x12,0x06,0x2f,0x90,0x08,0xdd,0x74,0xc8,0xf0,
+	0xa3,0xe4,0xf0,0x12,0x05,0xd0,0x90,0x91,0x80,0x74,0x01,0xf0,0x90,0x08,0xdd,0x74,
+	0xff,0xf0,0xa3,0xe4,0xf0,0x12,0x06,0x2f,0x90,0x08,0xdd,0x74,0x64,0xf0,0xa3,0xe4,
+	0xf0,0x12,0x05,0xd0,0x12,0x07,0xa1,0x90,0x08,0xdd,0x74,0xff,0xf0,0xa3,0xe4,0xf0,
+	0x12,0x06,0x2f,0x12,0x07,0xa1,0x12,0x07,0x28,0x12,0x07,0x28,0x78,0x1b,0xe6,0x60,
+	0x03,0x12,0x00,0x46,0x78,0x1e,0xe6,0x60,0x07,0x78,0x1e,0x76,0x00,0x12,0x08,0x9b,
+	0x80,0xea,0x90,0x91,0x80,0xe4,0xf0,0x22,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x00,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x14,0x70,0x04,
+	0x74,0x00,0x60,0x1e,0x90,0x08,0x68,0xa8,0x83,0xa9,0x82,0x90,0x08,0xa2,0xaa,0x83,
+	0xab,0x82,0x90,0x08,0xb6,0xac,0x83,0xad,0x82,0xc3,0xed,0x9b,0x70,0x28,0xec,0x9a,
+	0x70,0x24,0x74,0x0a,0x70,0x04,0x74,0x00,0x60,0x1b,0x90,0x08,0xc0,0xac,0x83,0xad,
+	0x82,0x90,0x08,0xb6,0xc3,0xed,0x95,0x82,0x70,0x05,0xec,0x95,0x83,0x60,0x06,0xe4,
+	0xf0,0xa3,0x02,0x02,0xe4,0x22,0x88,0x83,0x89,0x82,0xe4,0x93,0xa3,0xa8,0x83,0xa9,
+	0x82,0x8a,0x83,0x8b,0x82,0xf0,0xa3,0xaa,0x83,0xab,0x82,0x02,0x02,0xc9,0x74,0x00,
+	0x60,0x0d,0x90,0x00,0x00,0x79,0x00,0xfa,0xe4,0x93,0xf7,0xa3,0x09,0xda,0xf9,0x74,
+	0x13,0x60,0x08,0x78,0x18,0xfa,0xe4,0xf6,0x08,0xda,0xfc,0x22,0x74,0x00,0x60,0x0d,
+	0x90,0x00,0x00,0x79,0x00,0xfa,0xe4,0x93,0xf7,0xa3,0x09,0xda,0xf9,0x74,0x00,0x60,
+	0x08,0x78,0x00,0xfa,0xe4,0xf6,0x08,0xda,0xfc,0x22,0x74,0x00,0x60,0x35,0xfb,0x90,
+	0x00,0x00,0x74,0x00,0x75,0xf0,0x08,0x84,0x24,0x20,0xf8,0x7a,0x08,0xe5,0xf0,0x60,
+	0x07,0xe6,0x03,0x1a,0xd5,0xf0,0xfb,0xf6,0xeb,0x60,0x0d,0x1b,0xe4,0x93,0xa3,0xa2,
+	0xe0,0xe6,0x13,0xf6,0xda,0xf2,0x80,0x05,0xe6,0x03,0xda,0xfd,0xf6,0x08,0x7a,0x08,
+	0xeb,0x70,0xe5,0x74,0x00,0x60,0x2e,0xfb,0x74,0x00,0x75,0xf0,0x08,0x84,0x24,0x20,
+	0xf8,0x7a,0x08,0xe5,0xf0,0x60,0x07,0xe6,0x03,0x1a,0xd5,0xf0,0xfb,0xf6,0xeb,0x60,
+	0x09,0x1b,0xc3,0xe6,0x13,0xf6,0xda,0xf6,0x80,0x05,0xe6,0x03,0xda,0xfd,0xf6,0x08,
+	0x7a,0x08,0xeb,0x70,0xe9,0x22,0x74,0x00,0x60,0x0d,0x90,0x00,0x00,0x79,0x00,0xfa,
+	0xe4,0x93,0xf7,0xa3,0x09,0xda,0xf9,0x74,0x00,0x60,0x08,0x78,0x00,0xfa,0xe4,0xf6,
+	0x08,0xda,0xfc,0x22,0x90,0x08,0xdd,0xe4,0xf0,0xa3,0xf0,0x90,0x08,0xdd,0xc3,0xe0,
+	0x94,0x40,0xa3,0xe0,0x94,0x00,0x30,0xd2,0x04,0xb2,0xe7,0xd2,0xe0,0x20,0xe7,0x03,
+	0x02,0x04,0xdf,0x90,0x08,0xdd,0xe0,0xf5,0x08,0xa3,0xe0,0xf5,0x09,0x7a,0x0c,0xe5,
+	0x08,0xc3,0x33,0xf5,0x08,0xe5,0x09,0x33,0xf5,0x09,0xda,0xf3,0xe5,0x09,0x33,0xe4,
+	0x50,0x01,0x14,0xf5,0x0a,0xf5,0x0b,0xe5,0x08,0x44,0x00,0xf5,0x08,0xe5,0x09,0x44,
+	0x00,0xf5,0x09,0xe5,0x0a,0x44,0x08,0xf5,0x0a,0xe5,0x0b,0x44,0x00,0xf5,0x0b,0x90,
+	0x08,0xe1,0xe5,0x08,0xf0,0xa3,0xe5,0x09,0xf0,0x90,0x08,0xe1,0xe0,0xf5,0x08,0xa3,
+	0xe0,0xf5,0x09,0x33,0xe4,0x50,0x01,0x14,0xf5,0x0a,0xf5,0x0b,0x90,0x91,0x04,0x7a,
+	0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x90,0x08,0xdf,0xe4,0xf0,0xa3,0xf0,
+	0x90,0x08,0xdf,0xc3,0xe0,0x94,0x80,0xa3,0xe0,0x94,0x38,0x30,0xd2,0x04,0xb2,0xe7,
+	0xd2,0xe0,0x30,0xe7,0x5b,0x90,0x91,0x40,0xe0,0x54,0x00,0xf5,0x08,0xa3,0xe0,0x54,
+	0xa0,0xf5,0x09,0xa3,0xe0,0x54,0x00,0xf5,0x0a,0xa3,0xe0,0x54,0x00,0xf5,0x0b,0x78,
+	0x08,0xc3,0xe6,0x94,0x00,0x70,0x10,0x08,0xe6,0x94,0xa0,0x70,0x0a,0x08,0xe6,0x94,
+	0x00,0x70,0x04,0x08,0xe6,0x94,0x00,0x70,0x19,0x90,0x91,0x48,0x7a,0x04,0x78,0x08,
+	0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90,0x08,0xe1,0xe5,0x08,0xf0,0xa3,0xe5,0x09,0xf0,
+	0x80,0x0e,0x90,0x08,0xdf,0xe0,0x24,0x01,0xf0,0xa3,0xe0,0x34,0x00,0xf0,0x80,0x90,
+	0x90,0x08,0xdd,0xe0,0x24,0x01,0xf0,0xa3,0xe0,0x34,0x00,0xf0,0x02,0x03,0xdb,0x12,
+	0x06,0xd6,0x22,0xc0,0xe0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0xc0,0x08,0xc0,0x09,0xc0,
+	0x0a,0xc0,0x0b,0xc2,0xd3,0xd2,0xd4,0xc2,0xaf,0x53,0xa8,0xfe,0x53,0xe8,0xf9,0x78,
+	0x19,0xe6,0x70,0x03,0x02,0x05,0xac,0x90,0x08,0xbe,0xc3,0xe0,0x94,0x01,0x70,0x04,
+	0xa3,0xe0,0x94,0x00,0x60,0x03,0x02,0x05,0xac,0x78,0x1f,0xe6,0x70,0x37,0x90,0x08,
+	0xa4,0xe0,0xfa,0xa3,0xe0,0x8a,0x82,0xf5,0x83,0xe0,0xf5,0x08,0xa3,0xe0,0xf5,0x09,
+	0x33,0xe4,0x50,0x01,0x14,0xf5,0x0a,0xf5,0x0b,0x90,0x91,0x10,0x7a,0x04,0x78,0x08,
+	0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x90,0x91,0x0c,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,
+	0x08,0xda,0xfa,0x80,0x54,0x90,0x08,0xa4,0xe0,0xfa,0xa3,0xe0,0x8a,0x82,0xf5,0x83,
+	0xe0,0xf5,0x08,0xa3,0xe0,0xf5,0x09,0x33,0xe4,0x50,0x01,0x14,0xf5,0x0a,0xf5,0x0b,
+	0x90,0x91,0x0c,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x90,0x08,0xa4,
+	0xe0,0x24,0x02,0xfa,0xa3,0xe0,0x34,0x00,0xf5,0x83,0x8a,0x82,0xe0,0xf5,0x08,0xa3,
+	0xe0,0xf5,0x09,0x33,0xe4,0x50,0x01,0x14,0xf5,0x0a,0xf5,0x0b,0x90,0x91,0x10,0x7a,
+	0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x12,0x08,0x9b,0x90,0x91,0x81,0xe0,
+	0x90,0x00,0x39,0xf0,0x43,0xe8,0x06,0x43,0xf8,0x04,0x43,0xa8,0x01,0xd2,0xaf,0xd0,
+	0x0b,0xd0,0x0a,0xd0,0x09,0xd0,0x08,0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xe0,0x32,
+	0x90,0x08,0xdf,0xe4,0xf0,0xa3,0xf0,0x90,0x08,0xdf,0xc3,0xe0,0x94,0xe8,0xa3,0xe0,
+	0x94,0x03,0x30,0xd2,0x04,0xb2,0xe7,0xd2,0xe0,0x30,0xe7,0x42,0x90,0x08,0xe1,0xe4,
+	0xf0,0xa3,0xf0,0x90,0x08,0xdd,0xe0,0xf5,0x08,0xa3,0xe0,0xf5,0x09,0x90,0x08,0xe1,
+	0xc3,0xe0,0x95,0x08,0xa3,0xe0,0x95,0x09,0x30,0xd2,0x04,0xb2,0xe7,0xd2,0xe0,0x30,
+	0xe7,0x0e,0x90,0x08,0xe1,0xe0,0x24,0x01,0xf0,0xa3,0xe0,0x34,0x00,0xf0,0x80,0xd3,
+	0x90,0x08,0xdf,0xe0,0x24,0x01,0xf0,0xa3,0xe0,0x34,0x00,0xf0,0x80,0xa9,0x22,0x90,
+	0x08,0xe1,0xe4,0xf0,0xa3,0x74,0x30,0xf0,0x90,0x08,0xdf,0xe4,0xf0,0xa3,0xf0,0x90,
+	0x08,0xdf,0xc3,0xe0,0x94,0x00,0xa3,0xe0,0x94,0x06,0x30,0xd2,0x04,0xb2,0xe7,0xd2,
+	0xe0,0x30,0xe7,0x2e,0x90,0x08,0xdd,0xe0,0x90,0x08,0xe1,0xc0,0xe0,0xe0,0xfa,0xa3,
+	0xe0,0x8a,0x82,0xf5,0x83,0xd0,0xe0,0xf0,0x90,0x08,0xe1,0xe0,0x24,0x01,0xf0,0xa3,
+	0xe0,0x34,0x00,0xf0,0x90,0x08,0xdf,0xe0,0x24,0x01,0xf0,0xa3,0xe0,0x34,0x00,0xf0,
+	0x80,0xbd,0x22,0xc0,0xe0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0xc0,0x08,0xc0,0x09,0xc0,
+	0x0a,0xc0,0x0b,0xc2,0xd3,0xd2,0xd4,0xc2,0xaf,0x53,0xa8,0xfe,0x53,0xe8,0xf9,0x78,
+	0x1b,0x76,0x01,0x90,0x90,0x0c,0x7a,0x04,0x78,0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa,
+	0x90,0x00,0x35,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x43,0xe8,0x06,
+	0x43,0xa8,0x01,0xd2,0xaf,0xd0,0x0b,0xd0,0x0a,0xd0,0x09,0xd0,0x08,0xd0,0xd0,0xd0,
+	0x83,0xd0,0x82,0xd0,0xe0,0x32,0x90,0x00,0x3e,0xe4,0xf0,0xa3,0xf0,0x90,0x00,0x3e,
+	0xc3,0xe0,0x94,0x80,0xa3,0xe0,0x94,0x38,0x30,0xd2,0x04,0xb2,0xe7,0xd2,0xe0,0x30,
+	0xe7,0x35,0x90,0x91,0x40,0xe0,0x54,0x00,0xf5,0x08,0xa3,0xe0,0x54,0x60,0xf5,0x09,
+	0xa3,0xe0,0x54,0x00,0xf5,0x0a,0xa3,0xe0,0x54,0x00,0xf5,0x0b,0x78,0x08,0x7a,0x04,
+	0xe6,0x70,0x03,0x08,0xda,0xfa,0x70,0x01,0x22,0x90,0x00,0x3e,0xe0,0x24,0x01,0xf0,
+	0xa3,0xe0,0x34,0x00,0xf0,0x80,0xb6,0x22,0x90,0x3f,0xf0,0x74,0x0f,0xf0,0xa3,0xe4,
+	0xf0,0x90,0x3f,0xf4,0xe4,0xf0,0xa3,0x74,0x60,0xf0,0xa3,0x74,0x0a,0xf0,0xa3,0xe4,
+	0xf0,0x90,0x3f,0xf8,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x12,0x00,0x46,0x90,
+	0x3f,0xf8,0xe0,0x54,0xf0,0xf5,0x08,0x7a,0x03,0x78,0x08,0xa3,0x08,0xe0,0x54,0x00,
+	0xf6,0xda,0xf8,0x78,0x08,0x7a,0x04,0xe6,0x70,0x03,0x08,0xda,0xfa,0x60,0x01,0x22,
+	0x80,0xb6,0x22,0xc0,0xe0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0xc2,0xd3,0xd2,0xd4,0xc2,
+	0xaf,0x53,0xa8,0xfe,0x53,0xe8,0xf9,0x90,0x08,0xbe,0x74,0x01,0xf0,0xa3,0xe4,0xf0,
+	0x43,0xe8,0x06,0x43,0xa8,0x01,0xd2,0xaf,0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xe0,
+	0x32,0x90,0x91,0x40,0xe0,0x54,0x00,0xf5,0x08,0xa3,0xe0,0x54,0x80,0xf5,0x09,0xa3,
+	0xe0,0x54,0x00,0xf5,0x0a,0xa3,0xe0,0x54,0x00,0xf5,0x0b,0x78,0x08,0x7a,0x04,0xe6,
+	0x70,0x03,0x08,0xda,0xfa,0x60,0x01,0x22,0x80,0xd7,0x22,0x90,0x08,0xbe,0xe4,0xf0,
+	0xa3,0xf0,0x90,0x08,0xb8,0xe4,0xf0,0xa3,0xf0,0x90,0x08,0xb6,0xe4,0xf0,0xa3,0xf0,
+	0x78,0x1e,0x76,0x00,0x75,0xa8,0x81,0x75,0xb8,0x01,0x75,0xe8,0x06,0x75,0xf8,0x04,
+	0xd2,0xaf,0x22,0x90,0x91,0x44,0x7a,0x04,0x78,0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa,
+	0x90,0x3f,0xf4,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x12,0x06,0xd6,
+	0x90,0x3f,0xf2,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x22,0x90,0x3f,0xf4,0x7a,0x04,0x78,
+	0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90,0x91,0x08,0x7a,0x04,0x78,0x08,0xe6,0xf0,
+	0xa3,0x08,0xda,0xfa,0x12,0x06,0xd6,0x90,0x3f,0xf2,0x74,0x01,0xf0,0xa3,0xe4,0xf0,
+	0x22,0x90,0x91,0x48,0x7a,0x04,0x78,0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90,0x3f,
+	0xf4,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x12,0x06,0xd6,0x90,0x3f,
+	0xf2,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x22,0x00,0x30,0x00,0x36,0x41,0x91,0x45,0x91,
+	0xf4,0x3f,0xf6,0x3f,0xf4,0x3f,0xf5,0x3f,0xf6,0x3f,0xf7,0x3f,0x90,0x3f,0xf4,0x78,
+	0x1f,0xe0,0xf6,0x90,0x3f,0xf2,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x22,0x78,0x1e,0x76,
+	0x01,0x90,0x3f,0xf2,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x22,0x53,0xa0,0xfe,0x43,0xa0,
+	0x01,0x22,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
+	0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
+};
+
+
+void init_8051(void)
+{
+	int	i,j;
+
+	*(volatile unsigned long *)(VOYAGER_8051_RESET) = 0x0000;
+	*(volatile unsigned long *)(VOYAGER_8051_SELECT) = 0x0011;
+	//8051 program write
+	for(i=0;i<sizeof(code_8051);i++) {
+		*(volatile unsigned char *)(VOYAGER_8051_BASE+i) = code_8051[i];
+	}
+	*(volatile unsigned long *)(VOYAGER_8051_RESET) = 0x0001;
+	for(i=0;i<DELAY_8051;i++) {
+		for(j=0;j<200;j++);
+	}
+}
+
+
+int command_8051(int com,int *data,int *data2)
+{
+	int	ret,i,j;
+
+	j = 0;
+	do {
+		*(volatile unsigned short *)(VOYAGER_8051_COMMAND) = com;
+		*(volatile unsigned short *)(VOYAGER_8051_STATUS) = 0;
+		*(volatile unsigned long *)(VOYAGER_8051_DATA) = *data;
+		*(volatile unsigned long *)(VOYAGER_8051_DATA+4) = *data2;
+		*(volatile unsigned long *)(VOYAGER_8051_CPU_INT) = 0xff;
+		for(i=0;i<DELAY_8051;i++) {
+			ret = *(volatile unsigned short *)(VOYAGER_8051_STATUS);
+			if(ret != 0) {
+				break;
+			}
+		}
+		j++;
+		if(j > 100) {
+			*data = 0;
+			*data2 = 0;
+			printk("8051 command process error\n");
+			return(-1);
+		}
+	} while(ret == 0);
+	*data = *(volatile unsigned long *)(VOYAGER_8051_DATA);
+	*data2 = *(volatile unsigned long *)(VOYAGER_8051_DATA+4);
+
+	return(ret);
+}
+
+EXPORT_SYMBOL(init_8051);
+EXPORT_SYMBOL(command_8051);
+
diff -ruN linux-2.6.17-vanilla/sound/oss/voyagergx_sound.c linux-2.6.17/sound/oss/voyagergx_sound.c
--- linux-2.6.17-vanilla/sound/oss/voyagergx_sound.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/oss/voyagergx_sound.c	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,1122 @@
+/*
+ *  linux/drivers/sound/voyagergx_sound.c -- voyager sound driver
+ *
+ *     Copyright (C) 2003 Renesas Technology Sales Co.,Ltd.
+ *     Copyright (C) 2003 Atom Create Engineering Co.,Ltd.
+ *     Anthor : Atom Create Engineering Co.,Ltd.
+ *                   Kenichi Sakuma
+ *
+ *  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.
+ *
+ * 1.00
+ *  - initial version (ks)
+ * 1.01
+ *  - Kernel 2.6 correspondence
+ */
+#include <linux/version.h>
+#include <linux/module.h>
+#include <linux/string.h>
+#include <linux/ioport.h>
+#include <linux/sched.h>
+#include <linux/delay.h>
+#include <linux/sound.h>
+#include <linux/slab.h>
+#include <linux/soundcard.h>
+#include <linux/init.h>
+#include <linux/poll.h>
+#include <linux/pci.h>
+#include <linux/bitops.h>
+#include <linux/proc_fs.h>
+#include <linux/spinlock.h>
+#include <linux/smp_lock.h>
+#include <linux/ac97_codec.h>
+#include <linux/interrupt.h>
+#include <asm/io.h>
+#include <asm/uaccess.h>
+#include <asm/hardirq.h>
+#include <asm/rts7751r2d/voyagergx_reg.h>
+#include <asm/irq.h>
+#include "voyagergx_sound.h"
+
+static DEFINE_SPINLOCK(voyagergx_sound_lock);
+
+/* --------------------------------------------------------------------- */
+#undef OSS_DOCUMENTED_MIXER_SEMANTICS
+
+#define VOYAGERGX_MODULE_NAME "Voyagergx audio"
+#define PFX VOYAGERGX_MODULE_NAME
+
+#define err(format, arg...) printk(KERN_ERR PFX ": " format "\n" , ## arg)
+#define info(format, arg...) printk(KERN_INFO PFX ": " format "\n" , ## arg)
+//#define info(format, arg...) printk(": " format "\n" , ## arg)
+//#define warn(format, arg...) printk(KERN_WARNING PFX ": " format "\n" , ## arg)
+
+// buffer size
+#define	VOYAGER_SOUND_SIZE	0x100000
+// data buffer 1 - vram upper
+#define	VOYAGER_SOUND_BUF1	0xb0200000
+// data buffer 2 - vram upper
+#define	VOYAGER_SOUND_BUF2	VOYAGER_SOUND_BUF1+VOYAGER_SOUND_SIZE
+//WAIT TIME OUT
+//#define	WAIT_TIMEOUT	((VOYAGER_SOUND_SIZE / 48000) * HZ + 10)
+#define	WAIT_TIMEOUT	1100
+
+DECLARE_WAIT_QUEUE_HEAD(int_wq);
+
+/* Boot options */
+static int      vra = 0;	// 0 = no VRA, 1 = use VRA if codec supports it
+MODULE_PARM(vra, "i");
+MODULE_PARM_DESC(vra, "if 1 use VRA if codec supports it");
+
+struct voyager_setting {
+	int             ch;
+	int		fmt;
+	int		rate;
+} setting;
+
+int	init_8051(void);
+int	command_8051(int com,int *data,int *data2);
+
+// DMA used channel - set DMA used channel(fixed at 0)
+static	int	sh7751_dmasound_play_irq = 0;
+// buffer 1 used flag - transfersize is set when used
+static	int	buff_flg1 = 0;
+// buffer 2 used flag - transfersize is set when used
+static	int	buff_flg2 = 0;
+// buffer judgement flag - which buffer is used by DMA
+static	int	proc_flg = 0;
+// first judgement flag - data transfer is first time?
+static	int	first_flg = 0;
+// last judgement flag - data transfer is last?
+static	int	last_flg = 0;
+// interrupt flag - 0 cleard if interrupt occured
+static	int	wari_flg;
+// break flag - to cancel or done of sound play
+static	int	break_flg;
+// play cancel flag - performance problem or end of play
+static	int	abnml_flg;
+// number of write buffer - which buffer will be used
+static	int	next_write;
+// remained buffer size
+static	int	next_size;
+// DMA transfer size
+static	int	dma_req[2];
+// DMA address table - address per channel
+static	int	dma_tbl[] = {
+	0xffa00000, 0xffa00010, 0xffa00020, 0xffa00030,
+	0xffa00040, 0xffa00050, 0xffa00060, 0xffa00070
+};
+
+/* --------------------------------------------------------------------- */
+// DMA start
+// enable selected dma channel
+void	dma2_start(int irq)
+{
+int	base;
+
+	base = dma_tbl[irq];
+	*(volatile unsigned long *)(base + 0xc) |= 0x00000001;
+}
+
+
+// DMA stop
+// disable selected dma channel
+void	dma2_stop(int irq)
+{
+int	base;
+
+	base = dma_tbl[irq];
+	*(volatile unsigned long *)(base + 0xc) &= 0xfffffffc;
+}
+
+
+// prepare DMA transfer
+// set transfer src address and transfer size
+void	dma2_queue_buffer(int irq,int src, int cnt)
+{
+int	base;
+
+	base = dma_tbl[irq];
+	*(volatile unsigned long *)(base + 0x0) = src & 0x1fffffff;
+	// change transfer unit for mono or stereo
+	if(setting.ch == 1) {
+		// 4 byte for stereo
+		*(volatile unsigned long *)(base + 0x8) = cnt;
+	}
+	else {
+		// 2 byte for mono
+		*(volatile unsigned long *)(base + 0x8) = cnt * 2;
+	}
+}
+
+
+// DMA registration
+// register DMA interrupt
+int	request_dma2(int irq,char *str,irqreturn_t (*callback)(int, void *, struct pt_regs *))
+{
+int	ret;
+
+	make_ipr_irq(DMTE0_IRQ+irq, DMA_IPR_ADDR, DMA_IPR_POS,DMA_PRIORITY);
+	ret = request_irq(DMTE0_IRQ+irq,callback,SA_INTERRUPT,str,0);
+	return(ret);
+}
+
+
+// preparation for DMA use
+// set transfer dst address and transfer unit, transfer condition, etc
+void	dma2_set_device(int irq)
+{
+int	base;
+
+	//DMA initialize
+	base = dma_tbl[irq];
+	*(volatile unsigned long *)(base + 0x0) = 0;
+	*(volatile unsigned long *)(base + 0x4) = VOYAGER_8051_FIFO & 0x1fffffff;
+	*(volatile unsigned long *)(base + 0x8) = 0;
+	// change transfer unit for mono or stereo
+	if(setting.ch == 1) {
+		// 4 byte for stereo
+		*(volatile unsigned long *)(base + 0xc) = 0xb1034;
+	}
+	else {
+		// 2 byte for mono
+		*(volatile unsigned long *)(base + 0xc) = 0xb1024;
+	}
+	*(volatile unsigned long *)(base + 0x40) = 0x01;
+}
+
+/* --------------------------------------------------------------------- */
+
+
+// cancel sound play(done)
+//
+static	void	voy_break(void)
+{
+int	data,data2;
+
+	// cancel for 8051
+	data = 0x00;
+	command_8051(0x07,&data,&data2);
+	// stop DMA
+	dma2_stop(sh7751_dmasound_play_irq);
+	break_flg = 1;
+}
+/* --------------------------------------------------------------------- */
+// ISR for DMA
+// called after DMA transfer is done
+// next request is issued here in the case of sequential transfer
+static	irqreturn_t do_irq(int irq, void *dev_id, struct pt_regs *regs)
+{
+	spin_lock_irq(&voyagergx_sound_lock);
+
+	// stop DMA
+	dma2_stop(sh7751_dmasound_play_irq);
+	// clear interrupt flag
+	wari_flg = 0;
+	// play of buffer 1 is done?
+	if((proc_flg == 1)&&(buff_flg1 == 1)) {
+		// buffer 1 is free
+		buff_flg1 = 0;
+		// buffer 2 is being played
+		proc_flg = 2;
+		// next data is ready?
+		if(buff_flg2 == 1) {
+			// request DMA
+			dma2_queue_buffer(sh7751_dmasound_play_irq,VOYAGER_SOUND_BUF2,dma_req[1]);
+			dma2_start(sh7751_dmasound_play_irq);
+		}
+		else {
+			// set stop flag if no data
+			abnml_flg = 1;
+		}
+	}
+	// play of buffer 2 is done?
+	else if((proc_flg == 2)&&(buff_flg2 == 1)) {
+		// buffer 2 is free
+		buff_flg2 = 0;
+		// buffer 1 is being played
+		proc_flg = 1;
+		// next data is ready?
+		if(buff_flg1 == 1) {
+			// request DMA
+			dma2_queue_buffer(sh7751_dmasound_play_irq,VOYAGER_SOUND_BUF1,dma_req[0]);
+			dma2_start(sh7751_dmasound_play_irq);
+		}
+		else {
+			// set stop flag if no data
+			abnml_flg = 1;
+		}
+	}
+	// play remained data(last data or small one)
+	else {
+		//last transfer is done
+		last_flg = 0;
+	}
+	//wake up sleeping write routine
+	wake_up_interruptible(&int_wq);
+	spin_unlock_irq(&voyagergx_sound_lock);
+
+	return IRQ_HANDLED;
+}
+
+/* --------------------------------------------------------------------- */
+// 32 bit memory read
+static inline u32 voyager_readl(u32 addr)
+{
+	return *(volatile unsigned long *)(addr);
+}
+
+// 32 bit memory write
+static inline void voyager_writel(u32 val,u32 addr)
+{
+	*(volatile unsigned long *)(addr) = val;
+}
+
+/* --------------------------------------------------------------------- */
+
+struct voyagergx_state {
+	/* soundcore stuff */
+	int             dev_audio;
+
+	struct ac97_codec codec;
+	unsigned        codec_base_caps;	// AC'97 reg 00h, "Reset Register"
+	unsigned        codec_ext_caps;		// AC'97 reg 28h, "Extended Audio ID"
+	int             no_vra;			// do not use VRA
+
+	spinlock_t      lock;
+	struct semaphore open_sem;
+	mode_t          open_mode;
+
+} voyagergx_state;
+
+
+/* --------------------------------------------------------------------- */
+// read codec
+static	u16 rdcodec(struct ac97_codec *codec, u8 addr)
+{
+	u32             cmd,ret;
+	u16             data;
+
+
+	// set register address for reading
+	cmd = (u32) (addr & AC97C_INDEX_MASK) << 12;
+	cmd |= AC97C_READ;	// read command
+	command_8051(1,&cmd,&ret);
+	mdelay(1);
+	// read register
+	command_8051(4,&cmd,&ret);
+	mdelay(1);
+	// convert it as it was shifted
+	data = (cmd >> 4) & 0xffff;
+	return data;
+}
+
+
+// write codec
+static	void wrcodec(struct ac97_codec *codec, u8 addr, u16 data)
+{
+	u32             cmd,ret;
+	int	i;
+
+	//  reset?
+	if(addr == 0) {
+		// try again if failed
+		for(i=0;i<10;i++) {
+			// set write data
+			cmd = (u32) data << AC97C_WD_BIT;	// OR in the data word
+			command_8051(3,&cmd,&ret);
+			// set write address
+			cmd = (u32) (addr & AC97C_INDEX_MASK) << 12;
+			cmd &= ~AC97C_READ;	// write command
+			command_8051(1,&cmd,&ret);
+			// check whether reset succeed
+			ret = rdcodec(codec,0);
+			if((ret & 0x8000) == 0) {
+				break;
+			}
+		}
+	}
+	// instead of reset
+	else {
+		// set write data
+		cmd = (u32) data << AC97C_WD_BIT;	// OR in the data word
+		command_8051(3,&cmd,&ret);
+		// set write address
+		cmd = (u32) (addr & AC97C_INDEX_MASK) << 12;
+		cmd &= ~AC97C_READ;	// write command
+		command_8051(1,&cmd,&ret);
+		mdelay(1);
+		// read variables of volume for preservation
+		rdcodec(codec,2);
+		rdcodec(codec,24);
+		rdcodec(codec,22);
+		rdcodec(codec,0x2c);
+	}
+}
+
+/* --------------------------------------------------------------------- */
+
+static loff_t voyagergx_llseek(struct file *file, loff_t offset, int origin)
+{
+	return -ESPIPE;
+}
+
+
+static int voyagergx_open_mixdev(struct inode *inode, struct file *file)
+{
+	file->private_data = &voyagergx_state;
+	return 0;
+}
+
+static int voyagergx_release_mixdev(struct inode *inode, struct file *file)
+{
+	return 0;
+}
+
+static int mixdev_ioctl(struct ac97_codec *codec, unsigned int cmd,
+                        unsigned long arg)
+{
+	return codec->mixer_ioctl(codec, cmd, arg);
+}
+
+static int voyagergx_ioctl_mixdev(struct inode *inode, struct file *file,
+			       unsigned int cmd, unsigned long arg)
+{
+	struct voyagergx_state *s = (struct voyagergx_state *)file->private_data;
+	struct ac97_codec *codec = &s->codec;
+
+	return mixdev_ioctl(codec, cmd, arg);
+}
+
+static /*const */ struct file_operations voyagergx_mixer_fops = {
+	owner:THIS_MODULE,
+	llseek:voyagergx_llseek,
+	ioctl:voyagergx_ioctl_mixdev,
+	open:voyagergx_open_mixdev,
+	release:voyagergx_release_mixdev,
+};
+
+/* --------------------------------------------------------------------- */
+// read routine
+// record(sampling) should be used originally
+// do nothing without record(sampling) now
+static ssize_t voyagergx_read(struct file *file, char *buffer,
+			   size_t count, loff_t *ppos)
+{
+	if (ppos != &file->f_pos)
+		return -ESPIPE;
+	if (!access_ok(VERIFY_WRITE, buffer, count))
+		return -EFAULT;
+	return 0;
+}
+
+// write routine
+// used for sound play
+// sound play is being done by 8051 and data itsself is transfered by DMA
+// the preparation for the above is done here
+static ssize_t voyagergx_write(struct file *file, const char *buffer,
+	     		    size_t count, loff_t * ppos)
+{
+int	i,data,data2,data_size;
+int	ret;
+
+
+	if (ppos != &file->f_pos)
+		return -ESPIPE;
+	if (!access_ok(VERIFY_READ, buffer, count))
+		return -EFAULT;
+	// exit if break flag is set
+	if(break_flg) {
+		return count;
+	}
+	// wait until buffers are not free
+	if((buff_flg1 == 1)&&(buff_flg2 == 1)) {
+		wari_flg = 1;
+		i = 0;
+		while(wari_flg) {
+			// sound play already done?
+			if(abnml_flg) {
+				break;
+			}
+			// sleep until buffer is not full
+			ret = interruptible_sleep_on_timeout(&int_wq,WAIT_TIMEOUT);
+			if(ret == 0) {
+				break;
+			}
+			// check Ctrl-C
+			if (signal_pending(current)) {
+				voy_break();
+				return -ERESTARTSYS;
+			}
+			i++;
+			if(i > 10000000) {
+				printk("DMA endcheck-1 error\n");
+				voy_break();
+				return -EFAULT;
+			}
+		}
+	}
+	data_size = count;
+	// multiple transfer
+	if(data_size >= next_size) {
+		// until play data is larger than buffer
+		while(data_size >= next_size) {
+			// buffer 1 is free
+			if((next_write == 1)&&(buff_flg1 == 0)) {
+				// copy data to VRAM
+				copy_from_user((long *)(VOYAGER_SOUND_BUF1+VOYAGER_SOUND_SIZE-next_size),
+					(long *)buffer,next_size);
+				// buffer1 used
+				buff_flg1 = 1;
+				next_write = 2;
+				// update pointer
+				buffer += next_size;
+				// decrease remained play data
+				data_size -= next_size;
+				// set remained buffer size
+				next_size = VOYAGER_SOUND_SIZE;
+				// kick DMA again when data is not enough
+				if(abnml_flg == 1) {
+					dma2_queue_buffer(sh7751_dmasound_play_irq,
+							VOYAGER_SOUND_BUF1,dma_req[0]);
+					dma2_start(sh7751_dmasound_play_irq);
+					abnml_flg = 0;
+				}
+			}
+			// buffer 2 is free
+			else if((next_write == 2)&&(buff_flg2 == 0)) {
+				// copy data to VRAM
+				copy_from_user((long *)(VOYAGER_SOUND_BUF2+VOYAGER_SOUND_SIZE-next_size),
+					(long *)buffer,next_size);
+				//buffer 2 used
+				buff_flg2 = 1;
+				next_write = 1;
+				// update pointer
+				buffer += next_size;
+				// decrease remained play data
+				data_size -= next_size;
+				// set remained buffer size
+				next_size = VOYAGER_SOUND_SIZE;
+				// kick DMA again when data is not enough
+				if(abnml_flg == 1) {
+					dma2_queue_buffer(sh7751_dmasound_play_irq,
+						VOYAGER_SOUND_BUF2,dma_req[1]);
+					dma2_start(sh7751_dmasound_play_irq);
+					abnml_flg = 0;
+				}
+			}
+			// first time?
+			if(first_flg == 0) {
+				//buffer 1 is full?(buffer 1 is used at first)
+				if(buff_flg1 == 1) {
+					// request DMA
+					dma2_queue_buffer(sh7751_dmasound_play_irq,
+       							VOYAGER_SOUND_BUF1,
+       							VOYAGER_SOUND_SIZE/4);
+					// start play on 8051
+					data = 0x01;
+					command_8051(0x07,&data,&data2);
+					// start DMA transfer
+					dma2_start(sh7751_dmasound_play_irq);
+					// set first flag
+					first_flg = 1;
+				}
+			}
+			// wait until 2 buffer are full
+			if((buff_flg1 == 1)&&(buff_flg2 == 1)) {
+				wari_flg = 1;
+				i = 0;
+				while(wari_flg) {
+					// sound play already done?
+					if(abnml_flg) {
+						break;
+					}
+					// sleep until buffer is not full
+					ret = interruptible_sleep_on_timeout(&int_wq,WAIT_TIMEOUT);
+					if(ret == 0) {
+						break;
+					}
+					// check Ctrl-C
+					if (signal_pending(current)) {
+						voy_break();
+						return -ERESTARTSYS;
+					}
+					i++;
+					if(i > 10000000) {
+						printk("DMA endcheck-2 error\n");
+						voy_break();
+						return -EFAULT;
+					}
+				}
+			}
+		}
+	}
+	// play data size is less than remained buffer size
+	if((data_size != 0)&&(data_size < next_size)) {
+		// buffer 1 is free
+		if((next_write == 1)&&(buff_flg1 == 0)) {
+			// copy data to VRAM
+			copy_from_user((long *)(VOYAGER_SOUND_BUF1+VOYAGER_SOUND_SIZE-next_size),
+				(void *)buffer,data_size);
+			// reset buffer remain size
+			next_size -= data_size;
+			// buffer is full?
+			if(next_size == 0) {
+				//buffer1 used
+				buff_flg1 = 1;
+				next_write = 2;
+				// reset buffer remain size
+				next_size = VOYAGER_SOUND_SIZE;
+				// kick DMA again when data is not enough
+				if(abnml_flg == 1) {
+					dma2_queue_buffer(sh7751_dmasound_play_irq,
+						VOYAGER_SOUND_BUF1,dma_req[0]);
+					dma2_start(sh7751_dmasound_play_irq);
+					abnml_flg = 0;
+				}
+			}
+		}
+		//buffer 2 is free
+		else if((next_write == 2)&&(buff_flg2 == 0)) {
+			// copy data to VRAM
+			copy_from_user((long *)(VOYAGER_SOUND_BUF2+VOYAGER_SOUND_SIZE-next_size),
+				(void *)buffer,data_size);
+			// reset buffer remained size
+			next_size -= data_size;
+			// buffer is full?
+			if(next_size == 0) {
+				//buffer2 used
+				buff_flg2 = 1;
+				next_write = 1;
+				// reset buffer remained size
+				next_size = VOYAGER_SOUND_SIZE;
+				// kick DMA again when data is not enough
+				if(abnml_flg == 1) {
+					dma2_queue_buffer(sh7751_dmasound_play_irq,
+						VOYAGER_SOUND_BUF2,dma_req[1]);
+					dma2_start(sh7751_dmasound_play_irq);
+					abnml_flg = 0;
+				}
+			}
+		}
+	}
+	// is it first time?
+	if(first_flg == 0) {
+		// buffer 1 is full(buffer1 is used first at first time)
+		if(buff_flg1 == 1) {
+			// DMA request
+			dma2_queue_buffer(sh7751_dmasound_play_irq,
+       					VOYAGER_SOUND_BUF1,
+       					VOYAGER_SOUND_SIZE/4);
+			// start play on 8051
+			data = 0x01;
+			command_8051(0x07,&data,&data2);
+			dma2_start(sh7751_dmasound_play_irq);
+			// set first flag
+			first_flg = 1;
+		}
+	}
+	return(count);
+}
+
+// polling - not used
+static unsigned int voyagergx_poll(struct file *file,
+				struct poll_table_struct *wait)
+{
+	return 0;
+}
+
+// mmap - not used
+static int voyagergx_mmap(struct file *file, struct vm_area_struct *vma)
+{
+	return 0;
+}
+
+// I/O control
+// operation for change data type and volume
+static int voyagergx_ioctl(struct inode *inode, struct file *file,
+                        unsigned int cmd, unsigned long arg)
+{
+	struct voyagergx_state *s = (struct voyagergx_state *)file->private_data;
+	int	data,data2,rate;
+
+
+	switch (cmd) {
+//Sound Stop control
+	case -1:
+		voy_break();
+		return 0;
+	case OSS_GETVERSION:
+		return put_user(SOUND_VERSION, (int *) arg);
+
+	case SNDCTL_DSP_SYNC:
+		return 0;
+
+	case SNDCTL_DSP_SETDUPLEX:
+		return 0;
+
+	case SNDCTL_DSP_GETCAPS:
+		return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME |
+				DSP_CAP_TRIGGER | DSP_CAP_MMAP, (int *)arg);
+
+	case SNDCTL_DSP_RESET:
+		return 0;
+
+	case SNDCTL_DSP_SPEED:		// set sampling rate
+		if((*(int *)arg <= 0xbb80)&&(*(int *)arg >= 0x1b80)) {
+			setting.rate = *(int *)arg;
+		}
+		if(setting.ch == 0) {
+			rate = setting.rate / 2;
+		}
+		else {
+			rate = setting.rate;
+		}
+		return setting.rate;
+
+	case SNDCTL_DSP_STEREO:		//set # of play channel(stereo or mono)
+		setting.ch = *(int *)arg;
+		// set # of channel for 8051
+		data = setting.ch;
+		command_8051(0x05,&data,&data2);
+        	dma2_set_device(sh7751_dmasound_play_irq);
+		return(setting.ch);
+
+	case SNDCTL_DSP_CHANNELS:
+		return 0;
+
+	case SNDCTL_DSP_GETFMTS:	// set play data format(8bit or 16bit)
+		if(setting.fmt == 16) {
+			arg = (unsigned long)AFMT_S16_LE;
+		}
+		else {
+			arg = (unsigned long)AFMT_U8;
+		}
+		return 0;
+
+	case SNDCTL_DSP_SETFMT:		// set play data format(8bit or 16bit)
+		if(*(int *)arg == AFMT_S16_LE) {
+			setting.fmt = 16;
+		}
+		else {
+			setting.fmt = 8;
+		}
+		return 0;
+
+	case SNDCTL_DSP_POST:
+		return 0;
+
+	case SNDCTL_DSP_GETTRIGGER:
+		return 0;
+
+	case SNDCTL_DSP_SETTRIGGER:
+		return 0;
+
+	case SNDCTL_DSP_GETOSPACE:
+		return 0;
+
+	case SNDCTL_DSP_GETISPACE:
+		return 0;
+
+	case SNDCTL_DSP_NONBLOCK:
+		return 0;
+
+	case SNDCTL_DSP_GETODELAY:
+		return 0;
+
+	case SNDCTL_DSP_GETIPTR:
+		return 0;
+
+	case SNDCTL_DSP_GETOPTR:
+		return 0;
+
+	case SNDCTL_DSP_GETBLKSIZE:
+		return 0;
+
+	case SNDCTL_DSP_SETFRAGMENT:
+		return 0;
+
+	case SNDCTL_DSP_SUBDIVIDE:
+		return 0;
+
+	case SOUND_PCM_READ_RATE:
+		return 0;
+
+	case SOUND_PCM_READ_CHANNELS:
+		return 0;
+
+	case SOUND_PCM_READ_BITS:
+		return 0;
+
+	case SOUND_PCM_WRITE_FILTER:
+	case SNDCTL_DSP_SETSYNCRO:
+	case SOUND_PCM_READ_FILTER:
+		return -EINVAL;
+	}
+
+	return mixdev_ioctl(&s->codec, cmd, arg);
+}
+
+// open
+// flag initialization
+// stop 8051 to play(it will be started by first write)
+static int  voyagergx_open(struct inode *inode, struct file *file)
+{
+struct voyagergx_state *s = &voyagergx_state;
+int	data,data2;
+
+	file->private_data = s;
+
+	s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
+	//head transferflag clear
+	first_flg = 0;
+	//last transfer flag clear
+	last_flg = 0;
+	//buffer flag clear
+	buff_flg1 = buff_flg2 = 0;
+	// buffer 1 is first
+	proc_flg = 1;
+	// reset buffer remained size
+	next_size = VOYAGER_SOUND_SIZE;
+	// initialize DMA transfer size
+	dma_req[0] = VOYAGER_SOUND_SIZE/4;
+	dma_req[1] = VOYAGER_SOUND_SIZE/4;
+	// clear break flag
+	break_flg = 0;
+	// clear cancel play flag
+	abnml_flg = 0;
+	// initialize # of write buffer
+	next_write = 1;
+	// start play on 8051
+	data = 0x00;
+	command_8051(0x07,&data,&data2);
+
+	return 0;
+}
+
+// release(close)
+// play again if data remains in buffer
+// stop DMA
+// stop 8051
+static int voyagergx_release(struct inode *inode, struct file *file)
+{
+int	data,data2,i;
+int	ret;
+
+	// stop if break flag is set
+	if(break_flg) {
+		return 0;
+	}
+	// wait until buffer is not full
+	if((buff_flg1 == 1)&&(buff_flg2 == 1)) {
+		wari_flg = 1;
+		i = 0;
+		while(wari_flg) {
+			// sound play already done?
+			if(abnml_flg) {
+				break;
+			}
+			// sleep until buffer is not full
+			ret = interruptible_sleep_on_timeout(&int_wq,WAIT_TIMEOUT);
+			if(ret == 0) {
+				break;
+			}
+			// check Ctrl-C
+			if (signal_pending(current)) {
+				voy_break();
+				return -ERESTARTSYS;
+			}
+			i++;
+			if(i > 10000000) {
+				printk("DMA endcheck-3 error\n");
+				voy_break();
+				return -EFAULT;
+			}
+		}
+	}
+	// exit if size is less than 4
+	if((VOYAGER_SOUND_SIZE - next_size) < 4) {
+		voy_break();
+		return 0;
+	}
+	// buffer is not full?
+	if(next_size != 0) {
+		
+		// first time?
+		if(first_flg == 0) {
+			// no data
+			if(next_size == VOYAGER_SOUND_SIZE) {
+				// exit
+				voy_break();
+				return 0;
+			}
+			// buffer 1 used?
+			if(proc_flg == 1) {
+      				dma2_queue_buffer(sh7751_dmasound_play_irq,
+       						VOYAGER_SOUND_BUF1,
+       						(VOYAGER_SOUND_SIZE-next_size)/4);
+				// set last judgement flag
+				last_flg = 1;
+			}
+			// start play on 8051
+			data = 0x01;
+			command_8051(0x07,&data,&data2);
+			dma2_start(sh7751_dmasound_play_irq);
+		}
+		// sound play in case that data is less than a buffer
+		else {
+			if(proc_flg == 2) {
+				dma_req[0] = (VOYAGER_SOUND_SIZE-next_size)/4;
+				buff_flg1 = 1;
+				// set last judgement flag
+				last_flg = 1;
+				// kick dma again if data is not enough
+				if(abnml_flg == 1) {
+					dma2_queue_buffer(sh7751_dmasound_play_irq,
+						VOYAGER_SOUND_BUF1,dma_req[0]);
+					dma2_start(sh7751_dmasound_play_irq);
+					abnml_flg = 0;
+				}
+			}
+			else {
+				// DMA request
+				dma_req[1] = (VOYAGER_SOUND_SIZE-next_size)/4;
+				buff_flg2 = 1;
+				// set last  judgement flag
+				last_flg = 1;
+				// kick dma again if data is not enough
+				if(abnml_flg == 1) {
+					dma2_queue_buffer(sh7751_dmasound_play_irq,
+						VOYAGER_SOUND_BUF2,dma_req[1]);
+					dma2_start(sh7751_dmasound_play_irq);
+					abnml_flg = 0;
+				}
+			}
+		}
+	}
+	// wait for all sound play(transfer)
+	while(1) {
+		if(abnml_flg) {
+			break;
+		}
+		// exit if last judgement flag is 0
+		if(last_flg == 0) {
+			break;
+		}
+		wari_flg = 1;
+		i = 0;
+		while(wari_flg) {
+			// sound play already done?
+			if(abnml_flg) {
+				break;
+			}
+			// exit if last judgement flag is 0
+			if(last_flg == 0) {
+				break;
+			}
+			// sleep until buffer is not full
+			ret = interruptible_sleep_on_timeout(&int_wq,WAIT_TIMEOUT);
+			if(ret == 0) {
+				voy_break();
+				return -EFAULT;
+			}
+			// check Ctrl-C
+			if (signal_pending(current)) {
+				voy_break();
+				return -ERESTARTSYS;
+			}
+			i++;
+			if(i > 10000000) {
+				printk("DMA endcheck-last error\n");
+				voy_break();
+				return -EFAULT;
+			}
+		}
+	}
+	// end
+	voy_break();
+
+	return 0;
+}
+
+static /*const */ struct file_operations voyagergx_audio_fops = {
+	owner:		THIS_MODULE,
+	llseek:		voyagergx_llseek,
+	read:		voyagergx_read,
+	write:		voyagergx_write,
+	poll:		voyagergx_poll,
+	ioctl:		voyagergx_ioctl,
+	mmap:		voyagergx_mmap,
+	open:		voyagergx_open,
+	release:	voyagergx_release,
+};
+
+
+/* --------------------------------------------------------------------- */
+MODULE_AUTHOR("Atom Create Engineering Co.,Ltd.");
+MODULE_DESCRIPTION("DSP audio and mixer driver for Silicon Motion VoyagerGX audio device"); 
+  
+/* --------------------------------------------------------------------- */
+
+// probe
+// driver initialization
+// codec initialization
+// check ac97 chip#
+static int __devinit voyagergx_probe(void)
+{
+struct voyagergx_state *s = &voyagergx_state;
+int             val;
+
+	memset(s, 0, sizeof(struct voyagergx_state));
+
+	init_MUTEX(&s->open_sem);
+	s->codec.private_data = s;
+	s->codec.id = 0;
+	s->codec.codec_read = rdcodec;
+	s->codec.codec_write = wrcodec;
+	s->codec.codec_wait = NULL;
+
+	/* register devices */
+
+	if ((s->dev_audio = register_sound_dsp(&voyagergx_audio_fops, -1)) < 0)
+		goto err_dev1;
+	if ((s->codec.dev_mixer =
+	     register_sound_mixer(&voyagergx_mixer_fops, -1)) < 0)
+		goto err_dev2;
+
+
+	/* codec init */
+	if (!ac97_probe_codec(&s->codec))
+		goto err_dev3;
+
+	s->codec_base_caps = rdcodec(&s->codec, AC97_RESET);
+	s->codec_ext_caps = rdcodec(&s->codec, AC97_EXTENDED_ID);
+	info("AC'97 Base/Extended ID = %04x/%04x",
+	     s->codec_base_caps, s->codec_ext_caps);
+
+	s->codec.supported_mixers |= SOUND_MASK_ALTPCM;
+	val = 0x4343;
+	mixdev_ioctl(&s->codec, SOUND_MIXER_WRITE_ALTPCM,
+		     (unsigned long) &val);
+	
+	if (!(s->codec_ext_caps & AC97_EXTID_VRA)) {
+		// codec does not support VRA
+		s->no_vra = 1;
+	} else if (!vra) {
+		// Boot option says disable VRA
+		u16 ac97_extstat = rdcodec(&s->codec, AC97_EXTENDED_STATUS);
+		wrcodec(&s->codec, AC97_EXTENDED_STATUS,
+			ac97_extstat & ~AC97_EXTSTAT_VRA);
+		s->no_vra = 1;
+	}
+	if (s->no_vra)
+		info("no VRA, interpolating and decimating");
+
+	// set 48k for sampling rate
+	setting.rate  = 48000;
+	wrcodec(&s->codec, 0x2a, 1);
+	wrcodec(&s->codec, 0x2c, setting.rate);
+	//volume set
+	wrcodec(&s->codec, 2, 0);
+	wrcodec(&s->codec, 24, 0);
+	wrcodec(&s->codec, 22, 0);
+
+	return 0;
+
+ err_dev3:
+	unregister_sound_mixer(s->codec.dev_mixer);
+ err_dev2:
+	unregister_sound_dsp(s->dev_audio);
+ err_dev1:
+	return -1;
+}
+
+// remove procedure
+static void __devinit voyagergx_remove(void)
+{
+	struct voyagergx_state *s = &voyagergx_state;
+
+	if (!s)
+		return;
+	unregister_sound_dsp(s->dev_audio);
+	unregister_sound_mixer(s->codec.dev_mixer);
+}
+
+// initilization
+static	int __init init_voyagergx(void)
+{
+unsigned long	value;
+int	err;
+
+	info("sakuma@ace-jp.com, built " __TIME__ " on " __DATE__);
+
+	// set GPIO for ac97 & 8051
+	value = *(volatile unsigned long *)(GPIO_MUX_LOW);
+	value |= GPIO_MUX_LOW_AC97 | GPIO_MUX_LOW_8051;
+	*(volatile unsigned long *)(GPIO_MUX_LOW) = value;
+
+	// stop DMA
+	dma2_stop(sh7751_dmasound_play_irq);
+
+	//DMA interrupt request
+        err = request_dma2(sh7751_dmasound_play_irq, "voyager DMA",do_irq);
+        if (err) {
+                return 0;
+        }
+
+	// enalbe ac97 interrupt
+	value = *(volatile unsigned long *)(VOYAGER_INT_MASK);
+	value |= VOYAGER_INT_MASK_AC;
+	*(volatile unsigned long *)(VOYAGER_INT_MASK) = value;
+
+	// power on ac97
+	value = *(volatile unsigned long *)(POWER_MODE0_GATE);
+	value |= POWER_MODE0_GATE_AC;
+	*(volatile unsigned long *)(POWER_MODE0_GATE) = value;
+
+	// power on ac97
+	value = *(volatile unsigned long *)(POWER_MODE1_GATE);
+	value |= POWER_MODE1_GATE_AC;
+	*(volatile unsigned long *)(POWER_MODE1_GATE) = value;
+
+	// enable ac97
+	value = *(volatile unsigned long *)(AC97_CONTROL_STATUS);
+	value |= 0x0000000F;
+	*(volatile unsigned long *)(AC97_CONTROL_STATUS) = value;
+	// wait for a while
+	mdelay(2);
+	// exit reset
+	value &= 0xFFFFFFF9;
+	*(volatile unsigned long *)(AC97_CONTROL_STATUS) = value;
+
+	// tag initialization(enable stot1-4)
+	value = *(volatile unsigned long *)(AC97_TX_SLOT0);
+	value |= 0x0000F800;
+	*(volatile unsigned long *)(AC97_TX_SLOT0) = value;
+
+	// mono 16bit 48k
+	setting.ch = 0;
+	setting.fmt = 16;
+	setting.rate = 48000;
+
+	// DMA initialization
+        dma2_set_device(sh7751_dmasound_play_irq);
+
+	// 8051 initialization
+	init_8051();
+
+	return voyagergx_probe();
+}
+
+// unload
+static void __exit cleanup_voyagergx(void)
+{
+	info("unloading");
+	voyagergx_remove();
+}
+
+module_init(init_voyagergx);
+module_exit(cleanup_voyagergx);
+MODULE_LICENSE("GPL");
diff -ruN linux-2.6.17-vanilla/sound/oss/voyagergx_sound.h linux-2.6.17/sound/oss/voyagergx_sound.h
--- linux-2.6.17-vanilla/sound/oss/voyagergx_sound.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/oss/voyagergx_sound.h	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,4 @@
+#define VOYAGER_8051_COMMAND	(VOYAGER_BASE + 0x000c3ff0)
+#define VOYAGER_8051_STATUS	(VOYAGER_BASE + 0x000c3ff2)
+#define VOYAGER_8051_DATA	(VOYAGER_BASE + 0x000c3ff4)
+#define VOYAGER_8051_FIFO	(VOYAGER_BASE + 0x000c3600)
diff -ruN linux-2.6.17-vanilla/sound/sh/CVS/Entries linux-2.6.17/sound/sh/CVS/Entries
--- linux-2.6.17-vanilla/sound/sh/CVS/Entries	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/sh/CVS/Entries	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,5 @@
+/Kconfig/1.2/Mon Jun  5 15:29:08 2006//
+/Makefile/1.1/Sun Jun  4 12:13:05 2006//
+/aica.c/1.5/Wed Jul 12 16:52:06 2006//
+/aica.h/1.4/Wed Jul 12 16:52:06 2006//
+D
diff -ruN linux-2.6.17-vanilla/sound/sh/CVS/Repository linux-2.6.17/sound/sh/CVS/Repository
--- linux-2.6.17-vanilla/sound/sh/CVS/Repository	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/sh/CVS/Repository	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+linux/sound/sh
diff -ruN linux-2.6.17-vanilla/sound/sh/CVS/Root linux-2.6.17/sound/sh/CVS/Root
--- linux-2.6.17-vanilla/sound/sh/CVS/Root	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/sh/CVS/Root	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1 @@
+:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
diff -ruN linux-2.6.17-vanilla/sound/sh/Kconfig linux-2.6.17/sound/sh/Kconfig
--- linux-2.6.17-vanilla/sound/sh/Kconfig	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/sh/Kconfig	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,15 @@
+menu "SuperH devices"
+       depends on SND!=n && SUPERH
+
+config SND_AICA
+       tristate "Yamaha AICA sound for SEGA Dreamcast"
+       depends on SND
+       depends on SH_DREAMCAST
+       select SND_PCM
+       help
+         Say Y here to include support for sound on your SEGA Dreamcast
+
+         To compile this driver as a module, choose M here: the module
+         will be called snd-aica.
+
+endmenu
diff -ruN linux-2.6.17-vanilla/sound/sh/Makefile linux-2.6.17/sound/sh/Makefile
--- linux-2.6.17-vanilla/sound/sh/Makefile	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/sh/Makefile	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,4 @@
+
+snd-aica-objs := aica.o
+obj-$(CONFIG_SND_AICA) += snd-aica.o
+
diff -ruN linux-2.6.17-vanilla/sound/sh/aica.c linux-2.6.17/sound/sh/aica.c
--- linux-2.6.17-vanilla/sound/sh/aica.c	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/sh/aica.c	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,711 @@
+/*
+* This code is licenced under 
+* the General Public Licence
+* version 2
+*
+* Copyright Adrian McMenamin 2005, 2006
+* <adrian@mcmen.demon.co.uk>
+* See also http://newgolddream.dyndns.info/cgi-bin/cvsweb
+* 
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of version 2 of the GNU General Public License as published by
+* the Free Software Foundation.
+*
+* 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
+*
+*/
+
+#include <linux/init.h>
+#include <linux/jiffies.h>
+#include <linux/slab.h>
+#include <linux/time.h>
+#include <linux/wait.h>
+#include <linux/moduleparam.h>
+#include <linux/platform_device.h>
+#include <linux/firmware.h>
+#include <linux/timer.h>
+#include <linux/delay.h>
+#include <linux/workqueue.h>
+#include <sound/driver.h>
+#include <sound/core.h>
+#include <sound/control.h>
+#include <sound/pcm.h>
+#include <sound/initval.h>
+#include <sound/info.h>
+#include <asm/io.h>
+#include <asm/dma.h>
+#include "aica.h"
+
+MODULE_AUTHOR("Adrian McMenamin <adrian@mcmen.demon.co.uk>");
+MODULE_DESCRIPTION("Dreamcast AICA sound (pcm) driver");
+MODULE_LICENSE("GPL");
+MODULE_SUPPORTED_DEVICE("{{Yamaha/SEGA, AICA}}");
+
+/* Command values */
+#define AICA_CMD_KICK 0x80000000
+#define AICA_CMD_NONE 0
+#define AICA_CMD_START 1
+#define AICA_CMD_STOP 2
+#define AICA_CMD_VOL 3
+
+/* Sound modes */
+#define SM_8BIT		1
+#define SM_16BIT	0
+#define SM_ADPCM	2
+
+/* Buffer and period size */
+#define AICA_BUFFER_SIZE 0x8000
+#define AICA_PERIOD_SIZE 0x800
+#define AICA_PERIOD_NUMBER 16
+
+#define AICA_CHANNEL0_OFFSET 0x11000
+#define AICA_CHANNEL1_OFFSET 0x21000
+#define CHANNEL_OFFSET 0x10000
+
+#define AICA_DMA_CHANNEL 0
+#define AICA_DMA_MODE 5
+
+#define SND_AICA_DRIVER "AICA"
+
+struct aica_channel {
+	uint32_t cmd;		/* Command ID           */
+	uint32_t pos;		/* Sample position      */
+	uint32_t length;	/* Sample length        */
+	uint32_t freq;		/* Frequency            */
+	uint32_t vol;		/* Volume 0-255         */
+	uint32_t pan;		/* Pan 0-255            */
+	uint32_t sfmt;		/* Sound format         */
+	uint32_t flags;		/* Bit flags            */
+};
+
+struct snd_card_aica {
+	struct snd_card *card;
+	struct aica_channel *channel;
+	snd_pcm_substream_t *substream;
+	int clicks;
+	int current_period;
+	struct timer_list timer;
+	int master_volume;
+	int dma_started;
+};
+
+/* module parameters */
+#define CARD_NAME "AICA"
+static int index = -1;
+static char *id;
+static int enable = 1;
+module_param(index, int, 0444);
+MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
+module_param(id, charp, 0444);
+MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
+module_param(enable, bool, 0644);
+MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
+
+/* Use workqueue */
+static struct work_struct spu_dma_work;
+static struct workqueue_struct *aica_queue;
+
+/* Simple platform device */
+static struct platform_device *pd;
+static struct resource aica_memory_space[2] = {
+	{
+	 .name = "AICA ARM CONTROL",
+	 .start = ARM_RESET_REGISTER,
+	 .flags = IORESOURCE_MEM,
+	 .end = ARM_RESET_REGISTER + 3,
+	 },
+	{
+	 .name = "AICA Sound RAM",
+	 .start = AICA_MEMORY_BASE,
+	 .flags = IORESOURCE_MEM,
+	 .end = AICA_MEMORY_BASE + AICA_MEMORY_SIZE - 1,
+	 },
+};
+
+/* SPU specific functions */
+/* spu_write_wait - wait for G2-SH FIFO to clear */
+static inline void spu_write_wait(void)
+{
+	int time_count;
+	time_count = 0;
+	while (1) {
+		if (!(readl(G2_FIFO) & 0x11))
+			break;
+		/* To ensure hardware failure doesn't wedge kernel */
+		time_count++;
+		if (time_count > 0x10000)
+			break;
+	}
+}
+
+/* spu_memset - write to memory in SPU address space */
+static void spu_memset(uint32_t toi, uint32_t what, int length)
+{
+	int i;
+	snd_assert(length % 4 == 0, return);
+	spu_write_wait();
+	for (i = 0; i < length; i++) {
+		writel(what, toi + AICA_MEMORY_BASE);
+		toi++;
+		if (i && !(i % 8))
+			spu_write_wait();
+	}
+}
+
+/* spu_memload - write to SPU address space */
+static void spu_memload(uint32_t toi, void __iomem * from, int length)
+{
+	uint32_t __iomem *froml = from;
+	uint32_t __iomem *to = (uint32_t __iomem *) (AICA_MEMORY_BASE + toi);
+	int i, val;
+	if (length % 4)
+		length = (length / 4) + 1;
+	else
+		length = length / 4;
+	spu_write_wait();
+	for (i = 0; i < length; i++) {
+		val = *froml;
+		writel(val, to);
+		froml++;
+		to++;
+		if (i && !(i % 8))
+			spu_write_wait();
+	}
+}
+
+/* spu_disable - set spu registers to stop sound output */
+static void spu_disable(void)
+{
+	int i;
+	uint32_t regval;
+	spu_write_wait();
+	regval = readl(ARM_RESET_REGISTER);
+	regval |= 1;
+	spu_write_wait();
+	writel(regval, ARM_RESET_REGISTER);
+	for (i = 0; i < 64; i++) {
+		spu_write_wait();
+		regval = readl(AICA_REGISTER_BASE + (i * 0x80));
+		regval = (regval & ~0x4000) | 0x8000;
+		spu_write_wait();
+		writel(regval, AICA_REGISTER_BASE + (i * 0x80));
+	}
+}
+
+/* spu_enable - set spu registers to enable sound output */
+static void spu_enable(void)
+{
+	uint32_t regval = readl(ARM_RESET_REGISTER);
+	regval &= ~1;
+	spu_write_wait();
+	writel(regval, ARM_RESET_REGISTER);
+}
+
+/* 
+ * Halt the sound processor, clear the memory,
+ * load some default ARM7 code, and then restart ARM7
+*/
+static void spu_reset(void)
+{
+	spu_disable();
+	spu_memset(0, 0, 0x200000 / 4);
+	/* Put ARM7 in endless loop */
+	ctrl_outl(0xea000002, AICA_MEMORY_BASE);
+	spu_enable();
+}
+
+/* aica_chn_start - write to spu to start playback */
+static void aica_chn_start(void)
+{
+	spu_write_wait();
+	writel(AICA_CMD_KICK | AICA_CMD_START, (uint32_t *) AICA_CONTROL_POINT);
+}
+
+/* aica_chn_halt - write to spu to halt playback */
+static void aica_chn_halt(void)
+{
+	spu_write_wait();
+	writel(AICA_CMD_KICK | AICA_CMD_STOP, (uint32_t *) AICA_CONTROL_POINT);
+}
+
+/* ALSA code below */
+static struct snd_pcm_hardware snd_pcm_aica_playback_hw = {
+	.info = (SNDRV_PCM_INFO_NONINTERLEAVED),
+	.formats =
+	    (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE |
+	     SNDRV_PCM_FMTBIT_IMA_ADPCM),
+	.rates = SNDRV_PCM_RATE_8000_48000,
+	.rate_min = 8000,
+	.rate_max = 48000,
+	.channels_min = 1,
+	.channels_max = 2,
+	.buffer_bytes_max = AICA_BUFFER_SIZE,
+	.period_bytes_min = AICA_PERIOD_SIZE,
+	.period_bytes_max = AICA_PERIOD_SIZE,
+	.periods_min = AICA_PERIOD_NUMBER,
+	.periods_max = AICA_PERIOD_NUMBER,
+};
+
+static int aica_dma_transfer(int channels, int buffer_size,
+			     struct snd_pcm_substream *substream)
+{
+	int q, err, period_offset;
+	struct snd_card_aica *dreamcastcard;
+	struct snd_pcm_runtime *runtime;
+	err = 0;
+	dreamcastcard = substream->pcm->private_data;
+	period_offset = dreamcastcard->clicks;
+	period_offset %= (AICA_PERIOD_NUMBER / channels);
+	runtime = substream->runtime;
+	for (q = 0; q < channels; q++) {
+		err = dma_xfer(AICA_DMA_CHANNEL,
+			       (unsigned long)(runtime->dma_area +
+					       (AICA_BUFFER_SIZE * q) /
+					       channels +
+					       AICA_PERIOD_SIZE *
+					       period_offset),
+			       AICA_CHANNEL0_OFFSET + q * CHANNEL_OFFSET +
+			       AICA_PERIOD_SIZE * period_offset,
+			       buffer_size / channels, AICA_DMA_MODE);
+		if (unlikely(err < 0))
+			break;
+		dma_wait_for_completion(AICA_DMA_CHANNEL);
+	}
+	return err;
+}
+
+static void startup_aica(struct snd_card_aica *dreamcastcard)
+{
+	spu_memload(AICA_CHANNEL0_CONTROL_OFFSET,
+		    (uint8_t *) dreamcastcard->channel,
+		    sizeof(struct aica_channel));
+	aica_chn_start();
+}
+
+
+static void execute_spu_dma(void *sstream)
+{
+	int buffer_size;
+	struct snd_pcm_substream *substream;
+	struct snd_pcm_runtime *runtime;
+	struct snd_card_aica *dreamcastcard;
+	substream = sstream;
+	dreamcastcard = substream->pcm->private_data;
+	runtime = substream->runtime;
+	if (unlikely(dreamcastcard->dma_started == 0))
+	{
+		buffer_size = frames_to_bytes(runtime, runtime->buffer_size);
+		if (runtime->channels > 1)
+			dreamcastcard->channel->flags |= 0x01;
+		aica_dma_transfer(runtime->channels, buffer_size, substream);
+		startup_aica(dreamcastcard);
+		dreamcastcard->clicks =
+	    		buffer_size / (AICA_PERIOD_SIZE * runtime->channels);
+		dreamcastcard->dma_started = 1;
+	}
+	else
+	{
+		aica_dma_transfer(runtime->channels,
+			  AICA_PERIOD_SIZE * runtime->channels, substream);
+		snd_pcm_period_elapsed(dreamcastcard->substream);
+		dreamcastcard->clicks++;
+		dreamcastcard->clicks %= AICA_PERIOD_NUMBER;
+		mod_timer(&dreamcastcard->timer, jiffies+1);
+	}
+	
+}
+
+static void aica_period_elapsed(unsigned long timer_var)
+{
+	/*timer fuction - so cannot sleep */
+	int play_period;
+	struct snd_pcm_runtime *runtime;
+	struct snd_pcm_substream *substream;
+	struct snd_card_aica *dreamcastcard;
+	substream = (struct snd_pcm_substream *)timer_var;
+	runtime = substream->runtime;
+	dreamcastcard = substream->pcm->private_data;
+	/* Have we played out an additional period? */
+	play_period =
+	    frames_to_bytes(runtime,
+			    readl
+			    (AICA_CONTROL_CHANNEL_SAMPLE_NUMBER)) /
+	    AICA_PERIOD_SIZE;
+	if (play_period == dreamcastcard->current_period) {
+		/* reschedule the timer */
+		mod_timer(&dreamcastcard->timer, jiffies+1);
+		return;
+	}
+	if (runtime->channels > 1)
+		dreamcastcard->current_period = play_period;
+	queue_work(aica_queue, &spu_dma_work);
+}
+
+static int snd_aicapcm_pcm_open(struct snd_pcm_substream
+				*substream)
+{
+	struct snd_pcm_runtime *runtime;
+	struct aica_channel *channel;
+	struct snd_card_aica *dreamcastcard;
+	if (!enable)
+		return -ENOENT;
+	dreamcastcard = substream->pcm->private_data;
+	channel = kmalloc(sizeof(struct aica_channel), GFP_KERNEL);
+	if (!channel)
+		return -ENOMEM;
+	/* set defaults for channel */
+	channel->sfmt = SM_8BIT;
+	channel->cmd = AICA_CMD_START;
+	channel->vol = dreamcastcard->master_volume;
+	channel->pan = 0x80;
+	channel->pos = 0;
+	channel->flags = 0;	/* default to mono */
+	dreamcastcard->channel = channel;
+	runtime = substream->runtime;
+	runtime->hw = snd_pcm_aica_playback_hw;
+	spu_enable();
+	dreamcastcard->clicks = 0;
+	dreamcastcard->current_period = 0;
+	dreamcastcard->dma_started = 0;
+	return 0;
+}
+
+static int snd_aicapcm_pcm_close(struct snd_pcm_substream
+				 *substream)
+{
+	struct snd_card_aica *dreamcastcard = substream->pcm->private_data;
+	del_timer(&dreamcastcard->timer);
+	kfree(dreamcastcard->channel);
+	spu_disable();
+	return 0;
+}
+
+static int snd_aicapcm_pcm_hw_free(struct snd_pcm_substream
+				   *substream)
+{
+	/* Free the DMA buffer */
+	return snd_pcm_lib_free_pages(substream);
+}
+
+static int snd_aicapcm_pcm_hw_params(struct snd_pcm_substream
+				     *substream, struct snd_pcm_hw_params
+				     *hw_params)
+{
+	/* Allocate a DMA buffer using ALSA built-ins */
+	return
+	    snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
+}
+
+static int snd_aicapcm_pcm_prepare(struct snd_pcm_substream
+				   *substream)
+{
+	struct snd_card_aica *dreamcastcard = substream->pcm->private_data;
+	if ((substream->runtime)->format == SNDRV_PCM_FORMAT_S16_LE)
+		dreamcastcard->channel->sfmt = SM_16BIT;
+	dreamcastcard->channel->freq = substream->runtime->rate;
+	dreamcastcard->substream = substream;
+	return 0;
+}
+
+
+
+static void spu_begin_dma(struct snd_pcm_substream *substream)
+{
+	/* Must be atomic */
+	struct snd_card_aica *dreamcastcard;
+	struct snd_pcm_runtime *runtime;
+	runtime = substream->runtime;
+	dreamcastcard = substream->pcm->private_data;
+	/*  Use queue to do the heavy lifting */
+	INIT_WORK(&spu_dma_work, execute_spu_dma, substream);
+	queue_work(aica_queue, &spu_dma_work);
+	init_timer(&(dreamcastcard->timer));
+	dreamcastcard->timer.data = (unsigned long)substream;
+	dreamcastcard->timer.function = aica_period_elapsed;
+	dreamcastcard->timer.expires = jiffies + 4;
+	add_timer(&(dreamcastcard->timer));
+}
+
+static int snd_aicapcm_pcm_trigger(struct snd_pcm_substream
+				   *substream, int cmd)
+{
+	struct snd_card_aica *dreamcastcard;
+	switch (cmd) {
+	case SNDRV_PCM_TRIGGER_START:
+		spu_begin_dma(substream);
+		break;
+	case SNDRV_PCM_TRIGGER_STOP:
+		dreamcastcard = substream->pcm->private_data;
+		if (dreamcastcard->timer.data)
+			del_timer(&dreamcastcard->timer);
+		aica_chn_halt();
+		break;
+	default:
+		return -EINVAL;
+	}
+	return 0;
+}
+
+static unsigned long snd_aicapcm_pcm_pointer(struct snd_pcm_substream
+					     *substream)
+{
+	return readl(AICA_CONTROL_CHANNEL_SAMPLE_NUMBER);
+}
+
+static struct snd_pcm_ops snd_aicapcm_playback_ops = {
+	.open = snd_aicapcm_pcm_open,
+	.close = snd_aicapcm_pcm_close,
+	.ioctl = snd_pcm_lib_ioctl,
+	.hw_params = snd_aicapcm_pcm_hw_params,
+	.hw_free = snd_aicapcm_pcm_hw_free,
+	.prepare = snd_aicapcm_pcm_prepare,
+	.trigger = snd_aicapcm_pcm_trigger,
+	.pointer = snd_aicapcm_pcm_pointer,
+};
+
+/* TO DO: set up to handle more than one pcm instance */
+static int __init snd_aicapcmchip(struct snd_card_aica
+				  *dreamcastcard, int pcm_index)
+{
+	struct snd_pcm *pcm;
+	int err;
+	/* AICA has no capture ability */
+	err =
+	    snd_pcm_new(dreamcastcard->card, "AICA PCM", pcm_index, 1, 0, &pcm);
+	    if (unlikely(err < 0))
+		return err;
+	pcm->private_data = dreamcastcard;
+	strcpy(pcm->name, "AICA PCM");
+	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK,
+			&snd_aicapcm_playback_ops);
+	/* Allocate the DMA buffers */
+	err =
+	    snd_pcm_lib_preallocate_pages_for_all(pcm,
+						  SNDRV_DMA_TYPE_CONTINUOUS,
+						  snd_dma_continuous_data
+						  (GFP_KERNEL),
+						  AICA_BUFFER_SIZE,
+						  AICA_BUFFER_SIZE);
+	return err;
+}
+
+/* Mixer controls */
+static int aica_pcmswitch_info(struct snd_kcontrol *kcontrol,
+			       struct snd_ctl_elem_info *uinfo)
+{
+	uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
+	uinfo->count = 1;
+	uinfo->value.integer.min = 0;
+	uinfo->value.integer.max = 1;
+	return 0;
+}
+
+static int aica_pcmswitch_get(struct snd_kcontrol *kcontrol,
+			      struct snd_ctl_elem_value *ucontrol)
+{
+	ucontrol->value.integer.value[0] = 1;	/* TO DO: Fix me */
+	return 0;
+}
+
+static int aica_pcmswitch_put(struct snd_kcontrol *kcontrol,
+			      struct snd_ctl_elem_value *ucontrol)
+{
+	if (ucontrol->value.integer.value[0] == 1)
+		return 0;	/* TO DO: Fix me */
+	else
+		aica_chn_halt();
+	return 0;
+}
+
+static int aica_pcmvolume_info(struct snd_kcontrol *kcontrol,
+			       struct snd_ctl_elem_info *uinfo)
+{
+	uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
+	uinfo->count = 1;
+	uinfo->value.integer.min = 0;
+	uinfo->value.integer.max = 0xFF;
+	return 0;
+}
+
+static int aica_pcmvolume_get(struct snd_kcontrol *kcontrol,
+			      struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_card_aica *dreamcastcard;
+	dreamcastcard = kcontrol->private_data;
+	if (unlikely(!dreamcastcard->channel))
+		return -ETXTBSY;	/* we've not yet been set up */
+	ucontrol->value.integer.value[0] = dreamcastcard->channel->vol;
+	return 0;
+}
+
+static int aica_pcmvolume_put(struct snd_kcontrol *kcontrol,
+			      struct snd_ctl_elem_value *ucontrol)
+{
+	struct snd_card_aica *dreamcastcard;
+	dreamcastcard = kcontrol->private_data;
+	if (unlikely(!dreamcastcard->channel))
+		return -ETXTBSY;
+	if (unlikely(dreamcastcard->channel->vol ==
+		     ucontrol->value.integer.value[0]))
+		return 0;
+	dreamcastcard->channel->vol = ucontrol->value.integer.value[0];
+	dreamcastcard->master_volume = ucontrol->value.integer.value[0];
+	spu_memload(AICA_CHANNEL0_CONTROL_OFFSET,
+		    (uint8_t *) dreamcastcard->channel,
+		    sizeof(struct aica_channel));
+
+	return 1;
+}
+
+static struct snd_kcontrol_new snd_aica_pcmswitch_control __devinitdata = {
+	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+	.name = "PCM Playback Switch",
+	.index = 0,
+	.info = aica_pcmswitch_info,
+	.get = aica_pcmswitch_get,
+	.put = aica_pcmswitch_put
+};
+
+static struct snd_kcontrol_new snd_aica_pcmvolume_control __devinitdata = {
+	.iface = SNDRV_CTL_ELEM_IFACE_MIXER,
+	.name = "PCM Playback Volume",
+	.index = 0,
+	.info = aica_pcmvolume_info,
+	.get = aica_pcmvolume_get,
+	.put = aica_pcmvolume_put
+};
+
+static int load_aica_firmware(void)
+{
+	int err;
+	const struct firmware *fw_entry;
+	err = 0;
+	spu_reset();
+	err = request_firmware(&fw_entry, "aica_firmware.bin", &pd->dev);
+	if (unlikely(err))
+		return err;
+	/* write firware into memory */
+	spu_disable();
+	spu_memload(0, fw_entry->data, fw_entry->size);
+	spu_enable();
+	release_firmware(fw_entry);
+	return err;
+}
+
+static int __devinit add_aicamixer_controls(struct snd_card_aica
+					    *dreamcastcard)
+{
+	int err;
+	err = snd_ctl_add
+	    (dreamcastcard->card,
+	     snd_ctl_new1(&snd_aica_pcmvolume_control, dreamcastcard));
+	if (unlikely(err < 0))
+		return err;
+	err = snd_ctl_add
+	    (dreamcastcard->card,
+	     snd_ctl_new1(&snd_aica_pcmswitch_control, dreamcastcard));
+	if (unlikely(err < 0))
+		return err;
+	return 0;
+}
+
+static int snd_aica_remove(struct platform_device *devptr)
+{
+	snd_card_free(platform_get_drvdata(devptr));	
+	platform_set_drvdata(devptr, NULL);
+	return 0;
+}
+
+static int __init snd_aica_probe(struct platform_device *devptr)
+{
+	int err;
+	struct snd_card_aica *dreamcastcard;
+
+	dreamcastcard = kmalloc(sizeof(struct snd_card_aica), GFP_KERNEL);
+	if (unlikely(!dreamcastcard))
+		return -ENOMEM;
+	dreamcastcard->card =
+	    snd_card_new(index, SND_AICA_DRIVER, THIS_MODULE, 0);
+	if (unlikely(!dreamcastcard->card)) {
+		kfree(dreamcastcard);
+		return -ENODEV;
+	}
+	strcpy(dreamcastcard->card->driver, "snd_aica");
+	strcpy(dreamcastcard->card->shortname, SND_AICA_DRIVER);
+	strcpy(dreamcastcard->card->longname,
+	       "Yamaha AICA Super Intelligent Sound Processor for SEGA Dreamcast");
+	/* Load the PCM 'chip' */
+	err = snd_aicapcmchip(dreamcastcard, 0);
+	if (unlikely(err < 0))
+		goto freedreamcast;
+	snd_card_set_dev(dreamcastcard->card, &devptr->dev);
+	dreamcastcard->channel = NULL;
+	/* Add basic controls */
+	err = add_aicamixer_controls(dreamcastcard);
+	if (unlikely(err < 0))
+		goto freedreamcast;
+	/* Register the card with ALSA subsystem */
+	err = snd_card_register(dreamcastcard->card);
+	if (unlikely(err < 0))
+		goto freedreamcast;
+	platform_set_drvdata(devptr, dreamcastcard->card);
+	aica_queue = create_workqueue("aica");
+	if (unlikely(!aica_queue))
+		goto freedreamcast;
+	snd_printk
+	    ("ALSA Driver for Yamaha AICA Super Intelligent Sound Processor\n");
+	return 0;
+      freedreamcast:
+	snd_card_free(dreamcastcard->card);
+	kfree(dreamcastcard);
+	return err;
+}
+
+static struct platform_driver snd_aica_driver = {
+	.probe = snd_aica_probe,
+	.remove = snd_aica_remove,
+	.driver = {
+		   .name = SND_AICA_DRIVER
+	},
+};
+
+static int __init aica_init(void) {
+	int err;
+	err = platform_driver_register(&snd_aica_driver);
+	if (unlikely(err < 0)) return err;
+	pd = platform_device_register_simple(SND_AICA_DRIVER, -1,
+					     aica_memory_space, 2);
+	if (unlikely(IS_ERR(pd))) {
+		platform_driver_unregister(&snd_aica_driver);
+		return PTR_ERR(pd);
+	}
+	err = load_aica_firmware();
+	if (unlikely(err < 0)) {
+		platform_driver_unregister(&snd_aica_driver);
+		platform_device_unregister(pd);
+		return err;
+		}
+	return 0;
+}
+
+static void __exit aica_exit(void)
+{
+	/* Flush and destroy the aica kernel thread */
+	destroy_workqueue(aica_queue);
+	platform_device_unregister(pd);
+	platform_driver_unregister(&snd_aica_driver);
+	/* Kill any sound still playing and reset ARM7 to safe state */
+	spu_reset();
+}
+
+module_init(aica_init);
+module_exit(aica_exit);
+
diff -ruN linux-2.6.17-vanilla/sound/sh/aica.h linux-2.6.17/sound/sh/aica.h
--- linux-2.6.17-vanilla/sound/sh/aica.h	1970-01-01 00:00:00.000000000 +0000
+++ linux-2.6.17/sound/sh/aica.h	2006-07-12 16:54:27.000000000 +0000
@@ -0,0 +1,44 @@
+/*
+* This code is licenced under 
+* the General Public Licence
+* version 2
+*
+* Copyright Adrian McMenamin 2006
+* <adrian@mcmen.demon.co.uk>
+* See also http://newgolddream.dyndns.info/cgi-bin/cvsweb
+* 
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of version 2 of the GNU General Public License as published by
+* the Free Software Foundation.
+*
+* 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
+*
+*/
+
+#ifndef _ASM_DREAMCAST_AICA
+#define _ASM_DREAMCAST_AICA
+
+#ifdef MACH_DREAMCAST
+/* SPU memory and register constants etc */
+#define G2_FIFO 0xa05f688c
+#define AICA_MEMORY_BASE 0xA0800000
+#define ARM_RESET_REGISTER 0xA0702C00
+#define AICA_REGISTER_BASE 0xA0700000
+
+/* AICA channels stuff */
+#define AICA_CONTROL_POINT 0xA0810000
+#define AICA_CONTROL_CHANNEL_SAMPLE_NUMBER 0xA0810008
+#define AICA_MEMORY_SIZE 0x200000
+#define AICA_CHANNEL0_CONTROL_OFFSET 0x10004
+#endif
+
+#endif
+