linux-jlime-sh3/LinuxSH-2.6.17.patch : Patch from Linux-SH for 2.6.17
authorKristoffer Ericson <kristoffer_e1@hotmail.com>
Wed, 5 Jul 2006 16:17:13 +0000 (16:17 +0000)
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>
Wed, 5 Jul 2006 16:17:13 +0000 (16:17 +0000)
* Addition of patch from Linux-sh tree
linux-jlime-sh3-2.6.17/defconfig_jlime : Addition of defconfig
linux-jlime-sh3_2.6.17.bb : New jlime kernel based on 2.6.17+linuxSH

conf/distro/jlime-donkey.conf
packages/linux/linux-jlime-sh3-2.6.17/.mtn2git_empty [new file with mode: 0644]
packages/linux/linux-jlime-sh3-2.6.17/LinuxSH-2.6.17.patch [new file with mode: 0644]
packages/linux/linux-jlime-sh3-2.6.17/defconfig_jlime [new file with mode: 0644]
packages/linux/linux-jlime-sh3_2.6.17.bb [new file with mode: 0644]

index a5dd6ea..01f1651 100644 (file)
@@ -8,10 +8,12 @@ DISTRO_VERSION = "donkey"
 
 export FEED_URLS_jlime = "donkey##http://www.jlime.com/downloads/releases/donkey/${TARGET_ARCH}/feed/"
 
+# No uniroot
+PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
+
 #<>
 #<> We will set CVS DATE when things are known to work.
 #<>
-#SRCDATE = "20060627"
 
 PREFERRED_PROVIDERS  =  "virtual/${TARGET_PREFIX}gcc-initial:gcc-cross-initial"
 PREFERRED_PROVIDERS +=  "virtual/${TARGET_PREFIX}gcc:gcc-cross"
@@ -27,8 +29,8 @@ PREFERRED_PROVIDER_virtual/kernel = "linux-jlime-${TARGET_ARCH}"
 #<>
 #<>We want kdrive as our default X-Server.
 #<>
-PREFERRED_PROVIDER_xserver         = "xserver-kdrive"
-PREFERRED_PROVIDER_virtual/xserver = "xserver-kdrive"
+PREFERRED_PROVIDER_xserver          = "xserver-kdrive"
+PREFERRED_PROVIDERS_virtual/xserver += "xserver-kdrive"
 
 #<>
 #<>Setting Preferred Binutils,gcc,glibc and linux-libc-headers
@@ -52,9 +54,11 @@ PREFERRED_VERSION_glib-2.0 = "2.8.4"
 PREFERRED_VERSION_glib-1.2 = "1.2.10"
 
 #<>
-#<>Setting Preferred xserver-kdrive
+#<>Setting Preferred xserver-kdrive. Also choose diet-x11 as default libx11.
 #<>
 PREFERRED_VERSION_xserver-kdrive = "0.0+cvs20060312"
+PREFERRED_PROVIDER_libx11        = "diet-x11"
+PREFERRED_PROVIDER_tslib         = "tslib"
 
 #<>
 #<>Other Specific stuff.
