aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/linux/linux-jlime-jornada6xx-2.6.17/LinuxSH-2.6.17.patch
diff options
context:
space:
mode:
authorDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
committerDenys Dmytriyenko <denis@denix.org>2009-03-17 14:32:59 -0400
commit709c4d66e0b107ca606941b988bad717c0b45d9b (patch)
tree37ee08b1eb308f3b2b6426d5793545c38396b838 /recipes/linux/linux-jlime-jornada6xx-2.6.17/LinuxSH-2.6.17.patch
parentfa6cd5a3b993f16c27de4ff82b42684516d433ba (diff)
downloadopenembedded-709c4d66e0b107ca606941b988bad717c0b45d9b.tar.gz
rename packages/ to recipes/ per earlier agreement
See links below for more details: http://thread.gmane.org/gmane.comp.handhelds.openembedded/21326 http://thread.gmane.org/gmane.comp.handhelds.openembedded/21816 Signed-off-by: Denys Dmytriyenko <denis@denix.org> Acked-by: Mike Westerhof <mwester@dls.net> Acked-by: Philip Balister <philip@balister.org> Acked-by: Khem Raj <raj.khem@gmail.com> Acked-by: Marcin Juszkiewicz <hrw@openembedded.org> Acked-by: Koen Kooi <koen@openembedded.org> Acked-by: Frans Meulenbroeks <fransmeulenbroeks@gmail.com>
Diffstat (limited to 'recipes/linux/linux-jlime-jornada6xx-2.6.17/LinuxSH-2.6.17.patch')
-rw-r--r--recipes/linux/linux-jlime-jornada6xx-2.6.17/LinuxSH-2.6.17.patch56279
1 files changed, 56279 insertions, 0 deletions
diff --git a/recipes/linux/linux-jlime-jornada6xx-2.6.17/LinuxSH-2.6.17.patch b/recipes/linux/linux-jlime-jornada6xx-2.6.17/LinuxSH-2.6.17.patch
new file mode 100644
index 0000000000..104b2e6a89
--- /dev/null
+++ b/recipes/linux/linux-jlime-jornada6xx-2.6.17/LinuxSH-2.6.17.patch
@@ -0,0 +1,56279 @@
+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
++