diff --git a/packages/linux/linux-jlime-sh3-2.6.17/.mtn2git_empty b/packages/linux/linux-jlime-sh3-2.6.17/.mtn2git_empty
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/packages/linux/linux-jlime-sh3-2.6.17/LinuxSH-2.6.17.patch b/packages/linux/linux-jlime-sh3-2.6.17/LinuxSH-2.6.17.patch
new file mode 100644 (file)
index 0000000..2866b00
--- /dev/null
@@ -0,0 +1,53718 @@
+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-05 14:57:19.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-05 14:57:19.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-05 14:57:19.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-05 14:57:19.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-05 14:57:19.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-05 14:57:19.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.
++\f
++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-05 14:57:19.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.
++
++\f
++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-05 14:57:19.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.
++\f
++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-05 14:57: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.
++\f
++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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -0,0 +1,13 @@
++/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.97/Wed Jul  5 14:49:59 2006/-ko/
++/Makefile/1.64/Wed Jul  5 14:49:59 2006/-ko/
+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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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,7 +335,7 @@
+       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.
+@@ -400,9 +400,9 @@
+ 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"
+ config SH_PCLK_FREQ
+       int "Peripheral clock frequency (in Hz)"
+@@ -454,7 +454,7 @@
+ config ISA_DMA_API
+       bool
+-      depends on SH_MPC1211
++      depends on MPC1211
+       default y
+ menu "Kernel features"
+@@ -636,6 +636,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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -104,16 +104,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 +135,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 +152,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 +166,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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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//
++/rtc.c/1.5/Fri Aug 26 20:12:14 2005/-ko/
++/setup.c/1.8/Wed Jan  4 13:24:06 2006//
++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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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;
+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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57: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/
++/rtc.c/1.2/Sat Nov 12 13:02:45 2005/-ko/
++/setup.c/1.3/Tue Jan  3 22:51:46 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-05 14:57: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-05 14:57:20.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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57:20.000000000 +0000
+@@ -0,0 +1,102 @@
++/*
++ * 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>
++
++#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
++
++extern void (*rtc_get_time) (struct timespec *);
++extern int (*rtc_set_time) (const time_t);
++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_get_time = landisk_rtc_gettimeofday;
++      rtc_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-05 14:57: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-05 14:57: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.3/Wed Jul  5 14:50:09 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-05 14:57: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-05 14:57: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/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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57:20.000000000 +0000
+@@ -0,0 +1,6 @@
++/Makefile/1.1/Sat Jan  7 19:55:56 2006/-ko/
++/io.c/1.2/Sun Feb  5 21:55:28 2006/-ko/
++/irq.c/1.1/Sat Jan  7 19:55:56 2006/-ko/
++/led.c/1.1/Sat Jan  7 19:55:56 2006/-ko/
++/setup.c/1.2/Sun Jan 15 17:40:19 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-05 14:57: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-05 14:57: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/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-05 14:57: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-05 14:57: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-05 14:57:20.000000000 +0000
+@@ -0,0 +1,119 @@
++/*
++ * 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>
++
++static int mask_pos[] = {15, 14, 13, 12, 11, 10, 9, 8, 7, 5, 6, 4, 0, 1, 2, 0};
++
++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-05 14:57: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-05 14:57:20.000000000 +0000
+@@ -0,0 +1,153 @@
++/*
++ * 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";
++}
++
++/*
++ * 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. */
++      ctrl_outw(0x0001, PA_SDPOW);    /* SD Power ON */
++      ctrl_outw(ctrl_inw(PA_IVDRCTL) | 0x0100, PA_IVDRCTL);   /* Si13112 */
++}
+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-05 14:57: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/
++/led.c/1.2/Wed Nov 23 15:42:02 2005/-ko/
++/mach.c/1.6/Tue Jan  3 22:51:46 2006/-ko/
++/setup.c/1.4/Thu Feb  9 08:30:55 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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57:20.000000000 +0000
+@@ -56,12 +56,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-05 14:57: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-05 14:57:20.000000000 +0000
+@@ -1,25 +1,89 @@
+ /*
+- * 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>
+ unsigned int debug_counter;
++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,
++      },
++};
++
++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 +91,9 @@
+ {
+       printk(KERN_INFO "Renesas Technology Sales RTS7751R2D support.\n");
+       ctrl_outw(0x0000, PA_OUTPORT);
++      pm_power_off = rts7751r2d_power_off;
++
++      voyagergx_serial_init();
++
+       debug_counter = 0;
+ }
+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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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;
+-}
+-
+-\f
+-
+-/* 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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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.3/Wed Jul  5 14:50:16 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-05 14:57: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-05 14:57: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/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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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//
++/rtc.c/1.2/Wed Jan  4 18:42:42 2006//
++/setup.c/1.4/Wed Jan  4 18:42:42 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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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>
+ /****************************************************************************/
+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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57: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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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//
++/hp6xx_defconfig/1.7/Mon Jan 30 16:14:10 2006/-ko/
++/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//
++/titan_defconfig/1.2/Wed Jan  4 19:03:16 2006/-ko/
++/r7780rp_defconfig/1.2/Wed Jul  5 14:50:34 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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -1,7 +1,7 @@
+ #
+ # Automatically generated make config: don't edit
+ # Linux kernel version: 2.6.15-sh
+-# Wed Jan  4 15:32:56 2006
++# Mon Jan 30 18:09:26 2006
+ #
+ CONFIG_SUPERH=y
+ CONFIG_UID16=y
+@@ -96,6 +96,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 +176,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
+ #
+@@ -257,6 +260,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
+@@ -390,17 +401,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
+ #
+@@ -715,7 +740,6 @@
+ # 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_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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -0,0 +1,1399 @@
++#
++# Automatically generated make config: don't edit
++# Linux kernel version: 2.6.15-sh
++# Wed Jan  4 20:54:24 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_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=y
++CONFIG_IKCONFIG_PROC=y
++CONFIG_INITRAMFS_SOURCE=""
++CONFIG_CC_OPTIMIZE_FOR_SIZE=y
++# CONFIG_EMBEDDED is not set
++CONFIG_KALLSYMS=y
++# CONFIG_KALLSYMS_ALL is not set
++# CONFIG_KALLSYMS_EXTRA_PASS 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=y
++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 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 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
++
++#
++# Timer support
++#
++CONFIG_SH_TMU=y
++CONFIG_SH_PCLK_FREQ_BOOL=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_LEGACY_PROC=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
++
++#
++# Networking
++#
++CONFIG_NET=y
++
++#
++# Networking options
++#
++CONFIG_PACKET=y
++CONFIG_PACKET_MMAP=y
++CONFIG_UNIX=y
++CONFIG_XFRM=y
++# CONFIG_XFRM_USER is not set
++CONFIG_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=m
++CONFIG_NET_IPGRE=m
++CONFIG_NET_IPGRE_BROADCAST=y
++CONFIG_IP_MROUTE=y
++CONFIG_IP_PIMSM_V1=y
++CONFIG_IP_PIMSM_V2=y
++# CONFIG_ARPD is not set
++CONFIG_SYN_COOKIES=y
++CONFIG_INET_AH=m
++CONFIG_INET_ESP=m
++CONFIG_INET_IPCOMP=m
++CONFIG_INET_TUNNEL=m
++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=m
++CONFIG_IPV6_PRIVACY=y
++CONFIG_INET6_AH=m
++CONFIG_INET6_ESP=m
++CONFIG_INET6_IPCOMP=m
++CONFIG_INET6_TUNNEL=m
++CONFIG_IPV6_TUNNEL=m
++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
++
++#
++# 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_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_PHYSDEV is not set
++CONFIG_IP_NF_MATCH_ADDRTYPE=m
++CONFIG_IP_NF_MATCH_REALM=m
++# CONFIG_IP_NF_MATCH_SCTP is not set
++# 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=m
++CONFIG_IP_NF_MATCH_HASHLIMIT=m
++CONFIG_IP_NF_MATCH_STRING=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_TARGET_NFQUEUE=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_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=m
++CONFIG_IP_NF_TARGET_CONNMARK=m
++CONFIG_IP_NF_TARGET_CLUSTERIP=m
++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
++
++#
++# IPv6: Netfilter Configuration (EXPERIMENTAL)
++#
++CONFIG_IP6_NF_QUEUE=m
++CONFIG_IP6_NF_IPTABLES=m
++CONFIG_IP6_NF_MATCH_LIMIT=m
++CONFIG_IP6_NF_MATCH_MAC=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_MULTIPORT=m
++CONFIG_IP6_NF_MATCH_OWNER=m
++CONFIG_IP6_NF_MATCH_MARK=m
++CONFIG_IP6_NF_MATCH_IPV6HEADER=m
++CONFIG_IP6_NF_MATCH_AHESP=m
++CONFIG_IP6_NF_MATCH_LENGTH=m
++CONFIG_IP6_NF_MATCH_EUI64=m
++# CONFIG_IP6_NF_MATCH_PHYSDEV is not set
++CONFIG_IP6_NF_FILTER=m
++CONFIG_IP6_NF_TARGET_LOG=m
++CONFIG_IP6_NF_TARGET_REJECT=m
++CONFIG_IP6_NF_TARGET_NFQUEUE=m
++CONFIG_IP6_NF_MANGLE=m
++CONFIG_IP6_NF_TARGET_MARK=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
++# CONFIG_ATM is not set
++CONFIG_BRIDGE=m
++CONFIG_VLAN_8021Q=m
++# 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=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 is not set
++
++#
++# 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 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=m
++# 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=y
++# CONFIG_CDROM_PKTCDVD is not set
++# CONFIG_ATA_OVER_ETH is not set
++
++#
++# ATA/ATAPI/MFM/RLL support
++#
++# CONFIG_IDE 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=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_FC is not set
++# CONFIG_SCSI_QLOGIC_1280 is not set
++CONFIG_SCSI_QLA2XXX=m
++# 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_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=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=m
++# 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_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
++
++#
++# Obsolete Wireless cards support (pre-802.11)
++#
++# CONFIG_STRIP is not set
++
++#
++# Wireless 802.11b ISA/PCI cards support
++#
++# 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_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 is not set
++CONFIG_PPPOE=m
++# 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_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
++
++#
++# 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=m
++# 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=m
++# 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=m
++# 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 is not set
++# CONFIG_USB_PRINTER is not set
++
++#
++# 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 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
++
++#
++# 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_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 is not set
++
++#
++# Video4Linux support is needed for USB Multimedia device support
++#
++
++#
++# 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_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_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_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
++
++#
++# InfiniBand support
++#
++# CONFIG_INFINIBAND is not set
++
++#
++# SN Devices
++#
++
++#
++# File systems
++#
++CONFIG_EXT2_FS=y
++CONFIG_EXT2_FS_XATTR=y
++CONFIG_EXT2_FS_POSIX_ACL=y
++CONFIG_EXT2_FS_SECURITY=y
++# CONFIG_EXT2_FS_XIP is not set
++CONFIG_EXT3_FS=y
++CONFIG_EXT3_FS_XATTR=y
++CONFIG_EXT3_FS_POSIX_ACL=y
++CONFIG_EXT3_FS_SECURITY=y
++CONFIG_JBD=y
++# CONFIG_JBD_DEBUG is not set
++CONFIG_FS_MBCACHE=y
++CONFIG_REISERFS_FS=m
++# CONFIG_REISERFS_CHECK is not set
++# CONFIG_REISERFS_PROC_INFO is not set
++# CONFIG_REISERFS_FS_XATTR is not set
++# CONFIG_JFS_FS is not set
++CONFIG_FS_POSIX_ACL=y
++# 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=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_RELAYFS_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_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_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_DEBUG_KERNEL=y
++CONFIG_MAGIC_SYSRQ=y
++CONFIG_LOG_BUF_SHIFT=16
++# CONFIG_DETECT_SOFTLOCKUP is not set
++# CONFIG_SCHEDSTATS is not set
++CONFIG_DEBUG_SLAB=y
++# 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_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 is not set
++CONFIG_CRYPTO_MD4=m
++CONFIG_CRYPTO_MD5=m
++CONFIG_CRYPTO_SHA1=m
++CONFIG_CRYPTO_SHA256=m
++CONFIG_CRYPTO_SHA512=m
++CONFIG_CRYPTO_WP512=m
++CONFIG_CRYPTO_TGR192=m
++CONFIG_CRYPTO_DES=m
++CONFIG_CRYPTO_BLOWFISH=m
++CONFIG_CRYPTO_TWOFISH=m
++CONFIG_CRYPTO_SERPENT=m
++CONFIG_CRYPTO_AES=m
++CONFIG_CRYPTO_CAST5=m
++CONFIG_CRYPTO_CAST6=m
++CONFIG_CRYPTO_TEA=m
++CONFIG_CRYPTO_ARC4=m
++CONFIG_CRYPTO_KHAZAD=m
++CONFIG_CRYPTO_ANUBIS=m
++CONFIG_CRYPTO_DEFLATE=m
++CONFIG_CRYPTO_MICHAEL_MIC=m
++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=m
++CONFIG_ZLIB_DEFLATE=m
++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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-g2.c/1.5/Thu Feb 23 10:55:40 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//
++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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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
+@@ -135,8 +135,17 @@
+       return 0;
+ }
++
++static int g2_get_residue(struct dma_channel *chan)
++{
++      unsigned int chan_nr = chan->chan;
++
++      return g2_dma->status[chan_nr].size;
++}
++
+ 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 +157,19 @@
+ static int __init g2_dma_init(void)
+ {
++      int ret;
++
+       setup_irq(HW_EVENT_G2_DMA, &g2_dma_irq);
+       /* 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 +184,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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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//
++/syscalls.S/1.3/Mon Sep 19 19:20:56 2005/-ko/
++/time.c/1.37/Sun Jan 29 17:46:23 2006/-ko/
++/traps.c/1.20/Thu Mar 17 07:40:19 2005/-ko/
++/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.41/Wed Jul  5 14:50:39 2006/-ko/
++/setup.c/1.52/Wed Jul  5 14:50:40 2006/-ko/
++/sh_ksyms.c/1.25/Wed Jul  5 14:50:40 2006//
+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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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/
++/intc2.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/
++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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -0,0 +1 @@
++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh
+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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -0,0 +1,11 @@
++/Makefile/1.12/Sat Jan  7 20:16:39 2006/-ko/
++/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//
++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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -4,7 +4,7 @@
+ 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
+ # Primary on-chip clocks (common)
+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-05 14:57:20.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-05 14:57:20.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/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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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);
+@@ -345,7 +345,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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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/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-05 14:57:20.000000000 +0000
+@@ -28,7 +28,6 @@
+ /* platform dependent support */
+ EXPORT_SYMBOL(dump_fpu);
+-EXPORT_SYMBOL(iounmap);
+ EXPORT_SYMBOL(enable_irq);
+ EXPORT_SYMBOL(disable_irq);
+ EXPORT_SYMBOL(probe_irq_mask);
+@@ -101,6 +100,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 +117,13 @@
+ 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);
++#endif
+ EXPORT_SYMBOL(consistent_sync);
+ 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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -0,0 +1,332 @@
++/*
++ * 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
++
+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-05 14:57:20.000000000 +0000
+@@ -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)
+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-05 14:57:20.000000000 +0000
+@@ -0,0 +1,4 @@
++/Makefile/1.1/Sat Mar 26 20:25:36 2005/-ko/
++/timer-tmu.c/1.3/Sun Jan 29 17:46:24 2006/-ko/
++/timer.c/1.1/Sat Mar 26 20:25:36 2005/-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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -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-05 14:57:20.000000000 +0000
+@@ -87,7 +87,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)
+ {
+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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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/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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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.14/Sat Jan  7 20:12:15 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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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,6 @@
+ EDOSK7705             SH_EDOSK7705
+ SH4202_MICRODEV               SH_SH4202_MICRODEV
+ SH03                  SH_SH03
+-
++LANDISK                       SH_LANDISK
++R7780RP                       SH_R7780RP
++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-05 14:57:20.000000000 +0000
+@@ -0,0 +1,11 @@
++D/char////
++D/i2c////
++D/ide////
++D/input////
++D/mtd////
++D/net////
++D/pcmcia////
++D/serial////
++D/sh////
++D/usb////
++D/video////
+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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -0,0 +1,2 @@
++/ide-cs.c/1.12/Wed Jul  5 14:51:04 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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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->handle);
++              link->conf.ConfigIndex = cfg->index;
++              if (pcmcia_request_window(&link->handle, &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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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/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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -0,0 +1,3 @@
++/Kconfig/1.2/Wed Jul  5 14:51:29 2006//
++/hp680_bl.c/1.5/Wed Jul  5 14:51:29 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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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,6 +64,37 @@
+       current_intensity = intensity;
+ }
++static void hp680bl_blank(int blank)
++{
++      u16 v;
++      
++      switch(blank) {
++
++      case FB_BLANK_NORMAL:
++      case FB_BLANK_VSYNC_SUSPEND:
++      case FB_BLANK_HSYNC_SUSPEND:
++      case FB_BLANK_POWERDOWN:
++              if (hp680bl_powermode == FB_BLANK_UNBLANK) {
++                      hp680bl_send_intensity(0);
++                      hp680bl_powermode = blank;
++                      sh_dac_disable(DAC_LCD_BRIGHTNESS);
++                      v = inw(HD64461_GPBDR);
++                      v |= HD64461_GPBDR_LCDOFF;
++                      outw(v, HD64461_GPBDR);
++              }
++              break;
++      case FB_BLANK_UNBLANK:
++              if (hp680bl_powermode != FB_BLANK_UNBLANK) {
++                      sh_dac_enable(DAC_LCD_BRIGHTNESS);
++                      v = inw(HD64461_GPBDR);
++                      v &= ~HD64461_GPBDR_LCDOFF;
++                      outw(v, HD64461_GPBDR);
++                      hp680bl_powermode = blank;
++                      hp680bl_send_intensity(current_intensity);
++              }
++              break;
++      }
++}
+ #ifdef CONFIG_PM
+ static int hp680bl_suspend(struct platform_device *dev, pm_message_t state)
+@@ -102,6 +133,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",
+@@ -156,13 +189,13 @@
+ static void __exit hp680bl_exit(void)
+ {
+-      platform_device_unregister(hp680bl_device);
++      platform_device_unregister(&hp680bl_device);
+       platform_driver_unregister(&hp680bl_driver);
+ }
+ 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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -0,0 +1,113 @@
++/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//
++/irq-sh7780.h/1.2/Wed Jan 18 01:27:08 2006/-ko/
++/irq.h/1.30/Mon Jan 30 16:12:21 2006/-ko/
++/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//
++/processor.h/1.35/Sun Jan 15 12:11:50 2006/-ko/
++/ptrace.h/1.13/Mon Mar 27 21:06:15 2006//
++/rtc.h/1.5/Fri Sep 24 14:58:00 2004/-ko/
++/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//
++/uaccess.h/1.15/Fri Oct 28 13:12:50 2005/-ko/
++/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//
++/thread_info.h/1.17/Wed Jul  5 14:51:37 2006/-ko/
++/types.h/1.7/Wed Jul  5 14:51:37 2006/-ko/
++/unistd.h/1.28/Wed Jul  5 14:51:37 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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:21.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-05 14:57:20.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-05 14:57:20.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-05 14:57:21.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-05 14:57:20.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-05 14:57:20.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.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-05 14:57:20.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,
+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-05 14:57:20.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-05 14:57:20.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:20.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -265,5 +265,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-05 14:57:21.000000000 +0000
+@@ -0,0 +1,3 @@
++/ide.h/1.1/Sat Jan  7 19:55:57 2006/-ko/
++/r7780rp.h/1.2/Wed Jan 18 05:43:02 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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.000000000 +0000
+@@ -0,0 +1,84 @@
++#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.  */
++
++#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_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 */
++
++#define __IO_PREFIX r7780rp
++#include <asm/io_generic.h>
++
++#endif  /* __ASM_SH_RENESAS_R7780RP */
+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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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/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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.000000000 +0000
+@@ -48,16 +48,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 +78,7 @@
+ /* how to get the thread information struct from ASM */
+ #define GET_THREAD_INFO(reg) \
+-      stc     r7_bank, reg
++      stc     r7_bank, reg
+ #endif
+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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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-05 14:57:20.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
+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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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/localversion-sh linux-2.6.17/localversion-sh
+--- linux-2.6.17-vanilla/localversion-sh       1970-01-01 00:00:00.000000000 +0000
++++ linux-2.6.17/localversion-sh       2006-07-05 14:57:21.000000000 +0000
+@@ -0,0 +1 @@
++-sh
+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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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.2/Mon Jun  5 15:29:08 2006//
++/aica.h/1.1/Sun Jun  4 12:13:05 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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.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-05 14:57:21.000000000 +0000
+@@ -0,0 +1,681 @@
++/*
++* 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 <asm/dreamcast/sysasic.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}}");
++
++/* 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 = SPU_MEMORY_BASE,
++       .flags = IORESOURCE_MEM,
++       .end = SPU_MEMORY_BASE + 0x200000 - 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 + SPU_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 *) (SPU_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(SPU_REGISTER_BASE + (i * 0x80));
++              regval = (regval & ~0x4000) | 0x8000;
++              spu_write_wait();
++              writel(regval, SPU_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_init(void)
++{
++      spu_disable();
++      spu_memset(0, 0, 0x200000 / 4);
++      /* Put ARM7 in endless loop */
++      ctrl_outl(0xea000002, SPU_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 more_spu_dma(void *sstream)
++{
++      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;
++      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 */
++              dreamcastcard->timer.expires = jiffies + 1;
++              add_timer(&(dreamcastcard->timer));
++              return;
++      }
++      if (runtime->channels > 1)
++              dreamcastcard->current_period = play_period;
++      PREPARE_WORK(&spu_dma_work, more_spu_dma, substream);
++      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;
++      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 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 start_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;
++      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);
++}
++
++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, start_spu_dma, substream);
++      queue_work(aica_queue, &spu_dma_work);
++      /* Timer may already be running */
++      if (unlikely(dreamcastcard->timer.data)) {
++              mod_timer(&dreamcastcard->timer, jiffies + 4);
++              return;
++      }
++      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 remove_dreamcastcard(struct device *dreamcast_device)
++{
++      struct snd_card_aica *dreamcastcard = dreamcast_device->driver_data;
++      snd_card_free(dreamcastcard->card);
++      kfree(dreamcastcard);
++      return 0;
++}
++
++static struct device_driver aica_driver = {
++      .name = "AICA",
++      .bus = &platform_bus_type,
++      .remove = remove_dreamcastcard,
++};
++
++/* Fill up the members of the embedded device structure */
++static void populate_dreamcastaicadev(struct device *dev)
++{
++      dev->bus = &platform_bus_type;
++      dev->driver = &aica_driver;
++      driver_register(dev->driver);
++      device_bind_driver(dev);
++}
++
++static int load_aica_firmware(void)
++{
++      int err;
++      const struct firmware *fw_entry;
++      err = 0;
++      spu_init();
++      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 __init aica_init(void)
++{
++      int err;
++      struct snd_card_aica *dreamcastcard;
++      /* Are we in a Dreamcast at all? */
++      if (unlikely(!mach_is_dreamcast()))
++              return -ENODEV;
++      dreamcastcard = kmalloc(sizeof(struct snd_card_aica), GFP_KERNEL);
++      if (unlikely(!dreamcastcard))
++              return -ENOMEM;
++      dreamcastcard->card = snd_card_new(index, "AICA", THIS_MODULE, 0);
++      if (unlikely(!dreamcastcard->card)) {
++              kfree(dreamcastcard);
++              return -ENODEV;
++      }
++      strcpy(dreamcastcard->card->driver, "snd_aica");
++      strcpy(dreamcastcard->card->shortname, "AICA");
++      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;
++      pd = platform_device_register_simple(dreamcastcard->card->driver,
++                                           -1, aica_memory_space, 2);
++      if (unlikely(IS_ERR(pd))) {
++              err = PTR_ERR(pd);
++              goto freepcm;
++      }
++      populate_dreamcastaicadev(&pd->dev);
++      snd_card_set_dev(dreamcastcard->card, &pd->dev);
++      pd->dev.driver_data = dreamcastcard;
++      dreamcastcard->timer.data = 0;
++      dreamcastcard->channel = NULL;
++      /* Load the firmware */
++      err = load_aica_firmware();
++      if (unlikely(err < 0))
++              goto freedreamcast;
++      /* 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;
++      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;
++      freepcm:
++      freedreamcast:
++      snd_card_free(dreamcastcard->card);
++      if (pd) {
++              struct device_driver *drv = (&pd->dev)->driver;
++              device_release_driver(&pd->dev);
++              driver_unregister(drv);
++              platform_device_unregister(pd);
++              pd = NULL;
++      }
++      kfree(dreamcastcard);
++      return err;
++}
++
++static void __exit aica_exit(void)
++{
++      struct device_driver *drv = (&pd->dev)->driver;
++      flush_workqueue(aica_queue);
++      destroy_workqueue(aica_queue);
++      device_release_driver(&pd->dev);
++      driver_unregister(drv);
++      platform_device_unregister(pd);
++      /* Kill any sound still playing and reset ARM7 to safe state */
++      spu_init();
++}
++
++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-05 14:57:21.000000000 +0000
+@@ -0,0 +1,87 @@
++/* aica.h
++ * Header file for ALSA driver for
++ * Sega Dreamcast Yamaha AICA sound
++ * Copyright Adrian McMenamin
++ * <adrian@mcmen.demon.co.uk>
++ * 2006
++ *
++ * 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
++ *
++ */
++
++/* SPU memory and register constants etc */
++#define G2_FIFO 0xa05f688c
++#define SPU_MEMORY_BASE 0xA0800000
++#define ARM_RESET_REGISTER 0xA0702C00
++#define SPU_REGISTER_BASE 0xA0700000
++
++
++
++/* AICA channels stuff */
++
++#define AICA_CONTROL_POINT 0xA0810000
++#define AICA_CONTROL_CHANNEL_SAMPLE_NUMBER 0xA0810008
++#define AICA_CHANNEL0_CONTROL_OFFSET 0x10004
++
++/* 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
++
++
++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;
++      struct work_struct work;
++      struct work_struct work2;
++      struct workqueue_struct *workqueue;
++};
++
++
diff --git a/packages/linux/linux-jlime-sh3-2.6.17/defconfig_jlime b/packages/linux/linux-jlime-sh3-2.6.17/defconfig_jlime
new file mode 100644 (file)
index 0000000..2b1aeec
--- /dev/null
@@ -0,0 +1,1138 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.17
+# Wed Jul  5 15:21:05 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=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 is not set
+# 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_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=y
+CONFIG_MODVERSIONS=y
+# 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=y
+# 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 is not set
+# CONFIG_SH_UNKNOWN is not set
+
+#
+# Processor selection
+#
+CONFIG_CPU_SH3=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=y
+
+#
+# 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 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=0x00400000
+
+#
+# Processor features
+#
+CONFIG_CPU_LITTLE_ENDIAN=y
+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=22110000
+
+#
+# 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=y
+CONFIG_HD64461=y
+# CONFIG_HD64465 is not set
+CONFIG_HD64461_IRQ=36
+CONFIG_HD64461_IOBASE=0xb0000000
+CONFIG_HD64461_ENABLER=y
+
+#
+# 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_ISA=y
+# CONFIG_PCI is not set
+
+#
+# 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
+
+#
+# PC-card bridges
+#
+# CONFIG_I82365 is not set
+# CONFIG_TCIC is not set
+CONFIG_HD64461_PCMCIA=y
+CONFIG_HD64461_PCMCIA_SOCKETS=1
+CONFIG_PCMCIA_PROBE=y
+
+#
+# PCI Hotplug Support
+#
+
+#
+# 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=y
+CONFIG_PM_LEGACY=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_APM=y
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_NETDEBUG=y
+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 is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+# CONFIG_IP_PNP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+CONFIG_IPV6=y
+# CONFIG_IPV6_PRIVACY is not set
+# CONFIG_IPV6_ROUTER_PREF is not set
+# CONFIG_INET6_AH is not set
+# CONFIG_INET6_ESP is not set
+# CONFIG_INET6_IPCOMP is not set
+# CONFIG_INET6_XFRM_TUNNEL is not set
+# CONFIG_INET6_TUNNEL is not set
+# CONFIG_IPV6_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 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=m
+
+#
+# IrDA protocols
+#
+CONFIG_IRLAN=m
+CONFIG_IRNET=m
+# CONFIG_IRCOMM is not set
+# CONFIG_IRDA_ULTRA is not set
+
+#
+# IrDA options
+#
+# CONFIG_IRDA_CACHE_LAST_LSAP is not set
+# CONFIG_IRDA_FAST_RR is not set
+# CONFIG_IRDA_DEBUG is not set
+
+#
+# Infrared-port device drivers
+#
+
+#
+# SIR device drivers
+#
+# CONFIG_IRTTY_SIR is not set
+
+#
+# Dongle support
+#
+
+#
+# Old SIR device drivers
+#
+CONFIG_IRPORT_SIR=m
+
+#
+# Old Serial dongle support
+#
+# CONFIG_DONGLE_OLD is not set
+
+#
+# FIR device drivers
+#
+CONFIG_BT=m
+CONFIG_BT_L2CAP=m
+CONFIG_BT_SCO=m
+CONFIG_BT_RFCOMM=m
+# CONFIG_BT_RFCOMM_TTY is not set
+CONFIG_BT_BNEP=m
+# CONFIG_BT_BNEP_MC_FILTER is not set
+# CONFIG_BT_BNEP_PROTO_FILTER is not set
+CONFIG_BT_HIDP=m
+
+#
+# Bluetooth device drivers
+#
+CONFIG_BT_HCIUART=m
+CONFIG_BT_HCIUART_H4=y
+CONFIG_BT_HCIUART_BCSP=y
+CONFIG_BT_HCIDTL1=m
+CONFIG_BT_HCIBT3C=m
+CONFIG_BT_HCIBLUECARD=m
+CONFIG_BT_HCIBTUART=m
+CONFIG_BT_HCIVHCI=m
+CONFIG_IEEE80211=m
+# CONFIG_IEEE80211_DEBUG is not set
+CONFIG_IEEE80211_CRYPT_WEP=m
+# CONFIG_IEEE80211_CRYPT_CCMP is not set
+# CONFIG_IEEE80211_CRYPT_TKIP is not set
+# CONFIG_IEEE80211_SOFTMAC is not set
+CONFIG_WIRELESS_EXT=y
+
+#
+# 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=y
+# CONFIG_PNP_DEBUG is not set
+
+#
+# Protocols
+#
+# CONFIG_ISAPNP is not set
+
+#
+# Block devices
+#
+# 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_RAM is not set
+# 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=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=y
+# CONFIG_BLK_DEV_IDECS 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 is not set
+# CONFIG_BLK_DEV_IDEPNP is not set
+CONFIG_IDE_SH=y
+# CONFIG_IDE_ARM is not set
+# CONFIG_IDE_CHIPSETS 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
+
+#
+# Old CD-ROM drivers (not SCSI, not IDE)
+#
+# CONFIG_CD_NO_IDESCSI 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
+#
+
+#
+# I2O device support
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+CONFIG_DUMMY=y
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_NET_SB1000 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=m
+# CONFIG_STNIC 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
+# 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 is not set
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# 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
+# CONFIG_ARLAN is not set
+# CONFIG_WAVELAN is not set
+CONFIG_PCMCIA_WAVELAN=m
+CONFIG_PCMCIA_NETWAVE=m
+
+#
+# Wireless 802.11 Frequency Hopping cards support
+#
+CONFIG_PCMCIA_RAYCS=m
+
+#
+# Wireless 802.11b ISA/PCI cards support
+#
+CONFIG_HERMES=m
+CONFIG_ATMEL=m
+
+#
+# Wireless 802.11b Pcmcia/Cardbus cards support
+#
+CONFIG_PCMCIA_HERMES=m
+CONFIG_PCMCIA_SPECTRUM=m
+CONFIG_AIRO_CS=m
+CONFIG_PCMCIA_ATMEL=m
+CONFIG_PCMCIA_WL3501=m
+CONFIG_HOSTAP=m
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+CONFIG_HOSTAP_CS=m
+CONFIG_NET_WIRELESS=y
+
+#
+# PCMCIA network device support
+#
+CONFIG_NET_PCMCIA=y
+CONFIG_PCMCIA_3C589=m
+CONFIG_PCMCIA_3C574=m
+CONFIG_PCMCIA_FMVJ18X=m
+CONFIG_PCMCIA_PCNET=m
+CONFIG_PCMCIA_NMCLAN=m
+CONFIG_PCMCIA_SMC91C92=m
+CONFIG_PCMCIA_XIRC2PS=m
+CONFIG_PCMCIA_AXNET=m
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+CONFIG_PPP=m
+# CONFIG_PPP_MULTILINK is not set
+# CONFIG_PPP_FILTER is not set
+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 is not set
+# CONFIG_SLIP_SMART is not set
+# CONFIG_SLIP_MODE_SLIP6 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=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=240
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_TSDEV=y
+CONFIG_INPUT_TSDEV_SCREEN_X=640
+CONFIG_INPUT_TSDEV_SCREEN_Y=240
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+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=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
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+# CONFIG_SERIO_I8042 is not set
+# CONFIG_SERIO_SERPORT is not set
+# CONFIG_SERIO_RAW 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_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=8
+
+#
+# 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
+
+#
+# Ftape, the floppy tape device driver
+#
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 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=y
+CONFIG_FB_CFB_FILLRECT=y
+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
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_HIT=y
+# CONFIG_FB_VIRTUAL is not set
+
+#
+# Console display driver support
+#
+# CONFIG_MDA_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 is not set
+# CONFIG_FONT_8x16 is not set
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+CONFIG_FONT_PEARL_8x8=y
+# 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
+#
+# CONFIG_LOGO is not set
+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
+
+#
+# Sound
+#
+CONFIG_SOUND=y
+
+#
+# Advanced Linux Sound Architecture
+#
+# CONFIG_SND is not set
+
+#
+# Open Sound System
+#
+CONFIG_SOUND_PRIME=y
+# CONFIG_SOUND_MSNDCLAS is not set
+# CONFIG_SOUND_MSNDPIN is not set
+CONFIG_SOUND_SH_DAC_AUDIO=y
+CONFIG_SOUND_SH_DAC_AUDIO_CHANNEL=1
+
+#
+# USB support
+#
+# 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'
+#
+
+#
+# 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
+#
+
+#
+# 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 is not set
+# 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 is not set
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+CONFIG_AUTOFS4_FS=y
+# 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 is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+# CONFIG_TMPFS is not set
+# CONFIG_HUGETLBFS is not set
+# CONFIG_HUGETLB_PAGE is not set
+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=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=m
+CONFIG_NLS_CODEPAGE_737=m
+CONFIG_NLS_CODEPAGE_775=m
+CONFIG_NLS_CODEPAGE_850=y
+CONFIG_NLS_CODEPAGE_852=y
+CONFIG_NLS_CODEPAGE_855=m
+CONFIG_NLS_CODEPAGE_857=m
+CONFIG_NLS_CODEPAGE_860=m
+CONFIG_NLS_CODEPAGE_861=m
+CONFIG_NLS_CODEPAGE_862=m
+CONFIG_NLS_CODEPAGE_863=m
+CONFIG_NLS_CODEPAGE_864=m
+CONFIG_NLS_CODEPAGE_865=m
+CONFIG_NLS_CODEPAGE_866=m
+CONFIG_NLS_CODEPAGE_869=m
+CONFIG_NLS_CODEPAGE_936=m
+CONFIG_NLS_CODEPAGE_950=m
+CONFIG_NLS_CODEPAGE_932=m
+CONFIG_NLS_CODEPAGE_949=m
+CONFIG_NLS_CODEPAGE_874=m
+CONFIG_NLS_ISO8859_8=m
+CONFIG_NLS_CODEPAGE_1250=m
+CONFIG_NLS_CODEPAGE_1251=m
+CONFIG_NLS_ASCII=m
+CONFIG_NLS_ISO8859_1=y
+CONFIG_NLS_ISO8859_2=y
+CONFIG_NLS_ISO8859_3=y
+CONFIG_NLS_ISO8859_4=y
+CONFIG_NLS_ISO8859_5=m
+CONFIG_NLS_ISO8859_6=m
+CONFIG_NLS_ISO8859_7=m
+CONFIG_NLS_ISO8859_9=m
+CONFIG_NLS_ISO8859_13=m
+CONFIG_NLS_ISO8859_14=m
+CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_KOI8_R=m
+CONFIG_NLS_KOI8_U=m
+CONFIG_NLS_UTF8=m
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# 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_DEBUG_FS is not set
+# CONFIG_SH_STANDARD_BIOS 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=m
+CONFIG_CRYPTO_MD4=m
+CONFIG_CRYPTO_MD5=m
+CONFIG_CRYPTO_SHA1=m
+CONFIG_CRYPTO_SHA256=m
+CONFIG_CRYPTO_SHA512=m
+CONFIG_CRYPTO_WP512=m
+CONFIG_CRYPTO_TGR192=m
+CONFIG_CRYPTO_DES=m
+CONFIG_CRYPTO_BLOWFISH=m
+CONFIG_CRYPTO_TWOFISH=m
+CONFIG_CRYPTO_SERPENT=m
+CONFIG_CRYPTO_AES=m
+CONFIG_CRYPTO_CAST5=m
+CONFIG_CRYPTO_CAST6=m
+CONFIG_CRYPTO_TEA=m
+CONFIG_CRYPTO_ARC4=m
+CONFIG_CRYPTO_KHAZAD=m
+CONFIG_CRYPTO_ANUBIS=m
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_MICHAEL_MIC=m
+CONFIG_CRYPTO_CRC32C=m
+CONFIG_CRYPTO_TEST=m
+
+#
+# Hardware crypto devices
+#
+
+#
+# Library routines
+#
+CONFIG_CRC_CCITT=y
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_DEFLATE=m
diff --git a/packages/linux/linux-jlime-sh3_2.6.17.bb b/packages/linux/linux-jlime-sh3_2.6.17.bb
new file mode 100644 (file)
index 0000000..185f118
--- /dev/null
@@ -0,0 +1,31 @@
+SECTION = "kernel"
+DESCRIPTION = "JLime Linux kernel for SuperH based Jornada 6xx"
+LICENSE = "GPL"
+PR = "r0"
+
+COMPATIBLE_HOST = "sh.*-linux"
+#COMPATIBLE_MACHINE = "jornada6xx"
+
+SRC_URI = "http://www.kernel.orgm/pub/linux/kernel/v2.6/linux-2.6.17.tar.gz \
+           file://defconfig_jlime \
+          file://LinuxSH-2.6.17.patch;patch=0"
+                           
+S = "${WORKDIR}/linux-${PV}"
+
+inherit kernel
+
+#Lets let 3.4.x handle the compilation of this one
+KERNEL_CCSUFFIX = "-3.4.4"
+
+ARCH = "arm"
+KERNEL_IMAGETYPE = "zImage"
+FILES_kernel-image = "/boot/${KERNEL_IMAGETYPE}*"
+
+do_configure_prepend() {
+       install -m 0644 ${WORKDIR}/defconfig_jlime ${S}/.config
+}
+
+do_deploy() {
+        install -d ${DEPLOY_DIR_IMAGE}
+       install -m 0644 arch/$(ARCH)/boot/$(KERNEL_IMAGETYPE) $(DEPLOY_DIR)/images/$(KERNEL_IMAGETYPE)
+}