diff options
Diffstat (limited to 'packages/linux/linux-jlime-jornada6xx-2.6.17/LinuxSH-2.6.17.patch')
-rw-r--r-- | packages/linux/linux-jlime-jornada6xx-2.6.17/LinuxSH-2.6.17.patch | 56279 |
1 files changed, 56279 insertions, 0 deletions
diff --git a/packages/linux/linux-jlime-jornada6xx-2.6.17/LinuxSH-2.6.17.patch b/packages/linux/linux-jlime-jornada6xx-2.6.17/LinuxSH-2.6.17.patch new file mode 100644 index 0000000000..104b2e6a89 --- /dev/null +++ b/packages/linux/linux-jlime-jornada6xx-2.6.17/LinuxSH-2.6.17.patch @@ -0,0 +1,56279 @@ +diff -ruN linux-2.6.17-vanilla/CVS/Entries linux-2.6.17/CVS/Entries +--- linux-2.6.17-vanilla/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/CVS/Entries 2006-07-12 16:54:18.000000000 +0000 +@@ -0,0 +1,21 @@ ++/.cvsignore/1.1/Wed May 12 13:52:16 2004/-ko/ ++/ChangeLog-1999/1.1.1.1/Mon Oct 15 20:44:29 2001// ++/ChangeLog-2000/1.1.1.1/Mon Oct 15 20:44:31 2001// ++/ChangeLog-2001/1.1/Mon Jan 7 03:57:47 2002/-ko/ ++/ChangeLog-2002/1.3/Sun May 4 19:29:45 2003// ++/ChangeLog-2003/1.2/Sun Jan 4 18:29:21 2004// ++/ChangeLog-2004/1.1/Mon Jan 31 12:17:59 2005/-ko/ ++/ChangeLog-2005/1.1/Fri Jan 27 16:07:15 2006/-ko/ ++D/Documentation//// ++D/arch//// ++D/drivers//// ++D/include//// ++D/lib//// ++D/mm//// ++D/net//// ++D/scripts//// ++D/sound//// ++/AGAINST-2.6.17/1.1/Wed Jul 5 08:46:47 2006/-ko/ ++/ChangeLog/1.366/Wed Jul 5 07:19:04 2006/-ko/ ++/Makefile/1.102/Wed Jul 5 14:49:57 2006/-ko/ ++/localversion-sh/1.1/Wed Jul 5 07:22:47 2006/-ko/ +diff -ruN linux-2.6.17-vanilla/CVS/Entries.Log linux-2.6.17/CVS/Entries.Log +--- linux-2.6.17-vanilla/CVS/Entries.Log 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/CVS/Entries.Log 2006-07-12 16:54:18.000000000 +0000 +@@ -0,0 +1,6 @@ ++A D/fs//// ++A D/init//// ++A D/kernel//// ++R D/kernel//// ++R D/init//// ++R D/fs//// +diff -ruN linux-2.6.17-vanilla/CVS/Repository linux-2.6.17/CVS/Repository +--- linux-2.6.17-vanilla/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/CVS/Repository 2006-07-12 16:54:18.000000000 +0000 +@@ -0,0 +1 @@ ++linux +diff -ruN linux-2.6.17-vanilla/CVS/Root linux-2.6.17/CVS/Root +--- linux-2.6.17-vanilla/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/CVS/Root 2006-07-12 16:54:18.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/ChangeLog linux-2.6.17/ChangeLog +--- linux-2.6.17-vanilla/ChangeLog 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/ChangeLog 2006-07-12 16:54:18.000000000 +0000 +@@ -0,0 +1,19 @@ ++2006-06-05 Adrian McMenamin <adrian@mcmen.demon.co.uk> ++ ++ Dreamcast AICA driver tidy ++ ++ * sound/sh/aica.c: code tidying of whitespace and returns ++ * sound/sh/Kconfig: tidying ++ ++ ++2006-06-04 Adrian McMenamin <adrian@mcmen.demon.co.uk> ++ ++ Dreamcast AICA sound support added ++ ++ * sound/Kconfig: Added here and updated to support ALSA SH devices ++ * sound/Makefile: Added here and updated to support ALSA SH devices ++ * sound/sh: New directory to hold ALSA files for SH devices ++ * sound/sh/aica.c: New file to add AICA sound support ++ * sound/sh/aica.h: Header to upport AICA sound ++ * sound/sh/Kconfig: New file to add AICA sound support ++ * sound/sh/Makefile: New file required to add AICA sound support +diff -ruN linux-2.6.17-vanilla/ChangeLog-1999 linux-2.6.17/ChangeLog-1999 +--- linux-2.6.17-vanilla/ChangeLog-1999 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/ChangeLog-1999 2006-07-12 16:54:18.000000000 +0000 +@@ -0,0 +1,902 @@ ++1999-12-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/sys_sh.c (do_mmap2, old_mmap, sys_mmap2): Follow ++ the change of 2.3.32. ++ ++ * arch/sh/kernel/head.S (_start): Change the name of label from _stext. ++ ++ * include/linux/linkage.h: Dont prepend "_" for label. ++ * arch/sh/vmlinux.lds.S: Likewise. ++ * include/asm-sh/system.h (switch_to): Likewise. ++ ++ * include/asm-sh/stat.h: Follow the change of 2.3.34. ++ ++ * arch/sh/kernel/entry.S: Added getrlimit, mmap2, truncate64, ++ ftruncate64, stat64, lstat64, and fstat64. ++ * include/asm-sh/unistd.h: Likewise. ++ ++1999-12-22 John Hassey <hassey@gte.net> ++ ++ * arch/sh/kernel/irq_onchip.c (init_IRQ): Initialize the interrupt ++ controller. ++ ++1999-12-19 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/defconfig: Updated. ++ * arch/sh/config.in (CONFIG_SUPERH): Defined. ++ (CONFIG_CF_ENABLER): New config. ++ ++ * arch/sh/kernel/irq_imask.c: New file. ++ * arch/sh/kernel/entry.S (restore_all): Inherit IMASK of SR. ++ * arch/sh/kernel/Makefile: Use CONFIG_CF_ENABLER. ++ * arch/sh/kernel/cf-enabler.c: New file. ++ ++ * include/asm-sh/irq.h (TIMER_PRIORITY): Changed from 1. ++ The reason is for my board. Should consider later. ++ ++1999-12-14 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/string.h (struct_cpy): Follow the changes of ++ 2.3.32. ++ * arch/sh/kernel/process.c (copy_thread): Use struct_cpy. ++ ++1999-12-12 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/config.in: Added PCI support configuration. ++ * arch/sh/kernel/time.c (get_cpu_mhz): New function. ++ ++1999-12-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/cache.h: Follow the change of 2.3.30. ++ ++1999-12-09 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/irq.h (TIMER_IPR_OFFSET): Spell fixed. ++ ++1999-12-07 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgtable.h: Updated for 2.3.30. ++ * include/asm-sh/pgtable-2level.h (set_pte, set_pmd, set_pgd): Added. ++ * include/asm-sh/page.h (__pte, __pmd, __pgd): Added. ++ * include/asm-sh/hardirq.h: Follow the change of 2.3.30. ++ ++ * arch/sh/mm/init.c (__handle_bad_pmd, __handle_bad_pmd_kernel, ++ get_pte_kernel_slow, get_pte_slow): Use set_pmd. ++ * include/asm-sh/pgalloc.h (pte_alloc_kernel, pte_alloc): Ditto. ++ ++1999-11-30 Toshiharu Nozawa <nozawat@hitachi-ul.co.jp> ++ ++ * arch/sh/kernel/time.c (time_init): Implement better mesurement ++ using RTC interrupt. ++ ++1999-11-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/setup.c (setup_arch): Updated for 2.3.30. ++ * include/asm-sh/io.h (IO_SPACE_LIMIT): Added for 2.3.30. ++ (inw_p, outw_p): Added. ++ ++ * include/asm-sh/ide.h (ide_default_io_base): Changed for my board. ++ * include/asm-sh/hdreg.h (ide_ioreg_t): Changed to unsigend int. ++ ++ * arch/sh/config.in: Added block device configuration. ++ ++1999-11-26 Toshiharu Nozawa <nozawat@hitachi-ul.co.jp> ++ ++ * drivers/char/sh-scif.c (sci_receive_chars): Add dummy read ++ before clearing flag. ++ ++ * arch/sh/kernel/time.c (time_init): Implement better mesurement. ++ ++1999-11-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgalloc.h: New file. ++ * include/asm-sh/pgalloc-2level.h: New file. ++ * arch/sh/kernel/pci-sh.c: New file. ++ * include/asm-sh/pci.h: New file. ++ * arch/sh/kernel/irq.c: Follow the changes of 2.3.29. ++ * arch/sh/mm/init.c, arch/sh/mm/fault.c, arch/sh/mm/ioremap.c: ++ Likewise. ++ ++ * include/asm-sh/highmem.h: Removed. ++ ++1999-11-23 Toshiharu Nozawa <nozawat@hitachi-ul.co.jp> ++ ++ * arch/sh/kernel/time.c (time_init): Implement getting clock ++ (system clock and module clock) information. ++ ++1999-11-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/char/{sh-scif.c,sh-sci.c}: Avoid race conditions. ++ Don't initialize the module if c_cflags is same. ++ ++1999-11-17 Toshiharu Nozawa <nozawat@hitachi-ul.co.jp> ++ ++ * drivers/char/sh-scif.c: Use ctrl_in, ctrl_out for SCSCR, SCSMR ++ and SCFCR. It's accessed as byte for SH-3. ++ ++1999-11-16 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/io.h (ctrl_in, ctrl_out): New macro. ++ ++1999-11-15 Sugioka Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/entry.S (system_call): Bug fix. Change ++ cmp/ge --> cmp/hs. ++ ++1999-11-14 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/irq_onchip.c: Include <linux/config.h>. ++ ++ * include/asm-sh/dma.h: Include <asm/io.h>. ++ ++ * include/asm-sh/div64.h: New file. ++ ++ * arch/sh/kernel/process.c (get_wchan): New function. ++ ++ * arch/sh/mm/init.c (paging_init,mem_init,si_meminfo): Follow the ++ changes of 2.2.27. ++ * include/asm-sh/processor.h (KSTK_EIP, KSTK_ESP): Ditto. ++ ++ * drivers/char/sh-scif.c: Incorporate changes of sh-sci.c, ++ to be real TTY support. ++ ++1999-11-10 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache.c (__flush_page_to_ram): Renamed from ++ flush_page_to_ram. ++ ++ * include/asm-sh/dma.h (MAX_DMA_ADDRESS): Add __MEMORY_START. ++ * include/asm-sh/pgtable.h (page_pte_prot): Removed. ++ (__flush_page_to_ram): Renamed from flush_page_to_ram. ++ (flush_page_to_ram): New Macro. ++ ++1999-11-10 YAEGASHI Takeshi <yaegashi@ma.kcom.ne.jp> ++ ++ * include/asm-sh/pgtable.h (_PAGE_CHG_MASK, PAGE_NONE, ++ PAGE_SHARED, PAGE_COPY, PAGE_READONLY, PAGE_KERNEL, ++ PAGE_KERNEL_RO): Add _PAGE_CACHABLE. ++ ++1999-11-06 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/mmu_context.h (set_asid): Don't change ++ the value of other part of PTEH. ++ ++ * include/asm-sh/shmparam.h (SHMLBA): Incorporate the changes ++ of pre-2.3.26-2. ++ ++1999-11-05 YAEGASHI Takeshi <yaegashi@ma.kcom.ne.jp> ++ ++ * arch/sh/kernel/sys_sh.c (sys_mmap): Bug fix for arguments. ++ ++1999-11-03 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/page.h (__pa,__va,MAP_NR): Changed not using ++ __PAGE_OFFSET. ++ ++ * arch/sh/kernel/setup.c (parse_mem_cmdline): Followed the changes ++ of __pa and __va. ++ ++ * include/asm-sh/pgtable-2level.h (SWP_ENTRY): Moved to pgtable.h. ++ * include/asm-sh/page.h (__pte,__pmd,__pgd): Removed. ++ ++ Do we need getrlimit changes? ++ ++1999-10-31 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/fault.c (__flush_tlb_page): Bug fix. Set ASID before ++ doing the flush of TLB. ++ ++ Cosmetic changes around SuperH MM. ++ * arch/sh/mm/fault.c (update_mmu_cache): Don't set PTEH register. ++ ++ * arch/sh/kernel/process.c (copy_thread): Removed setting ++ p->mm->context. It's done in copy_mm. ++ * include/asm-sh/mmu_context.h (destroy_context): Don't ++ need to reset mm->context. ++ ++1999-10-30 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/fault.c: Handle TLB miss of vmalloc area. ++ ++ * drivers/char/sh-sci.c: Include serialP.h, not include ++ serial_reg.h. ++ (sci_transmit_chars): Bug fix. Clear GS_TX_INTEN flag ++ when clearing TIE flag. ++ ++1999-10-29 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/resource.h (INIT_RLIMITS): Follow the change ++ of 2.3.24. ++ * include/asm-sh/pgtable-2level.h (pgd_clear): Do nothing. ++ * arch/sh/kernel/setup.c (setup_arch): Follow the changes of ++ 2.3.24. ++ ++ * include/asm-sh/uaccess.h (__strnlen_user): Minor fix. ++ ++1999-10-28 YAEGASHI Takeshi <yaegashi@ma.kcom.ne.jp> ++ ++ * arch/sh/lib/checksum.S: Bug fix. Change bf/s --> bt/s. ++ ++1999-10-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/uaccess.h (__strnlen_user): Bug fix. Don't ++ fetch the memory over the boundary. ++ (strnlen_user): Bug fix. 'n ' could be large value when it's ++ used through strlen_user. Don't use access_ok with 'n'. ++ ++1999-10-27 YAEGASHI Takeshi <yaegashi@ma.kcom.ne.jp> ++ ++ * arch/sh/kernel/irq_onchip.c: Support extended on-chip I/O. ++ * include/asm-sh/irq.h (NR_IRQS): Ditto. ++ ++ * include/asm-sh/io.h (outsb,outsw,outsl,insb,insw,insl): Added. ++ ++ * drivers/char/sh-scif.c: Add SH-3 support. ++ ++ * arch/sh/kernel/time.c (do_timer_interrupt): Increment the ++ register. ++ ++ * arch/sh/kernel/entry.S (INTEVT): Use INTEVTE2 for SH7709. ++ ++ * arch/sh/config.in: Introduce CONFIG_CPU_SUBTYPE. ++ Config added for Network device drivers. ++ ++1999-10-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/string.h (memscan): Bug fix. Use memchr. ++ ++ * include/asm-sh/bitops.h (ext2_set_bit and others): Little ++ endian support. ++ ++ * arch/sh/kernel/head.S: Remove entry for MEMORY_END, followed ++ changes of setup.c. Reported by Jiu Zheng. ++ ++1999-10-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/spinlock.h: This file is used only for SMP. ++ Reported by Manfred Spraul. ++ ++1999-10-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/ioctls.h ++ (TCGETS,TCSETS,TCSETSW,TCSETSF,TIOCGLCKTRMIOS,TIOCSLCKTRMIOS): Use ++ Immediate 0x54XX value as struct termios is different between ++ kernel and glibc. ++ ++ * arch/sh/kernel/entry.S (system_call): Add debug output to LED. ++ ++ * drivers/char/sh-sci.c (sci_set_real_termios): Bug fix. ++ Enable receive interrupt, or we lose inputs. ++ ++1999-10-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgtable.h (pte_pagenr): substract the offset ++ __MEMORY_START. ++ (mk_pte): add the offset __MEMORY_START. ++ ++1999-10-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/setup.c (setup_arch): Follow the change of 2.3.23. ++ * arch/sh/mm/init.c (show_mem, pageing_init, mem_init, and bad ++ page handling): Follow the change of 2.3.23. ++ * include/asm-sh/highmem.h, include/asm-sh/pgtable-2level.h: New ++ headers. ++ * include/asm-sh/dma.h (MAX_DMA_ADDRESS): Defined. ++ * include/asm-sh/pgtable.h: Follow the changes of 2.3.23. ++ * drivers/char/{sh-scif.c,sh-sci.c} (serial_console_init): ++ Follow the interface change of 2.3.23. ++ ++ * arch/sh/kernel/setup.c (MEMORY_END): Removed. ++ ++1999-10-21 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (restore_all, debug): Bug fix. Fix SSR ++ race condition (SSR could be modified by interrupts). ++ ++1999-10-20 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/system.h (__sti,__cli,__save_and_cli): Relax the ++ register constraints. ++ (__save_and_cli): Improve a bit. ++ ++1999-10-19 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/char/{sh-scif.c,sh-sci.c}: Bug fix. FLAGS is long ++ instead of short. Fix typo for cli (not cil). ++ Thanks to Alexei Minayev and Jiu Zheng. ++ ++ * arch/sh/kernel/irq_onchip.c (disable_onChip_irq, ++ enable_onChip_irq): Protect critical regions. ++ ++1999-10-17 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/string.h (__HAVE_ARCH_MEMCHR): Defined. ++ * arch/sh/lib/memchr.S: New file. ++ ++ * include/asm-sh/spinlock.h: Merged with Kaz'. ++ ++ * arch/sh/kernel/setup.c (setup_arch): Set command_line. ++ ++ * arch/sh/kernel/entry.S (exception_handling_table): Set ++ 'none' for entry #0, to avoid spurious interrupt. Questionable. ++ ++1999-10-16 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/char/{sh-scif.c,sh-sci.c}: Protect critical regions. ++ Bug fix for sci_chars_in_buffer (it's for *transmit* not receive). ++ ++1999-10-15 Tetsuya Okada <okayan@c-creators.co.jp> ++ ++ * arch/sh/config.in, arch/sh/kernel/time.c (set_rtc_time): ++ Implemented. ++ ++1999-10-14 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (system_call): Bug fix of the case ++ with arguments on the stack. ++ ++1999-10-12 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/uaccess.h (__strnlen_user,strnlen_user): Changed ++ from {__,}strlen_user. ++ ++ * arch/sh/kernel/entry.S (sys_call_table): sys_mmap. ++ * arch/sh/kernel/sys_sh.c (sys_mmap): Implemented. ++ ++1999-10-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/char/{sh-scif.c,sh-sci.c} (gdb_detach): ++ Conditionalize the interaction with the value of in_gdb. ++ ++ * arch/sh/mm/init.c (paging_init): Initialize asid. ++ ++ * arch/sh/kernel/irq_onchip.c (no_irq_type): Moved to irq.c. ++ ++ * include/asm-sh/checksum.h (ip_fast_csum): cmp/eq works only ++ for register "r0". ++ Thanks to Mikhail Sogrine <sogrine@Informatik.Uni-Tuebingen.De> ++ and Tetsuya Okada <okayan@c-creators.co.jp> ++ ++1999-10-10 Tetsuya Okada <okayan@c-creators.co.jp> ++ ++ * arch/sh/kernel/time.c (get_rtc_time): Implemented for on chip ++ RTC. ++ ++1999-10-09 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (none): Do nothing for NMI. ++ ++ * drivers/char/sh-scif.c (sci_transmit_chars,sci_receive_chars): ++ Bug fix for counting room. ++ ++1999-10-06 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/{signal.h,socket.h,termbits.h,termios.h,types.h}: ++ Updated. ++ ++ * include/asm-sh/smplock.h: Merge Kaz's. And rename it from ++ smp_lock.h. ++ ++1999-10-05 Sugioka Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/mm/init.c: Initialized to MMU_CONTEXT_FIRST_VERSION. ++ ++1999-10-05 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/vmlinux.lds.S: New section ".empty_zero_page". ++ ++ * drivers/char/sh-scif.c (gdb_detach): Change trap #. ++ (SCSCR_INIT): New macro. ++ (SCI_IRP_OFFSET): Bug fix. ++ ++ * arch/sh/kernel/entry.S (fixup_syscall_argerr): Implemented. ++ ++ * include/asm-sh/uaccess.h: Use .balign. ++ ++1999-10-04 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/char/sh-sci.c: Implement TTY. ++ ++ * drivers/char/sh-scif.c (sci_enable_tx_interrupts): Handle ++ interrupt request flag correctly. ++ (sci_interrupt): Call sci_enable_tx_interrupts. ++ ++1999-10-03 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/irq_onchip.c ++ (enable_onChip_irq,disable_onChip_irq): Fixed the address ++ calculation. ++ ++1999-10-02 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/ioctls.h (TIOCMBIS,TIOCMBIC,TIOCMSET): Fixed the ++ typo of type. ++ ++ * arch/sh/kernel/entry.S (handle_exception): Fixed the entry ++ position. ++ ++ * drivers/char/sh-scif.c: Implement serial TTY. ++ ++1999-10-01 Tetsuya Okada <okayan@c-creators.co.jp> ++ ++ * drivers/char/sh-scif.c: Conditionalize with ++ CONFIG_DEBUG_KERNEL_WITH_GDB_STUB. ++ ++1999-09-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/config.in(CONFIG_MEMORY_END): Removed. ++ ++ * arch/sh/vmlinux.lds.S (section .data.disk_image): Removed. ++ ++ * arch/sh/kernel/test-img.c: Removed. ++ * arch/sh/kernel/Makefile(O_OBJS): Remove test-img.o. ++ ++ * arch/sh/kernel/signal.c (setup_frame,setup_rt_frame): Bug fix ++ for little endian machine. ++ ++ * arch/sh/lib/memcpy.S: Bug fix: CONFIG_LITTLE_ENDIAN --> ++ __LITTLE_ENDIAN__. ++ ++1999-09-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/defconfig: Updated. ++ ++ * arch/sh/kernel/head.S: Assumes arguments come with register R4&R5. ++ * arch/sh/kernel/setup.c (setup_arch): Introduce new boot interface ++ "BabeFace". ++ ++ * include/asm-sh/bugs.h (check_bugs): Set loops_per_sec, and display ++ CPU type. ++ ++ * include/asm-sh/processor.h: New enumeration for CPU type. ++ ++ * arch/sh/mm/cache.c (detect_cpu_and_cache_system): New function. ++ ++ * arch/sh/config.in: Follow the change of the name of sh-sci.c and ++ sh-scif.c. ++ ++ * driver/char/{sh-sci.c,sh-scif.c}: Renamed since they're ++ almost same between SH-3 and SH-4. ++ Thanks to Mikhail Sogrine <sogrine@Informatik.Uni-Tuebingen.De>. ++ ++1999-09-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S, include/asm-sh/ptrace.h: Stack layout change. ++ (error): Bug fix. ++ ++ * arch/sh/kernel/signal.c, arch/sh/kernel/process.c: Follow the ++ interface change of ptrace.h. ++ ++ * include/asm-sh/ptrace.h: Rename the member u_regs to regs. ++ Introduce new member "sp". ++ ++ * include/asm-sh/sigcontext.h(struct sigcntext): Rename the members. ++ ++ * include/asm-sh/elf.h (ELF_PLAT_INIT): Taken from Kaz' ++ Implementation. Don't know if it's really needed or not. ++ ++1999-09-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/head.S: Set SR register. ++ ++ * arch/sh/mm/cache.c (flush_icache_range): Bug fix. Tag address ++ for IC Address Array is virtual address, not physical. ++ (flush_cache_range): Likewise. ++ (cache_flush_area): Likewise. ++ (follow_page): Removed. ++ ++1999-09-21 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/process.c (show_regs): Format change a bit. ++ ++ * include/asm-sh/delay.h (__delay,__udelay): Kaz' Implementatin. ++ ++ * arch/sh/lib/memmove.S: Don't include <linux/config.h>, use ++ __LITTLE_ENDIAN__ instead. ++ * arch/sh/lib/memcpy.S: Likewise. ++ * arch/sh/kernel/signal.c: Likewise. ++ * include/asm-sh/elf.h: Likewise. ++ * include/asm-sh/byteorder.h: Likewise. ++ * include/asm-sh/checksum.h: Likewise. ++ (csum_tcpudp_nofold,csum_ipv6_magic): Improve a bit. (Don't branch) ++ (ip_fast_csum,csum_fold): Merge Kaz' Implementation. ++ ++1999-09-20 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/{atomic.h,bitops.h}: Use save_and_cli. ++ ++1999-09-19 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (ret_from_irq): Just return when ++ interrupted from kernel space. ++ ++ * arch/sh/kernel/irq.c (do_IRQ): set syscall_nr = -1. ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): Flush icache when needed. ++ ++ * arch/sh/kernel/process.c (show_regs): Display TEA value. ++ * arch/sh/kernel/traps.c (show_registers): Removed. ++ ++1999-09-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (system_call): Bug fix: TRA contains ++ the value = imm x 4. ++ ++ * arch/sh/mm/init.c (paging_init): Use ctrl_outl. ++ ++ * arch/sh/config.in (CONFIG_MEMORY_END): New config variable. ++ ++ * arch/sh/kernel/{entry.S,head.S,irq_onchip.c,setup.c,time.c}, ++ arch/sh/mm/{cache.c,fault.c}: Use __sh3__ and __SH4__ to ++ distinguish CPU. ++ ++ * include/asm-sh/addrspace.h, include/asm-sh/cache.h, ++ include/asm-sh/elf.h, include/asm-sh/mmu_context.h, ++ include/asm-sh/pgtable.h: Likewise. ++ ++ * arch/sh/Makefile (AFLAGS): Add processor specific flag. ++ ++ * arch/sh/kernel/head.S: Merge Kaz' implementation of SH-4 FPU ++ initialization. ++ ++ * arch/sh/kernel/time.c: SH-4 Support. ++ ++ * drivers/char/sh4scif.c: New file. ++ ++ * include/asm-sh/io.h (ctrl_in{b,w,l},ctrl_out{b,w,l}): New ++ Interfaces for memory mapped control register access. ++ ++1999-09-17 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/fault.c (__flush_tlb_page): SH-4 Support. ++ ++ * arch/sh/kernel/signal.c (setup_frame, setup_rt_frame): ++ Add flush_icache_range. ++ ++ * arch/sh/mm/cache.c: SH-4 Support. ++ ++1999-09-15 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/mmu_context.h (MMU_TTB): Change for SH-4. ++ * arch/sh/kernel/entry.S (MMU_TEA): Change for SH-4. ++ ++ * arch/sh/Makefile (LIBS): Nuke the 'gniibe' dependency. ++ Suggested by Mikhail Sogrine <sogrine@Informatik.Uni-Tuebingen.De>. ++ ++1999-09-13 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/traps.c, include/asm-sh/semaphore.h, ++ include/asm-sh/spinlock.h: Updated to 2.3.18. ++ ++ * arch/sh/Makefile (HOSTCC): Removed. ++ Suggested by Mikhail Sogrine <sogrine@Informatik.Uni-Tuebingen.De>. ++ ++1999-09-12 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S: Add SH-4 Support. ++ ++1999-09-09 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/hardirq.h (synchronize_irq): barrier. ++ ++1999-09-08 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/delay.h (__delay): Fixed. ++ ++ * include/asm-sh/checksum.h (csum_tcpudp_nofold): Support both ++ endianess. ++ ++ * include/asm-sh/bugs.h, arch/sh/mm/fault.c, ++ arch/sh/kernel/traps.c, arch/sh/kernel/time.c, ++ arch/sh/kernel/ptrace.c, arch/sh/kernel/irq_onchip.c: ++ Update to 2.3.17. ++ ++1999-09-07 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/atomic.h (__atomic_fool_gcc): Add "volatile". ++ ++ SH4 Merge. Phase #1. ++ * include/asm-sh/io.h,arch/sh/Makefile: Merged. ++ ++ * include/asm-sh/addrspace.h: Replaced to Kaz's Implementation. ++ ++ * arch/sh/kernel/process.c (dump_thread,dump_fpu): Use Kaz's ++ Implementation. ++ (copy_thread,flush_thread,exit_thread): Merged. ++ (last_task_used_math): New Variable. ++ ++1999-09-06 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache.c (cache_flush_all): Rename from ++ __fluch_cache_all, to distinguish the cache-flush-function for TLB ++ handling. This is the mere function to flush cache, with no ++ relation to TLB handling. ++ (cache_flush_area,cache_purge_area,cache_wback_area): Implemented, ++ not works as expected on SH7708S, though. ++ ++ * include/asm-sh/cache.h ++ (cache_flush_area,cache_purge_areacache_wback_area): ++ Add declarations. ++ ++ * include/asm-sh/io.h (dma_cache_inv,dma_cache_wback, ++ dma_cache_wback_inv): Define appropriate functions. ++ ++1999-09-05 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/checksum.h (ip_fast_csum): Fix bug. ++ ++ * arch/sh/kernel/head.S: Call cache_init. ++ ++ * arch/sh/mm/cache.c: New file. ++ ++ * arch/sh/vmlinux.lds.S: Include <linux/config.h>. ++ * arch/sh/Makefile: Don't use -imacros. ++ ++ * arch/sh/lib/memmove.S: New Implementation. ++ * arch/sh/lib/wordcopy.S: Removed. ++ ++1999-09-04 Toshi Morita <tm2@best.com> ++ ++ * include/asm-sh/unistd.h (_syscall0,1,2,3,4): Add "memory" clobber. ++ ++1999-09-04 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/system.h (switch_to): Save/restore GBR, so that ++ driver can use GBR. Suggested by Toshi Morita <tm2@best.com>. ++ ++ * include/asm-sh/{hdreg.h,ide.h}: New file (Updated to 2.3.16). ++ * arch/sh/kernel/irq.c (free_irq): Update to 2.3.16 (of i386 ++ version). ++ * include/asm-sh/uaccess.h (__range_ok: SIZE): Coerce to interger. ++ * include/asm-sh/system.h (__xchg): Add volatile qualifier for PTR. ++ ++ * include/asm-sh/bugs.h (check_bugs): Use __init instead of ++ __initfunc. ++ ++ * arch/sh/lib/memcpy.S: New implementation. ++ * arch/sh/lib/memset.S: New implementation. ++ ++1999-09-03 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/sys_sh.c (sys_oldmmap, sys_oldselect, ++ sys_olduname): Removed. ++ ++ * arch/sh/kernel/head.S: Implement SH4 cache initialization. ++ When clearing BSS, utilize predecrement feature of SuperH. ++ ++1999-09-03 John Hassey <hassey@gte.net> ++ ++ * arch/sh/kernel/head.S (CACHE_INIT): Fix to appropriate value 0xd. ++ ++1999-09-02 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/Makefile (archmrproper): Delete vmlinux.lds on "mrproper". ++ ++1999-09-01 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/checksum.h, arch/sh/lib/checksum.S: ++ Implemented with the interface of i386 version. ++ * arch/sh/lib/csum_partial_copy.c, arch/sh/lib/checksum.c: Removed. ++ ++1999-08-29 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/processor.h (thread_saved_pc): Implemented. ++ ++ * arch/sh/kernel/entry.S (interrupt_table): Fill `do_IRQ'. ++ ++1999-08-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/char/sh3sci.c (put_char): Wow! GCC 2.95.1 does super ++ optimization! Introduce barrier between asm statement. ++ ++ * arch/sh/kernel/test-img.c: New image. ++ * arch/sh/kernel/setup.c (setup_arch): Set initrd_end to ++ __bss_start. ++ ++ New System Call Interface. Thanks to YAEGASHI Takeshi for ++ the discussion. ++ * arch/sh/kernel/entry.S (system_call): Implement systemcall ++ which has more than five arguments. ++ ++ * include/asm-sh/unistd.h (_syscall0,1,2,3,4): Use trapa #0. ++ * arch/sh/kernel/process.c (kernel_thread): Ditto. ++ * arch/sh/kernel/signal.c (setup_frame, setup_rt_frame): Ditto. ++ ++ * arch/sh/kernel/entry.S ++ (general_exception,tlb_miss,interrupt,handle_exception): Avoid ++ potential races. We should stay BL=1 to avoid breakage of ++ hardware registers (such as TRA, MMU_TEA, k2, or k3). ++ ++ * arch/sh/kernel/traps.c (DO_ERROR): Add STI. ++ ++ New IRQ Programming Interface. ++ * arch/sh/kernel/irq.c, include/asm-sh/irq.h: Implemented. ++ * arch/sh/kernel/irq_onchip.c: New file. ++ ++ * arch/sh/kernel/time.c (time_init): Use new scheme. ++ ++1999-08-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/Makefile (arch/sh/vmlinux.lds): Add support for ++ a generation of the ldscript. ++ ++ * arch/sh/vmlinux.lds.S: Renemed from vmlinux.lds.S, and ++ introduce using CONFIG_MEMORY_START, and CONFIG_LITTLE_ENDIAN. ++ ++ * include/asm-sh/elf.h (EM_SH): Delete and... ++ * include/linux/elf.h (EM_SH): Add here. ++ ++ Updated to 2.3.15. ++ * include/asm/sh/pgtable.h (io_remap_page_range): Added. ++ ++1999-08-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * asm-sh/pgtable.h (SET_PAGE_DIR): Removed. ++ ++ * mm/fault.c (do_page_fault): Store the address to thread ++ structure. ++ ++ * asm-sh/processor.h (start_thread): Make it macro, instead of ++ inline function to avoid inclusion of ptrace.h. ++ Add the member "address" to store the memory address to be paged. ++ ++ * asm-sh/system.h (rmb, wmb): Added. ++ ++ * defconfig: New file. ++ * config.in: Add processor type selection, endianness, and memory ++ start address. ++ ++1999-08-25 John Hassey <hassey@gte.net> ++ ++ * asm-sh/byteorder.h: Add little endian support. ++ ++ * kernel/head.S: Check if cache is enabled already. ++ Don't flush it, if it is the case. ++ ++ * vmlinux.lds(___bss_start,__end): Aligned to 4-byte. ++ ++1999-08-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * asm-sh/elf.h (ELF_DATA): Support little endian. ++ ++ * drivers/block/rd.c (rd_request): Add minimum hack to ++ support ramdisk for root filesystem. ++ ++1999-08-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * mm/init.c (mem_init): Bug fix for counting datapages. ++ ++ * asm-sh/string.h (strncpy,strncmp): Clean up. ++ * asm-sh/system.h (xchg_u32): Bug fix. ++ * kernel/process.c (__switch_to, copy_thread): Handle the case where ++ mm == 0. ++ ++ * kernel/head.S(_stext:1): Fixed to correct mask value. ++ Reported by John Hassey <hassey@gte.net>. ++ ++1999-08-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * asm-sh/cache.h, asm-sh/hardirq.h, asm-sh/init.h, asm-sh/io.h, ++ asm-sh/mmu_context.h, asm-sh/page.h, asm-sh/pgtable.h, ++ asm-sh/processor.h, asm-sh/semaphore.h, asm-sh/softirq.h, ++ asm-sh/spinlock.h, asm-sh/system.h, asm-sh/unistd.h: ++ Update to 2.3.14. ++ ++ * asm-sh/hw_irq.h: New file (2.3.14). ++ ++ * kernel/entry.S (sys_idle), kernel/process.c (sys_idle): Removed ++ (Update to 2.3.14). ++ ++ * mm/init.c, mm/fault.c, kernel/init_task.c: Updated to 2.3.14. ++ * kernel/signal.c (do_signal): Update to 2.3.14. ++ * kernel/traps.c (DO_ERROR): Updated to 2.3.14. ++ ++ * config.in: Remove support of JAVA binaries. ++ ++1999-08-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * kernel/entry.S (signal_return): Revert the changes of 08-19. ++ (DO_FAULT): Remove unblocking of interrupt (not needed). ++ (interrupt): Set return address ret_from_irq, instead of ++ ret_from_syscall. ++ ++ * string.h (strncpy): Fix uninitialized __limit. ++ ++ * kernel/signal.c (setup_frame,setup_rt_frame): Support both endians. ++ ++1999-08-19 Niibe Yutaka <gniibe@m17n.org> ++ ++ * Second version, named "OSHIDASHI". ++ Linux 2.2.11. ++ ++ * system.h (__sti, __cli, __save_and_cli): Bug fix. ++ * kernel/entry.S (signal_return, DO_FAULT): Bug fix. ++ ++ * string.h: Remove useless "earlyclobber" constraints from asm ++ statements. ++ * uaccess.h,string.h,system.h: Don't write "r0" directly, instead ++ use %n specification. ++ ++ * socket.h, pgtable.h (ZERO_PAGE), mm/ioremap.c (__ioremap), mm/init.c ++ (show_mem): Updated to 2.2.11. ++ ++ * kernel/traps.c: Implement exception handling for address error, ++ reserved instruction and illegal slot instruction. ++ ++ * kernel/test-img.c (root_fs_image): compressed by GNU zip. ++ * kernel/setup.c (setup_arch), kernel/test-img.c: New root file ++ system image which includes executable using signal. ++ ++ * kernel/entry.S (ret_with_reschedule): Bug fix for access ++ tsk->sigpending. ++ (nmi, debug): Removed (because this is only for my board). ++ ++ * kernel/entry.S (exception_handling_table): set sys_ni_syscall ++ for ioperm, iopl, and vm86. ++ * kernel/ioport.c, kernel/vm86.c: Removed. ++ ++ * sigcontext.h, kernel/signal.c: Signal handling implemented. ++ ++ * sh3sci.c (put_char): Clean up a bit. ++ ++1999-08-18 Niibe Yutaka <gniibe@m17n.org> ++ ++ * Initial version, named "YORIKIRI". ++ ++ It boots! It runs ELF executable! It forks! ++ ++ Environment: ++ Linux 2.2.10. ++ Kyoto Micro Computer's SH-3 Evaluation Board (SH7708 60MHz). ++ GDB 4.18 with patch for the board. ++ GNU binutils snapshot 1999-08-17. ++ EGCS 1.1.2. ++ ++ Start writing ChangeLog: ++ * vmlinux.lds: Linker script for vmlinux. ++ ++ * kernel/vm86.c, kernel/traps.c, kernel/time.c, kernel/sys_sh.c, ++ kernel/sh_ksyms.c, kernel/setup.c, kernel/irq.c, ++ kernel/ioport.c, kernel/init_task.c, kernel/head.S, ++ kernel/entry.S, kernel/signal.c, kernel/ptrace.c, ++ kernel/process.c: It works! ++ ++ * kernel/test-img.c: Root fs image with ++ /dev/console --> /dev/tty0 (4,0) ++ /linuxrc printing "Hello World!. ++ ++ * lib/checksum.c, lib/csum_partial_copy.c, lib/delay.c, lib/memcpy.S, ++ lib/memmove.S, lib/memset.S, lib/old-checksum.c, lib/wordcopy.S: ++ Taken from GCC outputs, newlib-1.8.0, and other part of Linux. ++ ++ * mm/extable.c, mm/fault.c, mm/init.c, mm/ioremap.c: ++ Implement SH-3 MMU. ++ ++ * semaphore-helper.h, atomic.h, current.h, mman.h, processor.h, ++ unistd.h, bugs.h, softirq.h, user.h, bitops.h, shmparam.h, ++ namei.h, elf.h, ioctls.h, posix_types.h, statfs.h, termios.h, ++ termbits.h, signal.h, siginfo.h, unaligned.h, semaphore.h, ++ uaccess.h, system.h, cache.h, pgtable.h: Header files. ++ ++ * mmu_context.h: New file. Idea taken from MIPS Implementation. ++ ++Little History: ++ ++I've started the project which ports Linux to SuperH in the summer of ++1998. Got the CPU programming manual and hardware manual from ++Hitachi, prepared GNU tool-chains (binutils, gcc) on my Intel box. ++ ++I've asked Hitachi for hardware information of thier Windows CE ++machine, but it seemed that it was difficult for Hitachi to disclose ++the information (NDA wrt Microsoft???). Anyway, I've started writing ++some code with Linux version 2.1.63. ++ ++As there's no platform running the code, I got bored. Hence, in June ++1999, I bought "SH-3 Evaluation Kit" made by Kyoto Micro Computer, ++which is available from CQ publishing company (in Japan). At first, ++I've port GDB for that board, it helps me much for understanding the ++CPU. Then, I port Linux 2.2.10. ++ ++ -- Niibe Yutaka ++ at ETL, Tsukuba, Japan. ++ 1999-08-18 +diff -ruN linux-2.6.17-vanilla/ChangeLog-2000 linux-2.6.17/ChangeLog-2000 +--- linux-2.6.17-vanilla/ChangeLog-2000 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/ChangeLog-2000 2006-07-12 16:54:18.000000000 +0000 +@@ -0,0 +1,2069 @@ ++2000-12-28 Mitch Davis <mdavis@pocketpenguins.com> ++ ++ * Changelog, arch/sh/kernel/Makefile, ++ arch/sh/kernel/mach_foobar.c: Replaced FOOBAR with DMIDA. ++ ++2000-12-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/char/Makefile: Added CONFIG_SH_DREAMCAST. ++ * drivers/char/maple.{h,c}: New files. ++ * drivers/char/dc_keyb.c: New file. ++ ++ * drivers/video/Config.in (CONFIG_FB_DC): Added. ++ * drivers/video/Makefile (obj-$(CONFIG_FB_DC)): Added. ++ * drivers/video/dcfb.c: New file. ++ * drivers/video/fbmem.c: Added CONFIG_FB_DC. ++ ++ * include/asm-sh/io.h: Added CONFIG_SH_DREAMCAST. ++ * include/asm-sh/io_dc.h: New file. ++ * include/asm-sh/machvec.h: Added MACH_DREAMCAST. ++ * include/asm-sh/keyboard.h (kbd_init_hw): Added code for ++ MACH_DREAMCAST. ++ ++ * arch/sh/kernel/Makefile (obj-$(CONFIG_SH_DREAMCAST)): Added. ++ * arch/sh/kernel/setup_dc.c: New file. ++ * arch/sh/kernel/io_dc.c: New file. ++ * arch/sh/kernel/mach_dc.c: New file. ++ ++ * arch/sh/config.in: Added Dreamcast support, whatever it means. ++ ++2000-12-25 Philipp Rumpf <prumpf@tux.org> ++ ++ * arch/sh/kernel/rtc.c, include/asm-sh/rtc.h: New files. ++ * arch/sh/config.in [CONFIG_SH_RTC]: made SH onchip RTC support ++ conditional. ++ * arch/sh/kernel/Makefile [CONFIG_SH_RTC]: Likewise. ++ * arch/sh/kernel/mach_dmida.c, arch/sh/kernel/mach_se.c, ++ arch/sh/kernel/mach_hp600.c, arch/sh/kernel/mach_unknown.c: Likewise. ++ * arch/sh/kernel/time.c (get_timer_frequency): modified to work with ++ non-standard RTCs. ++ (do_timer_interrupt): Likewise. ++ (set_rtc_time) (get_rtc_time): removed functions ++ ++2000-12-25 Philipp Rumpf <prumpf@tux.org> ++ ++ * arch/sh/kernel/mach_ec3104.c, arch/sh/kernel/io_ec3104.c, ++ arch/sh/kernel/setup_ec3104.c, include/asm-sh/ec3104.h, ++ include/asm-sh/io_ec3104.h, include/asm-sh/serial-ec3104.h, ++ include/asm-sh/keyboard-ec3104.h, ++ drivers/char/ec3104_keyb.c: New files ++ ++ * arch/sh/config.in, arch/sh/kernel/Makefile, include/asm-sh/io.h, ++ include/asm-sh/irq.h, include/asm-sh/machvec.h: Added support for ++ the EC3104 companion chip. ++ ++ * include/asm-sh/serial.h [CONFIG_SH_EC3104]: Use alternate header ++ file for EC3104. ++ * include/asm-sh/keyboard.h [CONFIG_SH_EC3104]: Likewise. ++ ++2000-12-25 Philipp Rumpf <prumpf@tux.org> ++ ++ * drivers/video/epson1355fb.c: New file ++ * drivers/video/Config.in, drivers/video/Makefile, ++ drivers/video/fbmem.c: added epson 1355 support ++ ++2000-12-24 Philipp Rumpf <prumpf@tux.org> ++ ++ * arch/sh/boot/compressed/head.S (init_sr): initialize imask to 15 ++ * arch/sh/kernel/fpu.c: Remove '$' for register specification. ++ ++2000-12-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/Makefile, arch/sh/mm/Makefile, arch/sh/lib/Makefile ++ arch/sh/overdrive/Makefile: New style Makefile. ++ ++ * Updated to 2.4.0-test13-pre4. ++ ++ * Updated to 2.4.0-test12. Mostyly done by Greg Banks. ++ ++2000-11-26 Takashi Yoshii <yoshii-takashi@hitachi-ul.co.jp> ++ ++ * arch/sh/boot/compressed/head.S (fake_headers_as_bzImage): Added. ++ ++2000-11-23 David Howells <dhowells@redhat.com> ++ ++ * arch/sh/kernel/traps.c (handle_unaligned_ins): ++ Use copy_from_user, copy_to_user (were __copy_user). ++ (handle_unaligned_delayslot): Likewise. ++ (do_address_error): Likewise. ++ ++2000-11-23 David Howells <dhowells@redhat.com> ++ ++ * arch/sh/kernel/traps.c: New Variable. ++ (die_if_no_fixup): Return integer. ++ (handle_unaligned_ins): Retern integer. ++ (handle_unaligned_delayslot, handle_unaligned_access): New ++ functions. ++ ++2000-11-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.4.0-test11. ++ * arch/sh/kernel/time.c (set_rtc_time): Add declaration of abs. ++ (time_init): Remove unused variable 'i'. ++ * arch/sh/kernel/setup_hd64461.c (setup_hd64461): Ifdef-out ++ access of INTC_ICR1. ++ ++ * include/asm-sh/pgtable.h(module_map, module_umap): Removed. ++ * include/asm-sh/xor.h, include/asm-sh/module.h: New files. ++ * arch/sh/config.in (CONFIG_EISA, CONFIG_MCA): Added. ++ ++2000-11-17 YAEGASHI Takeshi <yaegashi@ma.kcom.ne.jp> ++ ++ * arch/sh/config.in: Add HP620/680/690 support. ++ ++ * include/asm-sh/machvec.h, arch/sh/kenrnel/mach_hp600.c: Add ++ HP620/680/690 machine vectors. ++ ++ * arch/sh/kernel/setup.c: Add struct screen_info. ++ ++ * drivers/char/scan_keyb.[ch], drivers/char/hp600_keyb.c: Add HP620 ++ keyboard support. Reverse bit order of scan table. Use kernel ++ timer instead of task queue. ++ ++ * drivers/net/smc9194.c: Bug fix. ++ ++ * drivers/video/hitfb.c: API clean up. Add 8bpp support for HP620. ++ ++ * include/asm-sh/ide.h, arch/sh/kernel/io_hd64461.c: Add ide1 ports. ++ ++ * include/asm-sh/hd64461.h: Add more register definitions. ++ ++2000-11-15 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/time.c (time_init): clock calculation bug fixed. ++ ++ * arch/sh/io_generic.c: Follow the change of I/O func. ++ ++2000-11-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/Makefile (CFLAGS, AFLAGS): Use -m4-nofpu. ++ ++ * arch/sh/kernel/io.c, arch/sh/kernel/io_generic.c, ++ arch/sh/kernel/io_hd64461.c, arch/sh/kernel/io_hd64465.c, ++ arch/sh/kernel/io_se.c, arch/sh/kernel/setup_hd64461.c, ++ arch/sh/overdrive/io.c, include/asm-sh/io.h, ++ include/asm-sh/io_generic.h, include/asm-sh/io_hd64461.h, ++ include/asm-sh/io_hd64465.h, include/asm-sh/io_od.h, ++ include/asm-sh/io_se.h, include/asm-sh/io_unknown.h, ++ include/asm-sh/machvec.h: Clean up the API. ++ arch/sh/kernel/process.c: Follow the change of I/O func. ++ ++ * include/asm-sh/pgtable-2level.h (pgd_none, pgd_bad, pgd_present, ++ pmd_offset): Make them static inline. ++ * include/asm-sh/pgtable.h (pte_read, pte_exec, pte_dirty, ++ pte_young, pte_write, pte_shared, pte_rdprotect, pte_exprotect, ++ pte_mkclean, pte_mkold, pte_wrprotect, pte_mkread, pte_mkexec, ++ pte_mkdirty, pte_mkyoung, pte_mkwrite, pte_modify): Likewise. ++ * include/asm-sh/siginfo.h (copy_siginfo): Likewise. ++ * include/asm-sh/uaccess.h (verify_area): Likewise. ++ ++ * include/asm-sh/io.h(___raw_readq, ___raw_writeq): Removed. ++ ++ * arch/sh/kernel/entry.S (call_dae): Remove STI(). ++ * arch/sh/kernel/traps.c (handle_unaligned): Use __LITTLE_ENDIAN__ ++ instead. ++ ++2000-11-11 Jesper Skov <jskov@redhat.com> ++ ++ * arch/sh/kernel/traps.c (handle_unaligned, do_address_error): ++ New functions. ++ Added bad alignment handling, based on original code by Philipp ++ Rumpf, bug fixed, and enhanced to handle r0-indexed access as well. ++ (DO_ERROR(7), DO_ERROR(8)): Removed. ++ (trap_init): Dont' set exception_handling_table[7] and [8]. ++ * arch/sh/kernel/entry.S (address_error_load, address_error_store, ++ call_dae): New entries. ++ ++2000-11-11 Philipp Rumpf <prumpf@parcelfarce.linux.theplanet.co.uk> ++ ++ * arch/sh/kernel/time.c (get_cpu_mhz, rtc_interrupt, irq1): Removed. ++ (get_timer_frequency): New function. ++ (time_init): New way of get the frequency. ++ ++2000-11-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/Makefile (arch/sh/vmlinux.lds): Add -traditional. ++ (O_OBJS): Add io_generic.o unconditionally. ++ ++2000-11-11 Jesper Skov <jskov@redhat.com> ++ ++ * arch/sh/kernel/entry.S, arch/sh/kernel/head.S, ++ arch/sh/kernel/irq.c, arch/sh/kernel/irq_imask.c, ++ arch/sh/kernel/process.c, arch/sh/kernel/traps.c, ++ arch/sh/lib/checksum.S, include/asm-sh/current.h, ++ include/asm-sh/delay.h, include/asm-sh/processor.h, ++ include/asm-sh/system.h: Remove '$' for register specification. ++ * arch/sh/lib/checksum.S (SRC, DST): Use "..." for CPP. ++ * arch/sh/kernel/Makefile (.S.o): Remove -traditional flag. ++ * arch/sh/lib/Makefile: Ditto. ++ ++2000-11-07 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/irq_ipr.c (ipr_irq_demux): Set port mode register ++ before read data register. ++ ++ * include/asm-sh/irq.h (PORT_PxCR): Defined. ++ ++2000-11-04 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/time.c (do_gettimeoffset): Implemented. ++ (time_init): TMU0 counter value changed. ++ ++ * include/asm-sh/timex.h (CLOCK_TICK_RATE) Changed. ++ ++2000-11-03 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/irq_ipr.c Add PINT interrupt hanlers. ++ (ipr_irq_demux): IPR/PINT interrupt demux added. ++ (pint_irq_type, pint_map): Added. ++ (init_IRQ): Add PINT initializer. ++ (*_IPR_*): Fixed typo. ++ ++ * arch/sh/kernel/setup_hd64461.c (hd64461_irq_demux): use __irq_demux ++ ++ * include/asm-sh/irq.h (NR_IRQS): changed. ++ (irq_demux): Changed. ++ (__irq_demux): Defined. ++ (PINT_IRQ_BASE, PINT0_IRQ, PINT8_IRQ, PINT0_IPR_ADDR, PINT8_IPR_ADDR, ++ PINT0_IPR_POS, PINT8_IPR_POS, PINT0_PRIORITY, PINT8_PRIORITY): added. ++ (PORT_PADR, PORT_PBDR, PORT_PCDR, PORT_PFDR): added. ++ (*_IPR_*): Fixed typo. ++ ++2000-11-02 Takashi Yoshii <yoshii-takashi@hitachi-ul.co.jp> ++ ++ * arch/sh/kernel/dma.c: New file. ++ ++ * include/asm-sh/dma.h (SH_MAX_DMA_CHANNELS): Added. ++ (SAR, DAR, DMATCR, CHCR, DMAOR, DMTE_IRQ, DMA_MODE_READ, ++ DMA_MODE_WRITE, DMA_AUTOINIT, REQ_L, REQ_E, RACK_H, RACK_L, ACK_R, ++ ACK_W, ACK_H, ACK_L, DM_INC, DM_DEC, SM_INC, SM_DEC, RS_DUAL, RS_IN, ++ RS_OUT, TM_BURST, TS_8, TS_16, TS_32, TS_64, TS_BLK, CHCR_DE, ++ CHCR_TE, CHCR_IE, DMAOR_COD, DMAOR_AE, DMAOR_NMIF, DMAOR_DME): ++ Added. ++ (struct dma_info_t): defined. ++ (clear_dma_ff, claim_dma_lock, release_dma_lock, setup_dma, ++ enable_dma,disable_dma, set_dma_mode, set_dma_addr, set_dma_count, ++ get_dma_residue): Declared. ++ ++ * include/asm-sh/irq.h (DMTE0_IRQ, DMTE1_IRQ, DMTE2_IRQ, DMTE3_IRQ, ++ DMAE_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY): Added macros. ++ ++2000-11-02 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.4.0-test10. ++ * include/asm-sh/ptrace.h (PTRACE_SETOPTIONS): Added ++ (PTRACE_O_TRACESYSGOOD): Added. ++ * include/asm-sh/param.h (CLOCKS_PER_SEC): Added. ++ * arch/sh/kernel/ptrace.c (sys_ptrace:PTRACE_DETACH): Set ++ child->ptrace =0. ++ (sys_ptrace): Add the case of PTRACE_SETOPTIONS. ++ (syscall_trace): Handle ptrace flag 0x80. ++ ++2000-10-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/mach_unknown.c (mv_ioremap_nocache): Removed. ++ * arch/sh/kernel/mach_se.c (mv_ioremap_nocache): Removed. ++ * arch/sh/kernel/io_unknown.c (ioremap_nocache): Removed. ++ * arch/sh/kernel/io_generic.c (generic_ioremap_nocache): Removed. ++ ++ * include/asm-sh/io_unknown.h (unknown_ioremap_nocache, ++ __ioremap_nocache): Removed. ++ * include/asm-sh/io_se.h (__ioremap_nocache): Removed. ++ * include/asm-sh/io_od.h (__ioremap_nocache): Removed. ++ * include/asm-sh/io_hd64465.h (__ioremap_nocache): Removed. ++ * include/asm-sh/io_generic.h (generic_ioremap_nocache): Removed. ++ * include/asm-sh/io.h (__ioremap_nocache): Removed. ++ * include/asm-sh/io.h (ioremap_nocache): Removed. ++ * include/asm-sh/machvec.h (struct sh_machine_vector): Removed ++ ioremap_nocache. ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): SH-3 doesn't have PTEA. ++ ++2000-10-27 Bryan Rittmeyer <bryan@ixiacom.com> ++ ++ * arch/sh/kernel/setup.c (setup_arch): Declare mv_unknown. ++ * arch/sh/kernel/sh_ksyms.c: Removed comment for memcmp. ++ ++2000-10-27 David Woodhouse <dwmw2@infradead.org> ++ ++ * arch/sh/kernel/time.c (get_cpu_mhz): Add .align 2 for speed ++ detection. ++ ++2000-10-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/fault.c (__do_page_fault): Removed (now it's call_dpf ++ in entry.S). ++ (__do_page_fault): Rename from __do_page_fault1. ++ ++ * arch/sh/kernel/entry.S (call_dpf): New entry. ++ (tlb_miss_load, tlb_miss_store, initial_page_write, ++ tlb_protection_violation_load, tlb_protection_violation_store): Use ++ call_dpf. ++ ++ * include/asm-sh/pgalloc-2level.h (get_pmd_fast, free_pmd_fast, ++ free_pmd_slow, pmd_alloc): Make them static inline. ++ ++ * arch/sh/mm/ioremap.c (remap_area_pages): Use pgd_offset_k. ++ (remap_area_pte): Use _PAGE_HW_SHARED. ++ (remap_area_pages): Remove set_pgdir. ++ ++ * include/asm-sh/pgalloc.h (set_pgdir): Removed. ++ (get_pgd_slow, get_pgd_fast, free_pgd_fast, free_pgd_slow, ++ get_pte_fast, free_pte_fast, free_pte_slow, pte_alloc_kernel, ++ pte_alloc, pmd_free, flush_tlb_pgtables): Make them static inline. ++ (get_pgd_slow, free_pgd_slow): Use 2KB PGD. ++ ++2000-10-13 Greg Banks <gbanks@pocketpenguins.com> ++ ++ * arch/sh/config.in: HD64465 PCMCIA support. These changes ++ needed for the PCMCIA host bridge driver currently submitted ++ to the PCMCIA maintainer. ++ * arch/sh/kernel/io_hd64465.c: IO routines for HD64465. ++ * arch/sh/kernel/mach_dmida.c: Added machine DMIDA. ++ * arch/sh/kernel/Makefile: Added machine DMIDA. Added HD64465. ++ Reorged how O_OBJS list is built. ++ * arch/sh/kernel/setup_hd64465.c: Setup and IRQ handling for HD64465. ++ * arch/sh/kernel/sh_ksyms.c: Exported various symbols to make ++ PCMCIA modules work. ++ * arch/sh/mm/fault.c: TLB miss handler sets TC/SA bits of ++ PTEA according to bits in PTE. ++ * include/asm-sh/hd64465.h: Register defines for HD64465. ++ * include/asm-sh/io.h: Added machine DMIDA ++ * include/asm-sh/io_hd64461.h: Function declaration. ++ * include/asm-sh/io_hd64465.h: IO declarations for HD64465. ++ * include/asm-sh/machvec.h: HD64465 support. ++ * include/asm-sh/mmu_context.h: PTEA define. ++ * include/asm-sh/pgtable.h: PAGE_KERNEL_PCC(slot, type) is a ++ pgprot_t which can be used to setup SH7750 PCMCIA space mappings. ++ ++2000-09-29 Bryan Rittmeyer <bryan@ixiacom.com> ++ ++ * arch/sh/kernel/sh_ksyms.c (memcpy, memset, memmove, memcmp, ++ flush_dcache_page): Added. ++ ++2000-09-29 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/unistd.h (setup): Removed. ++ ++2000-09-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/system.h (switch_to): Add T-flag to the clobber ++ list of asm statements. ++ ++2000-09-28 Jesper Skov <jskov@redhat.com> ++ ++ * include/asm-sh/string.h: Add T-flag to the clobber list of asm ++ statements. ++ * include/asm-sh/delay.h: Same. ++ * include/asm-sh/checksum.h: Same. ++ * include/asm-sh/bitops.h: Same. ++ * arch/sh/kernel/time.c: Same. ++ * arch/sh/kernel/irq_imask.c: Same. ++ * arch/sh/kernel/process.c: Same. ++ * include/asm-sh/uaccess.h: Same. Plus clobber memory in ++ copy_to_user and clear_user. ++ ++2000-09-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (sys_fcntl64): Added. ++ * include/asm/unistd.h (__NR_fcntl64): Added. ++ ++2000-09-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm/unistd.h (_syscall0, _syscall1, _syscall2, _syscall3, ++ _syscall4, _syscall5): Don't put "$" prefix for register name. ++ * include/asm-sh/system.h (switch_to): Likewise. ++ * arch/sh/kernel/sh_bios.c (sh_bios_call): Likewise. ++ * arch/sh/kernel/process.c (kernel_thread): Likewise. ++ Use __sc0 and __sc3. ++ ++ * arch/sh/lib/checksum.S (SRC, DST): Don't use variable arguments. ++ ++ * drivers/char/sh-sci.c (sci_set_termios_cflag): Call init_pins ++ AFTER setting baud. ++ ++2000-09-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/system.h (smp_mb, smp_rmb, smp_wmb): Use CONFIG_SMP ++ instead of __SMP__. ++ ++2000-09-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/system.h (smp_mb, smp_rmb, smp_wmb): New macros. ++ (__sti, __cli, (xchg_u32, xchg_u8): Make them static inline. ++ ++ * include/asm-sh/bitops.h (set_bit, clear_bit, change_bit, ++ test_and_set_bit, test_and_clear_bit, test_and_change_bit, test_bit, ++ ffz, find_next_zero_bit, ext2_set_bit, ext2_clear_bit, ++ ext2_test_bit, ext2_find_next_zero_bit): Make them static inline. ++ (smp_mb__before_clear_bit, smp_mb__after_clear_bit): New macros. ++ ++ * include/asm-sh/atomic.h (atomic_t): Use volatile int member ++ regardless of CONFIG_SMP or not. ++ (__atomic_fool_gcc): Removed. ++ (atomic_add, atomic_sub, atomic_add_return, atomic_sub_return, ++ atomic_clear_mask, atomic_set_mask): Make them static inline. ++ ++2000-09-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the change of test9-pre6. ++ * include/asm-sh/resource.h (RLIMIT_LOCKS): Added. ++ (INIT_RLIMITS): Added new entry for LOCKS. ++ ++ * include/asm-sh/fcntl.h (F_INPROGRESS, LOCK_MAND, LOCK_READ, ++ LOCK_WRITE, LOCK_RW, F_LINUX_SPECIFIC_BASE): Added. ++ ++2000-09-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pci.h (pcibios_set_master, ++ pcibios_penalize_isa_irq, (pci_map_single, pci_unmap_single, ++ pci_map_sg, pci_unmap_sg, pci_dma_sync_single, pci_dma_sync_sg): ++ Make them static. ++ ++2000-09-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/setup_cqreek.c: Remove mv_port_2addr. ++ * include/asm/io_hd64461.h (__isa_port2addr, __ioremap, __iounmap): ++ Added. ++ ++2000-09-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow new cache handling scheme. Because now is the transition ++ time (I think it's not fully changed to use "flush_dcache_page"), ++ let's leave flush_page_to_ram. ++ ++ * arch/sh/mm/cache.c (clear_user_page, copy_user_page): Implemented. ++ (__flush_page_to_ram): New function. ++ (flush_page_to_ram): Use __flush_page_to_ram. ++ ++ * include/asm-sh/page.h (clear_user_page, copy_user_page): Define ++ function for SH-4. ++ ++ Revert the changes of 2000-09-09. ++ * arch/sh/mm/cache.c (flush_cache_page): Reverted. ++ * include/asm-sh/pgtable.h (flush_cache_page): Ditto. ++ ++2000-09-18 YAEGASHI Takeshi <yaegashi@ma.kcom.ne.jp> ++ ++ SCI error handling(frame/parity/overrun error, BREAK) ++ ++ * include/asm-sh/irq.h: Add *_BRI_IRQ definitions. ++ ++ * arch/sh/kernel/irq_ipr.c (init_IRQ): Add make_ipr_irq() calls for ++ *_BRI_IRQ. ++ ++ * drivers/char/sh-sci.h : Add BRI to irq table, new macros. ++ ++ * drivers/char/sh-sci.h (sci_handle_errors, sci_handle_breaks, ++ sci_br_interrupt): added. ++ (sci_receive_chars): Add error handling for SCIF(checking SCxSR). ++ (sci_er_interrupt): Add error handling for SCI(sci_handle_errors). ++ (sci_init): Add BRI initialization. ++ ++2000-09-09 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgtable.h (flush_cache_page): Do nothing. ++ * arch/sh/mm/cache.c (flush_cache_page): Removed. ++ ++2000-09-08 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/irq_imask.c (startup_imask_irq, ++ shutdown_imask_irq): Don't do anything. When used with ++ proble_irq, interrupt may be masked. ++ NOTE: For IMASK, default is "all enabled" ++ ++ * arch/sh/kernel/irq_ipr.c (make_ipr_irq): Revert the changes on ++ 09-05. It's done with disable_irq_nosync. ++ ++2000-09-06 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the changes of 2.4.0-test8-pre5. ++ ++ * arch/sh/kernel/process.c (copy_thread): Add "unused" argument. ++ It's "stack_top" from do_fork. ++ (sys_fork, sys_clone, sys_vfork): Add last argument 0. ++ ++2000-09-05 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/irq_ipr.c (make_ipr_irq): Initialize status, action ++ and depth field. ++ ++2000-09-04 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * drivers/char/sh-sci.h (SCIF_ORER): Added. ++ * drivers/char/sh-sci.c (sci_er_interrupt): Handle overrun error ++ for SH-4 SCIF. ++ (sci_set_baud): Set SCSMR bit0,1(clock select) every time. ++ ++2000-09-04 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the changes of 2.4.0-test8-pre3. ++ ++ * arch/sh/kernel/signal.c (do_signal): Use pending.signal, instead ++ of signal (taskstruct structure chane for siganal). ++ ++ * include/asm-sh/uaccess.h (put_user_ret, get_user_ret, ++ __put_user_ret, __get_user_ret, copy_to_user_ret, ++ __copy_to_user_ret, copy_from_user_ret, __copy_from_user_ret): ++ Removed. ++ ++2000-09-04 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache.c (cache_init): Re-initialize the cache system, ++ even if it's already initialized. ++ (detect_cpu_and_cache_system): Be conservative. ++ ++2000-09-03 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgtable.h (_PAGE_PRESENT): Use hardware V-bit. ++ (_PAGE_U0_SHARED): New macro to implement user space shared page. ++ (_PAGE_HW_SHARED): We need this hardware setting. ++ (_PAGE_FLAGS_HARDWARE_DEFAULT): Removed. ++ (_PAGE_FLAGS_HARDWARE_MASK): Include SZ-bit, SH-bit and WT-bit. ++ (_PAGE_FLAGS_HARD): Hardware PTE flags setting (for SZ=4KB). ++ (_PAGE_SHARED): Use U0_SHARED for SH-4, HW_SHARED for SH-3, because ++ there's alias issue on SH-4. ++ (PAGE_NONE, PAGE_SHARED, PAGE_COPY, PAGE_READONLY, PAGE_KERNEL, ++ PAGE_KERNEL_RO): Includd _PAGE_FLAGS_HARD. ++ ++ (PAGE_KERNEL, PAGE_KERNEL_RO): Include _PAGE_HW_SHARED. ++ ++ (_PAGE_ACCESSED, _PAGE_PROTNONE): Layout changed. ++ (SWP_TYPE, SWP_OFFSET, SWP_ENTRY): Likewise. ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): Don't OR the hardware value ++ to PTE. It's now already included. ++ ++2000-08-31 Jesper Skov <jskov@redhat.com> ++ ++ * arch/sh/mm/fault.c (__do_page_fault): Fixed bug that caused ++ infinite cycle of faults when writing to a page for the first time. ++ ++2000-08-30 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/head.S: Move the alignment expression before .text ++ directive. ++ ++2000-08-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.0-test7. ++ ++2000-08-25 Jesper Skov <jskov@redhat.com> ++ ++ * arch/sh/vmlinux.lds.S: Discard .exitcalls from modules. ++ ++ * Documentation/Configure.help: Fixed CPU selection description. ++ ++2000-08-24 Bryan Rittmeyer <bryan@ixiacom.com> ++ ++ * drivers/char/sh-sci.h (BPS_57600): Added. ++ * drivers/char/sh-sci.c (sci_set_baud): Support 57600 baud. ++ ++2000-08-24 Toshinobu Sugioka <sugioka@itonet.co.jp> ++ ++ * net/ipv4/ip_sockglue.c: Include ++ <linux/netfilter_ipv4/ipchains_core.h>. ++ ++2000-08-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * net/ipv4/ip_sockglue.c (ip_setsockopt): Bug fix. Ipchains didn't ++ work. When IP_FW_XXX command is invoked, we don't need to get the ++ VAL with get_user, it might got EFAULT when the optval is not ++ aligned as 4-byte. (Ipchains uses string as OPTVAL). ++ ++2000-08-23 Greg Banks <gbanks@pocketpenguins.com> ++ ++ (These entries were written by gniibe.) ++ * arch/sh/kernel/entry.S (system_call): Remove setting of return ++ value. ++ ++ * arch/sh/kernel/sh_ksyms.c (strlen): Exported. ++ (DECLARE_EXPORT): New macro. ++ (__udivsi3_i4, __sdivsi3_i4, __movstr_i4_even, __movstr_i4_odd, ++ __ashrdi3, __ashldi3): Exported. ++ ++2000-08-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the change of 2.4.0-test7-pre7. ++ * include/asm-sh/fcntl.h (F_GETLK64, F_SETLK64, F_SETLKW64): New ++ macros. ++ (flock64): Added. ++ ++ Updated to 2.4.0-test7-pre7. ++ * include/asm-sh/unistd.h (__NR_getdents64): Added. ++ * include/asm-sh/mmu_context.h (init_new_context): Return 0. ++ ++ * arch/sh/kernel/mach_se.c: Include <linux/config.h>. ++ * arch/sh/kernel/mach_unknown.c: Likewise. ++ * arch/sh/kernel/setup_cqreek.c: Likewise. ++ * include/asm-sh/dma.h: Likewise. ++ * include/asm-sh/machvec_init.h: Likewise. ++ ++ * arch/sh/kernel/entry.S (sys_getdents64): Added. ++ ++ * arch/sh/kernel/cf-enabler.c: Don't include <linux/config.h>. ++ * arch/sh/kernel/io.c: Ditto. ++ * arch/sh/kernel/io_generic.c: Likewise. ++ ++2000-08-20 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): Bug fix. This routine ++ is called by ptrace when PTE does not have information. ++ ++2000-08-19 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/setup_cqreek.c (setup_cqreek): Work around. ++ Let it not sleep. ++ ++ * arch/sh/kernel/setup_cqreek.c (struct cqreek_irq_data): New ++ structure. ++ (disable_cqreek_irq, enable_cqreek_irq, mask_and_ack_cqreek, ++ init_cqreek_IRQ): Generalized to handle both cases of IDE and ISA. ++ ++ * mm/vmscan.c (try_to_swap_out): We need to call flush_page_to_ram. ++ ++ * arch/sh/mm/cache.c (flush_page_to_ram): Semantics change. ++ We invalidate the cache line too. ++ (flush_cache_page): No need to do any for physically tagged cache. ++ ++ * mm/memory.c (break_cow, do_anonymous_page, do_no_page): Revert the ++ changes of 2000-08-17. NOTE: In fact, we need to flush I-cache at ++ break_cow and do_anonymous_page, but it's buggy software if it's ++ goes fetch the instruction from that page... ++ (do_swap_page): flush_page_to_ram instead of flush_dcache_page. ++ ++2000-08-17 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * mm/memory.c (do_anonymous_page): We need to flush I-cache and ++ D-cache here, as it's newly allocated page. ++ (do_no_page): We need to flush D-cache. ++ (do_swap_page): Flush D-cache & I-cache here. There're cases ++ where read_swap_cache is called asynchronously and pages are ++ cached. ++ ++ * Revert the change for fs/buffer.c (end_buffer_io_async). It's ++ more than needed. We only need to flush when kernel WRITES to the ++ page (from I/O), not READ (to I/O). ++ ++ * Revert the changes for mm/memory.c (do_wp_page: case 1): We have ++ valid PTE here (it's read-only but works). ++ ++2000-08-16 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * fs/buffer.c (end_buffer_io_async): Flush D-cache. When kernel ++ writes to the page, we should flush USER cache so that USER doesn't ++ read stale data. ++ ++ * mm/memory.c (do_swap_page): Bug fix. We need to flush D-cache. ++ For newly allocated page, D-cache may contain stale USER data. ++ (break_cow): Likewise. Note that flush_cache_page is not good for ++ physically tagged architecture. (For old implementation, flushing ++ routine was called before setting PTE.) ++ (do_wp_page: case 1): Likewise. ++ ++2000-08-13 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * mm/memory.c (break_cow): Bug fix. We need to flush I-cache. ++ For newly allocated page, I-cache may contain stale USER data. ++ ++ * arch/sh/mm/init.c (mem_init): Flush empty_zero_page. ++ ++2000-08-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache.c (check_cache_page): Renamed from ++ check_dcache_page. ++ ++2000-08-10 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.0-test6. ++ ++ * arch/sh/mm/cache.c (check_dcache_page): New debug function. ++ * arch/sh/kernel/traps.c (dump_stack): Only output call trace. ++ ++ Cosmetic changes for TLB handling. ++ * arch/sh/mm/fault.c (__flush_tlb_page): First argument is ASID now ++ (instead of MM). ++ (__flush_tlb_page): Don't take MM as argument. ++ (handle_vmalloc_fault): Removed. ++ (do_page_fault): Don't call handle_vmalloc_fault. ++ (__do_page_fault1, __do_page_fault): New functions. ++ (update_mmu_cache): Use pte_shared. ++ (flush_tlb_page): Handle the case where MM != CURRENT->MM. ++ (flush_tlb_range): Likewise. ++ ++ * include/asm-sh/pgtable.h (pte_shared): New inline function. ++ (_PAGE_SHARED): New macro. ++ (PAGE_SHARED): Added _PAGE_SHARED. ++ ++ * arch/sh/kernel/entry.S (tlb_miss_load, tlb_miss_store, ++ initial_page_write, tlb_protection_violation_load, ++ tlb_protection_violation_store): Call __do_page_fault. ++ Don't call STI(). ++ ++ Follow the change of 2.4.0-test6-pre10. ++ * include/asm-sh/page.h (virt_to_page, VALID_PAGE): New macro. ++ (MAP_NR): Removed. ++ ++2000-08-09 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.0-test6-pre9. ++ ++ * arch/sh/mm/cache.c (flush_cache_page): Call flush_dcache_page. ++ (flush_cache_range): Call flush_cache_all. ++ (flush_dcache_page): New function. Flush D-cache for the page. ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): Use flush_dcache_page. ++ ++ * arch/sh/mm/cache.c (flush_icache_page, flush_page_to_ram): Revert ++ the changes on 08-05. ++ ++ * include/asm-sh/pgtable.h (flush_dcache_page): Added declaration ++ for SH-4. ++ ++ Import changes from 2.4.0-test6-pre8. ++ * arch/sh/mm/init.c: Use virt_to_page to get page. ++ * include/asm-sh/processor.h: Likewise. ++ * include/asm-sh/pgtable.h (ZERO_PAGE): Likewise. ++ (pte_pagenr): Removed. ++ ++2000-08-09 Toshinobu Sugioka <sugioka@itonet.co.jp>. ++ ++ * arch/sh/kernel/signal.c (save_sigcontext_fpu): Bug fix. ++ We can't use immediate value for __copy_to_user. ++ ++2000-08-08 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Import changes from 2.4.0-test6-pre7. (by Keith Owens) ++ * include/asm-sh/hardirq.h (irq_cpustat_t, in_interrupt, in_irq, ++ hardirq_trylock, irq_enter, irq_exit): Clean them up. ++ * include/asm-sh/softirq.h (cpu_bh_disable, cpu_bh_enable, ++ in_softirq): Likewise. ++ * arch/sh/kernel/irq.c: Likewise. ++ * arch/sh/kernel/entry.S (ret_from_syscall): Use __irq_stat. ++ ++ Import changes from 2.4.0-test6-pre7. (Perhaps, by David S. Miller) ++ * include/asm-sh/pgtable.h (flush_dcache_page): Added. ++ (page_address): Remove debug functionality. ++ * include/asm-sh/system.h: Remove set_rmb. ++ ++2000-08-05 Jesper Skov <jskov@redhat.com> ++ ++ Changes to use SCI/F for PPP. ++ * drivers/char/sh-sci.c (sci_sched_event, do_softint): Added. ++ (sci_transmit_chars): Call sci_sched_event. ++ (SCI_EVENT_WRITE_WAKEUP): New definition. ++ (sci_port): Added members 'tqueue' and 'event'. ++ ++ Cosmetic changes. ++ * include/asm-sh/irq.h (SCIF_ERI_IRQ and others): Add condition for ++ CONFIG_CPU_SUBTYPE_SH7707. ++ * arch/sh/kernel/semaphore.c (semaphore_wake_lock): Added. ++ * arch/sh/config.in (CONFIG_GDB_STUB_VBR): We need this regardless ++ of CONFIG_DEBUG_KERNEL_WITH_GDB_STUB. ++ ++2000-08-05 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache.c (flush_page_to_ram): Use save_and_cli. ++ (flush_icache_page, flush_icache_range): Ditto. ++ ++2000-08-04 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache.c (icache_purge_range, flush_cache_range): ++ Use of A-bit was wrong. We need better way to handle this... ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): Bug fix. Don't deref ++ vma, when it's NULL. ++ (handle_vmalloc_fault): Work around. Don't call __flush_tlb_page ++ when mm==NULL. ++ ++2000-08-04 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Machvec support. ++ * arch/sh/kernel/setup.c: Remove WEAK references. ++ (get_mv_byname): Use .macvec.init. section. ++ * include/asm-sh/machvec_init.h (__initmv): Use ++ .macvec.init. section. ++ * arch/sh/vmlinux.lds.S (.machvec.init): Added new section for ++ Machine Vector. ++ ++ CqREEK support. ++ * arch/sh/config.in: Added CONFIG_SH_CQREEK. ++ * arch/sh/kernel/Makefile (O_OBJS): Added CqREEK Bridge support. ++ * arch/sh/kernel/setup_cqreek.c: New file. ++ ++2000-08-02 Stuart Menefy <stuart.menefy@st.com> ++ ++ (These entries were written by gniibe.) ++ * arch/sh/kernel/Makefile: Add io_generic.o for UNKNOWN. ++ ++ * arch/sh/kernel/io_generic.c (generic_io_base): New variable. ++ (generic_inw_p, generic_inl_p, generic_outw_p, generic_outl_p): ++ New functions. ++ * include/asm-sh/io_generic.h: Likewise. ++ ++ * arch/sh/kernel/io_unknown.c: Remove unused inclusions. ++ * arch/sh/kernel/setup.c (parse_cmdline): Added I/O base and ++ MMIO enable feature. ++ ++ * include/asm-sh/machvec_init.h: UNKNOWN could use GENERIC feature. ++ ++2000-08-01 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/overdrive/io.c: Include <asm/processor.h>. ++ ++ * arch/sh/kernel/irq_ipr.c (init_IRQ): Remove the variable 'i'. ++ * arch/sh/kernel/setup_se.c (init_se_IRQ): Likewise. ++ ++ * include/asm-sh/machvec.h (struct sh_machine_vector): Bit field ++ int should be unsigned. ++ ++ * include/asm-sh/ide.h (ide_default_irq_hp600, ++ ide_default_io_base_hp600): Make them static. No reason for ++ "static", matter of taste, but all other functions in this ++ file use "static". ++ ++ * include/asm-sh/keyboard.h: Added "extern" qualifier. Removed ++ __init for declaration. Remove <linux/config.h>. ++ ++ * include/asm-sh/irq.h (irq_demux, hd64461_irq_demux): Make them ++ extern. ++ ++ * include/asm-sh/{io_hd64461.h,io_od.h,io_generic.h,io_se.h, ++ io_unknown.h}: Added "extern" qualifier. ++ ++ * arch/sh/kernel/mach_hp600.c (hd64461_irq_demux): Removed. ++ Include asm/irq.h. ++ ++ * arch/sh/defconfig: Updated. ++ ++2000-08-01 Jesper Skov <jskov@redhat.com> ++ ++ * arch/sh/config.in: Add SH7707 support. ++ * arch/sh/defconfig: Ditto. ++ * arch/sh/kernel/entry.S: Ditto. ++ * arch/sh/kernel/irq_ipr.c: Ditto. ++ * drivers/char/sh-sci.c: Ditto. ++ * drivers/char/sh-sci.h: Ditto. ++ * include/asm-sh/bugs.h: Ditto. ++ * include/asm-sh/irq.h: Ditto. ++ * include/asm-sh/processor.h: Ditto. ++ ++2000-08-01 YAEGASHI Takeshi <yaegashi@ma.kcom.ne.jp> ++ ++ * arch/sh/config.in, arch/sh/kernel/entry.S, ++ Documentation/Concigure.help: Add CONFIG_GDB_STUB_VBR. ++ ++ * include/asm-sh/delay.h: Fix __udelay_val. ++ ++ * drivers/video/hitfb.c (hitfb_encode_fix): Add break; ++ ++ * drivers/char/hp600_keyb.c, drivers/char/scan_keyb.c: Fix key scan ++ tables and routines. ++ ++2000-08-01 Stuart Menefy <stuart.menefy@st.com> ++ ++ (These entries were written by gniibe.) ++ * Documentation/sh/new-machine.txt, arch/sh/kernel/io.c, ++ arch/sh/kernel/io_unknown.c, arch/sh/kernel/led_se.c, ++ arch/sh/kernel/mach_hp600.c, arch/sh/kernel/mach_se.c, ++ arch/sh/kernel/mach_unknown.c, arch/sh/lib/strcasecmp.c, ++ include/asm-sh/io_generic.h, include/asm-sh/io_hp600.h, ++ include/asm-sh/io_od.h, include/asm-sh/io_se.h, ++ include/asm-sh/io_unknown.h, include/asm-sh/machvec.h, ++ include/asm-sh/machvec_init.h: New files. ++ ++ Overdrive support. ++ * arch/sh/overdrive/Makefile, arch/sh/overdrive/fpga.c, ++ arch/sh/overdrive/fpga.h, arch/sh/overdrive/galileo.c, ++ arch/sh/overdrive/gt64111.h, arch/sh/overdrive/io.c, ++ arch/sh/overdrive/irq.c, arch/sh/overdrive/led.c, ++ arch/sh/overdrive/mach.c, arch/sh/overdrive/overdrive.h, ++ arch/sh/overdrive/overdrive.ttf, arch/sh/overdrive/pcidma.c ++ arch/sh/overdrive/setup.c: New files ++ ++ arch/sh/Makefile: Added support for OverDrive. ++ ++ arch/sh/config.in: Remove CONFIG_IOPORT_START. ++ Added CONFIG_HEARTBEAT. ++ ++ arch/sh/kernel/Makefile: Set O_OBJS for each machines. ++ ++ arch/sh/kernel/cf-enabler.c (cf_init): Make it static. ++ arch/sh/kernel/io_generic.c: Make the functions generic. ++ arch/sh/kernel/io_hd64461.c: Make the functions specific. ++ arch/sh/kernel/io_se.c: Likewise. ++ ++ arch/sh/kernel/irq.c (do_IRQ): Call irq_demux. ++ ++ arch/sh/kernel/irq_imask.c (disable_imask_irq): Make it static. ++ arch/sh/kernel/irq_ipr.c: (disable_ipr_irq) Likewise. ++ ++ arch/sh/kernel/pci-sh.c (pcibios_init, pcibios_setup): New functions. ++ ++ arch/sh/kernel/setup.c (sh_mv): New variable. ++ (parse_cmdline): Support machine selection. ++ ++ arch/sh/kernel/setup_hd64461.c (hd64461_irq_demux): New function. ++ ++ arch/sh/kernel/setup_se.c (init_se_IRQ): Use new make_ipr_irq. ++ ++ arch/sh/kernel/time.c: Support CONFIG_HEARTBEAT. Check MACH_HP600 ++ at runtime. ++ ++ arch/sh/lib/Makefile: Don't add -D__ASSEMBLY__. Add strcasecmp.o. ++ ++ arch/sh/lib/checksum.S: Alignment fix. ++ ++ arch/sh/mm/Makefile: Don't include ioremap.o. ++ ++ include/asm-sh/dma.h: Added isa_dma_bridge_buggy. ++ ++ include/asm-sh/hd64461.h: Added CONFIG_HD64461_IRQ. ++ include/asm-sh/ide.h: Added _hp600 functions. ++ ++ include/asm-sh/io.h: Introduce Alpha convention. ++ ++ include/asm-sh/irq.h: Added ACTUAL_NR_IRQS. ++ ++ include/asm-sh/keyboard.h: Use MACH_HP600. ++ ++ include/asm-sh/pci.h: Updated. ++ ++ drivers/char/sh-sci.c, drivers/char/sh-sci.h: Counter support. ++ Don't set IPR in the driver. ++ ++ drivers/net/Config.in: Remove condition CONFIG_SH_SOLUTION_ENGINE ++ for CONFIG_STNIC. ++ ++ drivers/net/stnic.c: Check MACH_SE at runtime. ++ ++ drivers/pci/pci.ids: Add GT-64111. ++ include/linux/pci_ids.h: Likewise. ++ ++2000-07-31 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/bugs.h (check_bugs): Distinguish CPU type. ++ ++2000-07-30 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.4.0-test5. ++ ++2000-07-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.4.0-test5-pre6. ++ ++ * include/asm-sh/sh_bios.h: Don't include ++ <config/sh/standard/bios.h>. ++ ++2000-07-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.4.0-test5-pre5. ++ ++ * include/asm-sh/mmu_context.h (switch_mm): Setting the bit only ++ when prev != next. ++ ++ * arch/sh/kernel/sh_bios.c: Include <linux/config.h> instead of ++ <config/sh/standard/bios.h>. ++ ++ * arch/sh/kernel/setup.c: We (already) include <linux/console.h>, ++ don't need including for CONFIG_SH_EARLY_PRINTK again. ++ ++ * include/asm-sh/checksum.h: Include <linux/config.h>. ++ ++ * include/asm-sh/serial.h: Not include <linux/config.h>. ++ ++ * mm/mmap.c (exit_mmap): Flushing TLB is not needed. ++ ++2000-07-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.4.0-test5-pre4. ++ ++ * drivers/char/sh-sci.c: IRDA is for SH7709 only. ++ ++2000-07-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (debug_trap, debug_kernel): ++ #ifdef/#endif change, this is needed for SH BIOS call too. ++ ++ * arch/sh/boot/compressed/head.S (init_sr): Set Block=0, ++ so that we can use BIOS call. ++ ++2000-07-21 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Documentation/Configure.help (CONFIG_CPU_SUBTYPE_SH7708, ++ CONFIG_CF_ENABLER, CONFIG_SH_SCI): Updated. ++ ++ (CONFIG_SH_SCIF): Removed. ++ ++ * arch/sh/defconfig (CONFIG_SH_EARLY_PRINTK): Updated. ++ ++ * drivers/char/tty_io.c (console_init): Don't call ++ sh_console_unregister. ++ ++ * drivers/char/sh-sci.c (sci_console_init): Call ++ sh_console_unregister here, instead. ++ ++2000-07-20 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the changes of 2.4.0-test5-pre3. ++ * arch/sh/defconfig: Updated. ++ ++2000-07-20 YAEGASHI Takeshi <yaegashi@ma.kcom.ne.jp> ++ ++ * sh-sci.h (PORT_IRDA, SH3_IRDA_IRQS): New definition. ++ (SCI_INIT, SCI_NPORTS): Fixed for CONFIG_CPU_SUBTYPE_SH7708. ++ ++ * sh-sci.c (sci_init_pins_irda): New Function. ++ ++2000-07-19 Hiroshi Ito <ito@mlb.co.jp> ++ ++ * arch/sh/mm/cache.c (detect_cpu_and_cache_system): Add __init ++ attribute. ++ * arch/sh/mm/cache.c (cache_system_info) Initialize it. ++ ++2000-07-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): Bug fix. Avoid aliases ++ for shared page. ++ Reported by Stuart Menefy <stuart.menefy@st.com> on June 23th. ++ ++ * arch/sh/mm/fault.c (__flush_tlb_phys): New function. Flush ++ TLB which corresponds the PHYS physical page. ++ ++ * include/asm-sh/mmu_context.h (MMU_ITLB_DATA_ARRAY, ++ MMU_UTLB_DATA_ARRAY, MMU_UTLB_ENTRIES, MMU_U_ENTRY_SHIFT, ++ MMU_UTLB_VALID, MMU_ITLB_ENTRIES, MMU_U_ENTRY_SHIFT, ++ MMU_ITLB_VALID): New definition. ++ ++2000-07-18 Stuart Menefy <stuart.menefy@st.com> ++ ++ * mm/mmap.c (exit_mmap): Bug fix. Added flush_cache_range and ++ flush_tlb_range. ++ ++ * arch/sh/kernel/entry.S (restore_all): Bug fix. Correct the ++ handling IMASK-bits. ++ ++2000-07-13 Yutarou Ebihara <ebiharaml@si-linux.com> ++ ++ * arch/sh/kernel/io_generic.c (insw, insl, outsw, outsl): Work ++ around implemented. ++ ++2000-07-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/boot/compressed/Makefile (ZIMAGE_OFFSET): Add more ++ 64KB for the use of program loader which loads the image from ++ second storage. ++ ++ Follow the changes of test3-pre9. ++ * arch/sh/kernel/time.c (do_settimeofday): Updated. ++ (do_gettimeofday): Use wall_jiffies. ++ ++ * arch/sh/kernel/process.c (cpu_idle): Follow the change of ++ 2.4.0-test3-pre9. ++ ++ * include/asm-sh/timex.h (cycles_t): Type changed to long long. ++ ++ * arch/sh/kernel/entry.S (tsk_ptrace): Change the offset value, ++ following the change of linux/sched.h:(struct task_struct). ++ ++2000-07-08 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/sh_ksyms.c (drive_info): Removed. ++ It's x86 specific code. ++ ++ Follow the change of test3-pre5. ++ * include/asm-sh/bitops.h (minix_test_and_set_bit): Added. ++ * arch/sh/kernel/process.c (sys_execve): Remove lock_kernel and ++ unlock_kernel. ++ * arch/sh/kernel/signal.c (do_signal): Likewise. ++ ++2000-07-07 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/bitops.h (set_bit, clear_bit, change_bit, ++ test_and_set_bit, test_and_clear_bit, test_and_change_bit, ++ test_bit, ext2_set_bit, ext2_clear_bit, ext2_test_bit): ++ Add qualifier `volatile'. ++ ++2000-07-06 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the change of test3-pre4. ++ * arch/sh/kernel/sys_sh.c (do_mmap2): Remove ++ lock_kernel/unlock_kernel. ++ (sys_pipe): Likewise. ++ ++2000-07-04 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Use CONFIG_CPU_LITTLE_ENDIAN (it's used for MIPS). ++ * Documentation/Configure.help: Merge the help message. ++ * arch/sh/Makefile: Use CONFIG_CPU_LITTLE_ENDIAN, instead of ++ CONFIG_LITTLE_ENDIAN. ++ * arch/sh/defconfig: Likewise. ++ * arch/sh/vmlinux.lds.S: Likewise. ++ ++ Follow the chane of test3-pre2. ++ * arch/sh/kernel/setup.c (rom_resources): Removed. ++ ++ * include/asm-sh/softirq.h (in_softirq, cpu_bh_disable, ++ cpu_bh_enable): Use __local_bh_count and __local_irq_count. ++ ++ * include/asm-sh/hardirq.h (local_irq_count, local_bh_count): ++ Define Macros. ++ ++ * arch/sh/kernel/sh_ksyms.c (local_bh_count, local_irq_count): ++ Removed. ++ ++ * arch/sh/kernel/irq.c (__local_bh_count): Renamed from ++ local_bh_count. ++ (__local_irq_count): Renamed from local_irq_count. ++ ++2000-06-27 Yutarou Ebihara <ebiharaml@si-linux.com> ++ ++ * arch/sh/kernel/cf-enabler.c (cf_init): Use ctrl_outw instead ++ of outw. ++ ++2000-06-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the change of 2.4.0-test2. ++ * arch/sh/kernel/time.c: Include <linux/config.h>. ++ * include/asm-sh/keyboard.h: Likewise. ++ * arch/sh/defconfig: Updated. ++ ++2000-06-22 Stuart Menefy <stuart.menefy@st.com> ++ ++ * driver/char/{sh-sci.c,sh-sci.h}, include/asm-sh/io.h: Changes to ++ support multiple SCI/SCIF ports concurrently. NOTE: new major device ++ number for on-chip serial ports. ++ ++ * drivers/char/{Makefile,tty_io.c}, include/asm-sh/serial.h, ++ arch/sh/config.in, arch/sh/kernel/serup_se.c: Add support for 16550 ++ compatible UARTS. ++ ++2000-06-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/boot/compressed/misc.c (puts): Don't call put_string. ++ ++ * arch/sh/Makefile (tool_prefix): Renamed from tool-prefix. ++ ++ * include/asm/checksum.h (csum_ipv6_magic): Define only when ++ CONFIG_IPV6 is enabled. ++ ++ Follow the change of 2.4.0-test1-ac20. ++ * arch/sh/kernel/setup.c (memparse): Removed. ++ ++2000-06-17 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/defconfig: Updated. ++ ++ Follow the change of 2.4.0-test1-ac19. ++ * arch/sh/kernel/entry.S (tsk_ptrace): Use ptrace field and ++ PT_TRACESYS. ++ * arch/sh/kernel/ptrace.c (sys_ptrace, syscall_trace): Likewise. ++ * arch/sh/kernel/signal.c (do_signal): Likewise. ++ * arch/sh/kernel/process.c (sys_execve): Likewise. ++ ++2000-06-13 Stuart Menefy <stuart.menefy@st.com> ++ ++ * include/asm-sh/uaccess.h: Fixed __copy_user to return the number ++ of bytes not copied rather than EFAULT when an error occurs. ++ ++ * arch/sh/config.in, arch/sh/kernel/Makefile, ++ arch/sh/kernel/setup_od.c: ++ Added STMicroelectronics Overdrive support. ++ ++ * arch/sh/kernel/setup.c, arch/sh/kernel/time.c, ++ drivers/char/sh-sci.h, include/asm-sh/processor.h: ++ Added recording of the various clock frequencies, and use the ++ module clock frequency when setting the serial port baud rate. ++ ++ * drivers/char/sh-sci.c: Modifications to set the baud rate ++ when used as the console. ++ ++2000-06-11 YAEGASHI Takeshi <yaegashi@ma.kcom.ne.jp> ++ ++ * include/asm-sh/linux_logo.h: Needed for the frame buffer console. ++ Would anyone design and contribute our logo? :-> ++ ++ * net/ipv4/ipconfig.c: Remove inclusion of <asm/segment.h>. ++ ++ * drivers/char/Makefile, include/asm-sh/keyboard.h, ++ drivers/char/scan_keyb.c, drivers/char/scan_keyb.h, ++ drivers/char/hp600_keyb.c: Add generic scan keyboard driver and ++ HP690 scan code table. ++ ++ * arch/sh/kernel/Makefile, arch/sh/kernel/irq.c, ++ arch/sh/kernel/io_hd64461.c, arch/sh/kernel/setup_hd64461.c, ++ include/asm-sh/hd64461.h,: Add support for HD64461 companion chip. ++ ++ * drivers/video/Config.in, drivers/video/Makefile, ++ drivers/video/fbmem.c, drivers/video/hitfb.c: Add support for ++ HD64461 frame buffer. ++ ++ * drivers/char/vt.c: Add !defined(__sh__) to the #if conditionals to ++ avoid sys_ioperm(). ++ ++ * arch/sh/kernel/time.c, drivers/char/sh-sci.h, ++ include/asm-sh/ide.h: ad hoc work around for HP690... ++ ++ * arch/sh/config.in: introduce new configs: CONFIG_SH_HP600, ++ CONFIG_HD64461, and so on. ++ ++ * arch/sh/boot/compressed/Makefile: my kernel is now bigger than ++ 1MB... ++ ++2000-06-09 Tadashi Kadowaki <kadowaki@white.plala.or.jp> ++ ++ * arch/sh/Makefile (CFLAGS, AFLAGS, LDFLAGS): Support big endian. ++ ++2000-06-08 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/ptrace.c (sys_ptrace): Bug fix. Change the ++ last argument of access_process_vm. ++ ++ (ubc_set_tracing): Handle SH7709's UBC. I don't know it's right. ++ I see SH7729 manual. ++ ++2000-06-08 YAEGASHI Takeshi <yaegashi@ma.kcom.ne.jp> ++ ++ * include/asm-sh/pgtable.h (mk_pte_phys): Don't add + __MEMORY_START. ++ 2000-05-18 change is wrong. ++ ++2000-06-07 Toshiharu Nozawa <nozawat@hitachi-ul.co.jp> ++ ++ Compact Flash Support for SolutionEngine. ++ * arch/sh/kernel/cf-enabler.c (cf_init): Implemented for ++ SolutionEngine. ++ ++ * include/asm-sh/hitachi_se.h (PA_MRSHPC_*, MRSHPC_*): Added. ++ ++ * arch/sh/config.in: SolutionEngine may use enabler. ++ ++2000-06-02 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (Throughout): Use ".align 2" instead ++ of ".balign 4". ++ (debug_kernel): Renamed from "debug". ++ (debug_trap): Implemented. ++ (system_call): Call debug_trap. ++ ++ * arch/sh/kernel/process.c (break_point_trap_software): New ++ function. ++ (break_point_trap): Define arguments. ++ ++ * arch/sh/kernel/entry.S (system_call): Push/Pop registers ++ against syscall_trace, those may be clobbered. ++ ++2000-06-01 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * net/sunrpc/clnt.c, fs/nfs/read.c, fs/nfs/proc.c, ++ fs/nfs/nfs3proc.c, fs/nfs/file.c, fs/nfs/dir.c: Remove inclusion ++ of <asm/segment.h>, as Trond agreed to do that. ++ ++ * drivers/net/stnic.c (stnic_reset): Add last "\n". ++ (stnic_block_output): Added magic curses from oaknet.c. ++ ++2000-05-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the change of pre10-2. ++ * include/asm-sh/ide.h (ide_init_hwif_ports): set IDE_IRQ_OFFSET=0. ++ ++2000-05-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/Makefile (OBJCOPY): Added -R .stab and -R .stabstr too. ++ ++ * arch/sh/vmlinux.lds.S: Fill nop (=0x0009) for .text section. ++ (.empty_zero_page): Make it independent section. ++ ++ * arch/sh/boot/compressed/Makefile: Remove setting of CFLAGS here. ++ (ZIMAGE_OFFSET): Calculate the value by shell. ++ (piggy.o: OBJCOPY): Added -R .empty_zero_page. ++ ++ * arch/sh/boot/compressed/head.S (kernel_start_addr): Use _text. ++ Remove __ASSEMBLY__ for newer kernel. ++ ++ * arch/sh/boot/compressed/misc.c (decompress_kernel): Return type ++ changed to void (was: int). ++ (memcpy): Let it return value. ++ (memset): Ditto. ++ (HEAP_SIZE): Make it big enough. ++ (decompress_kernel): Use _text for initialization of output_ptr. ++ ++ * drivers/char/sh-sci.c (put_char, put_string, get_char, ++ handle_error, lowhex, highhex, hexchars): Moved to ... ++ drivers/char/sh-sci.h: ...here. ++ drivers/char/sh-sci.c (gdb_detach): Added __init qualifier. ++ ++ Bug fix. ++ * include/asm-sh/uaccess.h (__copy_user): Bug fix for __N == 0. ++ Reported by Toshinobu Sugioka <sugioka@itonet.co.jp>. ++ ++2000-05-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgtable.h (mk_pte_phys): Bug fix. Added ++ __MEMORY_START. ++ ++ Bug fixes for swap entry encoding and pte encoding. ++ (_PAGE_FLAGS_HARDWARE_MASK): Mask V-bit. ++ (_PAGE_FLAGS_HARDWARE_DEFAULT): Enable V-bit. ++ Make _PAGE_PRESENT as software flag, and let it be the b0-bit. ++ ++2000-05-17 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): We don't need to call ++ __flush_tlb_page. See the implementation of establish_pte in ++ mm/memory.c. ++ (handle_vmalloc_fault): Instead, call __flush_tlb_page here. ++ (update_mmu_cache): Conditionalize the setting of PTEH. ++ (handle_vmalloc_fault): Change the first argument type. ++ ++2000-05-16 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/boot/compressed/Makefile (head.o): Remove dependency ++ to $(TOPDIR)/include/linux/tasks.h. ++ ++ * arch/sh/boot/compressed/head.S: Removed #include <asm/segment.h>. ++ ++2000-05-16 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Compressed vmlinux support by Stuart Menefy. ++ ftp.uk.linux.org:/pub/superh/linux-2.2.13-shpatch-0.03.gz ++ * arch/sh/boot/Makefile, ++ arch/sh/boot/compressed/Makefile, ++ arch/sh/boot/compressed/misc.c, ++ arch/sh/boot/compressed/install.sh, ++ arch/sh/boot/compressed/head.S: New files imported. ++ ++2000-05-14 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/lib/checksum.S (csum_partial): Improved a bit. ++ * include/asm-sh/checksum.h (ip_fast_csum): Improved implementation ++ for both of code size and speed. ++ (csum_fold): Removed last line: "extu.w %0, %0". It's not needed, ++ as it always cast to unsigned short. Caution: the result value as ++ "unsigned int" is different. ++ ++2000-05-13 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/time.c (time_init): Bug fix for SH-3's CPG. ++ Not fully implementation yet. ++ ++ * include/asm-sh/smc37c93x.h (GPIO46_INDEX, GPIO47_INDEX): Added. ++ * arch/sh/kernel/setup_se.c (init_smsc): Added setting of ++ nIO{R,W}OP. Suggested by Toshiharu Nozawa <nozawat@hitachi-ul.co.jp>. ++ ++ * include/asm-sh/unistd.h (_syscall5): Bug fix. ++ ++ * arch/sh/kernel/irq.c (init_irq_proc): Added. ++ ++2000-05-09 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/lib/checksum.S: Bug fix for big endian. ++ ++ * arch/sh/kernel/ptrace.c (sys_ptrace): Follow the change of ++ 2.3.99-pre7-6. ++ * arch/sh/mm/fault.c (do_page_fault): Likewise. ++ ++2000-05-08 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/net/stnic.c: New file by Kazumoto Kojima. ++ (stnic_probe): Changed the prototype. ++ (stnic_probe): Use new style probing API. ++ ++ * include/asm-sh/hitachi_se.h (IRQ_STNIC): Added. ++ ++ * arch/sh/kernel/time.c (time_init): New variable `bus_clock'. ++ ++2000-05-08 Toshinobu Sugioka <sugioka@itonet.co.jp> ++ ++ * include/asm-sh/checksum.h (csum_fold): Change the implementation ++ for readability and in case it is used with no cast to ushort. ++ ++ * arch/sh/lib/checksum.S: Shift 8-bit when it's big endian. ++ ++2000-05-06 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm/io.h (outb, outb_p, outw, outl): Fix the prototype. ++ * arch/sh/kernel/io_se.c (outb, outb_p, outw, outl): Follow the ++ change of io.h. ++ ++ * arch/sh/kernel/io_generic.c (inb, inb_p, inw, inl, insb, insw, ++ insl, outb, outb_p, outw, outl, outsb, outsw, outsl): Fix the ++ prototype. ++ ++ * arch/sh/kernel/setup_se.c (init_smsc): Removed setting of ++ POWER_CONTROL, since it is done by ACTIVATE. ++ ++2000-05-05 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/char/sh-sci.h (SCI_IPR_ADDR): Fixed typo. ++ * arch/sh/kernel/setup_se.c (init_se_IRQ): Fixed the value, it is ++ inverted. ++ ++2000-05-03 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/irq.c (do_IRQ): Don't call sti. ++ ++ * arch/sh/kernel/irq_ipr.c (make_ipr_irq): Don't enable it at this ++ time. It will be enabled when request_irq is called. ++ ++ Fixes for I/O handling. ++ * arch/sh/kernel/setup_se.c (smsc_config): Use outb_p. ++ (init_smsc): Set Power Control register. ++ ++ * include/asm-sh/io.h (inb_p, outb_p): Added. ++ (inb, inw, inl): Fix the return value type. ++ ++ * arch/sh/kernel/io_generic.c (delay, inb_p, outb_p): New functions. ++ * arch/sh/kernel/io_se.c (delay, inb_p, outb_p): New functions. ++ ++ * include/asm/irq.h (INTC_IPRB): Fix typo. ++ ++2000-05-03 NIIBE Yutaka <gniibe@m17n.org> ++ ++ New I/O handling. ++ * arch/sh/kernel/io_generic.c: New file. ++ ++ * arch/sh/config.in (CONFIG_IOPORT_START): New CONFIG variable. ++ (CONFIG_CF_ENABLER): Conditionalize it (Not for SolutionEngine). ++ ++ * include/asm-sh/ide.h (ide_default_irq, ide_default_io_base): ++ Use PORT, instead of ADDR. ++ ++ * include/asm-sh/io.h (inb_local, outb_local): Removed. ++ (inb,inw,inl,insb,insw,insl,outb,outw,outl,outsb,outsw,outsl): ++ Make them real function. ++ (sh_isa_slot,isa_readb,isa_readw,isa_readl,isa_writeb, ++ isa_writew,isa_writel,isa_memset_io,isa_memcpy_fromio): Added. ++ ++ SolutionEngine support. ++ * include/asm-sh/smc37c93x.h: New file by Kazumoto Kojima. ++ * arch/sh/kernel/setup_se.c: New file by Kazumoto Kojima. ++ * include/asm-sh/hitachi_se.h: Ditto. ++ ++ * arch/sh/kernel/Makefile (O_OBJS): Added irq_ipr.o, removing ++ irq_onchip.c. Added setup_se.c. ++ ++2000-05-02 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/fault.c (do_page_fault): Bug fix. When "Oops", we ++ don't try to follow the page handling data when PGDIR==0. ++ ++ * arch/sh/kernel/time.c (time_init): Removed IPR setting. ++ * arch/sh/kernel/irq_ipr.c (init_IRQ): ... moved to here. ++ ++ * drivers/char/sh-sci.c (sci_init): Use new calling of set_ipr_data. ++ * drivers/char/sh-sci.h (SCI_IPR_POS, SCI_IPR_ADDR): New macros. ++ (SCI_IPR_OFFSET): Removed. ++ ++ * arch/sh/kernel/irq_ipr.c (startup_ipr_irq, ipr_irq_type, ++ disable_ipr_irq, enable_ipr_irq, make_ipr_irq, mask_and_ack_ipr, ++ end_ipr_irq): Renamed from *_onChip_*. ++ (struct ipr_data): Added member POS. Remove OFFSET, and added ADDR. ++ (startup_onChip2_irq, onChip2_irq_type, disable_onChip2_irq, ++ enable_onChip2_irq, mask_and_ack_onChip2, end_onChip2_irq): Removed. ++ ++ * include/asm-sh/irq.h (make_ipr_irq): Renamed from make_onChip_irq. ++ (set_ipr_data): Change the prototype for address. ++ ++ * arch/sh/kernel/irq_ipr.c: Renamed from irq_onchip.c. ++ ++2000-05-01 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Support of SH7709A. ++ * arch/sh/kernel/time.c (do_timer_interrupt): Remove Takeshi's ++ debugging code (output to Port C). ++ ++ * drivers/char/sh-sci.h (PCLK): Added value for my SH7709A board. ++ * drivers/char/sh-sci.c (sci_set_termios_cflag): Added SH7709's ++ SCPCR/SCPDR handling. ++ (put_char, get_char): Added dummy read of SC_SR, Without this, some ++ garbage characters would appear on SH7709A. ++ ++2000-04-30 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (restore_all): Bug fix. We should consider ++ FPU exception within the critical region. We should not change the ++ IMASK value in this case. Or else, we would introduce a "hole" in ++ the critical region. ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): Bug fix. We need to flush ++ ITLB. ++ ++ * arch/sh/kernel/time.c (time_init): Bug fix. The interval should ++ depend on HZ. ++ ++2000-04-29 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache.c (flush_cache_all): Don't touch CCR. ++ (flush_cache_range): Don't call icache_purge_range. ++ (dcache_flush_range, dcache_purge_range): Removed. ++ ++ * arch/sh/kernel/entry.S (system_call): Bug fix. Substract 0x40 ++ from TRA number. ++ ++ * arch/sh/kernel/signal.c (save_sigcontext_fpu): Cosmetic fix. ++ Use __copy_to_user as it's user-space value. ++ ++2000-04-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Bug fixes of cache handling of SH-4. ++ * arch/sh/mm/cache.c (dcache_flush_range, dcache_purge_range, ++ dcache_wback_range): Renamed from cache_flush_area, ++ cache_purge_area, cache_wback_area, and only handle D-cache. ++ ++ (icache_purge_range): New function. ++ (flush_icache_range): Use icache_purge_range. ++ ++ (flush_icache_page): Bug fix. Rewritten. ++ (flush_cache_range): Bug fix. Rewritten. ++ (flush_page_to_ram): Implemented. ++ ++ (cache_wback_all): Assumes it is called P2 area, and make ++ it inline function. ++ (cache_init): Jump to P2-area before calling cache_wback_all. ++ (flush_cache_all): Likewise. ++ ++ (CACHE_IC_ENTRY_SHIFT, CACHE_IC_NUM_ENTRIES, ++ CACHE_OC_ENTRY_PHYS_MASK): New macros. ++ ++ * include/asm-sh/cache.h (cache_flush_area, cache_purge_area, ++ cache_wback_area): Hide them as cache.c static function. ++ ++2000-04-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Bug fix of cache handling of SH-4. ++ * arch/sh/mm/cache.c (flush_page_to_ram): Replaced from ++ __flush_page_to_ram. ++ * include/asm-sh/pgtable.h (__flush_page_to_ram): Removed. ++ (flush_page_to_ram): Declare directly. ++ * include/asm-sh/system.h (back_to_P1): Added one more nop. ++ ++ Cosmetic change for TLB handling of SH-4. ++ * arch/sh/mm/fault.c (__flush_tlb_page): Removed useless ++ ITLB handling. ++ ++ Updated to 2.3.99-pre6. ++ * include/asm-sh/{atomic.h,delay.h,hardirq.h,smplock.h,system.h}: ++ Follow the change of 2.3.99-pre6-7. ++ * arch/sh/mm/fault.c (__verify_write, do_page_fault): Follow the ++ change of 2.3.99-pre6-6. ++ ++2000-04-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.3.99-pre6-5. ++ ++2000-04-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (debug, system_call, restore_all, ++ handle_exception): Change the order of push/pop, and accessing ++ memory on the stack. Introduce new syscall ABI. ++ ++ * include/asm-sh/ptrace.h (struct pt_regs): Reorganize the ++ structure. ++ * include/asm-sh/sigcontext.h: Likewise. ++ ++ * arch/sh/kernel/signal.c (setup_frame, setup_rt_frame): ++ Use New ABI. ++ * arch/sh/kernel/process.c (kernel_thread): Use New ABI. ++ * include/asm-sh/unistd.h (_syscall0, _syscall1, _syscall2, ++ _syscall3, _syscall4, _syscall5): Use New ABI. ++ ++ * arch/sh/kernel/process.c (sys_execve, sys_vfork, sys_clone, ++ sys_fork): Follow the change of syscall ABI. ++ * arch/sh/kernel/signal.c (sys_sigsuspend, sys_rt_sigsuspend, ++ sys_sigaltstack, sys_sigreturn, sys_rt_sigreturn): Likewise. ++ * arch/sh/kernel/sys_sh.c (sys_pipe): Likewise. ++ ++2000-04-21 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/time.c (RCR1_*, RCR2_*): Defined. ++ (set_rtc_time, get_rtc_time, get_cpu_mhz): Use them. ++ ++ * arch/sh/kernel/time.c (get_rtc_time): Bug fix. Clear CF-bit every ++ time. Set RCR2_RTCEN to start RTC. ++ ++ * include/asm-sh/elf.h (SET_PERSONALITY): Follow the change ++ of 2.3.99-pre6-3. ++ ++2000-04-20 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Change how to set syscall_nr. ++ * arch/sh/kernel/entry.S (handle_exception): Set syscall_nr = -1, ++ as default. ++ (system_call): Set syscall_nr. ++ * arch/sh/kernel/entry.S (tlb_miss_load, tlb_miss_store, ++ initial_page_write, tlb_protection_violation_load, ++ tlb_protection_violation_store, error): Don't touch syscall_nr. ++ * arch/sh/kernel/fpu.c (do_fpu_state_restore, do_fpu_error): Likewise. ++ * arch/sh/kernel/traps.c (DO_ERROR): Likewise. ++ * arch/sh/kernel/irq.c (do_IRQ): Likewise. ++ ++ Change IMASK irq handling implementation. ++ * arch/sh/kernel/entry.S (restore_all, STI): Use r6_bank, instead ++ of r5_bank. ++ * arch/sh/kernel/irq_imask.c (set_interrupt_registers): Likewise. ++ * arch/sh/kernel/head.S (_stext): Likewise. ++ * include/asm-sh/system.h (__sti): Likewise. ++ ++ Change CURRENT implementation. Use $r7_bank1 to have pointer to ++ "current" task, instead of having stack pointer in $r4_bank1. ++ * include/asm-sh/current.h (get_current): Use $r7_bank. ++ * arch/sh/kernel/process.c (__switch_to): Save to $r7_bank. ++ * arch/sh/kernel/entry.S (system_call, ret_with_reschedule, ++ handle_exception): Use $r7_bank. ++ * arch/sh/kernel/traps.c (dump_stack): Likewise. ++ * arch/sh/kernel/head.S (_stext): Likewise. ++ ++ Bug fix. ++ * arch/sh/mm/cache.c (flush_cache_all): Assume that it is called in ++ interrupt disabled state. ++ (flush_cache_all): Fixed race condition. ++ ++ * arch/sh/kernel/fpu.c (do_fpu_state_restore): Release FPU. ++ ++2000-04-16 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/fpu.c (do_fpu_state_restore, fpu_prepare_fd): ++ Handle complicated situation where it gets inconsistent. It would ++ be good if SH has some atomic op-code for handling SR register, ++ or ll/sc. ++ ++ * arch/sh/kernel/process.c (__switch_to, dump_fpu, copy_thread): ++ Fix race conditions where FPU registers may be corrupted. I.e., ++ protect unlazy_fpu. ++ * arch/sh/kernel/signal.c (save_sigcontext_fpu): Likewise. ++ ++2000-04-14 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (STI): It was wrong. Replace from ++ RESTORE_FLAGS. ++ ++ * include/asm-sh/system.h (__restore_flags): Use __sti. ++ ++ * arch/sh/kernel/irq_imask.c (set_interrupt_registers): Bug fix. ++ We do compare the b7-b4 bits. ++ ++2000-04-09 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/irq_imask.c (imask_irq_type) : Change the name ++ so that output of /proc/interrupt looks good. ++ * arch/sh/kernel/irq_onchip.c (onChip_irq_type, onChip2_irq_type): ++ Likewise. ++ ++ * arch/sh/kernel/entry.S (RESTORE_FLAGS): Bug fix. Compare ++ four bits properly. ++ ++ * drivers/char/sh-sci.c (sci_init_drivers): Add CRTSCTS flag. ++ ++ * include/asm-sh/elf.h (ELF_PLAT_INIT): Initialize SR register. ++ ++ * arch/sh/kernel/signal.c (sys_sigsuspend, sys_rt_sigsuspend, ++ sys_sigaltstack, sys_sigreturn, sys_rt_sigreturn): Follow new ++ syscall ABI. ++ ++ * arch/sh/kernel/sys_sh.c (sys_pipe): Follow new syscall ABI. ++ ++ * arch/sh/kernel/entry.S (system_call): Bug fix. Access SP+8, since ++ $r2 and $r3 are on the stack. ++ ++ * include/asm-sh/unistd.h (_syscall5): Follow the change of ABI. ++ ++2000-04-08 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/config.in: Updated to 2.3.99-pre4-pre5. ++ * arch/sh/kernel/Makefile (.S.o, head.o): Likewise. ++ * arch/sh/lib/Makefile (.S.o): Likewise. ++ * arch/sh/mm/init.c (paging_init): Likewise. ++ * include/asm-sh/namei.h (__emul_prefix): Likewise. ++ ++ * arch/sh/defconfig: Updated. ++ ++ Syscall ABI changes suggested by Stuart Menefy. ++ * arch/sh/kernel/process.c (sys_fork, sys_clone, sys_vfork, ++ sys_execve): Follow new syscall ABI. ++ ++ * arch/sh/kernel/entry.S: New macro COMPAT_OLD_SYSCALL_ABI. ++ New syscall ABI which use $r2 and $r3. ++ ++2000-04-05 Kazumoto Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/kernel/head.S: Initialize FPU. ++ * arch/sh/kernel/fpu.c (save_fpu, restore_fpu): Set FPSCR ++ register (SZ=0) before FMOV.S operation. ++ * arch/sh/kernel/entry.S (handle_exception, restore_all): Likewise. ++ * arch/sh/kernel/entry.S (handle_exception): Bug fix for setting $k1. ++ We should better not use delay slot for PC-relative-load. ++ ++ * arch/sh/kernel/signal.c (restore_sigcontext): Fix the tsk. ++ (restore_sigcontext_fpu): Fix the structure member name. ++ (save_sigcontext_fpu): Likewise. ++ ++2000-04-03 Ludovic LANGE <ludovic.lange@free.fr> ++ ++ * include/asm-sh/ptrace.h (UBC_*): Fix the values. ++ ++2000-04-01 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/hardirq.h (in_interrupt): Bug fix. ++ (local_bh_count): Moved from softirq.h. ++ ++2000-03-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/char/sh-sci.c: Use module_init. ++ ++ * arch/sh/defconfig: Updated. ++ ++ * include/asm-sh/sigcontext.h(struct sigcontext): Following the ++ usage of GCC, change sc_xfpregs --> sc_xdregs. ++ ++ * arch/sh/kernel/process.c (copy_thread): Don't use struct_cpy. ++ * include/asm-sh/string.h (struct_cpy): Removed. As we have memcpy ++ implementation. ++ ++2000-03-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Merge "ptrace" by Kaz. ++ * arch/sh/kernel/ptrace.c (ubc_set_tracing, compute_next_pc): ++ New functions. Implemented by Kaz Kojima. ++ ++ * arch/sh/kernel/process.c (break_point_trap): New function. ++ Implemented by Kaz Kojima. ++ ++2000-03-21 Sugioka Toshinobu <sugioka@itonet.co.jp> ++ ++ * include/asm-sh/uaccess.h (__clear_user): Bug fix. ++ (__strncpy_from_user): Bug fix. ++ ++2000-03-20 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/unistd.h (__NR_mincore, __NR_madvise): Follow ++ the change of 2.33.99-pre2. ++ * include/asm-sh/mman.h (MADV_*): Likewise. ++ * arch/sh/kernel/entry.S: Likewise. ++ ++ * drivers/char/sh-sci.c (sci_set_real_termios): Follow the change of ++ interface of generic_serial.h of 2.33.99-pre2. ++ ++ * include/asm-sh/page.h (clear_user_page, copy_user_page): Follow ++ the change of 2.33.99-pre2. ++ * include/asm-sh/pci.h: Likewise. ++ ++2000-03-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/ptrace.h: Change the order of the member, ++ so that implementation of ptrace gets straight. ++ Remove SP and use REGS[15] instead. ++ * include/asm-sh/sigcontext.h: Likewise. ++ ++ * arch/sh/kernel/entry.S (debug, system_call, restore_all, ++ handle_exception): Change the order of push/pop, and reference. ++ ++ * arch/sh/kernel/signal.c: Follow the change of struct pt_regs. ++ * arch/sh/kernel/process.c: Likewise. ++ ++2000-03-10 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/config.in: Follow the change of 2.3.51. ++ * arch/sh/defconfig: Updated. ++ ++ * arch/sh/kernel/signal.c (restore_sigcontext_fpu): New function. ++ (restore_sigcontext): Restore FPU context when used. ++ (save_sigcontext_fpu): New function. ++ (setup_sigcontext): Save FPU context. ++ Based on Kaz' implementation, preserving API of sigcontext.h. ++ ++2000-03-09 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/sigcontext.h: Added members for FPU registers. ++ (Originally done by Kaz Kojima) ++ ++2000-03-07 Terumitsu Kohama <tkohama@hipro.hitachi-hipro.co.jp> ++ ++ * drivers/char/sh-sci.h (SCBRR_VALUE): Fix the expression. ++ ++2000-03-07 Sugioka Toshinobu <sugioka@itonet.co.jp> ++ ++ * include/asm-sh/system.h (jump_to_P2, back_to_P1): Improved. ++ * arch/sh/mm/fault.c (__flush_tlb_page): Bug fix for SH-4. ++ Change TLB from P2. ++ ++ * include/asm-sh/processor.h (TASK_SIZE): Change the value ++ for SH7709/SH7750 (was: 0x80000000). ++ ++2000-03-07 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/defconfig: Updated. ++ ++ * include/asm-sh/system.h (jump_to_P2, back_to_P1): Moved ++ from cache.c. ++ ++ * arch/sh/mm/cache.c: Use new macro. ++ ++ * arch/sh/kernel/entry.S: Replace STI with RESTORE_FLAGS, ++ to allow exception in critical region (interrupt stopped). ++ ++ Follow the changes of 2.3.49. ++ * include/asm-sh/pgtable.h (FIRST_USER_PGD_NR): New macro. ++ * include/asm-sh/socket.h (SO_PEERNAME): New macro. ++ ++2000-03-06 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Use IMASK for cli/sti (instead of BL). ++ Suggested by Sugioka Toshinobu <sugioka@itonet.co.jp>. ++ (Initial implementation was done by Kaz Kojima for SH-4.) ++ ++ * arch/sh/kernel/entry.S: Use r5_bank to hold the imask value. ++ * arch/sh/kernel/irq_imask.c: Likewise. ++ * arch/sh/kernel/head.S: Likewise. ++ * include/asm-sh/system.h (__sti, __cli, __save_flags, ++ __save_and_cli, __restore_flags): New Implementation. ++ ++2000-03-06 Sugioka Toshinobu <sugioka@itonet.co.jp> ++ ++ * drivers/char/sh-sci.h: Add SH-4 support. ++ * drivers/char/sh-sci.c (sci_set_baud, sci_set_termios_cflag): ++ Support lower baudrate. ++ (sci_rx_interrupt, sci_tx_interrupt): Always clear out interrupt ++ source to avoid interrupt loop. ++ ++2000-03-05 Greg Banks <gregory.banks@nstc.nec.com.au> ++ ++ * drivers/char/sh-sci.c (sci_set_baud), drivers/char/sh-sci.h ++ (BPS_*): Support more BPSs. ++ ++2000-03-05 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the changes of 2.3.48. ++ * arch/sh/kernel/setup.c (setup_arch): Call paging_init. ++ * include/asm-sh/pgtable.h: Declare paging_init. ++ ++2000-03-04 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/lib/div.S: New file. ++ * arch/sh/kernel/fpu.c (enable_fpu_in_danger): New function. ++ ++2000-03-03 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/system.h (__restore_flags): Inherit IMASK and SR. ++ ++2000-03-02 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/processor.h (clear_fpu): Don't release_fpu(). ++ ++2000-03-01 Sugioka Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/mm/fault.c (__flush_tlb_page): Bug fix. The mask value ++ was wrong (was: 0x30). ++ ++2000-02-29 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/process.c (kernel_thread): Call unlazy_fpu. ++ ++ * arch/sh/kernel/fpu.c (do_fpu_state_restore): Bug fix. Grab FPU ++ before restore/unlazy_fpu/fpu_init or else, it causes system reset. ++ ++ * arch/sh/kernel/irq.c (do_IRQ): Add __sti() before calling softirq. ++ ++2000-02-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/char/sh-sci.h (SC_SR): Bug fix. It's 16-bit for SH-4. ++ ++ * arch/sh/kernel/head.S: Removed initalization of FPU. ++ * arch/sh/kernel/setup.c (setup_arch): ...Moved here. ++ Besides, set used_math and flags of init_task. ++ ++2000-02-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/user.h (struct user): Add u_fpvalid. ++ ++ * arch/sh/kernel/head.S: SR.FD=1 on initialization. ++ ++ * arch/sh/kernel/fpu.c (fpu_prepare_fd, do_fpu_state_restore, ++ do_fpu_error, fpu_init): Implemented. ++ ++ * arch/sh/kernel/entry.S (restore_all, handle_exception): Handle FPU. ++ ++2000-02-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/process.c (__switch_to): Call unlazy_fpu. ++ (last_task_used_math): Removed. ++ ++ * include/asm-sh/elf.h (elf_fpregset_t): Change the definition. ++ * include/asm-sh/user.h (user_fpu_struct): Added. ++ (struct user): Added fpu support. ++ ++ * arch/sh/kernel/Makefile (O_OBJS): Add fpu.o for CONFIG_CPU_SH4. ++ ++2000-02-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/fault.c (do_page_fault): Bug fix. (The value ++ stored in MMU_TTB is kernel address (not physical address)). ++ ++ * include/asm-sh/unistd.h (_syscall5): Added. ++ (_syscall4): Bug fix of register __sc7. ++ ++2000-02-20 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the changes of 2.3.45-47. ++ * include/asm-sh/page.h (get_order): Added. ++ ++2000-02-14 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the changes of 2.3.44. ++ * arch/sh/mm/init.c (paging_init): Use free_area_init_node. ++ * include/asm-sh/pgtable.h (__pgd_offset): Use pgd_index. ++ * arch/sh/mm/cache.c (flush_icache_page): Implemented. ++ ++2000-02-13 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/time.c (time_init, get_rtc_time): Don't depend on ++ CONFIG_SH_CPU_RTC (Always enabled). ++ ++ * arch/sh/config.in: Serial interface is "choice" (at least for now). ++ (CONFIG_SH_CPU_RTC): Removed. ++ ++2000-02-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the change of 2.3.43. ++ Softirq change: ++ * arch/sh/kernel/irq.c (do_IRQ): Change bottom half interface to ++ softirq. ++ * include/asm/softirq.h (local_bh_enable): Ditto. ++ Remove unused macros. ++ * arch/sh/kernel/entry.S (handle_softirq): Ditto. ++ (ret_from_irq): Branch to ret_from_syscall, so that softirq will ++ be called. ++ * arch/sh/kernel/signal.c (do_signal): Go back if kernel mode. ++ (setup_rt_frame): Bug fix. The number is NR_rt_sigreturn. ++ * include/asm-sh/hardirq.h (in_irq): Moved from softirq.h. ++ ++ Memory management change: ++ * include/asm-sh/pgalloc.h (flush_tlb_pgtables): Added. ++ * include/asm-sh/mmu_context.h (enter_lazy_tlb): Added. ++ (switch_mm): Set bit of cpu_vm_mask befor activate_context. ++ * arch/sh/mm/init.c (show_mem): Remove calling show_net_buffers. ++ * include/asm-sh/page.h (PTE_MASK): Added. ++ * include/asm-sh/pgtable.h (_PAGE_CHG_MASK): Use PTE_MASK. ++ ++2000-02-10 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/chare/sh-sci.h: New file. ++ * drivers/chare/sh-sci.c: Try to merge sh-scif.c. ++ ++ * arch/sh/{config.in,defconfig}: Updated. ++ ++2000-02-08 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/setup.c (setup_arch): Use init_bootmem_node, ++ instead of init_bootmem. ++ ++ * arch/sh/mm/init.c (paging_init, mem_init): Get memory info from ++ NODE_DATA. See bootmem.c for detail. Use free_area_init_core, ++ instead of free_area_init. ++ ++2000-02-06 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the change of 2.3.42. ++ * arch/sh/defconfig: Updated. ++ * include/asm-sh/checksum.h: Include changes from 2.3.42. ++ * arch/sh/config.in: Change the semantics of CONFIG_SERIAL. ++ * drivers/char/Makefile: Likewise. ++ ++ * drivers/chare/sh-sci.c: Remove locks, actually this *was* the ++ cause of the race condition! ++ (my_hd): Removed. ++ ++2000-02-05 Peter Orem <pmorem@iptcorp.com> ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): Set PTEH register. ++ ++2000-01-30 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the changes of 2.3.41. ++ * include/asm-sh/system.h (xchg_u8): Added. ++ * include/asm-sh/pci.h: Added Dynamic DMA mapping stuff. ++ * include/asm-sh/scatterlist: Added. ++ * arch/sh/kernel/semaphore.c (Read-Write semaphoe): Implemented. ++ * include/asm-sh/semaphore.h (Read-Write semaphoe): Added. ++ * include/asm-sh/unistd.h (__NR_pivot_root): Added. ++ * include/asm-sh/types.h (dma_addr_t): Added. ++ * include/asm-sh/termios.h (TIOCM_LOOP): Added. ++ * include/asm-sh/siginfo.h (NSIGCHLD): Define as 6. ++ * arch/sh/kernel/entry.S (sys_pivot_root): Added. ++ * arch/sh/kernel/sys_sh.c (sys_uname): Apply change of 2.3.41. ++ ++ * include/asm-sh/dma.h (MAX_DMA_ADDRESS): Remove +__MEMORY_START, ++ and set it 256MB. ++ ++2000-01-29 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (tlb_miss,general_exception): Set ++ return address to ret_from_irq. In case of system call, ++ it is overwritten to ret_from_syscall. ++ ++2000-01-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/dma.h (MAX_DMA_ADDRESS): All area (512MB) can ++ be used with DMA. ++ ++2000-01-25 Toshiharu Nozawa <nozawat@hitachi-ul.co.jp> ++ ++ * arch/sh/mm/init.c (paging_init): Bug fix for ++ zones_size[ZONE_NORMAL]. ++ ++2000-01-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/siginfo.h: Follow the changes of 2.3.41-pre2. ++ * arch/sh/kernel/signal.c (do_signal): Likewise. ++ ++2000-01-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/sys_sh.c (sys_pipe): Follow the ABI of Kaz' ++ Implementation. ++ ++2000-01-21 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/fault.c (do_page_fault): Bug fix for OOPS. ++ ++ * include/asm-sh/posix_types.h: Follow the changes of 2.3.40. ++ ++2000-01-16 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/char/sh-sci.c (sci_er_interrupt): Kick transmission. ++ ++2000-01-15 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/unistd.h (__NR_getrlimit, __NR_umount): Compatibility ++ change for libc. ++ ++2000-01-13 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/signal.c (do_signal): set si_uid16. ++ ++ * arch/sh/kernel/entry.S: Changed to support *16. ++ ++ * include/asm-sh/unistd.h (*32): Added. ++ ++ * include/asm-sh/msgbuf.h, include/asm-sh/ipcbuf.h, ++ include/asm-sh/sembuf.h, include/asm-sh/shmbuf.h: New files. ++ ++ * include/asm-sh/siginfo.h: Support uid32/gid32. ++ ++ * include/asm-sh/posix_types.h: Introduce uid16/32, gid16/32. ++ ++2000-01-09 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/time.c (time_init): Remove INTERVAL. ++ ++ Follow the changes of 2.3.35--2.3.38. ++ * include/asm/checksum.h (csum_partial_copy_to_user): Removed. ++ * include/sh/processor.h (get_task_struct): Added. ++ * arch/sh/kernel/setup.c (setup_arch): Add condition for ++ INITRD_START. ++ ++ ++Local Variables: ++mode: change-log ++left-margin: 8 ++fill-column: 76 ++version-control: never ++End: +diff -ruN linux-2.6.17-vanilla/ChangeLog-2001 linux-2.6.17/ChangeLog-2001 +--- linux-2.6.17-vanilla/ChangeLog-2001 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/ChangeLog-2001 2006-07-12 16:54:18.000000000 +0000 +@@ -0,0 +1,1827 @@ ++2001-12-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/fpu.c (do_fpu_error): Handle denormalized floating ++ point number. Remove un-needed grab_fpu. ++ ++ * arch/sh/kernel/head.S (_stext): Don't initialize FPU, as FPU is ++ not used by kernel. ++ (SR): Initial value with FD=1 (no FPU use). ++ ++ * include/asm-sh/processor.h (unlazy_fpu): Don't need to grab_fpu. ++ (clear_fpu): Call release_fpu. ++ ++ * arch/sh/kernel/entry.S (PF_USEDFPU, __PF_USEDFPU): Removed. ++ (restore_all, handle_exception): Simplified. ++ (__fpu_prepare_fd, __init_task_flags): Removed ++ ++ * arch/sh/kernel/fpu.c (enable_fpu_in_danger): Removed. ++ (fpu_prepare_fd): Removed. ++ ++2001-12-28 Kazumoto Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * include/asm-sh/processor.h (FPSCR_ENABLE_MASK, FPSCR_FLAG_MASK): ++ New macros. ++ ++ * arch/sh/kernel/fpu.c (denormal_to_double, ieee_fpe_handler): ++ New functions. ++ ++2001-12-26 Jeremy Siegel <jsiegel@mvista.com> ++ ++ * arch/sh/kernel/traps.c: fix handle_unaligned_access() branch offsets ++ * arch/sh/mm/fault.c: check for null mmap when handling page fault ++ ++2001-12-20 Takashi Yoshii <yoshii-takashi@hitachi-ul.co.jp> ++ ++ * include/asm-sh/pgtable.h (pgprot_noncached): Defined and ++ implemented. ++ ++2001-12-16 Paul Mundt <lethal@chaoticdreams.org> ++ ++ * drivers/char/shwdt.c: Added a proper timer for pinging the device ++ periodically. Clock division ratio is now settable at load time .. ++ Numerous other small bug fixes. ++ ++2001-12-14 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/hitachi_se.h (PA_BCR): Comment fix to sync mainline. ++ ++ * drivers/block/rd.c (initrd_read): Don't need to flush the cache. ++ (This file can be removed.) ++ * include/linux/highmem.h (memclear_highpage_flush): Likewise. ++ ++2001-12-12 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/rtc.c (sh_rtc_gettimeofday): Fix SH-4 RTC bug work ++ around. ++ (set_rtc_time, sh_rtc_settimeofday): Likewise. Remove schedule_timeout ++ call and merged to sh_rtc_settimeofday. ++ ++2001-12-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/sys_sh.c-1.7: Removed. ++ ++2001-12-10 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * mm/memory.c (do_wp_page): Re-introduce ifdef-out-ing ++ flush_cache_page. ++ ++2001-12-06 M. R. Brown <mrbrown@0xd6.org> ++ ++ * drivers/char/maple_keyb.c (dc_scan_kbd): Replaced calls to ++ memscan() with calls to memchr(). Credit goes to Robert M. Love for ++ the patch. ++ ++2001-12-04 Jeremy Siegel <jsiegel@mvista.com> ++ * Include gdrom compile patch from Robert M. Love <rml@tech9.net> ++ * drivers/net/gdrom.c: as per patch ++ * include/asm-sh/segment.h: new file as per patch ++ ++2001-12-03 Jeremy Siegel <jsiegel@mvista.com> ++ * init/main.c: Robert Love's <rml@tech9.net> patch adding gdrom ++ to bootable device list, as per M.R. Brown (mrbrown@0xd6.org) ++ * init/main.c: new file ++ ++2001-11-30 Jeremy Siegel <jsiegel@mvista.com> ++ * drivers/char/shwdt.c: missing file copied from full tree ++ * updated to 2.5.0 (same as 2.4.15) ++ ++2001-11-02 Jeremy Siegel <jsiegel@mvista.com> ++ ++ * arch/sh/config.in: allow setting of CONFIG_SH_PCIDMA_NONCOHERENT ++ * include/asm-sh/stat.h: consistency w/glibc using either endian ++ * include/asm-sh/uaccess.h: add Tomoyoshi ASANO's big-endian fix ++ * arch/sh/kernel/{io_,pci-}7751se.c: minor cleanup ++ ++2001-10-30 Jeremy Siegel <jsiegel@mvista.com> ++ ++ * arch/sh/kernel/io_7751se.c: get pci.h from linux, not asm ++ * include/asm-sh/pci.h: define pci_dac_dma_supported() ++ ++2001-10-16 M. R. Brown <mrbrown@0xd6.org> ++ ++ * Branch merge of linux-2_4-branch. ++ ++ * Added treelink.sh and treeunlink.sh to the scripts/ directory. ++ ++ * Merged in NIIBE's updates from kernel/. ++ ++2001-10-15 M. R. Brown <mrbrown@0xd6.org> ++ ++ * Brought HEAD to a state ready for 2.5 development. ++ ++ * linux-2_4-branch branch created. This allows for concurrent ++ development of the 2.4 and 2.5 trees. ++ ++2001-10-14 NIIBE Yutaka <gniibe@server1.m17n.org> ++ ++ * drivers/net/8139too.c (rtl8139_start_xmit): Fix merge gerbage. ++ ++ * arch/sh/kernel/setup_se.c (init_se_IRQ): Remove ++ CONFIG_SH_7751_SOLUTION_ENGINE section. ++ * include/asm-sh/hitachi_se.h (PA_BCR): Likewise. ++ ++2001-10-13 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/Makefile (CFLAGS, AFLAGS): Use -m4 -mno-implicit-fp for ++ SH4 compile. We used to use -m4-nofpu but it's not compatible ++ to -m4 (differs in calling convention). ++ ++2001-10-13 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.13-pre2. ++ ++2001-10-12 David Woodhouse <dwmw2@redhat.com> ++ ++ * arch/sh/config.in: Set default memory sizes for Solution Engines ++ ++2001-10-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.12. ++ * Updated to 2.4.11. ++ ++2001-10-04 Paul Mundt <lethal@chaoticdreams.org> ++ ++ * arch/sh/mm/fault.c (do_page_fault): Don't kill init when out ++ of memory. ++ ++2001-10-01 M. R. Brown <mrbrown@0xd6.org> ++ ++ * drivers/video/pvr2fb.c (pvr2fb_init): Make fb_find_mode() default ++ to 16bpp instead of 32bpp. ++ ++2001-09-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/uaccess.h (__put_user_u64): New macro. ++ * arch/sh/kernel/signal.c: Include <linux/personality.h>. ++ * drivers/char/sh-sci.c (banner): Fix __initdata. ++ ++ * Updated to 2.4.10. ++ ++2001-09-15 Paul Mundt <lethal@chaoticdreams.org> ++ ++ * arch/sh/Makefile: Remove usage of $(tool_prefix) and needless ++ redefinition of CROSS_COMPILE. Obey toplevel CROSS_COMPILE ++ instead. ++ ++2001-09-13 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/sys_sh.c (arch_get_unmapped_area): Don't ++ COLOUR_ALIGN when it comes with MAP_PRIVATE. ++ ++2001-09-13 Paul Mundt <lethal@chaoticdreams.org> ++ ++ * Documentation/Configure.help: Add CONFIG_SH_WDT description. ++ * arch/sh/config.in: Add watchdog card menu, and watchdog driver. ++ * drivers/char/Makefile: Add CONFIG_SH_WDT support. ++ * drivers/char/shwdt.c: New file. ++ ++2001-09-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/softirq.h (__cpu_raise_softirq): Removed. ++ * Updated to 2.4.10-pre6. ++ ++2001-09-10 David Woodhouse <dwmw2@infradead.org> ++ ++ * arch/sh/mm/cache-sh3.c: Clearer definitions of CCR_CACHE_VAL and ++ CCR_CACHE_INIT. ++ * arch/sh/mm/cache-sh4.c: Likewise. ++ ++2001-09-03 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/keyboard.h (kbd_rate): Removed. ++ * Updated to 2.4.10-pre4. ++ ++2001-08-31 M. R. Brown <mrbrown@0xd6.org> ++ ++ * arch/sh/kernel/Makefile: Add dependency for rtc-aica.o for ++ CONFIG_SH_DREAMCAST. ++ * arch/sh/kernel/mach_dc.c: Add prototypes and pointers for the AICA ++ RTC routines to the machvec. ++ * arch/sh/kernel/time.c (time_init): Remove checks for ++ MACH_DREAMCAST as we can just use the RTC routines defined in the ++ machvec. ++ * arch/sh/kernel/rtc-aica.c: New file. ++ ++2001-08-31 Jeremy Siegel <jsiegel@mvista.com> ++ ++ * include/asm-sh/system.h: make __cli_and_save() volatile again ++ ++2001-08-24 David Woodhouse <dwmw2@infradead.org> ++ ++ * arch/sh/mm/cache-sh3.c: We were missing a loop over the ways in ++ __flush_wback_region(). Also disable interrupts between reading ++ an entry and writing it back modified. ++ * arch/sh/kernel/pcibios.c: Generic versions of five pcibios_xxx() ++ functions which can be shared between platforms. ++ * arch/sh/kernel/pci_st40.c: Use $1. ++ * arch/sh/kernel/pci-dc.c: Use $1. ++ * arch/sh/kernel/pci-sh7751.c: Use $1. ++ * arch/sh/kernel/Makefile: Use $1. ++ ++2001-08-23 David Woodhouse <dwmw2@infradead.org> ++ ++ * arch/sh/config.in: Add CONFIG_MEMORY_SIZE, clean up ++ platform-specific memory start/size definitions. ++ * include/asm-sh/page.h: Define __MEMORY_SIZE. ++ * arch/sh/kernel/setup.c: Use __MEMORY_SIZE instead of hardcoded 4MiB. ++ ++2001-08-22 David Woodhouse <dwmw2@infradead.org> ++ ++ * drivers/net/via-rhine.c: Update to version LK1.1.11 from ++ 2.4.9-ac9 (set dev->base_addr before first call to wait_for_reset() ++ and free the bounce buffers only if we allocated any in the first ++ place. ++ ++2001-08-20 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/elf.h: Removed inclusion of <asm/byteorder.h>. ++ ++2001-08-17 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/net/8139too.c: Include <linux/completion.h>. ++ * drivers/maple/maple.c: Likewise. ++ (kmapled_exited, maple_exit, kmapled_thread): Use new "completion" ++ interface. ++ ++ * include/asm-sh/keyboard.h (kbd_rate): New function. ++ * include/asm-sh/io.h (page_to_bus): New macro. ++ * include/asm-sh/mmzone.h (page_to_phys): Defined. ++ ++ * Updated to 2.4.9. ++ ++2001-08-14 David Woodhouse <dwmw2@infradead.org> ++ ++ * arch/sh/kernel/pci-dma.c: Use dma_cache_wback_inv() in ++ pci_alloc_consistent instead of flush_cache_all(), which is ++ a nop on SH3. If the size is so large that it's quicker just ++ to flush the whole cache, that's a decision for the ++ arch-specific cache management code to make. ++ ++2001-08-11 David Woodhouse <dwmw2@infradead.org> ++ ++ * arch/sh/config.in: New CONFIG_SH_PCIDMA_NONCOHERENT option ++ * include/asm-sh/pci.h: Include cache management calls for the ++ case where the above option is set. ++ * arch/sh/kernel/sh_ksyms.c: include linux/pci.h not asm/pci.h ++ ++2001-08-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.8. ++ ++2001-08-10 Jeremy Siegel <jsiegel@mvista.com> ++ Change SH7751 to separate machine type. ++ Added new files: ++ * arch/sh/kernel/{io,setup,mach,led}_7751se.c ++ * include/asm-sh/{io,hitachi}_7751se.h ++ Modified files: ++ * arch/sh/kernel/Makefile, arh/sh/kernel/{io,led}_se.c ++ * arch/sh/kernel/pci-{7751se,sh7751}.c ++ * include/asm-sh/{io,pci,machvec}.h ++ ++2001-08-10 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache-sh4.c (__flush_wback_region, ++ __flush_purge_region): Comment fix for the arguments. ++ * arch/sh/mm/cache-sh3.c (__flush_wback_region, ++ __flush_purge_region): Likewise. ++ ++2001-08-10 David Woodhouse <dwmw2@infradead.org> ++ ++ * arch/sh/mm/cache-sh3.c: Implementation of cache management ++ routines __flush_{wback,invalidate,purge}_region. Required for ++ SH3 platforms which have DMA hardware. ++ * include/asm-sh/pgtable.h: Take the 'extern' definitions of the ++ above out of #ifdef __SH4__ ++ ++2001-08-10 David Woodhouse <dwmw2@infradead.org> ++ ++ * drivers/mtd/maps/solutionengine.c: Map driver for flash chips ++ and PROM on Solution Engine and similar boards. ++ * drivers/mtd/maps/Config.in: Appropriate magic. ++ * drivers/mtd/maps/Makefile: Ditto. ++ ++2001-08-10 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.8-pre8. ++ ++ Bug fix for dis-contiguous page handling. ++ * include/asm-sh/mmzone.h (is_valid_page): New inline function. ++ (VALID_PAGE): Use is_valid_page. ++ ++2001-08-09 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.8-pre7. ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): Use __set_bit (was: ++ set_bit). ++ * arch/sh/mm/cache-sh4.c (copy_user_page): Set PG_mapped flag ++ in advance. Because it will be mapped real soon now. ++ (clear_user_page): Ditto. ++ ++ * include/asm-sh/pgtable.h (__flush_cache_page): Removed. ++ * arch/sh/mm/cache-sh4.c (__flush_dcache_page): Renamed from ++ __flush_cache_page and make it static. Removed u0, as it's ++ always 0. Removed the statements of case u0!=0. ++ (flush_dcache_page): Call __flush_dcache_page. ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): We only need to flush ++ cache of kernel mapped address. ++ ++2001-08-08 YAEGASHI Takeshi <t@keshi.org> ++ ++ * drivers/video/pvr2fb.c: ++ (pvr2_modedb): fix "vga_640x480" entry. ++ (pvr2fb_set_var): set SCROLL_YREDRAW to speed up scroll. ++ (pvr2_setcolreg): fix bit field manipulation for RGB565. ++ (pvr2fb_init, pvr2fb_setup): correct number of entries of ++ cable_type and video_output. ++ * drivers/char/dc_keyb.c: New file: implement kbd_translate(). ++ * drivers/char/Makefile: Ditto. ++ * include/asm-sh/keyboard.h: Ditto. ++ * arch/sh/kernel/pci-dc.c (pci_free_consistent): reset ++ gapspci_dma_used in order to allocate PCI buffer again. ++ ++2001-08-08 Greg Banks <gnb@alphalink.com.au> ++ ++ * include/asm-sh/linux_logo.h: New logo. ++ ++2001-08-08 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.8-pre6. ++ * Updated to 2.4.8-pre5. ++ ++ * arch/sh/mm/cache-sh4.c (ptep_get_and_clear): Moved to ... ++ (check_cache_page): Removed. ++ (__flush_icache_page): Removed. ++ * include/asm-sh/pgtable.h (__flush_icache_page): Removed. ++ ++ * include/asm-sh/pgalloc.h (ptep_get_and_clear): ... here. ++ (ptep_test_and_clear_young, ptep_test_and_clear_dirty, ++ ptep_set_wrprotect, ptep_mkdirty): Moved from pgtable.h. ++ (ptep_get_and_clear needs definition of mm.h). ++ ++ * include/asm-sh/pgtable.h (PG_mapped): Renamed from ++ PG_mapped_with_alias. ++ (__flush_cache_page): Removed last argument, and add first arg. ++ * arch/sh/mm/cache-sh4.c (__flush_cache_page): Take u0 address ++ as first argument. Don't care about I-cache. ++ (flush_dcache_page): Follow the change. ++ ++ * include/asm-sh/ide.h (ide_insw): Removed. ++ * drivers/cdrom/gdrom.c (gdrom_intr): Remove __flush_wback_region. ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): Flush the cache when first ++ mapped, even if it has no alias. (We needed this to for NFS). ++ ++2001-08-07 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/net/8139too.c (rtl8139_hw_start): Added tp->rx_config = 0. ++ ++2001-08-07 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgtable.h (PG_mapped_with_alias): New macro. ++ (PG_dcache_dirty: Deleted. ++ (ptep_get_and_clear, ptep_test_and_clear_young, ++ ptep_test_and_clear_dirty, ptep_set_wrprotect, ptep_mkdirty, ++ pte_same): Define here (was: included by <asm-generic/pgtable.h>). ++ ++ * arch/sh/mm/cache-sh4.c (flush_dcache_page): New implementation. ++ Check if it's mapped or not. ++ (ptep_get_and_clear): New function (was: generic implementation). ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): Flush the cache when ++ it's mapped at first, and mark the page as it's mapped. ++ Bug fix: check the page is VALID or not. ++ ++ * arch/sh/mm/cache-sh4.c (CACHE_ALIAS): Moved to ... ++ * include/asm-sh/pgtable.h (CACHE_ALIAS): ... here. ++ ++ * arch/sh/kernel/setup.c (boot_cpu_data): Have initial value for ++ loops_per_jiffy. ++ ++2001-08-06 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/clear_page.S: Use aligned address for write back. ++ * arch/sh/mm/__copy_user_page-sh4.S: Likewise. ++ * arch/sh/mm/copy_page.S: Likewise. ++ ++ * arch/sh/mm/cache-sh4.c (CACHE_IC_NUM_WAYS, CACHE_OC_NUM_WAYS): ++ Removed. ++ (cache_wback_all): Removed and integrate to cache_init. ++ ++ * arch/sh/mm/copy_page.S: Write back TO, ++ * arch/sh/mm/clear_page.S: Write back TO. ++ ++ * arch/sh/mm/cache-sh3.c (cache_init): Read CCR at P2. ++ * arch/sh/mm/cache-sh4.c (cache_init): Likewise. ++ (__flush_cache_page): Fix bug. Call restore_flags. ++ (flush_cache_page): New implementation. ++ (clear_user_page, copy_user_page): Do it in assembler routines. ++ ++2001-08-05 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgtable.h (PTE_PHYS_MASK): Defined. ++ (pte_page): Bug fix. Use PTE_PHYS_MASK. ++ ++ * mm/vmscan.c (try_to_swap_out): Bug fix. Flush the page before we ++ clear the PTE. ++ ++ * Updated to 2.4.8-pre4. ++ ++2001-08-04 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache-sh4.c (__flush_wback_region): Fix bug of ++ expression of END. ++ (__flush_purge_region): Likewise. ++ (__flush_invalidate_region): Likewise. ++ ++2001-08-03 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/cdrom/gdrom.c (gdrom_init): Restrict merging request. ++ (dont_merge_requests_fn, dont_bh_merge_fn): New functions. ++ ++ * arch/sh/kernel/sys_sh.c (arch_get_unmapped_area): Always align ++ to 16KB. ++ ++ * arch/sh/mm/cache-sh4.c (flush_cache_sigtramp): Protect from ++ interrupt. ++ (__flush_cache_page, __flush_icache_page): Likewise. ++ (check_cache_page): Likewise. ++ ++2001-08-02 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/maple/maple.c (maple_send): Bug fix. Call ++ dma_cache_wback_inv. (was: __flush_wback_region). ++ ++ * include/asm-sh/io.h (dma_cache_wback_inv, dma_cache_inv, ++ dma_cache_wback): Defined with new __flush_XXX_region functions. ++ (was: bogus cache_XXX_area functions, not implemented). ++ ++ * drivers/cdrom/gdrom.c (gdrom_intr): Follow the change of ++ the last argument of __flush_wback_region. ++ * include/asm-sh/ide.h (ide_insw): Likewise. ++ ++ * arch/sh/mm/cache-sh4.c (__flush_purge_region): New function. ++ (__flush_icache_page): New function. ++ (__flush_wback_region, __flush_invalidate_region): Last argument ++ is SIZE (was: END). ++ ++ * include/asm-sh/pgtable.h (__flush_purge_region, ++ __flush_icache_page): Added. ++ ++2001-07-31 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/system.h (switch_to): Revert changes of 07-30. ++ In schedule(), switch_to() is always called with interrupt enabled. ++ ++ * drivers/cdrom/gdrom.c (DEVICE_NAME): Shorter name (when error). ++ (gdrom_do_command): Protect from interrupts. ++ (do_gdrom_request): Handle the case where a request is made up ++ from multple chunks. ++ ++ * Updated to 2.4.8-pre3. ++ ++ * drivers/cdrom/gdrom.c: New file. ++ * drivers/cdrom/Makefile, drivers/cdrom/Config.in, arch/sh/config.in: ++ Support SEGA Dreamcast GD-ROM Driver (CD-R). ++ ++2001-07-30 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/pci-dc.c (pci_alloc_consistent): Format arg change ++ to stop warning. ++ * drivers/maple/maple.c: Likewise. ++ ++ * arch/sh/kernel/pci-sh7751.c (pci_conf1_read_config_byte, ++ pci_conf1_read_config_word, pci_conf1_read_config_dword, ++ pci_conf1_write_config_byte, pci_conf1_write_config_word, ++ pci_conf1_write_config_dword): Use no underscore version ++ of save_and_cli and restore_flags. ++ ++ * arch/sh/overdrive/led.c (mach_led): Likewise. ++ ++ * include/asm-sh/system.h (switch_to): Alternative implementation ++ which maintain interrupt-disabled state. ++ (__save_flags, __save_and_cli): New implementations. ++ (__restore_flags): Debuuging implementation. ++ (really_restore_flags): New define. ++ ++ * include/asm-sh/softirq.h (local_bh_enable): Add barrier and ++ remove __sti. ++ ++ * arch/sh/kernel/setup_dc.c (disable_systemasic_irq, ++ enable_systemasic_irq): Protect critical region. Driver ++ can call disable_irq. ++ ++ * arch/sh/kernel/setup_cqreek.c (setup_cqreek): Remove declaration ++ of disable_hlt. ++ ++ * arch/sh/kernel/process.c (cpu_idle): Match __cli/__sti. Avoid ++ sleeping with interrupt disabled. ++ ++2001-07-30 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * include/asm-sh/pgtable.h (__flush_wback_region): Defined for SH3. ++ ++2001-07-29 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/char/sh-sci.c (put_char, put_string): Only for ++ CONFIG_SERIAL_CONSOLE. ++ ++ * Updated to 2.4.8-pre2. ++ ++2001-07-28 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/mm/__copy_user_page-sh4.S (__copy_user_page): Bug fix. ++ Do not clobber r10,r11. ++ * arch/sh/mm/copy_page.S (copy_page): Bug fix. Do not clobber r10,r11. ++ * arch/sh/mm/cache-sh4.c (clear_user_page, copy_user_page): Bug fix. ++ Call __flush_tlb_page with interrupt disabled. ++ ++2001-07-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/Makefile (arch/sh/vmlinux.lds): Revert the change of ++ 2001-07-27. GCC complains (misunderstand) it. ++ ++2001-07-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/vmlinux.lds.in (.data.cacheline_aligned): Align 16 for SH3. ++ Reported by Masahiro ABE <m-abe@aandd.co.jp>. ++ * arch/sh/vmlinux.lds.in: Rename from vmlinux.lds.S, since ++ it's not written in assembler. ++ * arch/sh/Makefile (arch/sh/vmlinux.lds): Follow the change. ++ ++ * drivers/ide/ide.c (ide_wait_cmd): Revert the change to sync ++ mainline. IIRC, it was needed for SolutionEngine, but such ++ timing issue shoule be solved target specific way. ++ ++ * scripts/Configure: Revert the change to sync mainline. ++ ++ Follow the changes of 2.4.8-pre1. ++ * include/asm-sh/irq.h (irq_demux): Make them static inline. ++ * include/asm-sh/mmu_context.h (get_new_mmu_context, get_mmu_context, ++ init_new_context, destroy_context, set_asid, get_asid, ++ activate_context, switch_mm, enter_lazy_tlb): Likewise. ++ * include/asm-sh/io.h (isa_port2addr, ctrl_inb, ctrl_inl, ctrl_outb, ++ ctrl_outw, virt_to_phys, phys_to_virt): Likewise. ++ * include/asm-sh/processor.h (thread_saved_pc, grab_fpu,(release_fpu): ++ Likewise. ++ * include/asm-sh/uaccess.h (__strncpy_from_user, __clear_user, ++ __copy_user): Likewise. ++ * include/asm-sh/semaphore.h (sema_init): Likewise. ++ * include/asm-sh/pci.h (pci_dma_supported): Likewise. ++ * include/asm-sh/page.h (get_order): Likewise. ++ * include/asm-sh/checksum.h (csum_partial_copy_nocheck, ++ csum_partial_copy_from_user): Likewise. ++ ++ * include/asm-sh/smplock.h: Remove bogus SMP lock implementation. ++ ++ * Updated to 2.4.8-pre1. ++ ++ * arch/sh/kernel/entry.S (ret_from_fork): Call schedule_tail. ++ by Stuart Menefy <stuart.menefy@st.com>. ++ ++2001-07-26 Takashi YOSHII <yoshii-takashi@hitachi-ul.co.jp> ++ ++ * include/asm-sh/irq.h, include/asm-sh/dma.h, arch/sh/kernel/dma.c, ++ arch/sh/kernel/Makefile, arch/sh/config.in, ++ Documentation/Configure.help: DMA support update. ++ ++2001-07-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/setup_cqreek.c (mask_and_ack_cqreek): Move the ++ inw after the masking. ++ (setup_cqreek): Remove call of disable_hlt. ++ ++ * arch/sh/mm/cache-sh4.c (flush_cache_sigtramp): Access from P2 ++ area. ++ ++2001-07-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache-sh4.c (__flush_wback_region): Rename from ++ __flush_dcache_region, as it's confusing. ++ (__flush_invalidate_region): Make it externally visible. ++ * include/asm-sh/pgtable.h: Follow the change. ++ * drivers/maple/maple.c (maple_send): Follow the change. ++ ++2001-07-24 Masahiro ABE <m-abe@aandd.co.jp> ++ ++ * arch/sh/kernel/setup.c (setup_arch): #ifdef mv_unknown to eliminate ++ warning. ++ ++2001-07-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/segment.h: Removed. ++ * arch/sh/kernel/pci-sh7751.c: Remove inclusion of <asm/segment.h>. ++ ++2001-07-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/time.c (do_timer_interrupt): Remove #if 0 for ++ sh_do_profile. ++ ++2001-07-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/copy_page.S, arch/sh/mm/clear_page.S: Bug fix. ++ SH-3 doesn't have movca op-code. ++ ++ * include/asm-sh/page.h (clear_page, copy_page): Declared. ++ * arch/sh/mm/clear_page.S, arch/sh/mm/copy_page.S: New files. ++ * arch/sh/mm/Makefile (obj-y): Added. ++ ++ * include/asm-sh/page.h (__clear_user_page, __copy_user_page): ++ Declared. ++ * arch/sh/mm/cache-sh4.c: Use them. ++ * arch/sh/mm/__clear_user_page-sh4.S, ++ arch/sh/mm/__copy_user_page-sh4.S: New files. ++ * arch/sh/mm/Makefile: Added. ++ ++2001-07-23 David Woodhouse <dwmw2@infradead.org> ++ ++ * arch/sh/mm/Makefile (CONFIG_CPU_SH3, CONFIG_CPU_SH4): Conditionally ++ defined. ++ * arch/sh/mm/cache-sh3.c, arch/sh/mm/cache-sh4.c: New files. ++ * arch/sh/mm/cache.c: Removed. ++ ++2001-07-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/io_adx.h: Copyright notice fix. ++ ++ * Documentation/Configure.help (CONFIG_CPU_LITTLE_ENDIAN): Revert the ++ change to sync mainline. ++ * README (ON WHAT HARDWARE DOES IT RUN?): Likewise. ++ ++ * Documentation/Configure.help (CONFIG_8139TOO_DREAMCAST): Added. ++ * drivers/net/Config.in (CONFIG_8139TOO_DREAMCAST): New config. ++ * drivers/net/8139too.c (CONFIG_8139TOO_DREAMCAST): New config. ++ (RX_BUF_LEN_IDX): Depends CONFIG_8139TOO_DREAMCAST. ++ (rtl8139_rx_config): Likewise. ++ (rtl8139_start_xmit): Use USE_NO_DMAMAP. ++ ++ * arch/sh/config.in: Fix the indentation. ++ ++2001-07-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.7. ++ ++2001-07-20 Masahiro ABE <m-abe@aandd.co.jp> ++ ++ * Documentation/Configure.help (CONFIG_CF_AREA5): Edit text. ++ ++2001-07-19 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.7-pre8. ++ ++ * arch/sh/kernel/process.c (cpu_idle): Remove not-needed __sti. ++ As it was asymmetric, may cause trouble. ++ ++2001-07-18 Masahiro ABE <m-abe@aandd.co.jp> ++ ++ * Documentation/Configure.help (CONFIG_CF_ENABLER): Support area 5 too. ++ (CONFIG_CF_AREA5): Added. ++ * arch/sh/config.in: Added selection of CompactFlash area. ++ * arch/sh/kernel/cf-enabler.c (allocate_cf_area): Added to support ++ directly connected CompactFlash for SH4. ++ (cf_init_default): call allocate_cf_area if SH4. ++ ++ * Documentation/Configure.help (CONFIG_SH_GENERIC): Added ADX. ++ * arch/sh/config.in (CONFIG_SH_ADX): Added for ADX support. ++ (CONFIG_MEMORY_START): Added definition for ADX. ++ (CONFIG_CF_ENABLER): Added ADX. ++ * arch/sh/kernel/Makefile: Added ADX support. ++ * include/asm-sh/io.h: Added ADX support. ++ * include/asm-sh/machvec.h: Added ADX support. ++ ++ * arch/sh/kernel/{io_adx.c,mach_adx.c,setup_adx.c}: New files. ++ * include/asm-sh/io_adx.h: New file. ++ ++ * arch/sh/kernel/irq_maskreg.c: New file. ++ Add support for simple word-size IRQ mask register. ++ * include/asm-sh/irq.h : Likewise. ++ ++2001-07-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/fault.c (__do_page_fault): Use pte_not_present. ++ * include/asm-sh/pgtable.h (pte_not_present): New inline function. ++ ++2001-07-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Don't use pgd/pte memory pool. ++ * include/asm-sh/pgalloc.h (do_check_pgt_cache): Defined. ++ (pgd_quicklist, pte_quicklist, pgtable_cache_size): Null definition. ++ (pgd_alloc): Renamed from pgd_alloc_slow. ++ (pgd_free): Renamed from free_pgd_slow. ++ (get_pgd_fast, free_pgd_fast): Removed. ++ (pte_alloc_one_fast): Just return 0. ++ (pte_free_fast): Removed. ++ (pte_free): Defined as pte_free_slow. ++ ++ * arch/sh/mm/init.c (do_check_pgt_cache): Removed. ++ (show_mem): Removed showing pgtable_cache_size. ++ ++ * include/asm-sh/processor.h (pte_quick, pgtable_cache_sz): Removed. ++ (hard_math): Change the order. ++ * arch/sh/kernel/setup.c: Follow the change. ++ ++ * include/asm-sh/pgtable-2level.h (pgd_clear): Do nothing. ++ ++ * mm/memory.c (free_one_pgd): Revert change of 2001-07-16. ++ (As it's not accepted by Linus.) ++ ++ ++ * Updated to 2.4.7-pre7. ++ ++ * arch/sh/mm/cache.c (__flush_cache_page): Don't disable interrupt. ++ ++2001-07-17 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache.c (p3map_sem): New variable. ++ (p3_cache_init): Initialize p3map_sem. ++ (clear_user_page, copy_user_page): Use semaphore(s) to protect ++ critical section. ++ (flush_cache_all): New implementation. ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): Make the critical section ++ shorter. ++ ++2001-07-17 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/mm/cache.c (clear_user_page, copy_user_page): Bug fix. ++ Disable interrupt until __flush_dcache_region() is done. ++ ++2001-07-17 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/fault.c (__do_page_fault): Bug fix. Don't allow ++ PGD overrun. ++ ++ * arch/sh/kernel/dma.c: Remove inclusion of <asm/smp.h>. ++ * arch/sh/kernel/setup.c, arch/sh/kernel/irq.c: Ditto. ++ * arch/sh/kernel/process.c: Include file clean up. ++ ++ * arch/sh/kernel/process.c (machine_restart, machine_halt): New ++ implementations. ++ ++2001-07-16 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * mm/memory.c (free_one_pgd): Bug fix. Do pgd_clear _after_ ++ free_one_pmd. ++ ++ * arch/sh/kernel/setup.c (boot_cpu_data): Bug fix. 0 for ++ pgtable_cache_sz. ++ ++ * arch/sh/mm/cache.c (clear_user_page, copy_user_page): Clear PTE ++ after use. ++ ++2001-07-16 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * include/asm-sh/pgalloc.h (__flush_tlb_page): Declared. ++ * arch/sh/mm/cache.c : Add inclusion <asm/pgalloc.h>, ++ <asm/mmu_context.h> ++ (clear_user_page, copy_user_page): Do __flush_tlb_page() before ++ update_mmu_cache(). ++ * arch/sh/mm/fault.c (__flush_tlb_page): Make it global. ++ ++2001-07-16 Takashi YOSHII <yoshii-takashi@hitachi-ul.co.jp> ++ ++ * arch/sh/kernel/ptrace.c (ubc_set_tracing): Bug fix for SH7709A. ++ ++ * include/asm-sh/ptrace.h (UBC_TYPE_SH7729, BBR_CPU, BBR_DMA, ++ BRCR_PCTE): Defined. ++ (BBR_WRITE): Change the value. ++ ++2001-07-16 Masahiro Abe <m-abe@aandd.co.jp> ++ ++ IRQ handling update. ++ * arch/sh/kernel/setup_bigsur.c (end_bigsur_irq): Don't enable IRQ ++ when it is disabled. ++ * arch/sh/kernel/setup_ec3104.c (end_ec3104_irq): Likewise. ++ * arch/sh/kernel/setup_hd64465.c (end_hd64465_irq): Likewise. ++ * arch/sh/kernel/setup_hd64461.c (end_hd64461_irq): Likewise. ++ * arch/sh/kernel/setup_dc.c (end_systemasic_irq): Likewise. ++ * arch/sh/kernel/irq_ipr.c (end_pint_irq): Likewise. ++ ++2001-07-16 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/mmzone.h: Remove inclusion of bootmem.h. ++ ++2001-07-12 NIIBE Yutaka <gniibe@m17n.org> ++ ++ IRQ handling bug fix. Reported by Masahiro Abe <m-abe@aandd.co.jp> ++ * arch/sh/kernel/irq_intc2.c (end_intc2_irq): Don't enable IRQ ++ when it is disabled. ++ * arch/sh/kernel/irq_ipr.c (end_ipr_irq): Likewise. ++ * arch/sh/kernel/irq_imask.c (end_imask_irq): Likewise. ++ ++ * arch/sh/kernel/irq.c (setup_irq): Clear desc->status. ++ (probe_irq_on): Removed unmatched spin_unlock_irq(). ++ ++2001-07-12 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache.c (copy_user_page, clear_user_page): Bug fix. ++ Call __flush_dcache_region so that the data goes to memory, to ++ maintain cache coherency between I and D. ++ ++2001-07-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/config.in (CONFIG_DEBUG_KERNEL_WITH_GDB_STUB): Removed. ++ ++ * arch/sh/kernel/entry.S (call_dae, debug_trap): Only for ++ CONFIG_SH_STANDARD_BIOS (was: also CONFIG_DEBUG_KERNEL_WITH_GDB_STUB). ++ * arch/sh/kernel/traps.c (gdb_vbr_vector, trap_init): Likewise. ++ * drivers/char/sh-sci.c: Likewise. ++ ++ * Documentation/Configure.help (CONFIG_GDB_STUB_VBR): Removed. ++ (CONFIG_DEBUG_KERNEL_WITH_GDB_STUB): Removed. ++ (CONFIG_STNIC): Added. ++ (CONFIG_SH_RTC): Added. ++ (CONFIG_SH_GENERIC): Added. ++ ++2001-07-11 Masahiro Abe <m-abe@aandd.co.jp> ++ ++ * include/asm-sh/machvec.h: Bug fix. Move #endif. ++ ++2001-07-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/hardirq.h (irq_cpustat_t): Added __ksoftirqd_task. ++ * include/asm-sh/atomic.h (smp_mb__before_atomic_dec): Defined. ++ ++ * Updated to 2.4.7-pre6. ++ * Documentation/fb/pvr2fb.txt (Advantages): Typo fix. ++ ++2001-07-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.7-pre5. ++ ++ Follow the change of 2.4.7-pre5. ++ * include/asm-sh/softirq.h (raise_softirq): Removed. ++ ++2001-07-10 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.4.6. ++ ++ Follow the change of 2.4.6. ++ * arch/sh/vmlinux.lds.S (.rodata): Added .rodata.*. ++ * include/asm-sh/hitachi_se.h (PA_MRSHPC): Spell fix for comment. ++ ++2001-07-10 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/init.c (paging_init): Use __MEMORY_SIZE_2ND. ++ ++2001-07-08 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/config.in (CONFIG_DISCONTIGMEM): Bug fix. Added "then". ++ By ISHIKAWA Mutsumi <ishikawa@linux.or.jp>. ++ ++ * include/asm-sh/page.h (phys_to_page): Bug fixed for paren. ++ By YAEGASHI Takeshi <t@keshi.org>. ++ ++ Discontiguous memory support. ++ * arch/sh/config.in (CONFIG_DISCONTIGMEM): New config. ++ * arch/sh/kernel/setup.c (setup_arch): Setup NODE_DATA, and NODE(1). ++ * arch/sh/mm/init.c (discontig_page_data, discontig_node_bdata): ++ New variables. ++ (paging_init): Initialize NODE(1). ++ (mem_init): Initialize NODE(1). ++ * include/asm-sh/mmzone.h: New file. ++ * include/asm-sh/pgtable.h (pte_page): Use phys_to_page. ++ * include/asm-sh/page.h (__MEMORY_START_2ND, __MEMORY_SIZE_2ND): ++ Defined. ++ (VALID_PAGE, phys_to_page): #ifdef/#endif-out. ++ ++2001-07-07 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/page.h (phys_to_page): New macro. ++ (virt_to_page): Use phys_to_page. ++ * include/asm-sh/pgtable.h (pte_page): Use phys_to_page. ++ ++2001-07-07 YAEGASHI Takeshi <t@keshi.org> ++ ++ HD64461 IRQ number fix for HP600. ++ 93: 10076 HD64461-IRQ ide0 # CF slot ++ 94: 15095 HD64461-IRQ NE2000 # PC-card slot ++ ++ * include/asm-sh/hd64461.h (HD64461_IRQ_NUM): Added. ++ * include/asm-sh/ide.h (ide_default_irq_hp600): Fix irq number. ++ * arch/sh/kernel/mach_hp600.c (mv_hp620, mv_hp680, mv_hp690): Fix ++ mv_nr_irqs. ++ ++2001-07-06 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache.c (flush_icache_page, flush_dcache_page, ++ flush_page_to_ram, check_cache_page): Use page_address. ++ * arch/sh/mm/fault.c (update_mmu_cache): Use page_address. ++ (and Bug fix.) ++ * include/asm-sh/pgtable.h (mk_pte): Use page_address. ++ ++2001-07-04 Jeremy Siegel <jsiegel@mvista.com> ++ ++ * arch/sh/lib/checksum.S: Bug fix. Update R1's value. ++ ++2001-07-04 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * include/asm-sh/pgtable.h (__flush_dcache_region): Defined for SH-3. ++ * drivers/net/Config.in (CONFIG_CS89x0): Can be enabled even when PCI ++ is disabled. ++ ++2001-07-03 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/setup.c: Bug fix. 0 for pte_quick. ++ ++2001-07-02 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache.c (__flush_invalidate_region): New function. ++ (copy_user_page, clear_user_page): Bug fix. Use ++ __flush_invalidate_region. ++ ++ * include/asm-sh/pgtable.h (PG_dcache_dirty): Defined. ++ * arch/sh/mm/cache.c (flush_dcache_page): Defer flushing the cache ++ if possible. ++ * arch/sh/mm/fault.c (update_mmu_cache): Handle the deferred ++ flushing. ++ ++2001-07-01 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/net/stnic.c (stnic_probe): Set endian. ++ Reported by <yshimizu@ic-software.co.jp>. ++ ++2001-06-30 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache.c (__flush_cache_page): Protect against ++ interrupt. ++ (flush_cache_all): Just clear the address array. ++ (detect_cpu_and_cache_system): Likewise. ++ (flush_cache_page): Bug fix. Tag is physical address. ++ ++ * Updated to 2.4.6-pre8. ++ ++ SH-4 cache handling improvement. ++ * arch/sh/mm/cache.c (flush_icache_page, flush_page_to_ram): ++ #if 0/#endfi out. ++ * include/asm-sh/pgtable.h (flush_page_to_ram, flush_icache_page): ++ Define as NULL. ++ * kernel/ptrace.c (access_one_page): Add flush_dcache_page. ++ ++ * arch/sh/mm/cache.c (flush_cache_page): Remove bogus comment. ++ Change comment as we also need to let I-cache to flush. ++ (flush_dcache_page): Mention I-cache in comment. ++ (__flush_cache_page): New function. (Use 0 to invalidate.) ++ (flush_dcache_page): Use __flush_cache_page. ++ ++ * arch/sh/mm/Makefile (obj-y): Added ioremap.o. ++ * arch/sh/mm/ioremap.c (remap_area_pages): Use pgd_offset_k. ++ (p3_ioremap): Renamed from __ioremap. ++ (p3_iounmap): Renamed from iounmap. ++ (remap_area_pages): Make it global. ++ ++ * arch/sh/mm/fault.c (__do_page_fault): Use P3SEG and P4SEG ++ instead of VMALLOC_START and VMALLOC_END. ++ * include/asm-sh/pgtable.h (p3_cache_init): New function. ++ (VMALLOC_START): Change the value. ++ * arch/sh/mm/cache.c (p3_cache_init): New function. ++ (icache_purge_region): Removed. ++ (flush_icache_range): Just call flush_cache_all. It's efficient ++ because the range would be so large (Usually it's larger than ++ cache size itself). And it's OK, because it's rarely used. ++ (clear_user_page, copy_user_page): New implementations. ++ ++ * arch/sh/mm/init.c (mem_init): Use __flush_dcache_region ++ (was: flush_page_to_ram. The obsolete interface). ++ (mem_init): Call p3_cache_init. ++ ++ * arch/sh/mm/cache.c (icache_purge_region): Renamed from ++ icache_purge_range. ++ (__flush_dcache_region): Renamed (was: __flush_dcache_range). ++ (flush_icache_range): Follow the changes. ++ * include/asm/ide.h (ide_insw): Use __flush_dcache_region. ++ * include/asm-sh/pgtable.h: Ditto. ++ ++ * drivers/maple/maple.c (maple_send): Use __flush_dcache_region ++ (was: flush_page_to_ram. The obsolete interface). ++ (maple_sendbuf_page): Removed. ++ ++ * include/asm-sh/pgtable.h (HAVE_ARCH_UNMAPPED_AREA): Defined for ++ SH-4. ++ * arch/sh/kernel/sys_sh.c (arch_get_unmapped_area): New function. ++ * include/asm-sh/shmparam.h (SHMLBA): 16kB for SH-4. ++ * arch/sh/mm/fault.c (update_mmu_cache): Removed pte_shared ++ handling. ++ (__flush_tlb_phys): Removed. ++ * include/asm-sh/pgtable.h (pte_shared): Removed. ++ ++2001-06-29 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/io_se.c (se_outb_p): Bug fix. Remove duplicated ++ `if' clause. ++ ++2001-06-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/string.h (strlen): Declared. ++ (__HAVE_ARCH_STRLEN): Defined. ++ * arch/sh/lib/strlen.S: New file. ++ * arch/sh/lib/Makefile (obj-y): Added strlen.o. ++ ++ * Updated to 2.4.6-pre6. ++ ++ Implement cache flush on I/O completion. ++ * include/asm-sh/pgtable.h (__flush_dcache_range): Declared. ++ * arch/sh/mm/cache.c (__flush_dcache_range): Rename from ++ dcache_wback_range. And make it visible (not-static). ++ * include/asm-sh/ide.h (ide_insw): New macro to handle cache flush ++ for I/O. ++ ++ * Revert the patch of 2001-06-26. It should be done by driver ++ layer not VM layer. ++ ++2001-06-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/lib/checksum.S (csum_partial_copy_generic): Performance ++ tweak. Use @(<DISP>,RN) addressing mode. Consider pipeline ++ of SH-3. Perhaps we need different implementation for SH-4. ++ ++2001-06-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ New implementation of flush-ing the page on swap. ++ ++ * include/linux/mm.h (PG_flush_after, PageFlushAfter, ++ SetPageFlushAfter, PageTestandClearFlushAfter): New bit. ++ * mm/page_io.c (rw_swap_page_base): Set flush-after bit. ++ * fs/buffer.c (end_buffer_io_async): Implement flush-ing ++ with PG_flush_after. ++ ++ * mm/memory.c (do_swap_page): Remove flush-ing the page. ++ ++2001-06-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/ide/ide-geometry.c: Revert change of 2001-03-08. ++ It's not needed as we have the header file now . ++ ++ * include/linux/netdevice.h include/net/checksum.h, ++ net/core/datagram.c, net/core/iovec.c, net/core/scm.c, ++ net/core/skbuff.c, net/core/sock.c, net/socket.c: Revert changes to ++ sync standard kernel (was: Changes to support no CONFIG_NET). ++ ++2001-06-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.6-pre5. ++ ++2001-06-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgtable.h (_PAGE_FLAGS_HARDWARE_MASK): Drop SH-bit ++ on SH-3. ++ ++2001-06-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgtable.h (__pmd_offset): Removed. It's only ++ valid for x86. ++ ++ * include/asm-sh/string.h (strcpy, strncpy, strcmp, strncmp): Make ++ them static inline. ++ ++ * include/asm-sh/processor.h (INIT_MMAP): Bug fix. Set vm_start ++ and vm_end to 0. (was: 0x80000000--0xa0000000). ++ ++ * include/asm-sh/pgtable.h: Revert changes of 2001-06-20. ++ Atomic update is for SMP machine. We don't need it for SuperH. ++ ++2001-06-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Enable use of pgd_quicklist and pte_quicklist (was: not used). ++ * include/asm-sh/pgalloc.h (pgd_free): Use free_pgd_fast (was: slow). ++ (pte_free): Use pte_free_fast (was: slow). ++ (pte_alloc_one_fast): Clear the first entry (was: assign ret[1]). ++ * include/asm-sh/pgtable-2level.h (pgd_clear): Zero clear for reuse. ++ ++2001-06-21 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/irq.c (do_IRQ): Bug fix. Clear IRQ_INPROGRESS bit. ++ ++ * include/asm-sh/pgtable.h: Include <asm/pgtable-2level.h> earlier. ++ * include/asm-sh/pgtable-2level.h: Add #ifndef/#endif for ++ __ASSEMBLY__. ++ ++ * arch/sh/mm/init.c (paging_init): Fixed to PTRS_PER_PGD. ++ (was: USER_PTRS_PER_PGD*2) ++ (swapper_pg_dir): Use PTRS_PER_PGD (was: 1024 directly). ++ ++ * include/asm-sh/pgtable.h (TWOLEVEL_PGDIR_SHIFT, ++ BOOT_USER_PGD_PTRS, BOOT_KERNEL_PGD_PTRS, USER_PGD_PTRS, ++ KERNEL_PGD_PTRS): Removed. (only valid for x86) ++ ++ * Updated to 2.4.6-pre4. ++ ++2001-06-20 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgtable.h (_PAGE_BIT_DIRTY, _PAGE_BIT_RW, ++ _PAGE_BIT_ACCESSED): Defined. ++ (ptep_test_and_clear_dirty, ptep_test_and_clear_young, ++ ptep_set_wrprotect, ptep_mkdirty, ptep_get_and_clear): Implement ++ atomic update of PTE. ++ ++2001-06-19 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/irq_ipr.c (init_IRQ): Removed initialization ++ of INTC_IRRX, INTC_ICRX. ++ ++ * include/asm-sh/softirq.h (local_bh_enable): Follow the change of ++ semantics of softirq (of IA-32). ++ ++ * arch/sh/kernel/entry.S (ret_from_syscall): Don't call softirq. ++ (handle_softirq): Removed. ++ (ret_with_reschedule): Label removed. ++ ++ * arch/sh/kernel/irq.c (do_IRQ): Follow the change of IA-32 version. ++ (irq_controller_lock): Removed. ++ ++ * include/asm-sh/hardirq.h: Remove __softirq_active, __softirq_mask. ++ Add softirq_pending. ++ ++ ++ * Updated 2.4.6-pre3. ++ ++2001-05-28 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * include/asm-sh/bitops.h (__change_bit,__test_and_set_bit, ++ __test_and_clear_bit,__test_and_change_bit): Added. ++ ++2001-05-28 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/config.in (CONFIG_SH_SH2000): Added. ++ * arch/sh/kernel/Makefile: Likewise. ++ * include/asm-sh/io.h: Likewise. ++ * include/asm-sh/machvec.h: Likewise. ++ * arch/sh/kernel/{setup_sh2000.c,io_sh2000.c}: New file. ++ * include/asm-sh/io_sh2000.h: New file. ++ ++ * arch/sh/kernel/sh_ksyms.c (strnlen): Exported. ++ ++2001-05-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.5. ++ * arch/sh/kernel/rtc.c (set_rtc_time): Removed declaration ++ of the function abs. ++ ++2001-05-24 Stuart Menefy <stuart.menefy@st.com> ++ ++ * arch/sh/config.in: Change to ST40STB1 config, moved char/pcmcia to ++ char menu, and added joystick and media options ++ ++2001-05-24 Stuart Menefy <stuart.menefy@st.com> ++ ++ * arch/sh/kernel/{time,setup}.c include/asm-sh/processor.h: Added ++ support for for ST40STB1 memory clock ++ * arch/sh/overdrive/irq.c: Set up INTC to use encoded interrupt pins, ++ and set up non-Overdrive interrupts as imask type. ++ * include/asm-sh/pci.h: Move declaration of struct pci_dev so declared ++ before used ++ * arch/sh/kernel/io_se.c: Typo fix ++ * arch/sh/stboards/{led.c,harp.h}: Add LED_ON and LED_OFF macros ++ ++2001-05-24 M. R. Brown <mrbrown@linuxdc.org> ++ ++ LinuxDC drivers merge. ++ ++ * Documentation/Configure.help: Added documentation for CONFIG_FB_PVR2 ++ and CONFIG_FB_PVR2_DEBUG. ++ * Documentation/fb/00-INDEX: Added line for pvr2fb.txt. ++ * Documentation/fb/pvr2fb.txt: New file, document features of the pvr2 ++ frame buffer. ++ * arch/sh/config.in: Conditionalized Maple driver options, set ++ CONFIG_SH_RTC to "n" when configuring for Dreamcast. ++ * arch/sh/kernel/mach_dc.c: Machine vector: Use NR_IRQS standard ++ (reflects new IRQ count), added systemasic_irq_demux. ++ * arch/sh/kernel/pci-dc.c: Include new asm/dc_sysasic.h. Removed ++ definition of GAPSPCI_INTC and updated GAPSPCI_IRQ to new IRQ ++ convention. (disable_gapspci_irq, enable_gapspci_irq, ++ mask_and_gapspci_irq, end_gapspci_irq, startup_gapspci_irq, ++ shutdown_gapspci_irq, gapspci_irq_type): Removed. (gapspci_init): ++ Removed assignment of gapspci_irq_type. ++ * arch/sh/kernel/setup_dc.c: New includes to reflect IRQ standard. ++ (disable_systemasic_irq, enable_systemasic_irq, ack_systemasic_irq, ++ end_systemasic_irq, startup_systemasic_irq, shutdown_systemasic_irq, ++ systemasic_int, systemasic_irq_demux): New routines. ++ (setup_dreamcast): Assign systemasic_int to respective irq_desc IRQs. ++ * drivers/video/Config.in: Added configuration options for ++ CONFIG_FB_PVR2, removed options for CONFIG_FB_DC. ++ * drivers/video/Makefile: Added dependency for CONFIG_FB_PVR2, removed ++ dependancy for CONFIG_FB_DC. ++ * drivers/video/dcfb.c: Removed file. ++ * drivers/video/fbmem.c: Added externs for pvr2fb routintes, removed ++ declaration of dcfb_init(). Added pvr2 to the list of framebuffers, ++ removed dcfb from that list. ++ * drivers/video/pvr2fb.c: New file, PowerVR 2 frame buffer support, ++ replaces generic DC fb support. ++ * include/asm-sh/dc_sysasic.h: New file, Definitions for Dreamcast ++ hardware events. ++ * include/asm-sh/irq.h: Added OFFCHIP_NR_IRQS def. for Dreamcast, ++ added declaration of systemasic_irq_demux(). ++ ++2001-05-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.5-pre5. ++ ++ * arch/sh/kernel/hd64465_gpio.c, arch/sh/kernel/io_cat68701.c, ++ arch/sh/kernel/io_dc.c, arch/sh/kernel/io_ec3104.c, ++ arch/sh/kernel/irq_intc2.c, arch/sh/kernel/mach_dc.c, ++ arch/sh/kernel/setup_dc.c, arch/sh/kernel/setup_ec3104.c, ++ arch/sh/mm/cache.c, include/asm-sh/hd64465_gpio.h: Follow the ++ change of 2.4.5-pre5. Inclusion of config.h. ++ ++2001-05-24 Stuart Menefy <stuart.menefy@st.com> ++ ++ * arch/sh/kernel/pci_st40.c ++ arch/sh/overdrive/{Makefile,galileo.c,mach.c,pcidma.c} ++ arch/sh/stboards/{Makefile,mach.c,pcidma.c}: Changes for new style ++ of PCI set up ++ ++ * arch/sh/kernel/entry.S include/asm-sh/irq.h: Updated the number of ++ interrupts for ST40STB1 ++ ++2001-05-22 M. R. Brown <mrbrown@linuxdc.org> ++ ++ Preliminary Dreamcast Maple Bus driver restructuring. ++ ++ * drivers/dreamcast/maple/Config.in, drivers/dreamcast/maple/Makefile ++ drivers/dreamcast/maple/maple.c, drivers/dreamcast/maple/maple.h, ++ drivers/dreamcast/maple/dckbd.c, drivers/dreamcast/maple/dcmouse.c, ++ drivers/dreamcast/maple/dcpad.c: Files moved to consistent kernel ++ directories and renamed. ++ * drivers/dreamcast/Config.in, drivers/dreamcast/Makefile: Removed. ++ * drivers/maple/Config.in, drivers/maple/Makefile, ++ drivers/maple/maple.c: New files, moved from drivers/dreamcast/maple. ++ * include/linux/maple.h: New file, was ++ drivers/dreamcast/maple/maple.h. ++ * drivers/char/maple_keyb.c: New file, was ++ drivers/dreamcast/maple/dckbd.c. ++ * drivers/char/maplemouse.c: New file, was ++ drivers/dreamcast/maple/dcmouse.c. ++ * drivers/char/Makefile: Added dependencies for CONFIG_MAPLE_KEYBOARD ++ and CONFIG_MAPLE_MOUSE ++ * drivers/char/joystick/maplecontrol.c: New file, was ++ drivers/dreamcast/maple/dcpad.c. ++ * drivers/char/joystick/Config.in: Added config options for ++ CONFIG_MAPLE_CONTROL. ++ * drivers/char/joystick/Makefile: Added dependency for ++ CONFIG_MAPLE_CONTROL. ++ * Makefile: Added DRIVERS dependency for CONFIG_MAPLE. ++ * drivers/Makefile: Added dependencies for CONFIG_MAPLE. ++ * arch/sh/Makefile: Removed Dreamcast driver dependencies. ++ * arch/sh/config.in: Check for CONFIG_SH_DREAMCAST for ++ CONFIG_MEMORY_START. Added config options for CONFIG_MAPLE_*, added ++ sources to drivers/maple/Config.in and ++ drivers/char/joystick/Config.in. ++ ++2001-05-21 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.5-pre4. ++ ++2001-05-17 YAEGASHI Takeshi <t@keshi.org> ++ ++ * arch/sh/kernel/pci-dc.c: New file: Dreamcast PCI routines. ++ * arch/sh/kernel/setup_dc.c: Moved PCI code to pci-dc.c. ++ * arch/sh/kernel/mach_dc.c (mv_init_pci): Removed. ++ * arch/sh/kernel/Makefile: Added rules for pci-dc.o. ++ * include/asm-sh/pci.h (PCIBIOS_MIN_IO, PCIBIOS_MIN_MEM): Added ++ definitions for Dreamcast. ++ * drivers/net/8139too.c (rtl8139_hw_start): Keep RxConfig register's ++ cache(tp->rx_config) dirty. ++ ++2001-05-16 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/pci-sh7751.c (pcibios_set_master, pci_check_direct, ++ pcibios_fixup_peer_bridges, pcibios_enable_device, ++ pcibios_set_master): Prepend KERN_INFO for printk. ++ ++ * Updated to 2.4.5-pre2. ++ ++2001-05-14 Dustin McIntire <dustin@sensoria.com> ++ ++ * arch/sh/kernel/sh_ksyms.c: Move CONFIG_PCI above the ++ pci_alloc_consistent. ++ * arch/sh/kernel/pci-irq.c: Removed. ++ ++ Big Sur support update. ++ * include/asm-sh/pci-sh7751.h (SH7751_PCICONF13): Change the value. ++ It was 0x40. ++ (PLATFORM_ASPEN, PLATFORM_BIGSUR): Removed. ++ * arch/sh/kernel/setup_bigsur.c: Calculation change of mask and bit. ++ * arch/sh/kernel/pci-bigsur.c: Turn the clocks and clear powerdown ++ IRQ earlier. ++ * arch/sh/kernel/Makefile: Remove pci-bigsur.o. ++ ++2001-05-14 Jeremy Siegel <jsiegel@mvista.com> ++ ++ * include/asm-sh/machvec.h: Bug fix. Don't overwrite the ++ definition of MACH_SE. ++ ++2001-05-09 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Remove support of 7750 Overdrive. ++ ++ * include/asm-sh/io_od.h: Removed. ++ * arch/sh/overdrive/io_od.h: Moved from include/asm-sh, ++ as a reference. ++ ++ * include/asm-sh/pci.h: Removed the case of ++ defined(CONFIG_SH_7750_OVERDRIVE). ++ * include/asm-sh/io.h: Likewise. ++ ++ * arch/sh/Makefile (SUBDIRS): Don't add arch/sh/overdrive. ++ (archclean): Don't go to overdrive subdirs, but stboards. ++ ++ * arch/sh/config.in (CONFIG_SH_7750_OVERDRIVE): Deleted. ++ ++2001-05-09 Ian da Silva <idasilva@mvista.com> ++ ++ Solution Engine 7751 support. ++ ++ * include/asm-sh/hitachi_se.h, include/asm-sh/io.h, ++ include/asm-sh/machvec.h, include/asm-sh/pci.h: ++ Add the case of CONFIG_SH_7751_SOLUTION_ENGINE. ++ ++ * arch/sh/kernel/setup_se.c (init_se_IRQ): Handle the case of ++ CONFIG_SH_7751_SOLUTION_ENGINE differentry. ++ ++ * arch/sh/kernel/pci-7751se.c: New file. ++ ++ * arch/sh/kernel/io_se.c: Include <asm/pci.h> and <asm/pci-sh7751.h>. ++ (TOP_PCIC, PCIIOBR, PCIMBR, PCI_IO_AREA, PCI_MEM_AREA) New macros. ++ (port2adr): Fixed. Don't include 0x2000 as MRSHPC address. ++ (se_inb, se_inb_p, se_inw, se_inl, se_outb, se_outb_p, se_outw, ++ se_outl): Handle the case of PXSEG and CONFIG_PCI. ++ (se_readb, se_readw, se_readl, se_writeb, se_writew, se_writel): ++ Handle the case of CONFIG_PCI. ++ ++ * arch/sh/kernel/Makefile: Define objects for ++ CONFIG_SH_7751_SOLUTION_ENGINE. ++ ++ * arch/sh/config.in (CONFIG_SH_7751_SOLUTION_ENGINE): Added. ++ ++2001-05-09 Dustin McIntire <dustin@sensoria.com> ++ ++ SH7751 support and New target BIGSUR. ++ ++ * include/asm-sh/bigsur.h, include/asm-sh/io_bigsur.h, ++ include/asm-sh/pci-sh7751.h, include/asm-sh/serial-bigsur.h: New ++ files. ++ * include/asm-sh/serial.h: Added inclusion of serial-bigsur.h. ++ * include/asm-sh/processor.h: Add comment for SH7751. ++ * include/asm-sh/pci.h (PCIBIOS_MIN_IO, PCIBIOS_MIN_MEM): Handle ++ cases of ST40STB1, SH7751 and BIGSUR. ++ (pcibios_set_master): Comment it out. ++ * include/asm-sh/machvec.h: Added mv_hw_bigsur bit. ++ (MACH_BIGSUR): Added. ++ ++ * include/asm-sh/irq.h: Added CONFIG_CPU_SUBTYPE_SH7751 and ++ CONFIG_SH_BIGSUR. ++ ++ * include/asm-sh/io.h: Added CONFIG_SH_BIGSUR. ++ * include/asm-sh/bugs.h (check_bugs): Print SH7750/SH7750. (was: ++ only SH7750). ++ ++ * drivers/pcmcia/hd64465_ss.c (hs_set_io_map): Added last argument 0, ++ for the call of hd64465_port_map. ++ ++ * drivers/net/smc9194.h (chip_ids): Added SMC91C100FD. ++ * drivers/net/smc9194.c (smc_probe): The semantics IRQ2==IRQ9 is ++ only valid in PC (__i386__). ++ ++ * drivers/char/sh-sci.h (CONFIG_CPU_SUBTYPE_SH7751): Added. ++ ++ * arch/sh/mm/cache.c (detect_cpu_and_cache_system): SH7751 is ++ CPU_SH7750. ++ ++ * arch/sh/kernel/sh_ksyms.c (__lshrdi3, flush_cache_range, ++ flush_dcache_page): Added. ++ ++ * arch/sh/kernel/led_bigsur.c, arch/sh/kernel/mach_bigsur.c, ++ arch/sh/kernel/pci-bigsur.c, arch/sh/kernel/pci-irq.c, ++ arch/sh/kernel/pci-sh7751.c, arch/sh/kernel/setup_bigsur.c: ++ New files. ++ ++ * arch/sh/kernel/io_hd64465.c (hd64465_isa_port2addr): Renamed ++ from POT2ADDR. ++ (PORT2ADDR): Define as macro. ++ ++ * include/asm-sh/io_bigsur.c: New file. ++ * arch/sh/kernel/entry.S (exception_handling_table): Added entries ++ for CONFIG_CPU_SUBTYPE_SH7751. ++ ++ * arch/sh/kernel/pci-dma.c: New file. Copied from stboards/pcidma.c. ++ * arch/sh/kernel/pci-sh.c: Removed. ++ ++ * arch/sh/kernel/Makefile (machine-specific-objs): Added for ++ CONFIG_SH_BIGSUR. ++ (obj-$(CONFIG_SH_BIGSUR)): Added. ++ (obj-$(CONFIG_CPU_SUBTYPE_SH7751)): Added. ++ (obj-$(CONFIG_SH_BIGSUR)): Added. ++ ++ * arch/sh/config.in (CONFIG_SH_BIGSUR): New target. ++ (CONFIG_CPU_SUBTYPE_SH7751): New subtype. ++ ++ * arch/sh/Makefile (CFLAGS for CONFIG_DEBUG_KERNEL_WITH_GDB_STUB): ++ Added as comment. ++ ++2001-05-07 Masahiro Abe <m-abe@aandd.co.jp> ++ ++ * include/asm-sh/processor.h (struct sh_fpu_hard_struct): Rename ++ xd_regs to xfp_regs, and change type from long long to long. ++ (struct sh_fpu_soft_struct): Likewise. ++ * include/asm-sh/user.h (struct user_fpu_struct): Likewise. ++ ++2001-05-04 YAEGASHI Takeshi <t@keshi.org> ++ ++ * drivers/dreamcast/maple/maple.h: Fixed typo. ++ * include/asm-sh/bitops.h (ffs, hweightN): Added definitions. ++ * drivers/char/sh-sci.c (sci_init_drivers): Added driver names used ++ with devfs. ++ ++2001-04-30 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.4. ++ ++2001-04-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.4-pre8. ++ ++2001-04-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.4-pre7. ++ ++2001-04-24 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * config.in: Added CONFIG_RTC. ++ * arch/sh/rtc.c: Moved some definitions to include/asm-sh/rtc.h. ++ * include/asm-sh/rtc.h: Likewise ++ * include/asm-sh/mc146818rtc.h (RTC_PORT, RTC_IRQ, CMOS_READ, ++ CMOS_WRITE, __CMOS_READ, __CMOS_WRITE): Defined. ++ * arch/sh/sh_ksyms.c (__movstr): EXPORT-ed. ++ (__ashrdi3, __ashldi3): EXPORT-ed even if SH-3. ++ ++2001-04-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * lib/rwsem.c: Remove inclusion of linux/bitops.h. ++ ++ * Updated to 2.4.4-pre6. ++ ++2001-04-20 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/config.in (CONFIG_RWSEM_GENERIC): Removed. ++ * include/linux/rwsem.h (down_write): Conflict merged. ++ * include/asm-sh/semaphore.h: Only valid for __KERNEL__. ++ ++ * Updated to 2.4.4-pre5. ++ ++2001-04-20 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/config.in: define CONFIG_RWSEM_GENERIC. ++ * include/asm-sh/bitops.h (__set_bit, __clear_bit): defined. ++ * include/asm-sh/semaphore.h: Follow i386 implementation. ++ * include/linux/rwsem.h: small fix. ++ * lib/rwsem.c: Added include linux/bitops.h. ++ ++2001-04-19 YAEGASHI Takeshi <t@keshi.org> ++ ++ * drivers/dreamcast/maple/maple.h: Added copyright notice. ++ ++ * arch/sh/kernel/setup_dc.c: Added prototype for gapspci_init(). ++ (pci_alloc_consistent): Fixed printk format string. ++ ++2001-04-18 YAEGASHI Takeshi <t@keshi.org> ++ ++ * arch/sh/kernel/time.c, drivers/net/8139too.c: MACH_DREAMCAST ++ should be used to keep the generic kernel working. ++ ++ * drivers/net/8139too.c (rtl8139_start_xmit): Force to use the ++ dedicated SRAM buffer for bus-mastering. ++ ++ * include/asm-sh/mc146818rtc.h: New file: Added to satisfy the ++ include from drivers/char/rtc.c. ++ ++2001-04-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.4-pre4. ++ ++2001-04-14 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.4-pre3. ++ ++2001-04-12 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.4-pre2. ++ ++2001-04-09 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.4-pre1. ++ ++2001-04-01 YAEGASHI Takeshi <t@keshi.org> ++ ++ Added SEGA Dreamcast support with the code released from the FFII ++ (http://www.ffii.org/). ++ ++ * arch/sh/config.in: Added Dreamcast Configuration. ++ * arch/sh/Makefile: Added build rules of Dreamcast drivers. ++ * arch/sh/kernel/Makefile: Added Dreamcast platform support. ++ * arch/sh/kernel/io_dc.c: New file: Likewise. ++ * arch/sh/kernel/mach_dc.c: New file: Likewise. ++ * arch/sh/setup_dc.c: New file: Likewise ++ * include/asm-sh/io_dc.h: New file: Likewise. ++ * arch/sh/kernel/time.c (time_init): Added Dreamcast RTC override. ++ * drivers/video/dcfb.c: New file: Dreamcast framebuffer driver. ++ * drivers/pci/pci.ids: Updated vendor/device ids for SEGA Broadband ++ Adapter. ++ * drivers/net/8139too.c(board_t, board_info, rtl8139_pci_tbl, ++ rtl8139_rx_config, RX_BUF_LEN_IDX): Added SEGA Broadband Adapter ++ support. ++ * drivers/dreamcast/Config.in: New file: Dreamcast driver support. ++ * drivers/dreamcast/Makefile: New file: Likewise. ++ * drivers/dreamcast/maple/Config.in: New file: MAPLE Bus driver ++ support. ++ * drivers/dreamcast/maple/Makefile: New file: Likewise. ++ * drivers/dreamcast/maple/maple.[ch]: New files: MAPLE Bus core driver. ++ * drivers/dreamcast/maple/dckbd.c: New file: Dreamcast Keyboard driver. ++ * drivers/dreamcast/maple/dcmouse.c: New file: Dreamcast Mouse driver. ++ * drivers/dreamcast/maple/dcpad.c: New file: Dreamcast Controller. ++ driver ++ * include/linux/input.h (BUS_MAPLE): Added new bus type. ++ * drivers/char/Makefile (KEYBD): Removed older Dreamcast keyboard ++ support. ++ * include/asm-sh/keyboard.h (dreamcast_kbd_init_hw): likewise. ++ ++ * arsh/sh/kernel/sh_ksyms.c: Include asm/pgalloc.h for ++ flush_tlb_page prototype. ++ ++2001-03-31 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow the change in 2.4.3. ++ * include/asm-sh/pgtable.h (__handle_bad_pmd, ++ __handle_bad_pmd_kernel): Removed. ++ ++ * arch/sh/kernel/ptrace.c (sys_ptrace): Follow the change of x86 ++ version. ++ * arch/sh/mm/extable.c (search_exception_table): Likewise. ++ * arch/sh/mm/init.c (do_check_pgt_cache): Likewise. ++ * arch/sh/mm/init.c (get_pte_slow, get_pte_kernel_slow, ++ __handle_bad_pmd_kernel, __handle_bad_pmd, get_bad_pte_table, ++ empty_bad_pte_table): Removed. ++ * include/asm-sh/pgtable-2level.h (pgd_clear): Be Function. ++ * include/asm-sh/pgalloc-2level.h: Removed. ++ * arch/sh/mm/ioremap.c (remap_area_pmd): Use pte_alloc with init_mm ++ (was pte_alloc_kernel). ++ (remap_area_pte): Add checks to BUG. ++ Check address!=0 for the condition of do-while. ++ (remap_area_pmd): Add check to BUG. ++ Use pte_alloc with init_mm (was pte_alloc_kernel). ++ Check address!=0 for the condition of do-while. ++ (remap_area_pages): Use pgd_offset (was pgd_offset_k). ++ Add check to BUG, spin_lock/unlock. ++ Use pmd_alloc of init_mm instead of pmd_alloc_kernel. ++ (__ioremap): Change the compare to 0x100000 to '<' (was: '<='). ++ Return error. ++ ++ Updated to 2.4.3. ++ * arch/sh/mm/fault.c (do_page_fault): Use up_read/down_read ++ (was: up/down). ++ * arch/sh/kernel/sys_sh.c (do_mmap2): Use up_write/down_write ++ (was: up/down). ++ * arch/sh/kernel/sh_ksyms.c (flush_tlb_page): EXPORT-ed. ++ ++2001-03-09 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * include/asm-sh/sigcontext.h (struct sigcontext): Make it ++ compatible with glibc-2.2.2. ++ ++2001-03-08 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * drivers/ide/ide-geometry.c: Added '#ifdef __i386__' ++ for i386 specific include file. ++ ++2001-03-04 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (call_dpf): Cosmetic changes. ++ Use "tst r0, r0" instead of "tst #0xff, r0". ++ (ret_with_reschedule): Likewise. ++ ++2001-03-04 Philipp Rumpf <prumpf@tux.org> ++ ++ * arch/sh/kernel/process.c (kernel_thread): Remove bogus comment. ++ Bug fix. Use "tst r0, r0" instead of "tst #0xff, r0". ++ ++2001-02-24 Bryan Rittmeyer <bryan@ixiacom.com> ++ ++ * arch/sh/kernel/sh_ksyms.c (strncat): Added. ++ ++2001-02-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/rtc.c (RTC_BIT_INVERTED): New macro. ++ (sh_rtc_gettimeofday): Use RTC_BIT_INVERTED. ++ (sh_rtc_settimeofday): Work around implemented. ++ ++ Updated to 2.4.2. ++ * include/asm-sh/termios.h (N_IRDA): Incorporate changes of 2.4.2. ++ * include/asm-sh/socket.h, arch/sh/kernel/irq.c, ++ arch/sh/kernel/process.c, arch/sh/kernel/setup.c: Likewise. ++ ++2001-02-14 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/setup_cqreek.c (mv_ioremap, mv_iounmap, ++ mv_rtc_gettimeofday, mv_rtc_settimeofday): Define. ++ ++2001-02-07 Stuart Menefy <stuart.menefy@st.com> ++ ++ Added support for ST40STB1 ++ * arch/sh/kernel/pci_st40.[ch]: New files ++ * arch/sh/kernel/irq_intc2.c: New file ++ * arch/sh/kernel/Makefile: Added build of ST40 files ++ * arch/sh/kernel/irq_ipr.c: Added support for second SCIF ++ * arch/sh/kernel/time.c: Added support for FRQCR changes ++ * arch/sh/mm/cache.c: Added ST40 to list of chip types ++ * arch/sh/config.in: Added ST40 CPU and ST boards ++ * arch/sh/overdrive/Makefile: Renamed config option ++ * include/asm-sh/bugs.h: Added ST40STB1 to list of chips ++ * include/asm-sh/pci.h: Added DMA support ++ * include/asm-sh/processor.h: Added ST40STB1 to list of chips ++ ++ Added support for ST40STB1 HARP and Overdrive platforms ++ * arch/sh/Makefile: Build in stboards directory if needed ++ * include/asm-sh/io.h: Added HARP and Overdrive IO ++ * arch/sh/stboards/{harp.h,irq.c,led.c,mach.c,pcidma.c,setup.c}, ++ arch/sh/stboards/Makefile: New files ++ ++ * arch/sh/kernel/io_hd64465.c, include/asm-sh/io_hd64465.h: Added ++ logical shift capability to address mapping code. ++ ++ * arch/sh/kernel/setup_hd64465.c, include/asm-sh/serial.h: Fixed ++ support for 16550 serial port. ++ ++ * arch/sh/kernel/rtc.c: Fix 1/128 second support. ++ ++ * arch/sh/kernel/setup.c: Added some global variables needed for ++ frame buffer support. ++ ++ * drivers/char/sh-sci.[ch]: Added ST40STB1 support, and claim ++ interrupt on open, allowing SCI(F) to be shared by drivers. ++ ++ * drivers/net/tulip/tulip_core.c: Added SH specific defines ++ ++ * drivers/pci/pci.ids: Added STE10/100 device ID ++ ++ * include/asm-sh/irq.h: Added ST40STB1 defines, and reworked ++ defintion of NR_IRQS to make easier to manage ++ ++ * include/asm-sh/hd64461.h, include/asm-sh/hd64465.h: Use new ++ irq.h defines for peripherial chip interrupts ++ ++2001-02-02 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.1. ++ * arch/sh/kernel/traps.c: Include linux/config.h. ++ ++2001-01-31 Philipp Rumpf <prumpf@tux.org> ++ ++ * arch/sh/kernel/setup_ec3104.c (get_pending_interrupts): ++ New function. ++ ++ * drivers/char/ec3104_keyb.c (ec3104_keyb_receive): Removed. ++ (e5_checksum, e5_wait_for_cts, e5_send_byte, e5_send_packet, ++ e5_receive): New functions. ++ (struct e5_struct): Renamed from ec3104_keyb_struct. ++ ++ * drivers/video/Config.in (CONFIG_E1355_REG_BASE, ++ CONFIG_E1355_FB_BASE): New config variables. ++ * drivers/video/epson1355fb.c (e1355fb_init): Don't call ++ disable_hw_cursor from here. ++ (AERO_HACKS): Undefined. ++ ++2001-01-30 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.1-pre12. ++ ++2001-01-29 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.1-pre11. ++ * arch/sh/kernel/signal.c: Remove the decl. of sys_wait4. ++ ++2001-01-27 Yutaro Ebihara <ebiharaml@si-linux.com> ++ ++ * arch/sh/config.in (CONFIG_CF_ENABLER): Valid when ++ CONFIG_SH_CAT68701. ++ ++2001-01-26 Yutaro Ebihara <ebiharaml@si-linux.com> ++ ++ Add support for CAT68701 board computer. ++ * arch/sh/config.in (CONFIG_SH_CAT68701): Added. ++ * arch/sh/kernel/Makefile (obj-$(CONFIG_SH_CAT68701)): Added. ++ * arch/sh/kernel/io_cat68701.c: New file. ++ * arch/sh/kernel/mach_cat68701.c: New file. ++ * include/asm-sh/io.h (CONFIG_SH_CAT68701): Include ++ asm/io_cat68701.h. ++ * inlude/asm/io_cat68701.h: New file. ++ * include/asm-sh/irq.h (cat68701_irq_demux): New function. ++ ++2001-01-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.1-pre10. ++ ++2001-01-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/signal.c (setup_frame, setup_rt_frame): ++ Use flush_cache_sigtramp. ++ ++ * arch/sh/mm/cache.c (flush_cache_sigtramp): Implemented. ++ ++ * include/asm-sh/pgtable.h (_PAGE_SHARED): Always _PAGE_U0_SHARED. ++ (was conditionally _PAGE_HW_SHARED on SH-3). With _PAGE_HW_SHARED, ++ all processes share the page, while proper semantics is "some ++ processes share the page". ++ (flush_cache_sigtramp): New function. ++ ++ * Updated to 2.4.1-pre9. ++ ++ * arch/sh/kernel/sh_ksyms.c (__udivsi3, __sdivsi3): Added. ++ ++2001-01-13 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.1-pre3. ++ ++2001-01-10 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/sh_ksyms.c (__udivsi3_i4, __sdivsi3_i4): Removed. ++ ++2001-01-10 Bryan Rittmeyer <bryan@ixiacom.com> ++ ++ * arch/sh/kernel/entry.S: Fixed typo for SR and added "OFF_" for SP. ++ ++2001-01-10 Denis Dowling <dpd@preston.net> ++ ++ * arch/sh/kernel/entry.S: Change RX-->OFF_RX. ++ ++2001-01-08 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/net/stnic.c (stnic_probe): Set the MAC address from BIOS. ++ ++ * include/asm-sh/sh_bios.h (sh_bios_shutdown): New function. ++ * arch/sh/kernel/sh_bios.c (BIOS_CALL_ETH_NODE_ADDR): Added. ++ (sh_bios_get_node_addr): New function. ++ ++2001-01-06 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.0. ++ * arch/sh/kernel/rtc.c: Remove the inclusion of <linux/config.h>. ++ ++2001-01-04 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/process.c (machine_halt, machine_restart): ++ Call sh_bios_shutdown. ++ * include/asm-sh/sh_bios.h (sh_bios_shutdown): New function. ++ * arch/sh/kernel/sh_bios.c (sh_bios_shutdown): New function. ++ (BIOS_CALL_SHUTDOWN): Added. ++ ++ * arch/sh/kernel/sh_bios.c (CONFIG_SH_STANDARD_BIOS): No conditional ++ compilation, since it's done in Makefile. ++ (linux/config.h): Not included. ++ ++ * drivers/net/stnic.c (STNIC_DELAY): We need more delay for ++ SolutionEngine 7709A. ++ ++ * arch/sh/lib/delay.c (__const_udelay): Fixed. Use DMULU. ++ ++2001-01-03 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Updated to 2.4.0-prerelease. ++ * include/asm-sh/{bugs.h,delay.h}: Follow 2.4.0-prerelease. ++ * arch/sh/lib/delay.c: Ditto. ++ ++2001-01-03 Mitch Davis <mdavis@pocketpenguins.com> ++ ++ * arch/sh/config.in, arch/sh/kernel/entry.S, ++ arch/sh/kernel/traps.c: Get the setting of the VBR from ++ the previous value (set by bootloader) instead of explicitly ++ hard-coding it. ++ * arch/sh/config.in: Pull in the Linux Kernel Input (LKI) ++ device configuration. ++ * arch/sh/kernel/sh_ksyms.c: Export some symbols we need. ++ * include/asm-sh/segment.h: Some old header files expect this ++ file to exist. ++ * drivers/char/Makefile: Added an entry for DMIDA keyboard ++ support. ++ * kernel-official/drivers/input/keybdev.c: Added an entry ++ for SuperH LKI support. ++ * drivers/char/sh-sci.h: The SCI port on the DMIDA is used ++ to drive an SPI bus in synchronous mode. So it's not available ++ as a general-purpose async serial port. Disable it. ++ ++2001-01-03 Mitch Davis <mdavis@pocketpenguins.com> ++ ++ * include/asm-sh/hd64465_gpio.h, ++ arch/sh/kernel/hd64465_gpio.c, ++ arch/sh/kernel/Makefile: Added support for the 5 ++ 8-bit GPIO ports on the HD64465. ++ * arch/sh/kernel/io_hd64465.c: Added some debugging DIPRINTKs. ++ * include/asm-sh/hd64465.h: Added register definitions ++ for the HD64465's onboard PS/2 mouse/keyboard and USB ++ controllers. ++ ++Local Variables: ++mode: change-log ++left-margin: 8 ++fill-column: 76 ++version-control: never ++End: +diff -ruN linux-2.6.17-vanilla/ChangeLog-2002 linux-2.6.17/ChangeLog-2002 +--- linux-2.6.17-vanilla/ChangeLog-2002 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/ChangeLog-2002 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,1750 @@ ++2002-12-21 Paul Mundt <lethal@linux-sh.org> ++ ++ * Makefile: Fix-up TOPDIR so it again references /bin/pwd ++ instead of the non-existant CURDIR .. now we can build a ++ zImage again. ++ ++ * arch/sh/kernel/setup.c (get_cpu_subtype): Added. ++ (show_cpuinfo): General cleanup/rewrite. Get rid of the ifdef mess. ++ * arch/sh/kernel/time.c: Add profiling definitions. ++ ++ * arch/sh/mm/cache-sh4.c (flush_icache_range): Drop the usage of ++ __flush_wback_region() in favor of __flush_dcache_all() -- suboptimal, ++ but does the Right Thing(tm). ++ ++ * drivers/net/Kconfig: Add 8139TOO_DREAMCAST. Seems this got ++ lost along the merges and caused pci_alloc_consistent() to fail. ++ ++ * include/asm-sh/bugs.h (check_bugs): Lots of cleanup, do ++ the utsname update per-family, and leave the subtype notification ++ to get_cpu_subtype(). ++ ++2002-12-19 Paul Mundt <lethal@linux-sh.org> ++ ++ * Makefile: Bump up the inline-limit to 5000. ++ ++2002-12-16 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/boards/saturn/Makefile: Add smp.c. ++ * arch/sh/boards/saturn/smp.c: New file. ++ * include/asm-sh/saturn/smpc.h: New file. ++ ++2002-12-15 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/vmlinux.lds.S: Add __per_cpu_{start,end}. ++ ++ * arch/sh/kernel/smp.c: New file. ++ (smp_cpus_done, smp_send_reschedule, stop_this_cpu, smp_send_stop, ++ smp_call_function, __smp_call_function): Added. ++ * arch/sh/kernel/setup.c: Add platform_setup() and get_system_type() ++ references .. fixes compile-time warnings. ++ ++ * include/asm-sh/bitops.h (find_first_bit, find_next_bit): Added. ++ * include/asm-sh/smp.h (cpu_online, cpu_possible, num_online_cpus): ++ Added. ++ * include/asm-sh/spinlock.h: Change rwlock/spinlock lock type to ++ long. Add spinlock/rwlock debugging. ++ (spin_lock_init): Fixed up invalid lock reference. ++ (spin_unlock_wait): Use spin_is_locked(). ++ (_raw_spin_trylock): Added. ++ (rwlock_init, rwlock_is_locked): Added. ++ Add a SMP_MSG_RESCHEDULE definition. ++ ++2002-12-14 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Add CONFIG_SMP and NR_CPUS definitions. ++ ++ * arch/sh/kernel/Makefile: Add smp.c if CONFIG_SMP is set. ++ * arch/sh/kernel/irq.c (probe_irq_on): Get rid of synchronize_irq() ++ calls, since they weren't doing anything anyways .. use barrier() ++ for our delay instead. ++ * arch/sh/kernel/time.c: Clean up profiling definitions. ++ ++ * include/asm-sh/processor.h: Track cpu_data for each processor. ++ ++ * include/asm-sh/smp.h: Make it do something. ++ * include/asm-sh/spinlock.h: Ditto. ++ * include/asm-sh/system.h: Clean up some left-over cruft that we ++ don't have any use for anymore. ++ ++2002-12-13 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/mm/init.c (enable_mmu, disable_mmu): Moved .. ++ * include/asm-sh/mmu_context.h: .. here. Make it a nop for non-SH3/4. ++ ++2002-12-12 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/mm/init.c (paging_init): Largely rewritten to support ++ CONFIG_MMU being set or not while still taking discontig into ++ consideration. -- Allows SH-3/4 to boot with the MMU turned off. ++ (mem_init): Cleaned up remaining MAX_LOW_PFN/START_PFN references. ++ (enable_mmu): Added. ++ (disable_mmu): Added. ++ (pgd_alloc, pgd_free, pte_alloc_one_kernel, pte_alloc_one): Moved .. ++ ++ * arch/sh/kernel/time.c (sh_do_profile): New function. ++ ++ * include/asm-sh/pgalloc.h: .. here. ++ * include/asm-sh/page.h (MAP_NR): Re-added. This was removed about ++ 2 years ago .. but we actually have a real use for it now. ++ * include/asm-sh/hw-irq.h (sh_do_profile): Removed. ++ ++2002-12-04 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Add CPU_SH2/CPU_SUBTYPE_SH7604. Don't set MMU if ++ CPU_SH2 is set. Default SH_WRITETHROUGH on for SH-2. ++ * arch/sh/Makefile: Add SH-2 CFLAGS/AFLAGS. ++ * arch/sh/vmlinux.lds.S: Fix SH-2 alignment. ++ ++ * arch/sh/kernel/cpu/Makefile: Add sh2/ ++ * arch/sh/kernel/cpu/sh2/Makefile: New file. ++ ++ * arch/sh/kernel/setup.c (show_cpuinfo): Get rid of SH-3/4 ++ distinction. Print everything out dynamically .. look at the dcache ++ flags for combined caches (in the case of SH-2 and SH-3). ++ ++ * arch/sh/mm/Makefile: Add SH-2 cache file. ++ * arch/sh/mm/cache-sh3.c (detect_cpu_and_cache_system): Default cache ++ flags to CACHE_COMBINED. ++ * arch/sh/mm/cache-sh2.c: New file. ++ * arch/sh/mm/init.c (sh_cache_init): Use __get_oc_addr() to get ++ the OC address (this is CPU specific). ++ ++ * include/asm-sh/bugs.h (check_bugs): Add a CPU_SH7604 case. ++ * include/asm-sh/cache.h: Add SH-2 definitions. Add a flags variable ++ to the cache_info struct. Also add a __get_oc_addr() fallback. ++ * include/asm-sh/processor.h: Add CPU_SH7604 definition. ++ ++2002-12-01 Paul Mundt <lethal@linux-sh.org> ++ ++ * TODO: More removals .. write-through caching, probing, ++ config.in/Makefile cleanup, etc. ++ ++ * arch/sh/Kconfig: Clean up CPU_LITTLE_ENDIAN definition (which was ++ blatantly ripped off from MIPS, but neglected to change the MIPS ++ reference). Clean up SH_WDT definition, we're not just for SH-3/4 ++ anymore.. And finally, added SH_WRITETHROUGH and SH_OCRAM definitions. ++ ++ * arch/sh/kernel/setup.c (show_cpuinfo): Calculate I/D cache sizes ++ dynamically. ++ * arch/sh/kernel/sh_ksyms.c: dump_fpu() now takes a pt_regs arg. ++ ++ * arch/sh/mm/cache-sh3.c: Moved out cache definitions to asm/cache.h ++ Nuked cache_wback_all() and sh_cache_init, reworked much of ++ detect_cpu_and_cache_system(), as well as various other cleanups. ++ * arch/sh/mm/cache-sh4.c: Folded detect_cpu() back into ++ detect_cpu_and_cache_system() and did more rework. Added a proper ++ flush_icache_range() and made flush_cache_sigtramp() wrap by ++ blowing out a line. Removed sh_cache_init(). ++ * arch/sh/mm/init.c (sh_cache_init): Added. ++ ++ * include/asm-sh/cache.h: Move SH-3/4 cache definitions here. Also ++ add __cacheline_aligned stuff and a generic cache_info structure ++ for I/D cache representation per-CPU. ++ * include/asm-sh/cacheflush.h: Comment on write-through. ++ * include/asm-sh/mman.h: Added MAP_POPULATE and MAP_NONBLOCK. ++ * include/asm-sh/mmu_context.h: Drag in asm/uaccess.h.. ++ * include/asm-sh/processor.h: Add i/d-cache entries to sh_cpuinfo. ++ ++2002-11-16 Paul Mundt <lethal@linux-sh.org> ++ ++ * TODO: Blow another one off the list. (SH-4 run-time probing). ++ ++ * arch/sh/kernel/time.c: Rip out the PVR defines .. ++ * include/asm-sh/processor.h: Move them here, instead. Also add ++ definitions for 7750S and 7750R. ++ ++ * arch/sh/mm/cache-sh4.c: detect_cpu_and_cache_system() gutted. ++ Replaced by detect_cpu(), which does version/revision probing ++ at run-time instead of at preprocessing time. Kill off remaining ++ ifdef abuse in flush_cache_4096() .. also add sanity checks for ++ 7751R. ++ ++2002-11-15 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/mm/cache-sh3.c, arch/sh/mm/cache-sh4.c: If the OC is in RAM ++ mode, we only have half the entries to flush.. so tear down ++ CACHE_OC_NUM_ENTRIES accordingly. ++ ++2002-11-14 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/video/pvr2fb.c (pvr2fb_init): Move ID assignment down a bit, ++ so we don't inadvertently dereference NULL.. ++ ++2002-11-13 Paul Mundt <lethal@linux-sh.org> ++ ++ * AGAINST-2.5.44: Really remove it. ++ ++ * arch/sh/boards/se/7751/Makefile, arch/sh/boards/adx/Makefile, ++ arch/sh/boards/bigsur/Makefile, arch/sh/boards/cat68701/Makefile, ++ arch/sh/boards/cqreek/Makefile, arch/sh/boards/dmida/Makefile, ++ arch/sh/boards/ec3104/Makefile, arch/sh/boards/harp/Makefile, ++ arch/sh/boards/overdrive/Makefile, arch/sh/boards/sh2000/Makefile, ++ arch/sh/boards/unknown/Makefile, arch/sh/boards/hp6xx/hp620/Makefile, ++ arch/sh/boards/hp6xx/hp680/Makefile, ++ arch/sh/boards/hp6xx/hp690/Makefile: Kill off O_TARGET. ++ ++ * arch/sh/cchips/hd6446x/hd64461/Makefile, ++ arch/sh/cchips/hd6446x/hd64465/Makefile: Here too. ++ ++ * arch/sh/Kconfig: Support crypto. Add CONFIG_SWAP, CONFIG_MMU, and ++ CONFIG_VIPT definitions. ++ ++ * mm/memory.c: Use CONFIG_VIVT for flush_cache_page() check. Could ++ probably use a CONFIG_ARM check, but screw it. ++ ++2002-11-05 M. R. Brown <mrbrown@linux-sh.org> ++ ++ Branch merge of Linux-SH HEAD (2.5.45) ++ ++ * AGAINST-2.5.45: New file. ++ * AGAINST-2.5.44: Remove. ++ ++ * arch/sh/Kconfig, drivers/cdrom/Kconfig, drivers/char/Kconfig, ++ drivers/input/joystick/Kconfig, drivers/input/keyboard/Kconfig, ++ drivers/net/Kconfig: Add files. ++ * arch/sh/Config.help, arch/sh/config.in, drivers/cdrom/Config.help, ++ drivers/cdrom/Config.in, drivers/char/Config.help, ++ drivers/input/joystick/Config.help, drivers/input/joystick/Config.in, ++ drivers/maple/Config.in, drivers/mtd/Config.help, ++ drivers/mtd/maps/Config.help, drivers/mtd/maps/Config.in, ++ drivers/net/Config.help, drivers/net/Config.in: Remove files. ++ * Makefile, arch/sh/kernel/cf-enabler.c, arch/sh/mm/cache-sh4.c, ++ arch/sh/mm/fault.c, drivers/block/rd.c, drivers/char/Makefile, ++ drivers/char/maple_keyb.c, drivers/char/shwdt.c, ++ drivers/net/8139too.c, drivers/pci/pci.ids, fs/mpage.c, ++ include/asm-sh/uaccess.h, init/do_mounts.c, kernel/timer.c: Modified ++ files. ++ ++2002-11-05 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/irq.c (do_IRQ): Add kstat_cpu() hooks. ++ ++ * arch/sh/kernel/ptrace.c, arch/sh/kernel/process.c, ++ include/asm-sh/process.h: Death to PTRACE_O_TRACESYSGOOD as well as ++ PTRACE_SETOPTIONS. ++ ++ * include/asm-sh/processor.h (copy_segments, release_segments): ++ Removed. ++ ++ Sync with 2.5.46 non-Kconfig updates. ++ ++2002-11-04 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/cpufreq.c (sh_cpufreq_setstate): Do a bit of rework ++ here so we use the read/write routines provided by the watchdog.h. ++ ++ * drivers/char/shwdt.c: WDT update. Merge in some bits from mainline, ++ as well as some additional cleanup. SH-2 support. Move all of the ++ read/write garbage out.. ++ ++ * include/asm-sh/watchdog.h: Add support for the SH-2. And dump the ++ read/write stuff here.. then inline it. ++ ++ * arch/sh/boards/bigsur/irq.c, arch/sh/boards/cqreek/irq.c, ++ arch/sh/boards/dreamcast/irq.c, arch/sh/boards/harp/irq.c, ++ arch/sh/boards/overdrive/irq.c, arch/sh/boards/overdrive/led.c, ++ arch/sh/kernel/irq_intc2.c, arch/sh/kernel/irq_ipr.c, ++ arch/sh/kernel/irq_maskreg.c, arch/sh/kernel/pci-sh7751.c, ++ arch/sh/mm/cache-sh3.c, arch/sh/mm/cache-sh4.c, ++ arch/sh/mm/fault.c, drivers/cdrom/gdrom.c, ++ drivers/char/sh-sci.c, drivers/maple/maple.c, ++ drivers/pcmcia/hd64465_ss.c, include/asm-sh/atomic.h, ++ arch/sh/cchips/hd6446x/hd64461/setup.c, ++ arch/sh/cchips/hd6446x/hd64465/gpio.c, ++ arch/sh/cchips/hd6446x/hd64465/setup.c, ++ include/asm-sh/bitops.h: ++ ++ Global save_and_cli()/restore_flags() death, make everyone use ++ local_irq_save()/local_irq_restore(). ++ ++ * include/asm-sh/system.h: Kill the rest of the save_and_cli badness ++ here. ++ ++2002-11-02 M. R. Brown <mrbrown@linux-sh.org> ++ ++ * arch/sh/kernel/cpufreq.c (sh_cpufreq_update_clocks): Update ++ loops_per_jiffy for the current CPU. ++ (sh_cpufreq_setstate): Add cpu parameter. Call ++ cpufreq_notify_transition() before and after the frequency changes. ++ (sh_cpufreq_setpolicy): Pass cpu to sh_cpufreq_setstate(). ++ (sh_cpufreq_init): Oops, we need kHz, not Hz. ++ ++ * drivers/char/sh-sci.c (sci_notifier): New function. Attempt to ++ update baud rate when our peripheral clock changes. ++ (sci_init_drivers): Add notifier. ++ ++2002-11-02 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/time.c: Fix up some of the frequency table ++ declarations, move the divisor/values accessors into the same ++ macro. ++ * arch/sh/kernel/cpufreq.c (sh_cpufreq_setstate): Clean up some ++ watchdog definitions. ++ * drivers/char/shwdt.c: Move some of the watchdog definitions ++ out of the way. ++ ++ * include/asm-sh/watchdog.h: New file. ++ ++2002-11-01 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/cpufreq.c: New file. ++ * arch/sh/kernel/time.c: Countless hacks for cpufreq. ++ ++ * include/asm-sh/freq.h: New file. ++ ++ ++2002-11-01 M. R. Brown <mrbrown@linux-sh.org> ++ ++ * drivers/cdrom/Kconfig, drivers/char/Kconfig, ++ drivers/input/joystick/Kconfig, drivers/input/keyboard/Kconfig, ++ drivers/net/Kconfig: Add from stock 2.5.45. ++ * drivers/cdrom/Config.help, drivers/char/Config.help, ++ drivers/input/joystick/Config.help: Remove. ++ ++ Linux 2.5.45. ++ ++ * AGAINST-2.5.45: New file. ++ * AGAINST-2.5.44: Remove. ++ ++ * arch/sh/Kconfig: New file. ++ * arch/sh/Config.help, drivers/cdrom/Config.help, ++ drivers/cdrom/Config.in, drivers/char/Config.help, ++ drivers/input/joystick/Config.help, drivers/input/joystick/Config.in, ++ drivers/maple/Config.in, drivers/mtd/maps/Config.help, ++ drivers/mtd/maps/Config.in, drivers/mtd/Config.help, ++ drivers/net/Config.help, drivers/net/Config.in, arch/sh/config.in: ++ Remove. ++ ++ * Makefile, arch/sh/mm/fault.c, drivers/char/Makefile, ++ drivers/net/8139too.c, fs/mpage.c, init/do_mounts.c, kernel/timer.c: ++ Merge changes from Linux 2.5.45. ++ ++ ++2002-10-28 M. R. Brown <mrbrown@linux-sh.org> ++ ++ Restructure PCI code / PCI auto implementation ++ ++ * TODO: Update. ++ ++ * arch/sh/config.in: Disable CONFIG_PCI_AUTO for the Dreamcast. ++ ++ * arch/sh/boards/dreamcast/pci.c: Implement board_pci_channels. ++ (pcibios_fixup, pcibios_fixup_irqs): New routines. ++ (pcibios_init): Remove. ++ * arch/sh/boards/dreamcast/setup.c (platform_setup): Add call to ++ gapspci_init() if CONFIG_PCI is enabled. ++ ++ * arch/sh/kernel/pci.c (pcibios_init): New routine. ++ * arch/sh/kernel/pci_auto.c (pciauto_setup_bars, ++ pciauto_prescan_setup_bridge, pciauto_postscan_setup_bridge, ++ pciauto_prescan_setup_cardbus_bridge, ++ pciauto_postscan_setup_cardbus_bridge, pciauto_bus_scan): Change ++ declaration to static. ++ ++ * include/asm-sh/pci.h: Add struct pci_channel; add prototypes for ++ board-specific fixup routines; add prototype for ++ pciauto_assign_resources(). ++ ++ * arch/sh/kernel/pcibios.c: Move... ++ * arch/sh/kernel/pci.c: ...here. ++ * arch/sh/kernel/pci_auto.c: New file. Import ++ arch/mips/kernel/pci_auto.c from linux-mips. ++ * arch/sh/kernel/Makefile: Rename rule for pcibios.o; add rule for ++ pci_auto.o. ++ ++2002-10-28 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/video/pvr2fb.c: Rather extensive rewrite for new API. ++ ++ * arch/sh/boards/se/770x/Makefile: Remove O_TARGET. ++ * arch/sh/boards/se/770x/irq.c: Drag in hitachi_se.h for ++ definitions. ++ ++ * drivers/char/sh-sci.c (sci_receive_chars): Fix handle_sysrq() ++ invokation. ++ * drivers/char/sysrq.c (send_sig_all): for_each_task renamed to ++ for_each_process. ++ ++2002-10-27 M. R. Brown <mrbrown@linux-sh.org> ++ ++ * arch/sh/vmlinux.lds.S: Major cleanups, more in-line with the i386 ++ port. ++ ++ * arch/sh/kernel/setup.c (setup_arch): Get rid of hack console init. ++ The full hack is scheduled to be removed at a later date. ++ ++ * drivers/video/pvr2fb.c: Comment out unused structure definitions so ++ it builds. ++ ++ * arch/sh/Makefile: Make boards build properly. ++ ++ * arch/sh/boards/dreamcast/Makefile: 2.5-ify. ++ * arch/sh/boards/dreamcast/pci.c, arch/sh/boards/dreamcast/rtc.c, ++ arch/sh/boards/dreamcast/setup.c: Finish merging 2.5.44 changes from ++ HEAD. ++ ++ * arch/sh/kernel/Makefile: Remove O_TARGET. ++ * arch/sh/kernel/time.c: Fix rtc_{get,set}_time() initializations. ++ (time_init): Make sure we call board_time_init() before calling any ++ routines that depend on it. Make sure we always get the cpu and bus ++ clock from the CPU. ++ * drivers/char/tty_io.c: Merge from 2.5.44. ++ ++2002-10-24 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/Makefile: Kill off the SE7751 LED code, use ++ SE generic code instead. ++ * arch/sh/kernel/led_se.c: Bring in SE7751 definitions if ++ CONFIG_SH_7751_SOLUTION_ENGINE is set. ++ * arch/sh/kernel/mach_7751se.c: Change heartbeat_7751se references ++ to heartbeat_se. ++ * arch/sh/kernel/led_7751se.c: Removed. ++ ++2002-10-23 Paul Mundt <lethal@linuxdc.org> ++ ++ * arch/sh/config.in: Added CONFIG_CMDLINE_BOOL/CONFIG_CMDLINE. ++ Can now manually hard-code an intial kernel command line. ++ ++ * arch/sh/kernel/setup.c (setup_arch): Append CONFIG_CMDLINE ++ to the kernel command line when CONFIG_CMDLINE_BOOL is set. ++ * arch/sh/kernel/rtc.c (sh_rtc_gettimeofday): Timespec pointer ++ changed name, reflect that in the rest of the code.. ++ ++ * include/asm-sh/ide.h (ide_init_default_hwifs): Fix the ++ ide_register_hw() call so it gets passed the correct number of ++ arguments. ++ ++2002-10-22 Paul Mundt <lethal@linuxdc.org> ++ ++ * include/asm-sh/bugs.h (check_bugs): Added a CPU_SH7751R check. ++ ++2002-10-21 Paul Mundt <lethal@linuxdc.org> ++ ++ * arch/sh/Makefile: Kill off LOADADDR cruft. ++ ++ * arch/sh/boot/compressed/Makefile: Fixup ZLDFLAGS so we use ++ vmlinux.lds.s. ++ ++ * arch/sh/kernel/entry.S: Rename sys_pread/pwrite to ++ sys_pread64/pwrite64. ++ * arch/sh/kernel/time.c: Define jiffies_64. Redefine TICK_SIZE to ++ use TICK_NSEC instead of tick_nsec. ++ ++ * drivers/block/rd.c (rd_blkdev_pagecache_IO): Make sure we ++ flush_dcache_page() on the associated page from the BIO vector ++ instead of the buffer head. ++ ++ * drivers/char/maple_keyb.c (dc_kbd_connect): Fix bustype ++ assignment and make it build again. ++ ++ * drivers/input/keyboard/maple_keyb.c (dc_kbd_connect): Build fix. ++ ++ * drivers/video/pv2fb.c (pvr2fb_set_var): Comment out offending ++ sections. Clean this up later and make things work again. ++ ++ * fs/mpage.c: Add mm.h header. ++ ++ * include/asm-sh/param.h: Define USER_HZ and redefine ++ CLOCKS_PER_SEC. ++ * include/asm-sh/pgalloc.h (pte_free_tlb): Renamed to ++ __pte_free_tlb. Likewise for pmd. ++ * include/asm-sh/system.h (irqs_disabled): Added. ++ * include/asm-sh/tlb.h (tlb_remove_tlb_entry): Renamed to ++ __tlb_remove_tlb_entry. ++ * include/asm-sh/kmap_types.h: New file -- generic skeletal ++ stuff required by AIO. ++ ++ * kernel/time.c (do_adjtimex): Protect tick_nsec reference with ++ CONFIG_VARIABLE_CLOCK_TICK_RATE. ++ * kernel/timer.c (update_wall_time_one_tick): Use TICK_NSEC ++ instead of tick_nsec for systems with a non-static clock tick ++ rate. ++ ++ Also protect the tick_nsec declaration with the ++ CONFIG_VARIABLE_CLOCK_TICK_RATE -- fixup all other tick_nsec ++ references with TICK_NSEC instead. ++ ++2002-10-21 M. R. Brown <mrbrown@linuxdc.org> ++ ++ * arch/sh/config.in: Massive cleanups in preparation of the ++ linux-2_5-restructure merge. ++ ++ * arch/sh/kernel/head.S: Rename cache_init to sh_cache_init to ++ prevent conflict with sunrpc code (net/sunrpc/cache.c). ++ * arch/sh/kernel/mach_dc.c: Rename aica_rtc_* routines to sh_rtc_*. ++ Temporary stop-gap until restructure where RTC is cleaned up. ++ * arch/sh/kernel/pci-dc.c (pcibios_init): Call gapspci_init() ++ directly. Properly initialize PCI subsystem via subsys_initcall(). ++ * arch/sh/kernel/rtc-aica.c: Rename aica_rtc* routines to sh_rtc_*. ++ Temporary stop-gap until restructure where RTC is cleaned up. ++ * arch/sh/kernel/setup.c (scif_sercon_putc, scif_sercon_flush, ++ scif_sercon_write, scif_sercon_device, scif_sercon_setup, ++ scif_sercon_init, scif_sercon_unregister): New routines. Implement a ++ hacked SH4 SCIF console until normal consoles are rewritten and ++ CONFIG_VT is handled properly. ++ (setup_arch): Inititalize SCIF serial console. ++ * arch/sh/kernel/setup_dc.c (setup_dreamcast): Remove call to ++ gapspci_init; minor cleanups. ++ ++ * arch/sh/mm/cache-sh3.c: Rename cache_init to sh_cache_init to ++ prevent conflict with sunrpc code (net/sunrpc/cache.c). ++ * arch/sh/mm/cache-sh4.c: Rename cache_init to sh_cache_init to ++ prevent conflict with sunrpc code (net/sunrpc/cache.c). ++ * arch/sh/mm/init.c (paging_init): Initialize mem_map. ++ CONFIG_DISCONTIGMEM case is not implemented yet. ++ ++ * drivers/pci/pci.ids: Remove duplicate entry. ++ ++ * include/asm-sh/hw_irq.h (sh_do_profile): New function. Holdover ++ until restructure is in place. ++ ++2002-10-19 M. R. Brown <mrbrown@linuxdc.org> ++ ++ * arch/sh/kernel/init_task.c: Fix init_signals initialization. ++ * arch/sh/kernel/irq.c (handle_IRQ_event): Remove unused SMP crud; fix ++ irq_enter() and irq_exit() macros. ++ (disable_irq): Call synchronize_irq(). ++ (synchronize_irq): New funtion; available if CONFIG_SMP is defined. ++ * arch/sh/kernel/pcibios.c (pcibios_align_resource, ++ pcibios_enable_device): Fix function declarations. ++ * arch/sh/kernel/rtc-aica.c (aica_rtc_gettimeofday): Convert to struct ++ timespec. ++ (aica_rtc_settimeofday): Now accepts time_t instead of ++ timeval/timespec. ++ * arch/sh/kernel/rtc.c (sh_rtc_gettimeofday): Convert to struct ++ timespec. ++ (sh_rtc_settimeofday): Now accepts time_t instead of timeval/timespec. ++ * arch/sh/kernel/sh_ksyms.c Commented out screen_info symbol until ++ it's replacement is determined; Export synchronize_irq(). ++ * arch/sh/kernel/time.c: Merged from restructure. ++ (do_gettimeoffset): Convert to nanoseconds/update for timespec. ++ (do_settimeofday): Same here. ++ (sh_do_profile): Removed. ++ (do_timer_interrupt): More usec->nsec conversion. ++ (get_timer_frequency): Use nanoseconds instead of usecs. Not so sure ++ about this one. ++ (time_init): CONFIG_CPU_SUBTYPE_ST40STB1 hack gutted; KGDB is ++ initialized from here. ++ ++ * include/asm-sh/hardirq.h: Converted to 2.5 series. ++ * include/asm-sh/machvec.h: mv_rtc_gettimeofday and ++ mv_rtc_settimeofday prototypes updated. ++ * include/asm-sh/rtc.h: Update prototypes. ++ * include/asm-sh/softirq.h: Converted to 2.5 series. ++ * include/asm-sh/system.h: Comment out macros now included in ++ kernel/sched.c by default (no need to override). ++ ++ ++ * arch/sh/kernel/process.c (sys_fork, sys_clone, sys_vfork): Add ++ missing user_tid parameter, set to NULL for all calls. ++ * arch/sh/kernel/signal.c (sys_sigsuspend, sys_rt_sigsuspend, ++ sys_sigreturn, sys_rt_sigreturn, handle_signal): Replace obsolete ++ field sigmask_lock with sig->siglock. ++ ++ * include/asm-sh/system.h: Fix definition of save_and_cli() for UP. ++ ++ * include/asm-sh/linkage.h, include/asm-sh/percpu.h, ++ include/asm-sh/rmap.h, include/asm-sh/topology.h: Add missing header ++ files from 2.5 series. ++ ++ Linux 2.5.44 ++ ++ * AGAINST-2.5.44: New file. ++ * AGAINST-2.5.43: Removed. ++ ++ * Makefile, arch/sh/lib/old-checksum.c, drivers/block/rd.c, ++ drivers/char/Makefile, drivers/char/Config.help, fs/nfs/inode.c, ++ include/asm-sh/checksum.h, include/asm-sh/system.h: Merge changes from ++ Linux 2.5.44. ++ ++2002-10-18 M. R. Brown <mrbrown@linuxdc.org> ++ ++ * fs/nfs/inode.c: Fix merge breakage. ++ ++ Linux 2.5.43 ++ ++ * AGAINST-2.5.43: New file. ++ * AGAINST-2.5.42: Removed. ++ ++ * Makefile, arch/sh/kernel/mach_7751se.c, arch/sh/kernel/mach_adx.c, ++ arch/sh/kernel/mach_bigsur.c, arch/sh/kernel/mach_cat68701.c, ++ arch/sh/kernel/mach_dc.c, arch/sh/kernel/mach_dmida.c, ++ arch/sh/kernel/mach_ec3104.c, arch/sh/kernel/mach_hp600.c, ++ arch/sh/kernel/mach_se.c, arch/sh/kernel/mach_unknown.c, ++ arch/sh/kernel/setup.c, arch/sh/kernel/setup_cqreek.c, ++ arch/sh/kernel/setup_dc.c, arch/sh/kernel/setup_ec3104.c, ++ arch/sh/kernel/setup_hd64465.c, arch/sh/kernel/setup_sh2000.c, ++ arch/sh/stboards/mach.c, drivers/block/rd.c, drivers/Makefile, ++ drivers/char/Makefile, drivers/char/Config.help, ++ drivers/mtd/maps/Config.in, drivers/mtd/maps/Config.help, ++ drivers/mtd/Config.help, fs/nfs/inode.c, mm/memory.c: Merge changes ++ from Linux 2.5.43. ++ ++ Linux 2.5.42 ++ ++ * AGAINST-2.5.42: New file. ++ * AGAINST-2.5.41: Removed. ++ ++ * Makefile, drivers/block/rd.c, drivers/char/Config.help, ++ fs/nfs/inode.c, include/linux/input.h: Merge changes from Linux ++ 2.5.42. ++ ++ * Makefile: Fix merge breakage. ++ ++ 5Linux 2.5.41 ++ ++ * AGAINST-2.5.41: New file. ++ * AGAINST-2.5.40: Removed. ++ ++ * Makefile, drivers/block/rd.c, drivers/char/Makefile, ++ drivers/char/Config.help, drivers/char/sh-sci.c, ++ drivers/char/sh-sci.h, drivers/mtd/maps/Config.in, ++ drivers/mtd/maps/Config.help, drivers/net/Config.in, ++ drivers/pci/pci.ids, drivers/pcmcia/hd64465_ss.c, fs/nfs/inode.c, ++ include/asm-sh/unistd.h, init/do_mounts.c, mm/memory.c: Merge changes ++ from Linux 2.5.41. ++ ++ Linux 2.5.40 ++ ++ * AGAINST-2.5.40: New file. ++ * AGAINST-2.5.39: Removed. ++ ++ * Makefile, drivers/block/rd.c, drivers/net/8139too.c, mm/memory.c: ++ Merge changes from Linux 2.5.40. ++ ++ Linux 2.5.39 ++ ++ * AGAINST-2.5.39: New file. ++ * AGAINST-2.5.38: Removed. ++ ++ * Makefile, arch/sh/Makefile, arch/sh/kernel/Makefile, ++ arch/sh/mm/Makefile, arch/sh/stboards/Makefile, drivers/block/rd.c, ++ mm/memory.c: Merge changes from Linux 2.5.39. ++ ++ Linux 2.5.38 ++ ++ * AGAINST-2.5.38: New file. ++ * AGAINST-2.5.37: Removed. ++ ++ * Makefile, drivers/block/rd.c: Merge changes from Linux 2.5.38. ++ ++ Linux 2.5.37 ++ ++ * AGAINST-2.5.37: New file. ++ * AGAINST-2.5.36: Removed. ++ ++ * Makefile, drivers/block/rd.c, drivers/net/8139too.c, ++ drivers/net/Config.in, drivers/net/Config.help, fs/nfs/inode.c, ++ mm/memory.c: Merge changes from Linux 2.5.37. ++ ++ Linux 2.5.36 ++ ++ * AGAINST-2.5.36: New file. ++ * AGAINST-2.5.35: Removed. ++ ++ * Makefile, arch/sh/Makefile, drivers/char/Makefile, kernel/ptrace.c, ++ mm/memory.c: Merge changes from Linux 2.5.36. ++ ++ * Makefile: Fix merge breakage. ++ ++ Linux 2.5.35 ++ ++ * AGAINST-2.5.35: New file. ++ * AGAINST-2.5.34: Removed. ++ ++ * Makefile, arch/sh/Makefile, drivers/char/Makefile, ++ drivers/char/Config.help, drivers/pci/pci.ids, fs/nfs/inode.c, ++ include/asm-sh/hdreg.h, include/asm-sh/pgtable.h: Merge changes from ++ Linux 2.5.35. ++ ++ Linux 2.5.34 ++ ++ * AGAINST-2.5.34: New file. ++ * AGAINST-2.5.33: Removed. ++ ++ * Makefile, arch/sh/mm/init.c, drivers/block/rd.c, ++ drivers/char/Makefile, drivers/net/8139too.c, init/do_mounts.c, ++ kernel/ptrace.c, mm/memory.c: Merge changes from Linux 2.5.34. ++ ++ Linux 2.5.33 ++ ++ * AGAINST-2.5.33: New file. ++ * AGAINST-2.5.32: Removed. ++ ++ * Makefile, arch/sh/kernel/irq_intc2.c, arch/sh/kernel/pci-dc.c, ++ arch/sh/kernel/pci-sh7751.c, arch/sh/kernel/pci_st40.c, ++ drivers/char/Makefile, drivers/char/Config.help, ++ drivers/net/8139too.c, drivers/net/Config.in, drivers/net/Config.help, ++ fs/nfs/inode.c, include/asm-sh/cache.h: Merge changes from Linux ++ 2.5.33. ++ ++ * drivers/pci/pci.ids, drivers/char/Makefile: Fix merge breakage. ++ ++ Linux 2.5.32 ++ ++ * AGAINST-2.5.32: New file. ++ * AGAINST-2.5.31: Removed. ++ ++ * Makefile, arch/sh/Makefile, arch/sh/config.in, ++ drivers/char/Makefile, drivers/char/Config.help, ++ drivers/input/joystick/Config.help, drivers/input/joystick/Config.in, ++ drivers/mtd/maps/Config.in, drivers/pci/pci.ids, ++ drivers/video/epson1355fb.c, drivers/video/hitfb.c, ++ drivers/video/pvr2fb.c, include/asm-sh/keyboard.h, ++ include/asm-sh/smplock.h, include/linux/input.h, init/do_mounts.c, ++ kernel/ptrace.c, mm/memory.c: Merge changes from Linux 2.5.32. ++ ++ Linux 2.5.31 ++ ++ * AGAINST-2.5.31: New file. ++ * AGAINST-2.5.30: Removed. ++ ++ * Makefile, arch/sh/config.in, drivers/char/Makefile, ++ drivers/net/8139too.c, mm/memory.c: Merge changes from Linux 2.5.31. ++ ++ * init/do_mounts.c, mm/memory.c: Fix merge breakage. ++ ++ Linux 2.5.30 ++ ++ * AGAINST-2.5.30: New file. ++ * AGAINST-2.5.29: Removed. ++ ++ * Makefile, arch/sh/kernel/Makefile, drivers/block/rd.c, ++ drivers/Makefile, drivers/char/Makefile, drivers/char/Config.help, ++ drivers/net/Config.in, fs/nfs/inode.c, include/asm-sh/processor.h, ++ include/asm-sh/socket.h, include/asm-sh/unistd.h, ++ include/linux/input.h, init/do_mounts.c, kernel/ptrace.c, mm/memory.c: ++ Merge changes from Linux 2.5.30. ++ ++ Linux 2.5.29 ++ ++ * AGAINST-2.5.29: New file. ++ * AGAINST-2.5.28: Removed. ++ ++ * Makefile, arch/sh/config.in, drivers/input/joystick/Config.help, ++ drivers/input/joystick/Config.in, drivers/input/joystick/Makefile, ++ fs/nfs/inode.c, include/linux/input.h, init/do_mounts.c: Merge changes ++ from Linux 2.5.29. ++ ++ Linux 2.5.28 ++ ++ * AGAINST-2.5.28: New file. ++ * AGAINST-2.5.27: Removed. ++ ++ * Makefile, arch/sh/kernel/irq.c, arch/sh/kernel/process.c, ++ drivers/block/rd.c, drivers/Makefile, drivers/char/Makefile, ++ drivers/net/8139too.c, include/asm-sh/system.h, kernel/ptrace.c, ++ mm/memory.c: Merge changes from Linux 2.5.28. ++ ++ Linux 2.5.27 ++ ++ * AGAINST-2.5.27: New file. ++ * AGAINST-2.5.26: Removed. ++ ++ * Makefile, include/asm-sh/ide.h, kernel/ptrace.c, mm/memory.c: Merge ++ changes from Linux 2.5.27. ++ ++ Linux 2.5.26 ++ ++ * AGAINST-2.5.26: New file. ++ * AGAINST-2.5.25: Removed. ++ ++ * Makefile, arch/sh/config.in, drivers/char/Makefile, ++ drivers/char/Config.help, drivers/input/joystick/Config.help, ++ drivers/input/joystick/Config.in, drivers/input/joystick/Makefile, ++ fs/nfs/inode.c, include/asm-sh/pgtable-2level.h, ++ include/linux/input.h: Merge changes from Linux 2.5.26. ++ ++ * include/linux/input.h: Fix merge breakage. ++ ++ Linux 2.5.25 ++ ++ * AGAINST-2.5.25: New file. ++ * AGAINST-2.5.24: Removed. ++ ++ * Makefile, arch/sh/Makefile, arch/sh/boot/compressed/Makefile, ++ arch/sh/boot/Makefile, drivers/char/Makefile, ++ drivers/input/joystick/Config.help, drivers/input/joystick/Config.in, ++ drivers/input/joystick/Makefile, fs/nfs/inode.c, ++ include/linux/input.h, mm/memory.c: Merge changes from Linux 2.5.25. ++ ++2002-08-28 Matt Boytim <matt@boytim.org> ++ ++ * drivers/char/sh-sci.c (sci_receive_chars): Add dummy read ++ when copied==0 to clear interrupt. ++ ++2002-06-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/Makefile (archclean): Remove invoking make under ++ subdirectory. ++ (LINKFLAGS): Add adding 'jiffies' definition. ++ ++ * arch/sh/vmlinux.lds.S (jiffies): Removed. ++ ++ * arch/sh/mm/ioremap.c: Include <linux/mm.h> and <asm/page.h>. ++ ++ * arch/sh/mm/cache-sh4.c (copy_user_page, clear_user_page): Follow ++ new API. ++ ++ * arch/sh/kernel/irq.c (show_interrupts): Use NR_CPUS (was: ++ smp_num_cpus). ++ ++ * arch/sh/kernel/sh_ksyms.c: Don't include <asm/pgalloc.h>. ++ ++ * include/asm-sh/signal.h: Declare struct pt_regs. ++ ++ * include/asm-sh/pgtable.h (mk_pte): New definition using pfn_pte. ++ ++ * include/asm-sh/pgalloc.h (pmd_free_tlb): Fixed to have a argument ++ tlb. ++ (ptep_get_and_clear): Fixed the argurment to pfn_to_page. ++ ++ * include/asm-sh/pgtable-2level.h (pte_pfn): Fixed to access the ++ member pte (was: pte_low). ++ ++ * include/asm-sh/page.h (VALID_PAGE): Removed. ++ (PFN_START, pfn_to_page, page_to_pfn, virt_to_page, pfn_valid, ++ virt_addr_valid): Defined. ++ ++ * include/asm-sh/siginfo.h: Remove unmatched #endif. ++ ++2002-06-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * AGAINST-2.5.24: New file. ++ * AGAINST-2.5.24: Removed. ++ * Makefile: Version 2.5.24. ++ ++ * arch/sh/kernel/sys_sh.c, drivers/Makefile, drivers/char/Makefile, ++ drivers/mtd/maps/Config.in, drivers/net/8139too.c, ++ drivers/net/Config.in, drivers/pcmcia/hd64465_ss.c: Incorporate ++ changes in 2.5.23. ++ ++2002-06-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * AGAINST-2.5.23: New file. ++ * AGAINST-2.5.22: Removed. ++ * Makefile: Version 2.5.23. ++ ++ * arch/sh/Makefile, arch/sh/boot/Makefile, arch/sh/kernel/time.c, ++ drivers/block/rd.c: Incorporate changes in 2.5.23. ++ ++2002-06-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/system.h (prepare_to_switch): Removed. ++ (prepare_arch_schedule, finish_arch_schedule, prepare_arch_switch, ++ finish_arch_switch): Added. ++ (switch_to): New API. ++ ++ * AGAINST-2.5.22: New file. ++ * AGAINST-2.5.21: Removed. ++ * Makefile: Version 2.5.22. ++ ++ * arch/sh/kernel/setup.c, drivers/Makefile, drivers/block/rd.c, ++ drivers/char/Makefile, drivers/pci/pci.ids, fs/nfs/inode.c, ++ init/do_mounts.c, mm/memory.c: Incorporate changes in 2.5.22. ++ ++2002-06-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * AGAINST-2.5.21: New file. ++ * AGAINST-2.5.20: Removed. ++ * Makefile: Version 2.5.21. ++ ++ * arch/sh/boot/Makefile, drivers/block/rd.c, drivers/char/Makefile, ++ fs/nfs/inode.c: Incorporate changes in 2.5.21. ++ ++2002-06-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/page.h (clear_user_page, copy_user_page): New API. ++ ++ * AGAINST-2.5.20: New file. ++ * AGAINST-2.5.19: Removed. ++ * Makefile: Version 2.5.20. ++ ++ * drivers/cdrom/Config.help, drivers/cdrom/Config.in, ++ drivers/cdrom/Makefile, drivers/char/Config.help, ++ drivers/char/Makefile, drivers/net/Config.help, fs/nfs/inode.c, ++ include/asm-sh/pgtable.h, init/do_mounts.c, mm/memory.c: Incorporate ++ changes in 2.5.20. ++ ++2002-06-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgtable-2level.h (pte_pfn, pfn_pte, pfn_pmd): Added. ++ ++ * AGAINST-2.5.19: New file. ++ * AGAINST-2.5.18: Removed. ++ * Makefile: Version 2.5.19. ++ ++ * arch/sh/kernel/Makefile, arch/sh/kernel/signal.c, ++ arch/sh/stboards/Makefile, drivers/Makefile, drivers/block/rd.c, ++ drivers/cdrom/Makefile, drivers/char/Makefile, ++ drivers/video/hitfb.c, include/asm-sh/errno.h, include/asm-sh/ide.h, ++ include/asm-sh/siginfo.h, init/do_mounts.c, mm/memory.c: Incorporate ++ changes in 2.5.19. ++ ++2002-06-18 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/bitops.h (fls): Added. ++ * arch/sh/kernel/signal.c: Include <linux/suspend.h>. ++ (do_signal): Handle PF_FREEZE. ++ ++ * AGAINST-2.5.18: New file. ++ * AGAINST-2.5.17: Removed. ++ * Makefile: Version 2.5.18. ++ ++ * arch/sh/defconfig, arch/sh/kernel/Makefile, arch/sh/lib/Makefile, ++ arch/sh/mm/Makefile, arch/sh/mm/init.c, drivers/block/rd.c, ++ drivers/char/Makefile, drivers/char/shwdt.c, ++ drivers/input/joystick/Makefile, drivers/pci/pci.ids, ++ fs/nfs/inode.c, init/do_mounts.c, mm/memory.c: Incorporate changes ++ in 2.5.18. ++ ++2002-05-24 Paul Mundt <lethal@chaoticdreams.org> ++ ++ * arch/sh/Config.help, arch/sh/config.in, arch/sh/kernel/Makefile: ++ Add CONFIG_UBC_WAKEUP definitions. ++ * arch/sh/kernel/setup.c (setup_arch): Call ubc_wakeup() if ++ CONFIG_UBC_WAKEUP=y. ++ * arch/sh/kernel/ubc.S: New file. ++ ++ * include/asm-sh/ptrace.h: Move UBC definitions out to a UBC ++ specific header. ++ * include/asm-sh/ubc.h: New file. ++ ++2002-05-23 Paul Mundt <lethal@chaoticdreams.org> ++ ++ * drivers/char/shwdt.c: SH-5 support. Various other cleanups. ++ ++2002-05-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/tlb.h (tlb_start_vma, tlb_end_vma, ++ tlb_remove_tlb_entry, tlb_flush): To be implemented. ++ ++ * AGAINST-2.5.17: New file. ++ * AGAINST-2.5.16: Removed. ++ * Makefile: Version 2.5.17. ++ ++ * drivers/block/rd.c, fs/nfs/inode.c, include/asm-sh/ioctls.h, ++ mm/memory.c: Incorporate changes in 2.5.17. ++ ++2002-05-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgalloc.h (pte_free_tlb, pmd_free_tlb): Added. ++ ++ * AGAINST-2.5.16: New file. ++ * AGAINST-2.5.15: Removed. ++ * Makefile: Version 2.5.16. ++ ++ * arch/sh/kernel/process.c, arch/sh/vmlinux.lds.S, ++ drivers/net/8139too.c, include/asm-sh/ide.h, include/linux/input.h, ++ mm/memory.c: Incorporate changes in 2.5.16. ++ ++2002-05-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/signal.c (do_signal): Added SIGURG case. ++ ++ * AGAINST-2.5.15: New file. ++ * AGAINST-2.5.14: Removed. ++ * Makefile: Version 2.5.15. ++ ++ * arch/sh/kernel/pci_st40.c, arch/sh/kernel/pcibios.c, ++ drivers/Makefile, drivers/char/Makefile, include/asm-sh/ide.h, ++ kernel/ptrace.c: Incorporate changes in 2.5.15. ++ ++2002-05-07 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgtable.h (mk_pte_phys): Removed. ++ ++ * AGAINST-2.5.14: New file. ++ * AGAINST-2.5.13: Removed. ++ * Makefile: Version 2.5.14. ++ ++ * arch/sh/mm/cache-sh4.c, arch/sh/mm/fault.c, arch/sh/mm/init.c, ++ arch/sh/mm/ioremap.c, drivers/pci/pci.ids, include/asm-sh/pgalloc.h, ++ init/do_mounts.c, mm/memory.c: Incorporate changes in 2.5.14. ++ ++2002-05-06 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * AGAINST-2.5.13: New file. ++ * AGAINST-2.5.12: Removed. ++ * Makefile: Version 2.5.13. ++ ++ * Makefile, drivers/block/rd.c, drivers/net/Config.in, ++ drivers/pci/pci.ids: Incorporate changes in 2.5.13. ++ ++2002-05-01 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * AGAINST-2.5.12: New file. ++ * AGAINST-2.5.11: Removed. ++ * Makefile: Version 2.5.12. ++ ++ * arch/sh/mm/init.c, drivers/block/rd.c, drivers/char/Makefile, ++ drivers/pci/pci.ids, fs/nfs/inode.c, mm/memory.c: Incorporate ++ changes in 2.5.12. ++ ++2002-04-30 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow up to 2.5.11. ++ * arch/sh/mm/clear_page.S: Remove SYMBOL_NAME. ++ * arch/sh/kernel/head.S, arch/sh/kernel/entry.S, ++ arch/sh/lib/memmove.S: Likewise. ++ ++ * AGAINST-2.5.11: New file. ++ * AGAINST-2.5.10: Removed. ++ * Makefile: Version 2.5.11. ++ ++ * Documentation/cachetlb.txt: Incorporate changes in 2.5.11. ++ * arch/sh/defconfig, drivers/block/rd.c, drivers/char/Config.help, ++ drivers/char/Makefile, drivers/video/epson1355fb.c, ++ drivers/video/hitfb.c, drivers/video/pvr2fb.c, ++ include/asm-sh/ide.h, mm/memory.c: Likewise. ++ ++2002-04-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * AGAINST-2.5.10: New file. ++ * AGAINST-2.5.9: Removed. ++ * Makefile: Version 2.5.10. ++ * drivers/pci/pci.ids: Incorporate changes in 2.5.10. ++ ++2002-04-25 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/mm/cache-sh4.c (CACHE_ASSOC): Defined. ++ (flush_cache_4096_all): Moved to clear_page.S. ++ (flush_cache_4096): Rewritten. Use __flush_cache_4096. ++ (flush_dcache_page,__flush_cache_page): Don't protect from interrupt. ++ (flush_cache_all): Rewritten. Use __flush_dcache_all. ++ (flush_cache_range): Follow change of flush_cache_4096_all. ++ * arch/sh/mm/clear_page.S (__flush_cache_4096_all): Removed. ++ (flush_cache_4096_all): New implementation. ++ (__flush_cache_4096): Optimized. Use ASSOC bit. ++ (__flush_dcache_all): New function. ++ (__clear_user): Clean-up local label. ++ ++ * copy_page.S (__copy_user): Clean-up local label. ++ ++ * arch/sh/kernel/time.c (sh_do_profile): Add profile even if PC is in ++ P2 area. ++ ++2002-04-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * AGAINST-2.5.9: New file. ++ * AGAINST-2.5.8: Removed. ++ * Makefile: Version 2.5.9. ++ * drivers/char/Makefile: Incorporate changes in 2.5.9. ++ * drivers/pci/pci.ids: Likewise. ++ * include/asm-sh/errno.h (E2BIG): Follow the change of i386 version. ++ ++2002-04-17 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/mm/copy_page.S (__copy_user): New function. ++ * include/asm-sh/uaccess.h (__copy_user): Remove macro, ++ declared as external function. ++ ++2002-04-15 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Makefile: Version 2.5.8. ++ * AGAINST-2.5.8: New file. ++ * AGAINST-2.5.8-pre3: Removed. ++ ++ * drivers/block/rd.c: Incorporate changes in 2.5.8-pre3 -> final. ++ ++2002-04-13 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/mm/clear_page.S (__clear_user): Bug fix. ++ ++2002-04-12 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow up to 2.5.8-pre3. ++ * include/asm-sh/tlbflush.h (flush_tlb_kernel_range): New API. ++ * arch/sh/mm/fault.c (flush_tlb_kernel_range): New function. ++ ++ * arch/sh/kernel/entry.S (sys_sched_setaffinity, ++ sys_sched_getaffinity): New syscall entries. ++ * include/asm-sh/unistd.h (__NR_sched_setaffinity, ++ __NR_sched_getaffinity): New macros. ++ ++2002-04-11 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Follow up to 2.5.8-pre2. ++ * arch/sh/kernel/process.c: Include <linux/platform.h>. ++ (default_idle): New function. ++ (cpu_idle): Call default_idle. ++ ++ * arch/sh/kernel/signal.c: Include <linux/binfmt.h>. ++ ++ * include/asm-sh/pgalloc.h: Inline functions move to real functions. ++ * arch/sh/mm/init.c (pgd_alloc, pgd_free, pte_alloc_one_kernel, ++ pte_alloc_one): Moved to here. ++ ++ * include/asm-sh/thread_info.h (PREEMPT_ACTIVE): Defined. ++ ++ * include/asm-sh/cacheflush.h, include/asm-sh/tlbflush.h: New files. ++ ++ * include/asm-sh/mmu_context.h: Include asm/tlbflush.h. ++ ++ * arch/sh/kernel/signal.c: Include asm/cacheflush.h. ++ * arch/sh/mm/cache-sh3.c: Likewise. ++ * arch/sh/mm/cache-sh4.c: Likewise. ++ * arch/sh/mm/fault.c: Likewise. ++ ++ * arch/sh/kernel/sh_ksyms.c: Include asm/tlbflush.h, ++ asm/cacheflush.h. ++ * arch/sh/mm/ioremap.c: Likewise. ++ ++2002-04-10 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * Makefile: Version 2.5.8-pre3. ++ * AGAINST-2.5.8-pre3: New file. ++ * AGAINST-2.5.8-pre1: Removed. ++ ++ * include/asm-sh/unistd.h: Incorporate changes in 2.5.8-pre2 -> pre3. ++ * drivers/block/rd.c: Likewise. ++ ++ * mm/memory.c: Incorporate changes in 2.5.8-pre1 -> pre2. ++ * fs/nfs/inode.c: Incorporate changes in 2.5.8-pre1 -> pre2. ++ ++2002-04-07 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/traps.c (show_task): Don't use __get_user, ++ it's kernel space. Assume 80-columns. ++ ++2002-04-06 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/semaphore.c: Inlcude <linux/errno.h>. ++ ++2002-04-05 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Bug fix for thread_info. ++ * arch/sh/kernel/ptrace.c (get_stack_long): Use task->thread_info. ++ (put_stack_long): Likewise. ++ (sys_ptrace): Likewise. ++ ++2002-04-05 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * fs/nfs/inode.c: Added. ++ (nfs_find_actor): Return 0 when the type of file is not same. ++ ++2002-04-05 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/input/joystick/Config.in: Updated to 2.5.8-pre1. ++ * drivers/input/joystick/Config.help: Ditto. ++ * drivers/input/joystick/Makefile: Ditto. ++ * drivers/net/Config.in: Ditto. ++ * arch/sh/kernel/pci-sh7751.c: Martin's e-mail change to ucw.cz. ++ (follow the change of arch/i386/*.) ++ * drivers/video/epson1355fb.c (e1355fb_init): Use NODEV Instead of -1. ++ ++2002-04-04 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Update to 2.5.8-pre1. ++ * AGAINST-2.5.8-pre1: New file. ++ * AGAINST-2.5.7: Removed. ++ * Makefile: Version 2.5.8-pre1. ++ * Makefile, arch/sh/kernel/sh_ksyms.c, drivers/block/rd.c, ++ drivers/char/shwdt.c, drivers/net/Config.in, drivers/pci/pci.ids, ++ init/do_mounts.c: Include changes from mainline (2.5.8-pre1). ++ * arch/sh/kernel/sh_ksyms.c (simple_strtol, strtok): Removed. ++ * drivers/char/shwdt.c (nowayout): New module option (to be ++ configured at runtime by Matt Domsch). ++ ++2002-04-03 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache-sh4.c (flush_cache_4096_all, flush_cache_4096): ++ Changed the compile time condition for ST40 and SH7751. OC can be ++ handled in P2, while IC must be handled at P1. ++ ++ * arch/sh/mm/clear_page.S (__flush_cache_4096_all): Renamed ++ from __flush_cache_4096_nocheck. ++ ++2002-03-29 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache-sh4.c (flush_cache_4096_nocheck): New function. ++ (flush_icache_all): New function. ++ (flush_cache_all): Use flush_icache_all. Don't need to protect ++ from interrupt as we don't flush dcache by writing CCR. ++ (flush_cache_range): Don't call __flush_cache_page, but ++ call flush_cache_4096_nocheck. ++ ++ * arch/sh/mm/clear_page.S (__flush_cache_4096_nocheck): New function. ++ ++2002-03-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (work_notifysig): One cycle optimization. ++ ++2002-03-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/process.c (cpu_idle): Bug fix. Don't exit loop ++ when hlt_counter != 0. ++ ++ * include/asm-sh/uaccess.h (__access_ok): Added missing inline ++ qualifier. ++ ++ * arch/sh/kernel/entry.S (OFF_TRA): Renamed from IS_SYSCALL. ++ (system_call, handle_exception): Set tra. ++ ++ * arch/sh/kernel/signal.c (restore_sigcontext, handle_signal, ++ do_signal): Use tra. ++ ++ * include/asm-sh/ptrace.h (tra): Renamed from is_syscall. ++ ++2002-03-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/signal.c (save_sigcontext_fpu): Don't need ++ to protect from interrupt. ++ * arch/sh/kernel/process.c (dump_fpu, __switch_to, copy_thread): ++ Likewise. ++ ++2002-03-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache-sh4.c (flush_dcache_page): Merged with ++ __flush_dcache_page. ++ ++2002-03-28 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/clear_page.S (__flush_cache_4096): Only define for ++ SH7750. ++ ++ * arch/sh/mm/cache-sh4.c (flush_cache_4096): Plain loop for SH7751 ++ and ST40 (no need to go P2). ++ ++2002-03-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (IS_SYSCALL): Renamed from SYSCALL_NR. ++ (system_call, handle_exception): Set is_syscall. ++ ++ * arch/sh/kernel/signal.c (restore_sigcontext, handle_signal, ++ do_signal): Use is_syscall. ++ ++ * include/asm-sh/ptrace.h (is_syscall): Renamed from syscall_nr. ++ ++ * arch/sh/kernel/signal.c (save_sigcontext_fpu): Use __put_user ++ (was: __copy_to_user). ++ (handle_signal, do_signal): Bug fix. Don't set register 0. ++ ++ * include/asm-sh/hw_irq.h (sh_do_profile): Removed from here. ++ * arch/sh/kernel/time.c (sh_do_profile): But implemented here. ++ ++2002-03-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/copy_page.S: File merged with __copy_user_page-sh4.S. ++ * arch/sh/mm/clear_page.S: File merged with __clear_user.S. ++ (__flush_cache_4096): New function. ++ * arch/sh/mm/Makefile: Remove __copy_user_page-sh4.S and ++ __clear_user.S. ++ ++ * arch/sh/mm/cache-sh4.c (__flush_icache_page): Removed. ++ (flush_cache_4096): New function. ++ ++2002-03-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache-sh4.c (__flush_cache_page): New function. ++ (flush_cache_range, flush_cache_page, flush_icache_user_range): Use ++ __flush_cache_page. ++ ++2002-03-26 NIIBE Yutaka <gniibe@server1.m17n.org> ++ ++ * arch/sh/mm/cache-sh4.c (flush_cache_mm): Don't check ++ mm->context, it's for TLB handling. ++ (flush_cache_range): Likewise. ++ (flush_cache_mm): Fix the comment. The alias issue is there ++ for write-through cache too. ++ (flush_cache_range): Don't handle in P2. ++ ++2002-03-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache-sh4.c (flush_cache_range): Bug fix. ++ Handle the case where PMD is none or bad. ++ The argument to __flush_icache_page/__flush_dcache_page ++ is physical address (was: virtual address). ++ ++2002-03-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/mmu_context.h (switch_mm): Remove setting/resetting ++ of mm->cpu_vm_mask. It's for SMP implementation. ++ (get_new_mmu_context): Removed. ++ (get_mmu_context): Merved with get_new_mmu_context. ++ ++2002-03-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/lib/Makefile (obj-y): Removed old-checksum.o as ++ it seems nothing depends on that. ++ ++ * arch/sh/kernel/sh_ksyms.c (csum_partial_copy): ++ Don't export old (possibly obsolete) function. ++ ++2002-03-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/uaccess.h (__clear_user): Make it external ++ function. (Was: inline function). ++ ++ * arch/sh/mm/Makefile: Added the entry for __clear_user.o. ++ * arch/sh/mm/__clear_user.S: File name change. As it's also used by ++ SH-3, renamed from __clear_user_page-sh4.S, ++ (__clear_user): New function. ++ ++2002-03-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/system.h (mm_segment_t): Move the definition to... ++ * include/asm-sh/uaccess.h: ... here. And change it to have boolean ++ is_user_space. ++ (KERNEL_DS, USER_DS): New value domain: 0 or 1. ++ (get_fs): Simplified. ++ (set_fs): Optimized by asm. ++ (__get_user_check): New implementation. ++ (__get_user_1, __get_user_2, __get_user_4): New macros. ++ (strnlen_user): Use __access_ok function. ++ (strlen_user): Implemented as inline function. ++ ++2002-03-23 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/uaccess.h (__range_ok): Removed. ++ (__access_ok, access_ok): New implementation. ++ ++ * include/asm-sh/thread_info.h (TIF_USERSPACE): Change to 31, ++ so that expression can be simple (was: 18). ++ ++2002-03-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/thread_info.h: Define cpu and preempt_count as ++ 16-bit to fit cache (for SH-3). ++ (INIT_THREAD_INFO): Initialize the member 'cpu'. ++ ++ * include/asm-sh/system.h (switch_to): Use __dummy output argument ++ for r0. ++ ++ * include/asm-sh/pgtable.h (pte_offset): Removed. ++ (pte_offset_map, pte_offset_map_nested): Define as pte_offset_kernel. ++ ++ * include/asm-sh/pgalloc.h (pte_alloc_one): Bug fix for clear_page. ++ ++ * arch/sh/mm/cache-sh4.c (flush_cache_range): Don't need to check ++ find_vma. ++ ++ * arch/sh/mm/cache-sh4.c (flush_cache_range, flush_cache_page, ++ clear_user_page, copy_user_page): Use pte_offset_kernel. ++ * arch/sh/mm/fault.c (__do_page_fault): Likewise. ++ ++ * arch/sh/kernel/signal.c (restore_sigcontext): Use tsk. ++ ++ * arch/sh/kernel/setup.c (setup_arch): Bug fix for FPU ++ initialization. ++ ++ * arch/sh/kernel/ptrace.c (sys_ptrace): Remove unused variable tsk. ++ (do_syscall_trace): Use tsk. ++ ++ * arch/sh/kernel/process.c (alloc_task_struct, free_task_struct): ++ Removed. ++ (copy_thread): Bug fix for thread_info. Clear TIF_USEDFPU flag. ++ (copy_thread, dump_thread): Don't distingush init_task specially. ++ (switch_to): Bug fix, use next->thread_info. ++ ++ * arch/sh/kernel/entry.S (work_resched, resume_userspace, ++ syscall_exit): Use r8 for current_thread_info. ++ (syscall_exit_work): Bug fix, load do_syscall_trace. ++ (system_call): Don't need to ext.u. Micro opt. for syscall_nr. ++ (syscall_trace_entry, syscall_badsys): Bug fix for error return ++ value. ++ ++2002-03-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/mman.h (PROT_SEM): Added. ++ ++ * arch/sh/kernel/signal.c (do_signal): Follow the name change of ++ p_ptr -> parent of the task. ++ ++ * include/asm-sh/unistd.h (__NR_futex): Added. ++ * arch/sh/kernel/entry.S (sys_call_table): Added sys_futex. ++ (syscall_exit_work): Move up. (Near work_pending.) ++ (sys_nfsservctl): Define to sys_ni_syscall, when not NFSD. ++ ++ * include/asm-sh/pgalloc.h (check_pgt_cache): New macro. ++ ++2002-03-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Update to 2.5.7. ++ * AGAINST-2.5.7: New file. ++ * AGAINST-2.5.6: Removed. ++ * Makefile: Version 2.5.7. ++ * Makefile, arch/sh/Config.help, arch/sh/config.in, ++ drivers/Makefile, drivers/pci/pci.ids, kernel/ptrace.c, mm/memory.c: ++ Include changes from mainline (2.5.7). ++ ++2002-03-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgalloc.h (ptep_get_and_clear): Follow the change of ++ type of member i_map_shared. ++ * include/asm-sh/unistd.h (__NR_tkill, __NR_sendfile64): Added. ++ * include/asm-sh/siginfo.h (SI_DETHREAD): Added. ++ * arch/sh/kernel/entry.S (sys_call_table): Added sys_sendfile64. ++ ++2002-03-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Update to 2.5.6. ++ * AGAINST-2.5.6: New file. ++ * AGAINST-2.5.5: Removed. ++ * Makefile: Version 2.5.6. ++ * Makefile, drivers/Makefile, drivers/block/rd.c, ++ drivers/char/Config.help, drivers/char/Makefile, ++ drivers/net/8139too.c, drivers/net/Config.help, ++ drivers/net/Config.in, drivers/pci/pci.ids, init/do_mounts.c, ++ mm/memory.c: Include changes from mainline (2.5.6). ++ ++2002-03-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pgtable.h (pmd_page_kernel): Renamed from pmd_page. ++ (pmd_page): New macro for user page. ++ (pte_offset_kernel): New macro. ++ (pte_offset_map, pte_offset_map_nested, pte_unmap, pte_unmap_nested): ++ New macros. ++ ++ * arch/sh/mm/ioremap.c (remap_area_pmd): Use pte_alloc_kernel ++ (was: pte_alloc). ++ ++2002-03-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/process.c (cpu_idle): Don't call check_pgt_cache. ++ ++ * include/asm-sh/pgalloc.h (pmd_populate_kernel): Renemed from ++ pmd_populate. ++ (pmd_populate): New function for U0 page. ++ (do_check_pgt_cache): Removed. ++ (pmd_free_slow, pmd_free_fast): Removed. ++ (pmd_alloc_one_fast): Removed. ++ (pte_free_slow): Renamed to pte_free. Macro removed. ++ (pte_alloc_one_fast): Removed. ++ (pte_alloc_one_kernel, pte_free_kernel): New function. ++ (pte_alloc_one): Call schedule_timeout and try again. ++ ++2002-03-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/entry.S (ret_from_fork): Follow the change of ++ switch_to. Don't call schedule_tail (it's now SMP only function). ++ Move the label to syscall_exit. ++ ++ * include/asm-sh/system.h (switch_to): Change the API (removing ++ last argument). ++ ++ * include/asm-sh/page.h (VM_DATA_DEFAULT_FLAGS): Defined. ++ ++ * include/asm-sh/bitops.h (sched_find_first_bit): 140-bit ++ implementation. It's moved to here... ++ * include/asm-sh/mmu_context.h: ... from here. (Removed). ++ ++2002-03-22 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache-sh4.c (flush_icache_user_range): New function. ++ * include/asm-sh/pgtable.h (flush_icache_user_range): Declared. ++ ++ * kernel/ptrace.c (access_process_vm): Remove flush_dcache_page ++ as we do flush_icache_user_range here. (No difference now.) ++ ++2002-03-20 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Update to 2.5.5. ++ * AGAINST-2.5.5: New file. ++ * AGAINST-2.5.4: Removed. ++ * Documentation/cachetlb.txt: Include the change. ++ * Makefile: Version 2.5.5. Merged. ++ * arch/sh/config.in, drivers/Makefile: Sound driver move. ++ * arch/sh/kernel/signal.c: recalc_sigpending API change. ++ * drivers/net/8139too.c, drivers/net/Config.in: Update. ++ * drivers/pci/pci.ids: Update. ++ * include/asm-sh/pgtable.h: New API flush_icache_user_range, ++ Removed page_address API here (move to linux/mm.h). ++ * include/net/inet_ecn.h: Update. ++ * kernel/ptrace.c: Use new API flush_icache_user_range. ++ * mm/memory.c: Update. ++ ++2002-03-09 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/mm/cache-sh4.c (flush_cache_range): New auto variable mm. ++ ++ * arch/sh/kernel/process.c (get_wchan): Follow the API change of ++ thread_saved_pc. ++ ++ * include/asm-sh/thread_info.h (cpu): Added the member, not ++ meaningful though (SuperH doesn't support SMP). ++ ++ * include/asm-sh/semaphore.h: Include <linux/wait.h>. ++ ++ * include/asm-sh/processor.h (thread_saved_pc): Make it a macro, ++ so that we don't need the implementation of struct task. ++ Fixed, thread is not a pointer. ++ ++ * arch/sh/config.in: joystick driver is now under drivers/input. ++ ++ * arch/sh/kernel/entry.S (flags, work, syscall_trace): Removed. ++ (k_current): Removed. ++ (work_pending): Use _TIF_NEED_RESCHED. ++ (work_resched): Use GET_THREAD_INFO and _TIF_WORK_MASK. ++ (work_notifysig): Use _TIF_SIGPENDING. ++ (resume_userspace): Use GET_THREAD_INFO and _TIF_WORK_MASK. ++ (system_call): Use GET_THREAD_INFO and _TIF_SYSCALL_TRACE. ++ (system_exit): Use GET_THREAD_INFO and _TIF_ALLWORK_MASK. ++ (system_trace_entry): Use _TIF_SYSCALL_TRACE. ++ ++ * include/asm-sh/thread_info.h (_TIF_WORK_MASK, _TIF_ALLWORK_MASK): ++ Change the value to 8-bit. ++ ++2002-03-05 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/fpu.c (save_fpu, ieee_fpe_handler, ++ do_fpu_state_restore): Use set_tsk_thread_flag and ++ clear_tsk_thread_flag. ++ ++ * arch/sh/kernel/process.c (print_syscall): Removed. ++ ++ * include/asm-sh/processor.h (thread_saved_pc): Follow the change ++ of API (argument type). ++ (THREAD_SIZE): Removed from here (will be in thread_info.h). ++ (alloc_task_struct, free_task_struct, get_task_struct, init_task, ++ init_stack): Removed. ++ (unlazy_fpu, clear_fpu): Use test_tsk_thread_flag and ++ clear_tsk_thread_flag. ++ ++ * include/asm-sh/uaccess.h (KERN_ADDR_LIMIT, USER_ADDR_LIMIT): New ++ macros. ++ (KERNEL_DS, USER_DS): Use KERN_ADDR_LIMIT, USER_ADDR_LIMIT. ++ (get_fs, set_fs): New functions using thread flag. ++ (__addr_ok, __range_ok): Use get_fs().seg. ++ ++ * include/asm-sh/thread_info.h: New file. ++ ++2002-02-28 Paul Mundt <lethal@chaoticdreams.org> ++ ++ * arch/sh/kernel/traps.c (dump_stack): Removed. ++ (show_task): Added. ++ (show_trace_task): Hand off actual stack pointer to show_task() ++ to do a real backtrace. ++ ++2002-02-28 M. R. Brown <mrbrown@0xd6.org> ++ ++ * Makefile: Added -sh to EXTRAVERSION. ++ ++2002-02-27 Paul Mundt <lethal@chaoticdreams.org> ++ ++ * arch/sh/mm/cache-sh4.c (__flush_icache_page): Added back in. ++ (flush_cache_range): Rewritten entirely. ++ (flush_cache_mm): Only flush caches on a valid mm context. ++ ++2002-02-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.5.4. ++ * Makefile: Version 2.5.4 ++ * AGAINST-2.5.4: New file. ++ * AGAINST-2.5.3: Removed. ++ ++ * arch/sh/kernel/signal.c (setup_frame): Use current_thread_info. ++ (setup_rt_frame): Likewise. ++ * include/asm-sh/uaccess.h (get_fs,set_fs,__addr_ok,__range_ok): ++ Likewise. ++ ++ * arch/sh/kernel/setup.c (setup_arch): Use set_thread_flag. ++ * arch/sh/kernel/fpu.c ++ (save_fpu,ieee_fpe_handler,do_fpu_state_restore): Likewise. ++ ++ * arch/sh/kernel/ptrace.c (sys_ptrace): Use set_tsk_thread_flag and ++ clear_tsk_thread_flag. ++ (do_syscall_trace): Follow the change of i386. ++ ++ * arch/sh/kernel/pci-dma.c (pci_alloc_consistent): Use virt_to_phys ++ instead of virt_to_bus. ++ ++ * arch/sh/kernel/init_task.c (init_thread_union): New variable. ++ ++ * arch/sh/kernel/entry.S (syscall_call): Rename from syscall_traced. ++ ++2002-02-27 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * drivers/char/joystick -> drivers/input/joystick. ++ * include/linux/input.h: Updated to version 1.57. ++ ++ * include/asm-sh/siginfo.h (SI_TKILL): Added. ++ * include/asm-sh/scatterlist.h (struct scatterlist): Remove member ++ address. ++ * include/asm-sh/pci.h (pci_map_sg, pci_dma_sync_sg): Follow struct ++ scatterlist interface change. ++ ++ * drivers/net/8139too.c: Merged version 0.9.24. ++ ++ * drivers/char/sh-sci.c (sci_ioctl TIOCGSERIAL): Set return code. ++ ++ * arch/sh/vmlinux.lds.S (.text.lock): Removed. ++ * arch/sh/kernel/signal.c (do_signal): Use sig_exit. ++ * Makefile: Version 2.5.4. Merged. ++ * arch/sh/kernel/entry.S (sys_tkill): Added. ++ * drivers/char/Makefile: Merged (Removed joystick). ++ * drivers/Makefile (subdir-$(CONFIG_SERIO), ++ subdir-$(CONFIG_GAMEPORT)): Merged. ++ ++2002-02-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.5.3. ++ * Makefile: Version 2.5.3 ++ * AGAINST-2.5.3: New file. ++ * AGAINST-2.5.3-pre5: Removed. ++ ++ * include/asm-sh/bitops.h (__ffs): Implemented. ++ ++ * include/asm-sh/mmu_context.h (sched_find_first_bit): Implemented ++ (copied i386 implementation). ++ (sched_find_first_zero_bit): Removed. ++ ++ * arch/sh/kernel/ptrace.c (sys_ptrace): Use ptrace_check_attach. ++ Replace PT_TRACESYS -> PT_SYSCALLTRACE. ++ ++ * arch/sh/kernel/entry.S (sys_call_table): Added entries. ++ Remove COMPAT_OLD_SYSCALL_ABI things. ++ Follow up to new member "task_work" in task_struct. ++ ++ * include/asm-sh/unistd.h (__NR_security, __NR_gettid, ++ __NR_setxattr, __NR_lsetxattr, __NR_fsetxattr, __NR_getxattr, ++ __NR_lgetxattr, __NR_fgetxattr, __NR_listxattr, __NR_llistxattr, ++ __NR_flistxattr, __NR_removexattr, __NR_lremovexattr, ++ __NR_fremovexattr): Added. ++ ++2002-02-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Merge changes in 2.5.3-pre6. ++ * Makefile (Drivers-y): Added drivers/base/base.o. ++ * drivers/Makefile (subdir-y): Added "base". ++ * drivers/char/Config.help (CONFIG_WATCHDOG): Added. ++ * arch/sh/Config.help (CONFIG_PCI_GOBIOS, CONFIG_KCORE_ELF, ++ CONFIG_SH_GENERIC, CONFIG_SH_SOLUTION_ENGINE, ++ CONFIG_SH_7751_SOLUTION_ENGINE, CONFIG_SH_HP620, CONFIG_SH_HP680, ++ CONFIG_SH_HP690, CONFIG_SH_CQREEK, CONFIG_SH_DMIDA, CONFIG_SH_EC3104, ++ CONFIG_SH_DREAMCAST, CONFIG_SH_UNKNOWN): Added. ++ ++2002-02-26 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/io_se.c (delay): More delay needed for ++ SolutionEngine SH7709A. ++ ++2002-01-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * init/main.c: Removed as it's same (2.5.2-pre10). ++ * include/linux/highmen.h: Removed as it's same (2.5.1). ++ ++2002-01-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/Config.help (CONFIG_CPU_SUBTYPE_SH7751, ++ CONFIG_CPU_SUBTYPE_ST40STB1) Added subtypes. ++ (CONFIG_SH_SH2000): Added a machine. ++ (CONFIG_SH_7751_SOLUTION_ENGINE,CONFIG_SH_CQREEK,CONFIG_SH_DMIDA, ++ CONFIG_SH_DREAMCAST,CONFIG_SH_EC3104,CONFIG_SH_GENERIC, ++ CONFIG_SH_HP620,CONFIG_SH_HP680,CONFIG_SH_HP690, ++ CONFIG_SH_OVERDRIVE,CONFIG_SH_SOLUTION_ENGINE,CONFIG_SH_UNKNOWN): ++ Added entries lost in transition to divided Config.help. ++ ++ * drivers/net/Config.help (CONFIG_8139TOO_DREAMCAST): Added. ++ ++2002-01-25 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.5.3-pre5. ++ * Documentation/Configure.help: Removed. ++ * arch/sh/Config.help: New file. ++ * drivers/cdrom/Config.help: New file. ++ * drivers/char/Config.help: New file. ++ * drivers/char/joystick/Config.help: New file. ++ * drivers/mtd/Config.help: New file. ++ * drivers/mtd/maps/Config.help: New file. ++ * drivers/net/Config.help: New file. ++ * drivers/net/8139too.c: Include changes from mainline (2.5.3-pre5). ++ * arch/sh/config.in: Include changes from mainline (2.5.3-pre5). ++ * Makefile: Version 2.5.3-pre5. ++ ++ * AGAINST-2.5.3-pre5: New file. ++ * AGAINST-2.5.3-pre4: Removed. ++ ++2002-01-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * arch/sh/kernel/process.c: Include <linux/a.out.h>. ++ * arch/sh/kernel/signal.c: <linux/tty.h>. ++ * include/asm-sh/mmu_context.h (sched_find_first_zero_bit): Follow ++ the change of i386 version in 2.5.3-pre4. ++ ++2002-01-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.5.3-pre4. ++ * Documentation/Configure.help, Documentation/cachetlb.txt, ++ arch/sh/vmlinux.lds.S, arch/sh/kernel/init_task.c, ++ arch/sh/kernel/process.c, arch/sh/mm/cache-sh4.c, ++ arch/sh/mm/fault.c, arch/sh/vmlinux.lds.S, drivers/net/Config.in, ++ drivers/pcmcia/hd64465_ss.c, drivers/video/hitfb.c, ++ drivers/video/pvr2fb.c, include/asm-sh/ide.h, include/asm-sh/pci.h, ++ include/asm-sh/pgalloc.h, include/asm-sh/pgtable.h, ++ include/linux/highmem.h, init/main.c, mm/memory.c: ++ Include changes from mainline (2.5.3-pre4). ++ ++ * AGAINST-2.5.3-pre4: New file. ++ * AGAINST-2.5.2: Removed. ++ ++2002-01-24 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * kernel/ptrace.c (access_process_vm): Added flush_dcache_page ++ lost in 2.5.2 merge. ++ ++2002-01-19 Paul Mundt <lethal@chaoticdreams.org> ++ ++ * arch/sh/kernel/io_7751se.c: Typo. Rename CHECK_SH_7751_PCIIO to ++ CHECK_SH7751_PCIIO, so 7751se can build with CONFIG_PCI=n. ++ ++ * include/net/inet_ecn.h: Addin #ifdef sanity that was lost in 2.4.14. ++ This allows us to build with CONFIG_INET=n. ++ ++2002-01-20 NIIBE Yutaka <gniibe@m17n.org> ++ ++ * include/asm-sh/pci.h (PCI_DMA_BUS_IS_PHYS): Added. ++ ++2002-01-15 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.5.2. ++ * init/main.c (rest_init): Remove call of init_idle(). ++ * drivers/net/8139too.c: Include <linux/crc32.h>, remove ++ ether_crc and ethernet_polynomial. ++ * arch/sh/config.in: source lib/Config.in. ++ ++ * AGAINST-2.5.2: New file. ++ * AGAINST-2.5.1: Removed. ++ ++2002-01-08 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.5.2-pre10. ++ * Makefile, Documentation/Configure.help, arch/sh/kernel/process.c, ++ arch/sh/kernel/setup.c, drivers/block/rd.c, drivers/char/sh-sci.c, ++ drivers/char/shwdt.c, init/do_mounts.c, init/main.c, kernel/ptrace.c, ++ mm/memory.c: Include changes from mainline (2.5.2-pre10). ++ ++ * drivers/cdrom/gdrom.c (DEVICE_NR): MINOR -> minor. ++ (gdrom_init): MKDEV -> mk_kdev. ++ * arch/sh/mm/fault.c (do_page_fault): Use yield. ++ ++ * include/asm-sh/mmu_context.h (sched_find_first_zero_bit): ++ Implemented. (Just copied from x86 implementation.) ++ ++ * arch/sh/kernel/setup.c (sh_console_device): Returns /dev/null. ++ ++ * arch/sh/kernel/irq.c: Include <linux/mm.h>. ++ * arch/sh/kernel/process.c: Include <linux/mm.h>. ++ (cpu_idle): Don't call init_idle here. Remove setting of ->nice. ++ ++2002-01-05 NIIBE Yutaka <gniibe@m17n.org> ++ ++ Updated to 2.5.1. ++ * Makefile, arch/sh/kernel/irq.c, drivers/block/rd.c, ++ drivers/net/8139too.c, include/linux/highmem.h, init/main.c, ++ mm/memory.c: Include changes from mainline (2.5.1). ++ ++ * init/do_mounts.c: New file from mainline with changes for GD-ROM. ++ ++ * AGAINST-2.5.1: New file. ++ * AGAINST-2.5.0: Removed. ++ ++ * include/asm-sh/scatterlist.h: Followed x86 version. ++ ++Local Variables: ++mode: change-log ++left-margin: 8 ++fill-column: 76 ++version-control: never ++End: +diff -ruN linux-2.6.17-vanilla/ChangeLog-2003 linux-2.6.17/ChangeLog-2003 +--- linux-2.6.17-vanilla/ChangeLog-2003 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/ChangeLog-2003 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,1409 @@ ++2003-12-18 Paul Mundt <lethal@linux-sh.org> ++ ++ * mm/mmap.c, Makefile: Merge 2.6.0. ++ ++2003-11-28 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * include/asm-sh/ptrace.h (struct pt_regs): Remove expevt field. ++ * arch/sh/kernel/ptrace.c (get_stack_long): Count EXPEVT slot and ++ DSP case. ++ (put_stack_long): Likewise. ++ * arch/sh/kernel/process.c (dump_task_regs): Likewise. ++ (copy_thread): Likewise. ++ ++2003-11-28 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * include/asm-sh/kgdb.h (kgdb_flush_icache_range): Define. ++ * arch/sh/kernel/kgdb_stub.c (get_step_address): Use it. ++ (do_single_step, undo_single_step, write_mem_msg): Likewise. ++ * include/asm-sh/processor.h (struct thread_struct): Add ++ ubc_pc field. ++ * arch/sh/kernel/process.c (ubc_usercnt): New variable. ++ (exit_thread): Clear ubc_pc if required. ++ (copy_thread): Initialize ubc_pc. ++ (ubc_set_tracing): New. ++ (__switch_to): Call ubc_set_tracing if needed. ++ (break_point_trap): Clear ubc_pc. ++ * arch/sh/kernel/ptrace.c (compute_next_pc): Remove. ++ (ubc_set_tracing): Likewise. ++ (sys_ptrace) [PTRACE_SINGLESTEP]: Only set ubc_pc here. ++ ++2003-11-26 Paul Mundt <lethal@linux-sh.org> ++ ++ * Makefile: Merge 2.6.0-test11. ++ ++2003-11-25 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * include/asm-sh/ptrace.h (struct pt_regs): Add expevt field. ++ ++2003-11-23 Paul Mundt <lethal@linux-sh.org> ++ ++ * Makefile, drivers/ide/Kconfig, drivers/ide/pci/alim15x3.c, ++ drivers/net/8139too.c, include/linux/pci_ids.h, mm/memory.c: ++ Merge 2.6.0-test10. ++ ++2003-11-18 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/entry.S (tlb_miss_load, tlb_miss_store, ++ initial_page_write, tlb_protection_violation_load, ++ tlb_protection_violation_store, address_error_load, ++ address_error_store, system_call): Make these global, so we can ++ reference them externally for the exception handling table. ++ (none): Renamed to exception_none. ++ (error): Renamed to exception_error. ++ (exception_handling_table): Removed. Now defined per-processor ++ family. ++ ++ * arch/sh/kernel/cpu/sh3/Makefile: Add ex.o rule. ++ * arch/sh/kernel/cpu/sh3/ex.S: SH-3 exception handling table. ++ ++ * arch/sh/kernel/cpu/sh4/Makefile: Add ex.o rule. ++ * arch/sh/kernel/cpu/sh4/ex.S: SH-4 exception handling table. ++ ++2003-11-17 PAul van Gool <pvangool@mimotech.com> ++ ++ * arch/sh/configs/defconfig-se7751: Changed default config for ++ SolutionEngine 7751(R) boards so default Linux 2.6.0-test9 builds ++ run on those boards. ++ ++2003-11-14 Richard Curnow <richard.curnow@superh.com> ++ ++ * arch/sh/kernel/traps.c (trap_init): If there's no FPU (or it's ++ disabled) on the SH-4, treat the FPUDIS and SLOTFPUDIS exceptions ++ as reserved. ++ ++2003-11-11 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * include/asm-sh/cpu-sh2/sigcontext.h: New file. ++ * include/asm-sh/cpu-sh3/sigcontext.h: Likewise. ++ * include/asm-sh/cpu-sh4/sigcontext.h: Likewise. ++ * include/asm-sh/sigcontext.h: Remove the definition of ++ sigcontext struct and include cpu specific sigcontext.h. ++ ++2003-11-10 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/cpu/sh4/sq.c (__sq_remap, sq_unmap): Build fixes ++ for MMUless. ++ ++2003-10-31 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/mm/init.c (paging_init): Clear the size of normal zone ++ if all pages are in dma zone. ++ ++2003-10-29 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/entry.S (CLI): Added. Consolidate CLI. ++ (resume_kernel, preempt_stop): Added. CONFIG_PREEMPT works again. ++ (ret_from_exception): Move above ret_from_irq and call preempt_stop(). ++ ++ * TODO: Preemption works now, take it off the TODO list.. ++ ++2003-10-29 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * include/asm-sh/ptrace.h (REG_FPREG0, REG_FPREG15, REG_XFREG0, ++ REG_FPSCR, REG_FPUL): Change so to match user.h struct. ++ ++2003-10-25 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/char/keyboard.c, drivers/char/Makefile, Makefile, ++ drivers/char/tty_io.c, mm/memory.c, mm/mmap.c: Merge 2.6.0-test9. ++ ++ * arch/sh/mm/Makefile: Don't build regular copy/clear_page.S when ++ we don't have an MMU. ++ * arch/sh/mm/pg-nommu.c: New file. clear_page()/copy_page() without ++ an MMU. ++ ++ * include/asm-sh/page.h: Wrap clear_user_page()/copy_user_page() ++ to clear_page()/copy_page() when building for !CONFIG_MMU. ++ ++2003-10-18 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Add CONFIG_MAPLE back in. ++ ++ * drivers/maple/Makefile: Fix for 2.6. ++ * drivers/maple/maple.c (maple_freeq): Removed. This is only called ++ once, and kfree() does all of this for us already.. ++ (kmapled_thread): Drop the BKL, fixup damonize() / tsk->comm for 2.6, ++ and finally, allow for SIGKILL from userspace. ++ ++2003-10-18 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/kernel/entry.S (sys_call_table): Reserve an entry. ++ * include/asm-sh/unistd.h (__NR_vserver): Define. ++ (NR_syscalls): Update. ++ * arch/sh/kernel/irq.c (disable_irq): Call synchronize_irq only ++ if the action is not NULL. ++ (enable_irq): Drop IRQ_INPROGRESS bit from status if depth is 1. ++ * arch/sh/kernel/traps.c (show_stack): Use kstack_end. ++ ++2003-10-17 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/char/tty_io.c, drivers/net/8139too.c, Makefile: ++ Merge 2.6.0-test8. ++ ++ * net/sunrpc/clnt.c: Deleted, merged into mainline.. ++ ++2003-10-14 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/entry.S, arch/sh/kernel/sh_ksyms.c, ++ arch/sh/kernel/cpu/sh4/sq.c: MMUless cleanups. ++ ++ * include/asm-sh/flat.h: New file (needed for binfmt_flat). ++ ++2003-10-13 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/boards/dreamcast/setup.c, arch/sh/kernel/irq.c, ++ arch/sh/kernel/process.c, arch/sh/kernel/setup.c, ++ arch/sh/kernel/signal.c, arch/sh/kernel/sys_sh.c, ++ drivers/char/sh-sci.c, include/asm-sh/ipc.h, include/asm-sh/irq.h, ++ include/asm-sh/uaccess.h, include/asm-sh/unistd.h: Random cleanup ++ of bugs encountered by sparse (mostly __user annotations). ++ ++2003-10-12 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/entry.S (exception_handling_table): Label exception ++ codes, thoroughly. Add TMU3 and TMU4 vectors for 7751, and also add ++ 7760 vectors. ++ ++ * drivers/char/sh-sci.[ch]: Add 7760 support. ++ ++ * arch/sh/Kconfig, arch/sh/Makefile, arch/sh/tools/mach-types: Add ++ CONFIG_SH_7751_SYSTEMH rules. ++ ++ * arch/sh/boards/systemh/Makefile, arch/sh/boards/systemh/io.c, ++ arch/sh/boards/systemh/irq.c, arch/sh/boards/systemh/setup.c, ++ include/asm-sh/systemh/7751systemh.h, include/asm-sh/systemh/io.h: ++ Add SystemH 7751R support (ported from MPC Data's 2.4.18 tree). ++ ++ * arch/sh/configs/defconfig-systemh: Provide a rough defconfig. ++ ++2003-10-10 Paul van Gool <pvangool@mimotech.com> ++ ++ * arch/sh/boards/se/7751/pci.c: Replaced compile-time check ++ 'PCIBIOS_MIN_MEM != SH7751_PCI_MEMORY_BASE' with a runtime ++ check (BUG_ON()). ++ ++2003-10-09 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/drivers/dma/dma-pvr2.c (pvr2_get_dma_residue): Added. ++ (pvr2_dma_interrupt): Set xfer_complete when the completion ++ interrupt fires. ++ ++ * drivers/video/pvr2fb.c (pvr2fb_open, pvr2fb_release): Removed. ++ (pvr2fb_dc_init): Do request_dma() for pvr2 channel here instead. ++ (pvr2fb_dc_exit): Likewise for free_dma(). ++ ++ * arch/sh/kernel/time.c (sched_clock): Cloned from v850. ++ ++ * net/sunrpc/clnt.c (call_verify): Compile fix. Make all users of ++ task->tk_pid use dprintk(). ++ ++ * Makefile, Documentation/cachetlb.txt, arch/sh/kernel/init_task.c, ++ arch/sh/kernel/irq.c, arch/sh/kernel/process.c, arch/sh/kernel/time.c, ++ arch/sh/kernel/traps.c, arch/sh/mm/init.c, arch/sh/mm/ioremap.c, ++ drivers/char/generic_serial.c, drivers/char/tty_io.c, ++ drivers/ide/Kconfig, drivers/serial/Kconfig, drivers/video/Kconfig, ++ fs/nfs/inode.c, include/asm-sh/cacheflush.h, include/asm-sh/mmzone.h, ++ include/asm-sh/pgtable.h, include/asm-sh/bigsur/serial.h, ++ include/asm-sh/ec3104/serial.h, include/linux/mm.h, mm/memory.c, ++ mm/mmap.c: Merge 2.6.0-test7. ++ ++ * Makefile, arch/sh/Kconfig, arch/sh/kernel/setup.c, ++ drivers/char/Makefile, drivers/char/keyboard.c, drivers/char/sysrq.c, ++ drivers/char/tty_io.c, drivers/ide/Kconfig, drivers/serial/Kconfig, ++ drivers/serial/Makefile, drivers/video/Kconfig, include/asm-sh/mman.h, ++ include/asm-sh/posix_types.h, include/asm-sh/processor.h, ++ include/asm-sh/signal.h include/linux/input.h, ++ include/linux/miscdevice.h, include/linux/mm.h, mm/memory.c, ++ mm/mmap.c: Merge 2.6.0-test6. ++ ++2003-10-08 Paul van Gool <pvangool@mimotech.com> ++ ++ * arch/sh/boards/se/7751/pci.c: Since PCIBIOS_MIN_MEM is no ++ longer a hardcoded define, we can no longer use it with the ++ preprocessor. ++ ++ * arch/sh/drivers/pci/pci-sh7751.c: Include linux/delay.h to get ++ definition of mdelay. ++ ++2003-10-08 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/video/pvr2fb.c (pvr2fb_open, pvr2fb_release, pvr2fb_write): ++ Added zero-copy DMA when CONFIG_SH_DMA is set. ++ (pvr2fb_common_init): Map through the store queues when we have ++ CONFIG_SH_STORE_QUEUES set. ++ ++2003-10-01 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/kernel/signal.c (OR_R0_R0): Define. ++ (struct sigframe): Extend retcode to hold 8 instructions. ++ (struct rt_sigframe): Likewise. ++ (setup_frame): Put 5 "or r0,r0" instructions to avoid an SH-4 ++ core bug. Flush more cache line if needed. ++ (setup_rt_frame): Likewise. ++ ++2003-09-30 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/drivers/dma/Kconfig: Add a couple of options, clean up ++ channel number selection for both on-chip and off-chip channels. ++ ++ * arch/sh/drivers/dma/dma-sh.c: Relatively large batch of changes. ++ Dropped SAR/DAR/CHCR/DMATCR[] usage and went to a direct mapping of ++ the registers directly. We now support all 8 channels of the 7751R. ++ ++ * arch/sh/drivers/dma/dma-sh.h: Define MAX_DMAC_CHANNELS (wrap to ++ CONFIG_NR_ONCHIP_DMA_CHANNELS). ++ ++ * arch/sh/entry.S (interrupt_table): Add hooks for DMTE4-7 on the ++ 7751R. ++ ++ * include/asm-sh/dma.h: Cleanup MAX_DMA_CHANNELS definition based ++ off of config options. ++ ++ * include/asm-sh/irq.h: Add DMTE4-7 definitions. ++ ++ * include/asm-sh/cpu-sh3/dma.h: Kill off old definitions. Define ++ SH_DMAC_BASE. ++ * include/asm-sh/cpu-sh4/dma.h: Same here. ++ ++2003-09-23 Sean McGoogan <Sean.McGoogan@superh.com> ++ ++ * arch/sh/kernel/entry.S: preserve EXPEVT across nested interrupts. ++ ++ * arch/sh/kernel/cpu/sh4/fpu.c: Ensure that FPSCR.PR == FPSCR.SZ == 1 ++ never occurs. ++ ++2003-09-22 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/drivers/pci/pci-sh7751.c: Fixup pci-sh7751.h path. ++ ++ * arch/sh/boards/snapgear/io.c: Same here. ++ ++ * arch/sh/mm/cache-sh4.c (detect_cpu_and_cache_system): Add run-time ++ probing for the SH7760 and the SH4-202. Force EMODE on subtypes that ++ have it available. ++ ++ * include/asm-sh/processor.h: Add CPU_SH7760 and CPU_SH4_202 ++ definitions. ++ ++2003-09-22 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/kernel/signal.c (MOVW, TRAP16): Define. ++ (struct sigframe): Change retcode so to hold 3 words. ++ (struct rt_sigframe): Likewise. Remove pinfo and puc members. ++ (setup_frame): Use mov.w 1f,r3; trap #0x10; 1: .word N sequence ++ in trampoline. ++ (setup_rt_frame): Likewise. Don't set pinfo and puc of frame. ++ ++2003-09-21 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Add a sane default for SH7751 PCLK value. ++ ++ * arch/sh/boards/bigsur/Makefile: Remove pci.o ++ * arch/sh/boards/bigsur/pci.c: Ported for new SH7751 PCI changes, and ++ moved .. ++ * arch/sh/drivers/pci/ops-bigsur.c: here. ++ ++ * arch/sh/boards/snapgear/Makefile, arch/sh/boards/snapgear/pci.c, ++ arch/sh/drivers/pci/ops-snapgear.c: Same changes as for BigSur. ++ ++ * arch/sh/drivers/pci/Makefile: Add bigsur/snapgear ops. ++ ++ * arch/sh/mm/init.c: Include linux/pagemap.h, shut up compiler. ++ ++ * include/asm-sh/pci-sh7751.h: Added changes for new interface, and ++ moved .. ++ * arch/sh/drivers/pci/pci-sh7751.h: here. ++ ++ * arch/sh/drivers/pci/pci-sh7751.c: Fixup pci_probe definition, we ++ don't deal with anything other then conf1 access, so drop the unused ++ flags. ++ (__area_sdram_check): Added. Responsible for BCR1/BCR2 validation ++ for a given area. ++ (sh7751_pcic_init): Added. Do general purpose initialization here. ++ window0/window1 values are passed in in the form of an address map ++ structure. Any boards doing this type of general initialization ++ should be using this code instead (so far BigSur and SnapGear boards, ++ though this will also include the SystemH 7751R). ++ (pcibios_setup): Get rid of conf1 and rom args, as they aren't used. ++ ++ * include/asm-sh/pci.h: Get rid of hardcoded PCIBIOS_MIN_{IO,MEM} ++ definitions. Wrap these to their respective resources in ++ board_pci_channels instead. ++ ++ * drivers/serial/sh-sci.c: Updates for new SH-SCI driver. ++ ++2003-09-18 David McCullough <davidm@snapgear.com> ++ ++ * arch/sh/boards/snapgear/pci/pci.c: fixup the memory and IO regions ++ to get PCI working. ++ ++2003-09-17 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/drivers/pci/pci-sh7751.c (sh7751_pci_write): Fixup error ++ path where interrupts weren't getting reenabled. ++ ++2003-09-16 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/drivers/dma/Makefile: Add dma-isa.o and dma-g2.o. ++ * arch/sh/drivers/dma/dma-isa.c: New file (provides wrapper for old ++ ISA DMA API to new DMA API). ++ ++ * arch/sh/drivers/dma/dma-g2.c: New file (adds preliminary support ++ for G2 DMA -- currently being tested for SPU DMA, though there ++ are still some issues with the interrupt not firing correctly). ++ ++ * include/asm-sh/dma.h (claim_dma_lock, release_dma_lock): Moved to ++ dma-isa.c. ++ ++2003-09-08 Paul Mundt <lethal@linux-sh.org> ++ ++ * Makefile, arch/sh/Kconfig, arch/sh/boards/dmida/mach.c, ++ arch/sh/boards/dreamcast/irq.c, arch/sh/boards/ec3104/irq.c, ++ arch/sh/boards/harp/mach.c, arch/sh/boards/hp6xx/hp620/mach.c, ++ arch/sh/boards/hp6xx/hp680/mach.c, arch/sh/boards/hp6xx/hp690/mach.c, ++ arch/sh/boards/overdrive/mach.c, arch/sh/boards/saturn/irq.c, ++ arch/sh/boards/unknown/mach.c, arch/sh/kernel/cpufreq.c, ++ drivers/Makefile, drivers/char/generic_serial.c, ++ drivers/char/tty_io.c, drivers/ide/Kconfig, drivers/video/Kconfig, ++ drivers/ide/pci/alim15x3.c, drivers/net/8139too.c, ++ drivers/pci/pci.ids, drivers/serial/Kconfig, drivers/serial/Makefile, ++ drivers/video/Makefile, drivers/video/fbmem.c, fs/nfs/inode.c, ++ include/asm-sh/semaphore.h, include/linux/miscdevice.h, ++ include/linux/mm.h, include/linux/pci_ids.h, mm/memory.c, ++ mm/mmap.c: Merge 2.6.0-test5. ++ ++2003-09-06 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Reorder CPU family / subtype selection. ++ ++2003-09-06 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/lib/div64-generic.c (__div64_32): Bug fix. ++ ++2003-09-03 TAKANO Nobuyuki <n_takano@sas-tokyo.co.jp> ++ Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * drivers/char/sh-sci.c (sci_init_pins_scif): Mask correct ++ bits of SCPCR. ++ (sci_set_real_termios): Don't change TTY_HW_COOK_IN and ++ TTY_HW_COOK_OUT flags. ++ * drivers/char/sh-sci.h (O_OTHER, I_OTHER): Remove. ++ ++2003-09-02 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/kernel/signal.c (setup_frame): Set additional arguments ++ for the signal handler correctly. ++ (setup_rt_frame): Likewise. ++ ++2003-09-01 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Add CONFIG_SH_DSP. ++ ++ * arch/sh/kernel/entry.S: Save and restore DSP registers when ++ CONFIG_SH_DSP is set. ++ * arch/sh/kernel/head.S: Do initial callin to sh_cpu_init instead ++ of sh_cache_init. ++ ++ * arch/sh/kernel/ptrace.c: Add PTRACE_SETDSPREGS/PTRACE_GETDSPREGS ++ cases to copyin/out dsp regs. ++ ++ * arch/sh/kernel/setup.c (setup_arch): Remove UBC and FPU setup, ++ this is done at sh_cpu_init() time instead. ++ ++ * arch/sh/kernel/traps.c (is_dsp_init): Added. ++ (do_reserved_inst, do_illegal_slot_inst): Check for DSP instruction ++ when CONFIG_SH_DSP is set. ++ ++ * arch/sh/kernel/cpu/Makefile: Add init.o. ++ * arch/sh/kernel/cpu/init.c: New file. Do initial CPU init here. ++ Add DSP init code. ++ ++ * arch/sh/mm/init.c (sh_cache_init): Moved to arch/sh/kernel/cpu/init.c ++ ++ * include/asm-sh/processor.h: Add CPU_HAS_DSP flag. ++ * include/asm-sh/ptrace.h: Add DSP regs. ++ ++ * arch/sh/kernel/irq.c (probe_irq_on): Convert the last remaining ++ synchronize_irq() to barrier(). ++ ++ * arch/sh/kernel/smp.c: Convert cpu_online_map and cpu_possible_map ++ to cpumask_t. ++ (__cpu_up): Use copy_process() instead of do_fork() to manually fork ++ idle task on cpu. ++ (start_secondary): Setup VBR properly for secondary cpu, and also ++ increment cpus_booted. ++ (stop_this_cpu): cpu_relax() in busy loop. ++ ++ * include/asm-sh/spinlock.h: Add a RW_LOCK_BIAS definition, update ++ RW_LOCK_UNLOCKED to initialize the counter with the bias. ++ (rwlock_is_locked): Use atomic_read() to look at counter value. ++ (_raw_write_trylock): New function. Mostly cloned from x86_64. ++ ++ * include/asm-sh/smp.h (cpu_online, cpu_possible): Use cpu_isset() ++ to work with new cpumask_t types for the maps. ++ (num_online_cpus): Removed. ++ ++2003-08-31 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/kernel/entry.S (sys_call_table): Add fadvise64_64 syscall. ++ * arch/sh/kernel/sys_sh.c (sys_fadvise64_64_wrapper): New. ++ * include/asm-sh/unistd.h: Add fadvise64_64 syscall. ++ ++2003-08-27 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/net/Kconfig: Kill off CONFIG_8139TOO_DREAMCAST. ++ * drivers/net/8139too.c: Likewise. Get rid of SEGABBA references, ++ use RTL8139 instead. Also use USE_BUF16K for rx ring buffer size ++ selection. ++ ++2003-08-25 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/drivers/dma/Makefile, arch/sh/drivers/dma/dma-api.c, ++ arch/sh/drivers/dma/Kconfig, arch/sh/drivers/dma/dma-pvr2.c, ++ arch/sh/drivers/dma/dma-sh.[ch]: Added new DMA subsystem with ++ drivers for the SH DMAC and the DC PVR2. ++ ++ * arch/sh/kernel/cpu/Makefile: Remove dma.c. ++ * arch/sh/kernel/cpu/dma.c: Deleted. ++ ++ * arch/sh/mm/Makefile: Add rule for pg-dma.c. ++ * arch/sh/mm/pg-dma.c: Added. This implemented optimized versions ++ of copy_page() and clear_page() using the SH DMAC (selectable with ++ CONFIG_DMA_PAGE_OPS). ++ * arch/sh/mm/clear_page.S (clear_page): Renamed to clear_page_slow. ++ * arch/sh/mm/copy_page.S (copy_page): Renamed to copy_page_slow. ++ * arch/sh/mm/init.c: Add copy_page/clear_page function pointers, ++ assign these to the _slow routines at startup, override them later ++ when something better (ie, DMA) comes along. ++ ++ * include/asm-sh/dma.h: Rewritten entirely. ++ * include/asm-sh/page.h: Fixup copy/clear_page definitions. ++ * include/asm-sh/processor.h (cpu_relax): Get rid of the barrier() ++ wrapper, use sleep instead, this tends to be more friendly when ++ it comes to power consumption, and gives us something meaningful ++ to do in a busy loop. ++ ++2003-08-23 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/pci/pci.c (pcibios_enable_device): Use pci_name() instead ++ of dev->dev.name/slot_name. ++ (pcibios_set_master): Likewise. ++ ++ * arch/sh/vmlinux.lds.S: Moved .. ++ * arch/sh/kernel/vmlinux.lds.S: here. ++ ++ * arch/sh/boot/compressed/Makefile: Fixup vmlinux.lds.s path. ++ ++ * Makefile, arch/sh/kernel/Makefile, drivers/Makefile, ++ drivers/char/keyboard.c, drivers/ide/Kconfig, ++ drivers/ide/pci/alim15x3.c, drivers/mtd/maps/Kconfig, ++ drivers/net/8139too.c, drivers/net/Kconfig, ++ drivers/pcmcia/hd64465_ss.c, fs/nfs/inode.c, ++ include/linux/mm.h, include/linux/pci_ids.h, ++ kernel/timer.c, mm/memory.c: Merge 2.6.0-test4. ++ ++2003-08-22 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/Kconfig: Rename BOOT_LINK_ADDR to BOOT_LINK_OFFSET. ++ * arch/sh/boot/compressed/Makefile: Likewise. ++ ++2003-08-14 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/Kconfig: Add BOOT_LINK_ADDR. Add '0x' prefix to hex ++ parameters. ++ * arch/sh/Makefile: Remove bzImage target. ++ * arch/sh/boot/Makefile: Likewise. ++ * arch/sh/boot/compressed/Makefile: Likewise. Compute IMAGE_OFFSET ++ with BOOT_LINK_ADDR option. ++ * arch/sh/configs/defconfig-adx: Add '0x' prefix to hex parameters. ++ * arch/sh/configs/defconfig-cqreek: Likewise. ++ * arch/sh/configs/defconfig-dreamcast: Likewise. ++ * arch/sh/configs/defconfig-se7751: Likewise. ++ ++2003-08-11 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/Makefile: Add bzImage support. ++ * arch/sh/boot/Makefile: Likewise. ++ * arch/sh/boot/compressed/Makefile: Likewise. ++ * arch/sh/boot/compressed/head.S: Likewise. Revived. ++ ++2003-08-09 Paul Mundt <lethal@linux-sh.org> ++ ++ * Makefile, arch/sh/defconfig, arch/sh/boards/dreamcast/pci.c, ++ arch/sh/boards/mpc1211/pci.c, arch/sh/boards/overdrive/galileo.c, ++ arch/sh/configs/defconfig-adx, arch/sh/configs/defconfig-cqreek, ++ arch/sh/mm/cache-sh2.c, arch/sh/mm/cache-sh3.c, ++ drivers/char/tty_io.c, drivers/char/watchdog/shwdt.c, ++ drivers/ide/Kconfig, drivers/ide/pci/alim15x3.c, ++ drivers/net/8139too.c, drivers/net/Kconfig, drivers/pci/pci.ids, ++ drivers/serial/Kconfig, include/asm-sh/processor.h, ++ include/linux/pci_ids.h, mm/memory.c: Merge 2.6.0-test3. ++ ++2003-08-05 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Add CONFIG_PCI_AUTO_UPDATE_RESOURCES to ++ have the PCI auto code update BARs automatically. This is ++ the default for just about everyone, read the help text for ++ more information. ++ ++ * arch/sh/kernel/pci.c (pcibios_init): Remove pcibios_fixup(). ++ (pcibios_update_resource): Use pci_name() to access dev->slot_name. ++ (pcibios_enable_device): Same here. ++ ++ * arch/sh/kernel/pci_auto.c (pciauto_setup_bars): Manually preserve ++ the existing BAR value when trying to figure out the BAR size. Only ++ change the BAR value when CONFIG_PCI_AUTO_UPDATE_RESOURCES is set. ++ ++ * arch/sh/boards/dreamcast/pci.c: Rewritten. ++ ++ * include/linux/pci_ids.h: Add PCI_DEVICE_ID_SEGA_BBA as well as ++ PCI_VENDOR_ID_SEGA. ++ ++2003-08-04 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Makefile: Add arch/sh/pci/. ++ ++ * arch/sh/kernel/cpu/sh4/pci-sh7751.c: Moved to arch/sh/pci/. ++ * arch/sh/kernel/cpu/sh4/pci-st40.[ch]: Same here. ++ ++2003-08-02 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/cchips/hd6446x/hd6446{1,5}/io.c (hd6446{1,5}_insb, ++ hd6446{1,5}_insw, hd6446{1,5}_insl, hd6446{1,5}_outsb, ++ hd6446{1,5}_outsw, hd6446{1,5}_outsl): Deleted. Use the generic ++ functions. ++ ++ * arch/sh/cchips/hd6446x/hd6446{1,5}/setup.c: Cleanup irq ++ return values for new API. ++ ++ * include/asm-sh/hd6446{1,5}/io.h: Remove unused I/O functions. ++ ++ * arch/sh/boards/snapgear/io.c (snapgear_insb, snapgear_insw, ++ snapgear_outsb, snapgear_outsw): Deleted. We can use the ++ generic functions here as well. ++ ++ * include/asm-sh/snapgear/io.h: Remove unused I/O functions. ++ ++ * arch/sh/boards/se/77{0x,51}/io.c (se_readb, se_readw, se_readl, ++ se_writeb, se_writew, se_writel): Deleted. We can use the ++ generic interface for this instead. ++ ++ * arch/sh/boards/se/77{0x,51}/mach.c: Remove the aforementioned ++ I/O functions + c99 initializers. ++ ++ * include/asm-sh/se{,7751}/io.h: Remove unused I/O functions. ++ ++ * arch/sh/kernel/cpu/sh4/pci-sh7751.c ++ (sh7751_pci_read, sh7751_pci_write): Do general cleanup, ++ simplify read and write operations in general. Fixes a ++ bug with getting bogus data back on my 7751R board. ++ ++2003-08-01 Paul van Gool <pvangool@mimotech.com> ++ ++ * arch/sh/boards/se/7751/pci.c: Should allow for more than ++ 1 PCI device. Changed last devfn from 1 to 0xff. ++ ++2003-07-31 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Makefile, arch/sh/boards/snapgear/Makefile, ++ arch/sh/boards/snapgear/io.c, arch/sh/boards/snapgear/pci.c ++ arch/sh/boards/snapgear/rtc.c, arch/sh/boards/snapgear/setup.c, ++ arch/sh/tools/mach-types, drivers/net/8139too.c, ++ include/asm-sh/irq.h, include/asm-sh/mc146818rtc.h, ++ include/asm-sh/pci.h, include/asm-sh/rtc.h, ++ include/asm-sh/snapgear/io.h: Add SecureEdge5410 support. ++ ++ * arch/sh/kernel/cpu/sh4/pci-sh7751.c: Ported to new PCI Auto ++ API. ++ ++2003-07-31 Paul van Gool <pvangool@mimotech.com> ++ ++ * arch/sh/boards/se/7751/pci.c: Added empty pcibios_fixup ++ function. Added pci_channel definition for SE7751(R) board. ++ ++2003-07-29 Paul Mundt <lethal@linux-sh.org> ++ ++ * include/asm-sh/bigsur/io.h, include/asm-sh/mpc1211/io.h, ++ include/asm-sh/hd64465/io.h, include/asm-sh/overdrive/io.h, ++ include/asm-sh/hd64461/io.h, include/asm-sh/adx/io.h, ++ include/asm-sh/ec3104/io.h, include/asm-sh/cat68701/io.h, ++ include/asm-sh/dreamcast/io.h, include/asm-sh/se/io.h, ++ include/asm-sh/saturn/io.h, include/asm-sh/sh2000/io.h, ++ include/asm-sh/se7751/io.h: Kill off I/O definitions and ++ general __WANT_IO_DEF mess, we grab these implicitly through ++ the machvec now. ++ ++ * include/asm-sh/io.h: Bit of a policy change, we now force ++ _everything_ through the machine vector. Each board already ++ provides its own definitions for what it wants, there's no ++ reason to have to repeat this in every board's io.h. ++ ++ (__set_io_port_base): Added. We use this for setting a ++ common port base that can then be used by the generic ++ isa_port2addr implementation. ++ ++ * arch/sh/kernel/setup.c (sh_mv_setup): Wrap the mv_io_base ++ assignment to use __set_io_port_base(). ++ ++ * arch/sh/boards/dreamcast/Makefile: Remove io.c ++ * arch/sh/boards/dreamcast/setup.c: Get rid of dreamcast ++ specific isa_port2addr implementation, we use the generic ++ one now. ++ ++ (platform_setup): Init the port base with __set_io_port_base(). ++ ++ * arch/sh/boards/dreamcast/io.c: Deleted. ++ ++ * include/asm-sh/dreamcast/io.h: Deleted. ++ ++2003-07-28 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/char/watchdog/shwdt.c (sh_wdt_open): Get rid of ++ MOD_INC_USE_COUNT. Use __module_get() for module refcounting ++ instead. ++ ++ * arch/sh/kernel/setup.c (setup_arch): Get rid of machvec ++ setup code. ++ (sh_mv_setup): Added. Move setup code here. Also walk the ++ sh_mv and manually load up generic routines for anything ++ that board-specific code hasn't filled in. ++ ++ * arch/sh/boards/dreamcast/Makefile: Remove mach.c ++ * arch/sh/boards/dreamcast/mach.c: Deleted. ++ * arch/sh/boards/dreamcast/setup.c: Move mv definition here, ++ also clean it up for the new changes. ++ ++ * arch/sh/boards/saturn/Makefile: Remove mach.c ++ * arch/sh/boards/saturn/mach.c: Deleted. ++ * arch/sh/boards/saturn/setup.c: Follow the dreamcast change ++ here as well. ++ ++ * arch/sh/boards/mpc1211/Makefile: Remove mach.c ++ * arch/sh/boards/mpc1211/rtc.c (mpc1211_time_init): Added. ++ Wrap rtc definitions to rtc_{get,set}_time, and init them ++ properly. ++ * arch/sh/boards/mpc1211/setup.c: Add rtc timer init code, ++ and follow the other boards for mv changes. ++ * arch/sh/boards/mpc1211/mach.c: Deleted. ++ ++ * arch/sh/boards/cqreek/Makefile, arch/sh/boards/cqreek/mach.c, ++ arch/sh/boards/cqreek/setup.c: Follow mv changes. ++ ++ * arch/sh/boards/sh2000/Makefile, arch/sh/boards/sh2000/mach.c, ++ arch/sh/boards/sh2000/setup.c: Follow mv changes. ++ ++ * arch/sh/boards/hp6xx/hp680/mach.c: Remove generic_ and ++ sh_rtc_xxx references, since this is handled for us now. ++ * arch/sh/boards/hp6xx/hp690/mach.c: Same here. ++ ++ * arch/sh/boards/overdrive/mach.c: And here. ++ ++ ... and the same for the rest of the boards, so we won't bother ++ listing them all here again. Look at linuxsh-cvs for this date ++ if you really care. ++ ++ * include/asm-sh/machvec.h: Remove several unused functions. ++ ++2003-07-28 Paul van Gool <pvangool@mimotech.com> ++ ++ * arch/sh/configs/defconfig-se7751: Added new 2.6.0-test2 ++ config settings: ++ ++ CONFIG_IOSCHED_AS ++ CONFIG_IOSCHED_DEADLINE ++ CONFIG_LBD ++ ++2003-07-27 Paul van Gool <pvangool@mimotech.com> ++ ++ * include/asm-sh/pci-sh7751.h: Re-added in order to add ++ SH7751R_DEVICE_ID definition. ++ ++ * arch/sh/kernel/cpu/sh4/pci-sh7751.c: Initialized mask ++ variable to prevent compiler from complaining. ++ ++ Changed PCIDBG statement to use new variable name instead ++ of old Linux 2.4 one. ++ ++ Changed PCI hardware check to also check for 7751R hardware ++ and not just 7751. ++ ++2003-07-27 Paul Mundt <lethal@linux-sh.org> ++ ++ * Makefile, arch/sh/Makefile, arch/sh/mm/init.c, ++ drivers/ide/Kconfig, drivers/net/8139too.c, drivers/net/Kconfig, ++ drivers/pci/pci.ids, drivers/serial/Kconfig, ++ drivers/serial/Makefile, drivers/video/Makefile, fs/nfs/inode.c, ++ include/linux/pci_ids.h, kernel/time.c: Merge 2.6.0-test2. ++ ++ * arch/sh/kernel/cpu/sh4/pci-sh7751.c: Merge changes from ++ mainline with a few fixes. ++ ++ (pcibios_allocate_resources): Deprecate pci_for_each_dev(), ++ use pci_find_device() instead. ++ (pcibios_assign_resources): Same here. ++ ++ * arch/sh/kernel/setup.c: Use asm/sections.h. ++ * arch/sh/kernel/traps.c: Same here. ++ ++ * arch/sh/configs/defconfig-dreamcast: Update defconfig. ++ ++ * include/asm-sh/local.h: New file. ++ * include/asm-sh/sections.h: New file. ++ ++2003-07-27 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/ptrace.c: Fix single step. ++ ++2003-07-26 Paul van Gool <paul.vangool@rinconnetworks.com> ++ ++ * arch/sh/Makefile: Fix for defconfig-% rules when there's no ++ prior .config. ++ ++ * arch/sh/configs/defconfig-se7751: Add SE7751 defconfig. ++ ++2003-07-25 Paul Mundt <lethal@linux-sh.org> ++ ++ * Documentation/sh/new-machine.txt: Added documentation on how to ++ work with the new tree. ++ ++2003-07-22 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Add KGDB options back in. ++ ++ * arch/sh/configs/defconfig-dreamcast: Update DC defconfig. ++ ++ * arch/sh/Makefile: Add support for building a defconfig out of ++ arch/sh/configs/. Also add a 'make help' text for SH. And finally, ++ also rename cpu- to cflags- to make the KGDB options look a bit ++ saner. ++ ++ Builds for provided defconfigs can now be launched in the format ++ of: 'make defconfig-$(boardname)' followed by vmlinux/zImage/etc. ++ ++2003-07-21 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/cpu/sh4/Makefile: Remove irq_intc2.o for generic ++ 7751 builds, leave this as ST40 specific for now. ++ ++ * arch/sh/Kconfig: Get rid of CONFIG_PCI_BIOS cruft. ++ ++ * arch/sh/kernel/cpu/sh4/pci-sh7751.c: Same here (forward port of ++ changes from David Woodhouse against 2.4 branch). ++ ++ * arch/sh/Makefile: Link in arch/sh/lib/ before any of the other ++ libs-y directories. ++ ++ * arch/sh/lib/Makefile: Add div64-generic.o ++ * arch/sh/lib/div64-generic.c: New file. Provide a compliant ++ __div64_32 interface that wraps to our __xdiv64_32. ++ ++ * include/asm-sh/div64.h (do_div): Removed. Wrap to the generic ++ interface at asm-generic/div64.h instead. ++ ++2003-07-19 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/video/pvr2fb.c: Rewrite. Use the hardware palette, and add ++ support for PCI-based PVR2 boards (such as the neon250 in my case). ++ ++2003-07-19 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/kernel/entry.S (sys_call_table): Add new syscalls. ++ * arch/sh/kernel/irq.c (do_IRQ): Use kstat_this_cpu. ++ * include/asm-sh/hardirq.h (irq_cpustat_t): Remove unused members. ++ * include/asm-sh/unistd.h: Add new syscalls. ++ ++2003-07-17 Paul Mundt <lethal@linux-sh.org> ++ ++ Merge with 2.5.74 ... 2.6.0-test1. ++ ++2003-07-16 Paul Mundt <lethal@linux-sh.org> ++ ++ * include/asm-sh/segment.h: Re-added (some headers unfortunately still ++ seem to require this..). ++ * include/asm-sh/cache.h: Fixup L1_CACHE_BYTES definition (use the shift ++ defined per-cpu family). ++ * include/asm-sh/cpu-sh2/cache.h: Remove L1_CACHE_BYTES definition, and ++ add a L1_CACHE_SHIFT definition instead. ++ * include/asm-sh/cpu-sh3/cache.h: Same here. ++ * include/asm-sh/cpu-sh4/cache.h: and here. ++ ++2003-07-15 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/mm/cache-sh4.c: Add a cpu flag for p2 cache restriction ++ for users who need it (7750, 7750S/7750R?) and test that instead ++ of the subtype. ++ ++ * include/asm-sh/processor.h: Define CPU_HAS_P2_FLUSH_BUG. ++ ++2003-07-14 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/kernel/entry.S (sys_call_table): Add new syscalls. ++ * arch/sh/kernel/irq.c (__report_bad_irq, report_bad_irq): New. ++ (noirqdebug_setup): Likewise. ++ (note_interrupt): Likewise. ++ (do_IRQ): Call note_interrupt if required. ++ * arch/sh/kernel/module.c (module_arch_cleanup): new. ++ * arch/sh/mm/fault.c (do_page_fault): Use in_atomic. Use ++ VM_FAULT_xxx symbolic constants. Use fixup_exception. ++ * arch/sh/mm/ioremap.c: Fix so to follow i386 changes. ++ * drivers/char/sh-sci.c (sci_hungup, sci_close): Add again. ++ (sci_real_drive): Add sci_hungup and sci_close. ++ (sci_rx_interrupt): Return IRQ_HANDLED. ++ (sci_tx_interrupt, sci_br_interrupt, sci_br_interrupt): Likewise. ++ (sci_init_drivers): Change return type of handlers. ++ * drivers/net/stnic.c (do_stnic_intr): Return the result of ++ ei_interrupt. ++ * include/asm-sh/hardirq.h: Remove commented out part. ++ * include/asm-sh/pgalloc.h (pte_alloc_one_kernel): Use ++ __GFP_REPEAT feature. ++ (pte_alloc_one): Likewise. ++ * include/asm-sh/unistd.h: Update for new syscalls. ++ ++2003-07-14 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * include/asm-sh/system.h (switch_to): Set LAST properly. ++ ++2003-07-06 Dominik Brodowski <linux@brodo.de> ++ Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/pcmcia/hd64465_ss.c: Update for new PCMCIA API. ++ ++2003-06-29 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig, drivers/serial/Kconfig, drivers/serial/Makefile, ++ drivers/char/keyboard.c, fs/nfs/inode.c, include/linux/highmem.h, ++ include/linux/input.h, include/linux/pci_ids.h, kernel/timer.c, ++ Makefile: Merge 2.5.73. ++ ++ * arch/sh/Kconfig, arch/sh/kernel/time.c, drivers/char/keyboard.c, ++ drivers/ide/Kconfig, include/linux/input.h, kernel/sysctl.c, ++ kernel/time.c, kernel/timer.c, Makefile: Merge 2.5.72. ++ ++2003-06-15 Paul Mundt <lethal@linux-sh.org> ++ ++ * Makefile, arch/sh/kernel/irq.c, arch/sh/lib/Makefile, ++ drivers/Makefile, drivers/char/Makefile, ++ drivers/char/generic_serial.c, drivers/char/sh-sci.c, ++ drivers/char/tty_io.c, drivers/ide/Kconfig, drivers/mtd/mtdcore.c, ++ drivers/mtd/mtdpart.c, drivers/mtd/chips/cfi_cmdset_0002.c, ++ drivers/mtd/chips/jedec_probe.c, drivers/mtd/maps/Kconfig, ++ drivers/mtd/maps/Makefile, drivers/mtd/maps/solutionengine.c, ++ drivers/net/8139too.c, drivers/net/Kconfig, drivers/pci/pci.ids, ++ drivers/serial/Kconfig, drivers/serial/Makefile, ++ drivers/video/Kconfig, drivers/video/Makefile, include/asm-sh/bug.h, ++ include/asm-sh/pci.h, include/linux/highmem.h, ++ include/linux/pci_ids.h, include/linux/mtd/partitions.h, ++ kernel/sys.c, kernel/sysctl.c, kernel/time.c, kernel/timer.c, ++ mm/memory.c: Merge 2.5.71. ++ ++2003-06-13 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/cpu/dma.c: Fix up exports so modules can use dma ++ functions without resulting in undefined symbols. ++ ++2003-06-01 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/irq.c (handle_IRQ_event): Check handler return value, ++ also report if no one cared about the interrupt. ++ ++2003-05-27 Paul Mundt <lethal@linux-sh.org> ++ ++ * Makefile, arch/sh/mm/init.c, drivers/Makefile, ++ drivers/char/keyboard.c, drivers/char/sh-sci.c, ++ drivers/char/sysrq.c, drivers/char/tty_io.c, ++ drivers/net/8139too.c, drivers/net/Kconfig, ++ drivers/pci/pci.ids, drivers/video/fbmem.c ++ fs/locks.c, fs/nfs/inode.c, include/linux/elf.h, ++ include/linux/input.h, include/linux/mm.h, ++ include/linux/pci_ids.h, kernel/sys.c, kernel/sysctl.c, ++ kernel/timer.c, mm/memory.c: Merge 2.5.70. ++ ++ * include/asm-sh/elf.h: Move ELF relocation definitions here. ++ ++ * arch/sh/kernel/process.c (kernel_thread): Use the new do_fork() API. ++ (sys_clone, sys_fork, sys_vfork) : Same here. ++ ++ * arch/sh/kernel/cpu/dma.c (dma_err, dma_tei): Use new irq API. ++ ++2003-05-24 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Add note for CONFIG_SH_WDT about HZ scaling. ++ ++ * drivers/char/watchdog/shwdt.c: General updates.. add note about ++ HZ scaling here as well. ++ ++ * drivers/serial/Kconfig: Add SCI definitions. ++ * drivers/serial/Makefile: Same here. ++ ++ * drivers/serial/sh-sci.c, drivers/serial/sh-sci.h: Add rewrite ++ of SH-SCI driver for new serial API. ++ ++ * include/asm-sh/param.h: Set HZ to 1000 when the WDT is enabled. ++ ++ * include/asm-sh/watchdog.h: Move cpu-specific functions and ++ definitions out of the way. ++ * include/asm-sh/cpu-sh[234]/watchdog.h: .. and put them here. ++ ++ * arch/sh/kernel/pci.c (pcibios_align_resource): Define this as a ++ weak symbol, so we can override it. ++ ++ * arch/sh/boards/mpc1211/pci.c (pcibios_align_resource): Added. ++ ++2003-05-19 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/setup.c (topology_init): Added. ++ (c_start, c_next): Add support for NR_CPUS > 1. ++ ++ * arch/sh/kernel/cpu/sh4/pci-st40.c: Cleanup irq handler return type. ++ ++ * arch/sh/cchips/hd6446x/hd64465/gpio.c: Various cleanups.. modules, ++ resource allocation, etc. Also fixup irq handler return type. ++ ++ * drivers/video/pvr2fb.c: Further cleanups. ++ ++ * include/asm-sh/machvec.h: Get rid of machvec machtype tracking, ++ do this dynamically through the new mach-type generation interface. ++ ++ * arch/sh/boards: Get rid of all mv_hw_* references. ++ ++ * arch/sh/Makefile: Add rule to build arch/sh/tools. ++ ++ * arch/sh/tools/Makefile, arch/sh/tools/machgen.sh, ++ arch/sh/tools/mach-types: Added. ++ ++ This completes the initial mach-type generation code. From now on, ++ definitions that previously were hardcoded in machvec.h will be ++ automatically generated as include/asm-sh/machtypes.h. ++ ++2003-05-17 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/cpufreq.c (sh_cpufreq_setstate): Add rudimentary SMP ++ support, also verify that CPU is online. ++ (sh_cpufreq_cpu_init): Remove the policy->cpu != 0 check, look at ++ cpu_online() instead. ++ ++2003-05-16 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/setup.c (scif_sercon_device): Remove. ++ * arch/sh/kernel/time.c (timer_interrupt): Use irqreturn_t for return ++ type. ++ * arch/sh/kernel/Makefile: Make SH cpufreq driver independant of ++ cpufreq core. Use CONFIG_SH_CPU_FREQ instead. ++ * arch/sh/kernel/cpufreq.c: Rewritten for new API. ++ ++ * arch/sh/Kconfig: Add cpufreq definitions. ++ ++ * include/asm-sh/thread_info.h: Drop redefinition of TI_PRE_COUNT. ++ ++2003-05-16 Saito.K <ksaito@interface.co.jp> ++ ++ * arch/sh/Kconfig: Add mpc1211 support. ++ * arch/sh/Makefile: Add mpc1211 support. ++ * arch/sh/vmlinux.lds.S: Add mpc1211 support. ++ ++ * arch/sh/boards/mpc1211/Makefile: New file. ++ * arch/sh/boards/mpc1211/io.c: New file. ++ * arch/sh/boards/mpc1211/led.c: New file. ++ * arch/sh/boards/mpc1211/mach.c: New file. ++ * arch/sh/boards/mpc1211/pci.c: New file. ++ * arch/sh/boards/mpc1211/rtc.c: New file. ++ * arch/sh/boards/mpc1211/setup.c: New file. ++ ++ * arch/sh/kernel/sh_ksyms.c (memscan, __copy_user, __udivdi3, ++ __flush_purge_region, __down_trylock): Add to exported symbols. ++ ++ * drivers/char/keyboard.c: Add mpc1211 support. ++ ++ * drivers/ide/Kconfig: Add mpc1211 support. ++ * drivers/ide/pci/alim15x3.c: Add mpc1211 support. ++ ++ * drivers/mtd/chips/jedec_probe.c: Add Fujitsu MBM29F040C support. ++ ++ * drivers/mtd/maps/Kconfig: Add mpc1211 support. ++ * drivers/mtd/maps/Makefile: Add mpc1211 support. ++ * drivers/mtd/maps/mpc1211.c: Add mpc1211 support. ++ ++ * drivers/video/Kconfig: Add Chips 69000 display support. ++ * drivers/video/Makefile: Add Chips 69000 display support. ++ * drivers/video/asiliantfb.c: New file. ++ * drivers/video/fbmem.c: Add Chips 69000 display support. ++ ++ * include/asm-sh/dma.h: Add mpc1211 support. ++ * include/asm-sh/floppy.h: New file. ++ * include/asm-sh/irq.h: Add mpc1211 support. ++ (irq_canonicalize): here as an inline function. ++ * include/asm-sh/keyboard.h: Add mpc1211 support. ++ * include/asm-sh/machvec.h: Add mpc1211 support. ++ * include/asm-sh/mc146818rtc.h: Add mpc1211 support. ++ ++ * include/asm-sh/mpc1211/dma.h: New file. ++ * include/asm-sh/mpc1211/io.h: New file. ++ * include/asm-sh/mpc1211/keyboard.h: New file. ++ * include/asm-sh/mpc1211/m1543c.h: New file. ++ * include/asm-sh/mpc1211/mc146818rtc.h: New file. ++ * include/asm-sh/mpc1211/mpc1211.h: New file. ++ * include/asm-sh/mpc1211/pci.h: New file. ++ ++ * include/asm-sh/pci.h: Add mpc1211 support. ++ (sg_dma_address): Fix typo. ++ * include/asm-sh/scatterlist.h: Copy from kernel.org. ++ ++ * include/linux/pci_ids.h: Add Chips 69000 display support. ++ ++2003-05-12 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/boards/Makefile: Removed. ++ * arch/sh/Makefile: Include top-level .config for rules that don't set ++ include_config in the top-level Makefile. (ie, make clean/mrproper). ++ ++2003-05-12 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/boards/Makefile: New file. ++ ++2003-05-10 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * include/asm-sh/cpu-sh4/cache.h (CCR_CACHE_EMODE): Defined. ++ * arch/sh/mm/cache-sh4.c (detect_cpu_and_cache_system): Check CCR_CACHE_EMODE setting. ++ (__flush_dcache_all_ex): New function. ++ (__flush_cache_4096_all_ex): New function. ++ (flush_cache_4096_all): Moved from clear_page.S, changed for 2-way cache. ++ (flush_icache_range): Do flush-cache-all. ++ (flush_cache_sigtramp): Don't use flush_icache_range for efficiency. ++ (flush_cache_all): Check cache ways and use relevant function. ++ (flush_dcache_page): Reverted to previous version (2.4.20). ++ (__flush_cache_page): Likewise. ++ (flush_cache_range): External function declaration moved to the top. ++ * arch/sh/mm/clear_page.S (__clear_user): Bug fix from 2.4 branch. ++ (flush_cache_4096_all): Renamed to __flush_cache_4096_all. ++ * arch/sh/mm/init.c (sh_cache_init): Don't change CCR_CACHE_EMODE bit of CCR. ++ ++ * arch/sh/Makefile: Follow i386 changes. ++ * arch/sh/boot/compressed/Makefile: Likewise. ++ * arch/sh/boot/Makefile: Restored and follow i386 changes. ++ * arch/sh/boot/compressed/vmlinux.scr: New. ++ * arch/sh/.cvsignore: ignore vmlinux.lds.s ++ * arch/sh/boot/compressed/.cvsignore: Add sub-target files. ++ ++ * include/asm-sh/bug.h: Restore and follow i386 changes. ++ * mm/memory.c: Follow 2.5.69. ++ * include/net/inet_ecn.h: Removed. ++ * include/asm-sh/ide.h (ide_init_default_hwifs): Bug fix from 2.4 branch. ++ * include/asm-sh/kmap_types.h: Follow i386 changes. ++ ++2003-05-07 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/lib/udivdi3.c: New file. ++ * arch/sh/lib/Makefile (obj-y): Add udivdi3.o. ++ ++2003-05-07 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/cpu/sh4/pci-sh7751.c (pci_conf1_read): General ++ cleanup. Should now build and read values correctly. ++ * arch/sh/kernel/cpu/sh4/pci-st40.c (st40pci_read): Same here. ++ ++ * arch/sh/mm/cache-sh4.c (flush_icache_range): Clear out valid ++ bit for each way in the icache. ++ ++ * drivers/video/Makefile: Make pvr2fb use cfb files. ++ * drivers/video/pvr2fb.c: Updates. ++ ++2003-05-07 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ Paul Mundt <lethal@linux-sh.org> ++ ++ * Makefile (CFLAGS): Use -O1 to avoid miss compiling by gcc-3.2. ++ (core-y): Add usr/. ++ ++ * arch/sh/Makefile (LDFLAGS_BLOB): Define. ++ ++ * arch/sh/kernel/cpu/rtc.c (sh_rtc_gettimeofday): Don't make ++ overflow. ++ * arch/sh/kernel/entry.S: Add gUSA support. Call syscall_tail ++ only when returning from fork. Add new syscalls. ++ * arch/sh/kernel/io_7751se.c: Fix typo. ++ * arch/sh/kernel/io_se.c (delay): Wait more. ++ * arch/sh/kernel/irq.c: Follow i386 changes. ++ * arch/sh/kernel/module.c: Rewriting. ++ * arch/sh/kernel/process.c (kernel_thread_helper): New. ++ (kernel_thread): Use kernel_thread_helper. Return error value also. ++ (dump_task_regs, dump_task_fpu): New. ++ (copy_thread): Handle CLONE_SETTLS flag and initialize child tids. ++ (__switch_to): Return PREV pointer. ++ (sys_clone): Handle tid pointers. ++ * arch/sh/kernel/ptrace.c: Cleanup and follow i386 changes. ++ * arch/sh/kernel/signal.c (handle_signal): Add gUSA support. ++ (do_signal): Handle ERESTART_RESTARTBLOCK case. ++ * arch/sh/kernel/sys_sh.c (sys_ipc): Use sys_semtimedop and ++ handle SEMTIMEDOP. ++ * arch/sh/kernel/time.c (TICK_SIZE): Use tick_nsec. ++ (do_gettimeoffset): Lock critical region. ++ (do_gettimeofday): Follow i386 changes. ++ (time_init): Override tick_nsec here. ++ ++ * arch/sh/lib/Makefile (obj-y): Add div64.o. ++ * arch/sh/lib/div64.S: New file. ++ ++ * arch/sh/mm/cache-sh2.c (detect_cpu_and_cache_system): Use ++ SH_CACHE_* instead of CACHE_* because CACHE_VALID collides with ++ the one in NFS header file. ++ * arch/sh/mm/cache-sh3.c (detect_cpu_and_cache_system): Likewise. ++ (__flush_wback_region): Likewise. ++ (__flush_purge_region): Likewise. ++ * arch/sh/mm/cache-sh4.c (flush_cache_4096): Likewise. ++ * arch/sh/mm/init.c (sh_cache_init): Likewise. ++ * arch/sh/mm/extable.c (fixup_exception): New. ++ * arch/sh/mm/tlb-sh4.c (update_mmu_cache): Set write through ++ bit of PTEL if CONFIG_SH_WRITETHROUGH defined. ++ ++ * drivers/net/stnic.c (ei_interrupet): Change return type. ++ ++ * include/asm-sh/byteorder.h (___arch__swab64): New. ++ (__arch__swab64): Define. ++ * include/asm-sh/cache.h: Rename CACHE_* to SH_CACHE_*. ++ * include/asm-sh/delay.h (ndelay): Define. ++ * include/asm-sh/div64.h (do_div): Implement a real 64/32-bit ++ division. ++ * include/asm-sh/elf.h: Follow i386 change. ++ * include/asm-sh/hardirq.h: Likewise. ++ * include/asm-sh/ide.h: Include generic definitions. ++ * include/asm-sh/ipc.h (SEMTIMEDOP): Define. ++ * include/asm-sh/module.h (MODULE_PROC_FAMILY): Define. ++ * include/asm-sh/param.h: Follow i386 changes. ++ * include/asm-sh/pci.h (pci_map_sg): Fix dma_address in loop. ++ (pci_dma_sync_sg): Likewise. ++ * include/asm-sh/pgtable.h: Change _PAGE_FILE to 0x80 and drop this ++ bit from _PAGE_FLAGS_HARDWARE_MASK. ++ * include/asm-sh/processor.h: Follow i386 changes. ++ * include/asm-sh/ptrace.h: Remove PTRACE_OLDSETOPTIONS and ++ define PTRACE_O_TRACESYSGOOD. ++ * include/asm-sh/rwsem.h: Cut© from i386. ++ * include/asm-sh/semaphore.h: Follow i386 changes. ++ * include/asm-sh/thread_info.h: Follow i386 changes. ++ (struct thread_info): Make CPU and PREEMPT_COUNT 32-bit. ++ * include/asm-sh/tlb.h (tlb_start_vma): Call flush_cache_range. ++ (tlb_end_vma): Call flush_tlb_range. ++ * include/asm-sh/types.h: Follow i386 changes. ++ * include/asm-sh/uaccess.h: Remove fixup_exception. ++ * include/asm-sh/unistd.h: Define new system call numbers. ++ ++ * include/linux/elf.h: Define SH relocation types. ++ ++ * kernel/timer.c (tick_sec): Don't use static initializer. ++ (tick_nsec): Likewise. ++ (init_timers): Initialize tick_sec and tick_nsec here. ++ ++2003-05-05 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/setup.c (sh_console_device): Removed. ++ ++ * drivers/char/sh-sci.c: General tty cleanup, get rid of minor() and ++ mk_kdev() usage. ++ ++ * drivers/video/hitfb.c (hitfb_init): fb_info.node cleanups, get rid ++ of NODEV and minor(). ++ * drivers/video/pvr2fb.c (pvr2fb_interrupt): Use new irqreturn_t type. ++ (pvr2fb_init): get rid of NODEV and minor(). ++ ++ * include/asm-sh/pgalloc.h (pte_alloc_one_kernel): Use __GFP_REPEAT ++ for pte allocation. ++ ++ Merge 2.5.69. ++ ++2003-05-01 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/entry.S (ret_from_fork): Add back in. Invoke ++ schedule_tail(), since its not just for SMP anymore. ++ * arch/sh/kernel/traps.c (dump_stack): Added. ++ * arch/sh/kernel/module.c: New file. ++ ++ * include/asm-sh/module.h: Rework for new module interface. ++ ++2003-04-22 Paul Mundt <lethal@linux-sh.org> ++ ++ Merge with 2.5.67 and 2.5.68. ++ ++2003-04-18 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/mm/clear_page.S (__flush_cache_4096): Revert previous change ++ and modified for efficiency. ++ ++2003-04-17 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/mm/clear_page.S (__flush_cache_4096): Don't change associated ++ data that is to be flushed. ++ ++2003-04-01 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Move the CONFIG_MMU option further down and ++ add some rudimentary help text. ++ ++ * arch/sh/vmlinux.lds.s: Add __param and __initramfs sections. ++ ++ * arch/sh/kernel/entry.S: Deprecate sys_create_module, ++ sys_query_module, and sys_get_kernel_syms. ++ ++ * arch/sh/mm/extable.c (search_extable): Added. Use the unified ++ extable handling code. ++ (search_one_table, search_exception_table): Removed. ++ * arch/sh/mm/fault.c (do_page_fault): Use the unified extable ++ search. ++ * arch/sh/kernel/traps.c (die_if_no_fixup): Same here. ++ ++ * include/asm-sh/uaccess.h (search_exception_table): Removed. ++ ++ * drivers/block/rd.c: Include linux/mm.h for page_address(). ++ ++2003-03-31 Paul Mundt <lethal@linux-sh.org> ++ ++ * include/asm-sh/pgtable.h (pte_file, pte_to_pgoff, ++ pgoff_to_pte): Added. Also set PTE_FILE_MAX_BITS. ++ ++ * drivers/char/watchdog/shwdt.c: Cleanup. ++ ++ * drivers/video/pvr2fb.c: Further API fixes. ++ ++ Merge with 2.5.62 ... 2.5.66. ++ ++2003-03-30 Paul Mundt <lethal@linux-sh.org> ++ ++ Merge with 2.5.47 ... 2.5.61. ++ ++2003-03-29 Paul Mundt <lethal@linux-sh.org> ++ ++ Merge with 2.5.46. ++ ++2003-03-24 Daniel Jacobowitz <drow@false.org> ++ Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/kernel/ptrace.c (ubc_set_tracing): Break before executing ++ instruction. ++ ++2003-03-24 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/entry.S: Call sys_pread_wrapper/sys_pwrite_wrapper ++ instead of sys_pread64/sys_pwrite64. ++ * arch/sh/kernel/sys_sh.c (sys_pread_wrapper,sys_pwrite_wrapper): ++ New function. ++ ++ * arch/sh/mm/copy_page.S (__copy_user): Add missing exception handling ++ point. ++ ++2003-01-28 Paul Mundt <lethal@linux-sh.org> ++ ++ * Makefile, arch/sh/Kconfig, drivers/block/rd.c, ++ drivers/Makefile, drivers/char/Makefile, ++ drivers/char/tty_io.c, drivers/net/8139too.c, ++ drivers/net/Kconfig, drivers/video/epson1355fb.c, ++ drivers/video/hitfb.c, drivers/video/pvr2fb.c, ++ include/asm-sh/signal.h, init/do_mounts.c, kernel/ptrace.c, ++ kernel/timer.c, mm/memory.c: Merge 2.5.51. ++ ++ * Makefile, drivers/Makefile, drivers/char/Makefile, ++ drivers/pci/pci.ids, include/asm-sh/processor.h, ++ init/do_mounts.c, kernel/ptrace.c, kernel/timer.c: Merge 2.5.50. ++ ++ * Makefile, drivers/char/Makefile, drivers/char/Kconfig, ++ drivers/char/tty_io.c, drivers/pcmcia/hd64465_ss.c, ++ fs/nfs/inode.c, fs/mpage.c: Merge 2.5.49. ++ ++ * drivers/char/shwdt.c: Move to watchdog/ ++ ++ * arch/sh/Kconfig, drivers/char/tty_io.c, init/do_mounts.c, ++ drivers/input/keyboard/Kconfig, fs/nfs/inode.c, fs/mpage.c, ++ include/asm-sh/stat.h, include/linux/input.h, kernel/time.c, ++ kernel/timer.c, Makefile: Merge 2.5.48. ++ ++ * Makefile, arch/sh/Kconfig, arch/sh/kernel/pci-sh7751.c, ++ arch/sh/kernel/pci_st40.c, drivers/block/rd.c, ++ drivers/char/sh-sci.c, drivers/char/shwdt.c, ++ drivers/char/sysrq.c, drivers/char/tty_io.c, ++ drivers/net/Kconfig, drivers/pci/pci.ids, fs/nfs/inode.c, ++ fs/mpage.c, kernel/timer.c: Merge 2.5.47. ++ ++ * Makefile, arch/sh/Kconfig, arch/sh/kernel/irq.c, ++ arch/sh/kernel/process.c, arch/sh/kernel/ptrace.c, ++ drivers/Makefile, drivers/block/rd.c, drivers/char/Makefile, ++ drivers/char/sysrq.c, drivers/net/Kconfig, init/do_mounts.c, ++ include/asm-sh/processor.h, include/asm-sh/ptrace.h, ++ kernel/ptrace.c, kernel/timer.c, mm/memory.c: Merge 2.5.46. ++ ++2003-01-16 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Add CONFIG_DEBUG_SPINLOCK. ++ ++ * arch/sh/kernel/traps.c (per_cpu_trap_init, gdb_vbr_init): Added. ++ (trap_init): Do some generic exception table setup, and wrap to ++ per_cpu_trap_init() to setup boot cpu. ++ ++ * include/asm-sh/spinlock.h (_raw_spin_lock, _raw_spin_unlock, ++ _raw_read_lock, _raw_read_unlock, _raw_write_lock, ++ _raw_write_unlock): And preliminary spin/read/write locks. ++ ++ Clean up CONFIG_DEBUG_SPINLOCK stuff. ++ ++2003-01-15 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/vmlinux.lds.S: Don't use static values for cacheline or ++ page size. Use L1_CACHE_BYTES/PAGE_SIZE accordingly. ++ ++2003-01-13 Paul Mundt <lethal@linux-sh.org> ++ ++ * include/asm-sh/uaccess.h (__access_ok, set_fs, get_fs): Added for ++ CONFIG_MMU=n. ++ ++2003-01-10 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/entry.S: Wrap sys_madvise and sys_readahead ++ to sys_ni_syscall if !CONFIG_MMU. Fixup exception handling ++ when we don't have an MMU (or if its disabled). ++ ++2003-01-09 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Add CONFIG_BINFMT_FLAT. ++ ++ * mm/Makefile, mm/filemap.c, mm/mmap.c, mm/nommu.c, ++ mm/page_alloc.c, mm/slab.c, mm/vmscan.c, kernel/fork.c, ++ kernel/sys.c, kernel/sysctl.c, fs/exec.c, fs/locks.c, ++ fs/mpage.c, fs/proc/array.c, fs/proc/base.c, ++ fs/proc/proc_misc.c, drivers/char/mem.c, ++ include/linux/blkdev.h, include/linux/mm.h, ++ include/linux/page-flags.h, include/linux/slab.h, ++ include/linux/swap.h: Merge uClinux 2.5.45-uc1-mm patch. ++ ++ * fs/Makefile: Add binfmt_flat. ++ * fs/binfmt_flat.c: New file. ++ ++ * include/linux/flat.h: New file. ++ ++2003-01-05 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Makefile: Do a bit of cleaning, and lay the groundwork ++ for include/asm-sh/cpu/ ++ ++2003-01-01 Paul Mundt <lethal@linux-sh.org> ++ ++ * ChangeLog-2002: New file, move the old one out of the way. ++ ++ * arch/sh/boot/compressed/Makefile: Add top-level include dir ++ to CFLAGS/AFLAGS. ++ ++ * arch/sh/kernel/process.c (sys_fork): Can't fork() properly ++ with no MMU (at least under uClinux), return -EINVAL instead. ++ ++ * arch/sh/mm/Makefile: Build pg-sh4.c for all SH-4, not just ++ ones with an MMU. ++ * arch/sh/mm/tlb-nommu.c (update_mmu_cache): Added. ++ ++ * include/asm-sh/bugs.h (check_bugs): Add a default rule for ++ CPU subtype. ++ * include/asm-sh/pgtable.h: Fixup page protection flags for ++ systems without an MMU .. wrap to __pgprot(0). ++ * include/asm-sh/processor.h (save_fpu): Make it work on ++ SH-4 again. ++ ++ * include/asm-sh/addrspace.h: Move CPU specific definitions out of ++ the way.. reference asm/cpu/addrspace.h instead. ++ * include/asm-sh/cpu-sh3/addrspace.h, ++ include/asm-sh/cpu-sh4/addrspace.h: Added. ++ +diff -ruN linux-2.6.17-vanilla/ChangeLog-2004 linux-2.6.17/ChangeLog-2004 +--- linux-2.6.17-vanilla/ChangeLog-2004 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/ChangeLog-2004 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,930 @@ ++2004-12-03 Tom Rini <trini@kernel.crashing.org> ++ ++ * arch/sh/configs/se7750_defconfig: Add defconfig for ms7750sse01 ++ * include/asm-sh/system.h (__cmpxchg_u32, __cmpxchg, cmpxchg): Add ++ so that we provide a simple cmpxchg(). Borrowed from MIPS. ++ ++2004-12-03 Saito.K <ksaito@interface.co.jp> ++ ++ * include/asm-sh/irq.h: Add CTP/PCI-SH03 IDE. ++ * include/asm-sh/sh03/ide.h: New file. ++ ++2004-10-25 Paul Mundt <paul.mundt@nokia.com> ++ ++ * arch/sh/kernel/signal.c (handle_signal): Modify to take a ++ struct k_sigaction arg. ++ (do_signal): get_signal_to_deliver() now fills in the k_sigaction ++ struct, pass this into handle_signal(). ++ ++ * arch/sh/kernel/entry.S (sys_call_table): Update for 2.6.9 syscalls, ++ sys_waitid in particular. ++ ++ * include/asm-sh/bitops.h (ext2_find_next_zero_bit): addr is specified ++ as a char *, which causes find_next_zero_bit() to complain. Cast it. ++ ++ * include/asm-sh/pgtable.h (ptep_get_and_clear): Get rid of inline ++ bogosity causing compile death. ++ ++ * include/asm-sh/system.h: Kill off linux/kernel.h include, as it's ++ both unecessary and causes a circular dependency. ++ ++ * include/asm-sh/unistd.h: syscall updates. ++ ++2004-10-24 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/signal.c (get_sigframe): Fix sigaltstack behavior. ++ ++2004-10-15 Tom Rini <trini@kernel.crashing.org> ++ ++ * arch/sh/ramdisk/Makefile: Fix for usage with O= ++ ++2004-10-15 Tom Rini <trini@kernel.crashing.org> ++ ++ * include/asm-sh/bitops.h (find_next_zero_bit): First parameter is ++ now a const unsigned long. ++ (sched_find_first_bit): Likewise. ++ ++2004-10-14 Paul Mundt <paul.mundt@nokia.com> ++ ++ * arch/sh/Kconfig: Cleanup PCLK values. ++ ++ * arch/sh/configs/microdev_defconfig: Add microdev defconfig. ++ ++ * arch/sh/boards/superh/microdev/setup.c (smc91x_setup): Added ++ smc91x platform device registration. ++ ++ * arch/sh/kernel/early_printk.c (scif_sercon_init): Fixup SCBRR ++ calculations to use CONFIG_SH_PCLK_FREQ value. ++ * arch/sh/kernel/sh_ksyms.c (__div64_32, strcpy): Exported to ++ satisfy module builds. ++ (csum_ipv6_magic, clear_page): Likewise. ++ ++ * include/asm-sh/bug.h: Make BUG() oops. ++ * include/asm-sh/checksum.h: Fix IPv6 compile. ++ * include/asm-sh/unistd.h (_exit): Removed. ++ ++ * drivers/net/Kconfig: Enable smc91x for SuperH. ++ * drivers/net/smc91x.[ch]: Cleanup ISA support, add support for ++ SH4-202 MicroDev. ++ ++2004-10-13 Masahiro Miyake <miya@lineo.co.jp> ++ ++ * arch/sh/boards/snapgear/setup.c: Use asm/cpu/timer.h for TMU ++ definitions. ++ ++ * arch/sh/kernel/time.c: Likewise. ++ ++ * include/asm-sh/cpu-sh3/freq.h: Add FRQCR definition for SH7300. ++ ++ * include/asm-sh/cpu-sh3/timer.h: New file, TMU definitions. ++ * include/asm-sh/cpu-sh4/timer.h: New file. ++ ++2004-10-04 Saito.K <ksaito@interface.co.jp> ++ ++ * arch/sh/Kconfig: Add CTP/PCI-SH03 support. ++ * arch/sh/Makefile: Add CTP/PCI-SH03 support. ++ * arch/sh/boards/sh03/Makefile: New file. ++ * arch/sh/boards/sh03/led.c: New file. ++ * arch/sh/boards/sh03/pci.c: New file. ++ * arch/sh/boards/sh03/rtc.c: New file. ++ * arch/sh/boards/sh03/setup.c: New file. ++ * arch/sh/config/sh03_defconfig: New file. ++ * arch/sh/drivers/pci/pci-sh7751.c: Add CTP/PCI-SH03 support. ++ * drivers/char/Kconfig: Add CTP/PCI-SH03 support. ++ * drivers/char/Makefile: Add CTP/PCI-SH03 support. ++ * drivers/char/sh03rtc.c: New file. ++ * include/asm-sh/sh03/io.h: New file. ++ * include/asm-sh/sh03/sh03.h: New file. ++ ++2004-10-01 Paul Mundt <paul.mundt@nokia.com> ++ ++ * arch/sh/drivers/pci/pci-sh7751.c (pcibios_fixup_irqs): Define as a ++ weak symbol so other boards can overload the fixups. ++ ++2004-09-24 Tom Rini <trini@kernel.crashing.org> ++ ++ * arch/sh/Makefile: Test for machdir-y not being empty before ++ adding to core-y. ++ ++2004-09-24 Tom Rini <trini@kernel.crashing.org> ++ ++ * drivers/net/8139too.c: Revert changes that moved asserts() around. ++ ++2004-09-24 Tom Rini <trini@kernel.crashing.org> ++ ++ * arch/sh/boards/se/7751/io.c: pci-sh7751.h has moved, update include. ++ * arch/sh/boards/se/7751/pci.c: pci-sh7751.h has moved, update include. ++ ++2004-09-24 Tom Rini <trini@kernel.crashing.org> ++ ++ * arch/sh/tools/Makefile: Switch from machgen.sh to gen-mach-types ++ * arch/sh/tools/machgen.sh: Remove ++ * arch/sh/tools/gen-mach-types: Add ++ * arch/sh/Makefile: Update the cpu and mach symlink rules to match ++ how ARM does it. ++ * This updates our symlink and machtypes.h stuff to match what ++ ARM does today which fixes O= building. ++ ++2004-09-24 Tom Rini <trini@kernel.crashing.org> ++ ++ * include/asm-sh: adc.h, addrspace.h, cache.h, cacheflush.h, dma.h, ++ freq.h, mmu_context.h, processor.h, rtc.h, shmparam.h, ubc.h, ++ watchdog.h: Protect all contents with #ifdef __KERNEL__ ++ * include/asm-sh/user.h: remove <linux/types.h> and <asm/processor.h> ++ from the #include list. ++ * The net result is that glibc can now compile with these headers. ++ ++2004-08-19 Alex Bennee <kernel-hacker@bennee.com> ++ ++ * arch/sh/drivers/pci/pci-st40.c Updated PLL calculation ++ * arch/sh/drivers/pci/pci-st40.c Fixes to init ++ * arch/sh/drivers/pci/pci-st40.[ch] Updated RBAR ++ ++2004-08-19 Alex Bennee <kernel-hacker@bennee.com> ++ ++ * Forward porting of INTC2 IRQ Handling from 2.4 ++ * added intc2 irq initialisation ++ * removed make_intc2_irq call from from pci ++ * updated intc2 irq functions ++ * updated st40 pci irq code ++ * fixed pcibios_init to return ok ++ ++2004-08-19 Alex Bennee <kernel-hacker@bennee.com> ++ ++ * moved map_harp_irq -> pcibios_map_platform_irq in harp/setup.c ++ * added subsys_initcall(pcibios_init) to ST40 PCI code. ++ ++2004-08-03 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/cpu/sh4/probe.c (detect_cpu_and_cache_system): Add ++ CPU_HAS_PERF_COUNTER for SH7750/SH7750S. ++ ++ * arch/sh/kernel/setup.c (cpu_flags): Add perfctr flag. ++ ++ * arch/sh/oprofile/Makefile: Add op_model_sh7750 rule. ++ * arch/sh/oprofile/op_model_sh7750.c: New file, OProfile support for ++ SH7750/SH7750S performance counters. ++ ++ * include/asm-sh/processor.h: Add CPU_HAS_PERF_COUNTER. ++ ++2004-07-28 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/drivers/dma/dma-pvr2.c: Update for DMA API changes. ++ * arch/sh/drivers/dma/dma-g2.c: Likewise. ++ ++2004-07-26 Paul Mundt <lethal@linux-sh.org> ++ ++ More fixups by Hosokawa-san <hosokawa@ace-jp.com> ++ ++ * arch/sh/drivers/pci/fixups-rts7751r2d.c (pci_fixup_pcic): Use ++ PCI_REG() for proper register offsets. Additional PCIC init. ++ ++ * arch/sh/drivers/pci/ops-rts7751r2d.c (sh7751_pci_map): Fix window0 ++ size, add dummy window1. ++ ++ * arch/sh/drivers/pci/pci-sh7751.c (pci_fixup_ide_bases): Enable this ++ for RTS7751R2D/HS7751RVoIP. ++ (pcibios_fixups): Likewise. ++ ++ * arch/sh/drivers/pci/pci.c (pcibios_enable_device): Add mask check. ++ ++2004-07-07 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/mm/cache-sh[234].c (detect_cpu_and_cache_system): Moved .. ++ * arch/sh/kernel/cpu/sh[234]/probe.c: here. ++ * arch/sh/kernel/cpu/sh[234]/Makefile: Add probe.o rule. ++ ++2004-07-05 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/time.c (time_init): RTS7751R2D and HS7751RVoIP don't ++ need special handling for the interval value.. ++ ++2004-06-28 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/asm-offsets.c: New file. ++ * arch/sh/kernel/entry.S: Include asm/asm-offsets.h. ++ ++ * arch/sh/Makefile: Add asm-offsets rules. ++ ++ * include/asm-sh/thread_info.h: Remove struct elem references, do ++ them dynamically at build time via asm-offsets instead. ++ ++ * arch/sh/lib/memcpy-sh4.S: Merge Stuart's SH-4 optimized memcpy(). ++ * arch/sh/lib/Makefile: Use memcpy-sh4 for CONFIG_CPU_SH4. ++ ++2004-06-28 Hiroshi DOYU <Hiroshi_DOYU@montavista.co.jp> ++ ++ * arch/sh/Kconfig, arch/sh/Makefile,arch/sh/kernel/process.c, ++ arch/sh/kernel/setup.c,arch/sh/kernel/signal.c,arch/sh/kernel/time.c, ++ arch/sh/kernel/cpu/sh4/Makefile,arch/sh/kernel/cpu/sh4/ex.S, ++ arch/sh/mm/cache-sh4.c, arch/sh/tools/mach-types, drivers/serial/sh-sci.c ++ drivers/serial/sh-sci.h, include/asm-sh/irq.h include/asm-sh/processor.h, ++ include/asm-sh/cpu-sh4/freq.h: Modified for sh73180cp01 ++ ++ * arch/sh/boards/se/73180/Makefile, arch/sh/configs/se73180_defconfig ++ arch/sh/boards/se/73180/io.c, arch/sh/boards/se/73180/irq.c, ++ arch/sh/boards/se/73180/led.c, arch/sh/boards/se/73180/setup.c, ++ include/asm-sh/se73180/io.h, include/asm-sh/se73180/se73180.h, ++ include/asm-sh/irq-sh73180.h: New files for sh73180cp01 ++ ++2004-06-26 Paul Mundt <lethal@linux-sh.org> ++ ++ * sound/oss/voyagergx_sound.c (request_dma2): Use irqreturn_t for irq ++ callback. ++ (do_irq): Convert to irqreturn_t. ++ (init_voyagergx): s/\(INT_MASK\)/VOYAGER_\1/, likewise for INT_MASK_AC. ++ ++ * arch/sh/drivers/dma/dma-api.c: Don't export unregister_dmac(). ++ ++ * arch/sh/boards/dreamcast/setup.c: Wrap dreamcast_consistent_alloc ++ and dreamcast_consistent_free into the machvec. ++ ++ * arch/sh/boards/renesas/rts7751r2d/mach.c: consistent API wrappers ++ in the machvec are only built in if CONFIG_USB_OHCI_HCD is set, ++ check this in the machvec assignment so we don't get undefined symbols ++ at link time (Noted by Hosokawa-san <hosokawa@ace-jp.com>). ++ ++ * arch/sh/cchips/voyagergx/consistent.c (voyagergx_consistent_alloc): ++ return NULL when we aren't capable of doing the allocation (this will ++ then wrap to consistent_alloc() in the generic path). ++ (voyagergx_consistent_free): return non-0 to have the generic path ++ wrap to consistent_free(), and get rid of its invocation here. ++ ++ * arch/sh/drivers/pci/dma-dreamcast.c (__pci_alloc_consistent): ++ Renamed to dreamcast_consistent_alloc(). ++ (__pci_free_consistent): Renamed to dreamcast_consistent_free(). ++ Both cleaned up to work with new model. ++ ++ * include/asm-sh/dma-mapping.h: Get rid of dreamcast-specific hacks, ++ these are now wrapped properly through the machvec. ++ (dma_alloc_coherent): Check return val of mv_consistent_alloc(), ++ wrap to consistent_alloc() if the former isn't interested in the ++ mapping. ++ (dma_free_coherent): Likewise, but for mv_consistent_free() and ++ consistent_free(). ++ ++ * include/asm-sh/machvec.h (mv_consistent_free): Change return-type ++ to int. ++ ++ * arch/sh/kernel/cpu/irq_ipr.c: export make_ipr_irq to satisfy module ++ dependancies. ++ * arch/sh/mm/consistent.c: export consistent_alloc/consistent_free. ++ * sound/oss/voyagergx_8051.c: export init_8051/command_8051. ++ ++ * arch/sh/configs/rts7751r2d_defconfig: Update RTS7751R2D defconfig. ++ ++2004-06-25 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/time.c (sh_do_profile): Add oprofile hook. ++ Change to take pt_regs. ++ (do_timer_interrupt): Hand off regs to sh_do_profile() ++ instead of just PC value (profile_hook() expects this). ++ ++2004-06-15 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Add CONFIG_CPU_SUBTYPE_SH7705. ++ ++ * arch/sh/kernel/cpu/irq_ipr.c, arch/sh/kernel/cpu/sh3/ex.S, ++ arch/sh/kernel/entry.S, arch/sh/kernel/setup.c, ++ arch/sh/kernel/time.c: Add support for SH7705. ++ ++ * include/asm-sh/irq.h, include/asm-sh/processor.h: Likewise. ++ ++ * arch/sh/boards/systemh: Moved .. ++ * arch/sh/boards/renesas/systemh: here. ++ ++ * arch/sh/Makefile: Update systemh path. ++ * arch/sh/boards/renesas/systemh/Makefile: Adjust pci.o path. ++ ++2004-06-10 Hiroshi DOYU <Hiroshi_DOYU@montavista.co.jp> ++ ++ * arch/sh/Kconfig, arch/sh/Makefile, ++ arch/sh/kernel/entry.S, arch/sh/kernel/setup.c, ++ arch/sh/kernel/time.c, arch/sh/kernel/cpu/irq_ipr.c, ++ arch/sh/kernel/cpu/sh3/ex.S, arch/sh/tools/mach-types, ++ drivers/serial/sh-sci.c, drivers/serial/sh-sci.h, ++ include/asm-sh/bugs.h, include/asm-sh/irq.h, ++ include/asm-sh/ubc.h: modified for sh7300cp01 ++ ++ * arch/sh/boards/se/7300/Makefile, arch/sh/boards/se/7300/io.c, ++ arch/sh/boards/se/7300/irq.c, arch/sh/boards/se/7300/led.c, ++ arch/sh/boards/se/7300/mach.c, arch/sh/boards/se/7300/setup.c, ++ arch/sh/configs/se7300_defconfig, include/asm-sh/se7300/io.h, ++ include/asm-sh/se7300/irq-sh7300.h, include/asm-sh/se7300/se7300.h: ++ New files for sh7300cp01 ++ ++2004-06-08 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/ide/Kconfig: Add CONFIG_IDE_SH. ++ * drivers/ide/Makefile: Add CONFIG_IDE_SH rule. ++ * drivers/ide/ide.c: Merge from mainline. ++ (probe_for_hwifs): Add ide_sh_init(). ++ * drivers/ide/sh/ide-sh.c: New file, generic host driver for SuperH. ++ ++ * include/asm-sh/ide.h: Update for new API. ++ * include/asm-sh/irq.h: Only load asm/mach/ide.h on platforms where ++ the irq definitions vary from the standard 14/15. ++ ++2004-06-07 Hiroshi DOYU <Hiroshi_DOYU@montavista.co.jp> ++ ++ * arch/sh/Kconfig: Added support for embedded ramdisk ++ * arch/sh/Makefile: Likewise ++ * arch/sh/kernel/setup.c (setup_arch): Likewise ++ * arch/sh/ramdisk/Makefile: New file. Likewise ++ * arch/sh/ramdisk/ld.script: New file. Likewise ++ * arch/sh/kernel/vmlinux.lds.S: Likewise ++ ++2004-06-04 Andriy Skulysh <askulysh@image.kiev.ua> ++ ++ * arch/sh/mm/cache-sh3.c (detect_cpu_and_cache_system): use ++ way_incr instead of way_shift. ++ * arch/sh/mm/cache-sh3.c (__flush_wback_region): Likewise. ++ ++ * include/asm-sh/ide.h (ide_init_hwif_ports): Removed. ++ * include/asm-sh/hp6xx/ide.h: Fix typo. ++ * include/asm-sh/hp6xx/hp6xx.h: hp680 updates. ++ * include/asm-sh/cpu-sh3/dac.h: Likewise. ++ * arch/sh/kernel/sh_ksyms.c: Export consistent_sync. ++ ++ * arch/sh/kernel/cpu/adc.c: New file. Added simple SH ADC support. ++ * include/asm-sh/adc.h: Likewise. ++ * arch/sh/Kconfig: Likewise. ++ * arch/sh/kernel/cpu/Makefile: Likewise. ++ ++ * drivers/input/touchscreen/hp680_ts_input.c: New file. Added Jornada 680 ++ touchscreen support. ++ * drivers/input/touchscreen/Makefile: Likewise. ++ * drivers/input/touchscreen/Kconfig: Likewise. ++ ++2004-06-02 Alex Bennee <kernel-hacker@bennee.com> ++ ++ * arch/sh/KConfig: Added ST subtypes from ST Tree (Dave McKay) ++ * arch/sh/KConfig: Added CONFIG_DEBUG_INFO from other arch's ++ ++2004-06-02 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/setup.c (show_cpuflags): Fix off-by-1 index ++ for flag names. ++ ++2004-05-28 Paul Mundt <lethal@linux-sh.org> ++ ++ * include/asm-sh/pgalloc.h (ptep_test_and_clear_young): Removed. ++ (ptep_test_and_clear_dirty): Removed. ++ (ptep_set_wrprotect): Likewise. ++ (ptep_mkdirty): Likewise. ++ (ptep_get_and_clear): Removed for SH-3. ++ ++ * include/asm-sh/pgtable.h (pte_same): Removed. ++ ++ Use generic ptep_xxx() routines for everything other than the SH-4 ++ version of ptep_get_and_clear(). ++ ++2004-05-25 Alex Bennee <kernel-hacker@bennee.com> ++ ++ * arch/sh/kernel/time.c: Fixed clock detection for ST40 ++ ++2004-05-07 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/ptrace.c (sys_ptrace): Handle PTRACE_SETOPTIONS in ++ default case. ++ ++2004-05-05 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/process.c (default_idle): Add hlt_counter check to ++ determine if we can use sleep or not. Use cpu_sleep() instead of ++ cpu_relax(). ++ * include/asm-sh/processor.h (cpu_relax): Renamed to cpu_sleep(). ++ Add dummy definition for cpu_relax(). ++ ++2004-05-02 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/traps.c (is_dsp_inst,trap_init): Don't use bit operation ++ macros for cpu_data->flags. ++ * arch/sh/kernel/cpu/init.c (dsp_init,sh_cpu_init): Likewise. ++ * arch/sh/mm/tlb-sh3.c (__flush_tlb_page): Likewise. ++ * arch/sh/mm/cache-sh3.c (detect_cpu_and_cache_system): Likewise. ++ * arch/sh/mm/cache-sh4.c (detect_cpu_and_cache_system): Likewise. ++ (flush_cache_4096): Likewise. Jump to P2 area when accessing I-cache ++ array. ++ ++2004-04-30 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * include/asm-sh/checksum.h (csum_ipv6_magic): Remove #ifdef CONFIG_IPV6. ++ ++ * arch/sh/boot/compressed/Makefile (CONFIG_MEMORY_START, ++ CONFIG_BOOT_LINK_OFFSET): Add '0x' prefix to dummy value. ++ ++2004-04-28 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * drivers/serial/sh-sci.h: Fix typo. ++ * drivers/serial/sh-sci.c (sci_handle_breaks): Test SCIF_ORER definition ++ instead of sub cpu type. ++ (sci_er_interrupt): Fix compile error. ++ ++ * arch/sh/boot/compressed/Makefile (CONFIG_MEMORY_START, ++ CONFIG_BOOT_LINK_OFFSET): Assign dummy values if these 2 variables are ++ not defined, in order to suppress error message. ++ ++ * include/asm-sh/sigcontext.h: Do not include asm/cpu/sigcontext.h. ++ (struct sigcontext): Moved from asm-sh/cpu*/sigcontext.h. ++ * include/asm-sh/cpu-sh2/sigcontext.h,include/asm-sh/cpu-sh3/sigcontext.h, ++ include/asm-sh/cpu-sh4/sigcontext.h: Removed. ++ ++2004-04-23 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/boot/compressed/misc.c: New file. Fix for gcc-3.4. ++ ++2004-04-21 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * include/asm-sh/user.h: New file. Don't include linux/types.h. ++ ++2004-04-15 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/mm/consistent.c: Export consistent_sync. ++ ++ * arch/sh/kernel/time.c (time_init): Allow 1% mismatch for auto detected ++ clock frequency. ++ ++ * include/asm-sh/serial.h: New file. Remove irq_canonicalize. ++ ++ * arch/sh/Makefile: Target 'all' depends on zImage. ++ ++2004-04-13 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * drivers/serial/sh-sci.h (SCI_CTRL_FLAGS_REIE): Defined. ++ * drivers/serial/sh-sci.c (sci_er_interrupt): Add handling scif overrun ++ error. ++ (sci_start_rx): Enable Rx error interrupt. ++ (sci_stop_rx): Disable Rx error interrupt. ++ ++ * arch/sh/mm/cache-sh4.c (detect_cpu_and_cache_system): Don't force set ++ EMODE before flushing all D-cache. Refer CVR on SH4_501/SH4-202 only. ++ * arch/sh/kernel/cpu/init.c (cache_init): Flush only 1 way if EMODE is ++ not set. Writing 0 to address array is enough for flushing. Force EMODE ++ here (after flushing data cache). ++ ++ * include/asm-sh/unistd.h: Include linux/linkage.h. ++ ++ * drivers/char/rtc.c: New file. Fix ioctl return code when RTC_IRQ==0. ++ ++2004-04-13 Yoshinori Sato <ysato@users.sourceforge.jp> ++ ++ * drivers/serial/Kconfig: New file. Add SERIAL_SH_SCI dependency on ++ H8300. ++ * drivers/serial/sh-sci.h (CPU_SCI_FNS, sci_rxd_in): Fix compilation ++ error. ++ * drivers/serial/sh-sci.c (sci_init_pins_sci, serial_console_setup, ++ sci_transmit_chars, sci_receive_chars, sci_set_termios, sci_init): ++ Fix compilation error on H8300. ++ ++2004-04-08 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * include/asm-sh/pgtable.h (__pte_to_swp_entry): Take into account ++ _PAGE_WT bit. ++ (__swp_entry_to_pte, pte_to_pgoff, pgoff_to_pte): Likewise. ++ ++2004-03-29 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/mm/consistent.c (consistent_alloc): Fix page freeing logic. ++ ++2004-03-26 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/mm/init.c (set_pte_phys): Added. ++ (__set_fixmap): Added. Use set_pte_phys() to set fixmap translation. ++ ++ * include/asm-sh/fixmap.h: New file. ++ ++ * include/asm-sh/pgtable.h: Adjust VMALLOC_END to play nicely with ++ fixmap. Add PAGE_KERNEL_NOCACHE. ++ ++2004-03-21 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Makefile: Remove defconfig- parsing, this is now done in a ++ generic fashion by the top-level Makefile. ++ ++ Remove -Os on CONFIG_EMBEDDED, this is now done already by ++ CONFIG_CC_OPTIMIZE_FOR_SIZE. ++ ++ * arch/sh/configs/defconfig-%: Renamed to %_defconfig. ++ * arch/sh/configs/dreamcast_defconfig: Update dreamcast defconfig. ++ ++ * Documentation/sh/new-machine.txt: Update notes about defconfigs. ++ ++ * arch/sh/Kconfig: Re-order the cpufreq options, move them into their ++ own menu in the same way i386 does. ++ ++ * arch/sh/drivers/dma/Kconfig: Place DMA options inside their own menu. ++ * arch/sh/cchips/Kconfig: Likewise. ++ ++ * drivers/video/pvr2fb.c (pvr2fb_setcolreg): Work still needs to be ++ done on the hardware palette, use the pseudo_palette as a fallback for ++ 16/32bpp modes for the time being (this could be worked around with ++ getcolreg(), but as that's gone now...). ++ ++ * drivers/maple/Kconfig: Removed. ++ ++ * drivers/input/mouse/maplemouse.c (dc_mouse_connect): init input dev, ++ cleanup compile warnings. Don't use MOD_INC_USE_COUNT. ++ (dc_mouse_disconnect): Don't use MOD_DEC_USE_COUNT. ++ ++ * drivers/input/keyboard/maple_keyb.c (dc_kbd_connect): Same as for ++ maplemouse. ++ (dc_kbd_disconnect): Likewise. ++ ++ * drivers/input/joystick/maplecontrol.c: Likewise. ++ ++ * include/asm-sh/pgtable.h (pgprot_writecombine): Added. ++ ++ * drivers/video/fbmem.c (fb_mmap): Add sh as a pgprot_writecombine() ++ user. ++ ++2004-03-16 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Add HugeTLB page size selection. ++ ++ * arch/sh/mm/Makefile: Add hugetlbpage.o ++ * arch/sh/mm/hugetlbpage.c: Cloned from sparc64. ++ * arch/sh/mm/tlb-sh4.c (update_mmu_cache): Use _PAGE_WT in the ++ CONFIG_SH_WRITETHROUGH case. ++ ++ * fs/Kconfig: Add SuperH to the list of platforms that support ++ hugetlbfs. ++ ++ * include/asm-sh/page.h: Add huge page support. ++ * include/asm-sh/pgtable.h: Make PAGE_FILE use _PAGE_WT to free ++ up _PAGE_SZ[0-1] bits and add huge page support that makes use ++ of these. ++ ++2004-03-15 Andriy Skulysh <askulysh@image.kiev.ua> ++ ++ * arch/sh/boards/hp6xx/hp680/mach.c, ++ arch/sh/boards/hp6xx/hp680/setup.c, arch/sh/cchips/hd6446x/hd64461/io.c, ++ arch/sh/cchips/hd6446x/hd64461/setup.c, arch/sh/kernel/cpu/irq_ipr.c, ++ arch/sh/kernel/sh_ksyms.c, drivers/ide/legacy/ide-cs.c, ++ drivers/input/keyboard/Kconfig, drivers/input/keyboard/Makefile, ++ drivers/input/keyboard/hp600_keyb.c, drivers/input/keyboard/scan_keyb.c, ++ drivers/input/keyboard/scan_keyb.h, drivers/pcmcia/Kconfig, ++ drivers/pcmcia/Makefile, drivers/pcmcia/hd64461_ss.c, ++ drivers/serial/sh-sci.c, drivers/video/hitfb.c, ++ include/asm-sh/cpu-sh3/dac.h, include/asm-sh/hd64461/hd64461.h, ++ include/asm-sh/hd64461/io.h, include/asm-sh/hp6xx/hp6xx.h, ++ include/asm-sh/irq.h, sound/oss/Kconfig, sound/oss/Makefile, ++ sound/oss/sh_dac_audio.c: hp680 updates. ++ ++2004-03-13 Peter Garrone <pgarrone@linuxmail.org> ++ ++ * arch/sh/kernel/traps.c (show_stack): Set stack pointer from ++ task structure so that sysrq dumps stack calltrace for each task ++ rather than N repeats of current task. ++ ++2004-03-11 Yutaro Ebihara <ebiharaml@si-linux.com> ++ Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/kernel/sys_sh.c (arch_get_unmapped_area): #ifdef'ed ++ for HAVE_ARCH_UNMAPPED_AREA. Speedup searching. ++ * include/asm-sh/cpu-sh3/cacheflush.h (HAVE_ARCH_UNMAPPED_AREA): ++ Define. ++ ++2004-03-11 Paul Mundt <lethal@linux-sh.org> ++ ++ * include/asm-sh/dma-mapping.h (dma_set_mask): Cloned from MIPS. ++ (dma_sync_single_range): Added. ++ ++ * arch/sh/boards/adx/Makefile, arch/sh/boards/bigsur/Makefile, ++ arch/sh/boards/cat68701/Makefile, arch/sh/boards/cqreek/Makefile, ++ arch/sh/boards/dmida/Makefile, arch/sh/boards/dreamcast/Makefile, ++ arch/sh/boards/ec3104/Makefile, arch/sh/boards/harp/Makefile, ++ arch/sh/boards/hp6xx/hp620/Makefile, arch/sh/boards/hp6xx/hp680/Makefile, ++ arch/sh/boards/hp6xx/hp690/Makefile, arch/sh/boards/mpc1211/Makefile, ++ arch/sh/boards/overdrive/Makefile, arch/sh/boards/saturn/Makefile, ++ arch/sh/boards/se/770x/Makefile, arch/sh/boards/se/7751/Makefile, ++ arch/sh/boards/sh2000/Makefile, arch/sh/boards/snapgear/Makefile, ++ arch/sh/boards/systemh/Makefile, arch/sh/boards/unknown/Makefile, ++ arch/sh/Kconfig, arch/sh/cchips/hd6446x/hd64461/Makefile, ++ arch/sh/cchips/hd6446x/hd64465/Makefile, arch/sh/kernel/sys_sh.c, ++ drivers/Makefile, drivers/cdrom/Makefile, drivers/char/sh-sci.c, ++ drivers/char/tty_io.c, drivers/ide/pci/alim15x3.c, drivers/ide/Kconfig, ++ drivers/pci/pci.ids, drivers/serial/Makefile, drivers/serial/Kconfig, ++ drivers/video/Makefile, drivers/video/Kconfig, drivers/video/fbmem.c, ++ drivers/Kconfig, include/asm-sh/cache.h, include/asm-sh/hardirq.h, ++ include/asm-sh/kmap_types.h, include/asm-sh/param.h, ++ include/asm-sh/unistd.h, include/linux/pci_ids.h, include/linux/mm.h, ++ include/linux/fb.h, include/linux/serial_core.h, Makefile, ++ mm/memory.c, mm/mmap.c, net/ipv4/ipconfig.c: Merge 2.6.4. ++ ++ * arch/sh/drivers/pci/Kconfig: Remove CONFIG_PCI_DMA. ++ * arch/sh/drivers/pci/Makefile: Remove pci-dma.o ++ * arch/sh/drivers/pci/pci-dma.c: Deleted. ++ * arch/sh/drivers/pci/dma-dreamcast.c (pci_alloc_consistent): ++ Renamed to __pci_alloc_consistent(). ++ (pci_free_consistent): Renamed to __pci_free_consistent(). ++ ++ * arch/sh/mm/Makefile: Add consistent.o ++ * arch/sh/mm/consistent.c: New file. ++ ++ * include/asm-sh/dma-mapping.h: Implement DMA mapping support using ++ consistent_xxxx() interface. ++ * include/asm-sh/pci.h: Wrap PCI DMA routines to DMA mapping API. ++ ++ * TODO: DMA mapping is done, knock it off the list.. ++ ++2004-02-28 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/Kconfig: Merged from mainline. Add maple. ++ ++ * drivers/maple/Kconfig: New file. ++ ++ * arch/sh/Kconfig: Get rid of the majority of drivers/ sources, use ++ the top-level drivers/Kconfig instead. Move maple definitions out ++ to their own Kconfig. ++ ++ * drivers/serial/sh-sci.c (sci_receive_chars): Fixup break_flag ++ references to satisfy SH-3 build. ++ ++2004-02-26 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/configs/defconfig-hp680: Update defconfig. ++ ++ * arch/sh/cchips/Kconfig: Add CONFIG_HD6446X_SERIES option, make this ++ selectable by anyone instead of relying on individual boards to select. ++ ++ * arch/sh/kernel/time.c: Fixup IFC/BFC/STC tables for SH-3. ++ ++ * arch/sh/boards/hp6xx/hp680/setup.c: Include asm/io.h. ++ ++ * drivers/video/hitfb.c (hitfb_set_par): Doesn't exist, don't reference ++ it in fb ops. ++ ++ * include/asm-sh/dma-mapping.h (dma_alloc_coherent): Added dummy ++ code to satisfy new dmapool interface when CONFIG_PCI=n. ++ (dma_free_coherent): Likewise. ++ ++2004-02-24 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/cpu/sh4/sq.c (sq_flush): Fix thinko, addr is input, ++ not output. ++ (sq_flush_range): Fix completion wait, read from P4SEG_STORE_QUE ++ instead of the base address of a given SQ mapping. ++ (__sq_alloc_map): Add 1 to map->size to fix an off by one issue ++ that induced an unhandled address translation fault. ++ (__sq_remap): Revamp locking to be saner for SMP and preempt. ++ Get rid of old page table setup code, setup a SQ VMA instead. ++ (sq_remap): Add sanity checks on phys addr. PAGE_ALIGN() size. ++ (sq_unmap): Get rid of old code that only worked for a single ++ translation, wrap to vfree() instead to undo the work done by ++ remap_area_pages() in __sq_remap(). ++ ++ * arch/sh/mm/ioremap.c (p3_iounmap): void function doesn't return. ++ ++2004-02-22 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/boards/se/770x/io.c (se_insb): Don't use casted object ++ as lvalue. ++ (se_insw, se_outsb, se_outsw): Likewise. ++ * arch/sh/kernel/io.c (memcpy_fromio, memcpy_toio): Likewise. ++ * arch/sh/kernel/module.c (COPY_UNALIGNED_WORD): Likewise. ++ ++2004-02-22 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/boards/se/770x/irq.c: Include the correct machine ++ specific header file. ++ * arch/sh/kernel/cf-enabler.c: Likewise. ++ * drivers/net/stnic.c: Likewise. ++ ++2004-02-21 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/entry.S (sys_call_table): Kill off .rept usage for ++ padding. Use sys_ni_syscall directly for NR_syscalls. ++ ++2004-02-20 Yoshinori Sato <ysato@users.sourceforge.jp> ++ ++ * drivers/char/sh-sci.c (sci_request_irq): Don't reference ++ sci_br_interrupt on SCI_ONLY systems. ++ ++2004-02-20 Yutaro Ebihara <ebiharaml@si-linux.com> ++ ++ * arch/sh/mm/init.c (mem_init): Set max_mapnr and num_physpages ++ correctly. ++ ++2004-02-19 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/char/watchdog/shwdt.c (sh_wdt_init): Fix build error. ++ * drivers/serial/sh-sci.h: Move PORT_SCI/SCIF/IRDA definitions .. ++ ++ * include/linux/serial_core.h: .. here. ++ ++ * include/asm-sh/pci.h (pci_map_page, pci_unmap_page): Added. ++ ++ * arch/sh/drivers/pci/Kconfig: Set CONFIG_SH_PCIDMA_NONCOHERENT by ++ default. ++ * arch/sh/mm/extable.c (search_extable): Deleted. We use the generic ++ one instead. ++ ++ * drivers/serial/sh-sci.[ch]: Add h8 support. ++ ++2004-02-19 Peter Garrone <pgarrone@linuxmail.org> ++ ++ * drivers/serial/sh-sci.c, drivers/serial/sh-sci.h: Fix rx interrupt ++ and sysrq handling. ++ ++2004-02-19 Paul Mundt <lethal@linux-sh.org> ++ Richard Curnow <richard.curnow@superh.com> ++ ++ * arch/sh/mm/cache-sh4.c (detect_cpu_and_cache_system): Add effective ++ CCN CVR probing so that the way_shift/entry_mask/sets are probed ++ from CVR.ICS/CVR.OCS at run-time on anything that isn't a direct-mapped ++ cache. ++ ++ * include/asm-sh/processor.h: Define CCN_CVR. ++ ++2004-02-19 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/mm/cache-sh4.c (flush_cache_range): Fix pte-table boundary ++ check logic. ++ (detect_cpu_and_cache_system): Don't set CPU_HAS_P2_FLUSH_BUG for ++ SH7750R. ++ ++2004-02-18 Paul Mundt <lethal@linux-sh.org> ++ ++ * Makefile, arch/sh/Kconfig, drivers/char/Makefile, ++ drivers/char/keyboard.c, drivers/char/tty_io.c, ++ drivers/char/watchdog/shwdt.c, drivers/ide/Kconfig, ++ drivers/ide/pci/alim15x3.c, drivers/net/8139too.c, ++ drivers/net/stnic.c, drivers/pci/pci.ids, drivers/video/Kconfig, ++ drivers/video/Makefile, drivers/video/fbmem.c, fs/nfs/inode.c, ++ include/asm-sh/io.h, include/asm-sh/pci.h, include/linux/fb.h, ++ include/linux/input.h, include/linux/mm.h, include/linux/pci_ids.h, ++ mm/memory.c: Merge 2.6.3. ++ ++2004-02-10 Yoshinori Sato <ysato@users.sourceforge.jp> ++ ++ * drivers/char/sh-sci.c, drivers/char/sh-sci.h: Add H8/300 support. ++ ++2004-02-06 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/kernel/process.c (copy_thread): Don't clear TIF_USEDFPU ++ here. ++ ++ * include/asm-sh/signal.h: Hide kernel stuff from userland. ++ ++2004-02-04 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig, drivers/char/keyboard.c, drivers/char/Makefile, ++ drivers/char/sysrq.c, drivers/char/tty_io.c, ++ drivers/char/watchdog/shwdt.c, drivers/ide/Kconfig, ++ drivers/input/keyboard/maple_keyb.c, drivers/net/8139too.c, ++ drivers/pci/pci.ids, drivers/serial/Kconfig, drivers/video/Makefile, ++ drivers/video/Kconfig, drivers/video/fbmem.c, fs/nfs/inode.c, ++ include/asm-sh/byteorder.h, include/asm-sh/floppy.h, ++ include/asm-sh/pgtable.h, include/asm-sh/smp.h, ++ include/asm-sh/spinlock.h, include/linux/miscdevice.h, ++ include/linux/input.h, include/linux/pci_ids.h, include/linux/mm.h, ++ Makefile, mm/memory.c, mm/mmap.c, mm/msync.c: Merge 2.6.2. ++ ++2004-02-01 Andriy Skulysh <askulysh@image.kiev.ua> ++ ++ * drivers/video/hitfb.c (hitfb_set_base, hitfb_accel_wait, ++ hitfb_accel_start, hitfb_accel_set_dest, hitfb_accel_solidfill, ++ hitfb_accel_bitblt, hitfb_fillrect, hitfb_copyarea, ++ hitfb_pan_display, hitfb_blank): Add hitfb acceleration. ++ ++ * arch/sh/boards/hp6xx/hp680/setup.c: Added. ++ ++ * arch/sh/cchips/hd6446x/hd64461/io.c (hd64461_insb, ++ hd64461_insw, hd64461_insl, hd64461_outsb, hd64461_outsw, ++ hd64461_outsl): Added. ++ ++ * arch/sh/configs/defconfig-hp680: Added. ++ ++ * include/asm-sh/hd64461/hd64461.h: Add definitions. ++ * include/asm-sh/hd64461/io.h: Add io definitions. ++ ++2004-02-01 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/video/pvr2fb.c (pvr2fb_check_var): Fix typo in pixclock ++ verification. Clean up FB_SYNC_BROADCAST mess being set even with ++ VO_VGA. And finally, don't clobber the margins when being invoked ++ through __fb_try_mode(). ++ (pvr2fb_common_init): Use fb_memset() instead of memset_io(). ++ We always have 256 cmap entries, alloc accordingly. ++ ++ * drivers/video/hitfb.c (hitfb_init): Move color bitfield setting .. ++ (hitfb_check_var): here. ++ ++ Also get rid of hd64461_xxx() IO routine usage, use fb_readX/writeX() ++ instead, use the generic routines outright, and take care of the ++ port2mem issues in the board setup code. ++ ++ * drivers/video/Makefile: Yank cfbcopyarea.o from the hitfb objs, ++ we don't use it anymore. ++ ++ * arch/sh/boards/hp6xx/hp680/setup.c (platform_setup): Setup the ++ io port base, use generic io routines. ++ ++2004-01-18 Paul Mundt <lethal@linux-sh.org> ++ ++ * include/linux/fb.h: Merged from stock 2.6.1. Add sh to the list of ++ platforms to wrap fb_xxx to __raw_xxx. ++ ++2004-01-12 Kaz Kojima <kkojima@rr.iij4u.or.jp> ++ ++ * arch/sh/kernel/signal.c (handle_signal): Disable interrupts ++ in gUSA handling when enabling preemption. ++ * arch/sh/kernel/process.c (__switch_to): Do gUSA handling ++ when enabling preemption. ++ * arch/sh/kernel/entry.S: Jump to resume_userspace if it's ++ return to user space also in preemption case. Don't use short ++ branches with far labels to avoid the assembler warnings. ++ Correct the condition for exception path. ++ ++2004-01-12 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/cpu/sh4/fpu.c (save_fpu): Clear PF_USEDFPU before ++ saving fpu to avoid fpscr corruption while preemption. ++ * arch/sh/kernel/process.c (copy_thread): Remove setting SR_FD ++ already done in unlazy_fpu. ++ ++2004-01-12 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/entry.S (restore_all): Don't inherit current FD-bit, ++ resotore saved FD-bit instead. ++ (handle_exception): Set FD-bit when entering kernel. ++ * arch/sh/kernel/cpu/sh4/fpu.c (save_fpu): Add 2nd argument 'regs'. ++ Reset FD-bit while fpu proccesing. Add 'regs' parameter for ++ release_fpu. ++ (restore_fpu): Reset FD-bit while fpu proccesing. ++ (fpu_init): Likewise. ++ (do_fpu_error): Add 'regs' parameter for save_fpu. ++ (do_fpu_state_restore): Add 'regs' parameter for grab_fpu. ++ * arch/sh/kernel/process.c (flush_thread): Add 'regs' parameter for ++ clear_fpu. ++ (dump_fpu): Add 'regs' parameter for unlazy_fpu. ++ (copy_thread): Likewise. ++ (__switch_to): Likewise. ++ * arch/sh/kernel/signal.c (save_sigcontext_fpu): Add 'regs' argument. ++ Add 'regs' parameter for unlazy_fpu. ++ (restore_sigcontext): Add 'regs' parameter for clear_fpu. ++ (setup_sigcontext): Add 'regs' parameter for save_sigcontext_fpu. ++ * arch/sh/kernel/cpu/init.c (sh_cpu_init): Use disable_fpu instead ++ of release_fpu. ++ * include/asm-sh/processor.h: Include asm/ptrace.h for struct pt_regs. ++ (start_thread): Set FD bit. ++ (enable_fpu): New function. ++ (disable_fpu): New function. ++ (release_fpu): Set FD-bit of saved SR instead of current SR. ++ (grub_fpu): Clear FD-bit of saved SR instead of current SR. ++ (unlazy_fpu): Add 'regs' argument. Pass 'regs' to save_fpu. ++ (clear_fpu): Add 'regs' argument. Pass 'regs' to release_fpu. ++ * include/asm-sh/ptrace.h: Don't include asm/processor.h ++ ++2004-01-12 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/kernel/cpu/rtc.c (sh_rtc_gettimeofday): Don't call ++ schedule_timeout. Re-read RTC registers if MSB of R64CNT was changed ++ while reading them on SH-4 which has unreliable CF bit. Reduce ++ interrupt disabled area. ++ ++2004-01-12 Masaki Saitoh <masaki-saitoh@aandd.co.jp> ++ ++ * arch/sh/kernel/cpu/rtc.c (sh_rtc_gettimeofday): Protect RTC ++ from interrupt. ++ (sh_rtc_settimeofday): Likewise. ++ * arch/sh/kernel/irq.c (do_IRQ): Prevent any preemption while ++ the handler called. ++ ++2004-01-12 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/mm/fault.c (update_mmu_cache): Protect __flush_tlb_page ++ from interrupt. ++ ++2004-01-09 Paul Mundt <lethal@linux-sh.org> ++ ++ * Makefile, arch/sh/Kconfig, arch/sh/kernel/irq.c, ++ drivers/char/keyboard.c, drivers/ide/Kconfig, ++ drivers/mtd/chips/jedec_probe.c, drivers/net/8139too.c, ++ drivers/pci/pci.ids, include/linux/input.h, include/linux/mm.h, ++ include/linux/pci_ids.h, mm/memory.c, mm/mmap.c: Merge 2.6.1. ++ ++2004-01-08 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/video/Kconfig: Drop CONFIG_FB_PVR2_DEBUG, we use the ++ standard pr_debug() facility these days. ++ * drivers/video/pvr2fb.c (pvr2fb_write): Cleanup return semantics. ++ We manually need to page_cache_release() each pinned page, regardless ++ of whether we get everything we asked for or not. ++ ++2004-01-07 Paul Mundt <lethal@linux-sh.org> ++ ++ * drivers/video/pvr2fb.c (pvr2fb_write): If we get a contiguous ++ region from get_user_pages(), do the write in one giant transfer. ++ Kill the flush_dcache_page(), this is already done in generic code. ++ (pvr2fb_init): Fix allocation typo, make sure we allocate the ++ proper size.. this was inadvertently trampling the cmap. ++ (pvr2fb_common_init): Actually allocate the cmap by way of ++ fb_alloc_cmap(). ++ ++2004-01-04 Paul Mundt <lethal@linux-sh.org> ++ ++ * scripts/treelink.sh, scripts/treeunlink.sh: Add arch and BK dirs ++ to the prune list. ++ +diff -ruN linux-2.6.17-vanilla/ChangeLog-2005 linux-2.6.17/ChangeLog-2005 +--- linux-2.6.17-vanilla/ChangeLog-2005 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/ChangeLog-2005 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,162 @@ ++2005-10-31 Andriy Skulysh <askulysh@image.kiev.ua> ++ ++ Hitfb update. ++ ++ * drivers/video/hitfb.c: Fix pannig and bitblt. ++ (hitfb_sync): New function. ++ (hitfb_check_var): New function. ++ (hitfb_set_par): New function. ++ * drivers/video/backlight/hp680_bl.c: Use platform device id -1. ++ ++2005-08-22 Andriy Skulysh <askulysh@image.kiev.ua> ++ ++ Add SH3 DMA support. ++ ++ * include/asm-sh/cpu-sh3/dma-sh.h: New file. ++ * include/asm-sh/cpu-sh4/dma-sh.h: New file. ++ * arch/sh/drivers/dma/dma-sh.c: Add SH3 DMA. ++ * arch/sh/drivers/dma/dma-sh.h: Likewise. ++ * include/asm-sh/cpu-sh3/dma.h: Likewise. ++ * include/asm-sh/dma.h: Likewise. ++ ++2005-08-15 Andriy Skulysh <askulysh@image.kiev.ua> ++ ++ Fix bug in hd64461 pcmcia module. ++ ++ * drivers/pcmcia/hd64461_ss.c: Better init procedure. ++ * arch/sh/boards/hp6xx/setup.c: Disable hd64461 pcmcia and DAC at boot. ++ ++2005-07-25 SUGIOKA Toshinobu <sugioka@itonet.co.jp> ++ ++ * arch/sh/lib/memset.S (memset): Correct 2nd argument handling. ++ ++2005-06-15 Andriy Skulysh <askulysh@image.kiev.ua> ++ ++ Add linux backlight support for HP Jornada 680. ++ ++ * drivers/video/hitfb.c: Remove jornada's backlight stuff. ++ * drivers/video/backlight/Makefile: New file. ++ * drivers/video/backlight/Kconfig: New file. ++ * drivers/video/backlight/hp680_bl.c: New file. ++ ++2005-06-10 Andriy Skulysh <askulysh@image.kiev.ua> ++ ++ Add sh7709 clock support. ++ ++ * arch/sh/kernel/cpu/clock.c: Propagate bus clock. ++ * arch/sh/kernel/cpu/sh3/clock-sh7709.c: New file. ++ * arch/sh/kernel/cpu/sh3/Makefile: Add clock-sh7709.o. ++ * sound/oss/sh_dac_audio.c: Update to clock framework. ++ ++2005-06-10 Andriy Skulysh <askulysh@image.kiev.ua> ++ ++ Fix hp6xx changes. Split HP600 keyboard routine for 620 and 680/690. ++ ++ * include/asm-sh/irq.h: Fix hp6xx changes. ++ * drivers/input/touchscreen/Kconfig: Likewise. ++ * drivers/video/hitfb.c: HP690 seems to have only 512 Kb video memory. ++ * drivers/input/keyboard/hp620_keyb.c: New file. ++ * drivers/input/keyboard/hp680_keyb.c: New file. ++ * drivers/input/keyboard/hp600_keyb.c: Removed file. ++ * drivers/input/keyboard/Makefile: Split update. ++ * drivers/input/keyboard/Kconfig: Split update. ++ ++2005-05-21 Paul Mundt <lethal@linux-sh.org> ++ ++ Patches from Hosokawa-san <hosokawa@ace-jp.com>: ++ ++ * drivers/char/Makefile: Add rtc9701_rtc rule that was dropped. ++ * drivers/char/rtc9701_rtc.c: Update rtc_lock definition. ++ (rtc9701_rtc_interrupt): Modify for irqreturn_t type. ++ ++2005-03-26 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/Kconfig: Make TMU selectable (CONFIG_SH_TMU). ++ Drop CONFIG_SH_PCLK_CALC, we make this the default if we ++ have an RTC and no set PCLK value. ++ ++ * arch/sh/boards/overdrive/Makefile: Drop time.o ++ * arch/sh/boards/overdrive/time.c: Deleted. ++ * arch/sh/boards/overdrive/setup.c (platform_setup): Drop ++ od_time_init usage, rely on the clock framework instead. ++ ++ * arch/sh/kernel/Makefile: Add timers/ ++ * arch/sh/kernel/time.c: Rip out clock and TMU code. ++ * arch/sh/kernel/setup.c: Remove clock reporting, use the generic ++ show_clocks() provided by the clock framework instead. ++ ++ * arch/sh/kernel/timers/timer.c: New file, common bits for timer ++ framework. ++ * arch/sh/kernel/timers/timer-tmu.c: Move TMU system timer code ++ here, hook into common timer framework. ++ ++ * arch/sh/kernel/cpu/Makefile: Add clock.o ++ * arch/sh/kernel/cpu/clock.c: New file, adding clock framework. ++ ++ * arch/sh/kernel/cpu/sh3/Makefile: Add clock support. ++ * arch/sh/kernel/cpu/sh3/clock-sh3.c, ++ arch/sh/kernel/cpu/sh3/clock-sh7300.c, ++ arch/sh/kernel/cpu/sh3/clock-sh7705.c: SH-3 clock support. ++ ++ * arch/sh/kernel/cpu/sh4/Makefile: Add clock support. ++ * arch/sh/kernel/cpu/sh4/clock-sh4-202.c, ++ arch/sh/kernel/cpu/sh4/clock-sh4.c, ++ arch/sh/kernel/cpu/sh4/clock-sh73180.c: SH-4 clock support. ++ ++ * drivers/serial/sh-sci.c: Update for clock framework. ++ * drivers/serial/sh-sci.h: Likewise. ++ ++ * include/asm-sh/clock.h: New file for clock framework. ++ * include/asm-sh/timer.h: New file for timer framework. ++ ++ * include/asm-sh/freq.h: Remove unused cruft. ++ * include/asm-sh/processor.h: Remove clocks from struct sh_cpuinfo. ++ ++ * include/asm-sh/timex.h: Update CLOCK_TICK_RATE to match HZ. ++ ++2005-03-10 Andriy Skulysh <askulysh@image.kiev.ua> ++ ++ * drivers/pcmcia/hd64461_ss.c (hd64461_init_soket): Update ++ for 2.6.11. ++ ++2005-03-06 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/mm/cache-sh4.c (flush_cache_range): page align the ++ end address, this was causing an unaligned fault in some cases. ++ ++ Also check the size of the range, of the range >= 64 pages, ++ just purge the entire dcache instead of manually walking the ++ page tables and checking for aliases. This gives a noticeable ++ performance win, as per sh64. ++ ++2005-03-02 Paul Mundt <lethal@linux-sh.org> ++ ++ Merge 2.6.11. ++ ++ * TODO: Get rid of the in-kernel TODO list, we will use the wiki ++ instead. ++ ++ * arch/sh/configs/*_defconfig: Update for 2.6.11. ++ ++2005-02-02 Kristoffer Ericson <kristoffer@jlime.com> ++ ++ * arch/sh/boards/hp6xx/hp620/Makefile: Add setup.o rule. ++ * arch/sh/boards/hp6xx/hp620/setup.c: New file adding hp620 setup ++ code (cloned from hp680 with some minor modification). ++ ++2005-02-01 Kristoffer Ericson <kristoffer@jlime.com> ++ ++ * drivers/pcmcia/hd64461_ss.c (hd64461_set_mem_map): Fix build problem ++ with start address. ++ ++2005-01-31 Paul Mundt <lethal@linux-sh.org> ++ ++ * arch/sh/kernel/cpufreq.c (sh_cpufreq_setstate): Update for cpumask ++ changes. ++ ++2005-01-31 Paul Mundt <lethal@linux-sh.org> ++ Christoph Hellwig <hch@lst.de> ++ ++ * arch/sh/Kconfig, arch/sh/kernel/irq.c, include/asm-sh/hardirq.h: ++ Patch from Christoph Hellwig implementing generic hardirq support. ++ Initial testing done by Tom Rini on SE7750. +diff -ruN linux-2.6.17-vanilla/Documentation/CVS/Entries linux-2.6.17/Documentation/CVS/Entries +--- linux-2.6.17-vanilla/Documentation/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/Documentation/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++D/sh//// +diff -ruN linux-2.6.17-vanilla/Documentation/CVS/Repository linux-2.6.17/Documentation/CVS/Repository +--- linux-2.6.17-vanilla/Documentation/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/Documentation/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/Documentation +diff -ruN linux-2.6.17-vanilla/Documentation/CVS/Root linux-2.6.17/Documentation/CVS/Root +--- linux-2.6.17-vanilla/Documentation/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/Documentation/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/Documentation/sh/CVS/Entries linux-2.6.17/Documentation/sh/CVS/Entries +--- linux-2.6.17-vanilla/Documentation/sh/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/Documentation/sh/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,4 @@ ++/kgdb.txt/1.2/Fri Nov 1 17:19:12 2002// ++/new-machine.txt/1.6/Sun Jan 15 17:32:05 2006// ++/register-banks.txt/1.1/Sat Jan 7 20:22:21 2006// ++D +diff -ruN linux-2.6.17-vanilla/Documentation/sh/CVS/Repository linux-2.6.17/Documentation/sh/CVS/Repository +--- linux-2.6.17-vanilla/Documentation/sh/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/Documentation/sh/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/Documentation/sh +diff -ruN linux-2.6.17-vanilla/Documentation/sh/CVS/Root linux-2.6.17/Documentation/sh/CVS/Root +--- linux-2.6.17-vanilla/Documentation/sh/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/Documentation/sh/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/Documentation/sh/new-machine.txt linux-2.6.17/Documentation/sh/new-machine.txt +--- linux-2.6.17-vanilla/Documentation/sh/new-machine.txt 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/Documentation/sh/new-machine.txt 2006-07-12 16:54:19.000000000 +0000 +@@ -41,11 +41,6 @@ + | + .. more boards here ... + +-It should also be noted that each board is required to have some certain +-headers. At the time of this writing, io.h is the only thing that needs +-to be provided for each board, and can generally just reference generic +-functions (with the exception of isa_port2addr). +- + Next, for companion chips: + . + `-- arch +@@ -104,12 +99,13 @@ + Both the Solution Engine and the hp6xx boards are an example of this. + + After you have setup your new arch/sh/boards/ directory, remember that you +-also must add a directory in include/asm-sh for headers localized to this +-board. In order to interoperate seamlessly with the build system, it's best +-to have this directory the same as the arch/sh/boards/ directory name, +-though if your board is again part of a family, the build system has ways +-of dealing with this, and you can feel free to name the directory after +-the family member itself. ++should also add a directory in include/asm-sh for headers localized to this ++board (if there are going to be more than one). In order to interoperate ++seamlessly with the build system, it's best to have this directory the same ++as the arch/sh/boards/ directory name, though if your board is again part of ++a family, the build system has ways of dealing with this (via incdir-y ++overloading), and you can feel free to name the directory after the family ++member itself. + + There are a few things that each board is required to have, both in the + arch/sh/boards and the include/asm-sh/ heirarchy. In order to better +@@ -122,6 +118,7 @@ + * arch/sh/boards/vapor/setup.c - Setup code for imaginary board + */ + #include <linux/init.h> ++#include <asm/rtc.h> /* for board_time_init() */ + + const char *get_system_type(void) + { +@@ -152,79 +149,57 @@ + } + + Our new imaginary board will also have to tie into the machvec in order for it +-to be of any use. Currently the machvec is slowly on its way out, but is still +-required for the time being. As such, let us take a look at what needs to be +-done for the machvec assignment. ++to be of any use. + + machvec functions fall into a number of categories: + + - I/O functions to IO memory (inb etc) and PCI/main memory (readb etc). +- - I/O remapping functions (ioremap etc) +- - some initialisation functions +- - a 'heartbeat' function +- - some miscellaneous flags +- +-The tree can be built in two ways: +- - as a fully generic build. All drivers are linked in, and all functions +- go through the machvec +- - as a machine specific build. In this case only the required drivers +- will be linked in, and some macros may be redefined to not go through +- the machvec where performance is important (in particular IO functions). +- +-There are three ways in which IO can be performed: +- - none at all. This is really only useful for the 'unknown' machine type, +- which us designed to run on a machine about which we know nothing, and +- so all all IO instructions do nothing. +- - fully custom. In this case all IO functions go to a machine specific +- set of functions which can do what they like +- - a generic set of functions. These will cope with most situations, +- and rely on a single function, mv_port2addr, which is called through the +- machine vector, and converts an IO address into a memory address, which +- can be read from/written to directly. +- +-Thus adding a new machine involves the following steps (I will assume I am +-adding a machine called vapor): ++ - I/O mapping functions (ioport_map, ioport_unmap, etc). ++ - a 'heartbeat' function. ++ - PCI and IRQ initialization routines. ++ - Consistent allocators (for boards that need special allocators, ++ particularly for allocating out of some board-specific SRAM for DMA ++ handles). ++ ++There are machvec functions added and removed over time, so always be sure to ++consult include/asm-sh/machvec.h for the current state of the machvec. ++ ++The kernel will automatically wrap in generic routines for undefined function ++pointers in the machvec at boot time, as machvec functions are referenced ++unconditionally throughout most of the tree. Some boards have incredibly ++sparse machvecs (such as the dreamcast and sh03), whereas others must define ++virtually everything (rts7751r2d). ++ ++Adding a new machine is relatively trivial (using vapor as an example): ++ ++If the board-specific definitions are quite minimalistic, as is the case for ++the vast majority of boards, simply having a single board-specific header is ++sufficient. + +- - add a new file include/asm-sh/vapor/io.h which contains prototypes for ++ - add a new file include/asm-sh/vapor.h which contains prototypes for + any machine specific IO functions prefixed with the machine name, for + example vapor_inb. These will be needed when filling out the machine + vector. + +- This is the minimum that is required, however there are ample +- opportunities to optimise this. In particular, by making the prototypes +- inline function definitions, it is possible to inline the function when +- building machine specific versions. Note that the machine vector +- functions will still be needed, so that a module built for a generic +- setup can be loaded. +- +- - add a new file arch/sh/boards/vapor/mach.c. This contains the definition +- of the machine vector. When building the machine specific version, this +- will be the real machine vector (via an alias), while in the generic +- version is used to initialise the machine vector, and then freed, by +- making it initdata. This should be defined as: +- +- struct sh_machine_vector mv_vapor __initmv = { +- .mv_name = "vapor", +- } +- ALIAS_MV(vapor) +- +- - finally add a file arch/sh/boards/vapor/io.c, which contains +- definitions of the machine specific io functions. +- +-A note about initialisation functions. Three initialisation functions are +-provided in the machine vector: +- - mv_arch_init - called very early on from setup_arch +- - mv_init_irq - called from init_IRQ, after the generic SH interrupt +- initialisation +- - mv_init_pci - currently not used +- +-Any other remaining functions which need to be called at start up can be +-added to the list using the __initcalls macro (or module_init if the code +-can be built as a module). Many generic drivers probe to see if the device +-they are targeting is present, however this may not always be appropriate, +-so a flag can be added to the machine vector which will be set on those +-machines which have the hardware in question, reducing the probe to a +-single conditional. ++ Note that these prototypes are generated automatically by setting ++ __IO_PREFIX to something sensible. A typical example would be: ++ ++ #define __IO_PREFIX vapor ++ #include <asm/io_generic.h> ++ ++ somewhere in the board-specific header. Any boards being ported that still ++ have a legacy io.h should remove it entirely and switch to the new model. ++ ++ - Add machine vector definitions to the board's setup.c. At a bare minimum, ++ this must be defined as something like: ++ ++ struct sh_machine_vector mv_vapor __initmv = { ++ .mv_name = "vapor", ++ }; ++ ALIAS_MV(vapor) ++ ++ - finally add a file arch/sh/boards/vapor/io.c, which contains definitions of ++ the machine specific io functions (if there are enough to warrant it). + + 3. Hooking into the Build System + ================================ +@@ -303,4 +278,3 @@ + oldconfig (prompting you for any new options since the time of creation), + and start you on your way to having a functional kernel for your new + board. +- +diff -ruN linux-2.6.17-vanilla/Documentation/sh/register-banks.txt linux-2.6.17/Documentation/sh/register-banks.txt +--- linux-2.6.17-vanilla/Documentation/sh/register-banks.txt 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/Documentation/sh/register-banks.txt 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,33 @@ ++ Notes on register bank usage in the kernel ++ ========================================== ++ ++Introduction ++------------ ++ ++The SH-3 and SH-4 CPU families traditionally include a single partial register ++bank (selected by SR.RB, only r0 ... r7 are banked), whereas other families ++may have more full-featured banking or simply no such capabilities at all. ++ ++SR.RB banking ++------------- ++ ++In the case of this type of banking, banked registers are mapped directly to ++r0 ... r7 if SR.RB is set to the bank we are interested in, otherwise ldc/stc ++can still be used to reference the banked registers (as r0_bank ... r7_bank) ++when in the context of another bank. The developer must keep the SR.RB value ++in mind when writing code that utilizes these banked registers, for obvious ++reasons. Userspace is also not able to poke at the bank1 values, so these can ++be used rather effectively as scratch registers by the kernel. ++ ++Presently the kernel uses several of these registers. ++ ++ - r0_bank, r1_bank (referenced as k0 and k1, used for scratch ++ registers when doing exception handling). ++ - r2_bank (used to track the EXPEVT/INTEVT code) ++ - Used by do_IRQ() and friends for doing irq mapping based off ++ of the interrupt exception vector jump table offset ++ - r6_bank (global interrupt mask) ++ - The SR.IMASK interrupt handler makes use of this to set the ++ interrupt priority level (used by local_irq_enable()) ++ - r7_bank (current) ++ +diff -ruN linux-2.6.17-vanilla/Makefile linux-2.6.17/Makefile +--- linux-2.6.17-vanilla/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/Makefile 2006-07-12 16:54:19.000000000 +0000 +@@ -172,7 +172,7 @@ + # Default value for CROSS_COMPILE is not to prefix executables + # Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile + +-ARCH ?= $(SUBARCH) ++ARCH ?= sh + CROSS_COMPILE ?= + + # Architecture as present in compile.h +diff -ruN linux-2.6.17-vanilla/arch/CVS/Entries linux-2.6.17/arch/CVS/Entries +--- linux-2.6.17-vanilla/arch/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++D/sh//// +diff -ruN linux-2.6.17-vanilla/arch/CVS/Repository linux-2.6.17/arch/CVS/Repository +--- linux-2.6.17-vanilla/arch/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch +diff -ruN linux-2.6.17-vanilla/arch/CVS/Root linux-2.6.17/arch/CVS/Root +--- linux-2.6.17-vanilla/arch/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/CVS/Entries linux-2.6.17/arch/sh/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,14 @@ ++/Kconfig.debug/1.4/Mon Jan 30 16:05:57 2006/-ko/ ++D/boards//// ++D/boot//// ++D/cchips//// ++D/configs//// ++D/drivers//// ++D/kernel//// ++D/lib//// ++D/mm//// ++D/oprofile//// ++D/tools//// ++/Kconfig/1.100/Wed Jul 12 16:51:50 2006/-ko/ ++/Makefile/1.65/Wed Jul 12 16:51:50 2006/-ko/ ++D/math-emu//// +diff -ruN linux-2.6.17-vanilla/arch/sh/CVS/Repository linux-2.6.17/arch/sh/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh +diff -ruN linux-2.6.17-vanilla/arch/sh/CVS/Root linux-2.6.17/arch/sh/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/Kconfig linux-2.6.17/arch/sh/Kconfig +--- linux-2.6.17-vanilla/arch/sh/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/Kconfig 2006-07-12 16:54:19.000000000 +0000 +@@ -255,7 +255,7 @@ + value on any of the known systems will only lead to disaster. + + config MEMORY_SIZE +- hex "Physical memory size" ++ hex "Physical memory size" + default "0x00400000" + help + This sets the default memory size assumed by your SH kernel. It can +@@ -335,10 +335,19 @@ + default y + help + Selecting this option will enable support for SH processors that +- have FPU units (ie, SH77xx). ++ have FPU units (ie, SH77xx). + + This option must be set in order to enable the FPU. + ++config SH_FPU_EMU ++ bool "FPU emulation support" ++ depends on !SH_FPU && EXPERIMENTAL ++ default n ++ help ++ Selecting this option will enable support for software FPU emulation. ++ Most SH-3 users will want to say Y here, whereas most SH-4 users will ++ want to say N. ++ + config SH_DSP + bool "DSP support" + depends on !CPU_SH4 +@@ -400,9 +409,11 @@ + + endmenu + +-#source "arch/sh/boards/renesas/hs7751rvoip/Kconfig" ++source "arch/sh/boards/renesas/hs7751rvoip/Kconfig" ++ ++source "arch/sh/boards/renesas/rts7751r2d/Kconfig" + +-#source "arch/sh/boards/renesas/rts7751r2d/Kconfig" ++source "arch/sh/boards/renesas/r7780rp/Kconfig" + + config SH_PCLK_FREQ + int "Peripheral clock frequency (in Hz)" +@@ -454,7 +465,7 @@ + + config ISA_DMA_API + bool +- depends on SH_MPC1211 ++ depends on MPC1211 + default y + + menu "Kernel features" +@@ -636,6 +647,16 @@ + + endmenu + ++menu "Power management options (EXPERIMENTAL)" ++depends on EXPERIMENTAL ++ ++source kernel/power/Kconfig ++ ++config APM ++ bool "Advanced Power Management Emulation" ++ depends on PM ++endmenu ++ + source "net/Kconfig" + + source "drivers/Kconfig" +diff -ruN linux-2.6.17-vanilla/arch/sh/Kconfig.debug linux-2.6.17/arch/sh/Kconfig.debug +--- linux-2.6.17-vanilla/arch/sh/Kconfig.debug 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/Kconfig.debug 2006-07-12 16:54:21.000000000 +0000 +@@ -32,6 +32,7 @@ + + config KGDB + bool "Include KGDB kernel debugger" ++ select FRAME_POINTER + help + Include in-kernel hooks for kgdb, the Linux kernel source level + debugger. See <http://kgdb.sourceforge.net/> for more information. +@@ -112,13 +113,4 @@ + + endmenu + +-config FRAME_POINTER +- bool "Compile the kernel with frame pointers" +- default y if KGDB +- help +- If you say Y here the resulting kernel image will be slightly larger +- and slower, but it will give very useful debugging information. +- If you don't debug the kernel, you can say N, but we may not be able +- to solve problems without frame pointers. +- + endmenu +diff -ruN linux-2.6.17-vanilla/arch/sh/Makefile linux-2.6.17/arch/sh/Makefile +--- linux-2.6.17-vanilla/arch/sh/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/Makefile 2006-07-12 16:54:19.000000000 +0000 +@@ -79,6 +79,7 @@ + LIBGCC := $(shell $(CC) $(CFLAGS) -print-libgcc-file-name) + + core-y += arch/sh/kernel/ arch/sh/mm/ ++core-$(CONFIG_SH_FPU_EMU) += arch/sh/math-emu/ + + # Boards + machdir-$(CONFIG_SH_SOLUTION_ENGINE) := se/770x +@@ -104,16 +105,14 @@ + machdir-$(CONFIG_SH_RTS7751R2D) := renesas/rts7751r2d + machdir-$(CONFIG_SH_7751_SYSTEMH) := renesas/systemh + machdir-$(CONFIG_SH_EDOSK7705) := renesas/edosk7705 ++machdir-$(CONFIG_SH_R7780RP) := renesas/r7780rp + machdir-$(CONFIG_SH_SH4202_MICRODEV) := superh/microdev ++machdir-$(CONFIG_SH_LANDISK) := landisk ++machdir-$(CONFIG_SH_TITAN) := titan + machdir-$(CONFIG_SH_UNKNOWN) := unknown + + incdir-y := $(notdir $(machdir-y)) +- +-incdir-$(CONFIG_SH_SOLUTION_ENGINE) := se +-incdir-$(CONFIG_SH_7751_SOLUTION_ENGINE) := se7751 +-incdir-$(CONFIG_SH_7300_SOLUTION_ENGINE) := se7300 +-incdir-$(CONFIG_SH_73180_SOLUTION_ENGINE) := se73180 +-incdir-$(CONFIG_SH_HP600) := hp6xx ++incdir-$(CONFIG_SH_HP6XX) := hp6xx + + ifneq ($(machdir-y),) + core-y += arch/sh/boards/$(machdir-y)/ +@@ -137,17 +136,14 @@ + + CPPFLAGS_vmlinux.lds := -traditional + +-ifneq ($(KBUILD_SRC),) + incdir-prefix := $(srctree)/include/asm-sh/ +-else +-incdir-prefix := +-endif + + # Update machine arch and proc symlinks if something which affects + # them changed. We use .arch and .mach to indicate when they were + # updated last, otherwise make uses the target directory mtime. + +-include/asm-sh/.cpu: $(wildcard include/config/cpu/*.h) include/config/MARKER ++include/asm-sh/.cpu: $(wildcard include/config/cpu/*.h) \ ++ include/config/MARKER FORCE + @echo ' SYMLINK include/asm-sh/cpu -> include/asm-sh/$(cpuincdir-y)' + $(Q)if [ ! -d include/asm-sh ]; then mkdir -p include/asm-sh; fi + $(Q)ln -fsn $(incdir-prefix)$(cpuincdir-y) include/asm-sh/cpu +@@ -157,7 +153,8 @@ + # don't, just reference the parent directory so the semantics are + # kept roughly the same. + +-include/asm-sh/.mach: $(wildcard include/config/sh/*.h) include/config/MARKER ++include/asm-sh/.mach: $(wildcard include/config/sh/*.h) \ ++ include/config/MARKER FORCE + @echo -n ' SYMLINK include/asm-sh/mach -> ' + $(Q)if [ ! -d include/asm-sh ]; then mkdir -p include/asm-sh; fi + $(Q)if [ -d $(incdir-prefix)$(incdir-y) ]; then \ +@@ -170,7 +167,7 @@ + fi + @touch $@ + +-archprepare: maketools include/asm-sh/.cpu include/asm-sh/.mach ++archprepare: include/asm-sh/.cpu include/asm-sh/.mach maketools + + PHONY += maketools FORCE + maketools: include/linux/version.h FORCE +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/CVS/Entries linux-2.6.17/arch/sh/boards/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,21 @@ ++D/adx//// ++D/bigsur//// ++D/cat68701//// ++D/cqreek//// ++D/dmida//// ++D/dreamcast//// ++D/ec3104//// ++D/harp//// ++D/hp6xx//// ++D/landisk//// ++D/mpc1211//// ++D/overdrive//// ++D/renesas//// ++D/saturn//// ++D/se//// ++D/sh03//// ++D/sh2000//// ++D/snapgear//// ++D/superh//// ++D/titan//// ++D/unknown//// +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/CVS/Repository linux-2.6.17/arch/sh/boards/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/CVS/Root linux-2.6.17/arch/sh/boards/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/adx/CVS/Entries linux-2.6.17/arch/sh/boards/adx/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/adx/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/adx/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,5 @@ ++/Makefile/1.5/Thu Mar 11 18:08:01 2004// ++/irq.c/1.2/Fri Nov 1 17:19:14 2002// ++/irq_maskreg.c/1.3/Fri Oct 28 13:12:47 2005/-ko/ ++/setup.c/1.4/Mon Aug 4 01:38:06 2003// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/adx/CVS/Repository linux-2.6.17/arch/sh/boards/adx/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/adx/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/adx/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/adx +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/adx/CVS/Root linux-2.6.17/arch/sh/boards/adx/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/adx/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/adx/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/bigsur/CVS/Entries linux-2.6.17/arch/sh/boards/bigsur/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/bigsur/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/bigsur/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,6 @@ ++/Makefile/1.6/Thu Mar 11 18:08:02 2004// ++/io.c/1.4/Tue Mar 8 06:46:55 2005// ++/irq.c/1.5/Fri Oct 28 13:12:47 2005// ++/led.c/1.2/Fri Nov 1 17:19:14 2002// ++/setup.c/1.5/Mon Dec 27 23:14:24 2004// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/bigsur/CVS/Repository linux-2.6.17/arch/sh/boards/bigsur/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/bigsur/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/bigsur/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/bigsur +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/bigsur/CVS/Root linux-2.6.17/arch/sh/boards/bigsur/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/bigsur/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/bigsur/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cat68701/CVS/Entries linux-2.6.17/arch/sh/boards/cat68701/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/cat68701/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/cat68701/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,4 @@ ++/Makefile/1.5/Thu Mar 11 18:08:02 2004// ++/irq.c/1.2/Fri Nov 1 17:19:15 2002// ++/setup.c/1.3/Mon Aug 4 01:44:39 2003// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cat68701/CVS/Repository linux-2.6.17/arch/sh/boards/cat68701/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/cat68701/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/cat68701/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/cat68701 +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cat68701/CVS/Root linux-2.6.17/arch/sh/boards/cat68701/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/cat68701/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/cat68701/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cqreek/CVS/Entries linux-2.6.17/arch/sh/boards/cqreek/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/cqreek/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/cqreek/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,4 @@ ++/Makefile/1.6/Thu Mar 11 18:08:02 2004// ++/irq.c/1.4/Fri Oct 28 13:12:47 2005/-ko/ ++/setup.c/1.5/Mon Aug 4 01:51:58 2003// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cqreek/CVS/Repository linux-2.6.17/arch/sh/boards/cqreek/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/cqreek/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/cqreek/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/cqreek +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cqreek/CVS/Root linux-2.6.17/arch/sh/boards/cqreek/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/cqreek/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/cqreek/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/cqreek/irq.c linux-2.6.17/arch/sh/boards/cqreek/irq.c +--- linux-2.6.17-vanilla/arch/sh/boards/cqreek/irq.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/cqreek/irq.c 2006-07-12 16:54:19.000000000 +0000 +@@ -1,4 +1,4 @@ +-/* $Id: irq.c,v 1.1.2.4 2002/11/04 20:33:56 lethal Exp $ ++/* $Id: irq.c,v 1.3 2003/05/04 19:29:46 lethal Exp $ + * + * arch/sh/boards/cqreek/irq.c + * +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dmida/CVS/Entries linux-2.6.17/arch/sh/boards/dmida/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/dmida/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/dmida/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,3 @@ ++/Makefile/1.4/Thu Mar 11 18:08:02 2004// ++/mach.c/1.5/Tue Sep 9 00:14:07 2003// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dmida/CVS/Repository linux-2.6.17/arch/sh/boards/dmida/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/dmida/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/dmida/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/dmida +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dmida/CVS/Root linux-2.6.17/arch/sh/boards/dmida/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/dmida/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/dmida/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dreamcast/CVS/Entries linux-2.6.17/arch/sh/boards/dreamcast/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/dreamcast/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/dreamcast/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,5 @@ ++/Makefile/1.7/Thu Mar 11 18:08:02 2004// ++/irq.c/1.5/Fri Aug 26 20:12:14 2005// ++/setup.c/1.8/Wed Jan 4 13:24:06 2006// ++/rtc.c/1.6/Sat Jul 8 20:16:03 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dreamcast/CVS/Repository linux-2.6.17/arch/sh/boards/dreamcast/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/dreamcast/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/dreamcast/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/dreamcast +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dreamcast/CVS/Root linux-2.6.17/arch/sh/boards/dreamcast/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/dreamcast/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/dreamcast/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dreamcast/irq.c linux-2.6.17/arch/sh/boards/dreamcast/irq.c +--- linux-2.6.17-vanilla/arch/sh/boards/dreamcast/irq.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/dreamcast/irq.c 2006-07-12 16:54:19.000000000 +0000 +@@ -26,10 +26,10 @@ + event. + + There are three 32-bit ESRs located at 0xa05f8900 - 0xa05f6908. Event +- types can be found in include/asm-sh/dc_sysasic.h. There are three groups +- of EMRs that parallel the ESRs. Each EMR group corresponds to an IRQ, so +- 0xa05f6910 - 0xa05f6918 triggers IRQ 13, 0xa05f6920 - 0xa05f6928 triggers +- IRQ 11, and 0xa05f6930 - 0xa05f6938 triggers IRQ 9. ++ types can be found in include/asm-sh/dreamcast/sysasic.h. There are three ++ groups of EMRs that parallel the ESRs. Each EMR group corresponds to an ++ IRQ, so 0xa05f6910 - 0xa05f6918 triggers IRQ 13, 0xa05f6920 - 0xa05f6928 ++ triggers IRQ 11, and 0xa05f6930 - 0xa05f6938 triggers IRQ 9. + + In the kernel, these events are mapped to virtual IRQs so that drivers can + respond to them as they would a normal interrupt. In order to keep this +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dreamcast/rtc.c linux-2.6.17/arch/sh/boards/dreamcast/rtc.c +--- linux-2.6.17-vanilla/arch/sh/boards/dreamcast/rtc.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/dreamcast/rtc.c 2006-07-12 16:54:19.000000000 +0000 +@@ -1,4 +1,5 @@ +-/* arch/sh/kernel/rtc-aica.c ++/* ++ * arch/sh/boards/dreamcast/rtc.c + * + * Dreamcast AICA RTC routines. + * +@@ -10,15 +11,12 @@ + */ + + #include <linux/time.h> +- ++#include <asm/rtc.h> + #include <asm/io.h> + +-extern void (*rtc_get_time)(struct timespec *); +-extern int (*rtc_set_time)(const time_t); +- + /* The AICA RTC has an Epoch of 1/1/1950, so we must subtract 20 years (in +- seconds to get the standard Unix Epoch when getting the time, and add 20 +- years when setting the time. */ ++ seconds) to get the standard Unix Epoch when getting the time, and add ++ 20 years when setting the time. */ + #define TWENTY_YEARS ((20 * 365LU + 5) * 86400) + + /* The AICA RTC is represented by a 32-bit seconds counter stored in 2 16-bit +@@ -32,7 +30,8 @@ + * + * Grabs the current RTC seconds counter and adjusts it to the Unix Epoch. + */ +-void aica_rtc_gettimeofday(struct timespec *ts) { ++void aica_rtc_gettimeofday(struct timespec *ts) ++{ + unsigned long val1, val2; + + do { +@@ -55,7 +54,8 @@ + * + * Adjusts the given @tv to the AICA Epoch and sets the RTC seconds counter. + */ +-int aica_rtc_settimeofday(const time_t secs) { ++int aica_rtc_settimeofday(const time_t secs) ++{ + unsigned long val1, val2; + unsigned long adj = secs + TWENTY_YEARS; + +@@ -75,7 +75,7 @@ + + void aica_time_init(void) + { +- rtc_get_time = aica_rtc_gettimeofday; +- rtc_set_time = aica_rtc_settimeofday; ++ rtc_sh_get_time = aica_rtc_gettimeofday; ++ rtc_sh_set_time = aica_rtc_settimeofday; + } + +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/dreamcast/setup.c linux-2.6.17/arch/sh/boards/dreamcast/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/dreamcast/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/dreamcast/setup.c 2006-07-12 16:54:19.000000000 +0000 +@@ -25,18 +25,16 @@ + + #include <asm/io.h> + #include <asm/irq.h> ++#include <asm/rtc.h> + #include <asm/machvec.h> +-#include <asm/machvec_init.h> + #include <asm/mach/sysasic.h> + + extern struct hw_interrupt_type systemasic_int; +-/* XXX: Move this into it's proper header. */ +-extern void (*board_time_init)(void); + extern void aica_time_init(void); + extern int gapspci_init(void); + extern int systemasic_irq_demux(int); + +-void *dreamcast_consistent_alloc(struct device *, size_t, dma_addr_t *, int); ++void *dreamcast_consistent_alloc(struct device *, size_t, dma_addr_t *, gfp_t); + int dreamcast_consistent_free(struct device *, size_t, void *, dma_addr_t); + + const char *get_system_type(void) +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/ec3104/CVS/Entries linux-2.6.17/arch/sh/boards/ec3104/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/ec3104/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/ec3104/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,5 @@ ++/Makefile/1.5/Thu Mar 11 18:08:02 2004// ++/io.c/1.2/Fri Nov 1 17:19:17 2002// ++/irq.c/1.3/Tue Sep 9 00:14:07 2003// ++/setup.c/1.3/Tue Jul 29 03:11:49 2003// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/ec3104/CVS/Repository linux-2.6.17/arch/sh/boards/ec3104/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/ec3104/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/ec3104/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/ec3104 +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/ec3104/CVS/Root linux-2.6.17/arch/sh/boards/ec3104/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/ec3104/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/ec3104/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/harp/CVS/Entries linux-2.6.17/arch/sh/boards/harp/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/harp/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/harp/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,7 @@ ++/Makefile/1.4/Thu Mar 11 18:08:02 2004// ++/irq.c/1.4/Fri Oct 28 13:12:47 2005// ++/led.c/1.2/Fri Nov 1 17:19:17 2002// ++/mach.c/1.4/Tue Sep 9 00:14:07 2003// ++/pcidma.c/1.2/Fri Nov 1 17:19:17 2002// ++/setup.c/1.3/Thu Aug 19 12:24:27 2004// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/harp/CVS/Repository linux-2.6.17/arch/sh/boards/harp/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/harp/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/harp/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/harp +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/harp/CVS/Root linux-2.6.17/arch/sh/boards/harp/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/harp/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/harp/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/CVS/Entries linux-2.6.17/arch/sh/boards/hp6xx/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/hp6xx/CVS/Entries 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,7 @@ ++/Makefile/1.2/Sun Jan 29 17:46:23 2006/-ko/ ++/hp6xx_apm.c/1.2/Mon Jan 30 15:57:17 2006// ++/mach.c/1.4/Wed Jan 4 14:53:18 2006/-ko/ ++/pm.c/1.2/Mon Jan 30 15:57:17 2006// ++/pm_wakeup.S/1.2/Mon Jan 30 15:57:17 2006// ++/setup.c/1.4/Sun Jan 29 22:13:39 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/CVS/Repository linux-2.6.17/arch/sh/boards/hp6xx/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/hp6xx/CVS/Repository 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/hp6xx +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/CVS/Root linux-2.6.17/arch/sh/boards/hp6xx/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/hp6xx/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/Makefile linux-2.6.17/arch/sh/boards/hp6xx/Makefile +--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/hp6xx/Makefile 2006-07-12 16:54:19.000000000 +0000 +@@ -2,5 +2,8 @@ + # Makefile for the HP6xx specific parts of the kernel + # + +-obj-y := mach.o setup.o ++obj-y := mach.o setup.o ++obj-$(CONFIG_PM) += pm.o pm_wakeup.o ++obj-$(CONFIG_APM) += hp6xx_apm.o ++ + +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/hp6xx_apm.c linux-2.6.17/arch/sh/boards/hp6xx/hp6xx_apm.c +--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/hp6xx_apm.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/hp6xx/hp6xx_apm.c 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,123 @@ ++/* ++ * bios-less APM driver for hp680 ++ * ++ * Copyright 2005 (c) Andriy Skulysh <askulysh@gmail.com> ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License. ++ */ ++#include <linux/config.h> ++#include <linux/module.h> ++#include <linux/apm_bios.h> ++#include <linux/kernel.h> ++#include <linux/init.h> ++#include <linux/interrupt.h> ++#include <asm/io.h> ++#include <asm/apm.h> ++#include <asm/adc.h> ++#include <asm/hp6xx/hp6xx.h> ++ ++#define SH7709_PGDR 0xa400012c ++ ++#define APM_CRITICAL 10 ++#define APM_LOW 30 ++ ++#define HP680_BATTERY_MAX 875 ++#define HP680_BATTERY_MIN 600 ++#define HP680_BATTERY_AC_ON 900 ++ ++#define MODNAME "hp6x0_apm" ++ ++static int hp6x0_apm_get_info(char *buf, char **start, off_t fpos, int length) ++{ ++ u8 pgdr; ++ char *p; ++ int battery_status; ++ int battery_flag; ++ int ac_line_status; ++ int time_units = APM_BATTERY_LIFE_UNKNOWN; ++ ++ int battery = adc_single(ADC_CHANNEL_BATTERY); ++ int backup = adc_single(ADC_CHANNEL_BACKUP); ++ int charging = adc_single(ADC_CHANNEL_CHARGE); ++ int percentage; ++ ++ percentage = 100 * (battery - HP680_BATTERY_MIN) / ++ (HP680_BATTERY_MAX - HP680_BATTERY_MIN); ++ ++ ac_line_status = (battery > HP680_BATTERY_AC_ON) ? ++ APM_AC_ONLINE : APM_AC_OFFLINE; ++ ++ p = buf; ++ ++ pgdr = ctrl_inb(SH7709_PGDR); ++ if (pgdr & PGDR_MAIN_BATTERY_OUT) { ++ battery_status = APM_BATTERY_STATUS_NOT_PRESENT; ++ battery_flag = 0x80; ++ percentage = -1; ++ } else if (charging < 8 ) { ++ battery_status = APM_BATTERY_STATUS_CHARGING; ++ battery_flag = 0x08; ++ ac_line_status = 0xff; ++ } else if (percentage <= APM_CRITICAL) { ++ battery_status = APM_BATTERY_STATUS_CRITICAL; ++ battery_flag = 0x04; ++ } else if (percentage <= APM_LOW) { ++ battery_status = APM_BATTERY_STATUS_LOW; ++ battery_flag = 0x02; ++ } else { ++ battery_status = APM_BATTERY_STATUS_HIGH; ++ battery_flag = 0x01; ++ } ++ ++ p += sprintf(p, "1.0 1.2 0x%02x 0x%02x 0x%02x 0x%02x %d%% %d %s\n", ++ APM_32_BIT_SUPPORT, ++ ac_line_status, ++ battery_status, ++ battery_flag, ++ percentage, ++ time_units, ++ "min"); ++ p += sprintf(p, "bat=%d backup=%d charge=%d\n", ++ battery, backup, charging); ++ ++ return p - buf; ++} ++ ++static irqreturn_t hp6x0_apm_interrupt(int irq, void *dev, struct pt_regs *regs) ++{ ++ if (!apm_suspended) ++ apm_queue_event(APM_USER_SUSPEND); ++ ++ return IRQ_HANDLED; ++} ++ ++static int __init hp6x0_apm_init(void) ++{ ++ int ret; ++ ++ ret = request_irq(HP680_BTN_IRQ, hp6x0_apm_interrupt, ++ SA_INTERRUPT, MODNAME, 0); ++ if (unlikely(ret < 0)) { ++ printk(KERN_ERR MODNAME ": IRQ %d request failed\n", ++ HP680_BTN_IRQ); ++ return ret; ++ } ++ ++ apm_get_info = hp6x0_apm_get_info; ++ ++ return ret; ++} ++ ++static void __exit hp6x0_apm_exit(void) ++{ ++ free_irq(HP680_BTN_IRQ, 0); ++ apm_get_info = 0; ++} ++ ++module_init(hp6x0_apm_init); ++module_exit(hp6x0_apm_exit); ++ ++MODULE_AUTHOR("Adriy Skulysh"); ++MODULE_DESCRIPTION("hp6xx Advanced Power Management"); ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/pm.c linux-2.6.17/arch/sh/boards/hp6xx/pm.c +--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/pm.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/hp6xx/pm.c 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,88 @@ ++/* ++ * hp6x0 Power Management Routines ++ * ++ * Copyright (c) 2006 Andriy Skulysh <askulsyh@gmail.com> ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License. ++ */ ++#include <linux/config.h> ++#include <linux/init.h> ++#include <linux/suspend.h> ++#include <linux/errno.h> ++#include <linux/time.h> ++#include <asm/io.h> ++#include <asm/hd64461.h> ++#include <asm/hp6xx/hp6xx.h> ++#include <asm/cpu/dac.h> ++#include <asm/pm.h> ++ ++#define STBCR 0xffffff82 ++#define STBCR2 0xffffff88 ++ ++static int hp6x0_pm_enter(suspend_state_t state) ++{ ++ u8 stbcr, stbcr2; ++#ifdef CONFIG_HD64461_ENABLER ++ u8 scr; ++ u16 hd64461_stbcr; ++#endif ++ ++ if (state != PM_SUSPEND_MEM) ++ return -EINVAL; ++ ++#ifdef CONFIG_HD64461_ENABLER ++ outb(0, HD64461_PCC1CSCIER); ++ ++ scr = inb(HD64461_PCC1SCR); ++ scr |= HD64461_PCCSCR_VCC1; ++ outb(scr, HD64461_PCC1SCR); ++ ++ hd64461_stbcr = inw(HD64461_STBCR); ++ hd64461_stbcr |= HD64461_STBCR_SPC1ST; ++ outw(hd64461_stbcr, HD64461_STBCR); ++#endif ++ ++ ctrl_outb(0x1f, DACR); ++ ++ stbcr = ctrl_inb(STBCR); ++ ctrl_outb(0x01, STBCR); ++ ++ stbcr2 = ctrl_inb(STBCR2); ++ ctrl_outb(0x7f , STBCR2); ++ ++ outw(0xf07f, HD64461_SCPUCR); ++ ++ pm_enter(); ++ ++ outw(0, HD64461_SCPUCR); ++ ctrl_outb(stbcr, STBCR); ++ ctrl_outb(stbcr2, STBCR2); ++ ++#ifdef CONFIG_HD64461_ENABLER ++ hd64461_stbcr = inw(HD64461_STBCR); ++ hd64461_stbcr &= ~HD64461_STBCR_SPC1ST; ++ outw(hd64461_stbcr, HD64461_STBCR); ++ ++ outb(0x4c, HD64461_PCC1CSCIER); ++ outb(0x00, HD64461_PCC1CSCR); ++#endif ++ ++ return 0; ++} ++ ++/* ++ * Set to PM_DISK_FIRMWARE so we can quickly veto suspend-to-disk. ++ */ ++static struct pm_ops hp6x0_pm_ops = { ++ .pm_disk_mode = PM_DISK_FIRMWARE, ++ .enter = hp6x0_pm_enter, ++}; ++ ++static int __init hp6x0_pm_init(void) ++{ ++ pm_set_ops(&hp6x0_pm_ops); ++ return 0; ++} ++ ++late_initcall(hp6x0_pm_init); +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/pm_wakeup.S linux-2.6.17/arch/sh/boards/hp6xx/pm_wakeup.S +--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/pm_wakeup.S 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/hp6xx/pm_wakeup.S 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1,58 @@ ++/* ++ * Copyright (c) 2006 Andriy Skulysh <askulsyh@gmail.com> ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ * ++ */ ++ ++#include <linux/linkage.h> ++#include <asm/cpu/mmu_context.h> ++ ++#define k0 r0 ++#define k1 r1 ++#define k2 r2 ++#define k3 r3 ++#define k4 r4 ++ ++/* ++ * Kernel mode register usage: ++ * k0 scratch ++ * k1 scratch ++ * k2 scratch (Exception code) ++ * k3 scratch (Return address) ++ * k4 scratch ++ * k5 reserved ++ * k6 Global Interrupt Mask (0--15 << 4) ++ * k7 CURRENT_THREAD_INFO (pointer to current thread info) ++ */ ++ ++ENTRY(wakeup_start) ++! clear STBY bit ++ mov #-126, k2 ++ and #127, k0 ++ mov.b k0, @k2 ++! enable refresh ++ mov.l 5f, k1 ++ mov.w 6f, k0 ++ mov.w k0, @k1 ++! jump to handler ++ mov.l 2f, k2 ++ mov.l 3f, k3 ++ mov.l @k2, k2 ++ ++ mov.l 4f, k1 ++ jmp @k1 ++ nop ++ ++ .align 2 ++1: .long EXPEVT ++2: .long INTEVT ++3: .long ret_from_irq ++4: .long handle_exception ++5: .long 0xffffff68 ++6: .word 0x0524 ++ ++ENTRY(wakeup_end) ++ nop +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/hp6xx/setup.c linux-2.6.17/arch/sh/boards/hp6xx/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/hp6xx/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/hp6xx/setup.c 2006-07-12 16:54:19.000000000 +0000 +@@ -16,6 +16,9 @@ + #include <asm/hp6xx/hp6xx.h> + #include <asm/cpu/dac.h> + ++#define SCPCR 0xa4000116 ++#define SCPDR 0xa4000136 ++ + const char *get_system_type(void) + { + return "HP6xx"; +@@ -25,6 +28,7 @@ + { + u8 v8; + u16 v; ++ + v = inw(HD64461_STBCR); + v |= HD64461_STBCR_SURTST | HD64461_STBCR_SIRST | + HD64461_STBCR_STM1ST | HD64461_STBCR_STM0ST | +@@ -51,5 +55,15 @@ + v8 &= ~DACR_DAE; + ctrl_outb(v8,DACR); + ++ v8 = ctrl_inb(SCPDR); ++ v8 |= SCPDR_TS_SCAN_X | SCPDR_TS_SCAN_Y; ++ v8 &= ~SCPDR_TS_SCAN_ENABLE; ++ ctrl_outb(v8, SCPDR); ++ ++ v = ctrl_inw(SCPCR); ++ v &= ~SCPCR_TS_MASK; ++ v |= SCPCR_TS_ENABLE; ++ ctrl_outw(v, SCPCR); ++ + return 0; + } +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/CVS/Entries linux-2.6.17/arch/sh/boards/landisk/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/landisk/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/landisk/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,7 @@ ++/Makefile/1.2/Wed Feb 8 21:55:09 2006/-ko/ ++/io.c/1.4/Sun Feb 5 21:55:28 2006/-ko/ ++/irq.c/1.2/Sat Nov 12 13:02:45 2005/-ko/ ++/landisk_pwb.c/1.2/Sat Nov 12 13:02:45 2005/-ko/ ++/setup.c/1.3/Tue Jan 3 22:51:46 2006/-ko/ ++/rtc.c/1.3/Sat Jul 8 20:16:03 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/CVS/Repository linux-2.6.17/arch/sh/boards/landisk/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/landisk/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/landisk/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/landisk +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/CVS/Root linux-2.6.17/arch/sh/boards/landisk/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/landisk/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/landisk/CVS/Root 2006-07-12 16:54:19.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/Makefile linux-2.6.17/arch/sh/boards/landisk/Makefile +--- linux-2.6.17-vanilla/arch/sh/boards/landisk/Makefile 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/landisk/Makefile 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,5 @@ ++# ++# Makefile for I-O DATA DEVICE, INC. "LANDISK Series" ++# ++ ++obj-y := setup.o io.o irq.o rtc.o landisk_pwb.o +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/io.c linux-2.6.17/arch/sh/boards/landisk/io.c +--- linux-2.6.17-vanilla/arch/sh/boards/landisk/io.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/landisk/io.c 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,250 @@ ++/* ++ * arch/sh/boards/landisk/io.c ++ * ++ * Copyright (C) 2001 Ian da Silva, Jeremy Siegel ++ * Based largely on io_se.c. ++ * ++ * I/O routine for I-O Data Device, Inc. LANDISK. ++ * ++ * Initial version only to support LAN access; some ++ * placeholder code from io_landisk.c left in with the ++ * expectation of later SuperIO and PCMCIA access. ++ */ ++/* ++ * modifed by kogiidena ++ * 2005.03.03 ++ */ ++#include <linux/kernel.h> ++#include <linux/types.h> ++#include <linux/pci.h> ++#include <asm/landisk/iodata_landisk.h> ++#include <asm/addrspace.h> ++#include <asm/io.h> ++ ++extern void *area5_io_base; /* Area 5 I/O Base address */ ++extern void *area6_io_base; /* Area 6 I/O Base address */ ++ ++static inline unsigned long port2adr(unsigned int port) ++{ ++ if ((0x1f0 <= port && port < 0x1f8) || port == 0x3f6) ++ if (port == 0x3f6) ++ return ((unsigned long)area5_io_base + 0x2c); ++ else ++ return ((unsigned long)area5_io_base + PA_PIDE_OFFSET + ++ ((port - 0x1f0) << 1)); ++ else if ((0x170 <= port && port < 0x178) || port == 0x376) ++ if (port == 0x376) ++ return ((unsigned long)area6_io_base + 0x2c); ++ else ++ return ((unsigned long)area6_io_base + PA_SIDE_OFFSET + ++ ((port - 0x170) << 1)); ++ else ++ maybebadio((unsigned long)port); ++ ++ return port; ++} ++ ++/* ++ * General outline: remap really low stuff [eventually] to SuperIO, ++ * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO) ++ * is mapped through the PCI IO window. Stuff with high bits (PXSEG) ++ * should be way beyond the window, and is used w/o translation for ++ * compatibility. ++ */ ++u8 landisk_inb(unsigned long port) ++{ ++ if (PXSEG(port)) ++ return ctrl_inb(port); ++ else if (is_pci_ioaddr(port)) ++ return ctrl_inb(pci_ioaddr(port)); ++ ++ return ctrl_inw(port2adr(port)) & 0xff; ++} ++ ++u8 landisk_inb_p(unsigned long port) ++{ ++ u8 v; ++ ++ if (PXSEG(port)) ++ v = ctrl_inb(port); ++ else if (is_pci_ioaddr(port)) ++ v = ctrl_inb(pci_ioaddr(port)); ++ else ++ v = ctrl_inw(port2adr(port)) & 0xff; ++ ++ ctrl_delay(); ++ ++ return v; ++} ++ ++u16 landisk_inw(unsigned long port) ++{ ++ if (PXSEG(port)) ++ return ctrl_inw(port); ++ else if (is_pci_ioaddr(port)) ++ return ctrl_inw(pci_ioaddr(port)); ++ else ++ maybebadio(port); ++ ++ return 0; ++} ++ ++u32 landisk_inl(unsigned long port) ++{ ++ if (PXSEG(port)) ++ return ctrl_inl(port); ++ else if (is_pci_ioaddr(port)) ++ return ctrl_inl(pci_ioaddr(port)); ++ else ++ maybebadio(port); ++ ++ return 0; ++} ++ ++void landisk_outb(u8 value, unsigned long port) ++{ ++ if (PXSEG(port)) ++ ctrl_outb(value, port); ++ else if (is_pci_ioaddr(port)) ++ ctrl_outb(value, pci_ioaddr(port)); ++ else ++ ctrl_outw(value, port2adr(port)); ++} ++ ++void landisk_outb_p(u8 value, unsigned long port) ++{ ++ if (PXSEG(port)) ++ ctrl_outb(value, port); ++ else if (is_pci_ioaddr(port)) ++ ctrl_outb(value, pci_ioaddr(port)); ++ else ++ ctrl_outw(value, port2adr(port)); ++ ctrl_delay(); ++} ++ ++void landisk_outw(u16 value, unsigned long port) ++{ ++ if (PXSEG(port)) ++ ctrl_outw(value, port); ++ else if (is_pci_ioaddr(port)) ++ ctrl_outw(value, pci_ioaddr(port)); ++ else ++ maybebadio(port); ++} ++ ++void landisk_outl(u32 value, unsigned long port) ++{ ++ if (PXSEG(port)) ++ ctrl_outl(value, port); ++ else if (is_pci_ioaddr(port)) ++ ctrl_outl(value, pci_ioaddr(port)); ++ else ++ maybebadio(port); ++} ++ ++void landisk_insb(unsigned long port, void *dst, unsigned long count) ++{ ++ volatile u16 *p; ++ u8 *buf = dst; ++ ++ if (PXSEG(port)) { ++ while (count--) ++ *buf++ = *(volatile u8 *)port; ++ } else if (is_pci_ioaddr(port)) { ++ volatile u8 *bp = (volatile u8 *)pci_ioaddr(port); ++ ++ while (count--) ++ *buf++ = *bp; ++ } else { ++ p = (volatile u16 *)port2adr(port); ++ while (count--) ++ *buf++ = *p & 0xff; ++ } ++} ++ ++void landisk_insw(unsigned long port, void *dst, unsigned long count) ++{ ++ volatile u16 *p; ++ u16 *buf = dst; ++ ++ if (PXSEG(port)) ++ p = (volatile u16 *)port; ++ else if (is_pci_ioaddr(port)) ++ p = (volatile u16 *)pci_ioaddr(port); ++ else ++ p = (volatile u16 *)port2adr(port); ++ while (count--) ++ *buf++ = *p; ++} ++ ++void landisk_insl(unsigned long port, void *dst, unsigned long count) ++{ ++ u32 *buf = dst; ++ ++ if (is_pci_ioaddr(port)) { ++ volatile u32 *p = (volatile u32 *)pci_ioaddr(port); ++ ++ while (count--) ++ *buf++ = *p; ++ } else ++ maybebadio(port); ++} ++ ++void landisk_outsb(unsigned long port, const void *src, unsigned long count) ++{ ++ volatile u16 *p; ++ const u8 *buf = src; ++ ++ if (PXSEG(port)) ++ while (count--) ++ ctrl_outb(*buf++, port); ++ else if (is_pci_ioaddr(port)) { ++ volatile u8 *bp = (volatile u8 *)pci_ioaddr(port); ++ ++ while (count--) ++ *bp = *buf++; ++ } else { ++ p = (volatile u16 *)port2adr(port); ++ while (count--) ++ *p = *buf++; ++ } ++} ++ ++void landisk_outsw(unsigned long port, const void *src, unsigned long count) ++{ ++ volatile u16 *p; ++ const u16 *buf = src; ++ ++ if (PXSEG(port)) ++ p = (volatile u16 *)port; ++ else if (is_pci_ioaddr(port)) ++ p = (volatile u16 *)pci_ioaddr(port); ++ else ++ p = (volatile u16 *)port2adr(port); ++ ++ while (count--) ++ *p = *buf++; ++} ++ ++void landisk_outsl(unsigned long port, const void *src, unsigned long count) ++{ ++ const u32 *buf = src; ++ ++ if (is_pci_ioaddr(port)) { ++ volatile u32 *p = (volatile u32 *)pci_ioaddr(port); ++ ++ while (count--) ++ *p = *buf++; ++ } else ++ maybebadio(port); ++} ++ ++void __iomem *landisk_ioport_map(unsigned long port, unsigned int size) ++{ ++ if (PXSEG(port)) ++ return (void __iomem *)port; ++ else if (is_pci_ioaddr(port)) ++ return (void __iomem *)pci_ioaddr(port); ++ ++ return (void __iomem *)port2adr(port); ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/irq.c linux-2.6.17/arch/sh/boards/landisk/irq.c +--- linux-2.6.17-vanilla/arch/sh/boards/landisk/irq.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/landisk/irq.c 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,105 @@ ++/* ++ * arch/sh/boards/landisk/irq.c ++ * ++ * Copyright (C) 2001 Ian da Silva, Jeremy Siegel ++ * Based largely on io_se.c. ++ * ++ * I/O routine for I-O Data Device, Inc. LANDISK. ++ * ++ * Initial version only to support LAN access; some ++ * placeholder code from io_landisk.c left in with the ++ * expectation of later SuperIO and PCMCIA access. ++ */ ++/* ++ * modified by kogiidena ++ * 2005.03.03 ++ */ ++ ++#include <linux/config.h> ++#include <linux/init.h> ++#include <linux/irq.h> ++#include <asm/io.h> ++#include <asm/irq.h> ++#include <asm/landisk/iodata_landisk.h> ++ ++static void enable_landisk_irq(unsigned int irq); ++static void disable_landisk_irq(unsigned int irq); ++ ++/* shutdown is same as "disable" */ ++#define shutdown_landisk_irq disable_landisk_irq ++ ++static void ack_landisk_irq(unsigned int irq); ++static void end_landisk_irq(unsigned int irq); ++ ++static unsigned int startup_landisk_irq(unsigned int irq) ++{ ++ enable_landisk_irq(irq); ++ return 0; /* never anything pending */ ++} ++ ++static void disable_landisk_irq(unsigned int irq) ++{ ++ unsigned long flags; ++ unsigned char val; ++ unsigned char mask = 0xff ^ (0x01 << (irq - 5)); ++ ++ /* Set the priority in IPR to 0 */ ++ local_irq_save(flags); ++ val = ctrl_inb(PA_IMASK); ++ val &= mask; ++ ctrl_outb(val, PA_IMASK); ++ local_irq_restore(flags); ++} ++ ++static void enable_landisk_irq(unsigned int irq) ++{ ++ unsigned long flags; ++ unsigned char val; ++ unsigned char value = (0x01 << (irq - 5)); ++ ++ /* Set priority in IPR back to original value */ ++ local_irq_save(flags); ++ val = ctrl_inb(PA_IMASK); ++ val |= value; ++ ctrl_outb(val, PA_IMASK); ++ local_irq_restore(flags); ++} ++ ++static void ack_landisk_irq(unsigned int irq) ++{ ++ disable_landisk_irq(irq); ++} ++ ++static void end_landisk_irq(unsigned int irq) ++{ ++ if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) ++ enable_landisk_irq(irq); ++} ++ ++static struct hw_interrupt_type landisk_irq_type = { ++ .typename = "LANDISK IRQ", ++ .startup = startup_landisk_irq, ++ .shutdown = shutdown_landisk_irq, ++ .enable = enable_landisk_irq, ++ .disable = disable_landisk_irq, ++ .ack = ack_landisk_irq, ++ .end = end_landisk_irq ++}; ++ ++static void make_landisk_irq(unsigned int irq) ++{ ++ disable_irq_nosync(irq); ++ irq_desc[irq].handler = &landisk_irq_type; ++ disable_landisk_irq(irq); ++} ++ ++/* ++ * Initialize IRQ setting ++ */ ++void __init init_landisk_IRQ(void) ++{ ++ int i; ++ ++ for (i = 5; i < 14; i++) ++ make_landisk_irq(i); ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/landisk_pwb.c linux-2.6.17/arch/sh/boards/landisk/landisk_pwb.c +--- linux-2.6.17-vanilla/arch/sh/boards/landisk/landisk_pwb.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/landisk/landisk_pwb.c 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,348 @@ ++/* ++ * arch/sh/boards/landisk/landisk_pwb.c -- driver for the Power control switch. ++ * ++ * This driver will also support the I-O DATA Device, Inc. LANDISK Board. ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ * ++ * Copylight (C) 2002 Atom Create Engineering Co., Ltd. ++ * ++ * LED control drive function added by kogiidena ++ */ ++ ++#include <linux/config.h> ++#include <linux/module.h> ++#include <linux/errno.h> ++#include <linux/signal.h> ++#include <linux/major.h> ++#include <linux/poll.h> ++#include <linux/init.h> ++#include <linux/delay.h> ++#include <linux/sched.h> ++#include <linux/timer.h> ++#include <linux/interrupt.h> ++ ++#include <asm/system.h> ++#include <asm/io.h> ++#include <asm/irq.h> ++#include <asm/uaccess.h> ++#include <asm/landisk/iodata_landisk.h> ++ ++#define SHUTDOWN_BTN_MINOR 1 /* Shutdown button device minor no. */ ++#define LED_MINOR 21 /* LED minor no. */ ++#define BTN_MINOR 22 /* BUTTON minor no. */ ++#define GIO_MINOR 40 /* GIO minor no. */ ++ ++static int openCnt; ++static int openCntLED; ++static int openCntGio; ++static int openCntBtn; ++static int landisk_btn; ++static int landisk_btnctrlpid; ++/* ++ * Functions prototypes ++ */ ++ ++static int gio_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, ++ unsigned long arg); ++ ++static int swdrv_open(struct inode *inode, struct file *filp) ++{ ++ int minor; ++ ++ minor = MINOR(inode->i_rdev); ++ filp->private_data = (void *)minor; ++ ++ if (minor == SHUTDOWN_BTN_MINOR) { ++ if (openCnt > 0) { ++ return -EALREADY; ++ } else { ++ openCnt++; ++ return 0; ++ } ++ } else if (minor == LED_MINOR) { ++ if (openCntLED > 0) { ++ return -EALREADY; ++ } else { ++ openCntLED++; ++ return 0; ++ } ++ } else if (minor == BTN_MINOR) { ++ if (openCntBtn > 0) { ++ return -EALREADY; ++ } else { ++ openCntBtn++; ++ return 0; ++ } ++ } else if (minor == GIO_MINOR) { ++ if (openCntGio > 0) { ++ return -EALREADY; ++ } else { ++ openCntGio++; ++ return 0; ++ } ++ } ++ return -ENOENT; ++ ++} ++ ++static int swdrv_close(struct inode *inode, struct file *filp) ++{ ++ int minor; ++ ++ minor = MINOR(inode->i_rdev); ++ if (minor == SHUTDOWN_BTN_MINOR) { ++ openCnt--; ++ } else if (minor == LED_MINOR) { ++ openCntLED--; ++ } else if (minor == BTN_MINOR) { ++ openCntBtn--; ++ } else if (minor == GIO_MINOR) { ++ openCntGio--; ++ } ++ return 0; ++} ++ ++static int swdrv_read(struct file *filp, char *buff, size_t count, ++ loff_t * ppos) ++{ ++ int minor; ++ minor = (int)(filp->private_data); ++ ++ if (!access_ok(VERIFY_WRITE, (void *)buff, count)) ++ return -EFAULT; ++ ++ if (minor == SHUTDOWN_BTN_MINOR) { ++ if (landisk_btn & 0x10) { ++ put_user(1, buff); ++ return 1; ++ } else { ++ return 0; ++ } ++ } ++ return 0; ++} ++ ++static int swdrv_write(struct file *filp, const char *buff, size_t count, ++ loff_t * ppos) ++{ ++ int minor; ++ minor = (int)(filp->private_data); ++ ++ if (minor == SHUTDOWN_BTN_MINOR) { ++ return count; ++ } ++ return count; ++} ++ ++static irqreturn_t sw_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ landisk_btn = (0x0ff & (~ctrl_inb(PA_STATUS))); ++ disable_irq(IRQ_BUTTON); ++ disable_irq(IRQ_POWER); ++ ctrl_outb(0x00, PA_PWRINT_CLR); ++ ++ if (landisk_btnctrlpid != 0) { ++ kill_proc(landisk_btnctrlpid, SIGUSR1, 1); ++ landisk_btnctrlpid = 0; ++ } ++ ++ return IRQ_HANDLED; ++} ++ ++static struct file_operations swdrv_fops = { ++ .read = swdrv_read, /* read */ ++ .write = swdrv_write, /* write */ ++ .open = swdrv_open, /* open */ ++ .release = swdrv_close, /* release */ ++ .ioctl = gio_ioctl, /* ioctl */ ++ ++}; ++ ++static char banner[] __initdata = ++ KERN_INFO "LANDISK and USL-5P Button, LED and GIO driver initialized\n"; ++ ++int __init swdrv_init(void) ++{ ++ int error; ++ ++ printk("%s", banner); ++ ++ openCnt = 0; ++ openCntLED = 0; ++ openCntBtn = 0; ++ openCntGio = 0; ++ landisk_btn = 0; ++ landisk_btnctrlpid = 0; ++ ++ if ((error = register_chrdev(SHUTDOWN_BTN_MAJOR, "swdrv", &swdrv_fops))) { ++ printk(KERN_ERR ++ "Button, LED and GIO driver:Couldn't register driver, error=%d\n", ++ error); ++ return 1; ++ } ++ ++ if (request_irq(IRQ_POWER, sw_interrupt, 0, "SHUTDOWNSWITCH", NULL)) { ++ printk(KERN_ERR "Unable to get IRQ 11.\n"); ++ return 1; ++ } ++ if (request_irq(IRQ_BUTTON, sw_interrupt, 0, "USL-5P BUTTON", NULL)) { ++ printk(KERN_ERR "Unable to get IRQ 12.\n"); ++ return 1; ++ } ++ ctrl_outb(0x00, PA_PWRINT_CLR); ++ ++ return 0; ++} ++ ++module_init(swdrv_init); ++ ++/* ++ * gio driver ++ * ++ */ ++ ++#include <asm/landisk/gio.h> ++ ++static int gio_ioctl(struct inode *inode, struct file *filp, ++ unsigned int cmd, unsigned long arg) ++{ ++ int minor; ++ unsigned int data, mask; ++ static unsigned int addr = 0; ++ ++ minor = (int)(filp->private_data); ++ ++ /* access control */ ++ if (minor == GIO_MINOR) { ++ ; ++ } else if (minor == LED_MINOR) { ++ if (((cmd & 0x0ff) >= 9) && ((cmd & 0x0ff) < 20)) { ++ ; ++ } else { ++ return -EINVAL; ++ } ++ } else if (minor == BTN_MINOR) { ++ if (((cmd & 0x0ff) >= 20) && ((cmd & 0x0ff) < 30)) { ++ ; ++ } else { ++ return -EINVAL; ++ } ++ } else { ++ return -EINVAL; ++ } ++ ++ if (cmd & 0x01) { /* write */ ++ if (copy_from_user(&data, (int *)arg, sizeof(int))) { ++ return -EFAULT; ++ } ++ } ++ ++ switch (cmd) { ++ case GIODRV_IOCSGIOSETADDR: /* addres set */ ++ addr = data; ++ break; ++ ++ case GIODRV_IOCSGIODATA1: /* write byte */ ++ ctrl_outb((unsigned char)(0x0ff & data), addr); ++ break; ++ ++ case GIODRV_IOCSGIODATA2: /* write word */ ++ if (addr & 0x01) { ++ return -EFAULT; ++ } ++ ctrl_outw((unsigned short int)(0x0ffff & data), addr); ++ break; ++ ++ case GIODRV_IOCSGIODATA4: /* write long */ ++ if (addr & 0x03) { ++ return -EFAULT; ++ } ++ ctrl_outl(data, addr); ++ break; ++ ++ case GIODRV_IOCGGIODATA1: /* read byte */ ++ data = ctrl_inb(addr); ++ break; ++ ++ case GIODRV_IOCGGIODATA2: /* read word */ ++ if (addr & 0x01) { ++ return -EFAULT; ++ } ++ data = ctrl_inw(addr); ++ break; ++ ++ case GIODRV_IOCGGIODATA4: /* read long */ ++ if (addr & 0x03) { ++ return -EFAULT; ++ } ++ data = ctrl_inl(addr); ++ break; ++ case GIODRV_IOCSGIO_LED: /* write */ ++ mask = ((data & 0x00ffffff) << 8) ++ | ((data & 0x0000ffff) << 16) ++ | ((data & 0x000000ff) << 24); ++ landisk_ledparam = data & (~mask); ++ if (landisk_arch == 0) { /* arch == landisk */ ++ landisk_ledparam &= 0x03030303; ++ mask = (~(landisk_ledparam >> 22)) & 0x000c; ++ landisk_ledparam |= mask; ++ } else { /* arch == usl-5p */ ++ mask = (landisk_ledparam >> 24) & 0x0001; ++ landisk_ledparam |= mask; ++ landisk_ledparam &= 0x007f7f7f; ++ } ++ landisk_ledparam |= 0x80; ++ break; ++ case GIODRV_IOCGGIO_LED: /* read */ ++ data = landisk_ledparam; ++ if (landisk_arch == 0) { /* arch == landisk */ ++ data &= 0x03030303; ++ } else { /* arch == usl-5p */ ++ ; ++ } ++ data &= (~0x080); ++ break; ++ case GIODRV_IOCSGIO_BUZZER: /* write */ ++ landisk_buzzerparam = data; ++ landisk_ledparam |= 0x80; ++ break; ++ case GIODRV_IOCGGIO_LANDISK: /* read */ ++ data = landisk_arch & 0x01; ++ break; ++ case GIODRV_IOCGGIO_BTN: /* read */ ++ data = (0x0ff & ctrl_inb(PA_PWRINT_CLR)); ++ data <<= 8; ++ data |= (0x0ff & ctrl_inb(PA_IMASK)); ++ data <<= 8; ++ data |= (0x0ff & landisk_btn); ++ data <<= 8; ++ data |= (0x0ff & (~ctrl_inb(PA_STATUS))); ++ break; ++ case GIODRV_IOCSGIO_BTNPID: /* write */ ++ landisk_btnctrlpid = data; ++ landisk_btn = 0; ++ if (irq_desc[IRQ_BUTTON].depth) { ++ enable_irq(IRQ_BUTTON); ++ } ++ if (irq_desc[IRQ_POWER].depth) { ++ enable_irq(IRQ_POWER); ++ } ++ break; ++ case GIODRV_IOCGGIO_BTNPID: /* read */ ++ data = landisk_btnctrlpid; ++ break; ++ default: ++ return -EFAULT; ++ break; ++ } ++ ++ if ((cmd & 0x01) == 0) { /* read */ ++ if (copy_to_user((int *)arg, &data, sizeof(int))) { ++ return -EFAULT; ++ } ++ } ++ return 0; ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/rtc.c linux-2.6.17/arch/sh/boards/landisk/rtc.c +--- linux-2.6.17-vanilla/arch/sh/boards/landisk/rtc.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/landisk/rtc.c 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,93 @@ ++/* ++ * arch/sh/boards/landisk/rtc.c -- RTC support ++ * ++ * Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org> ++ * Copyright (C) 1999 Tetsuya Okada & Niibe Yutaka ++ */ ++/* ++ * modifed by kogiidena ++ * 2005.09.16 ++ */ ++ ++#include <linux/config.h> ++#include <linux/init.h> ++#include <linux/kernel.h> ++#include <linux/sched.h> ++#include <linux/time.h> ++#include <linux/delay.h> ++#include <linux/spinlock.h> ++#include <linux/bcd.h> ++#include <asm/rtc.h> ++ ++extern spinlock_t rtc_lock; ++ ++extern void ++rs5c313_set_cmos_time(unsigned int BCD_yr, unsigned int BCD_mon, ++ unsigned int BCD_day, unsigned int BCD_hr, ++ unsigned int BCD_min, unsigned int BCD_sec); ++ ++extern unsigned long ++rs5c313_get_cmos_time(unsigned int *BCD_yr, unsigned int *BCD_mon, ++ unsigned int *BCD_day, unsigned int *BCD_hr, ++ unsigned int *BCD_min, unsigned int *BCD_sec); ++ ++void landisk_rtc_gettimeofday(struct timespec *tv) ++{ ++ unsigned int BCD_yr, BCD_mon, BCD_day, BCD_hr, BCD_min, BCD_sec; ++ unsigned long flags; ++ ++ spin_lock_irqsave(&rtc_lock, flags); ++ tv->tv_sec = rs5c313_get_cmos_time ++ (&BCD_yr, &BCD_mon, &BCD_day, &BCD_hr, &BCD_min, &BCD_sec); ++ tv->tv_nsec = 0; ++ spin_unlock_irqrestore(&rtc_lock, flags); ++} ++ ++int landisk_rtc_settimeofday(const time_t secs) ++{ ++ int retval = 0; ++ int real_seconds, real_minutes, cmos_minutes; ++ unsigned long flags; ++ unsigned long nowtime = secs; ++ unsigned int BCD_yr, BCD_mon, BCD_day, BCD_hr, BCD_min, BCD_sec; ++ ++ spin_lock_irqsave(&rtc_lock, flags); ++ ++ rs5c313_get_cmos_time ++ (&BCD_yr, &BCD_mon, &BCD_day, &BCD_hr, &BCD_min, &BCD_sec); ++ cmos_minutes = BCD_min; ++ BCD_TO_BIN(cmos_minutes); ++ ++ /* ++ * since we're only adjusting minutes and seconds, ++ * don't interfere with hour overflow. This avoids ++ * messing with unknown time zones but requires your ++ * RTC not to be off by more than 15 minutes ++ */ ++ real_seconds = nowtime % 60; ++ real_minutes = nowtime / 60; ++ if (((abs(real_minutes - cmos_minutes) + 15) / 30) & 1) ++ real_minutes += 30; /* correct for half hour time zone */ ++ real_minutes %= 60; ++ ++ if (abs(real_minutes - cmos_minutes) < 30) { ++ BIN_TO_BCD(real_seconds); ++ BIN_TO_BCD(real_minutes); ++ rs5c313_set_cmos_time(BCD_yr, BCD_mon, BCD_day, BCD_hr, ++ real_minutes, real_seconds); ++ } else { ++ printk(KERN_WARNING ++ "set_rtc_time: can't update from %d to %d\n", ++ cmos_minutes, real_minutes); ++ retval = -1; ++ } ++ ++ spin_unlock_irqrestore(&rtc_lock, flags); ++ return retval; ++} ++ ++void landisk_time_init(void) ++{ ++ rtc_sh_get_time = landisk_rtc_gettimeofday; ++ rtc_sh_set_time = landisk_rtc_settimeofday; ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/landisk/setup.c linux-2.6.17/arch/sh/boards/landisk/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/landisk/setup.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/landisk/setup.c 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,179 @@ ++/* ++ * arch/sh/boards/landisk/setup.c ++ * ++ * Copyright (C) 2000 Kazumoto Kojima ++ * Copyright (C) 2002 Paul Mundt ++ * ++ * I-O DATA Device, Inc. LANDISK Support. ++ * ++ * Modified for LANDISK by ++ * Atom Create Engineering Co., Ltd. 2002. ++ * ++ * modifed by kogiidena ++ * 2005.09.16 ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ ++#include <linux/config.h> ++#include <linux/init.h> ++#include <linux/pm.h> ++#include <linux/mm.h> ++#include <asm/machvec.h> ++#include <asm/rtc.h> ++#include <asm/landisk/iodata_landisk.h> ++#include <asm/io.h> ++ ++void landisk_time_init(void); ++void init_landisk_IRQ(void); ++ ++int landisk_ledparam; ++int landisk_buzzerparam; ++int landisk_arch; ++ ++/* cycle the led's in the clasic knightrider/sun pattern */ ++static void heartbeat_landisk(void) ++{ ++ static unsigned int cnt = 0, blink = 0x00, period = 25; ++ volatile u8 *p = (volatile u8 *)PA_LED; ++ char data; ++ ++ if ((landisk_ledparam & 0x080) == 0) ++ return; ++ ++ cnt += 1; ++ ++ if (cnt < period) ++ return; ++ ++ cnt = 0; ++ blink++; ++ ++ data = (blink & 0x01) ? (landisk_ledparam >> 16) : 0; ++ data |= (blink & 0x02) ? (landisk_ledparam >> 8) : 0; ++ data |= landisk_ledparam; ++ ++ /* buzzer */ ++ if (landisk_buzzerparam & 0x1) { ++ data |= 0x80; ++ } else { ++ data &= 0x7f; ++ } ++ *p = data; ++ ++ if (((landisk_ledparam & 0x007f7f00) == 0) && ++ (landisk_buzzerparam == 0)) ++ landisk_ledparam &= (~0x0080); ++ ++ landisk_buzzerparam >>= 1; ++} ++ ++/* ++ * The Machine Vector ++ */ ++struct sh_machine_vector mv_landisk __initmv = { ++ .mv_nr_irqs = 72, ++ .mv_inb = landisk_inb, ++ .mv_inw = landisk_inw, ++ .mv_inl = landisk_inl, ++ .mv_outb = landisk_outb, ++ .mv_outw = landisk_outw, ++ .mv_outl = landisk_outl, ++ .mv_inb_p = landisk_inb_p, ++ .mv_inw_p = landisk_inw, ++ .mv_inl_p = landisk_inl, ++ .mv_outb_p = landisk_outb_p, ++ .mv_outw_p = landisk_outw, ++ .mv_outl_p = landisk_outl, ++ .mv_insb = landisk_insb, ++ .mv_insw = landisk_insw, ++ .mv_insl = landisk_insl, ++ .mv_outsb = landisk_outsb, ++ .mv_outsw = landisk_outsw, ++ .mv_outsl = landisk_outsl, ++ .mv_ioport_map = landisk_ioport_map, ++ .mv_init_irq = init_landisk_IRQ, ++#ifdef CONFIG_HEARTBEAT ++ .mv_heartbeat = heartbeat_landisk, ++#endif ++}; ++ALIAS_MV(landisk) ++ ++const char *get_system_type(void) ++{ ++ return "LANDISK"; ++} ++ ++static void landisk_power_off(void) ++{ ++ ctrl_outb(0x01, PA_SHUTDOWN); ++} ++ ++static void check_usl5p(void) ++{ ++ volatile u8 *p = (volatile u8 *)PA_LED; ++ u8 tmp1, tmp2; ++ ++ tmp1 = *p; ++ *p = 0x40; ++ tmp2 = *p; ++ *p = tmp1; ++ ++ landisk_arch = (tmp2 == 0x40); ++ if (landisk_arch == 1) { ++ /* arch == usl-5p */ ++ landisk_ledparam = 0x00000380; ++ landisk_ledparam |= (tmp1 & 0x07c); ++ } else { ++ /* arch == landisk */ ++ landisk_ledparam = 0x02000180; ++ landisk_ledparam |= 0x04; ++ } ++} ++ ++void __init platform_setup(void) ++{ ++ landisk_buzzerparam = 0; ++ check_usl5p(); ++ ++ printk(KERN_INFO "I-O DATA DEVICE, INC. \"LANDISK Series\" support.\n"); ++ board_time_init = landisk_time_init; ++ pm_power_off = landisk_power_off; ++} ++ ++void *area5_io_base; ++void *area6_io_base; ++ ++static int __init landisk_cf_init(void) ++{ ++ pgprot_t prot; ++ unsigned long paddrbase, psize; ++ ++ /* open I/O area window */ ++ paddrbase = virt_to_phys((void *)PA_AREA5_IO); ++ psize = PAGE_SIZE; ++ prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_IO16); ++ area5_io_base = p3_ioremap(paddrbase, psize, prot.pgprot); ++ if (!area5_io_base) { ++ printk("allocate_cf_area : can't open CF I/O window!\n"); ++ return -ENOMEM; ++ } ++ ++ paddrbase = virt_to_phys((void *)PA_AREA6_IO); ++ psize = PAGE_SIZE; ++ prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_IO16); ++ area6_io_base = p3_ioremap(paddrbase, psize, prot.pgprot); ++ if (!area6_io_base) { ++ printk("allocate_cf_area : can't open HDD I/O window!\n"); ++ return -ENOMEM; ++ } ++ ++ printk(KERN_INFO "Allocate Area5/6 success.\n"); ++ ++ /* XXX : do we need attribute and common-memory area also? */ ++ ++ return 0; ++} ++ ++__initcall(landisk_cf_init); +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/mpc1211/CVS/Entries linux-2.6.17/arch/sh/boards/mpc1211/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/mpc1211/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/mpc1211/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,6 @@ ++/Makefile/1.4/Thu Mar 11 18:08:02 2004/-ko/ ++/led.c/1.1/Fri May 16 17:18:15 2003/-ko/ ++/pci.c/1.6/Mon Oct 25 10:41:01 2004/-ko/ ++/setup.c/1.4/Sun Feb 5 21:55:28 2006/-ko/ ++/rtc.c/1.4/Sat Jul 8 20:16:04 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/mpc1211/CVS/Repository linux-2.6.17/arch/sh/boards/mpc1211/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/mpc1211/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/mpc1211/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/mpc1211 +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/mpc1211/CVS/Root linux-2.6.17/arch/sh/boards/mpc1211/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/mpc1211/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/mpc1211/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/mpc1211/rtc.c linux-2.6.17/arch/sh/boards/mpc1211/rtc.c +--- linux-2.6.17-vanilla/arch/sh/boards/mpc1211/rtc.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/mpc1211/rtc.c 2006-07-12 16:54:20.000000000 +0000 +@@ -130,7 +130,7 @@ + + void mpc1211_time_init(void) + { +- rtc_get_time = mpc1211_rtc_gettimeofday; +- rtc_set_time = mpc1211_rtc_settimeofday; ++ rtc_sh_get_time = mpc1211_rtc_gettimeofday; ++ rtc_sh_set_time = mpc1211_rtc_settimeofday; + } + +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/mpc1211/setup.c linux-2.6.17/arch/sh/boards/mpc1211/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/mpc1211/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/mpc1211/setup.c 2006-07-12 16:54:20.000000000 +0000 +@@ -256,23 +256,12 @@ + } + } + +-/* +- Initialize the board +-*/ +- +- +-static void delay (void) +-{ +- volatile unsigned short tmp; +- tmp = *(volatile unsigned short *) 0xa0000000; +-} +- +-static void delay1000 (void) ++static void delay1000(void) + { + int i; + + for (i=0; i<1000; i++) +- delay (); ++ ctrl_delay(); + } + + static int put_smb_blk(unsigned char *p, int address, int command, int no) +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/overdrive/CVS/Entries linux-2.6.17/arch/sh/boards/overdrive/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/overdrive/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/overdrive/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,11 @@ ++/Makefile/1.5/Sat Mar 26 20:25:35 2005// ++/fpga.c/1.2/Fri Nov 1 17:19:19 2002// ++/galileo.c/1.4/Mon Oct 25 10:41:01 2004// ++/io.c/1.2/Fri Nov 1 17:19:19 2002// ++/irq.c/1.4/Fri Oct 28 13:12:48 2005// ++/led.c/1.3/Sun May 4 19:29:47 2003// ++/mach.c/1.4/Tue Sep 9 00:14:07 2003// ++/overdrive.ttf/1.2/Fri Nov 1 17:19:19 2002// ++/pcidma.c/1.3/Mon Dec 27 23:14:24 2004// ++/setup.c/1.3/Sat Mar 26 20:25:35 2005// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/overdrive/CVS/Repository linux-2.6.17/arch/sh/boards/overdrive/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/overdrive/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/overdrive/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/overdrive +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/overdrive/CVS/Root linux-2.6.17/arch/sh/boards/overdrive/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/overdrive/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/overdrive/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/overdrive/overdrive.ttf linux-2.6.17/arch/sh/boards/overdrive/overdrive.ttf +--- linux-2.6.17-vanilla/arch/sh/boards/overdrive/overdrive.ttf 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/overdrive/overdrive.ttf 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,770 @@ ++255,255, 98,255, 51, 0,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, ++160, 9, 52,129, 38,208, 4,154, 64, 19, 0, 89, 96, 10,100,129,137,134, 85, 6,154, 0, 25,104, 2, 77,160, 76,148, 1, 0, 0, 0, 0, 0, 6,202, 0, 25, 0, 89,100,170, 9, 52,129, 38, 80, 6,154, 68, 19,112, 2, 96, 10, 76,149,129, 50, 64, 6,200, 0,188,254, ++ 0, 21,160, 2, 84,128, 10, 80, 1, 42,128, 10, 80, 1, 42, 64, 7,180,128, 10, 80, 1, 42, 64, 5,168, 0, 61,160, 2, 0, 0, 0, 0, 0, 9, 80, 1, 46,128, 10,120, 1, 21,160, 2, 84,128, 10,208, 3, 42, 64, 5, 80, 1, 42,160, 2, 84,128, 11,112, 1,204,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,128, 0, 16, 0, 0, 8, 0, 0, 0, 0,204,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,124,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 12, 0,128, 2, 0, 0, 2, 0, 0, 0, 64,101,160, 0, 0, 0, 0, 0, 0, 0, 80, 0, 2, 0, 0, 74, 9, 0, 0, 0, 0,128, 66, 0, 2, 0, 0, 0, 0, 1, 32,160, 0, 4,160, 0, 16, 0, 72,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 8, 0, 0, 1, 0, 32, 2, 0, 0, 0, 1, 0, 0, 0, 12,128, 4, 0, 0, 0, 0, 0, 0, 80, 0, 8, 1, 0, 32, 0, 0, 0, 0, 0, 0, 2,130, 0, 0, 0, 0, 0,130, 8,128, 16,144, 0, 2, 0, 1,160,254, ++160, 9, 54, 0, 0, 16, 0, 18, 16, 0, 72, 68, 0, 32, 0, 0, 0, 0,208, 0, 0, 64, 34,104, 0, 69, 4, 0, 0, 0, 0, 0, 0, 0, 80, 24, 26, 64, 33, 1, 0, 1, 32,144, 36,192, 66, 4, 0, 26, 64, 3, 8, 0, 1,160, 16, 0,128, 66, 18, 0, 2, 0,240,252, ++ 0, 1, 48, 0, 0, 0, 0, 8, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 1, 2, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 24, 0, 2, 0, 0, 0, 0, 0, 16, 0, 4, 0, 0, 24, 0, 3, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 16,204,253, ++128, 1, 60, 0, 0,240, 0, 22, 0, 0, 88, 0, 0,224, 1, 0, 0, 0,240, 0, 0,192, 2, 96, 16, 7, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 30,192, 1, 0, 0, 12, 96, 0, 44,128, 3, 0, 0, 30,192, 3, 0, 0, 12,224, 0, 0,128, 3,240, 0, 0, 4, 72,252, ++128, 5, 54, 0, 0,208, 0, 10, 0, 0, 40, 0, 0,160, 1, 0, 0, 0,208, 0, 0, 64, 1, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0,128,132, 26, 64, 2, 0, 0, 64, 33, 40, 20,128, 4, 0, 0, 26, 64, 3, 0,130, 76, 33, 1, 0,128, 64,209, 0, 0, 0,200,252, ++128, 5, 0, 10, 0, 0, 2, 16, 0, 0, 64, 0, 0, 0, 4, 0, 0, 0, 0,128, 0, 0, 2, 0, 18, 4, 0, 0, 0, 0, 0, 0, 0, 0, 64, 8,128, 0, 1, 0, 0, 44,128,132, 32, 0, 2, 0, 0,128, 0, 0, 0, 4, 0,130, 0, 0, 0, 64,193, 34, 0, 1,188,255, ++224, 65, 8, 0, 0, 32, 64, 12, 0, 0, 56, 0, 0, 64,128, 0, 0, 0, 48, 0, 0,128, 1,120, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,176, 64, 6,136, 2, 0, 0, 15, 68, 1, 24, 0, 5, 0, 0, 6,144,128, 24, 32, 15, 64, 1, 0, 0, 1,224, 0, 6, 8, 0,253, ++128, 1, 1, 0, 0, 0, 32, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 96, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 1, 0, 0, 12, 2, 64, 32, 0, 2, 0, 0, 0, 64, 0, 96, 64, 12,128, 0, 0, 0, 0, 0, 0, 0, 16,112,252, ++128, 5, 0, 0, 0, 0, 0, 8, 0, 0, 40, 0, 0, 0, 8, 2, 0, 0, 16, 0, 0, 0, 1, 96, 10, 9, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 2, 64, 2, 0, 0, 76, 0, 5, 16,128, 4, 0, 0, 2, 64, 0, 0, 2, 76, 36, 1, 0, 0, 20, 2, 36,136, 0, 20,254, ++ 32, 16, 53, 0, 0, 16, 0, 18, 1, 0, 40, 33, 0, 32, 0, 0,128, 6,208, 0, 0, 64, 0, 0, 0, 5, 8, 0, 4, 0, 0, 0, 0, 0, 16, 0, 26, 0, 0,104, 0, 0, 32,144, 4,128, 0, 1, 0, 18, 80, 0,104, 0, 0, 0, 0, 4,128, 66,210, 0, 2, 0,200,255, ++ 0, 0, 48, 0, 0, 0, 0, 8, 16, 0, 64, 0, 0, 0, 0, 0, 0, 6,192, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,120,252, ++ 0, 0, 60, 0, 0,192, 0, 22, 0, 0, 56, 0, 0,224, 1, 0,128, 7,240, 0, 0,192, 0, 0, 0, 7, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0,120, 0, 0, 96, 0, 48, 0, 6, 4, 0, 22,192, 3,120, 0, 0, 0, 0, 0,128, 3,240, 0, 0, 4,172,254, ++ 8, 0, 54, 0, 0,192, 0, 10, 0, 0, 72, 0, 0,160, 1, 0,128, 6,208, 0, 0, 64, 0, 0, 0, 9, 0, 0, 0, 10, 0, 0, 0, 0, 0,132, 26, 0, 0,104, 0, 0, 32, 40, 48, 5, 16, 0, 0, 10, 64, 3,104, 0, 0, 0, 0,128,144, 32, 17, 32, 0,128, 92,255, ++ 0, 8, 48, 0, 0,192, 2, 16, 0, 0, 32, 0, 0, 0, 4, 0, 0, 16, 0, 0, 0, 0, 19, 0, 0, 4, 0, 0, 48, 2, 0, 0, 0, 0, 0, 4, 0, 16, 0, 0, 20, 0,128, 4, 48, 18, 18, 2, 0, 16, 0, 3, 0, 32, 0, 0, 0, 0, 10, 64, 1, 34, 0,129, 1,252, ++ 96, 64, 56, 0, 0,240, 64, 12, 0, 0, 80, 0, 0, 64,128, 0, 0, 1, 52,128, 0,128,131, 0, 0, 10, 0, 0, 12, 8, 0, 0, 0, 0, 48, 64, 6, 0, 0, 24, 0, 0, 64, 65, 12,128, 5, 0, 0, 14,128,131, 24, 0, 0, 0, 0, 60, 0, 1,224, 0, 6, 8,100,254, ++ 4, 0, 52, 0, 0,192, 0, 16, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 3, 0, 0, 4, 0, 0, 48, 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 64, 48, 0, 2, 0, 0, 16, 64, 0, 0, 0, 0, 0, 0, 0, 32, 0,192, 0, 0, 16, 13,255, ++ 0, 73, 52, 0, 0,192, 34, 8, 0, 0, 64, 0, 0, 0, 72, 0, 0, 0, 16, 0, 0, 64, 3, 0, 0, 9, 0, 0,176, 8, 0, 0, 0, 0, 0, 64, 2, 0, 0, 8, 0, 0, 0, 5,176, 8, 38, 2, 0, 8, 64,128, 8, 0, 0, 0, 0, 0, 1, 20, 2, 36,144, 0,116,254, ++160, 1, 6, 0, 0, 16, 0, 26, 0, 0, 40, 64, 0, 32, 0, 0,128, 0, 16, 0, 0, 64, 35, 1, 0, 73, 4, 0, 52, 0, 0, 0, 0, 0, 16, 0, 26, 0, 0,104, 0, 0, 32,144, 4,128, 66, 2, 0, 2, 64,163, 8, 0, 0, 0, 0, 4,128, 66,210, 0, 18, 3,236,255, ++ 0, 1, 0, 0, 0,192, 0, 24, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 4, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 96, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 36,255, ++128, 1, 48, 8, 0,240, 32, 30, 0, 0, 56, 0, 0,224, 1, 0, 0, 6,192, 0, 0, 0, 3, 0, 0, 11, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0,120, 0, 0, 96, 0, 48,128, 3, 0, 0, 24, 0, 3, 1, 0, 0, 0, 0, 0,128, 3,192, 32, 16, 0,220,255, ++132, 41, 0, 0, 0,208, 4, 26, 0, 0, 72, 0, 0,160, 1, 0, 0, 6, 0, 20, 0, 0,163, 0, 0, 5, 0, 0, 52, 0, 0, 0, 0, 0, 0,132, 26, 0, 0,104, 0, 0, 32, 40, 48,137, 4, 0, 0, 0, 8, 35, 0,130, 0, 0, 0,128,144, 0,193, 8, 24, 32,121,253, ++ 4, 4, 0, 34, 0, 0, 2, 24, 0, 0, 32, 0, 0, 0, 4, 0, 0, 22,192, 32, 0, 0, 16, 1, 0, 8, 0, 0, 48, 0, 0, 0, 0, 0, 0, 8, 0, 8, 0, 0, 2, 0,128, 8,176, 0, 2, 0, 0, 88, 4, 3, 0, 8, 0, 0, 0, 0, 10, 64,193, 40, 88, 0, 76,254, ++ 96,128, 12, 0, 0, 32, 64, 28, 0, 0, 80, 0, 0, 64,128, 0,128, 7,242, 0, 0,192, 3, 0, 0, 7, 0, 0, 56, 0, 0, 0, 0, 0, 48, 64, 6, 0, 0, 24, 16, 0, 64, 65, 12, 32, 5, 0, 0, 30,192,131, 24, 0, 0, 0, 0, 12, 0, 1,240, 0, 14, 16,212,254, ++136, 65, 0, 0, 0, 0, 0, 24, 0, 0, 32, 0, 0, 0, 0, 0, 0, 6,192, 0, 0, 0, 3, 0, 0, 8, 0, 0, 48, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 64, 48, 0, 2, 0, 0, 24, 0, 3, 96, 0, 0, 0, 0, 48, 32, 0,192, 0, 24,128, 48,253, ++128, 9, 0, 9, 0, 0, 34, 24, 0, 0, 64, 0, 0, 0, 64, 0, 0, 70,193, 32, 0, 0,131, 0, 0, 4, 0, 0, 52, 0, 0, 0, 0, 0,192, 4, 0, 0, 0, 8, 0, 0, 0, 5, 48,144, 4, 0, 0, 88, 8,131, 0, 32, 0, 0, 0, 0, 1, 20,194, 40, 24, 5,208,252, ++ 32, 8, 4, 0, 0, 16, 0, 82, 8, 0, 8,132, 0, 32,132, 0,128, 0,208, 0, 0, 64, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0,208, 0, 26, 0, 0, 40, 17, 0, 32,144, 4,137, 16, 17, 0, 26, 64,163, 8, 0, 0, 0, 0, 0,128, 66, 18, 0, 82, 0,172,255, ++ 0,128, 0, 0, 0,192, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,128, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8,112,253, ++ 0, 64, 0, 0, 0, 48, 32, 22, 0, 0, 32, 0, 0,128, 0, 0,128, 7,240, 0, 0,192, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0,192, 64, 30, 0, 0, 56, 16, 0, 96, 0, 12, 8, 6, 48, 0, 24, 4, 3, 96, 0, 0, 0, 0, 0,128, 3,241, 0, 0, 16,232,253, ++ 8, 0, 0, 0, 0, 16, 4, 10, 0, 0, 64, 17, 0,128, 65, 0,128, 6,209, 0, 0, 64, 0, 0, 0, 44, 2, 0, 0, 0, 0, 0, 0, 0,192, 4, 26, 0, 0, 8, 0, 0, 32, 40, 4, 0, 16, 17, 0,152, 0, 64, 0, 18, 0, 0, 0, 0,128, 16,208,136,128,128, 48,253, ++ 0, 8, 49, 33, 0, 0, 2, 16, 0, 0, 0, 1, 0, 0, 4, 0, 0, 16, 0, 66, 0, 0, 11, 0, 0, 32, 4, 0, 48, 1, 0, 0, 0, 0,128, 4, 0, 1, 0, 0, 4, 0,128, 0,144, 8, 18,194,130, 88, 8,136, 96, 16, 0, 0, 0, 0, 0, 64, 1, 68, 80,144, 93,254, ++ 96, 0, 60, 0, 0, 32, 64, 12, 0, 0,120, 64, 0, 96,128, 0, 0, 1, 50, 0, 0,128, 3, 2, 0, 15, 0, 0, 60, 16, 0, 0, 0, 0,240, 64, 6, 8, 0, 16, 64, 0, 64, 65, 40,128, 5,224, 0, 30,192, 2,120, 0, 0, 0, 0, 0, 0, 1,224, 0, 22, 0, 80,255, ++132, 65, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0,128, 65, 0, 0, 0, 0, 0, 0, 64, 3, 0, 0, 12, 2, 0, 0, 16, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 2,208, 0, 24, 0, 0, 97, 0, 0, 0, 0, 0, 0, 0,192, 0, 16, 0,113,252, ++ 0, 17, 0, 9, 0, 0, 34, 8, 0, 0, 96, 10, 0,128, 5, 0,128, 64, 1, 0, 0, 64, 3, 0, 0,140, 0, 0, 0, 1, 0, 0, 0, 0,192,130, 0, 0, 0, 64, 2, 0, 0, 5, 36, 66, 38,210, 0,152, 8, 35, 96, 16, 0, 0, 0, 0, 0, 20, 2, 40, 16, 16,120,252, ++160, 49, 4, 0, 0,208, 0,146, 96,160, 72, 4,137, 32, 0, 0,128, 0,208, 0, 0, 64, 0,104, 0, 1, 0, 0, 52, 0, 0, 0, 0, 0,208, 0, 26, 0, 0, 40, 17, 0, 32,144, 52,128, 64, 81, 4, 2, 64, 3,104, 0, 0, 32, 17, 0,128, 0, 16, 8, 2, 0, 40,254, ++128, 1, 0, 0, 0, 0, 0, 8, 0, 0, 32, 64, 4, 4,128, 0, 0, 0,192, 0, 0, 0,128, 96, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0,192,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 3, 96, 0, 0,128, 0, 1, 0, 0, 0, 32, 0, 0,248,253, ++128, 0, 0, 0, 0, 0, 64, 22, 0,131, 88, 0, 11,128, 0, 0, 0, 0,241, 0, 0, 0, 1,120, 0, 12, 0, 0, 60, 0, 0, 0, 0, 0,192, 64, 24, 0, 0, 56, 0, 0, 96, 0, 0, 0, 6, 0, 0, 24,192, 3,120, 0, 0, 96, 1, 0,128, 1,241, 0, 0, 4,208,252, ++ 4, 9, 1, 0, 0, 0, 0, 10, 0, 16, 40, 0, 5,128, 73, 0, 0, 38,208, 0, 0, 0, 19,108, 0, 76, 2, 0, 52, 0, 0, 0, 0, 0,128, 4, 64, 16, 0, 8, 20, 0, 32, 40, 0, 9, 32, 1, 68, 0, 96, 3,104, 0, 0,160, 0, 0,128, 6,208, 36, 0,128,192,252, ++ 12, 64, 0, 33, 0,192, 64, 16, 0, 9, 65, 0, 8, 0, 4, 0, 0, 22, 0, 8, 0, 0, 16, 1, 33,128, 4, 0, 0, 64, 0, 0, 0, 0,192, 2,128, 0, 0, 0, 4, 0,128, 64,128, 32, 18, 66, 4, 88, 0, 3, 0, 68, 0, 0, 1, 0, 0, 38, 1, 34, 0,129, 65,255, ++224, 1, 12, 0, 0,240, 0, 12,192, 2, 48, 0, 7, 96,128, 0,128, 7, 50,128, 0,192, 0, 24, 0, 15, 0, 0, 12, 0, 0, 0, 0, 0,240,128, 30, 4, 0, 16, 64, 0, 64, 1, 12,128, 5,240, 32, 30,132, 3, 24, 0, 0,224, 0, 0, 0, 7,160, 0, 30, 8, 84,253, ++ 8, 0, 48, 0, 0,192, 32, 16, 0, 1, 66, 0, 8,128, 1, 0, 0, 6, 0, 0, 0, 0,128, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0,192,128, 24, 0, 0, 0, 16, 0, 0, 64, 0, 0, 2, 0, 0, 24, 0, 3, 0, 0, 0, 0, 1, 0,128, 6,193, 32, 0, 16, 17,254, ++ 0, 17, 50, 9, 0,192, 4, 8, 0, 35, 32, 0, 4,128, 81, 0, 0, 70, 1, 0, 0, 0, 0, 8, 0, 76, 16, 0, 0, 0, 0, 0, 0, 0,192, 4, 24, 32, 0, 64, 2, 0, 0, 5, 0, 33, 38,194, 20,152, 4, 3, 0, 0, 0,128, 0, 0,128, 38, 64, 8,128, 0, 88,254, ++ 32, 0, 4, 0, 0, 16, 0, 18, 1, 0, 8, 0, 69,168, 1, 0,128, 6, 16, 0, 0, 64, 98, 72, 64, 41, 8, 0, 4, 0, 0, 0, 0, 0, 16, 0, 2, 64, 34, 9, 0, 0,160,144, 20,128, 68, 18, 0, 26, 64, 0,104, 0, 0, 32, 0, 4,128, 66, 18, 4, 26, 0, 46,255, ++ 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 16, 0,128, 1, 0, 0, 0, 0, 0, 0, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0,128, 24, 16,192,254, ++ 96, 0, 48, 0, 0, 0, 0, 22, 0, 0, 96, 32, 4,128, 1, 1, 0, 6,192, 0, 0,192, 2, 88, 0, 11, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 24,200, 2, 96, 0, 0,224, 64, 12,136, 5, 48, 0, 24, 4, 0, 96, 0, 0,128, 1, 0,128, 3, 0, 32, 24, 4,184,254, ++ 40, 0, 48, 0, 0,192, 40, 10, 0, 0, 0, 4, 64, 1, 16, 0, 0, 6, 4, 20, 0, 64, 1, 40, 0, 5, 0, 0, 0, 32, 0, 0, 0, 0, 0,132, 24, 65, 1, 96, 0, 0, 32, 16, 4,128, 2, 16, 0, 0, 0, 0, 96,130, 0,128, 73,128,160, 64, 2, 0, 24,128,173,252, ++128, 81, 48, 0, 0, 0, 2, 16, 0, 0, 32, 1, 32,132, 5, 0, 0, 64,192, 40, 0, 0, 2, 64, 0, 8, 0, 0, 48, 8, 0, 0, 0, 0, 0, 4, 0, 1, 2, 0, 1, 0, 0, 68,128, 32, 4,192, 24, 0, 1, 0, 96, 64, 0, 0, 0,128, 32, 64, 1, 2, 24,144, 8,254, ++192, 1, 60, 8, 0, 48, 64, 12, 0, 0, 88, 32, 11,224,129, 0,128, 1,241, 0, 0,128, 1, 56, 0, 6, 0, 0, 60, 0, 0, 0, 0, 0, 48, 64, 30,196, 1, 24, 32, 0, 64, 0, 8,128, 3,224, 0, 30,208,128, 24, 0, 0,224,129, 12, 0, 1, 48, 64, 22, 0,213,252, ++132, 1, 48, 8, 0,192, 0, 16, 0, 0, 32, 64, 12,130, 1, 0, 0, 6,192, 0, 0, 0, 2, 64, 0, 8, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 24, 4, 2, 0, 0, 0, 0, 0, 0, 0, 4,192, 0, 24, 0, 3, 96, 64, 0,128, 65, 0, 0, 0, 0, 0, 24, 8,247,255, ++128, 1, 48, 0, 0,192, 32, 8, 0, 0, 96, 4,140,128, 69, 0, 0, 70,194, 36, 0, 0, 1, 32, 0, 5, 0, 0, 48, 8, 0, 0, 0, 0,192, 64, 24, 1, 1, 0, 10, 0, 0, 41, 4, 33, 2,192, 0,152, 2,131, 96, 4, 0,128, 9, 48, 32, 20,130, 40, 88, 0,112,253, ++ 48, 0, 4, 0, 0, 16, 0, 18, 66, 66, 8, 12, 1,160, 17, 4,128, 64, 82, 2, 1, 64, 19, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 80, 24, 26, 64, 0, 40, 8, 0,160, 1, 4,128, 68,212, 0, 2, 81, 3,104, 0, 0,160, 1, 4,128, 66,210, 4, 66, 0, 42,254, ++ 0, 0, 0, 0, 0, 0, 0, 8, 0, 1, 0, 0, 0, 0, 65, 0, 0, 0,128, 0, 0, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 8, 88,255, ++128, 1, 12, 0, 0,240, 0, 22,192, 2, 32, 0, 12,130, 1, 48, 0, 6,192, 0, 0, 0,129, 96, 64, 12,128,129, 48, 16, 0, 0, 0, 0, 64, 0, 24, 0, 3, 24, 16, 0, 96, 64, 60,128, 5,192, 0, 8,192,131, 96, 0, 0,128, 65, 0,128, 3,241, 32, 0, 0,212,252, ++140, 1, 4, 0, 0,208, 0, 10, 64, 1, 64, 16, 64,128, 73, 48, 0, 0,196, 72, 0, 0, 10, 96, 1, 76,136, 17, 0, 0, 0, 0, 0, 0,128,132, 64, 8,147, 8, 2, 0, 32, 16, 52,128, 2, 0, 66, 16, 68, 0, 96,130, 0, 0, 4,128,160, 32, 16, 0, 64,144,101,252, ++ 4, 4, 48, 0, 0, 0, 2, 16, 0, 2, 0, 1, 44, 2, 4, 0, 17,130, 64, 4, 0, 0, 32, 0, 0, 0, 0, 64,176, 8, 0, 0, 0, 0, 64, 4, 64, 0, 0, 0, 0, 0,128, 81, 0, 1, 4, 0, 34, 64, 8, 0, 0, 8, 0, 0, 4,129, 32, 64, 1, 2, 64,144, 80,255, ++ 96,128, 56, 8, 0, 32, 64, 12,192, 1,120, 64, 15, 96,128, 12,128, 5,240, 32, 0,192,131,120, 32, 15,228, 1, 60, 0, 0, 0, 0, 0,176, 64, 30,196, 3, 17, 64, 0,192, 1, 8,144, 3,240, 0, 30,128,131,120, 0, 0,224, 1, 60, 0, 1,224, 64, 6, 0, 29,255, ++ 12, 0, 48, 0, 0, 0, 0, 16, 0, 2, 32, 0, 12, 0, 0, 0, 0, 2,192, 0, 0, 0, 0, 96, 16, 12,128,129, 48, 0, 0, 0, 0, 0, 0, 0, 24, 0,131, 0, 0, 0,160, 65, 0, 0, 4,192, 0, 8, 64, 3, 96, 64, 0,128,129, 0, 0, 0, 64, 0, 0, 0,167,255, ++ 0, 40, 48, 0, 0, 0, 40, 8, 0, 1, 96, 10, 76, 4, 68, 0, 4, 22,193,136, 0, 0,162, 96, 2,140,130, 9,176, 16, 0, 0, 0, 0,128, 64, 24, 32, 19, 0, 32, 0,160, 5, 4, 9, 2,192,128,152, 72,128, 96, 4, 0,128, 1, 0, 32, 20, 66, 40, 8, 16,208,254, ++ 32, 0, 4, 0, 0,208, 0,146, 72, 65, 8, 0,133, 32, 0, 0,128, 0, 80, 8, 2, 64, 0, 8, 0,137,160, 1, 4, 0, 0, 0, 0, 0,208, 0, 2, 64, 0, 8, 0, 13, 32,144, 4,137,132, 16, 0, 90, 64, 0, 8, 0, 13, 32, 4, 4,128, 66,210, 0, 26, 0,140,255, ++ 0, 0, 0, 0, 0,192, 0, 8, 0, 2, 0, 0, 8, 4, 0, 0, 0, 6,128, 64, 0, 0, 0, 0, 0, 4,136, 1, 0, 0, 0, 0, 0, 0,192,128, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 2, 0, 0, 16, 16, 0, 0, 0, 12, 0,128, 0, 0, 0, 0, 0, 24, 0,240,254, ++128, 1, 48, 0, 0,240, 0, 22,192, 1, 96, 0, 7,224, 1, 0,128, 1,192, 0, 6,192, 0, 96, 16, 11,224, 1, 48, 16, 0, 0, 0, 0,192, 64, 24, 8,131,120, 0, 15, 96, 0, 12,136, 5,192, 64, 24, 8, 0, 96, 32, 15,128, 64, 48,136, 3,192, 0, 24, 0, 92,254, ++136, 1, 0, 10, 0,208, 0, 10, 64, 2, 96, 34, 9,160, 1, 0,128, 0,193, 72, 2, 64, 0, 96, 1, 5,160, 1, 48, 2, 0, 0, 0, 0,192, 4, 24, 1, 11,104, 0, 13, 32, 40, 4,128, 2,192, 0, 24, 0, 0, 96, 0, 13, 0, 17,128,128, 16,193, 36, 24, 0, 17,253, ++ 0, 4, 48, 8, 0, 0, 2, 16, 0, 1, 0, 36, 4, 0, 4, 0, 0, 16, 64, 36, 88, 0, 35, 0, 1, 8, 0, 8, 0, 9, 0, 0, 0, 0, 64, 4, 0, 0, 8, 1, 32, 32,132,128, 16, 2, 4, 0, 4, 24, 33,136, 0, 18, 32, 0,132, 0, 32, 64,193, 2, 24, 3,152,255, ++ 96,128, 12, 0, 0, 32,128, 12,128, 2,120, 0, 10, 64,128, 0, 0, 1,242, 0, 28,136,131,120, 32, 6, 96, 0, 61, 0, 0, 0, 0, 0,240, 64, 30,196, 3, 16, 0, 3, 64, 1, 40,160, 3,240, 32, 30,192, 0,120, 0, 3,232, 1, 12, 0, 1,240, 32, 30, 0,248,255, ++ 4, 64, 48, 0, 0, 0, 0, 16, 0, 1, 96, 0, 4, 0, 0, 0, 0, 0,192, 0, 24, 64, 3, 96, 32, 8, 0, 0, 48, 0, 0, 0, 0, 0,192, 0, 24, 4, 3, 0, 0, 0, 0, 64, 0, 0, 4,192, 32, 24, 0,131, 96, 0, 0,128, 0, 0, 0, 0,192, 0, 0,128, 24,255, ++ 0, 4, 48, 8, 0, 16, 0, 8, 64, 2, 96, 20, 9, 0, 68, 0,128, 64,193,136, 24, 64, 3, 96, 2, 5, 0, 0, 48, 17, 0, 0, 0, 0,192,130, 24, 0, 11, 1, 10, 0, 0, 5, 36, 66, 2,192, 0, 24, 8, 35, 96, 68, 0,128, 41,128, 16, 20,194, 32, 0, 32, 52,253, ++ 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0,144, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 50,252, ++ 32, 0, 0,144, 0, 0, 0, 2, 0, 0, 0, 0, 0, 32, 0, 4,128, 0, 0, 0, 2, 64, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1, 32, 0, 1, 0, 0, 0, 64, 0, 0, 0, 0, 0, 1, 0, 0, 4,128, 0, 18, 0, 2, 0,180,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 1, 64, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0,128, 0, 16, 0, 0,128, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,216,255, ++ 36, 0,128,136, 0, 16, 20, 2, 64, 64, 8, 68, 1, 33, 0, 4,128, 32, 18, 8, 2, 0, 8, 8, 4,129, 32, 0, 4, 5, 0, 0, 0, 0, 16, 0, 66, 64, 64, 8, 1, 1, 0, 16, 4,129,128, 0, 0, 2, 2, 0, 8, 8, 1, 32, 32, 4, 0, 0, 16, 0, 2,128, 89,252, ++ 4,128, 0, 6, 0, 0, 24,128, 16, 0, 1, 32, 0, 4, 48, 0, 0,192, 0, 0, 0, 3, 16, 2, 0,128, 1, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 0, 0, 48, 0, 6, 0, 2, 0, 0, 0, 8, 0, 0, 0, 0,128, 0, 0,192, 0, 4, 0,128, 64,253, ++ 32, 0, 0,128, 0, 16, 0, 0, 0, 0, 0, 0, 0, 32, 0, 4, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 64,128, 0, 0, 0, 0, 0, 4, 0, 0, 0, 64, 2, 0,193,252, ++ 8,128, 0, 0, 0, 0, 64, 0, 16, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 0, 0, 8, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 64, 0, 0,128, 0, 16, 0, 4, 64, 0, 16, 0, 2, 64, 0, 0, 0, 1, 0, 0, 4, 0, 0, 0,111,252, ++ 0, 4, 0,133, 0, 0, 2, 0, 0, 16, 1, 36,128, 8, 8, 4, 0, 64, 16,130, 64, 0, 8, 8, 68,128, 40, 4,129, 32, 0, 0, 0, 0, 16, 0, 2, 2, 32, 0, 0, 1, 1, 16,128, 0, 64, 0, 4, 2, 1, 32, 8, 1, 1, 1, 16, 4, 0, 0, 0, 8, 3, 0, 72,252, ++ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72,252, ++ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,112,254, ++ 0, 32, 0, 0, 0, 0, 0, 64, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 16, 0, 0, 0, 0, 8,220,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 32, 0, 0, 0, 0, 16, 0, 28,254, ++ 0, 0, 0, 0, 0, 0, 0, 32, 0, 1, 0, 0, 20, 0, 0, 0, 0, 0,128, 0, 1, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 0, 0, 0, 64, 0,128, 0, 0, 0, 0, 0, 0, 0, 0,108,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,128, 0, 80, 0, 0, 0, 0, 0, 0, 64, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 32,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 8, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 32, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 16,148,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 64, 0,240,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 64, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 4, 0, 0, 0, 0, 2,182,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,255, ++ 0, 0, 0, 0, 4, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,132, 0, 0, 0, 0, 1, 0, 16, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 32, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,140,255, ++ 0, 0, 0, 0, 2, 0, 32, 0, 4, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 2, 0, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 64, 0, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 32, 32, 0, 0, 0, 0, 8, 2, 0, 0, 0, 4,124,255, ++ 0, 0, 0,136, 1, 0,128, 4, 16, 6, 0, 0, 0, 0, 0, 4, 0, 1,130, 2, 0,144, 0, 2, 32, 2, 8, 0, 0, 0, 0, 0, 0, 0, 80, 64, 2, 16, 0, 16, 0, 64,193,168, 0, 0,180, 0, 0, 0, 0, 0, 74, 65, 0, 0, 64,168,160, 0, 64, 0,128, 18, 60,255, ++ 0, 0, 0, 1,210,128, 0, 8, 4, 2, 0, 0, 0, 2, 64, 0, 0,132, 64, 0, 0, 0, 0, 0, 12, 8,128, 0, 16, 0, 0, 0, 0, 0, 0, 32,208, 0,160,144, 16,152,165, 32, 52,136,130,128, 0, 10, 64, 17, 16, 0, 0, 0, 3, 96, 9,128, 1, 90, 0, 0,180,253, ++ 0, 0, 0,128, 0, 0, 0, 8, 4, 0, 0, 0, 0, 8, 0, 1, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32, 0, 0, 0, 0, 0, 0, 32, 0, 0,128, 0, 64, 0, 0, 1, 16, 8, 4, 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, 0, 8, 0, 1, 0, 0, 0,156,252, ++ 0, 0, 0, 0, 0,129, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 4, 0, 0, 0, 0, 0, 16, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 4, 8, 64, 32, 0, 0,129, 0, 0, 0, 0, 0, 0, 0,128, 0, 16, 0, 0, 2, 32, 0, 0,112,255, ++ 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 64, 90,253, ++ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 8, 0, 68, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 4,128, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,254, ++ 0, 0, 0, 0, 0, 0, 32, 0, 32, 0, 0, 64, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 24, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0,112,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0,192,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 0, 20, 0, 0, 8, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,180,254, ++128, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 8, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,124,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 32, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 2, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,152,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,253, ++ 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,252, ++ 64, 0, 4, 0, 0, 16, 0, 0,128, 0, 16, 0, 2, 32, 0, 4,128, 0, 64, 0, 2,128, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,128, 0, 8, 0, 0, 32, 0, 4, 4, 1, 0, 0, 0, 72, 0, 0, 0, 0, 64, 0, 0,128, 0, 0, 0, 0, 0, 96,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16, 0, 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 4, 80,255, ++ 0, 0, 64, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 32,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,252, ++ 0, 4, 5, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0,228,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 2, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0,128,252, ++ 8, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 32, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,236,252, ++ 2, 0, 0, 0, 4, 64, 0, 8, 4, 0, 32, 16, 0, 0, 64, 16, 0, 2, 1, 32, 0, 0,128, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 16, 0, 4, 0, 0, 0, 8,128, 0, 0, 4, 0,129, 32, 0, 0, 0, 0, 0, 8, 2, 0, 0, 8,192,108,254, ++ 64, 0, 0, 0, 1, 1, 0, 0, 0,128, 0, 0, 4,128, 0, 4, 0, 0, 0, 0, 0, 2, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 0, 0, 0, 4, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 32, 0, 0,128, 0, 0, 8, 0, 0, 0, 0, 64,219,253, ++ 32, 64, 0,128, 1, 36, 0, 4, 8, 0, 18, 32,129, 35,128,108, 6, 1, 3, 64, 0, 16, 0, 1, 0, 1, 0, 5, 8, 0, 0, 0, 0, 0, 0, 20, 2,148, 0, 17, 0, 3, 0, 0, 0, 16, 0, 6, 20, 4,128, 0, 57, 0, 0, 32, 0, 0, 48, 1, 0, 32, 4, 0,160,253, ++128, 8, 48, 8, 96,129, 0, 8, 68, 0, 32, 0, 66,128, 0, 0, 0,197, 0, 4, 24, 0, 1, 0, 12, 4, 0, 5, 16, 34, 0, 0, 0, 0,128, 72,194, 3,119, 32, 0, 32,194, 65, 24, 45,206, 64, 4, 52, 0,129, 0, 24, 0, 0, 0, 16, 1,128, 0, 92, 80, 0, 48,254, ++128, 0, 16, 8, 0, 1, 0, 8, 4, 0, 32, 0, 0,128, 0, 0, 0, 0, 0, 0, 8, 0, 1, 0, 0, 4, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0,129, 64, 16, 8, 1, 64, 0, 0, 0,129, 0, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,136,255, ++ 0, 0, 8, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 8, 0, 0, 0, 16, 0, 0, 1, 0, 0, 0, 0, 0, 0, 32, 0, 0, 4,129, 0, 0, 0, 64, 0, 0, 4, 2, 1, 0, 8, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1, 32, 8, 0,180,255, ++ 16, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,134,253, ++ 2, 0,128, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 8,128, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 64, 48,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 32, 0, 64, 0, 0, 0, 0, 0, 0, 0, 4, 0, 16, 1, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,180,252, ++ 2,160, 2, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 16,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 56,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0,152,253, ++ 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 32, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,253, ++ 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 8, 0,136, 0, 0, 0, 0, 0, 0, 0, 18, 2, 0, 32, 0, 1, 0, 0, 0, 0, 0, 16, 16, 2, 0, 0, 8, 8, 1, 0, 0, 0, 0, 4, 0, 32, 0, 0, 88,254, ++ 32, 1, 0, 0, 0,128, 0, 0, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 16, 0, 0, 0, 0, 4, 0, 0, 0, 0,113,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 16, 0, 32, 0, 0, 0, 0, 0, 0, 0, 64,182,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 64, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 16, 0, 0, 0,228,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0,116,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 48, 0, 0, 0,132,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 8, 0, 16, 0, 0, 0, 48,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 16, 0,192, 8, 0, 0, 64,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0,224, 32, 0, 0, 4,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,192, 0, 0, 0,208,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 18, 0,192, 0, 0, 0,196,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 18, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 66, 2, 0, 10,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,128, 6, 0, 20,254, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,166, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 4, 2,128,225,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 24,130, 28,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 32, 28, 0,129,253, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 24, 0, 63,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 36, 24, 0, 12,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148, 64, 0,208, 8, 0, 0,248,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,192, 64, 0, 0,176,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 0, 64, 0, 0,188,255, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0,109,252, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,192, 68, 0, 0, 80,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 48, 0, 0, 0, 4,252, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,128, 0, 0,128,152,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 0, 20, 0, 0, 8,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 34, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,164, 64, 0,208, 0, 10, 9, 96,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,192, 0, 16, 0,228,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0,192, 0, 14, 0, 68,253, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0,192, 36, 18, 0, 89,253, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,192, 68, 8, 0,220,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0,240, 0, 20, 0,112,252, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,192, 64, 8,128, 16,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 16, 0, 40,254, ++ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0, 16, 0, 0, 0, 94,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 16, 0, 0, 32, 0, 0, 12,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0,192, 64, 0, 0,204,255, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0,192, 2, 0,128,101,254, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,128, 0,128,100,253, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 48, 0, 0, 0,229,255, ++ 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 64, 64, 0, 0,139,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 28,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 16, 36, 0, 0,208,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 16, 0, 0, 0, 0, 0, 44,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0,192, 0, 0, 0,168,254, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0,192, 64, 0, 0, 41,253, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,192, 68, 0, 0,144,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0,176, 0, 0, 0, 0,253, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0,192, 0, 0,128,220,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36, 0, 0,192, 20, 0, 0,128,254, ++ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 5, 4, 0, 0, 16, 0, 2, 0,246,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0,180,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 48, 16, 0, 48, 0, 6, 0,144,252, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 48, 1, 0, 16, 0, 2,128, 93,254, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,192, 8, 24,130,156,255, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0,224, 0, 60, 32, 0,224, 32, 28, 0, 68,255, ++ 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 48, 8, 0,192, 0, 24,128,109,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 48, 1, 0,192, 0, 24, 0,236,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 38, 0, 0, 0, 0, 0, 0, 0, 0, 32, 80, 4, 9, 0,208, 16, 74, 8, 20,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 44,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 48, 8, 0,128, 0, 14, 0,216,252, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 1, 0, 0, 0, 0, 0, 0, 0, 0,144,128, 0, 0, 0, 36, 18, 0, 85,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0,128,132,144, 16, 0, 0, 68, 8, 0, 40,252, ++ 0, 0, 0, 0, 0, 0, 0, 0,192, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 44, 0, 0,240, 0, 20, 0,252,255, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0,128, 0, 16, 0, 0, 0, 64, 8,128,224,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0, 0, 0, 0, 0, 0,128,129, 48, 18, 0, 0, 2, 16, 0,172,255, ++ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,255, ++ 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 0,128, 0, 16, 0, 2, 0,116,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 44, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,132, 0, 16, 0, 2,128,105,253, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 2, 64,128, 72,252, ++ 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 18, 0, 2, 64, 0, 8, 0, 1, 0, 0, 0,144, 0, 0, 64, 0, 8, 12,253, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32, 0, 0, 0, 0,128, 85,255, ++ 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 32, 24, 0, 2, 64, 0, 8, 0, 1, 32, 16, 0,130, 0, 0, 4,129, 32,104,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 32, 0, 0, 0, 2, 0, 0, 28,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 16, 0, 0, 0, 0, 0, 0,188,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,120,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,255, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,129, 0, 16,202,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 88,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8,228,255, ++ 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8,176,254, ++ 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 74, 66, 1, 64, 16,228,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 88,254, ++ 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 52,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0,120,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 88,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,124,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0,148,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 4, 0, 0, 0, 0, 0, 24,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 60,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 64, 13,255, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,176, 0, 16, 0, 40,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 36,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 22,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 8,254, ++ 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0,128, 1, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0,192, 2, 0, 2, 0, 0, 16, 0, 0, 0, 0, 0, 0,160, 0,128, 4, 0, 36,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0,192, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 64, 16, 0, 0, 0, 64, 0, 0,128, 0,128, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0,100, 66, 48, 8, 5,100,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 64, 32, 8, 4,224,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 16, 0, 0, 88,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 88,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,255, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 64, 0, 2, 0,201,254, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 76,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 64, 2, 1, 0, 0, 0, 0, 0, 0, 0,208, 16, 0, 0, 0, 0, 0, 0,160, 33, 0, 0, 0, 0, 0, 0, 0,208,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0,224, 1, 0, 0, 0, 0, 0, 0, 0, 16,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0,192, 34, 0, 0, 0, 0, 0, 0, 32, 72, 0, 0, 0, 0, 0, 0, 0, 60,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 92,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,196,129, 0, 0, 0, 0, 0, 0, 0, 0,240, 32, 0, 0, 0, 0, 0, 0,192, 65, 0, 0, 0, 0, 0, 0, 0,200,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0,148,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 11, 1, 0, 0, 0, 0, 0, 0, 0,192, 32, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 28,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0,208, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148,254, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 24,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,192, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,129,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,196, 0, 2, 0, 0, 0, 0, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164,252, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10, 0, 3, 1, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,209,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,138, 4, 35, 0, 0, 0, 0, 0, 0, 0, 0, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,128, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,216,255, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 4, 32, 0, 0, 0, 0, 0, 0, 0, 0,128, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,165,252, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,244,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,196, 0, 0, 0, 0, 0, 0, 0, 0, 0,176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,253, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0,128, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 80,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 5, 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252,252, ++ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,108,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224, 1, 0, 0, 0, 0, 0, 0, 0,208,255, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 0,109,252, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0,128, 9, 0, 0, 0, 0, 0, 0, 0,208,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0,192, 65, 0, 0, 0, 0, 0, 0, 0,104,252, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,112,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 8, 18, 0, 0, 0, 0, 0, 0, 0, 0,192, 4, 1, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 20,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 64, 3, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,222,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,168,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,192,131, 0, 0, 0, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,144,252, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 64, 32, 0, 0, 0, 0, 0, 0, 0, 0, 64, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 33,252, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0,136, 0, 0, 0, 0, 0, 0, 0, 0, 64, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,208,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,128, 3, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 96,128, 0, 0, 0, 0, 0, 0, 0, 53,254, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0,129, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 67,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0,128,130, 0, 0, 0, 0, 0, 0,128, 81, 0, 0, 0, 0, 0, 0, 0,152,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,108,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,192, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,128, 65, 0, 0, 0, 0, 0, 0, 0,188,253, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 64, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,237,253, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 16,139, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,228,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,128, 3, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0,224,129, 0, 0, 0, 0, 0, 0, 0, 4,255, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 52,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 8, 16, 1, 0, 0, 0, 0, 0, 0, 0,192,128, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 44,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 64, 18, 1, 0, 0, 0, 0, 0, 0, 0, 16, 16, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0,206,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 4, 3, 0, 0, 0, 0, 0, 0, 0, 0,192, 32, 0, 0, 0, 0, 0, 0,224, 1, 0, 0, 0, 0, 0, 0, 0, 52,255, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 11, 1, 0, 0, 0, 0, 0, 0, 0, 64, 8, 0, 0, 0, 0, 0, 0,160, 41, 0, 0, 0, 0, 0, 0,128,209,255, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0,128,152,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,192, 2, 2, 0, 0, 0, 0, 0, 0, 0, 48, 32, 0, 0, 0, 0, 0, 0,192, 65, 0, 0, 0, 0, 0, 0, 0,249,252, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,128, 65, 0, 0, 0, 0, 0, 0, 0,175,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 8,147, 0, 0, 0, 0, 0, 0, 0, 0,192, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 32, 32, 0, 0, 0, 0, 0, 0, 0, 68,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,192, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,252, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 64, 19, 1, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0,101,252, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 4,136, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,152,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,128, 3, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 96, 64, 0, 0, 0, 0, 0, 0, 0, 84,255, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0,128,120,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 8, 16, 0, 0, 0, 0, 0, 0, 0, 0,192, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 44,255, ++ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,252, ++ 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 0, 20,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,254, ++ 44, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2,128, 92,252, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0,128,181,254, ++ 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 16, 0, 0, 16, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 0, 0, 4,128, 0, 16, 0, 2, 0,100,252, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,249,255, ++ 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 16, 0, 64, 0, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 0,132, 4,128, 0, 16, 0, 2, 0,124,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,140,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,104,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 2, 0, 0, 0, 0, 0, 0, 0, 28,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,184,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 60,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,188,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 1, 1, 0, 0, 2, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 56,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 92,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,172,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 1, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 64,252,254, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 13,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 4,140, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,176, 0, 0, 0, 0, 0, 0, 0, 68,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 8, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 9, 0, 0, 16, 20, 0, 64, 0, 8, 0, 0, 0, 0, 0, 8,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 8, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 0, 64, 0, 4, 0, 0, 0, 0, 0,116,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 88,254, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 88,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,252,255, ++ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,105,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 32, 0, 0,128, 34, 2, 0, 26, 0, 0, 0, 0, 0, 32, 8,148, 16, 0, 0, 0, 0, 16, 0, 26, 64, 96,104, 0,129, 36, 4, 20, 64, 0,144, 2, 0, 64, 16, 72, 68, 0, 0, 0, 0,128, 6, 80, 16, 0, 0,240,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 0, 0, 64, 64, 0, 0,128, 32, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,184,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0,128, 3, 0, 0, 24, 0, 0, 0, 0, 0,128, 0, 48, 0, 0, 0, 0, 0,192, 32, 0, 0, 2, 2, 0, 0,128, 65, 28, 0, 0,176, 0, 0, 0,131, 88, 0, 0, 0, 0, 0, 0, 0,112, 0, 0, 0,204,252, ++ 0, 0, 0, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 0, 80, 0,128, 4, 0, 0, 24, 16, 0, 0, 0, 0, 0, 80, 0, 64, 0, 0, 0, 0,192, 8, 88, 8, 0, 96, 32, 32, 8, 16, 36, 0, 0, 80, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 22,146, 0, 0, 0,216,255, ++ 0, 0, 0, 0, 0, 0, 0, 24, 9, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 88, 0, 0, 0, 0, 0, 0,136, 16, 4, 0, 0, 0, 0,192, 4, 24, 1, 16, 97, 36, 0,130, 0, 18, 0, 0,128, 0, 0, 0, 1, 68, 0, 0, 0, 0, 0, 0, 38, 66, 0, 0, 0,236,253, ++ 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 96, 0, 1, 0, 5, 0, 0, 6, 16, 0, 0, 0, 0, 96, 0, 44, 0, 0, 0, 0, 0,240, 32, 30,196, 0,120, 0, 3, 96, 1, 40, 0, 0,112, 0, 0,192, 2, 56, 0, 0, 0, 0, 0,128, 7,160, 0, 0, 0,216,252, ++ 0, 0, 0, 0, 0, 0, 0, 24, 8, 0, 0, 0, 0,128, 0, 0, 0, 2, 0, 0, 24, 0, 0, 0, 0, 0, 0, 64, 48, 0, 0, 0, 0, 0,192, 64, 24, 8, 0, 96, 0, 8,130, 0, 16, 0, 0,128, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 6, 64, 0, 0, 0,160,253, ++ 0, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0,128, 65, 0, 0, 4, 0, 0,152, 16, 0, 0, 0, 0,128, 17,176, 64, 0, 0, 0, 0,192, 8, 24, 1, 35, 97,128, 44,128,145, 36, 0, 0, 64, 0, 0, 0, 35, 33, 0, 0, 0, 0, 0, 0, 6,145, 0, 0, 0,236,252, ++ 0, 0, 0, 0, 0, 0, 0,154, 8, 0, 8, 0, 0,160, 4, 0,128, 6, 0, 0, 2, 3, 0, 0, 0, 0, 0, 0, 4, 6, 0, 0, 0, 0,208, 0, 10, 17, 0,104, 4, 0, 0, 0, 36, 64, 0,144, 64, 0, 64, 0, 8, 0, 0, 0, 0, 0,128, 66, 8, 0, 0, 0,178,254, ++ 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 16, 0, 0, 96, 32, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,208,253, ++ 0, 0, 0, 0, 0, 0, 0, 24, 8, 0, 0, 0, 0,128,129, 0, 0, 6, 4, 0, 24, 0, 0, 0, 0, 0, 0, 0, 32, 8, 0, 0, 0, 0,192, 32, 14, 0, 0, 96, 16, 0, 0, 0, 44, 0, 0,176, 0, 0, 0,131, 96, 32, 0, 0, 0, 0,128, 3, 0, 0, 0, 0,232,252, ++ 8, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0, 8, 0, 0, 70, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 8, 18, 0, 0, 96, 2, 0, 0, 0, 20, 0, 0, 80, 0, 0, 0, 19, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 0,128,205,253, ++ 0, 0, 0, 0, 0, 0, 0,136, 32, 0, 96, 2, 0,128, 32, 0, 0, 6, 1, 0,136, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,192, 4, 8, 0, 0, 32, 36, 0, 0, 0, 32, 0, 0,128, 0, 0, 0, 16, 32,128, 0, 0, 0, 0, 0, 2, 0, 0, 0,128, 40,255, ++ 0, 0, 0, 0, 0, 0, 0, 14, 0, 0,120, 32, 0, 96, 1, 0,128, 1, 0, 0, 22, 4, 0, 0, 0, 0, 0, 0, 12, 32, 0, 0, 0, 0,240, 32, 20, 0, 0,120, 0, 0, 0, 0, 28, 0, 0,112, 0, 0,192, 3, 89, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 13,252, ++ 4, 0, 0, 0, 0, 0, 0, 24, 8, 0, 96, 0, 0,128,129, 0, 0, 6, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 64, 8, 0, 0, 64, 0, 0, 0, 0, 32, 0, 0,128, 0, 0, 0,131, 32, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 75,254, ++ 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 96, 0, 0,128, 1, 0, 0, 22, 1, 0,152, 32, 0, 0, 0, 0, 0, 0, 48, 10, 0, 0, 0, 0,192, 8, 16, 0, 0, 96,128, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 11, 96, 36, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,192,253, ++ 16, 0, 0, 0, 0, 0, 0,138, 0, 0, 0, 0, 0, 32, 48, 0,128, 66, 0, 0, 26, 1, 0, 0, 0, 0, 32, 8,148, 0, 0, 0, 0, 0,208, 0, 2, 0, 0, 72, 4, 0, 32, 17, 4, 0, 0,208, 0, 0, 0, 0, 72, 8,137,160, 0, 1,128, 22, 0, 0, 0, 0,104,252, ++ 0, 0, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 24, 16, 0, 0, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0,192, 0, 24, 0, 0, 32, 64, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 4, 8, 1, 0, 0, 6, 2, 0, 0, 0,240,254, ++ 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0,128, 0, 1,128, 3, 0, 0, 24, 0, 0, 0, 0, 0, 0, 65, 48, 0, 0, 0, 0, 0, 0, 32, 24, 8, 0, 96, 0, 0, 96, 1, 48, 0, 0,192, 0, 0, 0, 0, 88, 0, 11,224, 0, 0, 0, 6, 0, 0, 0, 0, 0,255, ++ 12, 0, 0, 0, 0, 0, 0, 24, 17, 0, 0, 0, 0, 0, 8, 0,128, 4, 0, 0,152, 16, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0,192, 8, 88, 0, 0, 96, 16, 0,160, 0, 48, 9, 0, 0, 40, 0, 0, 0, 40, 0, 5, 32, 1, 0, 0, 6, 1, 0, 0, 0, 65,253, ++ 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 72, 16, 0, 0, 0, 0, 0,136, 16, 16, 0, 0, 0, 0,192, 4, 24, 5, 0, 0, 32, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 64, 0, 8,128, 0, 0, 0, 38, 0, 0, 0, 0,252,253, ++ 0, 0, 0, 0, 0, 0, 0, 22, 8, 0, 0, 0, 0, 96,128, 0, 0, 5, 0, 0, 30, 0, 0, 0, 0, 0, 96, 0, 44, 0, 0, 0, 0, 0,240, 32, 30, 0, 0, 56, 0, 0,224, 0, 60, 16, 0,240, 0, 0, 0, 0, 56, 0, 7, 64, 1, 0,128, 7, 1, 0, 0, 0, 24,253, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 48, 32, 0, 0, 0, 0,192, 64, 24, 0, 0, 0, 0, 0, 0, 1, 48, 0, 0,192, 0, 0, 0, 0, 64, 0, 8,128, 0, 0, 0, 2, 2, 0, 0,128,124,254, ++ 0, 0, 0, 0, 0, 0, 0,152, 16, 0, 0, 0, 0,128, 73, 0, 0, 4, 0, 0, 88, 16, 0, 0, 0, 0,128, 5, 50, 1, 0, 0, 0, 0,192, 8,152, 4, 0, 96, 34, 0,128, 0, 48, 10, 0,192, 68, 0, 0, 0, 32, 0, 4, 0, 1, 0, 0, 66, 0, 0, 0, 0, 92,252, ++ 0, 0, 0, 0, 0, 0, 0,154, 8, 0, 0, 0, 0,160,133, 0,128, 38, 4, 0, 2, 0, 0, 0, 0, 0, 32, 4, 5, 18, 0, 0, 0, 0, 16, 0, 90, 0, 0,104, 4, 33, 36, 17, 52, 0, 0, 16, 0, 0, 64, 2, 40, 4, 41, 32, 1, 1,128, 34, 4, 0, 0, 0, 24,253, ++ 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0,128, 1, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 8, 0, 96, 32, 0,128, 0, 1, 0, 0, 0, 0, 0, 0, 1, 65, 64, 4,132, 0, 0, 0, 4, 0, 0, 0, 0, 64,254, ++ 0, 0, 0, 0, 0, 0, 0, 24, 8, 0, 0, 0, 0, 0, 1, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0,192, 0, 24, 8, 0, 96, 16, 12, 96, 1, 48, 16, 0,192, 32, 0,192, 2, 56, 0, 11, 96, 1, 0,128, 3, 0, 0, 0, 0,156,255, ++ 8, 0, 0, 0, 0, 0, 0, 88, 0, 0, 0, 0, 0, 0,129, 0, 0, 20, 1, 0, 64, 0, 0, 0, 0, 0, 0, 32, 0, 66, 0, 0, 0, 0,192, 0, 24, 1, 0, 96, 2,136,176, 0, 0, 0, 0,192, 2, 0, 64, 1, 72, 0, 5,160, 0, 0,128, 4, 0, 0, 0,128, 73,252, ++ 0, 0, 0, 0, 0, 0, 0,152, 32, 0, 0, 0, 0,128, 9, 0, 0, 6, 1, 0, 0, 8, 0, 0, 0, 0, 0, 0,128, 8, 0, 0, 0, 0,192, 16, 8, 5, 0, 96, 36, 4, 4, 1,128, 64, 0, 0, 4, 0, 0, 2, 32, 0, 8, 0, 1, 0, 0, 2, 0, 0, 0,128,100,255, ++ 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0,224, 1, 1,128, 7, 0, 0, 6, 0, 0, 0, 0, 0, 96, 0, 13, 0, 0, 0, 0, 0,240, 0, 14, 0, 0, 88, 0, 15,224, 0, 60, 0, 0,240, 64, 0,192, 1, 80, 0, 7,224, 0, 0, 0, 5, 0, 0, 0, 0,128,254, ++ 4, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 0,128, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 8, 0, 0, 0, 0, 0, 0, 24, 0, 0, 96, 0, 4, 8, 1, 48, 0, 0,192, 32, 0, 0, 2, 32, 0, 8, 0, 1, 0, 0, 2, 0, 0, 0,128,181,255, ++ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0,128,133, 0, 0, 38, 1, 0, 24, 9, 0, 0, 0, 0,128, 17, 48, 2, 0, 0, 0, 0, 0, 64, 24, 4, 0, 32,128, 76,128, 0, 48, 8, 0,192, 8, 0, 0, 1, 72, 0, 4,160, 0, 0, 0, 4, 0, 0, 0, 0, 44,253, ++ 0, 0, 0, 0, 0, 0, 0,154, 8, 0, 0, 0, 0, 32, 5, 0,128, 64, 0, 0, 2, 17, 0, 0, 0, 0, 32,144,164, 16, 0, 0, 0, 0, 80, 64, 90, 0, 0, 40, 4,133,164, 16, 36, 33, 0,208, 0, 0, 64, 34, 41, 8, 13, 32, 5, 0,128, 22, 16, 0, 0, 0,220,253, ++ 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0,128, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0,128, 0, 24, 8, 0, 96, 32, 0, 0,129, 16, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0,128,128, 0, 0, 6, 2, 0, 0, 0,228,255, ++ 0, 0, 0, 0, 0, 0, 0, 16, 8, 0, 0, 0, 0,128,129, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 64, 48, 0, 0, 0, 0, 0,112, 0, 16, 8, 0, 64, 16, 12,224, 0, 44, 0, 0,192, 64, 0,192, 2, 56, 0, 12,100, 1, 0, 0, 6,192,128, 0, 0,240,252, ++ 8, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0,128, 9, 0, 0, 32, 1, 0,136, 4, 0, 0, 0, 0, 0, 4, 48, 64, 0, 0, 0, 0,144, 0, 16, 1, 0, 96, 2, 32, 36, 1, 20, 0, 0, 0, 0, 0, 64, 1, 72, 0, 0,160, 0, 0, 0, 6, 1, 2, 0,128,177,252, ++ 0, 0, 0, 0, 0, 0, 0,152, 32, 0, 0, 0, 0, 0, 32, 0, 0, 22, 0, 0, 64, 16, 0, 0, 0, 0, 0, 9, 0, 4, 0, 0, 0, 0, 64, 0, 24, 5, 0, 96, 36,132,136, 0, 32, 0, 0, 0, 2, 1, 0, 2, 32, 0, 0, 16, 1, 0, 0, 34,192, 40, 0,128,156,252, ++ 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0,224, 0, 0,128, 7, 2, 0, 6, 0, 0, 0, 0, 0,224,129, 28, 0, 0, 0, 0, 0,160, 0, 30, 0, 0,120, 0, 11, 64, 1, 28, 0, 0,240, 0, 0,192, 1, 80, 0, 15,224, 0, 0,128, 3,241, 0, 0, 0, 80,253, ++ 4, 0, 0, 0, 0, 0, 0, 24, 8, 0, 0, 0, 0, 0,128, 0, 0, 2, 0, 0, 24, 0, 0, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 64, 0, 24, 0, 0, 96, 0, 12,128, 0, 32, 0, 0,192, 0, 0, 0, 2, 32, 0, 12, 0, 1, 0, 0, 6,194, 0, 0,128,121,254, ++ 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0,128, 1, 0, 0, 6, 2, 0, 24, 33, 0, 0, 0, 0,128, 9,178, 64, 0, 0, 0, 0,144, 0, 24, 4, 0, 96,128, 44, 40, 1, 16, 0, 0,192, 32, 0, 0, 1, 72, 0, 44,162, 0, 0, 0, 70,192, 72, 0, 0, 40,255, ++ 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0,160,133, 0,128, 38, 4, 0, 26, 1, 0, 0, 0, 0,160, 1,164, 0, 0, 0, 0, 0,208, 24, 90, 0, 0, 40, 4, 41, 36, 0, 52, 0, 0, 80, 64, 0, 64, 16, 8, 20, 13, 32, 72, 36,160, 6,144, 16, 0, 0,134,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,128, 1, 0, 0, 6, 0, 0, 24, 16, 0, 0, 0, 0, 0, 0, 16, 16, 0, 0, 0, 0, 64, 0, 24, 8, 0, 0, 64, 4, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 2, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0,132,254, ++ 0, 0, 0, 0, 0, 0, 0, 24, 8, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 24, 0, 0, 0, 0, 0, 0,128, 48, 0, 0, 0, 0, 0,192, 32, 24, 8, 0, 96, 0, 12,128, 65, 48, 16, 0,112, 0, 0, 0,129, 96, 0, 12,132, 65, 44, 0, 6,176, 0, 0, 0,132,255, ++ 8, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0,128,129, 0, 0, 22, 1, 0,152, 16, 0, 0, 0, 0,128, 5, 48, 65, 0, 0, 0, 0,192, 8, 24, 1, 0, 0, 16, 76, 16, 8, 0, 0, 0,144, 0, 0, 0, 34, 0, 20, 0, 0, 0, 20, 0, 32, 84, 0, 0,128,149,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 9, 0, 0, 6, 1, 0, 88, 16, 0, 0, 0, 0,128, 5, 0, 16, 0, 0, 0, 0,192, 4, 24, 5, 0, 32, 32, 0,129, 81,128, 64, 0, 64, 0, 0, 0, 0, 36,128, 0,144, 0, 34, 0, 32,128, 0, 0,128,168,255, ++ 0, 0, 0, 0, 0, 0, 0, 22, 16, 0, 0, 0, 0,224, 1, 1,128, 7, 0, 0, 22, 0, 0, 0, 0, 0,224,129, 28, 0, 0, 0, 0, 0,240, 32, 30, 0, 0, 88, 0, 7,224, 1, 60, 0, 0,160, 0, 0,192, 3, 88, 0, 15, 96, 1, 28,128, 7,114, 0, 0, 0,252,253, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 6, 0, 0, 24, 0, 0, 0, 0, 0,128, 1, 0, 32, 0, 0, 0, 0,192, 64, 8, 0, 0, 96, 0, 0,128, 1, 48, 8, 0, 64, 0, 0, 0, 1, 32, 0, 12,128, 0, 32, 0, 6,128, 0, 0,128, 17,254, ++ 0, 0, 0, 0, 0, 0, 0, 24, 33, 0, 0, 0, 0,128,132, 0, 0, 34, 1, 0, 72, 16, 0, 0, 0, 0,128,137, 48, 1, 0, 0, 0, 0,192, 8, 8, 4, 0, 96, 34,140,144,145, 48, 2, 0,144, 0, 0, 0, 83, 96, 36,140,130,145, 20, 0, 70, 65, 0, 0, 0,204,253, ++ 16, 0, 0, 0, 0, 0, 0, 26, 1, 0, 0, 0, 0, 32, 0, 0,128, 34, 4, 0, 10, 1, 0, 8, 0, 0,160, 5, 5, 18, 0, 0, 0, 0,144, 64, 10, 1, 0,104, 0, 65,162, 8, 20, 33, 0,208, 0, 2, 67, 1, 72, 4, 37,160, 4, 20,160, 0,208, 0, 2, 3, 36,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 1, 0, 6, 0, 0, 24, 16, 0, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 64, 0, 16, 16, 0, 96, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 2, 33, 64, 8, 4,129, 32, 0, 6, 0, 0, 0, 0, 68,252, ++ 0, 0, 0, 0, 0, 0, 0, 8, 16, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 16, 0, 0, 0, 0, 0,128, 0, 1, 0, 0, 0, 0, 0,176, 0, 14, 0, 0, 96, 16, 0,128, 0, 28, 0, 0,192, 64, 8,200, 1, 88, 0, 7,224, 0, 28, 0, 6,192, 32, 16, 8,220,252, ++ 12, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 80, 0, 0, 22, 1, 0,152, 16, 0, 0, 0, 0, 0, 1, 0, 66, 0, 0, 0, 0, 80, 0, 18, 0, 0, 0, 2,128, 2, 40, 36, 0, 0, 0, 0, 0, 64, 2, 40, 0, 9, 32, 1, 36, 0, 6, 4, 4, 0,129,233,255, ++ 4, 0, 0, 0, 0, 0, 0, 24, 1, 0, 0, 0, 0, 0, 4, 1, 0, 6, 1, 0, 88, 16, 0, 96, 1, 0, 0, 16,128, 0, 0, 0, 0, 0,128, 0, 8, 0, 0, 96, 0, 64, 4, 0, 18, 0, 0, 0, 2, 65, 0, 1, 64, 0, 4,128, 0, 16, 0, 38, 0, 64, 0,128, 16,255, ++ 0, 0, 0, 0, 0, 0, 0, 30, 8, 0, 0, 0, 0, 96, 0, 0,128, 3, 0, 0, 30, 0, 0,120, 64, 0,224,129, 12, 8, 0, 0, 0, 0,112, 0, 20, 0, 0,120, 16, 3, 96, 1, 40, 0, 0,240, 0, 6,144, 2, 56, 0, 10, 64, 1, 40,128, 7,241, 0, 6, 16, 64,253, ++ 12, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 65, 0, 0, 6, 0, 0, 24, 0, 0, 96, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0,128, 0, 8, 0, 0, 96, 32, 0,128, 1, 16, 0, 0,192, 0, 0, 8, 1, 64, 0, 4,128, 0, 16, 0, 6,192, 0, 0,136,113,254, ++ 0, 0, 0, 0, 0, 0, 0,144, 16, 0, 0, 0, 0,128, 17, 0, 0, 38, 1, 0, 88, 16, 0, 96, 0, 0, 0, 9, 49, 9, 0, 0, 0, 0, 64, 0, 16, 0, 0, 96, 2, 72,132, 81, 36, 0, 0,192, 36, 88, 64, 2, 32, 0, 9, 0, 1, 32, 0, 38,193, 68, 24, 0,120,255, ++ 0, 0, 0, 0, 0, 0, 0, 10, 1, 0, 0, 0, 0,160,133, 0,128, 2, 4, 0, 26, 0, 0, 0, 0, 0,160, 16, 53, 33, 0, 0, 0, 0, 16, 40, 26, 0, 0, 40, 1, 41,160, 16, 4,128, 18, 20, 0, 0, 64, 33, 9, 1, 13, 32, 8,132,136, 22, 16, 0, 0, 0,252,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,128, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 4, 4, 1, 1, 0, 4, 0, 0, 0, 0, 2, 0, 16, 0, 0, 64, 0, 0, 6, 2, 32, 0, 0,136,252, ++ 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0,128, 1, 0,128, 3, 0, 0, 24, 0, 0, 0, 0, 0,128,129, 16, 16, 0, 0, 0, 0,192, 32, 24, 0, 0, 56, 0, 12,232, 0, 48,136, 3,192,128, 0,192, 1, 96, 16, 12,130, 1, 48, 8, 4, 64, 32, 0, 0,228,255, ++ 12, 0, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0,128,129, 0,128, 4, 0, 0,152, 32, 0, 0, 0, 0, 0, 8, 32, 2, 0, 0, 0, 0, 0, 8, 0, 8, 0, 72, 0, 76, 32, 1, 48,128, 4, 0, 2, 0, 64, 2, 0, 4, 32, 0, 68, 0, 0, 4,129, 2, 0, 0, 93,255, ++ 4, 0, 0, 0, 0, 0, 0, 8, 1, 0, 0, 0, 0,128, 8, 0, 0, 2, 0, 0, 24, 16, 0, 0, 0, 0,128, 32, 0, 1, 0, 0, 0, 0, 64, 0,129, 0, 0, 32, 0, 0,132, 0, 0, 1, 2,192, 2, 0, 0, 1, 32,128, 64,128, 0, 18, 64, 38, 0, 0, 1, 0, 24,254, ++ 0, 0, 0, 0, 0, 0, 0, 22, 8, 0, 0, 0, 0,224, 0, 1, 0, 5, 0, 0, 30, 0, 0, 0, 0, 0, 96, 1, 60, 32, 0, 0, 0, 0,176, 0, 30, 8, 0, 80, 0, 7, 64, 1, 60, 16, 5,240, 32, 0,128, 2, 88, 0, 15,100, 1, 44,128, 7,241, 0, 0, 0, 36,253, ++ 12, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0,128, 1, 0, 0, 2, 0, 0, 24, 0, 0, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 64, 0, 24, 4, 0, 32, 0, 0,136, 0, 48, 8, 2,192, 64, 0, 0, 1, 32, 0, 12,130, 0, 16, 0, 6, 66, 0, 0,128, 8,255, ++ 0, 0, 0, 0, 0, 0, 0,152, 16, 0, 0, 0, 0,128,133, 0, 0, 4, 0, 0, 24, 5, 0, 0, 0, 0,128,129, 32, 16, 0, 0, 0, 0,192, 72, 24, 0, 0, 64, 0, 12, 32, 1,176, 0, 4,192, 8, 0, 64, 2, 96, 36, 12,128,145, 48, 18, 70,192, 64, 0, 0, 52,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,252, ++ 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 64, 0, 8, 0, 1, 0, 0, 0,128, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 2, 0, 12,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 1, 32, 0, 0, 0, 0, 0, 76,254, ++ 44, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 16, 2, 2, 64, 0, 8, 0, 1, 32, 32, 4,132, 0, 16, 2, 2, 64, 64, 8, 8, 1, 33, 16, 4,130, 0, 16, 16, 2,128,209,253, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 8, 0, 0, 1, 0, 0,128, 0, 16, 0, 2, 24, 0, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 0,128,176,255, ++ 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 0, 64, 0, 64, 0, 0, 64, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 1, 32, 0, 8, 0, 1, 16, 0, 4, 64, 2, 0, 88,253, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,128, 0, 0, 0, 2, 64, 0, 8, 0, 0, 0, 0, 0,128, 0, 0,227,254, ++ 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0,128, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 0, 8, 0, 66, 0, 0, 8, 1, 0, 16, 0, 32,128, 0, 8, 2, 0, 32, 0, 4,128, 0, 32, 0, 4,128, 0, 8, 2, 0,116,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 16, 0, 0, 0, 0, 0, 0, 1, 32, 0, 0,128, 0, 0, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 1, 0, 0,152,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 44,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0,128,116,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 1, 0, 0, 2, 64, 0, 8, 4, 1, 32, 0, 0,128, 0, 0,184,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,188,254, ++ 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 8, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,252,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 32, 0, 0, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 92,253, ++ 0, 0, 0, 0, 0, 0, 16, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 8, 4, 0, 32, 0, 0, 2, 0, 0, 8, 1, 2, 0, 0, 0, 0, 0, 0, 0,128, 32, 8, 0, 2, 0, 32, 0, 0,232,252, ++ 0, 0, 0, 0, 0, 0,128, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 2, 0, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,192, 2, 16, 80, 8, 0, 0, 72,128, 16,160, 0, 4, 0, 0, 0, 80, 16, 10, 0, 32, 0, 5,128, 0, 0,128, 0, 8,248,253, ++ 0, 0, 0, 0, 0, 64, 0, 8, 0, 0, 0, 16, 0, 1, 32, 0, 18, 2,128, 0, 0, 0, 16, 0, 0, 0, 0,145, 84, 18, 0, 0, 0, 0, 0, 0,152, 4, 6, 64, 0, 0, 0, 0, 48, 0, 0,128, 0, 16, 0, 38, 1, 2, 0, 2, 64, 16, 0,130, 4, 16, 0, 0, 76,254, ++ 0, 0, 0, 0, 0,128, 0, 8, 0, 0, 0, 16, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 8, 4, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 33, 0, 4, 0, 0, 0, 0, 92,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 1, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 1, 64, 0, 0, 0, 0, 32, 0, 0,128, 0, 4, 0, 1, 0, 0, 0, 0, 0, 0, 0,128, 0, 16, 0, 0,220,252, ++ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 32, 8, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 44,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 56,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 44,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 56,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 64, 4, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 14,253, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 16, 0, 0, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 16, 0, 0,164,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0,180,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 16,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 8, 0, 0, 0, 0, 64, 2, 8, 0, 1, 16, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,156,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 16, 0, 32, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180,252, ++ 8, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0,128, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,252, ++ 4, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 16, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 64, 0, 0, 2, 64, 32, 0, 0,145, 1, 0, 0, 70,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,252, ++ 0, 0, 0, 0, 0, 0, 16, 0, 4, 0, 8, 0, 0, 0, 0, 8, 16, 2, 1, 0, 8, 2, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 2, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 64, 0, 8,128, 0, 17, 0, 0, 1, 16, 0, 0,134,253, ++ 76, 0, 0, 0, 1, 0, 0, 8, 2, 0, 0, 0, 0,132, 0, 0, 16, 0,128, 0, 0, 0, 64, 0, 0, 0,128, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 32, 16, 0, 0, 64, 8, 0, 1, 0, 0, 0, 0, 1, 0, 16, 4, 2, 0, 0, 0,130, 0, 0, 0, 64, 38,253, ++ 32, 0, 0,128, 0, 0, 64, 2, 24, 0, 16, 0, 0, 40, 0, 8, 48, 1, 18, 0, 4, 8, 0, 18, 0, 0, 32, 0, 4, 0, 0, 0, 0, 0, 32, 0, 8, 24, 0, 8, 64, 40, 0, 0, 13,128, 0, 32, 0, 8, 64, 0, 16, 64, 3, 72,128, 8,128, 0,134, 66, 0, 0, 68,253, ++ 0, 0, 32, 0, 0,128, 0, 8, 2, 1, 0, 0, 4, 0, 33, 0,128, 0, 1, 0, 20, 4, 5, 0, 0,128,130, 0, 0, 0, 0, 0, 0, 0,192, 32, 72, 2, 0, 16, 8,136,132, 1, 36,136, 4, 32, 32, 8, 0, 2, 80, 32,134,200, 0, 24, 0, 4, 68, 18, 44, 0, 12,254, ++ 0, 0, 0, 0, 0, 0, 0, 8,128, 0, 0, 0, 8, 0, 0, 0, 0, 0, 1, 0, 0, 4, 1, 0, 0, 0,130, 0, 0, 0, 0, 0, 0, 0, 32, 32, 8, 0, 0, 0, 0, 0, 64, 0, 0, 16, 0, 0, 32, 16, 0, 0, 0, 0, 2, 64, 0, 8, 0, 0, 32, 0, 4, 0,132,254, ++ 0, 0, 8, 0, 0, 32, 0, 0, 4, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 4, 0, 0, 16, 2,128, 0, 32, 0, 2, 0, 0, 0, 0, 1, 16, 0, 0, 0, 0, 0, 0, 2, 0, 16, 0, 0,112,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,254, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 28,254, ++ 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0,196,255, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,244,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,236,255, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0,192,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,200,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,244,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,253, ++ 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 8, 0, 0, 0, 64, 0, 0, 0, 8, 0, 0, 32, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 2, 0, 0, 0,213,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 2, 0, 0, 8, 32, 0, 32, 0, 4,128, 0, 64, 0, 0, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 18, 0, 0, 0,104,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192,254, ++ 32, 0, 4,128, 16, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 73, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212,253, ++ 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,254, ++ 0, 0, 12, 0, 0, 2, 0, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 11, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,252, ++ 0, 0, 4, 0, 64, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 5, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252,252, ++128, 17,176, 0, 32, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,152, 0, 0, 0, 0, 8,128, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108,253, ++224,129, 56,136, 1, 0, 0, 0, 0, 0, 16, 32, 0, 0, 0, 0, 0, 0, 0, 0, 30, 8, 0, 0, 0, 6,192,129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,252, ++128, 1, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 8, 0, 0, 0, 8,160, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,255, ++128, 1, 48, 0, 68, 2, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0,152, 0, 0, 0, 0, 4,160, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108,252, ++ 0, 0,180,160, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0,130, 8, 0, 0, 0, 9, 40, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,255, ++ 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4,128, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253, ++ 0, 0, 48,128, 1, 0, 0, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11, 96, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,253, ++ 8, 0, 48,162, 0, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 2, 0, 0, 0, 5,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,193,253, ++ 0, 0,128, 0, 70, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 0, 0, 0, 8, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,200,252, ++ 0, 0, 12, 16, 7, 0, 0, 0, 0, 0, 16, 32, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 6,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152,254, ++ 4, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 8, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 81,253, ++ 0, 0, 0, 10, 6, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 80, 8, 0, 0, 0, 4,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,253, ++ 16, 0, 4,128, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 13, 32,145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,254, ++ 0, 0, 48, 0, 6, 0, 0, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, 96, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,254, ++ 12, 0, 48, 0, 6, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 8, 0, 0, 0, 13,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33,253, ++ 4, 0,128, 0, 70, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 8, 0, 0, 0, 12, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,136,252, ++ 0, 0, 12,144, 7, 0, 0, 0, 0, 0, 16, 32, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 14,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,254, ++ 24, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 8, 0, 0, 0, 12, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,156,252, ++ 0, 0, 0, 10, 6, 1, 0, 0, 0, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 0,152, 0, 0, 0, 0, 12,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 40,253, ++ 0, 0, 4,128, 0, 0, 0, 0, 0, 0, 8, 66, 0, 0, 0, 0, 0, 0, 0, 0, 26, 2, 0, 0, 0, 41, 40, 49, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,230,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 4,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,254, ++ 0, 0, 60, 0, 6, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 11, 96, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,255, ++ 8, 0, 52, 0, 0, 1, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 0, 0, 0, 72, 8, 0, 0, 0, 5,160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 17,255, ++ 0, 0,128, 0, 0, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 80, 8, 0, 0, 0, 8, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 48,252, ++ 0, 0, 8,144, 1, 0, 0, 0, 0, 0, 24, 32, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 6,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,224,253, ++ 4, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 8, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,215,252, ++ 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 4,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144,254, ++ 16, 0, 52,128, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 1, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96,252, ++ 0, 0, 48, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,148,254, ++ 0, 0, 0, 0, 2, 4, 0, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,254, ++ 12, 0, 0, 0, 22, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4,254, ++ 4, 0,176, 0, 16, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 64, 8, 0, 0, 0, 32,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,113,253, ++ 0, 0, 60,144, 1, 2, 0, 0, 0, 0, 16, 32, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 3,196, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252, ++ 12, 0, 48, 0, 6, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,193,253, ++ 0, 0, 48, 9, 22, 0, 0, 0, 0, 0, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0,161, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,255, ++ 0, 0, 20,130, 64, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 2, 0, 0, 0, 9,160, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0,168,252, ++ 0, 0, 32, 32, 0, 4, 0, 0, 0, 0, 64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 4,132, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 20,255, ++ 0, 0, 48, 32, 2, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0,160,253, ++ 8, 0, 48, 0, 70, 4, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 0, 0, 0, 80, 8, 0, 0, 0, 5, 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26,128, 24,252, ++ 0, 0,128, 0, 16, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 88, 8, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,132,237,255, ++ 0, 0, 44,136, 1, 2, 0, 0, 0, 0, 24, 32, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 6,224, 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 52,252, ++ 4, 0, 0, 8, 6, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 8, 0, 0, 0, 8, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,157,254, ++ 0, 0, 48, 2, 22, 0, 0, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0,152, 0, 0, 0, 0, 4, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0,140,253, ++ 16, 0, 52,146, 6, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0,128, 0, 0, 0, 2, 66, 0, 8, 0, 41,164, 16, 52, 0, 0, 0, 0, 0, 0, 0, 0, 64, 3, 0, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 18,254, ++ 0, 0, 48, 0, 6, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 4, 0, 64, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0,144,253, ++ 0, 0, 48,128, 7, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 11,128, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0,192, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0,228,253, ++ 12, 0, 48,136, 6, 0, 0, 0, 0, 0, 96, 18, 0, 0, 0, 0, 0, 0, 0, 0, 80, 8, 0, 0, 0, 5,128,133, 52, 0, 0, 0, 0, 0, 0, 0, 0, 64, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0,128, 5,253, ++ 4, 0, 16, 9, 64, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 22, 2, 0, 72, 8, 3, 97, 66, 8,128, 9, 1, 10, 0, 0, 0, 0, 0, 0, 0, 0,160, 0, 0, 0,128,133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 10, 0, 0, 0, 0,128,124,254, ++ 0, 0, 60, 0, 1, 1, 0, 0, 0, 0, 24, 32, 0, 0, 0, 0,128, 7, 0, 0, 6,192, 3,120, 0, 6, 96, 1, 12, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 0,224, 1, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0,240,253, ++ 12, 0, 48, 16, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 6, 0, 0, 24, 8, 3, 96, 0, 8,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,129, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,117,254, ++ 0, 0, 48, 1, 0, 0, 0, 0, 0, 0, 96, 20, 0, 0, 0, 0, 0, 6, 0, 0,152, 0, 3, 96, 0, 4, 0, 73, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,172,255, ++ 16, 0, 4,128, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 52, 0, 0,208, 16,130, 16, 0, 0, 0,137, 36, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 64, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 52, 0, 0, 0, 0, 26, 0, 84,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 24, 0, 0, 0, 0, 4, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 48, 0, 0, 0, 0, 24, 0, 44,254, ++ 0, 0, 60, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0, 0, 0, 32, 0,192, 0, 24, 0, 0, 0, 0, 11, 96, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0,192, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0, 0, 60, 0, 0, 0, 0, 30, 0, 72,254, ++ 12, 0, 52, 0, 0, 0, 0, 0, 0, 0,104, 0, 0, 0, 0,176, 0, 0, 64, 66,152, 2, 0, 0, 0, 5, 32, 0, 52, 0, 0, 0, 0, 0, 0, 0, 0, 64, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104, 0, 0, 0, 0, 52, 0, 0, 0, 0, 26, 0, 29,252, ++ 4, 0,128, 0, 32, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 48, 1, 0,128, 66, 16, 8, 0, 0, 0, 8,128, 73, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 8, 0, 0, 0, 0, 4, 48,255, ++ 0, 0, 8,144, 1, 2, 0, 0, 0, 0, 16, 32, 0, 0, 0, 60, 16, 0,240, 0, 6, 0, 0, 0, 0, 6,192, 1, 12, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 12, 0, 0, 0, 0, 6, 0, 44,252, ++ 12, 0, 0, 0, 6, 1, 0, 0, 0, 0, 0, 16, 0, 0, 0, 48, 0, 0, 0, 64, 16, 0, 0, 0, 0, 8,160, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 32,252, ++ 0, 0, 0, 9, 6, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 48, 16, 0, 0, 4, 72, 8, 0, 0, 0, 4,160, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0,224,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,150,252, ++ 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 0, 0, 1, 32, 0, 0,128, 0, 16, 0, 0, 0, 56,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 8, 0, 0, 0, 0, 4,228,255, ++ 40, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 0,136, 4, 1, 0, 0, 0, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0,130,128, 13,254, ++ 0, 0, 0, 6,192, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 2,132, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 80,254, ++ 32, 0, 4, 0, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 0, 0, 1, 32, 0, 0,128, 0, 16, 0, 0, 0,128,253, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 75,252, ++ 32, 0, 0, 17, 16, 24, 0, 2, 64, 0, 0, 1, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 0, 16, 0, 6, 4, 0, 0, 0, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 33, 1, 32, 0,132,144, 0, 16, 0,130, 0,140,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 64, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164,255, ++ 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180,255, ++ 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 4, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 60,252, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,254, ++ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 52,254, ++ 0, 0, 0, 0, 21, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0,136, 2,129, 0, 0, 40, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 8, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,104,255, ++ 0, 1, 80,128, 2, 16, 1, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 24, 32, 0, 4,130, 0, 16, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,128, 0, 16, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 80,252, ++ 0, 0, 16, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 4, 2, 1, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,253, ++ 0, 1, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0,128, 0, 16, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,254, ++ 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 36,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 90,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 44,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 4,136, 0, 1, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,108,254, ++ 0, 0, 32, 0, 12, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,252, ++ 12, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,220,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 57,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 8, 0, 16, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,128, 0, 0, 0, 0, 1, 0, 0, 4,130, 64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,253, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 29,254, ++ 0, 0, 8, 0, 21, 0, 0, 0, 3, 0, 8, 64, 0, 4, 0, 0, 0, 0, 2, 0,128,130, 80, 0, 0, 2, 68,128, 24, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16,255, ++ 0, 0, 16, 8, 1, 1, 0, 0, 0, 0, 96, 8, 0, 0, 0, 8,128, 10,128,136, 2, 0,112, 0, 20,140, 66, 65, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 1, 0, 0, 32, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 32, 0, 0, 0, 0, 16, 0, 0, 0, 24, 0, 0,172,254, ++ 0, 0, 16, 8,128, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 16, 2, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 32, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 52,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 16, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,128, 0, 0, 4,128, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,196,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,255, ++ 8, 0, 0, 0, 4, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0,165,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,180,254, ++ 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,210,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 4,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,252,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,255, ++ 0, 0, 8, 0, 2, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 84,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,124,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,164,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 26, 0, 0, 40, 1, 0, 0, 0, 52, 2, 0, 16, 64, 0, 64, 0, 0, 0, 0, 0, 0, 4,128, 0, 0, 0, 0, 0,216,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 16, 0, 0, 0, 0, 8, 0,128, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,208,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 32, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 3, 2, 0, 0, 0, 0, 48,144, 7, 0, 0, 0, 0,132,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 4, 0, 64, 16, 0, 0, 0, 4, 9, 0, 0, 66, 0, 0, 19, 0, 0, 0, 0, 0, 48,129, 22, 2, 0, 0, 0, 76,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 4,128, 0, 0, 32, 18, 0, 0, 0, 0, 1, 0,192, 8, 0, 0, 3, 4, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0,140,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,240, 64, 30, 4, 0, 88, 0, 0, 0, 0, 56, 8, 0,240, 32, 0,192, 3, 0, 0, 0, 0, 0, 60, 32, 7, 1, 0, 0, 0,100,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 24, 4, 0, 32, 16, 0, 0, 0, 16, 0, 0,192,128, 0, 0, 3, 0, 0, 0, 0, 0, 48, 0, 6, 0, 0, 0, 0,136,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 1, 0, 32, 2, 0, 0, 0,144, 8, 0,192, 8, 0, 0, 35, 4, 0, 0, 0, 0, 48, 34, 32, 1, 0, 0, 0,220,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 40, 4, 0, 0, 0, 4, 0, 0,208, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 34,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 16, 0, 0, 0, 0, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 36,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56, 16, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0,100,254, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 72, 2, 0, 0, 0, 0, 0, 0,192, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 6, 0, 0, 0,128, 41,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 0, 0, 32, 64, 0, 0, 0, 0, 9, 0,192, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0,128, 36,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 4, 0, 80, 0, 0, 0, 0, 12, 0, 0,240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 56,254, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 32, 16, 0, 0, 0, 48, 8, 0,192, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 77,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 32, 1, 0, 0, 0, 48, 0, 0,192, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 2, 0, 0, 0, 16,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 8, 0, 40, 1, 0, 0, 0, 52, 10, 0, 16, 0, 0, 64, 3, 0, 0, 0, 0, 0, 0,128, 22, 0, 0, 0, 0, 32,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,120,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 56, 0, 0, 0, 0, 60, 0, 0,192, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,128, 7, 0, 0, 0, 0, 88,252, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 66, 4, 0, 72, 16, 0, 0, 0,132, 8, 0,192, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0,128, 16, 1, 0, 0, 0,169,254, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 32, 2, 0, 0, 0, 0, 9, 0,192, 66, 0, 0, 11, 4, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0,152,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 80, 16, 0, 0, 0, 56, 0, 0,240, 0, 0,192, 3, 0, 0, 0, 0, 0, 0, 0, 7, 1, 0, 0, 0, 68,253, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 32, 16, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,128,164,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 5, 0, 32, 2, 0, 0, 0, 16, 10, 0, 0, 68, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 34, 1, 0, 0, 0,140,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 0, 0, 0, 0, 4, 2, 0,208, 0, 0, 64, 0, 4, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 70,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0,192, 64, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,100,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 8, 0, 0, 0, 0, 0, 0, 60, 0, 0,192, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 96,252, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,154, 0, 0, 0, 0, 0, 0, 0, 52, 4, 0, 64, 8, 0, 0, 65, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0,128,173,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 0, 17, 0, 0, 0, 16, 9, 0,192, 66, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 70, 0, 0, 0,128,160,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 24, 0, 0, 0, 0, 56, 0, 0,240, 0, 0,192, 3, 1, 0, 0, 0, 0, 0,128, 7, 2, 0, 0, 0, 33,253, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 96, 64, 0, 0, 0, 32, 0, 0, 64, 32, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,253,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 0, 96, 2, 0, 0, 0, 0, 10, 0,192, 2, 0, 0,138, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,218,253, ++ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 0, 0, 0, 0, 4, 0, 0, 16, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 16, 0, 0, 0, 0, 88,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0,108,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32,252, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 1, 0, 0, 0,109,255, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,152, 4, 0, 0, 33, 0, 0, 0, 48, 9, 0,128, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0,252,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28, 0, 0, 24, 0, 0, 0, 0, 56, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 2, 0, 0, 0,132,252, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 96, 16, 0, 0, 0, 0, 8, 0,128,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 40,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 96, 1, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 52,254, ++ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 0, 0, 0, 0, 4, 0, 0,208, 0, 0, 64, 3, 0, 0, 0, 0, 0, 0,128, 18, 0, 0, 0, 0, 96,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 1, 0, 0, 0, 88,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120, 0, 0, 0, 0, 0, 0, 0,192, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0,196,255, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 4, 0,104, 0, 0, 0, 0, 0, 0, 0, 0, 8, 1, 0, 3, 0, 0, 0, 0, 0, 0, 0, 36, 1, 0, 0, 0,189,254, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 96, 17, 0, 0, 0, 0, 16, 0, 0, 66, 0, 0, 11, 1, 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, 0,112,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 0,112, 0, 0, 0, 0, 12, 0, 0,240, 0, 0,192, 3, 0, 0, 0, 0, 0, 0,128, 5, 2, 0, 0, 0, 52,255, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 64, 0, 0, 0, 48, 8, 0,192, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0,128,140,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 1, 0, 0, 2, 0, 0, 0, 48, 1, 0, 0, 68, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 0,252,253, ++ 16, 0, 0, 0, 0,208, 0, 0, 0, 0, 0, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 64, 3,104, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 26, 1, 0, 40, 4, 0,160, 1, 4, 0, 0, 16, 8, 0, 64, 2, 4, 0, 0, 0, 0, 0,128, 6, 0, 0, 2, 0,210,252, ++ 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 0, 3, 96, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 64, 16, 0,128, 1, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,212,255, ++ 0, 0, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0,224, 1, 0, 0, 0, 0, 0, 0,192, 3,120, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 16, 0,224, 1, 48, 0, 0, 48, 0, 0, 0,130, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 24, 8,164,254, ++ 12, 0, 0, 0, 0,208, 0, 0, 0, 0, 0, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 64, 3,104, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0,128, 4, 0, 64, 2, 0,160, 1, 48, 0, 0, 16, 66, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 32, 1, 0,152,128, 33,254, ++ 4, 0, 0, 0, 0, 0, 40, 0, 0, 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0,160, 0, 20, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 88, 0, 0, 32, 33, 0,128, 1, 48, 6, 0, 0, 8, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0,130,144,255, ++ 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0,192, 0, 24, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 30, 8, 0, 88, 0, 0,192, 1, 60, 0, 0,160, 64, 0,192, 3, 0, 0, 0, 0, 0, 0,128, 7, 2, 0, 30, 0, 65,253, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 32, 16, 0,128, 1, 48, 0, 0,192, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 24, 16, 53,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 88, 16, 0, 32, 1, 0,160, 1, 48, 32, 0,192, 36, 0, 0, 11, 4, 0, 0, 0, 0, 0, 0, 0, 1, 0, 24, 0, 70,255, ++ 32, 0, 0, 0, 0,208, 0, 0, 0, 0, 0, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 64, 3,104, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 2, 72, 0,104, 0, 0,160, 1, 52, 0, 0,144, 2, 0, 64, 0, 4, 0, 0, 0, 0, 0,128, 16, 0, 0, 0, 0,132,255, ++ 0, 0, 0, 0, 0,192, 0, 0, 0, 0, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 0, 3, 96, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 48, 8, 0, 64,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 16,252, ++ 0, 0, 0, 0, 0,240, 0, 0, 0, 0, 0, 0, 0,224, 1, 0, 0, 0, 0, 0, 0,192, 3,120, 0, 0, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,120, 16, 0,224, 1, 48, 0, 0,128, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,232,252, ++ 8, 0, 0, 0, 0,208, 0, 0, 0, 0, 0, 0, 0,160, 1, 0, 0, 0, 0, 0, 0, 64, 3,104, 0, 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 64, 4, 3, 8, 2, 0,160, 1,176, 8, 0,192, 4, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 16, 1, 0, 0, 0, 53,254, ++128, 33, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,128, 0, 16, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0,128, 4, 19, 0, 17, 0,128, 1, 48, 1, 0,128, 68, 0, 0, 17, 2, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0,148,254, ++224, 1, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0,192, 0, 24, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 6,192, 3,113, 0, 0,192, 1, 44, 8, 0,112, 0, 0,192, 3, 0, 0, 0, 0, 0, 0,128, 1, 1, 0, 0, 0, 52,254, ++132, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 96, 64, 0,128, 1, 48, 8, 0,128, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 88,252, ++128, 1, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 16, 5, 3, 1, 2, 0,128, 1, 48, 2, 0, 64, 40, 0, 0,138, 0, 0, 0, 0, 0, 0, 0, 36, 1, 0, 0, 0,108,253, ++ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 30,253, ++ 32, 0, 4,128, 0, 0, 0, 2, 64, 0, 8, 0, 1, 0, 0, 4,128, 0, 16, 0, 2, 0, 0, 0, 0, 1, 32, 0, 0, 0, 0, 0, 0, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 0,204,253, ++ 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0,128, 0, 16, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48,253, ++ 44, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 16, 8, 0, 1, 32, 0, 4, 0, 0, 0, 0, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32,136, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2,128,245,253, ++ 4, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 8, 0, 0,136,128, 8, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0,128, 92,253, ++ 32, 0, 4,128, 0, 0, 0, 2, 64, 0, 8, 0, 1, 0, 0, 4,128, 0, 16, 0, 2, 0, 0, 0, 0, 1, 32, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 1, 0, 0, 0,128, 0, 0, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 0, 16, 0, 2, 0,169,255, ++ 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 32, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0,177,255, ++ 32, 0, 4,128, 0, 16, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4,128, 0, 16, 0, 2, 64, 16, 8, 33, 1, 32, 0, 4, 5, 0, 0, 0, 0, 16, 0, 0, 65, 0, 0, 4, 1, 0,136, 0,130, 0, 0, 0, 2, 64, 0, 8, 0, 1, 32, 0, 4, 0, 64, 16, 0, 2, 0,158,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 44,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,150,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 56,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,252, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 32, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 12,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0, 0, 0, 0, 0, 8, 0, 32, 0, 0, 0, 4,255, ++ 0, 0, 32, 0, 4, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 34, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 16, 0, 2, 0, 0, 0, 0,180,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 2, 0, 0, 0, 0, 52,254, ++ 0, 0, 32, 0, 4, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 4, 0,248,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,184,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,248,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0,120,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,120,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 45,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0,188,255, ++ 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,255, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 80,254, ++ 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0,164,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 32,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 8, 1, 16, 0, 0,128, 0, 0, 0, 2, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,128,152,253, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 64, 73,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,136, 0, 16, 0, 0, 64, 0, 16, 0, 1, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,128, 0,130, 2, 0, 0, 32,255, ++128, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 4,128, 64, 0, 0, 0, 0, 0, 16, 0, 0, 32, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0,128, 0, 8, 66, 8, 32, 8, 0, 0, 1, 32, 0, 16, 64, 0, 0, 7, 1, 0, 20, 0, 0, 0, 80, 8, 2, 65, 2, 0, 0,176,253, ++128, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 2,128, 32, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 8, 1, 0, 16, 0, 0, 0, 16, 4, 1, 33, 0, 0, 0, 8,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 4, 0, 0, 16, 0,128, 0, 8, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 88,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 1, 0, 0, 0, 0, 16, 0, 64, 1, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,124,252, ++ 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 32, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 8,253, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64,105,255, ++ 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,188,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 28,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 2, 6, 0, 8, 8, 0, 0, 2, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128,128, 0, 0, 0, 0, 92,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 60,254, ++ 0, 4,129, 0, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,144, 0, 2, 0, 32, 66, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0,132, 0, 0, 0, 0, 0, 0, 0, 32, 1, 36,128, 0,144, 0, 16, 17, 0, 72, 0,132,255, ++ 0, 0, 0, 32, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32, 0, 0,128, 0, 0, 64, 0, 64, 0, 0, 0, 0, 32, 8, 0, 0, 0, 0, 0, 0, 24, 0, 2, 0, 0, 2, 1, 0, 32, 0, 0, 0, 0, 0, 0, 0, 64, 0, 8, 0, 1, 32, 0, 20,128, 2, 16, 0,196,252, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 1, 0, 0,164,255, ++ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 0, 0, 2, 64, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 8, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,128, 0, 16, 0, 2, 64, 0, 0, 0, 0, 32, 0,172,253, ++ 0, 23,224, 2,188,128, 11, 80, 1, 42, 64, 5,168, 0, 45,160, 2, 92,128, 10, 80, 1, 46, 64, 5,168, 0, 21,224, 2, 0, 0, 0, 0,128, 10, 80, 1, 42, 64, 5,104, 1, 21,224, 2, 84,128, 10, 80, 1, 42, 64, 5,104, 1, 21,160, 5, 84,128, 10, 80, 1,100,253, ++192, 8, 20, 1,131, 85, 4,136, 0, 17,104, 2, 77,128, 96,145, 1, 34, 64, 6,200, 0, 17, 32, 3, 77,128, 8,144, 1, 0, 0, 0, 0,208, 4,200, 0, 25,120, 2, 77,162, 9,144, 1, 39,208, 4,156, 0, 17, 40, 3, 37,162, 12,148,172, 50, 80, 6,202, 0, 80,255, ++255,255 +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/CVS/Entries linux-2.6.17/arch/sh/boards/renesas/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,5 @@ ++D/edosk7705//// ++D/hs7751rvoip//// ++D/r7780rp//// ++D/rts7751r2d//// ++D/systemh//// +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/CVS/Repository linux-2.6.17/arch/sh/boards/renesas/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/renesas +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/CVS/Root linux-2.6.17/arch/sh/boards/renesas/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/CVS/Entries linux-2.6.17/arch/sh/boards/renesas/edosk7705/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/edosk7705/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,4 @@ ++/Makefile/1.2/Sun Oct 16 16:31:08 2005/-ko/ ++/io.c/1.1/Mon Aug 30 12:55:31 2004/-ko/ ++/setup.c/1.1/Mon Aug 30 12:55:31 2004/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/CVS/Repository linux-2.6.17/arch/sh/boards/renesas/edosk7705/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/edosk7705/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/renesas/edosk7705 +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/CVS/Root linux-2.6.17/arch/sh/boards/renesas/edosk7705/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/edosk7705/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/Makefile linux-2.6.17/arch/sh/boards/renesas/edosk7705/Makefile +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/edosk7705/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/edosk7705/Makefile 2006-07-12 16:54:20.000000000 +0000 +@@ -1,10 +1,6 @@ + # + # Makefile for the EDOSK7705 specific parts of the kernel + # +-# Note! Dependencies are done automagically by 'make dep', which also +-# removes any old dependencies. DON'T put your own dependencies here +-# unless it's something special (ie not a .c file). +-# + + obj-y := setup.o io.o + +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/CVS/Entries linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,7 @@ ++/Kconfig/1.1/Fri Jun 24 11:21:00 2005/-ko/ ++/Makefile/1.4/Wed Nov 23 15:42:02 2005/-ko/ ++/io.c/1.8/Sun Feb 5 21:55:28 2006/-ko/ ++/irq.c/1.2/Fri Oct 28 13:12:48 2005/-ko/ ++/pci.c/1.3/Sun Aug 15 16:59:25 2004/-ko/ ++/setup.c/1.5/Wed Jan 4 16:34:30 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/CVS/Repository linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/renesas/hs7751rvoip +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/CVS/Root linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/Kconfig linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/Kconfig +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/Kconfig 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/Kconfig 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,12 @@ ++if SH_HS7751RVOIP ++ ++menu "HS7751RVoIP options" ++ ++config HS7751RVOIP_CODEC ++ bool "Support VoIP Codec section" ++ help ++ Selecting this option will support CODEC section. ++ ++endmenu ++ ++endif +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/Makefile linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/Makefile +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/Makefile 2006-07-12 16:54:20.000000000 +0000 +@@ -1,12 +1,8 @@ + # + # Makefile for the HS7751RVoIP specific parts of the kernel + # +-# Note! Dependencies are done automagically by 'make dep', which also +-# removes any old dependencies. DON'T put your own dependencies here +-# unless it's something special (ie not a .c file). +-# + +-obj-y := mach.o setup.o io.o irq.o led.o ++obj-y := setup.o io.o irq.o + + obj-$(CONFIG_PCI) += pci.o + +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/io.c linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/io.c +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/io.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/io.c 2006-07-12 16:54:20.000000000 +0000 +@@ -14,18 +14,13 @@ + #include <linux/config.h> + #include <linux/kernel.h> + #include <linux/types.h> ++#include <linux/module.h> + #include <asm/io.h> + #include <asm/hs7751rvoip/hs7751rvoip.h> + #include <asm/addrspace.h> + +-#include <linux/module.h> +-#include <linux/pci.h> +-#include "../../../drivers/pci/pci-sh7751.h" +- +-extern void *area5_io8_base; /* Area 5 8bit I/O Base address */ + extern void *area6_io8_base; /* Area 6 8bit I/O Base address */ + extern void *area5_io16_base; /* Area 5 16bit I/O Base address */ +-extern void *area6_io16_base; /* Area 6 16bit I/O Base address */ + + /* + * The 7751R HS7751RVoIP uses the built-in PCI controller (PCIC) +@@ -34,25 +29,8 @@ + * like the other Solution Engine boards. + */ + +-#define PCIIOBR (volatile long *)PCI_REG(SH7751_PCIIOBR) +-#define PCIMBR (volatile long *)PCI_REG(SH7751_PCIMBR) +-#define PCI_IO_AREA SH7751_PCI_IO_BASE +-#define PCI_MEM_AREA SH7751_PCI_CONFIG_BASE +- +-#define PCI_IOMAP(adr) (PCI_IO_AREA + (adr & ~SH7751_PCIIOBR_MASK)) +- +-#if defined(CONFIG_HS7751RVOIP_CODEC) + #define CODEC_IO_BASE 0x1000 +-#endif +- +-#define maybebadio(name,port) \ +- printk("bad PC-like io %s for port 0x%lx at 0x%08x\n", \ +- #name, (port), (__u32) __builtin_return_address(0)) +- +-static inline void delay(void) +-{ +- ctrl_inw(0xa0000000); +-} ++#define CODEC_IOMAP(a) ((unsigned long)area6_io8_base + ((a) - CODEC_IO_BASE)) + + static inline unsigned long port2adr(unsigned int port) + { +@@ -60,9 +38,10 @@ + if (port == 0x3f6) + return ((unsigned long)area5_io16_base + 0x0c); + else +- return ((unsigned long)area5_io16_base + 0x800 + ((port-0x1f0) << 1)); ++ return ((unsigned long)area5_io16_base + 0x800 + ++ ((port-0x1f0) << 1)); + else +- maybebadio(port2adr, (unsigned long)port); ++ maybebadio((unsigned long)port); + return port; + } + +@@ -79,25 +58,10 @@ + } + + #if defined(CONFIG_HS7751RVOIP_CODEC) +-static inline int +-codec_port(unsigned long port) +-{ +- if (CODEC_IO_BASE <= port && port < (CODEC_IO_BASE+0x20)) +- return 1; +- else +- return 0; +-} +-#endif +- +-/* In case someone configures the kernel w/o PCI support: in that */ +-/* scenario, don't ever bother to check for PCI-window addresses */ +- +-/* NOTE: WINDOW CHECK MAY BE A BIT OFF, HIGH PCIBIOS_MIN_IO WRAPS? */ +-#if defined(CONFIG_PCI) +-#define CHECK_SH7751_PCIIO(port) \ +- ((port >= PCIBIOS_MIN_IO) && (port < (PCIBIOS_MIN_IO + SH7751_PCI_IO_SIZE))) ++#define codec_port(port) \ ++ ((CODEC_IO_BASE <= (port)) && ((port) < (CODEC_IO_BASE + 0x20))) + #else +-#define CHECK_SH7751_PCIIO(port) (0) ++#define codec_port(port) (0) + #endif + + /* +@@ -110,15 +74,13 @@ + unsigned char hs7751rvoip_inb(unsigned long port) + { + if (PXSEG(port)) +- return *(volatile unsigned char *)port; +-#if defined(CONFIG_HS7751RVOIP_CODEC) ++ return ctrl_inb(port); + else if (codec_port(port)) +- return *(volatile unsigned char *)((unsigned long)area6_io8_base+(port-CODEC_IO_BASE)); +-#endif +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- return *(volatile unsigned char *)PCI_IOMAP(port); ++ return ctrl_inb(CODEC_IOMAP(port)); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ return ctrl_inb(pci_ioaddr(port)); + else +- return (*(volatile unsigned short *)port2adr(port) & 0xff); ++ return ctrl_inw(port2adr(port)) & 0xff; + } + + unsigned char hs7751rvoip_inb_p(unsigned long port) +@@ -126,38 +88,36 @@ + unsigned char v; + + if (PXSEG(port)) +- v = *(volatile unsigned char *)port; +-#if defined(CONFIG_HS7751RVOIP_CODEC) ++ v = ctrl_inb(port); + else if (codec_port(port)) +- v = *(volatile unsigned char *)((unsigned long)area6_io8_base+(port-CODEC_IO_BASE)); +-#endif +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- v = *(volatile unsigned char *)PCI_IOMAP(port); ++ v = ctrl_inb(CODEC_IOMAP(port)); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ v = ctrl_inb(pci_ioaddr(port)); + else +- v = (*(volatile unsigned short *)port2adr(port) & 0xff); +- delay(); ++ v = ctrl_inw(port2adr(port)) & 0xff; ++ ctrl_delay(); + return v; + } + + unsigned short hs7751rvoip_inw(unsigned long port) + { + if (PXSEG(port)) +- return *(volatile unsigned short *)port; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- return *(volatile unsigned short *)PCI_IOMAP(port); ++ return ctrl_inw(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ return ctrl_inw(pci_ioaddr(port)); + else +- maybebadio(inw, port); ++ maybebadio(port); + return 0; + } + + unsigned int hs7751rvoip_inl(unsigned long port) + { + if (PXSEG(port)) +- return *(volatile unsigned long *)port; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- return *(volatile unsigned long *)PCI_IOMAP(port); ++ return ctrl_inl(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ return ctrl_inl(pci_ioaddr(port)); + else +- maybebadio(inl, port); ++ maybebadio(port); + return 0; + } + +@@ -165,146 +125,160 @@ + { + + if (PXSEG(port)) +- *(volatile unsigned char *)port = value; +-#if defined(CONFIG_HS7751RVOIP_CODEC) ++ ctrl_outb(value, port); + else if (codec_port(port)) +- *(volatile unsigned cjar *)((unsigned long)area6_io8_base+(port-CODEC_IO_BASE)) = value; +-#endif +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- *(unsigned char *)PCI_IOMAP(port) = value; ++ ctrl_outb(value, CODEC_IOMAP(port)); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ ctrl_outb(value, pci_ioaddr(port)); + else +- *(volatile unsigned short *)port2adr(port) = value; ++ ctrl_outb(value, port2adr(port)); + } + + void hs7751rvoip_outb_p(unsigned char value, unsigned long port) + { + if (PXSEG(port)) +- *(volatile unsigned char *)port = value; +-#if defined(CONFIG_HS7751RVOIP_CODEC) ++ ctrl_outb(value, port); + else if (codec_port(port)) +- *(volatile unsigned cjar *)((unsigned long)area6_io8_base+(port-CODEC_IO_BASE)) = value; +-#endif +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- *(unsigned char *)PCI_IOMAP(port) = value; ++ ctrl_outb(value, CODEC_IOMAP(port)); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ ctrl_outb(value, pci_ioaddr(port)); + else +- *(volatile unsigned short *)port2adr(port) = value; +- delay(); ++ ctrl_outw(value, port2adr(port)); ++ ++ ctrl_delay(); + } + + void hs7751rvoip_outw(unsigned short value, unsigned long port) + { + if (PXSEG(port)) +- *(volatile unsigned short *)port = value; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- *(unsigned short *)PCI_IOMAP(port) = value; ++ ctrl_outw(value, port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ ctrl_outw(value, pci_ioaddr(port)); + else +- maybebadio(outw, port); ++ maybebadio(port); + } + + void hs7751rvoip_outl(unsigned int value, unsigned long port) + { + if (PXSEG(port)) +- *(volatile unsigned long *)port = value; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- *((unsigned long *)PCI_IOMAP(port)) = value; ++ ctrl_outl(value, port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ ctrl_outl(value, pci_ioaddr(port)); + else +- maybebadio(outl, port); ++ maybebadio(port); + } + + void hs7751rvoip_insb(unsigned long port, void *addr, unsigned long count) + { ++ u8 *buf = addr; ++ + if (PXSEG(port)) +- while (count--) *((unsigned char *) addr)++ = *(volatile unsigned char *)port; +-#if defined(CONFIG_HS7751RVOIP_CODEC) ++ while (count--) ++ *buf++ = ctrl_inb(port); + else if (codec_port(port)) +- while (count--) *((unsigned char *) addr)++ = *(volatile unsigned char *)((unsigned long)area6_io8_base+(port-CODEC_IO_BASE)); +-#endif +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { +- volatile __u8 *bp = (__u8 *)PCI_IOMAP(port); ++ while (count--) ++ *buf++ = ctrl_inb(CODEC_IOMAP(port)); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) { ++ volatile u8 *bp = (volatile u8 *)pci_ioaddr(port); + +- while (count--) *((volatile unsigned char *) addr)++ = *bp; ++ while (count--) ++ *buf++ = *bp; + } else { +- volatile __u16 *p = (volatile unsigned short *)port2adr(port); ++ volatile u16 *p = (volatile u16 *)port2adr(port); + +- while (count--) *((unsigned char *) addr)++ = *p & 0xff; ++ while (count--) ++ *buf++ = *p & 0xff; + } + } + + void hs7751rvoip_insw(unsigned long port, void *addr, unsigned long count) + { +- volatile __u16 *p; ++ volatile u16 *p; ++ u16 *buf = addr; + + if (PXSEG(port)) +- p = (volatile unsigned short *)port; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- p = (volatile unsigned short *)PCI_IOMAP(port); +- else +- p = (volatile unsigned short *)port2adr(port); +- while (count--) *((__u16 *) addr)++ = *p; ++ p = (volatile u16 *)port; ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ p = (volatile u16 *)pci_ioaddr(port); ++ else ++ p = (volatile u16 *)port2adr(port); ++ while (count--) ++ *buf++ = *p; + } + + void hs7751rvoip_insl(unsigned long port, void *addr, unsigned long count) + { +- if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { +- volatile __u32 *p = (__u32 *)PCI_IOMAP(port); + +- while (count--) *((__u32 *) addr)++ = *p; ++ if (is_pci_ioaddr(port) || shifted_port(port)) { ++ volatile u32 *p = (volatile u32 *)pci_ioaddr(port); ++ u32 *buf = addr; ++ ++ while (count--) ++ *buf++ = *p; + } else +- maybebadio(insl, port); ++ maybebadio(port); + } + + void hs7751rvoip_outsb(unsigned long port, const void *addr, unsigned long count) + { ++ const u8 *buf = addr; ++ + if (PXSEG(port)) +- while (count--) *(volatile unsigned char *)port = *((unsigned char *) addr)++; +-#if defined(CONFIG_HS7751RVOIP_CODEC) ++ while (count--) ++ ctrl_outb(*buf++, port); + else if (codec_port(port)) +- while (count--) *(volatile unsigned char *)((unsigned long)area6_io8_base+(port-CODEC_IO_BASE)) = *((unsigned char *) addr)++; +-#endif +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { +- volatile __u8 *bp = (__u8 *)PCI_IOMAP(port); ++ while (count--) ++ ctrl_outb(*buf++, CODEC_IOMAP(port)); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) { ++ volatile u8 *bp = (volatile u8 *)pci_ioaddr(port); + +- while (count--) *bp = *((volatile unsigned char *) addr)++; ++ while (count--) ++ *bp = *buf++; + } else { +- volatile __u16 *p = (volatile unsigned short *)port2adr(port); ++ volatile u16 *p = (volatile u16 *)port2adr(port); + +- while (count--) *p = *((unsigned char *) addr)++; ++ while (count--) ++ *p = *buf++; + } + } + + void hs7751rvoip_outsw(unsigned long port, const void *addr, unsigned long count) + { +- volatile __u16 *p; ++ volatile u16 *p; ++ const u16 *buf = addr; + + if (PXSEG(port)) +- p = (volatile unsigned short *)port; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- p = (volatile unsigned short *)PCI_IOMAP(port); ++ p = (volatile u16 *)port; ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ p = (volatile u16 *)pci_ioaddr(port); + else +- p = (volatile unsigned short *)port2adr(port); +- while (count--) *p = *((__u16 *) addr)++; ++ p = (volatile u16 *)port2adr(port); ++ ++ while (count--) ++ *p = *buf++; + } + + void hs7751rvoip_outsl(unsigned long port, const void *addr, unsigned long count) + { +- if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { +- volatile __u32 *p = (__u32 *)PCI_IOMAP(port); ++ const u32 *buf = addr; + +- while (count--) *p = *((__u32 *) addr)++; ++ if (is_pci_ioaddr(port) || shifted_port(port)) { ++ volatile u32 *p = (volatile u32 *)pci_ioaddr(port); ++ ++ while (count--) ++ *p = *buf++; + } else +- maybebadio(outsl, port); ++ maybebadio(port); + } + +-void *hs7751rvoip_ioremap(unsigned long offset, unsigned long size) ++void __iomem *hs7751rvoip_ioport_map(unsigned long port, unsigned int size) + { +- if (offset >= 0xfd000000) +- return (void *)offset; +- else +- return (void *)P2SEGADDR(offset); +-} +-EXPORT_SYMBOL(hs7751rvoip_ioremap); ++ if (PXSEG(port)) ++ return (void __iomem *)port; ++ else if (unlikely(codec_port(port) && (size == 1))) ++ return (void __iomem *)CODEC_IOMAP(port); ++ else if (is_pci_ioaddr(port)) ++ return (void __iomem *)pci_ioaddr(port); + +-unsigned long hs7751rvoip_isa_port2addr(unsigned long offset) +-{ +- return port2adr(offset); ++ return (void __iomem *)port2adr(port); + } +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/setup.c linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/hs7751rvoip/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/hs7751rvoip/setup.c 2006-07-12 16:54:20.000000000 +0000 +@@ -13,25 +13,68 @@ + #include <linux/config.h> + #include <linux/init.h> + #include <linux/irq.h> +- ++#include <linux/mm.h> ++#include <linux/vmalloc.h> + #include <linux/hdreg.h> + #include <linux/ide.h> ++#include <linux/pm.h> + #include <asm/io.h> + #include <asm/hs7751rvoip/hs7751rvoip.h> ++#include <asm/machvec.h> ++#include <asm/rtc.h> ++#include <asm/irq.h> + +-#include <linux/mm.h> +-#include <linux/vmalloc.h> ++unsigned int debug_counter; ++ ++static void __init hs7751rvoip_init_irq(void) ++{ ++#if defined(CONFIG_HS7751RVOIP_CODEC) ++ make_ipr_irq(DMTE0_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY); ++ make_ipr_irq(DMTE1_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY); ++#endif + +-/* defined in mm/ioremap.c */ +-extern void * p3_ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags); ++ init_hs7751rvoip_IRQ(); ++} + +-unsigned int debug_counter; ++struct sh_machine_vector mv_hs7751rvoip __initmv = { ++ .mv_nr_irqs = 72, ++ ++ .mv_inb = hs7751rvoip_inb, ++ .mv_inw = hs7751rvoip_inw, ++ .mv_inl = hs7751rvoip_inl, ++ .mv_outb = hs7751rvoip_outb, ++ .mv_outw = hs7751rvoip_outw, ++ .mv_outl = hs7751rvoip_outl, ++ ++ .mv_inb_p = hs7751rvoip_inb_p, ++ .mv_inw_p = hs7751rvoip_inw, ++ .mv_inl_p = hs7751rvoip_inl, ++ .mv_outb_p = hs7751rvoip_outb_p, ++ .mv_outw_p = hs7751rvoip_outw, ++ .mv_outl_p = hs7751rvoip_outl, ++ ++ .mv_insb = hs7751rvoip_insb, ++ .mv_insw = hs7751rvoip_insw, ++ .mv_insl = hs7751rvoip_insl, ++ .mv_outsb = hs7751rvoip_outsb, ++ .mv_outsw = hs7751rvoip_outsw, ++ .mv_outsl = hs7751rvoip_outsl, ++ ++ .mv_init_irq = hs7751rvoip_init_irq, ++ .mv_ioport_map = hs7751rvoip_ioport_map, ++}; ++ALIAS_MV(hs7751rvoip) + + const char *get_system_type(void) + { + return "HS7751RVoIP"; + } + ++static void hs7751rvoip_power_off(void) ++{ ++ ctrl_outw(ctrl_inw(PA_OUTPORTR) & 0xffdf, PA_OUTPORTR); ++} ++ + /* + * Initialize the board + */ +@@ -39,6 +82,7 @@ + { + printk(KERN_INFO "Renesas Technology Sales HS7751RVoIP-2 support.\n"); + ctrl_outb(0xf0, PA_OUTPORTR); ++ pm_power_off = hs7751rvoip_power_off; + debug_counter = 0; + } + +@@ -47,16 +91,15 @@ + void *area5_io16_base; + void *area6_io16_base; + +-int __init cf_init(void) ++static int __init hs7751rvoip_cf_init(void) + { + pgprot_t prot; +- unsigned long paddrbase, psize; ++ unsigned long paddrbase; + + /* open I/O area window */ + paddrbase = virt_to_phys((void *)(PA_AREA5_IO+0x00000800)); +- psize = PAGE_SIZE; + prot = PAGE_KERNEL_PCC(1, _PAGE_PCC_COM16); +- area5_io16_base = p3_ioremap(paddrbase, psize, prot.pgprot); ++ area5_io16_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot); + if (!area5_io16_base) { + printk("allocate_cf_area : can't open CF I/O window!\n"); + return -ENOMEM; +@@ -65,19 +108,18 @@ + /* XXX : do we need attribute and common-memory area also? */ + + paddrbase = virt_to_phys((void *)PA_AREA6_IO); +- psize = PAGE_SIZE; + #if defined(CONFIG_HS7751RVOIP_CODEC) + prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_COM8); + #else + prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_IO8); + #endif +- area6_io8_base = p3_ioremap(paddrbase, psize, prot.pgprot); ++ area6_io8_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot); + if (!area6_io8_base) { + printk("allocate_cf_area : can't open CODEC I/O 8bit window!\n"); + return -ENOMEM; + } + prot = PAGE_KERNEL_PCC(0, _PAGE_PCC_IO16); +- area6_io16_base = p3_ioremap(paddrbase, psize, prot.pgprot); ++ area6_io16_base = p3_ioremap(paddrbase, PAGE_SIZE, prot.pgprot); + if (!area6_io16_base) { + printk("allocate_cf_area : can't open CODEC I/O 16bit window!\n"); + return -ENOMEM; +@@ -86,4 +128,4 @@ + return 0; + } + +-__initcall (cf_init); ++__initcall(hs7751rvoip_cf_init); +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/CVS/Entries linux-2.6.17/arch/sh/boards/renesas/r7780rp/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,7 @@ ++/Makefile/1.1/Sat Jan 7 19:55:56 2006/-ko/ ++/io.c/1.2/Sun Feb 5 21:55:28 2006/-ko/ ++/led.c/1.1/Sat Jan 7 19:55:56 2006/-ko/ ++/Kconfig/1.1/Thu Jul 6 08:19:31 2006/-ko/ ++/irq.c/1.2/Thu Jul 6 12:38:03 2006/-ko/ ++/setup.c/1.3/Thu Jul 6 12:38:03 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/CVS/Repository linux-2.6.17/arch/sh/boards/renesas/r7780rp/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/renesas/r7780rp +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/CVS/Root linux-2.6.17/arch/sh/boards/renesas/r7780rp/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/Kconfig linux-2.6.17/arch/sh/boards/renesas/r7780rp/Kconfig +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/Kconfig 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/Kconfig 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,14 @@ ++if SH_R7780RP ++ ++menu "R7780RP options" ++ ++config SH_R7780MP ++ bool "R7780MP board support" ++ default y ++ help ++ Selecting this option will enable support for the mass-production ++ version of the R7780RP. If in doubt, say Y. ++ ++endmenu ++ ++endif +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/Makefile linux-2.6.17/arch/sh/boards/renesas/r7780rp/Makefile +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/Makefile 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/Makefile 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,6 @@ ++# ++# Makefile for the R7780RP-1 specific parts of the kernel ++# ++ ++obj-y := setup.o io.o irq.o ++obj-$(CONFIG_HEARTBEAT) += led.o +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/io.c linux-2.6.17/arch/sh/boards/renesas/r7780rp/io.c +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/io.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/io.c 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,301 @@ ++/* ++ * Copyright (C) 2001 Ian da Silva, Jeremy Siegel ++ * Based largely on io_se.c. ++ * ++ * I/O routine for Renesas Solutions Highlander R7780RP-1 ++ * ++ * Initial version only to support LAN access; some ++ * placeholder code from io_r7780rp.c left in with the ++ * expectation of later SuperIO and PCMCIA access. ++ */ ++#include <linux/pci.h> ++#include <linux/kernel.h> ++#include <linux/types.h> ++#include <asm/r7780rp/r7780rp.h> ++#include <asm/addrspace.h> ++#include <asm/io.h> ++ ++static inline unsigned long port2adr(unsigned int port) ++{ ++ if ((0x1f0 <= port && port < 0x1f8) || port == 0x3f6) ++ if (port == 0x3f6) ++ return (PA_AREA5_IO + 0x80c); ++ else ++ return (PA_AREA5_IO + 0x1000 + ((port-0x1f0) << 1)); ++ else ++ maybebadio((unsigned long)port); ++ ++ return port; ++} ++ ++static inline unsigned long port88796l(unsigned int port, int flag) ++{ ++ unsigned long addr; ++ ++ if (flag) ++ addr = PA_AX88796L + ((port - AX88796L_IO_BASE) << 1); ++ else ++ addr = PA_AX88796L + ((port - AX88796L_IO_BASE) << 1) + 0x1000; ++ ++ return addr; ++} ++ ++/* The 7780 R7780RP-1 seems to have everything hooked */ ++/* up pretty normally (nothing on high-bytes only...) so this */ ++/* shouldn't be needed */ ++static inline int shifted_port(unsigned long port) ++{ ++ /* For IDE registers, value is not shifted */ ++ if ((0x1f0 <= port && port < 0x1f8) || port == 0x3f6) ++ return 0; ++ else ++ return 1; ++} ++ ++#if defined(CONFIG_NE2000) || defined(CONFIG_NE2000_MODULE) ++#define CHECK_AX88796L_PORT(port) \ ++ ((port >= AX88796L_IO_BASE) && (port < (AX88796L_IO_BASE+0x20))) ++#else ++#define CHECK_AX88796L_PORT(port) (0) ++#endif ++ ++/* ++ * General outline: remap really low stuff [eventually] to SuperIO, ++ * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO) ++ * is mapped through the PCI IO window. Stuff with high bits (PXSEG) ++ * should be way beyond the window, and is used w/o translation for ++ * compatibility. ++ */ ++u8 r7780rp_inb(unsigned long port) ++{ ++ if (CHECK_AX88796L_PORT(port)) ++ return ctrl_inw(port88796l(port, 0)) & 0xff; ++ else if (PXSEG(port)) ++ return ctrl_inb(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ return ctrl_inb(pci_ioaddr(port)); ++ ++ return ctrl_inw(port2adr(port)) & 0xff; ++} ++ ++u8 r7780rp_inb_p(unsigned long port) ++{ ++ u8 v; ++ ++ if (CHECK_AX88796L_PORT(port)) ++ v = ctrl_inw(port88796l(port, 0)) & 0xff; ++ else if (PXSEG(port)) ++ v = ctrl_inb(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ v = ctrl_inb(pci_ioaddr(port)); ++ else ++ v = ctrl_inw(port2adr(port)) & 0xff; ++ ++ ctrl_delay(); ++ ++ return v; ++} ++ ++u16 r7780rp_inw(unsigned long port) ++{ ++ if (CHECK_AX88796L_PORT(port)) ++ maybebadio(port); ++ else if (PXSEG(port)) ++ return ctrl_inw(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ return ctrl_inw(pci_ioaddr(port)); ++ else ++ maybebadio(port); ++ ++ return 0; ++} ++ ++u32 r7780rp_inl(unsigned long port) ++{ ++ if (CHECK_AX88796L_PORT(port)) ++ maybebadio(port); ++ else if (PXSEG(port)) ++ return ctrl_inl(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ return ctrl_inl(pci_ioaddr(port)); ++ else ++ maybebadio(port); ++ ++ return 0; ++} ++ ++void r7780rp_outb(u8 value, unsigned long port) ++{ ++ if (CHECK_AX88796L_PORT(port)) ++ ctrl_outw(value, port88796l(port, 0)); ++ else if (PXSEG(port)) ++ ctrl_outb(value, port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ ctrl_outb(value, pci_ioaddr(port)); ++ else ++ ctrl_outw(value, port2adr(port)); ++} ++ ++void r7780rp_outb_p(u8 value, unsigned long port) ++{ ++ if (CHECK_AX88796L_PORT(port)) ++ ctrl_outw(value, port88796l(port, 0)); ++ else if (PXSEG(port)) ++ ctrl_outb(value, port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ ctrl_outb(value, pci_ioaddr(port)); ++ else ++ ctrl_outw(value, port2adr(port)); ++ ++ ctrl_delay(); ++} ++ ++void r7780rp_outw(u16 value, unsigned long port) ++{ ++ if (CHECK_AX88796L_PORT(port)) ++ maybebadio(port); ++ else if (PXSEG(port)) ++ ctrl_outw(value, port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ ctrl_outw(value, pci_ioaddr(port)); ++ else ++ maybebadio(port); ++} ++ ++void r7780rp_outl(u32 value, unsigned long port) ++{ ++ if (CHECK_AX88796L_PORT(port)) ++ maybebadio(port); ++ else if (PXSEG(port)) ++ ctrl_outl(value, port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ ctrl_outl(value, pci_ioaddr(port)); ++ else ++ maybebadio(port); ++} ++ ++void r7780rp_insb(unsigned long port, void *dst, unsigned long count) ++{ ++ volatile u16 *p; ++ u8 *buf = dst; ++ ++ if (CHECK_AX88796L_PORT(port)) { ++ p = (volatile u16 *)port88796l(port, 0); ++ while (count--) ++ *buf++ = *p & 0xff; ++ } else if (PXSEG(port)) { ++ while (count--) ++ *buf++ = *(volatile u8 *)port; ++ } else if (is_pci_ioaddr(port) || shifted_port(port)) { ++ volatile u8 *bp = (volatile u8 *)pci_ioaddr(port); ++ ++ while (count--) ++ *buf++ = *bp; ++ } else { ++ p = (volatile u16 *)port2adr(port); ++ while (count--) ++ *buf++ = *p & 0xff; ++ } ++} ++ ++void r7780rp_insw(unsigned long port, void *dst, unsigned long count) ++{ ++ volatile u16 *p; ++ u16 *buf = dst; ++ ++ if (CHECK_AX88796L_PORT(port)) ++ p = (volatile u16 *)port88796l(port, 1); ++ else if (PXSEG(port)) ++ p = (volatile u16 *)port; ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ p = (volatile u16 *)pci_ioaddr(port); ++ else ++ p = (volatile u16 *)port2adr(port); ++ ++ while (count--) ++ *buf++ = *p; ++} ++ ++void r7780rp_insl(unsigned long port, void *dst, unsigned long count) ++{ ++ u32 *buf = dst; ++ ++ if (CHECK_AX88796L_PORT(port)) ++ maybebadio(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) { ++ volatile u32 *p = (volatile u32 *)pci_ioaddr(port); ++ ++ while (count--) ++ *buf++ = *p; ++ } else ++ maybebadio(port); ++} ++ ++void r7780rp_outsb(unsigned long port, const void *src, unsigned long count) ++{ ++ volatile u16 *p; ++ const u8 *buf = src; ++ ++ if (CHECK_AX88796L_PORT(port)) { ++ p = (volatile u16 *)port88796l(port, 0); ++ while (count--) ++ *p = *buf++; ++ } else if (PXSEG(port)) ++ while (count--) ++ ctrl_outb(*buf++, port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) { ++ volatile u8 *bp = (volatile u8 *)pci_ioaddr(port); ++ ++ while (count--) ++ *bp = *buf++; ++ } else { ++ p = (volatile u16 *)port2adr(port); ++ while (count--) ++ *p = *buf++; ++ } ++} ++ ++void r7780rp_outsw(unsigned long port, const void *src, unsigned long count) ++{ ++ volatile u16 *p; ++ const u16 *buf = src; ++ ++ if (CHECK_AX88796L_PORT(port)) ++ p = (volatile u16 *)port88796l(port, 1); ++ else if (PXSEG(port)) ++ p = (volatile u16 *)port; ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ p = (volatile u16 *)pci_ioaddr(port); ++ else ++ p = (volatile u16 *)port2adr(port); ++ ++ while (count--) ++ *p = *buf++; ++} ++ ++void r7780rp_outsl(unsigned long port, const void *src, unsigned long count) ++{ ++ const u32 *buf = src; ++ ++ if (CHECK_AX88796L_PORT(port)) ++ maybebadio(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) { ++ volatile u32 *p = (volatile u32 *)pci_ioaddr(port); ++ ++ while (count--) ++ *p = *buf++; ++ } else ++ maybebadio(port); ++} ++ ++void __iomem *r7780rp_ioport_map(unsigned long port, unsigned int size) ++{ ++ if (CHECK_AX88796L_PORT(port)) ++ return (void __iomem *)port88796l(port, size > 1); ++ else if (PXSEG(port)) ++ return (void __iomem *)port; ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ return (void __iomem *)pci_ioaddr(port); ++ ++ return (void __iomem *)port2adr(port); ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/irq.c linux-2.6.17/arch/sh/boards/renesas/r7780rp/irq.c +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/irq.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/irq.c 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,123 @@ ++/* ++ * linux/arch/sh/boards/renesas/r7780rp/irq.c ++ * ++ * Copyright (C) 2000 Kazumoto Kojima ++ * ++ * Renesas Solutions Highlander R7780RP-1 Support. ++ * ++ * Modified for R7780RP-1 by ++ * Atom Create Engineering Co., Ltd. 2002. ++ */ ++ ++#include <linux/config.h> ++#include <linux/init.h> ++#include <linux/irq.h> ++#include <asm/io.h> ++#include <asm/irq.h> ++#include <asm/r7780rp/r7780rp.h> ++ ++#ifdef CONFIG_SH_R7780MP ++static int mask_pos[] = {12, 11, 9, 14, 15, 8, 13, 6, 5, 4, 3, 2, 0, 0, 1, 0}; ++#else ++static int mask_pos[] = {15, 14, 13, 12, 11, 10, 9, 8, 7, 5, 6, 4, 0, 1, 2, 0}; ++#endif ++ ++static void enable_r7780rp_irq(unsigned int irq); ++static void disable_r7780rp_irq(unsigned int irq); ++ ++/* shutdown is same as "disable" */ ++#define shutdown_r7780rp_irq disable_r7780rp_irq ++ ++static void ack_r7780rp_irq(unsigned int irq); ++static void end_r7780rp_irq(unsigned int irq); ++ ++static unsigned int startup_r7780rp_irq(unsigned int irq) ++{ ++ enable_r7780rp_irq(irq); ++ return 0; /* never anything pending */ ++} ++ ++static void disable_r7780rp_irq(unsigned int irq) ++{ ++ unsigned long flags; ++ unsigned short val; ++ unsigned short mask = 0xffff ^ (0x0001 << mask_pos[irq]); ++ ++ /* Set the priority in IPR to 0 */ ++ local_irq_save(flags); ++ val = ctrl_inw(IRLCNTR1); ++ val &= mask; ++ ctrl_outw(val, IRLCNTR1); ++ local_irq_restore(flags); ++} ++ ++static void enable_r7780rp_irq(unsigned int irq) ++{ ++ unsigned long flags; ++ unsigned short val; ++ unsigned short value = (0x0001 << mask_pos[irq]); ++ ++ /* Set priority in IPR back to original value */ ++ local_irq_save(flags); ++ val = ctrl_inw(IRLCNTR1); ++ val |= value; ++ ctrl_outw(val, IRLCNTR1); ++ local_irq_restore(flags); ++} ++ ++static void ack_r7780rp_irq(unsigned int irq) ++{ ++ disable_r7780rp_irq(irq); ++} ++ ++static void end_r7780rp_irq(unsigned int irq) ++{ ++ if (!(irq_desc[irq].status & (IRQ_DISABLED|IRQ_INPROGRESS))) ++ enable_r7780rp_irq(irq); ++} ++ ++static struct hw_interrupt_type r7780rp_irq_type = { ++ .typename = "R7780RP-IRQ", ++ .startup = startup_r7780rp_irq, ++ .shutdown = shutdown_r7780rp_irq, ++ .enable = enable_r7780rp_irq, ++ .disable = disable_r7780rp_irq, ++ .ack = ack_r7780rp_irq, ++ .end = end_r7780rp_irq, ++}; ++ ++static void make_r7780rp_irq(unsigned int irq) ++{ ++ disable_irq_nosync(irq); ++ irq_desc[irq].handler = &r7780rp_irq_type; ++ disable_r7780rp_irq(irq); ++} ++ ++/* ++ * Initialize IRQ setting ++ */ ++void __init init_r7780rp_IRQ(void) ++{ ++ int i; ++ ++ /* IRL0=PCI Slot #A ++ * IRL1=PCI Slot #B ++ * IRL2=PCI Slot #C ++ * IRL3=PCI Slot #D ++ * IRL4=CF Card ++ * IRL5=CF Card Insert ++ * IRL6=M66596 ++ * IRL7=SD Card ++ * IRL8=Touch Panel ++ * IRL9=SCI ++ * IRL10=Serial ++ * IRL11=Extention #A ++ * IRL11=Extention #B ++ * IRL12=Debug LAN ++ * IRL13=Push Switch ++ * IRL14=ZiggBee IO ++ */ ++ ++ for (i=0; i<15; i++) ++ make_r7780rp_irq(i); ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/led.c linux-2.6.17/arch/sh/boards/renesas/r7780rp/led.c +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/led.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/led.c 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,45 @@ ++/* ++ * Copyright (C) Atom Create Engineering Co., Ltd. ++ * ++ * May be copied or modified under the terms of GNU General Public ++ * License. See linux/COPYING for more information. ++ * ++ * This file contains Renesas Solutions HIGHLANDER R7780RP-1 specific LED code. ++ */ ++ ++#include <linux/config.h> ++#include <linux/sched.h> ++#include <asm/io.h> ++#include <asm/r7780rp/r7780rp.h> ++ ++/* Cycle the LED's in the clasic Knightriger/Sun pattern */ ++void heartbeat_r7780rp(void) ++{ ++ static unsigned int cnt = 0, period = 0; ++ volatile unsigned short *p = (volatile unsigned short *)PA_OBLED; ++ static unsigned bit = 0, up = 1; ++ unsigned bit_pos[] = {2, 1, 0, 3, 6, 5, 4, 7}; ++ ++ cnt += 1; ++ if (cnt < period) ++ return; ++ ++ cnt = 0; ++ ++ /* Go through the points (roughly!): ++ * f(0)=10, f(1)=16, f(2)=20, f(5)=35, f(int)->110 ++ */ ++ period = 110 - ((300 << FSHIFT)/((avenrun[0]/5) + (3<<FSHIFT))); ++ ++ *p = 1 << bit_pos[bit]; ++ if (up) ++ if (bit == 7) { ++ bit--; ++ up = 0; ++ } else ++ bit++; ++ else if (bit == 0) ++ up = 1; ++ else ++ bit--; ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/setup.c linux-2.6.17/arch/sh/boards/renesas/r7780rp/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/r7780rp/setup.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/r7780rp/setup.c 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,164 @@ ++/* ++ * arch/sh/boards/renesas/r7780rp/setup.c ++ * ++ * Copyright (C) 2002 Atom Create Engineering Co., Ltd. ++ * Copyright (C) 2005, 2006 Paul Mundt ++ * ++ * Renesas Solutions Highlander R7780RP-1 Support. ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ ++#include <linux/init.h> ++#include <linux/platform_device.h> ++#include <asm/machvec.h> ++#include <asm/r7780rp/r7780rp.h> ++#include <asm/clock.h> ++#include <asm/io.h> ++ ++extern void heartbeat_r7780rp(void); ++extern void init_r7780rp_IRQ(void); ++ ++/* ++ * The Machine Vector ++ */ ++struct sh_machine_vector mv_r7780rp __initmv = { ++ .mv_nr_irqs = 109, ++ ++ .mv_inb = r7780rp_inb, ++ .mv_inw = r7780rp_inw, ++ .mv_inl = r7780rp_inl, ++ .mv_outb = r7780rp_outb, ++ .mv_outw = r7780rp_outw, ++ .mv_outl = r7780rp_outl, ++ ++ .mv_inb_p = r7780rp_inb_p, ++ .mv_inw_p = r7780rp_inw, ++ .mv_inl_p = r7780rp_inl, ++ .mv_outb_p = r7780rp_outb_p, ++ .mv_outw_p = r7780rp_outw, ++ .mv_outl_p = r7780rp_outl, ++ ++ .mv_insb = r7780rp_insb, ++ .mv_insw = r7780rp_insw, ++ .mv_insl = r7780rp_insl, ++ .mv_outsb = r7780rp_outsb, ++ .mv_outsw = r7780rp_outsw, ++ .mv_outsl = r7780rp_outsl, ++ ++ .mv_ioport_map = r7780rp_ioport_map, ++ .mv_init_irq = init_r7780rp_IRQ, ++#ifdef CONFIG_HEARTBEAT ++ .mv_heartbeat = heartbeat_r7780rp, ++#endif ++}; ++ALIAS_MV(r7780rp) ++ ++static struct resource m66596_usb_host_resources[] = { ++ [0] = { ++ .start = 0xa4800000, ++ .end = 0xa4ffffff, ++ .flags = IORESOURCE_MEM, ++ }, ++ [1] = { ++ .start = 6, /* irq number */ ++ .end = 6, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++static struct platform_device m66596_usb_host_device = { ++ .name = "m66596-hcd", ++ .id = 0, ++ .dev = { ++ .dma_mask = NULL, /* don't use dma */ ++ .coherent_dma_mask = 0xffffffff, ++ }, ++ .num_resources = ARRAY_SIZE(m66596_usb_host_resources), ++ .resource = m66596_usb_host_resources, ++}; ++ ++static struct platform_device *r7780rp_devices[] __initdata = { ++ &m66596_usb_host_device, ++}; ++ ++static int __init r7780rp_devices_setup(void) ++{ ++ return platform_add_devices(r7780rp_devices, ++ ARRAY_SIZE(r7780rp_devices)); ++} ++__initcall(r7780rp_devices_setup); ++ ++/* ++ * Platform specific clocks ++ */ ++static void ivdr_clk_enable(struct clk *clk) ++{ ++ ctrl_outw(ctrl_inw(PA_IVDRCTL) | (1 << 8), PA_IVDRCTL); ++} ++ ++static void ivdr_clk_disable(struct clk *clk) ++{ ++ ctrl_outw(ctrl_inw(PA_IVDRCTL) & ~(1 << 8), PA_IVDRCTL); ++} ++ ++static struct clk_ops ivdr_clk_ops = { ++ .enable = ivdr_clk_enable, ++ .disable = ivdr_clk_disable, ++}; ++ ++static struct clk ivdr_clk = { ++ .name = "ivdr_clk", ++ .ops = &ivdr_clk_ops, ++}; ++ ++static struct clk *r7780rp_clocks[] = { ++ &ivdr_clk, ++}; ++ ++const char *get_system_type(void) ++{ ++ return "Highlander R7780RP-1"; ++} ++ ++static void r7780rp_power_off(void) ++{ ++#ifdef CONFIG_SH_R7780MP ++ ctrl_outw(0x0001, PA_POFF); ++#endif ++} ++ ++/* ++ * Initialize the board ++ */ ++void __init platform_setup(void) ++{ ++ u16 ver = ctrl_inw(PA_VERREG); ++ int i; ++ ++ printk(KERN_INFO "Renesas Solutions Highlander R7780RP-1 support.\n"); ++ ++ printk(KERN_INFO "Board version: %d (revision %d), " ++ "FPGA version: %d (revision %d)\n", ++ (ver >> 12) & 0xf, (ver >> 8) & 0xf, ++ (ver >> 4) & 0xf, ver & 0xf); ++ ++ /* ++ * Enable the important clocks right away.. ++ */ ++ for (i = 0; i < ARRAY_SIZE(r7780rp_clocks); i++) { ++ struct clk *clk = r7780rp_clocks[i]; ++ ++ clk_register(clk); ++ clk_enable(clk); ++ } ++ ++ ctrl_outw(0x0000, PA_OBLED); /* Clear LED. */ ++#ifndef CONFIG_SH_R7780MP ++ ctrl_outw(0x0001, PA_SDPOW); /* SD Power ON */ ++#endif ++ ctrl_outw(ctrl_inw(PA_IVDRCTL) | 0x0100, PA_IVDRCTL); /* Si13112 */ ++ ++ pm_power_off = r7780rp_power_off; ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/CVS/Entries linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,8 @@ ++/Kconfig/1.1/Fri Jun 24 11:21:00 2005/-ko/ ++/Makefile/1.2/Sun Oct 16 16:31:08 2005/-ko/ ++/io.c/1.6/Sun Feb 5 21:55:28 2006/-ko/ ++/irq.c/1.3/Fri Oct 28 13:12:48 2005/-ko/ ++/mach.c/1.6/Tue Jan 3 22:51:46 2006/-ko/ ++/led.c/1.3/Sat Jul 8 20:16:04 2006/-ko/ ++/setup.c/1.5/Sat Jul 8 20:16:04 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/CVS/Repository linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/renesas/rts7751r2d +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/CVS/Root linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/Kconfig linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/Kconfig +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/Kconfig 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/Kconfig 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,12 @@ ++if SH_RTS7751R2D ++ ++menu "RTS7751R2D options" ++ ++config RTS7751R2D_REV11 ++ bool "RTS7751R2D Rev. 1.1 board support" ++ help ++ Selecting this option will support version rev. 1.1. ++endmenu ++ ++endif ++ +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/Makefile linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/Makefile +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/Makefile 2006-07-12 16:54:20.000000000 +0000 +@@ -1,10 +1,6 @@ + # + # Makefile for the RTS7751R2D specific parts of the kernel + # +-# Note! Dependencies are done automagically by 'make dep', which also +-# removes any old dependencies. DON'T put your own dependencies here +-# unless it's something special (ie not a .c file). +-# + + obj-y := mach.o setup.o io.o irq.o led.o + +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/io.c linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/io.c +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/io.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/io.c 2006-07-12 16:54:20.000000000 +0000 +@@ -1,6 +1,4 @@ + /* +- * linux/arch/sh/kernel/io_rts7751r2d.c +- * + * Copyright (C) 2001 Ian da Silva, Jeremy Siegel + * Based largely on io_se.c. + * +@@ -10,17 +8,13 @@ + * placeholder code from io_rts7751r2d.c left in with the + * expectation of later SuperIO and PCMCIA access. + */ +- + #include <linux/kernel.h> + #include <linux/types.h> +-#include <asm/io.h> ++#include <linux/pci.h> + #include <asm/rts7751r2d/rts7751r2d.h> ++#include <asm/io.h> + #include <asm/addrspace.h> + +-#include <linux/module.h> +-#include <linux/pci.h> +-#include "../../../drivers/pci/pci-sh7751.h" +- + /* + * The 7751R RTS7751R2D uses the built-in PCI controller (PCIC) + * of the 7751R processor, and has a SuperIO accessible via the PCI. +@@ -28,22 +22,6 @@ + * like the other Solution Engine boards. + */ + +-#define PCIIOBR (volatile long *)PCI_REG(SH7751_PCIIOBR) +-#define PCIMBR (volatile long *)PCI_REG(SH7751_PCIMBR) +-#define PCI_IO_AREA SH7751_PCI_IO_BASE +-#define PCI_MEM_AREA SH7751_PCI_CONFIG_BASE +- +-#define PCI_IOMAP(adr) (PCI_IO_AREA + (adr & ~SH7751_PCIIOBR_MASK)) +- +-#define maybebadio(name,port) \ +- printk("bad PC-like io %s for port 0x%lx at 0x%08x\n", \ +- #name, (port), (__u32) __builtin_return_address(0)) +- +-static inline void delay(void) +-{ +- ctrl_inw(0xa0000000); +-} +- + static inline unsigned long port2adr(unsigned int port) + { + if ((0x1f0 <= port && port < 0x1f8) || port == 0x3f6) +@@ -52,7 +30,7 @@ + else + return (PA_AREA5_IO + 0x1000 + ((port-0x1f0) << 1)); + else +- maybebadio(port2adr, (unsigned long)port); ++ maybebadio((unsigned long)port); + + return port; + } +@@ -81,17 +59,6 @@ + return 1; + } + +-/* In case someone configures the kernel w/o PCI support: in that */ +-/* scenario, don't ever bother to check for PCI-window addresses */ +- +-/* NOTE: WINDOW CHECK MAY BE A BIT OFF, HIGH PCIBIOS_MIN_IO WRAPS? */ +-#if defined(CONFIG_PCI) +-#define CHECK_SH7751_PCIIO(port) \ +- ((port >= PCIBIOS_MIN_IO) && (port < (PCIBIOS_MIN_IO + SH7751_PCI_IO_SIZE))) +-#else +-#define CHECK_SH7751_PCIIO(port) (0) +-#endif +- + #if defined(CONFIG_NE2000) || defined(CONFIG_NE2000_MODULE) + #define CHECK_AX88796L_PORT(port) \ + ((port >= AX88796L_IO_BASE) && (port < (AX88796L_IO_BASE+0x20))) +@@ -112,8 +79,8 @@ + return (*(volatile unsigned short *)port88796l(port, 0)) & 0xff; + else if (PXSEG(port)) + return *(volatile unsigned char *)port; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- return *(volatile unsigned char *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ return *(volatile unsigned char *)pci_ioaddr(port); + else + return (*(volatile unsigned short *)port2adr(port) & 0xff); + } +@@ -126,11 +93,12 @@ + v = (*(volatile unsigned short *)port88796l(port, 0)) & 0xff; + else if (PXSEG(port)) + v = *(volatile unsigned char *)port; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- v = *(volatile unsigned char *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ v = *(volatile unsigned char *)pci_ioaddr(port); + else + v = (*(volatile unsigned short *)port2adr(port) & 0xff); +- delay(); ++ ++ ctrl_delay(); + + return v; + } +@@ -138,13 +106,13 @@ + unsigned short rts7751r2d_inw(unsigned long port) + { + if (CHECK_AX88796L_PORT(port)) +- maybebadio(inw, port); ++ maybebadio(port); + else if (PXSEG(port)) + return *(volatile unsigned short *)port; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- return *(volatile unsigned short *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ return *(volatile unsigned short *)pci_ioaddr(port); + else +- maybebadio(inw, port); ++ maybebadio(port); + + return 0; + } +@@ -152,13 +120,13 @@ + unsigned int rts7751r2d_inl(unsigned long port) + { + if (CHECK_AX88796L_PORT(port)) +- maybebadio(inl, port); ++ maybebadio(port); + else if (PXSEG(port)) + return *(volatile unsigned long *)port; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- return *(volatile unsigned long *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ return *(volatile unsigned long *)pci_ioaddr(port); + else +- maybebadio(inl, port); ++ maybebadio(port); + + return 0; + } +@@ -169,8 +137,8 @@ + *((volatile unsigned short *)port88796l(port, 0)) = value; + else if (PXSEG(port)) + *(volatile unsigned char *)port = value; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- *(volatile unsigned char *)PCI_IOMAP(port) = value; ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ *(volatile unsigned char *)pci_ioaddr(port) = value; + else + *(volatile unsigned short *)port2adr(port) = value; + } +@@ -181,143 +149,152 @@ + *((volatile unsigned short *)port88796l(port, 0)) = value; + else if (PXSEG(port)) + *(volatile unsigned char *)port = value; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- *(volatile unsigned char *)PCI_IOMAP(port) = value; ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ *(volatile unsigned char *)pci_ioaddr(port) = value; + else + *(volatile unsigned short *)port2adr(port) = value; +- delay(); ++ ++ ctrl_delay(); + } + + void rts7751r2d_outw(unsigned short value, unsigned long port) + { + if (CHECK_AX88796L_PORT(port)) +- maybebadio(outw, port); ++ maybebadio(port); + else if (PXSEG(port)) + *(volatile unsigned short *)port = value; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- *(volatile unsigned short *)PCI_IOMAP(port) = value; ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ *(volatile unsigned short *)pci_ioaddr(port) = value; + else +- maybebadio(outw, port); ++ maybebadio(port); + } + + void rts7751r2d_outl(unsigned int value, unsigned long port) + { + if (CHECK_AX88796L_PORT(port)) +- maybebadio(outl, port); ++ maybebadio(port); + else if (PXSEG(port)) + *(volatile unsigned long *)port = value; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- *(volatile unsigned long *)PCI_IOMAP(port) = value; ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ *(volatile unsigned long *)pci_ioaddr(port) = value; + else +- maybebadio(outl, port); ++ maybebadio(port); + } + + void rts7751r2d_insb(unsigned long port, void *addr, unsigned long count) + { ++ unsigned long a = (unsigned long)addr; + volatile __u8 *bp; + volatile __u16 *p; +- unsigned char *s = addr; + + if (CHECK_AX88796L_PORT(port)) { + p = (volatile unsigned short *)port88796l(port, 0); +- while (count--) *s++ = *p & 0xff; ++ while (count--) ++ ctrl_outb(*p & 0xff, a++); + } else if (PXSEG(port)) +- while (count--) *s++ = *(volatile unsigned char *)port; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { +- bp = (__u8 *)PCI_IOMAP(port); +- while (count--) *s++ = *bp; ++ while (count--) ++ ctrl_outb(ctrl_inb(port), a++); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) { ++ bp = (__u8 *)pci_ioaddr(port); ++ while (count--) ++ ctrl_outb(*bp, a++); + } else { + p = (volatile unsigned short *)port2adr(port); +- while (count--) *s++ = *p & 0xff; ++ while (count--) ++ ctrl_outb(*p & 0xff, a++); + } + } + + void rts7751r2d_insw(unsigned long port, void *addr, unsigned long count) + { ++ unsigned long a = (unsigned long)addr; + volatile __u16 *p; +- __u16 *s = addr; + + if (CHECK_AX88796L_PORT(port)) + p = (volatile unsigned short *)port88796l(port, 1); + else if (PXSEG(port)) + p = (volatile unsigned short *)port; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- p = (volatile unsigned short *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ p = (volatile unsigned short *)pci_ioaddr(port); + else + p = (volatile unsigned short *)port2adr(port); +- while (count--) *s++ = *p; ++ while (count--) ++ ctrl_outw(*p, a++); + } + + void rts7751r2d_insl(unsigned long port, void *addr, unsigned long count) + { + if (CHECK_AX88796L_PORT(port)) +- maybebadio(insl, port); +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { +- volatile __u32 *p = (__u32 *)PCI_IOMAP(port); +- __u32 *s = addr; +- +- while (count--) *s++ = *p; ++ maybebadio(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) { ++ unsigned long a = (unsigned long)addr; ++ ++ while (count--) { ++ ctrl_outl(ctrl_inl(pci_ioaddr(port)), a); ++ a += 4; ++ } + } else +- maybebadio(insl, port); ++ maybebadio(port); + } + + void rts7751r2d_outsb(unsigned long port, const void *addr, unsigned long count) + { ++ unsigned long a = (unsigned long)addr; + volatile __u8 *bp; + volatile __u16 *p; +- const __u8 *s = addr; + + if (CHECK_AX88796L_PORT(port)) { + p = (volatile unsigned short *)port88796l(port, 0); +- while (count--) *p = *s++; ++ while (count--) ++ *p = ctrl_inb(a++); + } else if (PXSEG(port)) +- while (count--) *(volatile unsigned char *)port = *s++; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { +- bp = (__u8 *)PCI_IOMAP(port); +- while (count--) *bp = *s++; ++ while (count--) ++ ctrl_outb(a++, port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) { ++ bp = (__u8 *)pci_ioaddr(port); ++ while (count--) ++ *bp = ctrl_inb(a++); + } else { + p = (volatile unsigned short *)port2adr(port); +- while (count--) *p = *s++; ++ while (count--) ++ *p = ctrl_inb(a++); + } + } + + void rts7751r2d_outsw(unsigned long port, const void *addr, unsigned long count) + { ++ unsigned long a = (unsigned long)addr; + volatile __u16 *p; +- const __u16 *s = addr; + + if (CHECK_AX88796L_PORT(port)) + p = (volatile unsigned short *)port88796l(port, 1); + else if (PXSEG(port)) + p = (volatile unsigned short *)port; +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) +- p = (volatile unsigned short *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) ++ p = (volatile unsigned short *)pci_ioaddr(port); + else + p = (volatile unsigned short *)port2adr(port); +- while (count--) *p = *s++; ++ ++ while (count--) { ++ ctrl_outw(*p, a); ++ a += 2; ++ } + } + + void rts7751r2d_outsl(unsigned long port, const void *addr, unsigned long count) + { + if (CHECK_AX88796L_PORT(port)) +- maybebadio(outsl, port); +- else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { +- volatile __u32 *p = (__u32 *)PCI_IOMAP(port); +- const __u32 *s = addr; +- +- while (count--) *p = *s++; ++ maybebadio(port); ++ else if (is_pci_ioaddr(port) || shifted_port(port)) { ++ unsigned long a = (unsigned long)addr; ++ ++ while (count--) { ++ ctrl_outl(ctrl_inl(a), pci_ioaddr(port)); ++ a += 4; ++ } + } else +- maybebadio(outsl, port); +-} +- +-void *rts7751r2d_ioremap(unsigned long offset, unsigned long size) +-{ +- if (offset >= 0xfd000000) +- return (void *)offset; +- else +- return (void *)P2SEGADDR(offset); ++ maybebadio(port); + } +-EXPORT_SYMBOL(rts7751r2d_ioremap); + + unsigned long rts7751r2d_isa_port2addr(unsigned long offset) + { +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/led.c linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/led.c +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/led.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/led.c 2006-07-12 16:54:20.000000000 +0000 +@@ -13,8 +13,6 @@ + #include <asm/io.h> + #include <asm/rts7751r2d/rts7751r2d.h> + +-extern unsigned int debug_counter; +- + #ifdef CONFIG_HEARTBEAT + + #include <linux/sched.h> +@@ -56,12 +54,3 @@ + ctrl_outw(value, PA_OUTPORT); + } + +-void debug_led_disp(void) +-{ +- unsigned short value; +- +- value = (unsigned short)debug_counter++; +- rts7751r2d_led(value); +- if (value == 0xff) +- debug_counter = 0; +-} +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/mach.c linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/mach.c +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/mach.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/mach.c 2006-07-12 16:54:20.000000000 +0000 +@@ -16,15 +16,16 @@ + #include <asm/machvec.h> + #include <asm/rtc.h> + #include <asm/irq.h> +-#include <asm/rts7751r2d/io.h> ++#include <asm/mach/rts7751r2d.h> + + extern void heartbeat_rts7751r2d(void); + extern void init_rts7751r2d_IRQ(void); +-extern void *rts7751r2d_ioremap(unsigned long, unsigned long); + extern int rts7751r2d_irq_demux(int irq); + ++#ifdef CONFIG_USB_SM501 + extern void *voyagergx_consistent_alloc(struct device *, size_t, dma_addr_t *, gfp_t); + extern int voyagergx_consistent_free(struct device *, size_t, void *, dma_addr_t); ++#endif + + /* + * The Machine Vector +@@ -54,15 +55,13 @@ + .mv_outsw = rts7751r2d_outsw, + .mv_outsl = rts7751r2d_outsl, + +- .mv_ioremap = rts7751r2d_ioremap, +- .mv_isa_port2addr = rts7751r2d_isa_port2addr, + .mv_init_irq = init_rts7751r2d_IRQ, + #ifdef CONFIG_HEARTBEAT + .mv_heartbeat = heartbeat_rts7751r2d, + #endif + .mv_irq_demux = rts7751r2d_irq_demux, + +-#ifdef CONFIG_USB_OHCI_HCD ++#ifdef CONFIG_USB_SM501 + .mv_consistent_alloc = voyagergx_consistent_alloc, + .mv_consistent_free = voyagergx_consistent_free, + #endif +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/setup.c linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/rts7751r2d/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/rts7751r2d/setup.c 2006-07-12 16:54:20.000000000 +0000 +@@ -1,25 +1,87 @@ + /* +- * linux/arch/sh/kernel/setup_rts7751r2d.c +- * +- * Copyright (C) 2000 Kazumoto Kojima +- * + * Renesas Technology Sales RTS7751R2D Support. + * +- * Modified for RTS7751R2D by +- * Atom Create Engineering Co., Ltd. 2002. ++ * Copyright (C) 2002 Atom Create Engineering Co., Ltd. ++ * Copyright (C) 2004 - 2006 Paul Mundt ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. + */ +- + #include <linux/init.h> ++#include <linux/platform_device.h> ++#include <linux/serial_8250.h> ++#include <linux/pm.h> + #include <asm/io.h> +-#include <asm/rts7751r2d/rts7751r2d.h> ++#include <asm/mach/rts7751r2d.h> ++#include <asm/mach/voyagergx_reg.h> ++ ++static struct plat_serial8250_port uart_platform_data[] = { ++ { ++ .membase = (void *)VOYAGER_UART_BASE, ++ .mapbase = VOYAGER_UART_BASE, ++ .iotype = UPIO_MEM, ++ .irq = VOYAGER_UART0_IRQ, ++ .flags = UPF_BOOT_AUTOCONF, ++ .regshift = 2, ++ .uartclk = (9600 * 16), ++ }, { ++ .flags = 0, ++ }, ++}; + +-unsigned int debug_counter; ++static void __init voyagergx_serial_init(void) ++{ ++ unsigned long val; ++ ++ /* ++ * GPIO Control ++ */ ++ val = inl(GPIO_MUX_HIGH); ++ val |= 0x00001fe0; ++ outl(val, GPIO_MUX_HIGH); ++ ++ /* ++ * Power Mode Gate ++ */ ++ val = inl(POWER_MODE0_GATE); ++ val |= (POWER_MODE0_GATE_U0 | POWER_MODE0_GATE_U1); ++ outl(val, POWER_MODE0_GATE); ++ ++ val = inl(POWER_MODE1_GATE); ++ val |= (POWER_MODE1_GATE_U0 | POWER_MODE1_GATE_U1); ++ outl(val, POWER_MODE1_GATE); ++} ++ ++static struct platform_device uart_device = { ++ .name = "serial8250", ++ .id = -1, ++ .dev = { ++ .platform_data = uart_platform_data, ++ }, ++}; ++ ++static struct platform_device *rts7751r2d_devices[] __initdata = { ++ &uart_device, ++}; ++ ++static int __init rts7751r2d_devices_setup(void) ++{ ++ return platform_add_devices(rts7751r2d_devices, ++ ARRAY_SIZE(rts7751r2d_devices)); ++} ++__initcall(rts7751r2d_devices_setup); + + const char *get_system_type(void) + { + return "RTS7751R2D"; + } + ++static void rts7751r2d_power_off(void) ++{ ++ ctrl_outw(0x0001, PA_POWOFF); ++} ++ + /* + * Initialize the board + */ +@@ -27,5 +89,7 @@ + { + printk(KERN_INFO "Renesas Technology Sales RTS7751R2D support.\n"); + ctrl_outw(0x0000, PA_OUTPORT); +- debug_counter = 0; ++ pm_power_off = rts7751r2d_power_off; ++ ++ voyagergx_serial_init(); + } +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/CVS/Entries linux-2.6.17/arch/sh/boards/renesas/systemh/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/systemh/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,5 @@ ++/Makefile/1.1/Tue Jun 15 18:32:21 2004/-ko/ ++/io.c/1.5/Sun Feb 5 21:55:29 2006/-ko/ ++/irq.c/1.4/Wed Jan 4 18:52:50 2006/-ko/ ++/setup.c/1.3/Wed Jan 4 18:52:50 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/CVS/Repository linux-2.6.17/arch/sh/boards/renesas/systemh/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/systemh/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/renesas/systemh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/CVS/Root linux-2.6.17/arch/sh/boards/renesas/systemh/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/systemh/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/io.c linux-2.6.17/arch/sh/boards/renesas/systemh/io.c +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/io.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/systemh/io.c 2006-07-12 16:54:20.000000000 +0000 +@@ -5,66 +5,25 @@ + * Based largely on io_se.c. + * + * I/O routine for Hitachi 7751 Systemh. +- * + */ +- + #include <linux/kernel.h> + #include <linux/types.h> +-#include <asm/systemh/7751systemh.h> ++#include <linux/pci.h> ++#include <asm/systemh7751.h> + #include <asm/addrspace.h> + #include <asm/io.h> + +-#include <linux/pci.h> +-#include "../../drivers/pci/pci-sh7751.h" +- +-/* +- * The 7751 SystemH Engine uses the built-in PCI controller (PCIC) +- * of the 7751 processor, and has a SuperIO accessible on its memory +- * bus. +- */ +- +-#define PCIIOBR (volatile long *)PCI_REG(SH7751_PCIIOBR) +-#define PCIMBR (volatile long *)PCI_REG(SH7751_PCIMBR) +-#define PCI_IO_AREA SH7751_PCI_IO_BASE +-#define PCI_MEM_AREA SH7751_PCI_CONFIG_BASE +- +-#define PCI_IOMAP(adr) (PCI_IO_AREA + (adr & ~SH7751_PCIIOBR_MASK)) + #define ETHER_IOMAP(adr) (0xB3000000 + (adr)) /*map to 16bits access area + of smc lan chip*/ +- +-#define maybebadio(name,port) \ +- printk("bad PC-like io %s for port 0x%lx at 0x%08x\n", \ +- #name, (port), (__u32) __builtin_return_address(0)) +- +-static inline void delay(void) +-{ +- ctrl_inw(0xa0000000); +-} +- + static inline volatile __u16 * + port2adr(unsigned int port) + { + if (port >= 0x2000) + return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000)); +-#if 0 +- else +- return (volatile __u16 *) (PA_SUPERIO + (port << 1)); +-#endif +- maybebadio(name,(unsigned long)port); ++ maybebadio((unsigned long)port); + return (volatile __u16*)port; + } + +-/* In case someone configures the kernel w/o PCI support: in that */ +-/* scenario, don't ever bother to check for PCI-window addresses */ +- +-/* NOTE: WINDOW CHECK MAY BE A BIT OFF, HIGH PCIBIOS_MIN_IO WRAPS? */ +-#if defined(CONFIG_PCI) +-#define CHECK_SH7751_PCIIO(port) \ +- ((port >= PCIBIOS_MIN_IO) && (port < (PCIBIOS_MIN_IO + SH7751_PCI_IO_SIZE))) +-#else +-#define CHECK_SH7751_PCIIO(port) (0) +-#endif +- + /* + * General outline: remap really low stuff [eventually] to SuperIO, + * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO) +@@ -76,8 +35,8 @@ + { + if (PXSEG(port)) + return *(volatile unsigned char *)port; +- else if (CHECK_SH7751_PCIIO(port)) +- return *(volatile unsigned char *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port)) ++ return *(volatile unsigned char *)pci_ioaddr(port); + else if (port <= 0x3F1) + return *(volatile unsigned char *)ETHER_IOMAP(port); + else +@@ -90,13 +49,13 @@ + + if (PXSEG(port)) + v = *(volatile unsigned char *)port; +- else if (CHECK_SH7751_PCIIO(port)) +- v = *(volatile unsigned char *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port)) ++ v = *(volatile unsigned char *)pci_ioaddr(port); + else if (port <= 0x3F1) + v = *(volatile unsigned char *)ETHER_IOMAP(port); + else + v = (*port2adr(port))&0xff; +- delay(); ++ ctrl_delay(); + return v; + } + +@@ -104,14 +63,14 @@ + { + if (PXSEG(port)) + return *(volatile unsigned short *)port; +- else if (CHECK_SH7751_PCIIO(port)) +- return *(volatile unsigned short *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port)) ++ return *(volatile unsigned short *)pci_ioaddr(port); + else if (port >= 0x2000) + return *port2adr(port); + else if (port <= 0x3F1) + return *(volatile unsigned int *)ETHER_IOMAP(port); + else +- maybebadio(inw, port); ++ maybebadio(port); + return 0; + } + +@@ -119,14 +78,14 @@ + { + if (PXSEG(port)) + return *(volatile unsigned long *)port; +- else if (CHECK_SH7751_PCIIO(port)) +- return *(volatile unsigned int *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port)) ++ return *(volatile unsigned int *)pci_ioaddr(port); + else if (port >= 0x2000) + return *port2adr(port); + else if (port <= 0x3F1) + return *(volatile unsigned int *)ETHER_IOMAP(port); + else +- maybebadio(inl, port); ++ maybebadio(port); + return 0; + } + +@@ -135,8 +94,8 @@ + + if (PXSEG(port)) + *(volatile unsigned char *)port = value; +- else if (CHECK_SH7751_PCIIO(port)) +- *((unsigned char*)PCI_IOMAP(port)) = value; ++ else if (is_pci_ioaddr(port)) ++ *((unsigned char*)pci_ioaddr(port)) = value; + else if (port <= 0x3F1) + *(volatile unsigned char *)ETHER_IOMAP(port) = value; + else +@@ -147,37 +106,37 @@ + { + if (PXSEG(port)) + *(volatile unsigned char *)port = value; +- else if (CHECK_SH7751_PCIIO(port)) +- *((unsigned char*)PCI_IOMAP(port)) = value; ++ else if (is_pci_ioaddr(port)) ++ *((unsigned char*)pci_ioaddr(port)) = value; + else if (port <= 0x3F1) + *(volatile unsigned char *)ETHER_IOMAP(port) = value; + else + *(port2adr(port)) = value; +- delay(); ++ ctrl_delay(); + } + + void sh7751systemh_outw(unsigned short value, unsigned long port) + { + if (PXSEG(port)) + *(volatile unsigned short *)port = value; +- else if (CHECK_SH7751_PCIIO(port)) +- *((unsigned short *)PCI_IOMAP(port)) = value; ++ else if (is_pci_ioaddr(port)) ++ *((unsigned short *)pci_ioaddr(port)) = value; + else if (port >= 0x2000) + *port2adr(port) = value; + else if (port <= 0x3F1) + *(volatile unsigned short *)ETHER_IOMAP(port) = value; + else +- maybebadio(outw, port); ++ maybebadio(port); + } + + void sh7751systemh_outl(unsigned int value, unsigned long port) + { + if (PXSEG(port)) + *(volatile unsigned long *)port = value; +- else if (CHECK_SH7751_PCIIO(port)) +- *((unsigned long*)PCI_IOMAP(port)) = value; ++ else if (is_pci_ioaddr(port)) ++ *((unsigned long*)pci_ioaddr(port)) = value; + else +- maybebadio(outl, port); ++ maybebadio(port); + } + + void sh7751systemh_insb(unsigned long port, void *addr, unsigned long count) +@@ -194,7 +153,7 @@ + + void sh7751systemh_insl(unsigned long port, void *addr, unsigned long count) + { +- maybebadio(insl, port); ++ maybebadio(port); + } + + void sh7751systemh_outsb(unsigned long port, const void *addr, unsigned long count) +@@ -211,73 +170,5 @@ + + void sh7751systemh_outsl(unsigned long port, const void *addr, unsigned long count) + { +- maybebadio(outsw, port); +-} +- +-/* For read/write calls, just copy generic (pass-thru); PCIMBR is */ +-/* already set up. For a larger memory space, these would need to */ +-/* reset PCIMBR as needed on a per-call basis... */ +- +-unsigned char sh7751systemh_readb(unsigned long addr) +-{ +- return *(volatile unsigned char*)addr; +-} +- +-unsigned short sh7751systemh_readw(unsigned long addr) +-{ +- return *(volatile unsigned short*)addr; +-} +- +-unsigned int sh7751systemh_readl(unsigned long addr) +-{ +- return *(volatile unsigned long*)addr; +-} +- +-void sh7751systemh_writeb(unsigned char b, unsigned long addr) +-{ +- *(volatile unsigned char*)addr = b; +-} +- +-void sh7751systemh_writew(unsigned short b, unsigned long addr) +-{ +- *(volatile unsigned short*)addr = b; +-} +- +-void sh7751systemh_writel(unsigned int b, unsigned long addr) +-{ +- *(volatile unsigned long*)addr = b; +-} +- +- +- +-/* Map ISA bus address to the real address. Only for PCMCIA. */ +- +-/* ISA page descriptor. */ +-static __u32 sh_isa_memmap[256]; +- +-#if 0 +-static int +-sh_isa_mmap(__u32 start, __u32 length, __u32 offset) +-{ +- int idx; +- +- if (start >= 0x100000 || (start & 0xfff) || (length != 0x1000)) +- return -1; +- +- idx = start >> 12; +- sh_isa_memmap[idx] = 0xb8000000 + (offset &~ 0xfff); +- printk("sh_isa_mmap: start %x len %x offset %x (idx %x paddr %x)\n", +- start, length, offset, idx, sh_isa_memmap[idx]); +- return 0; +-} +-#endif +- +-unsigned long +-sh7751systemh_isa_port2addr(unsigned long offset) +-{ +- int idx; +- +- idx = (offset >> 12) & 0xff; +- offset &= 0xfff; +- return sh_isa_memmap[idx] + offset; ++ maybebadio(port); + } +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/irq.c linux-2.6.17/arch/sh/boards/renesas/systemh/irq.c +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/irq.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/systemh/irq.c 2006-07-12 16:54:20.000000000 +0000 +@@ -16,7 +16,7 @@ + #include <linux/hdreg.h> + #include <linux/ide.h> + #include <asm/io.h> +-#include <asm/mach/7751systemh.h> ++#include <asm/systemh7751.h> + #include <asm/smc37c93x.h> + + /* address of external interrupt mask register +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/setup.c linux-2.6.17/arch/sh/boards/renesas/systemh/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/renesas/systemh/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/renesas/systemh/setup.c 2006-07-12 16:54:20.000000000 +0000 +@@ -15,9 +15,8 @@ + * for more details. + */ + #include <linux/init.h> +-#include <asm/mach/7751systemh.h> +-#include <asm/mach/io.h> + #include <asm/machvec.h> ++#include <asm/systemh7751.h> + + extern void make_systemh_irq(unsigned int irq); + +@@ -31,8 +30,6 @@ + */ + void __init init_7751systemh_IRQ(void) + { +-/* make_ipr_irq(10, BCR_ILCRD, 1, 0x0f-10); LAN */ +-/* make_ipr_irq(14, BCR_ILCRA, 2, 0x0f-4); */ + make_systemh_irq(0xb); /* Ethernet interrupt */ + } + +@@ -60,15 +57,6 @@ + .mv_outsw = sh7751systemh_outsw, + .mv_outsl = sh7751systemh_outsl, + +- .mv_readb = sh7751systemh_readb, +- .mv_readw = sh7751systemh_readw, +- .mv_readl = sh7751systemh_readl, +- .mv_writeb = sh7751systemh_writeb, +- .mv_writew = sh7751systemh_writew, +- .mv_writel = sh7751systemh_writel, +- +- .mv_isa_port2addr = sh7751systemh_isa_port2addr, +- + .mv_init_irq = init_7751systemh_IRQ, + }; + ALIAS_MV(7751systemh) +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/saturn/CVS/Entries linux-2.6.17/arch/sh/boards/saturn/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/saturn/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/saturn/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,6 @@ ++/Makefile/1.4/Thu Mar 11 18:08:03 2004/-ko/ ++/io.c/1.2/Sun May 4 19:29:47 2003/-ko/ ++/irq.c/1.4/Sun Oct 26 23:41:36 2003/-ko/ ++/setup.c/1.4/Sun Oct 26 23:41:36 2003/-ko/ ++/smp.c/1.3/Sun Oct 26 23:41:36 2003/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/saturn/CVS/Repository linux-2.6.17/arch/sh/boards/saturn/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/saturn/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/saturn/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/saturn +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/saturn/CVS/Root linux-2.6.17/arch/sh/boards/saturn/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/saturn/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/saturn/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/CVS/Entries linux-2.6.17/arch/sh/boards/se/7300/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7300/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,6 @@ ++/Makefile/1.1/Fri Jun 11 13:02:47 2004// ++/io.c/1.3/Wed Jan 4 17:25:52 2006// ++/irq.c/1.2/Wed Jan 4 17:25:52 2006// ++/led.c/1.2/Wed Jan 4 17:25:52 2006// ++/setup.c/1.2/Wed Jan 4 17:25:52 2006// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/CVS/Repository linux-2.6.17/arch/sh/boards/se/7300/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7300/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/se/7300 +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/CVS/Root linux-2.6.17/arch/sh/boards/se/7300/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7300/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/io.c linux-2.6.17/arch/sh/boards/se/7300/io.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/io.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7300/io.c 2006-07-12 16:54:20.000000000 +0000 +@@ -10,8 +10,8 @@ + + #include <linux/config.h> + #include <linux/kernel.h> +-#include <asm/mach/se7300.h> + #include <asm/io.h> ++#include <asm/se7300.h> + + #define badio(fn, a) panic("bad i/o operation %s for %08lx.", #fn, a) + +@@ -100,6 +100,7 @@ + badio(inw, port); + } + ++#ifdef CONFIG_SMC91X + /* MSTLANEX01 LAN at 0xb400:0000 */ + static struct iop laniop = { + .start = 0x300, +@@ -111,6 +112,7 @@ + .outb = simple_outb, + .outw = simple_outw, + }; ++#endif + + /* NE2000 pc card NIC */ + static struct iop neiop = { +@@ -124,6 +126,7 @@ + .outw = simple_outw, + }; + ++#ifdef CONFIG_IDE + /* CF in CF slot */ + static struct iop cfiop = { + .base = 0xb0600000, +@@ -133,12 +136,13 @@ + .outb = pcc_outb, + .outw = simple_outw, + }; ++#endif + + static __inline__ struct iop * + port2iop(unsigned long port) + { + if (0) ; +-#if defined(CONFIG_SMC91111) ++#if defined(CONFIG_SMC91X) + else if (laniop.check(&laniop, port)) + return &laniop; + #endif +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/irq.c linux-2.6.17/arch/sh/boards/se/7300/irq.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/irq.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7300/irq.c 2006-07-12 16:54:20.000000000 +0000 +@@ -12,7 +12,7 @@ + #include <linux/irq.h> + #include <asm/irq.h> + #include <asm/io.h> +-#include <asm/mach/se7300.h> ++#include <asm/se7300.h> + + /* + * Initialize IRQ setting +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/led.c linux-2.6.17/arch/sh/boards/se/7300/led.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/led.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7300/led.c 2006-07-12 16:54:20.000000000 +0000 +@@ -13,24 +13,10 @@ + + #include <linux/config.h> + #include <linux/sched.h> +-#include <asm/mach/se7300.h> +- +-static void +-mach_led(int position, int value) +-{ +- volatile unsigned short *p = (volatile unsigned short *) PA_LED; +- +- if (value) { +- *p |= (1 << 8); +- } else { +- *p &= ~(1 << 8); +- } +-} +- ++#include <asm/se7300.h> + + /* Cycle the LED's in the clasic Knightrider/Sun pattern */ +-void +-heartbeat_7300se(void) ++void heartbeat_7300se(void) + { + static unsigned int cnt = 0, period = 0; + volatile unsigned short *p = (volatile unsigned short *) PA_LED; +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7300/setup.c linux-2.6.17/arch/sh/boards/se/7300/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/7300/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7300/setup.c 2006-07-12 16:54:20.000000000 +0000 +@@ -10,8 +10,7 @@ + #include <linux/config.h> + #include <linux/init.h> + #include <asm/machvec.h> +-#include <asm/machvec_init.h> +-#include <asm/mach/io.h> ++#include <asm/se7300.h> + + void heartbeat_7300se(void); + void init_7300se_IRQ(void); +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/CVS/Entries linux-2.6.17/arch/sh/boards/se/73180/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/73180/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,6 @@ ++/Makefile/1.1/Mon Jun 28 13:18:45 2004// ++/io.c/1.2/Tue May 31 14:00:25 2005// ++/irq.c/1.2/Tue May 31 14:00:25 2005// ++/led.c/1.2/Tue May 31 14:00:25 2005// ++/setup.c/1.3/Sun Jan 8 12:22:57 2006// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/CVS/Repository linux-2.6.17/arch/sh/boards/se/73180/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/73180/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/se/73180 +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/CVS/Root linux-2.6.17/arch/sh/boards/se/73180/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/73180/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/io.c linux-2.6.17/arch/sh/boards/se/73180/io.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/io.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/73180/io.c 2006-07-12 16:54:20.000000000 +0000 +@@ -100,6 +100,7 @@ + badio(inw, port); + } + ++#ifdef CONFIG_SMC91X + /* MSTLANEX01 LAN at 0xb400:0000 */ + static struct iop laniop = { + .start = 0x300, +@@ -111,6 +112,7 @@ + .outb = simple_outb, + .outw = simple_outw, + }; ++#endif + + /* NE2000 pc card NIC */ + static struct iop neiop = { +@@ -124,6 +126,7 @@ + .outw = simple_outw, + }; + ++#ifdef CONFIG_IDE + /* CF in CF slot */ + static struct iop cfiop = { + .base = 0xb0600000, +@@ -133,12 +136,13 @@ + .outb = pcc_outb, + .outw = simple_outw, + }; ++#endif + + static __inline__ struct iop * + port2iop(unsigned long port) + { + if (0) ; +-#if defined(CONFIG_SMC91111) ++#if defined(CONFIG_SMC91X) + else if (laniop.check(&laniop, port)) + return &laniop; + #endif +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/irq.c linux-2.6.17/arch/sh/boards/se/73180/irq.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/irq.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/73180/irq.c 2006-07-12 16:54:20.000000000 +0000 +@@ -7,7 +7,6 @@ + * Modified for SH-Mobile SolutionEngine 73180 Support + * by YOSHII Takashi <yoshii-takashi@hitachi-ul.co.jp> + * +- * + */ + + #include <linux/config.h> +@@ -18,14 +17,6 @@ + #include <asm/mach/se73180.h> + + static int +-intreq2irq(int i) +-{ +- if (i == 5) +- return 10; +- return 32 + 7 - i; +-} +- +-static int + irq2intreq(int irq) + { + if (irq == 10) +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/led.c linux-2.6.17/arch/sh/boards/se/73180/led.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/led.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/73180/led.c 2006-07-12 16:54:20.000000000 +0000 +@@ -15,21 +15,8 @@ + #include <linux/sched.h> + #include <asm/mach/se73180.h> + +-static void +-mach_led(int position, int value) +-{ +- volatile unsigned short *p = (volatile unsigned short *) PA_LED; +- +- if (value) { +- *p |= (1 << LED_SHIFT); +- } else { +- *p &= ~(1 << LED_SHIFT); +- } +-} +- + /* Cycle the LED's in the clasic Knightrider/Sun pattern */ +-void +-heartbeat_73180se(void) ++void heartbeat_73180se(void) + { + static unsigned int cnt = 0, period = 0; + volatile unsigned short *p = (volatile unsigned short *) PA_LED; +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/73180/setup.c linux-2.6.17/arch/sh/boards/se/73180/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/73180/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/73180/setup.c 2006-07-12 16:54:20.000000000 +0000 +@@ -12,8 +12,8 @@ + #include <linux/config.h> + #include <linux/init.h> + #include <asm/machvec.h> +-#include <asm/machvec_init.h> +-#include <asm/mach/io.h> ++#include <asm/se73180.h> ++#include <asm/irq.h> + + void heartbeat_73180se(void); + void init_73180se_IRQ(void); +@@ -52,6 +52,7 @@ + .mv_outsl = sh73180se_outsl, + + .mv_init_irq = init_73180se_IRQ, ++ .mv_irq_demux = shmse_irq_demux, + #ifdef CONFIG_HEARTBEAT + .mv_heartbeat = heartbeat_73180se, + #endif +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/CVS/Entries linux-2.6.17/arch/sh/boards/se/770x/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/770x/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,7 @@ ++/Makefile/1.5/Tue May 31 14:49:59 2005// ++/io.c/1.7/Sun Feb 5 21:55:29 2006// ++/irq.c/1.7/Wed Jan 4 17:53:54 2006/-ko/ ++/led.c/1.4/Wed Jan 4 17:53:54 2006// ++/mach.c/1.8/Wed Jan 4 17:53:54 2006// ++/setup.c/1.5/Wed Jan 4 17:53:54 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/CVS/Repository linux-2.6.17/arch/sh/boards/se/770x/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/770x/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/se/770x +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/CVS/Root linux-2.6.17/arch/sh/boards/se/770x/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/770x/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/Makefile linux-2.6.17/arch/sh/boards/se/770x/Makefile +--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/770x/Makefile 2006-07-12 16:54:20.000000000 +0000 +@@ -2,5 +2,6 @@ + # Makefile for the 770x SolutionEngine specific parts of the kernel + # + +-obj-y := mach.o setup.o io.o irq.o led.o ++obj-y := mach.o setup.o io.o irq.o + ++obj-$(CONFIG_HEARTBEAT) += led.o +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/io.c linux-2.6.17/arch/sh/boards/se/770x/io.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/io.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/770x/io.c 2006-07-12 16:54:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-/* $Id: io.c,v 1.5 2004/02/22 23:08:43 kkojima Exp $ ++/* $Id: io.c,v 1.7 2006/02/05 21:55:29 lethal Exp $ + * + * linux/arch/sh/kernel/io_se.c + * +@@ -11,7 +11,7 @@ + #include <linux/kernel.h> + #include <linux/types.h> + #include <asm/io.h> +-#include <asm/se/se.h> ++#include <asm/se.h> + + /* SH pcmcia io window base, start and end. */ + int sh_pcic_io_wbase = 0xb8400000; +@@ -20,11 +20,6 @@ + int sh_pcic_io_type; + int sh_pcic_io_dummy; + +-static inline void delay(void) +-{ +- ctrl_inw(0xa0000000); +-} +- + /* MS7750 requires special versions of in*, out* routines, since + PC-like io ports are located at upper half byte of 16-bit word which + can be accessed only with 16-bit wide. */ +@@ -52,10 +47,6 @@ + return 1; + } + +-#define maybebadio(name,port) \ +- printk("bad PC-like io %s for port 0x%lx at 0x%08x\n", \ +- #name, (port), (__u32) __builtin_return_address(0)) +- + unsigned char se_inb(unsigned long port) + { + if (sh_pcic_io_start <= port && port <= sh_pcic_io_stop) +@@ -76,7 +67,7 @@ + v = (*port2adr(port) >> 8); + else + v = (*port2adr(port))&0xff; +- delay(); ++ ctrl_delay(); + return v; + } + +@@ -86,13 +77,13 @@ + (sh_pcic_io_start <= port && port <= sh_pcic_io_stop)) + return *port2adr(port); + else +- maybebadio(inw, port); ++ maybebadio(port); + return 0; + } + + unsigned int se_inl(unsigned long port) + { +- maybebadio(inl, port); ++ maybebadio(port); + return 0; + } + +@@ -114,7 +105,7 @@ + *(port2adr(port)) = value << 8; + else + *(port2adr(port)) = value; +- delay(); ++ ctrl_delay(); + } + + void se_outw(unsigned short value, unsigned long port) +@@ -123,12 +114,12 @@ + (sh_pcic_io_start <= port && port <= sh_pcic_io_stop)) + *port2adr(port) = value; + else +- maybebadio(outw, port); ++ maybebadio(port); + } + + void se_outl(unsigned int value, unsigned long port) + { +- maybebadio(outl, port); ++ maybebadio(port); + } + + void se_insb(unsigned long port, void *addr, unsigned long count) +@@ -159,7 +150,7 @@ + + void se_insl(unsigned long port, void *addr, unsigned long count) + { +- maybebadio(insl, port); ++ maybebadio(port); + } + + void se_outsb(unsigned long port, const void *addr, unsigned long count) +@@ -190,37 +181,5 @@ + + void se_outsl(unsigned long port, const void *addr, unsigned long count) + { +- maybebadio(outsw, port); +-} +- +-/* Map ISA bus address to the real address. Only for PCMCIA. */ +- +-/* ISA page descriptor. */ +-static __u32 sh_isa_memmap[256]; +- +-static int +-sh_isa_mmap(__u32 start, __u32 length, __u32 offset) +-{ +- int idx; +- +- if (start >= 0x100000 || (start & 0xfff) || (length != 0x1000)) +- return -1; +- +- idx = start >> 12; +- sh_isa_memmap[idx] = 0xb8000000 + (offset &~ 0xfff); +-#if 0 +- printk("sh_isa_mmap: start %x len %x offset %x (idx %x paddr %x)\n", +- start, length, offset, idx, sh_isa_memmap[idx]); +-#endif +- return 0; +-} +- +-unsigned long +-se_isa_port2addr(unsigned long offset) +-{ +- int idx; +- +- idx = (offset >> 12) & 0xff; +- offset &= 0xfff; +- return sh_isa_memmap[idx] + offset; ++ maybebadio(port); + } +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/irq.c linux-2.6.17/arch/sh/boards/se/770x/irq.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/irq.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/770x/irq.c 2006-07-12 16:54:20.000000000 +0000 +@@ -12,7 +12,7 @@ + #include <linux/irq.h> + #include <asm/irq.h> + #include <asm/io.h> +-#include <asm/se/se.h> ++#include <asm/se.h> + + /* + * Initialize IRQ setting +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/led.c linux-2.6.17/arch/sh/boards/se/770x/led.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/led.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/770x/led.c 2006-07-12 16:54:20.000000000 +0000 +@@ -10,22 +10,8 @@ + */ + + #include <linux/config.h> +-#include <asm/se/se.h> +- +-static void mach_led(int position, int value) +-{ +- volatile unsigned short* p = (volatile unsigned short*)PA_LED; +- +- if (value) { +- *p |= (1<<8); +- } else { +- *p &= ~(1<<8); +- } +-} +- +-#ifdef CONFIG_HEARTBEAT +- + #include <linux/sched.h> ++#include <asm/se.h> + + /* Cycle the LED's in the clasic Knightrider/Sun pattern */ + void heartbeat_se(void) +@@ -65,4 +51,3 @@ + *p = 1<<(bit+8); + + } +-#endif /* CONFIG_HEARTBEAT */ +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/mach.c linux-2.6.17/arch/sh/boards/se/770x/mach.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/mach.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/770x/mach.c 2006-07-12 16:54:20.000000000 +0000 +@@ -14,12 +14,9 @@ + + #include <asm/machvec.h> + #include <asm/rtc.h> +-#include <asm/machvec_init.h> +- +-#include <asm/se/io.h> ++#include <asm/se.h> + + void heartbeat_se(void); +-void setup_se(void); + void init_se_IRQ(void); + + /* +@@ -58,8 +55,6 @@ + .mv_outsw = se_outsw, + .mv_outsl = se_outsl, + +- .mv_isa_port2addr = se_isa_port2addr, +- + .mv_init_irq = init_se_IRQ, + #ifdef CONFIG_HEARTBEAT + .mv_heartbeat = heartbeat_se, +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/770x/setup.c linux-2.6.17/arch/sh/boards/se/770x/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/770x/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/770x/setup.c 2006-07-12 16:54:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-/* $Id: setup.c,v 1.1.2.4 2002/03/02 21:57:07 lethal Exp $ ++/* $Id: setup.c,v 1.3 2003/05/04 19:29:47 lethal Exp $ + * + * linux/arch/sh/boards/se/770x/setup.c + * +@@ -15,8 +15,8 @@ + #include <linux/hdreg.h> + #include <linux/ide.h> + #include <asm/io.h> +-#include <asm/se/se.h> +-#include <asm/se/smc37c93x.h> ++#include <asm/se.h> ++#include <asm/smc37c93x.h> + + /* + * Configure the Super I/O chip +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/CVS/Entries linux-2.6.17/arch/sh/boards/se/7751/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7751/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,8 @@ ++/Makefile/1.5/Tue May 31 15:16:49 2005// ++/io.c/1.6/Sun Feb 5 21:55:29 2006// ++/irq.c/1.3/Wed Jan 4 18:13:24 2006// ++/led.c/1.4/Wed Jan 4 18:13:24 2006// ++/mach.c/1.6/Wed Jan 4 18:13:24 2006// ++/pci.c/1.8/Fri Sep 24 15:16:19 2004// ++/setup.c/1.3/Wed Jan 4 18:13:24 2006// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/CVS/Repository linux-2.6.17/arch/sh/boards/se/7751/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7751/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/se/7751 +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/CVS/Root linux-2.6.17/arch/sh/boards/se/7751/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7751/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/Makefile linux-2.6.17/arch/sh/boards/se/7751/Makefile +--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7751/Makefile 2006-07-12 16:54:20.000000000 +0000 +@@ -2,7 +2,8 @@ + # Makefile for the 7751 SolutionEngine specific parts of the kernel + # + +-obj-y := mach.o setup.o io.o irq.o led.o ++obj-y := mach.o setup.o io.o irq.o + + obj-$(CONFIG_PCI) += pci.o ++obj-$(CONFIG_HEARTBEAT) += led.o + +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/io.c linux-2.6.17/arch/sh/boards/se/7751/io.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/io.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7751/io.c 2006-07-12 16:54:20.000000000 +0000 +@@ -1,6 +1,4 @@ +-/* +- * linux/arch/sh/kernel/io_7751se.c +- * ++/* + * Copyright (C) 2001 Ian da Silva, Jeremy Siegel + * Based largely on io_se.c. + * +@@ -10,96 +8,21 @@ + * placeholder code from io_se.c left in with the + * expectation of later SuperIO and PCMCIA access. + */ +- + #include <linux/kernel.h> + #include <linux/types.h> ++#include <linux/pci.h> + #include <asm/io.h> +-#include <asm/se7751/se7751.h> ++#include <asm/se7751.h> + #include <asm/addrspace.h> + +-#include <linux/pci.h> +-#include "../../../drivers/pci/pci-sh7751.h" +- +-#if 0 +-/****************************************************************** +- * Variables from io_se.c, related to PCMCIA (not PCI); we're not +- * compiling them in, and have removed references from functions +- * which follow. [Many checked for IO ports in the range bounded +- * by sh_pcic_io_start/stop, and used sh_pcic_io_wbase as offset. +- * As start/stop are uninitialized, only port 0x0 would match?] +- * When used, remember to adjust names to avoid clash with io_se? +- *****************************************************************/ +-/* SH pcmcia io window base, start and end. */ +-int sh_pcic_io_wbase = 0xb8400000; +-int sh_pcic_io_start; +-int sh_pcic_io_stop; +-int sh_pcic_io_type; +-int sh_pcic_io_dummy; +-/*************************************************************/ +-#endif +- +-/* +- * The 7751 Solution Engine uses the built-in PCI controller (PCIC) +- * of the 7751 processor, and has a SuperIO accessible via the PCI. +- * The board also includes a PCMCIA controller on its memory bus, +- * like the other Solution Engine boards. +- */ +- +-#define PCIIOBR (volatile long *)PCI_REG(SH7751_PCIIOBR) +-#define PCIMBR (volatile long *)PCI_REG(SH7751_PCIMBR) +-#define PCI_IO_AREA SH7751_PCI_IO_BASE +-#define PCI_MEM_AREA SH7751_PCI_CONFIG_BASE +- +-#define PCI_IOMAP(adr) (PCI_IO_AREA + (adr & ~SH7751_PCIIOBR_MASK)) +- +-#define maybebadio(name,port) \ +- printk("bad PC-like io %s for port 0x%lx at 0x%08x\n", \ +- #name, (port), (__u32) __builtin_return_address(0)) +- +-static inline void delay(void) +-{ +- ctrl_inw(0xa0000000); +-} +- +-static inline volatile __u16 * +-port2adr(unsigned int port) ++static inline volatile u16 *port2adr(unsigned int port) + { + if (port >= 0x2000) + return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000)); +-#if 0 +- else +- return (volatile __u16 *) (PA_SUPERIO + (port << 1)); +-#endif +- maybebadio(name,(unsigned long)port); ++ maybebadio((unsigned long)port); + return (volatile __u16*)port; + } + +-#if 0 +-/* The 7751 Solution Engine seems to have everything hooked */ +-/* up pretty normally (nothing on high-bytes only...) so this */ +-/* shouldn't be needed */ +-static inline int +-shifted_port(unsigned long port) +-{ +- /* For IDE registers, value is not shifted */ +- if ((0x1f0 <= port && port < 0x1f8) || port == 0x3f6) +- return 0; +- else +- return 1; +-} +-#endif +- +-/* In case someone configures the kernel w/o PCI support: in that */ +-/* scenario, don't ever bother to check for PCI-window addresses */ +- +-/* NOTE: WINDOW CHECK MAY BE A BIT OFF, HIGH PCIBIOS_MIN_IO WRAPS? */ +-#if defined(CONFIG_PCI) +-#define CHECK_SH7751_PCIIO(port) \ +- ((port >= PCIBIOS_MIN_IO) && (port < (PCIBIOS_MIN_IO + SH7751_PCI_IO_SIZE))) +-#else +-#define CHECK_SH7751_PCIIO(port) (0) +-#endif +- + /* + * General outline: remap really low stuff [eventually] to SuperIO, + * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO) +@@ -111,10 +34,10 @@ + { + if (PXSEG(port)) + return *(volatile unsigned char *)port; +- else if (CHECK_SH7751_PCIIO(port)) +- return *(volatile unsigned char *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port)) ++ return *(volatile unsigned char *)pci_ioaddr(port); + else +- return (*port2adr(port))&0xff; ++ return (*port2adr(port)) & 0xff; + } + + unsigned char sh7751se_inb_p(unsigned long port) +@@ -123,11 +46,11 @@ + + if (PXSEG(port)) + v = *(volatile unsigned char *)port; +- else if (CHECK_SH7751_PCIIO(port)) +- v = *(volatile unsigned char *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port)) ++ v = *(volatile unsigned char *)pci_ioaddr(port); + else +- v = (*port2adr(port))&0xff; +- delay(); ++ v = (*port2adr(port)) & 0xff; ++ ctrl_delay(); + return v; + } + +@@ -135,12 +58,12 @@ + { + if (PXSEG(port)) + return *(volatile unsigned short *)port; +- else if (CHECK_SH7751_PCIIO(port)) +- return *(volatile unsigned short *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port)) ++ return *(volatile unsigned short *)pci_ioaddr(port); + else if (port >= 0x2000) + return *port2adr(port); + else +- maybebadio(inw, port); ++ maybebadio(port); + return 0; + } + +@@ -148,12 +71,12 @@ + { + if (PXSEG(port)) + return *(volatile unsigned long *)port; +- else if (CHECK_SH7751_PCIIO(port)) +- return *(volatile unsigned int *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port)) ++ return *(volatile unsigned int *)pci_ioaddr(port); + else if (port >= 0x2000) + return *port2adr(port); + else +- maybebadio(inl, port); ++ maybebadio(port); + return 0; + } + +@@ -162,8 +85,8 @@ + + if (PXSEG(port)) + *(volatile unsigned char *)port = value; +- else if (CHECK_SH7751_PCIIO(port)) +- *((unsigned char*)PCI_IOMAP(port)) = value; ++ else if (is_pci_ioaddr(port)) ++ *((unsigned char*)pci_ioaddr(port)) = value; + else + *(port2adr(port)) = value; + } +@@ -172,73 +95,41 @@ + { + if (PXSEG(port)) + *(volatile unsigned char *)port = value; +- else if (CHECK_SH7751_PCIIO(port)) +- *((unsigned char*)PCI_IOMAP(port)) = value; ++ else if (is_pci_ioaddr(port)) ++ *((unsigned char*)pci_ioaddr(port)) = value; + else + *(port2adr(port)) = value; +- delay(); ++ ctrl_delay(); + } + + void sh7751se_outw(unsigned short value, unsigned long port) + { + if (PXSEG(port)) + *(volatile unsigned short *)port = value; +- else if (CHECK_SH7751_PCIIO(port)) +- *((unsigned short *)PCI_IOMAP(port)) = value; ++ else if (is_pci_ioaddr(port)) ++ *((unsigned short *)pci_ioaddr(port)) = value; + else if (port >= 0x2000) + *port2adr(port) = value; + else +- maybebadio(outw, port); ++ maybebadio(port); + } + + void sh7751se_outl(unsigned int value, unsigned long port) + { + if (PXSEG(port)) + *(volatile unsigned long *)port = value; +- else if (CHECK_SH7751_PCIIO(port)) +- *((unsigned long*)PCI_IOMAP(port)) = value; ++ else if (is_pci_ioaddr(port)) ++ *((unsigned long*)pci_ioaddr(port)) = value; + else +- maybebadio(outl, port); ++ maybebadio(port); + } + + void sh7751se_insl(unsigned long port, void *addr, unsigned long count) + { +- maybebadio(insl, port); ++ maybebadio(port); + } + + void sh7751se_outsl(unsigned long port, const void *addr, unsigned long count) + { +- maybebadio(outsw, port); +-} +- +-/* Map ISA bus address to the real address. Only for PCMCIA. */ +- +-/* ISA page descriptor. */ +-static __u32 sh_isa_memmap[256]; +- +-#if 0 +-static int +-sh_isa_mmap(__u32 start, __u32 length, __u32 offset) +-{ +- int idx; +- +- if (start >= 0x100000 || (start & 0xfff) || (length != 0x1000)) +- return -1; +- +- idx = start >> 12; +- sh_isa_memmap[idx] = 0xb8000000 + (offset &~ 0xfff); +- printk("sh_isa_mmap: start %x len %x offset %x (idx %x paddr %x)\n", +- start, length, offset, idx, sh_isa_memmap[idx]); +- return 0; +-} +-#endif +- +-unsigned long +-sh7751se_isa_port2addr(unsigned long offset) +-{ +- int idx; +- +- idx = (offset >> 12) & 0xff; +- offset &= 0xfff; +- return sh_isa_memmap[idx] + offset; ++ maybebadio(port); + } +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/irq.c linux-2.6.17/arch/sh/boards/se/7751/irq.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/irq.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7751/irq.c 2006-07-12 16:54:20.000000000 +0000 +@@ -13,7 +13,7 @@ + #include <linux/init.h> + #include <linux/irq.h> + #include <asm/irq.h> +-#include <asm/se7751/se7751.h> ++#include <asm/se7751.h> + + /* + * Initialize IRQ setting +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/led.c linux-2.6.17/arch/sh/boards/se/7751/led.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/led.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7751/led.c 2006-07-12 16:54:20.000000000 +0000 +@@ -8,24 +8,8 @@ + * + * This file contains Solution Engine specific LED code. + */ +- +-#include <linux/config.h> +-#include <asm/se7751/se7751.h> +- +-static void mach_led(int position, int value) +-{ +- volatile unsigned short* p = (volatile unsigned short*)PA_LED; +- +- if (value) { +- *p |= (1<<8); +- } else { +- *p &= ~(1<<8); +- } +-} +- +-#ifdef CONFIG_HEARTBEAT +- + #include <linux/sched.h> ++#include <asm/se7751.h> + + /* Cycle the LED's in the clasic Knightrider/Sun pattern */ + void heartbeat_7751se(void) +@@ -65,4 +49,3 @@ + *p = 1<<(bit+8); + + } +-#endif /* CONFIG_HEARTBEAT */ +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/mach.c linux-2.6.17/arch/sh/boards/se/7751/mach.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/mach.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7751/mach.c 2006-07-12 16:54:20.000000000 +0000 +@@ -11,12 +11,8 @@ + + #include <linux/config.h> + #include <linux/init.h> +- + #include <asm/machvec.h> +-#include <asm/rtc.h> +-#include <asm/machvec_init.h> +- +-#include <asm/se7751/io.h> ++#include <asm/se7751.h> + + void heartbeat_7751se(void); + void init_7751se_IRQ(void); +@@ -45,8 +41,6 @@ + .mv_insl = sh7751se_insl, + .mv_outsl = sh7751se_outsl, + +- .mv_isa_port2addr = sh7751se_isa_port2addr, +- + .mv_init_irq = init_7751se_IRQ, + #ifdef CONFIG_HEARTBEAT + .mv_heartbeat = heartbeat_7751se, +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/7751/setup.c linux-2.6.17/arch/sh/boards/se/7751/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/se/7751/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/7751/setup.c 2006-07-12 16:54:20.000000000 +0000 +@@ -1,4 +1,4 @@ +-/* ++/* + * linux/arch/sh/kernel/setup_7751se.c + * + * Copyright (C) 2000 Kazumoto Kojima +@@ -12,11 +12,9 @@ + #include <linux/config.h> + #include <linux/init.h> + #include <linux/irq.h> +- +-#include <linux/hdreg.h> + #include <linux/ide.h> + #include <asm/io.h> +-#include <asm/se7751/se7751.h> ++#include <asm/se7751.h> + + #ifdef CONFIG_SH_KGDB + #include <asm/kgdb.h> +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/CVS/Entries linux-2.6.17/arch/sh/boards/se/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/se/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,4 @@ ++D/7300//// ++D/73180//// ++D/770x//// ++D/7751//// +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/CVS/Repository linux-2.6.17/arch/sh/boards/se/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/se/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/se +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/se/CVS/Root linux-2.6.17/arch/sh/boards/se/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/se/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/se/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh03/CVS/Entries linux-2.6.17/arch/sh/boards/sh03/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/sh03/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/sh03/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,5 @@ ++/Makefile/1.1/Thu Oct 7 11:01:14 2004/-ko/ ++/led.c/1.1/Thu Oct 7 11:01:14 2004/-ko/ ++/setup.c/1.3/Sun Feb 5 21:55:29 2006/-ko/ ++/rtc.c/1.4/Sat Jul 8 20:16:05 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh03/CVS/Repository linux-2.6.17/arch/sh/boards/sh03/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/sh03/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/sh03/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/sh03 +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh03/CVS/Root linux-2.6.17/arch/sh/boards/sh03/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/sh03/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/sh03/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh03/rtc.c linux-2.6.17/arch/sh/boards/sh03/rtc.c +--- linux-2.6.17-vanilla/arch/sh/boards/sh03/rtc.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/sh03/rtc.c 2006-07-12 16:54:20.000000000 +0000 +@@ -10,9 +10,10 @@ + #include <linux/sched.h> + #include <linux/time.h> + #include <linux/bcd.h> +-#include <asm/io.h> + #include <linux/rtc.h> + #include <linux/spinlock.h> ++#include <asm/io.h> ++#include <asm/rtc.h> + + #define RTC_BASE 0xb0000000 + #define RTC_SEC1 (RTC_BASE + 0) +@@ -34,8 +35,6 @@ + #define RTC_BUSY 1 + #define RTC_STOP 2 + +-extern void (*rtc_get_time)(struct timespec *); +-extern int (*rtc_set_time)(const time_t); + extern spinlock_t rtc_lock; + + unsigned long get_cmos_time(void) +@@ -128,6 +127,6 @@ + + void sh03_time_init(void) + { +- rtc_get_time = sh03_rtc_gettimeofday; +- rtc_set_time = sh03_rtc_settimeofday; ++ rtc_sh_get_time = sh03_rtc_gettimeofday; ++ rtc_sh_set_time = sh03_rtc_settimeofday; + } +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh03/setup.c linux-2.6.17/arch/sh/boards/sh03/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/sh03/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/sh03/setup.c 2006-07-12 16:54:20.000000000 +0000 +@@ -8,22 +8,18 @@ + #include <linux/config.h> + #include <linux/init.h> + #include <linux/irq.h> +-#include <linux/hdreg.h> +-#include <linux/ide.h> + #include <asm/io.h> ++#include <asm/rtc.h> + #include <asm/sh03/io.h> + #include <asm/sh03/sh03.h> + #include <asm/addrspace.h> +-#include "../../drivers/pci/pci-sh7751.h" +- +-extern void (*board_time_init)(void); + + const char *get_system_type(void) + { +- return "Interface CTP/PCI-SH03)"; ++ return "Interface (CTP/PCI-SH03)"; + } + +-void init_sh03_IRQ(void) ++static void init_sh03_IRQ(void) + { + ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); + +@@ -35,31 +31,26 @@ + + extern void *cf_io_base; + +-unsigned long sh03_isa_port2addr(unsigned long port) ++static void __iomem *sh03_ioport_map(unsigned long port, unsigned int size) + { + if (PXSEG(port)) +- return port; ++ return (void __iomem *)port; + /* CompactFlash (IDE) */ +- if (((port >= 0x1f0) && (port <= 0x1f7)) || (port == 0x3f6)) { +- return (unsigned long)cf_io_base + port; +- } +- return port + SH7751_PCI_IO_BASE; +-} ++ if (((port >= 0x1f0) && (port <= 0x1f7)) || (port == 0x3f6)) ++ return (void __iomem *)((unsigned long)cf_io_base + port); + +-/* +- * The Machine Vector +- */ ++ return (void __iomem *)(port + PCI_IO_BASE); ++} + + struct sh_machine_vector mv_sh03 __initmv = { + .mv_nr_irqs = 48, +- .mv_isa_port2addr = sh03_isa_port2addr, ++ .mv_ioport_map = sh03_ioport_map, + .mv_init_irq = init_sh03_IRQ, + + #ifdef CONFIG_HEARTBEAT + .mv_heartbeat = heartbeat_sh03, + #endif + }; +- + ALIAS_MV(sh03) + + /* arch/sh/boards/sh03/rtc.c */ +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh2000/CVS/Entries linux-2.6.17/arch/sh/boards/sh2000/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/sh2000/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/sh2000/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,3 @@ ++/Makefile/1.6/Thu Mar 11 18:08:03 2004// ++/setup.c/1.4/Mon Aug 4 01:57:07 2003// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh2000/CVS/Repository linux-2.6.17/arch/sh/boards/sh2000/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/sh2000/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/sh2000/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/sh2000 +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/sh2000/CVS/Root linux-2.6.17/arch/sh/boards/sh2000/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/sh2000/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/sh2000/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/snapgear/CVS/Entries linux-2.6.17/arch/sh/boards/snapgear/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/snapgear/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/snapgear/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,5 @@ ++/Makefile/1.3/Thu Mar 11 18:08:03 2004// ++/io.c/1.5/Sun Feb 5 21:55:29 2006// ++/setup.c/1.4/Wed Jan 4 18:42:42 2006// ++/rtc.c/1.3/Sat Jul 8 20:16:05 2006// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/snapgear/CVS/Repository linux-2.6.17/arch/sh/boards/snapgear/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/snapgear/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/snapgear/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/snapgear +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/snapgear/CVS/Root linux-2.6.17/arch/sh/boards/snapgear/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/snapgear/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/snapgear/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/snapgear/io.c linux-2.6.17/arch/sh/boards/snapgear/io.c +--- linux-2.6.17-vanilla/arch/sh/boards/snapgear/io.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/snapgear/io.c 2006-07-12 16:54:20.000000000 +0000 +@@ -1,6 +1,4 @@ +-/* +- * linux/arch/sh/kernel/io_7751se.c +- * ++/* + * Copyright (C) 2002 David McCullough <davidm@snapgear.com> + * Copyright (C) 2001 Ian da Silva, Jeremy Siegel + * Based largely on io_se.c. +@@ -11,67 +9,22 @@ + * placeholder code from io_se.c left in with the + * expectation of later SuperIO and PCMCIA access. + */ +- + #include <linux/kernel.h> + #include <linux/types.h> + #include <linux/pci.h> + #include <asm/io.h> + #include <asm/addrspace.h> + +-#include <asm/pci.h> +-#include "../../drivers/pci/pci-sh7751.h" +- + #ifdef CONFIG_SH_SECUREEDGE5410 + unsigned short secureedge5410_ioport; + #endif + +-/* +- * The SnapGear uses the built-in PCI controller (PCIC) +- * of the 7751 processor +- */ +- +-#define PCIIOBR (volatile long *)PCI_REG(SH7751_PCIIOBR) +-#define PCIMBR (volatile long *)PCI_REG(SH7751_PCIMBR) +-#define PCI_IO_AREA SH7751_PCI_IO_BASE +-#define PCI_MEM_AREA SH7751_PCI_CONFIG_BASE +- +- +-#define PCI_IOMAP(adr) (PCI_IO_AREA + (adr & ~SH7751_PCIIOBR_MASK)) +- +- +-#define maybebadio(name,port) \ +- printk("bad PC-like io %s for port 0x%lx at 0x%08x\n", \ +- #name, (port), (__u32) __builtin_return_address(0)) +- +- +-static inline void delay(void) +-{ +- ctrl_inw(0xa0000000); +-} +- +- + static inline volatile __u16 *port2adr(unsigned int port) + { +-#if 0 +- if (port >= 0x2000) +- return (volatile __u16 *) (PA_MRSHPC + (port - 0x2000)); +-#endif +- maybebadio(name,(unsigned long)port); ++ maybebadio((unsigned long)port); + return (volatile __u16*)port; + } + +- +-/* In case someone configures the kernel w/o PCI support: in that */ +-/* scenario, don't ever bother to check for PCI-window addresses */ +- +-/* NOTE: WINDOW CHECK MAY BE A BIT OFF, HIGH PCIBIOS_MIN_IO WRAPS? */ +-#if defined(CONFIG_PCI) +-#define CHECK_SH7751_PCIIO(port) \ +- ((port >= PCIBIOS_MIN_IO) && (port < (PCIBIOS_MIN_IO + SH7751_PCI_IO_SIZE))) +-#else +-#define CHECK_SH7751_PCIIO(port) (0) +-#endif +- + /* + * General outline: remap really low stuff [eventually] to SuperIO, + * stuff in PCI IO space (at or above window at pci.h:PCIBIOS_MIN_IO) +@@ -79,148 +32,106 @@ + * should be way beyond the window, and is used w/o translation for + * compatibility. + */ +- + unsigned char snapgear_inb(unsigned long port) + { + if (PXSEG(port)) + return *(volatile unsigned char *)port; +- else if (CHECK_SH7751_PCIIO(port)) +- return *(volatile unsigned char *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port)) ++ return *(volatile unsigned char *)pci_ioaddr(port); + else +- return (*port2adr(port))&0xff; ++ return (*port2adr(port)) & 0xff; + } + +- + unsigned char snapgear_inb_p(unsigned long port) + { + unsigned char v; + + if (PXSEG(port)) + v = *(volatile unsigned char *)port; +- else if (CHECK_SH7751_PCIIO(port)) +- v = *(volatile unsigned char *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port)) ++ v = *(volatile unsigned char *)pci_ioaddr(port); + else +- v = (*port2adr(port))&0xff; +- delay(); ++ v = (*port2adr(port))&0xff; ++ ctrl_delay(); + return v; + } + +- + unsigned short snapgear_inw(unsigned long port) + { + if (PXSEG(port)) + return *(volatile unsigned short *)port; +- else if (CHECK_SH7751_PCIIO(port)) +- return *(volatile unsigned short *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port)) ++ return *(volatile unsigned short *)pci_ioaddr(port); + else if (port >= 0x2000) + return *port2adr(port); + else +- maybebadio(inw, port); ++ maybebadio(port); + return 0; + } + +- + unsigned int snapgear_inl(unsigned long port) + { + if (PXSEG(port)) + return *(volatile unsigned long *)port; +- else if (CHECK_SH7751_PCIIO(port)) +- return *(volatile unsigned int *)PCI_IOMAP(port); ++ else if (is_pci_ioaddr(port)) ++ return *(volatile unsigned int *)pci_ioaddr(port); + else if (port >= 0x2000) + return *port2adr(port); + else +- maybebadio(inl, port); ++ maybebadio(port); + return 0; + } + +- + void snapgear_outb(unsigned char value, unsigned long port) + { + + if (PXSEG(port)) + *(volatile unsigned char *)port = value; +- else if (CHECK_SH7751_PCIIO(port)) +- *((unsigned char*)PCI_IOMAP(port)) = value; ++ else if (is_pci_ioaddr(port)) ++ *((unsigned char*)pci_ioaddr(port)) = value; + else + *(port2adr(port)) = value; + } + +- + void snapgear_outb_p(unsigned char value, unsigned long port) + { + if (PXSEG(port)) + *(volatile unsigned char *)port = value; +- else if (CHECK_SH7751_PCIIO(port)) +- *((unsigned char*)PCI_IOMAP(port)) = value; ++ else if (is_pci_ioaddr(port)) ++ *((unsigned char*)pci_ioaddr(port)) = value; + else + *(port2adr(port)) = value; +- delay(); ++ ctrl_delay(); + } + +- + void snapgear_outw(unsigned short value, unsigned long port) + { + if (PXSEG(port)) + *(volatile unsigned short *)port = value; +- else if (CHECK_SH7751_PCIIO(port)) +- *((unsigned short *)PCI_IOMAP(port)) = value; ++ else if (is_pci_ioaddr(port)) ++ *((unsigned short *)pci_ioaddr(port)) = value; + else if (port >= 0x2000) + *port2adr(port) = value; + else +- maybebadio(outw, port); ++ maybebadio(port); + } + +- + void snapgear_outl(unsigned int value, unsigned long port) + { + if (PXSEG(port)) + *(volatile unsigned long *)port = value; +- else if (CHECK_SH7751_PCIIO(port)) +- *((unsigned long*)PCI_IOMAP(port)) = value; ++ else if (is_pci_ioaddr(port)) ++ *((unsigned long*)pci_ioaddr(port)) = value; + else +- maybebadio(outl, port); ++ maybebadio(port); + } + + void snapgear_insl(unsigned long port, void *addr, unsigned long count) + { +- maybebadio(insl, port); ++ maybebadio(port); + } + + void snapgear_outsl(unsigned long port, const void *addr, unsigned long count) + { +- maybebadio(outsw, port); +-} +- +-/* Map ISA bus address to the real address. Only for PCMCIA. */ +- +- +-/* ISA page descriptor. */ +-static __u32 sh_isa_memmap[256]; +- +- +-#if 0 +-static int sh_isa_mmap(__u32 start, __u32 length, __u32 offset) +-{ +- int idx; +- +- if (start >= 0x100000 || (start & 0xfff) || (length != 0x1000)) +- return -1; +- +- idx = start >> 12; +- sh_isa_memmap[idx] = 0xb8000000 + (offset &~ 0xfff); +-#if 0 +- printk("sh_isa_mmap: start %x len %x offset %x (idx %x paddr %x)\n", +- start, length, offset, idx, sh_isa_memmap[idx]); +-#endif +- return 0; +-} +-#endif +- +-unsigned long snapgear_isa_port2addr(unsigned long offset) +-{ +- int idx; +- +- idx = (offset >> 12) & 0xff; +- offset &= 0xfff; +- return sh_isa_memmap[idx] + offset; ++ maybebadio(port); + } +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/snapgear/rtc.c linux-2.6.17/arch/sh/boards/snapgear/rtc.c +--- linux-2.6.17-vanilla/arch/sh/boards/snapgear/rtc.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/snapgear/rtc.c 2006-07-12 16:54:20.000000000 +0000 +@@ -17,10 +17,7 @@ + #include <linux/time.h> + #include <linux/rtc.h> + #include <linux/mc146818rtc.h> +- + #include <asm/io.h> +-#include <asm/rtc.h> +-#include <asm/mc146818rtc.h> + + /****************************************************************************/ + +@@ -168,11 +165,11 @@ + } + + if (use_ds1302) { +- rtc_get_time = snapgear_rtc_gettimeofday; +- rtc_set_time = snapgear_rtc_settimeofday; ++ rtc_sh_get_time = snapgear_rtc_gettimeofday; ++ rtc_sh_set_time = snapgear_rtc_settimeofday; + } else { +- rtc_get_time = sh_rtc_gettimeofday; +- rtc_set_time = sh_rtc_settimeofday; ++ rtc_sh_get_time = sh_rtc_gettimeofday; ++ rtc_sh_set_time = sh_rtc_settimeofday; + } + + printk("SnapGear RTC: using %s rtc.\n", use_ds1302 ? "ds1302" : "internal"); +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/snapgear/setup.c linux-2.6.17/arch/sh/boards/snapgear/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/snapgear/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/snapgear/setup.c 2006-07-12 16:54:20.000000000 +0000 +@@ -1,5 +1,4 @@ +-/****************************************************************************/ +-/* ++/* + * linux/arch/sh/boards/snapgear/setup.c + * + * Copyright (C) 2002 David McCullough <davidm@snapgear.com> +@@ -12,8 +11,6 @@ + * Modified for 7751 Solution Engine by + * Ian da Silva and Jeremy Siegel, 2001. + */ +-/****************************************************************************/ +- + #include <linux/config.h> + #include <linux/init.h> + #include <linux/irq.h> +@@ -22,14 +19,13 @@ + #include <linux/delay.h> + #include <linux/module.h> + #include <linux/sched.h> +- + #include <asm/machvec.h> +-#include <asm/mach/io.h> ++#include <asm/snapgear.h> + #include <asm/irq.h> + #include <asm/io.h> ++#include <asm/rtc.h> + #include <asm/cpu/timer.h> + +-extern void (*board_time_init)(void); + extern void secureedge5410_rtc_init(void); + extern void pcibios_init(void); + +@@ -86,91 +82,6 @@ + make_ipr_irq(IRL3_IRQ, IRL3_IPR_ADDR, IRL3_IPR_POS, IRL3_PRIORITY); + } + +-/****************************************************************************/ +-/* +- * Fast poll interrupt simulator. +- */ +- +-/* +- * Leave all of the fast timer/fast poll stuff commented out for now, since +- * it's not clear whether it actually works or not. Since it wasn't being used +- * at all in 2.4, we'll assume it's not sane for 2.6 either.. -- PFM +- */ +-#if 0 +-#define FAST_POLL 1000 +-//#define FAST_POLL_INTR +- +-#define FASTTIMER_IRQ 17 +-#define FASTTIMER_IPR_ADDR INTC_IPRA +-#define FASTTIMER_IPR_POS 2 +-#define FASTTIMER_PRIORITY 3 +- +-#ifdef FAST_POLL_INTR +-#define TMU1_TCR_INIT 0x0020 +-#else +-#define TMU1_TCR_INIT 0 +-#endif +-#define TMU_TSTR_INIT 1 +-#define TMU1_TCR_CALIB 0x0000 +- +- +-#ifdef FAST_POLL_INTR +-static void fast_timer_irq(int irq, void *dev_instance, struct pt_regs *regs) +-{ +- unsigned long timer_status; +- timer_status = ctrl_inw(TMU1_TCR); +- timer_status &= ~0x100; +- ctrl_outw(timer_status, TMU1_TCR); +-} +-#endif +- +-/* +- * return the current ticks on the fast timer +- */ +- +-unsigned long fast_timer_count(void) +-{ +- return(ctrl_inl(TMU1_TCNT)); +-} +- +-/* +- * setup a fast timer for profiling etc etc +- */ +- +-static void setup_fast_timer() +-{ +- unsigned long interval; +- +-#ifdef FAST_POLL_INTR +- interval = (current_cpu_data.module_clock/4 + FAST_POLL/2) / FAST_POLL; +- +- make_ipr_irq(FASTTIMER_IRQ, FASTTIMER_IPR_ADDR, FASTTIMER_IPR_POS, +- FASTTIMER_PRIORITY); +- +- printk("SnapGear: %dHz fast timer on IRQ %d\n",FAST_POLL,FASTTIMER_IRQ); +- +- if (request_irq(FASTTIMER_IRQ, fast_timer_irq, 0, "SnapGear fast timer", +- NULL) != 0) +- printk("%s(%d): request_irq() failed?\n", __FILE__, __LINE__); +-#else +- printk("SnapGear: fast timer running\n",FAST_POLL,FASTTIMER_IRQ); +- interval = 0xffffffff; +-#endif +- +- ctrl_outb(ctrl_inb(TMU_TSTR) & ~0x2, TMU_TSTR); /* disable timer 1 */ +- ctrl_outw(TMU1_TCR_INIT, TMU1_TCR); +- ctrl_outl(interval, TMU1_TCOR); +- ctrl_outl(interval, TMU1_TCNT); +- ctrl_outb(ctrl_inb(TMU_TSTR) | 0x2, TMU_TSTR); /* enable timer 1 */ +- +- printk("Timer count 1 = 0x%x\n", fast_timer_count()); +- udelay(1000); +- printk("Timer count 2 = 0x%x\n", fast_timer_count()); +-} +-#endif +- +-/****************************************************************************/ +- + const char *get_system_type(void) + { + return "SnapGear SecureEdge5410"; +@@ -197,8 +108,6 @@ + .mv_outw_p = snapgear_outw, + .mv_outl_p = snapgear_outl, + +- .mv_isa_port2addr = snapgear_isa_port2addr, +- + .mv_init_irq = init_snapgear_IRQ, + }; + ALIAS_MV(snapgear) +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/CVS/Entries linux-2.6.17/arch/sh/boards/superh/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/superh/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/superh/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++D/microdev//// +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/CVS/Repository linux-2.6.17/arch/sh/boards/superh/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/superh/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/superh/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/superh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/CVS/Root linux-2.6.17/arch/sh/boards/superh/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/superh/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/superh/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/CVS/Entries linux-2.6.17/arch/sh/boards/superh/microdev/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/superh/microdev/CVS/Entries 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1,6 @@ ++/Makefile/1.1/Wed Aug 4 01:04:30 2004// ++/io.c/1.3/Wed Jan 4 17:14:53 2006// ++/irq.c/1.3/Sat Dec 17 23:34:08 2005// ++/led.c/1.1/Wed Aug 4 01:04:30 2004// ++/setup.c/1.7/Tue Jan 3 22:35:50 2006// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/CVS/Repository linux-2.6.17/arch/sh/boards/superh/microdev/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/superh/microdev/CVS/Repository 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/superh/microdev +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/CVS/Root linux-2.6.17/arch/sh/boards/superh/microdev/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/superh/microdev/CVS/Root 2006-07-12 16:54:20.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/setup.c linux-2.6.17/arch/sh/boards/superh/microdev/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/superh/microdev/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/superh/microdev/setup.c 2006-07-12 16:54:21.000000000 +0000 +@@ -398,7 +398,7 @@ + /* enable the appropriate GPIO pins for IDE functionality: + * bit[0] In/Out 1==input; 0==output + * bit[1] Polarity 1==invert; 0==no invert +- * bit[2] Int Enb #1 1==Enable Combined IRQ #1; 0==disable ++ * bit[2] Int Enb #1 1==Enable Combined IRQ #1; 0==disable + * bit[3:4] Function Select 00==original; 01==Alternate Function #1 + */ + SMSC_WRITE_INDEXED(0x00, 0xc2); /* GP42 = nIDE1_OE */ +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/titan/CVS/Entries linux-2.6.17/arch/sh/boards/titan/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/titan/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/titan/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,4 @@ ++/Makefile/1.1/Wed Nov 9 14:56:34 2005/-ko/ ++/io.c/1.6/Sun Feb 5 21:55:29 2006/-ko/ ++/setup.c/1.3/Tue Jan 3 22:51:46 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/titan/CVS/Repository linux-2.6.17/arch/sh/boards/titan/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/titan/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/titan/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/titan +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/titan/CVS/Root linux-2.6.17/arch/sh/boards/titan/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/titan/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/titan/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/titan/Makefile linux-2.6.17/arch/sh/boards/titan/Makefile +--- linux-2.6.17-vanilla/arch/sh/boards/titan/Makefile 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/titan/Makefile 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,5 @@ ++# ++# Makefile for the Nimble Microsystems TITAN specific parts of the kernel ++# ++ ++obj-y := setup.o io.o +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/titan/io.c linux-2.6.17/arch/sh/boards/titan/io.c +--- linux-2.6.17-vanilla/arch/sh/boards/titan/io.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/titan/io.c 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,126 @@ ++/* ++ * I/O routines for Titan ++ */ ++#include <linux/pci.h> ++#include <asm/machvec.h> ++#include <asm/addrspace.h> ++#include <asm/titan.h> ++#include <asm/io.h> ++ ++static inline unsigned int port2adr(unsigned int port) ++{ ++ maybebadio((unsigned long)port); ++ return port; ++} ++ ++u8 titan_inb(unsigned long port) ++{ ++ if (PXSEG(port)) ++ return ctrl_inb(port); ++ else if (is_pci_ioaddr(port)) ++ return ctrl_inb(pci_ioaddr(port)); ++ return ctrl_inw(port2adr(port)) & 0xff; ++} ++ ++u8 titan_inb_p(unsigned long port) ++{ ++ u8 v; ++ ++ if (PXSEG(port)) ++ v = ctrl_inb(port); ++ else if (is_pci_ioaddr(port)) ++ v = ctrl_inb(pci_ioaddr(port)); ++ else ++ v = ctrl_inw(port2adr(port)) & 0xff; ++ ctrl_delay(); ++ return v; ++} ++ ++u16 titan_inw(unsigned long port) ++{ ++ if (PXSEG(port)) ++ return ctrl_inw(port); ++ else if (is_pci_ioaddr(port)) ++ return ctrl_inw(pci_ioaddr(port)); ++ else if (port >= 0x2000) ++ return ctrl_inw(port2adr(port)); ++ else ++ maybebadio(port); ++ return 0; ++} ++ ++u32 titan_inl(unsigned long port) ++{ ++ if (PXSEG(port)) ++ return ctrl_inl(port); ++ else if (is_pci_ioaddr(port)) ++ return ctrl_inl(pci_ioaddr(port)); ++ else if (port >= 0x2000) ++ return ctrl_inw(port2adr(port)); ++ else ++ maybebadio(port); ++ return 0; ++} ++ ++void titan_outb(u8 value, unsigned long port) ++{ ++ if (PXSEG(port)) ++ ctrl_outb(value, port); ++ else if (is_pci_ioaddr(port)) ++ ctrl_outb(value, pci_ioaddr(port)); ++ else ++ ctrl_outw(value, port2adr(port)); ++} ++ ++void titan_outb_p(u8 value, unsigned long port) ++{ ++ if (PXSEG(port)) ++ ctrl_outb(value, port); ++ else if (is_pci_ioaddr(port)) ++ ctrl_outb(value, pci_ioaddr(port)); ++ else ++ ctrl_outw(value, port2adr(port)); ++ ctrl_delay(); ++} ++ ++void titan_outw(u16 value, unsigned long port) ++{ ++ if (PXSEG(port)) ++ ctrl_outw(value, port); ++ else if (is_pci_ioaddr(port)) ++ ctrl_outw(value, pci_ioaddr(port)); ++ else if (port >= 0x2000) ++ ctrl_outw(value, port2adr(port)); ++ else ++ maybebadio(port); ++} ++ ++void titan_outl(u32 value, unsigned long port) ++{ ++ if (PXSEG(port)) ++ ctrl_outl(value, port); ++ else if (is_pci_ioaddr(port)) ++ ctrl_outl(value, pci_ioaddr(port)); ++ else ++ maybebadio(port); ++} ++ ++void titan_insl(unsigned long port, void *dst, unsigned long count) ++{ ++ maybebadio(port); ++} ++ ++void titan_outsl(unsigned long port, const void *src, unsigned long count) ++{ ++ maybebadio(port); ++} ++ ++void __iomem *titan_ioport_map(unsigned long port, unsigned int size) ++{ ++ if (PXSEG(port) || is_pci_memaddr(port)) ++ return (void __iomem *)port; ++ else if (is_pci_ioaddr(port)) ++ return (void __iomem *)pci_ioaddr(port); ++ ++ return (void __iomem *)port2adr(port); ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/titan/setup.c linux-2.6.17/arch/sh/boards/titan/setup.c +--- linux-2.6.17-vanilla/arch/sh/boards/titan/setup.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/titan/setup.c 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,59 @@ ++/* ++ * Setup for Titan ++ */ ++ ++#include <linux/init.h> ++#include <asm/irq.h> ++#include <asm/titan.h> ++#include <asm/io.h> ++ ++extern void __init pcibios_init_platform(void); ++ ++static void __init init_titan_irq(void) ++{ ++ /* enable individual interrupt mode for externals */ ++ ctrl_outw(ctrl_inw(INTC_ICR) | INTC_ICR_IRLM, INTC_ICR); ++ ++ make_ipr_irq( TITAN_IRQ_WAN, IRL0_IPR_ADDR, IRL0_IPR_POS, IRL0_PRIORITY); /* PCIRQ0 */ ++ make_ipr_irq( TITAN_IRQ_LAN, IRL1_IPR_ADDR, IRL1_IPR_POS, IRL1_PRIORITY); /* PCIRQ1 */ ++ make_ipr_irq( TITAN_IRQ_MPCIA, IRL2_IPR_ADDR, IRL2_IPR_POS, IRL2_PRIORITY); /* PCIRQ2 */ ++ make_ipr_irq( TITAN_IRQ_USB, IRL3_IPR_ADDR, IRL3_IPR_POS, IRL3_PRIORITY); /* PCIRQ3 */ ++} ++ ++const char *get_system_type(void) ++{ ++ return "Titan"; ++} ++ ++int __init platform_setup(void) ++{ ++ printk("%s Platform Setup\n", get_system_type()); ++ return 0; ++} ++ ++struct sh_machine_vector mv_titan __initmv = { ++ .mv_nr_irqs = NR_IRQS, ++ ++ .mv_inb = titan_inb, ++ .mv_inw = titan_inw, ++ .mv_inl = titan_inl, ++ .mv_outb = titan_outb, ++ .mv_outw = titan_outw, ++ .mv_outl = titan_outl, ++ ++ .mv_inb_p = titan_inb_p, ++ .mv_inw_p = titan_inw, ++ .mv_inl_p = titan_inl, ++ .mv_outb_p = titan_outb_p, ++ .mv_outw_p = titan_outw, ++ .mv_outl_p = titan_outl, ++ ++ .mv_insl = titan_insl, ++ .mv_outsl = titan_outsl, ++ ++ .mv_ioport_map = titan_ioport_map, ++ ++ .mv_init_irq = init_titan_irq, ++ .mv_init_pci = pcibios_init_platform, ++}; ++ALIAS_MV(titan) +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/unknown/CVS/Entries linux-2.6.17/arch/sh/boards/unknown/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boards/unknown/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/unknown/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,3 @@ ++/Makefile/1.5/Tue Nov 8 19:55:58 2005// ++/setup.c/1.3/Tue Nov 8 19:55:58 2005// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/unknown/CVS/Repository linux-2.6.17/arch/sh/boards/unknown/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boards/unknown/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/unknown/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boards/unknown +diff -ruN linux-2.6.17-vanilla/arch/sh/boards/unknown/CVS/Root linux-2.6.17/arch/sh/boards/unknown/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boards/unknown/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boards/unknown/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boot/.cvsignore linux-2.6.17/arch/sh/boot/.cvsignore +--- linux-2.6.17-vanilla/arch/sh/boot/.cvsignore 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boot/.cvsignore 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++zImage +diff -ruN linux-2.6.17-vanilla/arch/sh/boot/CVS/Entries linux-2.6.17/arch/sh/boot/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boot/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boot/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,3 @@ ++/.cvsignore/1.1.1.1/Mon Oct 15 20:44:47 2001// ++/Makefile/1.9/Wed Jun 16 15:21:46 2004/-ko/ ++D/compressed//// +diff -ruN linux-2.6.17-vanilla/arch/sh/boot/CVS/Repository linux-2.6.17/arch/sh/boot/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boot/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boot/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boot +diff -ruN linux-2.6.17-vanilla/arch/sh/boot/CVS/Root linux-2.6.17/arch/sh/boot/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boot/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boot/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/boot/compressed/.cvsignore linux-2.6.17/arch/sh/boot/compressed/.cvsignore +--- linux-2.6.17-vanilla/arch/sh/boot/compressed/.cvsignore 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boot/compressed/.cvsignore 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,3 @@ ++vmlinux ++vmlinux.bin ++vmlinux.bin.gz +diff -ruN linux-2.6.17-vanilla/arch/sh/boot/compressed/CVS/Entries linux-2.6.17/arch/sh/boot/compressed/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/boot/compressed/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boot/compressed/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,6 @@ ++/.cvsignore/1.2/Sat May 10 03:22:05 2003// ++/Makefile/1.13/Mon Oct 25 10:41:02 2004// ++/head.S/1.3/Mon Aug 11 07:14:13 2003/-ko/ ++/misc.c/1.4/Mon May 31 21:20:29 2004/-ko/ ++/vmlinux.scr/1.1/Sat May 10 03:22:05 2003// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/boot/compressed/CVS/Repository linux-2.6.17/arch/sh/boot/compressed/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/boot/compressed/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boot/compressed/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/boot/compressed +diff -ruN linux-2.6.17-vanilla/arch/sh/boot/compressed/CVS/Root linux-2.6.17/arch/sh/boot/compressed/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/boot/compressed/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/boot/compressed/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/CVS/Entries linux-2.6.17/arch/sh/cchips/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/cchips/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,3 @@ ++/Kconfig/1.5/Wed Jan 4 16:34:31 2006// ++D/hd6446x//// ++D/voyagergx//// +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/CVS/Repository linux-2.6.17/arch/sh/cchips/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/cchips/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/cchips +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/CVS/Root linux-2.6.17/arch/sh/cchips/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/cchips/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/Kconfig linux-2.6.17/arch/sh/cchips/Kconfig +--- linux-2.6.17-vanilla/arch/sh/cchips/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/Kconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -65,6 +65,11 @@ + + Do not change this unless you know what you are doing. + ++config HD64461_IOBASE ++ hex "HD64461 start address" ++ depends on HD64461 ++ default "0xb0000000" ++ + config HD64461_ENABLER + bool "HD64461 PCMCIA enabler" + depends on HD64461 +@@ -73,7 +78,6 @@ + via the HD64461 companion chip. + Otherwise, say N. + +- + config HD64465_IOBASE + hex "HD64465 start address" + depends on HD64465 +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/CVS/Entries linux-2.6.17/arch/sh/cchips/hd6446x/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/hd6446x/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,2 @@ ++D/hd64461//// ++D/hd64465//// +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/CVS/Repository linux-2.6.17/arch/sh/cchips/hd6446x/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/hd6446x/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/cchips/hd6446x +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/CVS/Root linux-2.6.17/arch/sh/cchips/hd6446x/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/hd6446x/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/CVS/Entries linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,4 @@ ++/Makefile/1.4/Thu Mar 11 18:08:03 2004// ++/io.c/1.8/Sun Feb 5 21:55:29 2006// ++/setup.c/1.7/Wed Jan 4 14:53:18 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/CVS/Repository linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/cchips/hd6446x/hd64461 +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/CVS/Root linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/io.c linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/io.c +--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/io.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/io.c 2006-07-12 16:54:21.000000000 +0000 +@@ -1,12 +1,12 @@ + /* +- * $Id: io.c,v 1.6 2004/03/16 00:07:50 lethal Exp $ ++ * $Id: io.c,v 1.8 2006/02/05 21:55:29 lethal Exp $ + * Copyright (C) 2000 YAEGASHI Takeshi + * Typical I/O routines for HD64461 system. + */ + + #include <linux/config.h> + #include <asm/io.h> +-#include <asm/hd64461/hd64461.h> ++#include <asm/hd64461.h> + + #define MEM_BASE (CONFIG_HD64461_IOBASE - HD64461_STBCR) + +@@ -55,11 +55,6 @@ + return 0xa0000000 + (port & 0x1fffffff); + } + +-static inline void delay(void) +-{ +- ctrl_inw(0xa0000000); +-} +- + unsigned char hd64461_inb(unsigned long port) + { + return *(volatile unsigned char*)PORT2ADDR(port); +@@ -68,7 +63,7 @@ + unsigned char hd64461_inb_p(unsigned long port) + { + unsigned long v = *(volatile unsigned char*)PORT2ADDR(port); +- delay(); ++ ctrl_delay(); + return v; + } + +@@ -90,7 +85,7 @@ + void hd64461_outb_p(unsigned char b, unsigned long port) + { + *(volatile unsigned char*)PORT2ADDR(port) = b; +- delay(); ++ ctrl_delay(); + } + + void hd64461_outw(unsigned short b, unsigned long port) +@@ -145,13 +140,13 @@ + while(count--) *addr=*buf++; + } + +-unsigned short hd64461_readw(unsigned long addr) ++unsigned short hd64461_readw(void __iomem *addr) + { +- return *(volatile unsigned short*)(MEM_BASE+addr); ++ return ctrl_inw(MEM_BASE+(unsigned long __force)addr); + } + +-void hd64461_writew(unsigned short b, unsigned long addr) ++void hd64461_writew(unsigned short b, void __iomem *addr) + { +- *(volatile unsigned short*)(MEM_BASE+addr) = b; ++ ctrl_outw(b, MEM_BASE+(unsigned long __force)addr); + } + +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/setup.c linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/setup.c +--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64461/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64461/setup.c 2006-07-12 16:54:21.000000000 +0000 +@@ -15,8 +15,7 @@ + + #include <asm/io.h> + #include <asm/irq.h> +- +-#include <asm/hd64461/hd64461.h> ++#include <asm/hd64461.h> + + static void disable_hd64461_irq(unsigned int irq) + { +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64465/CVS/Entries linux-2.6.17/arch/sh/cchips/hd6446x/hd64465/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64465/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64465/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,5 @@ ++/Makefile/1.4/Thu Mar 11 18:08:03 2004// ++/gpio.c/1.4/Mon May 19 22:24:18 2003// ++/io.c/1.5/Tue Mar 8 06:46:56 2005/-ko/ ++/setup.c/1.5/Sun Aug 15 16:59:26 2004/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64465/CVS/Repository linux-2.6.17/arch/sh/cchips/hd6446x/hd64465/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64465/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64465/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/cchips/hd6446x/hd64465 +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64465/CVS/Root linux-2.6.17/arch/sh/cchips/hd6446x/hd64465/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/cchips/hd6446x/hd64465/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/hd6446x/hd64465/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/CVS/Entries linux-2.6.17/arch/sh/cchips/voyagergx/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/voyagergx/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,5 @@ ++/Makefile/1.2/Tue May 31 14:33:28 2005/-ko/ ++/consistent.c/1.5/Fri Jan 27 16:11:52 2006/-ko/ ++/irq.c/1.5/Wed Feb 8 22:08:10 2006/-ko/ ++/setup.c/1.2/Wed Feb 8 22:08:10 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/CVS/Repository linux-2.6.17/arch/sh/cchips/voyagergx/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/voyagergx/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/cchips/voyagergx +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/CVS/Root linux-2.6.17/arch/sh/cchips/voyagergx/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/voyagergx/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/Makefile linux-2.6.17/arch/sh/cchips/voyagergx/Makefile +--- linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/voyagergx/Makefile 2006-07-12 16:54:21.000000000 +0000 +@@ -4,5 +4,5 @@ + + obj-y := irq.o setup.o + +-obj-$(CONFIG_USB_OHCI_HCD) += consistent.o ++obj-$(CONFIG_USB_SM501) += consistent.o + +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/irq.c linux-2.6.17/arch/sh/cchips/voyagergx/irq.c +--- linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/irq.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/voyagergx/irq.c 2006-07-12 16:54:21.000000000 +0000 +@@ -33,8 +33,7 @@ + + #include <asm/io.h> + #include <asm/irq.h> +-#include <asm/rts7751r2d/rts7751r2d.h> +-#include <asm/rts7751r2d/voyagergx_reg.h> ++#include <asm/mach/voyagergx_reg.h> + + static void disable_voyagergx_irq(unsigned int irq) + { +diff -ruN linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/setup.c linux-2.6.17/arch/sh/cchips/voyagergx/setup.c +--- linux-2.6.17-vanilla/arch/sh/cchips/voyagergx/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/cchips/voyagergx/setup.c 2006-07-12 16:54:21.000000000 +0000 +@@ -13,7 +13,7 @@ + #include <linux/init.h> + #include <linux/module.h> + #include <asm/io.h> +-#include <asm/rts7751r2d/voyagergx_reg.h> ++#include <asm/mach/voyagergx_reg.h> + + static int __init setup_voyagergx(void) + { +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/CVS/Entries linux-2.6.17/arch/sh/configs/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/configs/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,19 @@ ++/adx_defconfig/1.3/Wed Oct 5 21:34:14 2005// ++/cqreek_defconfig/1.3/Wed Oct 5 21:34:14 2005// ++/dreamcast_defconfig/1.8/Wed Jan 4 19:03:16 2006// ++/hs7751rvoip_defconfig/1.4/Wed Jan 4 19:03:16 2006// ++/landisk_defconfig/1.4/Sun Dec 18 00:20:37 2005/-ko/ ++/microdev_defconfig/1.7/Wed Jan 4 19:03:16 2006/-ko/ ++/rts7751r2d_defconfig/1.6/Wed Jan 4 19:03:16 2006/-ko/ ++/se7300_defconfig/1.5/Wed Jan 4 19:03:16 2006// ++/se73180_defconfig/1.7/Sun Jan 8 12:22:57 2006// ++/se7705_defconfig/1.4/Wed Jan 4 19:03:16 2006/-ko/ ++/se7750_defconfig/1.4/Wed Jan 4 19:03:16 2006/-ko/ ++/se7751_defconfig/1.4/Wed Jan 4 19:03:16 2006// ++/sh03_defconfig/1.4/Wed Jan 4 19:03:16 2006/-ko/ ++/snapgear_defconfig/1.5/Wed Jan 4 19:03:16 2006// ++/systemh_defconfig/1.4/Wed Jan 4 19:03:16 2006// ++/r7780rp_defconfig/1.2/Wed Jul 5 14:50:34 2006/-ko/ ++/hp6xx_defconfig/1.8/Thu Jul 6 12:38:07 2006/-ko/ ++/titan_defconfig/1.3/Thu Jul 6 18:40:37 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/CVS/Repository linux-2.6.17/arch/sh/configs/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/configs/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/configs +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/CVS/Root linux-2.6.17/arch/sh/configs/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/configs/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/adx_defconfig linux-2.6.17/arch/sh/configs/adx_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/adx_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/adx_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,7 +1,7 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.11-sh +-# Wed Mar 2 15:09:26 2005 ++# Linux kernel version: 2.6.13-sh ++# Thu Oct 6 00:20:11 2005 + # + CONFIG_SUPERH=y + CONFIG_UID16=y +@@ -16,6 +16,7 @@ + CONFIG_EXPERIMENTAL=y + CONFIG_CLEAN_COMPILE=y + CONFIG_BROKEN_ON_SMP=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 + + # + # General setup +@@ -25,22 +26,23 @@ + # CONFIG_SYSVIPC is not set + # CONFIG_BSD_PROCESS_ACCT is not set + # CONFIG_SYSCTL is not set +-# CONFIG_AUDIT is not set +-CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_HOTPLUG is not set + # CONFIG_IKCONFIG is not set + # CONFIG_EMBEDDED is not set + CONFIG_KALLSYMS=y + # CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y + CONFIG_FUTEX=y + CONFIG_EPOLL=y +-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_SHMEM=y + CONFIG_CC_ALIGN_FUNCTIONS=0 + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 + # CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 + + # + # Loadable module support +@@ -57,9 +59,7 @@ + # CONFIG_SH_7751_SYSTEMH is not set + # CONFIG_SH_STB1_HARP is not set + # CONFIG_SH_STB1_OVERDRIVE is not set +-# CONFIG_SH_HP620 is not set +-# CONFIG_SH_HP680 is not set +-# CONFIG_SH_HP690 is not set ++# CONFIG_SH_HP6XX is not set + # CONFIG_SH_CQREEK is not set + # CONFIG_SH_DMIDA is not set + # CONFIG_SH_EC3104 is not set +@@ -76,46 +76,90 @@ + # CONFIG_SH_RTS7751R2D is not set + # CONFIG_SH_EDOSK7705 is not set + # CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set + # CONFIG_SH_UNKNOWN is not set +-# CONFIG_CPU_SH2 is not set +-# CONFIG_CPU_SH3 is not set ++ ++# ++# Processor selection ++# + CONFIG_CPU_SH4=y ++ ++# ++# SH-2 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7300 is not set + # CONFIG_CPU_SUBTYPE_SH7705 is not set + # CONFIG_CPU_SUBTYPE_SH7707 is not set + # CONFIG_CPU_SUBTYPE_SH7708 is not set + # CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# + CONFIG_CPU_SUBTYPE_SH7750=y ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set + # CONFIG_CPU_SUBTYPE_SH7751 is not set ++# CONFIG_CPU_SUBTYPE_SH7751R is not set + # CONFIG_CPU_SUBTYPE_SH7760 is not set +-# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# + # CONFIG_CPU_SUBTYPE_ST40STB1 is not set + # CONFIG_CPU_SUBTYPE_ST40GX1 is not set +-# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# + CONFIG_MMU=y +-# CONFIG_CMDLINE_BOOL is not set ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set + CONFIG_MEMORY_START=0x08000000 + CONFIG_MEMORY_SIZE=0x00400000 +-CONFIG_MEMORY_SET=y +-# CONFIG_MEMORY_OVERRIDE is not set + CONFIG_CF_ENABLER=y + # CONFIG_CF_AREA5 is not set + CONFIG_CF_AREA6=y + CONFIG_CF_BASE_ADDR=0xb8000000 ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y + CONFIG_SH_RTC=y + CONFIG_SH_FPU=y +-CONFIG_ZERO_PAGE_OFFSET=0x00001000 +-CONFIG_BOOT_LINK_OFFSET=0x00800000 +-CONFIG_CPU_LITTLE_ENDIAN=y +-# CONFIG_PREEMPT is not set +-# CONFIG_UBC_WAKEUP is not set +-# CONFIG_SH_WRITETHROUGH is not set +-# CONFIG_SH_OCRAM is not set + # CONFIG_SH_STORE_QUEUES is not set +-# CONFIG_SMP is not set +-CONFIG_SH_PCLK_CALC=y +-CONFIG_SH_PCLK_FREQ=50000000 ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++# CONFIG_SH_PCLK_FREQ_BOOL is not set + + # + # CPU Frequency scaling +@@ -133,18 +177,29 @@ + # CONFIG_HD6446X_SERIES is not set + + # +-# Bus options (PCI, PCMCIA, EISA, MCA, ISA) ++# Kernel features + # +-# CONFIG_PCI is not set ++# CONFIG_KEXEC is not set ++# CONFIG_PREEMPT is not set ++# CONFIG_SMP is not set + + # +-# PCCARD (PCMCIA/CardBus) support ++# Boot options + # +-# CONFIG_PCCARD is not set ++CONFIG_ZERO_PAGE_OFFSET=0x00001000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++# CONFIG_CMDLINE_BOOL is not set ++ ++# ++# Bus options ++# ++# CONFIG_PCI is not set + + # +-# PC-card bridges ++# PCCARD (PCMCIA/CardBus) support + # ++# CONFIG_PCCARD is not set + + # + # PCI Hotplug Support +@@ -158,9 +213,9 @@ + # CONFIG_BINFMT_MISC is not set + + # +-# SH initrd options ++# Networking + # +-# CONFIG_EMBEDDED_RAMDISK is not set ++# CONFIG_NET is not set + + # + # Device Drivers +@@ -250,6 +305,7 @@ + # + # Fusion MPT device support + # ++# CONFIG_FUSION is not set + + # + # IEEE 1394 (FireWire) support +@@ -260,9 +316,8 @@ + # + + # +-# Networking support ++# Network device support + # +-# CONFIG_NET is not set + # CONFIG_NETPOLL is not set + # CONFIG_NET_POLL_CONTROLLER is not set + +@@ -293,18 +348,6 @@ + # CONFIG_INPUT_EVBUG is not set + + # +-# Input I/O drivers +-# +-# CONFIG_GAMEPORT is not set +-CONFIG_SOUND_GAMEPORT=y +-CONFIG_SERIO=y +-CONFIG_SERIO_I8042=y +-CONFIG_SERIO_SERPORT=y +-# CONFIG_SERIO_CT82C710 is not set +-CONFIG_SERIO_LIBPS2=y +-# CONFIG_SERIO_RAW is not set +- +-# + # Input Device Drivers + # + CONFIG_INPUT_KEYBOARD=y +@@ -322,6 +365,16 @@ + # CONFIG_INPUT_MISC is not set + + # ++# Hardware I/O ports ++# ++CONFIG_SERIO=y ++CONFIG_SERIO_I8042=y ++CONFIG_SERIO_SERPORT=y ++CONFIG_SERIO_LIBPS2=y ++# CONFIG_SERIO_RAW is not set ++# CONFIG_GAMEPORT is not set ++ ++# + # Character devices + # + CONFIG_VT=y +@@ -359,13 +412,17 @@ + # + # Ftape, the floppy tape device driver + # +-# CONFIG_DRM is not set + # CONFIG_RAW_DRIVER is not set + + # ++# TPM devices ++# ++ ++# + # I2C support + # + # CONFIG_I2C is not set ++# CONFIG_I2C_SENSOR is not set + + # + # Dallas's 1-wire bus +@@ -373,6 +430,12 @@ + # CONFIG_W1 is not set + + # ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# + # Misc devices + # + +@@ -393,7 +456,6 @@ + # + # Console display driver support + # +-CONFIG_VGA_CONSOLE=y + CONFIG_DUMMY_CONSOLE=y + + # +@@ -408,10 +470,6 @@ + # CONFIG_USB_ARCH_HAS_OHCI is not set + + # +-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information +-# +- +-# + # USB Gadget Support + # + # CONFIG_USB_GADGET is not set +@@ -424,17 +482,22 @@ + # + # InfiniBand support + # +-# CONFIG_INFINIBAND is not set ++ ++# ++# SN Devices ++# + + # + # File systems + # + CONFIG_EXT2_FS=y + # CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set + # CONFIG_EXT3_FS is not set + # CONFIG_JBD is not set + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set ++# CONFIG_FS_POSIX_ACL is not set + + # + # XFS support +@@ -442,6 +505,7 @@ + # CONFIG_XFS_FS is not set + # CONFIG_MINIX_FS is not set + # CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y + # CONFIG_QUOTA is not set + CONFIG_DNOTIFY=y + # CONFIG_AUTOFS_FS is not set +@@ -466,7 +530,6 @@ + CONFIG_PROC_FS=y + # CONFIG_PROC_KCORE is not set + CONFIG_SYSFS=y +-# CONFIG_DEVFS_FS is not set + # CONFIG_DEVPTS_FS_XATTR is not set + # CONFIG_TMPFS is not set + # CONFIG_HUGETLBFS is not set +@@ -509,7 +572,9 @@ + # + # Kernel hacking + # ++# CONFIG_PRINTK_TIME is not set + # CONFIG_DEBUG_KERNEL is not set ++CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_FRAME_POINTER is not set + CONFIG_SH_STANDARD_BIOS=y + # CONFIG_EARLY_SCIF_CONSOLE is not set +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/cqreek_defconfig linux-2.6.17/arch/sh/configs/cqreek_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/cqreek_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/cqreek_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,7 +1,7 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.11-sh +-# Wed Mar 2 15:09:38 2005 ++# Linux kernel version: 2.6.13-sh ++# Thu Oct 6 00:20:14 2005 + # + CONFIG_SUPERH=y + CONFIG_UID16=y +@@ -16,6 +16,7 @@ + CONFIG_EXPERIMENTAL=y + CONFIG_CLEAN_COMPILE=y + CONFIG_BROKEN_ON_SMP=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 + + # + # General setup +@@ -25,22 +26,23 @@ + # CONFIG_SYSVIPC is not set + # CONFIG_BSD_PROCESS_ACCT is not set + # CONFIG_SYSCTL is not set +-# CONFIG_AUDIT is not set +-CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_HOTPLUG is not set + # CONFIG_IKCONFIG is not set + # CONFIG_EMBEDDED is not set + CONFIG_KALLSYMS=y + # CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y + CONFIG_FUTEX=y + CONFIG_EPOLL=y +-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_SHMEM=y + CONFIG_CC_ALIGN_FUNCTIONS=0 + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 + # CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 + + # + # Loadable module support +@@ -57,9 +59,7 @@ + # CONFIG_SH_7751_SYSTEMH is not set + # CONFIG_SH_STB1_HARP is not set + # CONFIG_SH_STB1_OVERDRIVE is not set +-# CONFIG_SH_HP620 is not set +-# CONFIG_SH_HP680 is not set +-# CONFIG_SH_HP690 is not set ++# CONFIG_SH_HP6XX is not set + CONFIG_SH_CQREEK=y + # CONFIG_SH_DMIDA is not set + # CONFIG_SH_EC3104 is not set +@@ -76,41 +76,86 @@ + # CONFIG_SH_RTS7751R2D is not set + # CONFIG_SH_EDOSK7705 is not set + # CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set + # CONFIG_SH_UNKNOWN is not set +-# CONFIG_CPU_SH2 is not set ++ ++# ++# Processor selection ++# + CONFIG_CPU_SH3=y +-# CONFIG_CPU_SH4 is not set ++ ++# ++# SH-2 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7300 is not set + # CONFIG_CPU_SUBTYPE_SH7705 is not set + # CONFIG_CPU_SUBTYPE_SH7707 is not set + CONFIG_CPU_SUBTYPE_SH7708=y + # CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7750 is not set ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set + # CONFIG_CPU_SUBTYPE_SH7751 is not set ++# CONFIG_CPU_SUBTYPE_SH7751R is not set + # CONFIG_CPU_SUBTYPE_SH7760 is not set +-# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# + # CONFIG_CPU_SUBTYPE_ST40STB1 is not set + # CONFIG_CPU_SUBTYPE_ST40GX1 is not set +-# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# + CONFIG_MMU=y +-# CONFIG_CMDLINE_BOOL is not set ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set + CONFIG_MEMORY_START=0x0c000000 + CONFIG_MEMORY_SIZE=0x00400000 +-# CONFIG_MEMORY_OVERRIDE is not set ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y + CONFIG_SH_RTC=y + CONFIG_SH_DSP=y + CONFIG_SH_ADC=y +-CONFIG_ZERO_PAGE_OFFSET=0x00001000 +-CONFIG_BOOT_LINK_OFFSET=0x00800000 +-CONFIG_CPU_LITTLE_ENDIAN=y +-# CONFIG_PREEMPT is not set +-# CONFIG_UBC_WAKEUP is not set +-# CONFIG_SH_WRITETHROUGH is not set +-# CONFIG_SH_OCRAM is not set +-# CONFIG_SMP is not set +-CONFIG_SH_PCLK_CALC=y +-CONFIG_SH_PCLK_FREQ=1193182 ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++# CONFIG_SH_PCLK_FREQ_BOOL is not set + + # + # CPU Frequency scaling +@@ -128,18 +173,29 @@ + # CONFIG_HD6446X_SERIES is not set + + # +-# Bus options (PCI, PCMCIA, EISA, MCA, ISA) ++# Kernel features + # +-# CONFIG_PCI is not set ++# CONFIG_KEXEC is not set ++# CONFIG_PREEMPT is not set ++# CONFIG_SMP is not set + + # +-# PCCARD (PCMCIA/CardBus) support ++# Boot options + # +-# CONFIG_PCCARD is not set ++CONFIG_ZERO_PAGE_OFFSET=0x00001000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++# CONFIG_CMDLINE_BOOL is not set ++ ++# ++# Bus options ++# ++# CONFIG_PCI is not set + + # +-# PC-card bridges ++# PCCARD (PCMCIA/CardBus) support + # ++# CONFIG_PCCARD is not set + + # + # PCI Hotplug Support +@@ -153,9 +209,9 @@ + # CONFIG_BINFMT_MISC is not set + + # +-# SH initrd options ++# Networking + # +-# CONFIG_EMBEDDED_RAMDISK is not set ++# CONFIG_NET is not set + + # + # Device Drivers +@@ -245,6 +301,7 @@ + # + # Fusion MPT device support + # ++# CONFIG_FUSION is not set + + # + # IEEE 1394 (FireWire) support +@@ -255,9 +312,8 @@ + # + + # +-# Networking support ++# Network device support + # +-# CONFIG_NET is not set + # CONFIG_NETPOLL is not set + # CONFIG_NET_POLL_CONTROLLER is not set + +@@ -288,18 +344,6 @@ + # CONFIG_INPUT_EVBUG is not set + + # +-# Input I/O drivers +-# +-# CONFIG_GAMEPORT is not set +-CONFIG_SOUND_GAMEPORT=y +-CONFIG_SERIO=y +-CONFIG_SERIO_I8042=y +-CONFIG_SERIO_SERPORT=y +-# CONFIG_SERIO_CT82C710 is not set +-CONFIG_SERIO_LIBPS2=y +-# CONFIG_SERIO_RAW is not set +- +-# + # Input Device Drivers + # + CONFIG_INPUT_KEYBOARD=y +@@ -317,6 +361,16 @@ + # CONFIG_INPUT_MISC is not set + + # ++# Hardware I/O ports ++# ++CONFIG_SERIO=y ++CONFIG_SERIO_I8042=y ++CONFIG_SERIO_SERPORT=y ++CONFIG_SERIO_LIBPS2=y ++# CONFIG_SERIO_RAW is not set ++# CONFIG_GAMEPORT is not set ++ ++# + # Character devices + # + CONFIG_VT=y +@@ -354,13 +408,17 @@ + # + # Ftape, the floppy tape device driver + # +-# CONFIG_DRM is not set + # CONFIG_RAW_DRIVER is not set + + # ++# TPM devices ++# ++ ++# + # I2C support + # + # CONFIG_I2C is not set ++# CONFIG_I2C_SENSOR is not set + + # + # Dallas's 1-wire bus +@@ -368,6 +426,12 @@ + # CONFIG_W1 is not set + + # ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# + # Misc devices + # + +@@ -388,7 +452,6 @@ + # + # Console display driver support + # +-CONFIG_VGA_CONSOLE=y + CONFIG_DUMMY_CONSOLE=y + + # +@@ -403,10 +466,6 @@ + # CONFIG_USB_ARCH_HAS_OHCI is not set + + # +-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information +-# +- +-# + # USB Gadget Support + # + # CONFIG_USB_GADGET is not set +@@ -419,17 +478,22 @@ + # + # InfiniBand support + # +-# CONFIG_INFINIBAND is not set ++ ++# ++# SN Devices ++# + + # + # File systems + # + CONFIG_EXT2_FS=y + # CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set + # CONFIG_EXT3_FS is not set + # CONFIG_JBD is not set + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set ++# CONFIG_FS_POSIX_ACL is not set + + # + # XFS support +@@ -437,6 +501,7 @@ + # CONFIG_XFS_FS is not set + # CONFIG_MINIX_FS is not set + # CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y + # CONFIG_QUOTA is not set + CONFIG_DNOTIFY=y + # CONFIG_AUTOFS_FS is not set +@@ -461,7 +526,6 @@ + CONFIG_PROC_FS=y + # CONFIG_PROC_KCORE is not set + CONFIG_SYSFS=y +-# CONFIG_DEVFS_FS is not set + # CONFIG_DEVPTS_FS_XATTR is not set + # CONFIG_TMPFS is not set + # CONFIG_HUGETLBFS is not set +@@ -504,7 +568,9 @@ + # + # Kernel hacking + # ++# CONFIG_PRINTK_TIME is not set + # CONFIG_DEBUG_KERNEL is not set ++CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_FRAME_POINTER is not set + CONFIG_SH_STANDARD_BIOS=y + # CONFIG_EARLY_PRINTK is not set +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/dreamcast_defconfig linux-2.6.17/arch/sh/configs/dreamcast_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/dreamcast_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/dreamcast_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,7 +1,7 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.11-sh +-# Wed Mar 2 15:09:40 2005 ++# Linux kernel version: 2.6.15-sh ++# Wed Jan 4 14:20:29 2006 + # + CONFIG_SUPERH=y + CONFIG_UID16=y +@@ -17,11 +17,13 @@ + CONFIG_CLEAN_COMPILE=y + CONFIG_BROKEN_ON_SMP=y + CONFIG_LOCK_KERNEL=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 + + # + # General setup + # + CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y + CONFIG_SWAP=y + CONFIG_SYSVIPC=y + # CONFIG_POSIX_MQUEUE is not set +@@ -29,22 +31,26 @@ + # CONFIG_BSD_PROCESS_ACCT_V3 is not set + CONFIG_SYSCTL=y + # CONFIG_AUDIT is not set +-CONFIG_LOG_BUF_SHIFT=14 + CONFIG_HOTPLUG=y + CONFIG_KOBJECT_UEVENT=y + # CONFIG_IKCONFIG is not set ++CONFIG_INITRAMFS_SOURCE="" ++CONFIG_CC_OPTIMIZE_FOR_SIZE=y + CONFIG_EMBEDDED=y + CONFIG_KALLSYMS=y + # CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y + CONFIG_FUTEX=y + CONFIG_EPOLL=y +-CONFIG_CC_OPTIMIZE_FOR_SIZE=y + CONFIG_SHMEM=y + CONFIG_CC_ALIGN_FUNCTIONS=0 + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 + # CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 + + # + # Loadable module support +@@ -58,6 +64,24 @@ + CONFIG_KMOD=y + + # ++# Block layer ++# ++# CONFIG_LBD is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++CONFIG_IOSCHED_AS=y ++CONFIG_IOSCHED_DEADLINE=y ++CONFIG_IOSCHED_CFQ=y ++CONFIG_DEFAULT_AS=y ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++# CONFIG_DEFAULT_NOOP is not set ++CONFIG_DEFAULT_IOSCHED="anticipatory" ++ ++# + # System type + # + # CONFIG_SH_SOLUTION_ENGINE is not set +@@ -67,9 +91,7 @@ + # CONFIG_SH_7751_SYSTEMH is not set + # CONFIG_SH_STB1_HARP is not set + # CONFIG_SH_STB1_OVERDRIVE is not set +-# CONFIG_SH_HP620 is not set +-# CONFIG_SH_HP680 is not set +-# CONFIG_SH_HP690 is not set ++# CONFIG_SH_HP6XX is not set + # CONFIG_SH_CQREEK is not set + # CONFIG_SH_DMIDA is not set + # CONFIG_SH_EC3104 is not set +@@ -86,48 +108,97 @@ + # CONFIG_SH_RTS7751R2D is not set + # CONFIG_SH_EDOSK7705 is not set + # CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set ++# CONFIG_SH_TITAN is not set + # CONFIG_SH_UNKNOWN is not set +-# CONFIG_CPU_SH2 is not set +-# CONFIG_CPU_SH3 is not set ++ ++# ++# Processor selection ++# + CONFIG_CPU_SH4=y ++ ++# ++# SH-2 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7300 is not set + # CONFIG_CPU_SUBTYPE_SH7705 is not set + # CONFIG_CPU_SUBTYPE_SH7707 is not set + # CONFIG_CPU_SUBTYPE_SH7708 is not set + # CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# + CONFIG_CPU_SUBTYPE_SH7750=y ++CONFIG_CPU_SUBTYPE_SH7091=y ++CONFIG_CPU_SUBTYPE_SH7750R=y ++# CONFIG_CPU_SUBTYPE_SH7750S is not set + # CONFIG_CPU_SUBTYPE_SH7751 is not set ++# CONFIG_CPU_SUBTYPE_SH7751R is not set + # CONFIG_CPU_SUBTYPE_SH7760 is not set +-# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# + # CONFIG_CPU_SUBTYPE_ST40STB1 is not set + # CONFIG_CPU_SUBTYPE_ST40GX1 is not set +-# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# + CONFIG_MMU=y + CONFIG_HUGETLB_PAGE_SIZE_64K=y + # CONFIG_HUGETLB_PAGE_SIZE_1MB is not set +-# CONFIG_CMDLINE_BOOL is not set ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set + CONFIG_MEMORY_START=0x0c000000 + CONFIG_MEMORY_SIZE=0x01000000 +-CONFIG_MEMORY_SET=y +-# CONFIG_MEMORY_OVERRIDE is not set +-CONFIG_SH_FPU=y +-CONFIG_ZERO_PAGE_OFFSET=0x00001000 +-CONFIG_BOOT_LINK_OFFSET=0x00800000 ++ ++# ++# Processor features ++# + CONFIG_CPU_LITTLE_ENDIAN=y +-CONFIG_PREEMPT=y +-# CONFIG_UBC_WAKEUP is not set +-# CONFIG_SH_WRITETHROUGH is not set +-CONFIG_SH_OCRAM=y ++CONFIG_SH_FPU=y + CONFIG_SH_STORE_QUEUES=y +-# CONFIG_SMP is not set +-CONFIG_SH_PCLK_CALC=y ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++CONFIG_SH_PCLK_FREQ_BOOL=y + CONFIG_SH_PCLK_FREQ=49876504 + + # + # CPU Frequency scaling + # + CONFIG_CPU_FREQ=y ++CONFIG_CPU_FREQ_TABLE=y + # CONFIG_CPU_FREQ_DEBUG is not set + CONFIG_CPU_FREQ_STAT=y + # CONFIG_CPU_FREQ_STAT_DETAILS is not set +@@ -137,16 +208,13 @@ + CONFIG_CPU_FREQ_GOV_POWERSAVE=y + CONFIG_CPU_FREQ_GOV_USERSPACE=y + # CONFIG_CPU_FREQ_GOV_ONDEMAND is not set +-CONFIG_CPU_FREQ_TABLE=y +-CONFIG_SH_CPU_FREQ=y ++# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set ++# CONFIG_SH_CPU_FREQ is not set + + # + # DMA support + # +-CONFIG_SH_DMA=y +-CONFIG_NR_ONCHIP_DMA_CHANNELS=4 +-CONFIG_NR_DMA_CHANNELS_BOOL=y +-CONFIG_NR_DMA_CHANNELS=9 ++# CONFIG_SH_DMA is not set + + # + # Companion Chips +@@ -154,14 +222,28 @@ + # CONFIG_HD6446X_SERIES is not set + + # +-# Bus options (PCI, PCMCIA, EISA, MCA, ISA) ++# Kernel features ++# ++# CONFIG_KEXEC is not set ++CONFIG_PREEMPT=y ++# CONFIG_SMP is not set ++ ++# ++# Boot options ++# ++CONFIG_ZERO_PAGE_OFFSET=0x00001000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++CONFIG_CMDLINE_BOOL=y ++CONFIG_CMDLINE="console=ttySC1,115200 panic=3" ++ ++# ++# Bus options + # +-CONFIG_MAPLE=y + CONFIG_PCI=y + # CONFIG_SH_PCIDMA_NONCOHERENT is not set + CONFIG_PCI_AUTO=y + CONFIG_PCI_LEGACY_PROC=y +-CONFIG_PCI_NAMES=y + + # + # PCCARD (PCMCIA/CardBus) support +@@ -169,10 +251,6 @@ + # CONFIG_PCCARD is not set + + # +-# PC-card bridges +-# +- +-# + # PCI Hotplug Support + # + # CONFIG_HOTPLUG_PCI is not set +@@ -185,9 +263,72 @@ + # CONFIG_BINFMT_MISC is not set + + # +-# SH initrd options ++# Networking ++# ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++CONFIG_PACKET=y ++# CONFIG_PACKET_MMAP is not set ++CONFIG_UNIX=y ++# CONFIG_NET_KEY is not set ++CONFIG_INET=y ++# CONFIG_IP_MULTICAST is not set ++# CONFIG_IP_ADVANCED_ROUTER is not set ++CONFIG_IP_FIB_HASH=y ++# CONFIG_IP_PNP is not set ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_TUNNEL is not set ++CONFIG_INET_DIAG=y ++CONFIG_INET_TCP_DIAG=y ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++# CONFIG_IPV6 is not set ++# CONFIG_NETFILTER is not set ++ ++# ++# DCCP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_DCCP is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++# CONFIG_ATM is not set ++# CONFIG_BRIDGE is not set ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_NET_DIVERT is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++ ++# ++# QoS and/or fair queueing + # +-# CONFIG_EMBEDDED_RAMDISK is not set ++# CONFIG_NET_SCHED is not set ++ ++# ++# Network testing ++# ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++# CONFIG_IEEE80211 is not set + + # + # Device Drivers +@@ -201,6 +342,11 @@ + # CONFIG_FW_LOADER is not set + + # ++# Connector - unified userspace <-> kernelspace linker ++# ++# CONFIG_CONNECTOR is not set ++ ++# + # Memory Technology Devices (MTD) + # + # CONFIG_MTD is not set +@@ -217,7 +363,6 @@ + # + # Block devices + # +-# CONFIG_BLK_DEV_FD is not set + # CONFIG_BLK_CPQ_DA is not set + # CONFIG_BLK_CPQ_CISS_DA is not set + # CONFIG_BLK_DEV_DAC960 is not set +@@ -226,21 +371,9 @@ + # CONFIG_BLK_DEV_LOOP is not set + # CONFIG_BLK_DEV_NBD is not set + # CONFIG_BLK_DEV_SX8 is not set +-CONFIG_BLK_DEV_RAM=y ++# CONFIG_BLK_DEV_RAM is not set + CONFIG_BLK_DEV_RAM_COUNT=16 +-CONFIG_BLK_DEV_RAM_SIZE=1024 +-CONFIG_BLK_DEV_INITRD=y +-CONFIG_INITRAMFS_SOURCE="" +-# CONFIG_LBD is not set + # CONFIG_CDROM_PKTCDVD is not set +- +-# +-# IO Schedulers +-# +-CONFIG_IOSCHED_NOOP=y +-CONFIG_IOSCHED_AS=y +-CONFIG_IOSCHED_DEADLINE=y +-CONFIG_IOSCHED_CFQ=y + # CONFIG_ATA_OVER_ETH is not set + + # +@@ -251,6 +384,7 @@ + # + # SCSI device support + # ++# CONFIG_RAID_ATTRS is not set + # CONFIG_SCSI is not set + + # +@@ -261,6 +395,7 @@ + # + # Fusion MPT device support + # ++# CONFIG_FUSION is not set + + # + # IEEE 1394 (FireWire) support +@@ -273,70 +408,8 @@ + # CONFIG_I2O is not set + + # +-# Networking support +-# +-CONFIG_NET=y +- +-# +-# Networking options +-# +-CONFIG_PACKET=y +-# CONFIG_PACKET_MMAP is not set +-# CONFIG_NETLINK_DEV is not set +-CONFIG_UNIX=y +-# CONFIG_NET_KEY is not set +-CONFIG_INET=y +-# CONFIG_IP_MULTICAST is not set +-# CONFIG_IP_ADVANCED_ROUTER is not set +-CONFIG_IP_PNP=y +-CONFIG_IP_PNP_DHCP=y +-# CONFIG_IP_PNP_BOOTP is not set +-# CONFIG_IP_PNP_RARP is not set +-# CONFIG_NET_IPIP is not set +-# CONFIG_NET_IPGRE is not set +-# CONFIG_ARPD is not set +-# CONFIG_SYN_COOKIES is not set +-# CONFIG_INET_AH is not set +-# CONFIG_INET_ESP is not set +-# CONFIG_INET_IPCOMP is not set +-# CONFIG_INET_TUNNEL is not set +-CONFIG_IP_TCPDIAG=y +-# CONFIG_IP_TCPDIAG_IPV6 is not set +-# CONFIG_IPV6 is not set +-# CONFIG_NETFILTER is not set +- +-# +-# SCTP Configuration (EXPERIMENTAL) +-# +-# CONFIG_IP_SCTP is not set +-# CONFIG_ATM is not set +-# CONFIG_BRIDGE is not set +-# CONFIG_VLAN_8021Q is not set +-# CONFIG_DECNET is not set +-# CONFIG_LLC2 is not set +-# CONFIG_IPX is not set +-# CONFIG_ATALK is not set +-# CONFIG_X25 is not set +-# CONFIG_LAPB is not set +-# CONFIG_NET_DIVERT is not set +-# CONFIG_ECONET is not set +-# CONFIG_WAN_ROUTER is not set +- +-# +-# QoS and/or fair queueing ++# Network device support + # +-# CONFIG_NET_SCHED is not set +-# CONFIG_NET_CLS_ROUTE is not set +- +-# +-# Network testing +-# +-# CONFIG_NET_PKTGEN is not set +-# CONFIG_NETPOLL is not set +-# CONFIG_NET_POLL_CONTROLLER is not set +-# CONFIG_HAMRADIO is not set +-# CONFIG_IRDA is not set +-# CONFIG_BT is not set + CONFIG_NETDEVICES=y + # CONFIG_DUMMY is not set + # CONFIG_BONDING is not set +@@ -349,6 +422,11 @@ + # CONFIG_ARCNET is not set + + # ++# PHY device support ++# ++# CONFIG_PHYLIB is not set ++ ++# + # Ethernet (10 or 100Mbit) + # + CONFIG_NET_ETHERNET=y +@@ -356,6 +434,7 @@ + # CONFIG_STNIC is not set + # CONFIG_HAPPYMEAL is not set + # CONFIG_SUNGEM is not set ++# CONFIG_CASSINI is not set + # CONFIG_NET_VENDOR_3COM is not set + # CONFIG_SMC91X is not set + +@@ -364,6 +443,7 @@ + # + # CONFIG_NET_TULIP is not set + # CONFIG_HP100 is not set ++# CONFIG_NE2000 is not set + CONFIG_NET_PCI=y + # CONFIG_PCNET32 is not set + # CONFIG_AMD8111_ETH is not set +@@ -398,13 +478,17 @@ + # CONFIG_HAMACHI is not set + # CONFIG_YELLOWFIN is not set + # CONFIG_R8169 is not set ++# CONFIG_SIS190 is not set ++# CONFIG_SKGE is not set + # CONFIG_SK98LIN is not set + # CONFIG_VIA_VELOCITY is not set + # CONFIG_TIGON3 is not set ++# CONFIG_BNX2 is not set + + # + # Ethernet (10000 Mbit) + # ++# CONFIG_CHELSIO_T1 is not set + # CONFIG_IXGB is not set + # CONFIG_S2IO is not set + +@@ -428,6 +512,8 @@ + # CONFIG_SLIP is not set + # CONFIG_SHAPER is not set + # CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set + + # + # ISDN subsystem +@@ -457,19 +543,6 @@ + # CONFIG_INPUT_EVBUG is not set + + # +-# Input I/O drivers +-# +-# CONFIG_GAMEPORT is not set +-CONFIG_SOUND_GAMEPORT=y +-CONFIG_SERIO=y +-# CONFIG_SERIO_I8042 is not set +-# CONFIG_SERIO_SERPORT is not set +-# CONFIG_SERIO_CT82C710 is not set +-# CONFIG_SERIO_PCIPS2 is not set +-CONFIG_SERIO_LIBPS2=y +-# CONFIG_SERIO_RAW is not set +- +-# + # Input Device Drivers + # + CONFIG_INPUT_KEYBOARD=y +@@ -478,17 +551,26 @@ + # CONFIG_KEYBOARD_LKKBD is not set + # CONFIG_KEYBOARD_XTKBD is not set + # CONFIG_KEYBOARD_NEWTON is not set +-# CONFIG_KEYBOARD_MAPLE is not set + CONFIG_INPUT_MOUSE=y + CONFIG_MOUSE_PS2=y + # CONFIG_MOUSE_SERIAL is not set +-# CONFIG_MOUSE_MAPLE is not set + # CONFIG_MOUSE_VSXXXAA is not set + # CONFIG_INPUT_JOYSTICK is not set + # CONFIG_INPUT_TOUCHSCREEN is not set + # CONFIG_INPUT_MISC is not set + + # ++# Hardware I/O ports ++# ++CONFIG_SERIO=y ++# CONFIG_SERIO_I8042 is not set ++# CONFIG_SERIO_SERPORT is not set ++# CONFIG_SERIO_PCIPS2 is not set ++CONFIG_SERIO_LIBPS2=y ++# CONFIG_SERIO_RAW is not set ++# CONFIG_GAMEPORT is not set ++ ++# + # Character devices + # + CONFIG_VT=y +@@ -508,6 +590,7 @@ + CONFIG_SERIAL_SH_SCI_CONSOLE=y + CONFIG_SERIAL_CORE=y + CONFIG_SERIAL_CORE_CONSOLE=y ++# CONFIG_SERIAL_JSM is not set + CONFIG_UNIX98_PTYS=y + CONFIG_LEGACY_PTYS=y + CONFIG_LEGACY_PTY_COUNT=256 +@@ -547,6 +630,12 @@ + # CONFIG_RAW_DRIVER is not set + + # ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# + # I2C support + # + # CONFIG_I2C is not set +@@ -557,10 +646,21 @@ + # CONFIG_W1 is not set + + # ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# + # Misc devices + # + + # ++# Multimedia Capabilities Port drivers ++# ++ ++# + # Multimedia devices + # + # CONFIG_VIDEO_DEV is not set +@@ -574,6 +674,10 @@ + # Graphics support + # + CONFIG_FB=y ++CONFIG_FB_CFB_FILLRECT=y ++CONFIG_FB_CFB_COPYAREA=y ++CONFIG_FB_CFB_IMAGEBLIT=y ++# CONFIG_FB_MACMODES is not set + # CONFIG_FB_MODE_HELPERS is not set + # CONFIG_FB_TILEBLITTING is not set + # CONFIG_FB_CIRRUS is not set +@@ -583,6 +687,8 @@ + # CONFIG_FB_IMSTT is not set + CONFIG_FB_PVR2=y + # CONFIG_FB_EPSON1355 is not set ++# CONFIG_FB_S1D13XXX is not set ++# CONFIG_FB_NVIDIA is not set + # CONFIG_FB_RIVA is not set + # CONFIG_FB_MATROX is not set + # CONFIG_FB_RADEON_OLD is not set +@@ -595,24 +701,27 @@ + # CONFIG_FB_KYRO is not set + # CONFIG_FB_3DFX is not set + # CONFIG_FB_VOODOO1 is not set ++# CONFIG_FB_CYBLA is not set + # CONFIG_FB_TRIDENT is not set + # CONFIG_FB_VIRTUAL is not set + + # + # Console display driver support + # +-# CONFIG_VGA_CONSOLE is not set + CONFIG_DUMMY_CONSOLE=y + CONFIG_FRAMEBUFFER_CONSOLE=y ++# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set + CONFIG_FONTS=y + CONFIG_FONT_8x8=y + CONFIG_FONT_8x16=y + # CONFIG_FONT_6x11 is not set ++# CONFIG_FONT_7x14 is not set + # CONFIG_FONT_PEARL_8x8 is not set + # CONFIG_FONT_ACORN_8x8 is not set + # CONFIG_FONT_MINI_4x6 is not set + # CONFIG_FONT_SUN8x16 is not set + # CONFIG_FONT_SUN12x22 is not set ++# CONFIG_FONT_10x18 is not set + + # + # Logo configuration +@@ -634,12 +743,12 @@ + # + # USB support + # +-# CONFIG_USB is not set + CONFIG_USB_ARCH_HAS_HCD=y + CONFIG_USB_ARCH_HAS_OHCI=y ++# CONFIG_USB is not set + + # +-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' + # + + # +@@ -658,6 +767,10 @@ + # CONFIG_INFINIBAND is not set + + # ++# SN Devices ++# ++ ++# + # File systems + # + # CONFIG_EXT2_FS is not set +@@ -665,17 +778,16 @@ + # CONFIG_JBD is not set + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set +- +-# +-# XFS support +-# ++# CONFIG_FS_POSIX_ACL is not set + # CONFIG_XFS_FS is not set + # CONFIG_MINIX_FS is not set +-CONFIG_ROMFS_FS=y ++# CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y + # CONFIG_QUOTA is not set +-CONFIG_DNOTIFY=y ++# CONFIG_DNOTIFY is not set + # CONFIG_AUTOFS_FS is not set + # CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set + + # + # CD-ROM/DVD Filesystems +@@ -696,15 +808,11 @@ + CONFIG_PROC_FS=y + CONFIG_PROC_KCORE=y + CONFIG_SYSFS=y +-CONFIG_DEVFS_FS=y +-CONFIG_DEVFS_MOUNT=y +-# CONFIG_DEVFS_DEBUG is not set +-# CONFIG_DEVPTS_FS_XATTR is not set + CONFIG_TMPFS=y +-# CONFIG_TMPFS_XATTR is not set + CONFIG_HUGETLBFS=y + CONFIG_HUGETLB_PAGE=y + CONFIG_RAMFS=y ++# CONFIG_RELAYFS_FS is not set + + # + # Miscellaneous filesystems +@@ -716,7 +824,7 @@ + # CONFIG_BEFS_FS is not set + # CONFIG_BFS_FS is not set + # CONFIG_EFS_FS is not set +-CONFIG_CRAMFS=y ++# CONFIG_CRAMFS is not set + # CONFIG_VXFS_FS is not set + # CONFIG_HPFS_FS is not set + # CONFIG_QNX4FS_FS is not set +@@ -726,22 +834,14 @@ + # + # Network File Systems + # +-CONFIG_NFS_FS=y +-CONFIG_NFS_V3=y +-# CONFIG_NFS_V4 is not set +-# CONFIG_NFS_DIRECTIO is not set ++# CONFIG_NFS_FS is not set + # CONFIG_NFSD is not set +-CONFIG_ROOT_NFS=y +-CONFIG_LOCKD=y +-CONFIG_LOCKD_V4=y +-CONFIG_SUNRPC=y +-# CONFIG_RPCSEC_GSS_KRB5 is not set +-# CONFIG_RPCSEC_GSS_SPKM3 is not set + # CONFIG_SMB_FS is not set + # CONFIG_CIFS is not set + # CONFIG_NCP_FS is not set + # CONFIG_CODA_FS is not set + # CONFIG_AFS_FS is not set ++# CONFIG_9P_FS is not set + + # + # Partition Types +@@ -758,13 +858,14 @@ + # Profiling support + # + CONFIG_PROFILING=y +-CONFIG_OPROFILE=y ++# CONFIG_OPROFILE is not set + + # + # Kernel hacking + # ++# CONFIG_PRINTK_TIME is not set + # CONFIG_DEBUG_KERNEL is not set +-CONFIG_DEBUG_PREEMPT=y ++CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_FRAME_POINTER is not set + # CONFIG_SH_STANDARD_BIOS is not set + # CONFIG_EARLY_SCIF_CONSOLE is not set +@@ -789,6 +890,6 @@ + # Library routines + # + # CONFIG_CRC_CCITT is not set ++# CONFIG_CRC16 is not set + CONFIG_CRC32=y + # CONFIG_LIBCRC32C is not set +-CONFIG_ZLIB_INFLATE=y +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/hp6xx_defconfig linux-2.6.17/arch/sh/configs/hp6xx_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/hp6xx_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/hp6xx_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,11 +1,12 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.15-sh +-# Wed Jan 4 15:32:56 2006 ++# Linux kernel version: 2.6.17 ++# Thu Jul 6 09:58:22 2006 + # + CONFIG_SUPERH=y +-CONFIG_UID16=y + CONFIG_RWSEM_GENERIC_SPINLOCK=y ++CONFIG_GENERIC_FIND_NEXT_BIT=y ++CONFIG_GENERIC_HWEIGHT=y + CONFIG_GENERIC_HARDIRQS=y + CONFIG_GENERIC_IRQ_PROBE=y + CONFIG_GENERIC_CALIBRATE_DELAY=y +@@ -14,8 +15,6 @@ + # Code maturity level options + # + CONFIG_EXPERIMENTAL=y +-# CONFIG_CLEAN_COMPILE is not set +-CONFIG_BROKEN=y + CONFIG_BROKEN_ON_SMP=y + CONFIG_INIT_ENV_ARG_LIMIT=32 + +@@ -28,25 +27,26 @@ + # CONFIG_SYSVIPC is not set + # CONFIG_BSD_PROCESS_ACCT is not set + # CONFIG_SYSCTL is not set +-CONFIG_HOTPLUG=y + # CONFIG_IKCONFIG is not set ++# CONFIG_RELAY is not set + CONFIG_INITRAMFS_SOURCE="" ++CONFIG_UID16=y + CONFIG_CC_OPTIMIZE_FOR_SIZE=y + # CONFIG_EMBEDDED is not set + CONFIG_KALLSYMS=y + # CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_HOTPLUG=y + CONFIG_PRINTK=y + CONFIG_BUG=y ++CONFIG_ELF_CORE=y + CONFIG_BASE_FULL=y + CONFIG_FUTEX=y + CONFIG_EPOLL=y + CONFIG_SHMEM=y +-CONFIG_CC_ALIGN_FUNCTIONS=0 +-CONFIG_CC_ALIGN_LABELS=0 +-CONFIG_CC_ALIGN_LOOPS=0 +-CONFIG_CC_ALIGN_JUMPS=0 ++CONFIG_SLAB=y + # CONFIG_TINY_SHMEM is not set + CONFIG_BASE_SMALL=0 ++# CONFIG_SLOB is not set + + # + # Loadable module support +@@ -57,6 +57,8 @@ + # Block layer + # + # CONFIG_LBD is not set ++# CONFIG_BLK_DEV_IO_TRACE is not set ++# CONFIG_LSF is not set + + # + # IO Schedulers +@@ -96,6 +98,7 @@ + # CONFIG_SH_SECUREEDGE5410 is not set + # CONFIG_SH_HS7751RVOIP is not set + # CONFIG_SH_RTS7751R2D is not set ++# CONFIG_SH_R7780RP is not set + # CONFIG_SH_EDOSK7705 is not set + # CONFIG_SH_SH4202_MICRODEV is not set + # CONFIG_SH_LANDISK is not set +@@ -175,12 +178,14 @@ + CONFIG_SH_RTC=y + # CONFIG_SH_DSP is not set + CONFIG_SH_ADC=y ++CONFIG_CPU_HAS_INTEVT=y ++CONFIG_CPU_HAS_PINT_IRQ=y ++CONFIG_CPU_HAS_SR_RB=y + + # + # Timer support + # + CONFIG_SH_TMU=y +-CONFIG_SH_PCLK_FREQ_BOOL=y + CONFIG_SH_PCLK_FREQ=22110000 + + # +@@ -194,7 +199,6 @@ + CONFIG_SH_DMA=y + CONFIG_NR_ONCHIP_DMA_CHANNELS=4 + # CONFIG_NR_DMA_CHANNELS_BOOL is not set +-# CONFIG_DMA_PAGE_OPS is not set + + # + # Companion Chips +@@ -257,6 +261,14 @@ + # CONFIG_BINFMT_MISC is not set + + # ++# Power management options (EXPERIMENTAL) ++# ++CONFIG_PM=y ++CONFIG_PM_LEGACY=y ++# CONFIG_PM_DEBUG is not set ++CONFIG_APM=y ++ ++# + # Networking + # + # CONFIG_NET is not set +@@ -315,7 +327,7 @@ + # CONFIG_BLK_DEV_IDE_SATA is not set + CONFIG_BLK_DEV_IDEDISK=y + # CONFIG_IDEDISK_MULTI_MODE is not set +-# CONFIG_BLK_DEV_IDECS is not set ++CONFIG_BLK_DEV_IDECS=y + # CONFIG_BLK_DEV_IDECD is not set + # CONFIG_BLK_DEV_IDETAPE is not set + # CONFIG_BLK_DEV_IDEFLOPPY is not set +@@ -356,19 +368,12 @@ + # + # IEEE 1394 (FireWire) support + # +-# CONFIG_IEEE1394 is not set + + # + # I2O device support + # + + # +-# Network device support +-# +-# CONFIG_NETPOLL is not set +-# CONFIG_NET_POLL_CONTROLLER is not set +- +-# + # ISDN subsystem + # + +@@ -390,17 +395,31 @@ + CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 + CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 + # CONFIG_INPUT_JOYDEV is not set +-# CONFIG_INPUT_TSDEV is not set ++CONFIG_INPUT_TSDEV=y ++CONFIG_INPUT_TSDEV_SCREEN_X=240 ++CONFIG_INPUT_TSDEV_SCREEN_Y=320 + # CONFIG_INPUT_EVDEV is not set + # CONFIG_INPUT_EVBUG is not set + + # + # Input Device Drivers + # +-# CONFIG_INPUT_KEYBOARD is not set ++CONFIG_INPUT_KEYBOARD=y ++# CONFIG_KEYBOARD_ATKBD is not set ++# CONFIG_KEYBOARD_SUNKBD is not set ++# CONFIG_KEYBOARD_LKKBD is not set ++# CONFIG_KEYBOARD_XTKBD is not set ++# CONFIG_KEYBOARD_NEWTON is not set ++# CONFIG_KEYBOARD_HP620 is not set ++CONFIG_KEYBOARD_HP680=y + # CONFIG_INPUT_MOUSE is not set + # CONFIG_INPUT_JOYSTICK is not set +-# CONFIG_INPUT_TOUCHSCREEN is not set ++CONFIG_INPUT_TOUCHSCREEN=y ++# CONFIG_TOUCHSCREEN_GUNZE is not set ++# CONFIG_TOUCHSCREEN_ELO is not set ++# CONFIG_TOUCHSCREEN_MTOUCH is not set ++# CONFIG_TOUCHSCREEN_MK712 is not set ++CONFIG_TOUCHSCREEN_HP600=y + # CONFIG_INPUT_MISC is not set + + # +@@ -471,6 +490,12 @@ + # CONFIG_I2C is not set + + # ++# SPI support ++# ++# CONFIG_SPI is not set ++# CONFIG_SPI_MASTER is not set ++ ++# + # Dallas's 1-wire bus + # + # CONFIG_W1 is not set +@@ -480,6 +505,7 @@ + # + CONFIG_HWMON=y + # CONFIG_HWMON_VID is not set ++# CONFIG_SENSORS_F71805F is not set + # CONFIG_HWMON_DEBUG_CHIP is not set + + # +@@ -487,13 +513,10 @@ + # + + # +-# Multimedia Capabilities Port drivers +-# +- +-# + # Multimedia devices + # + # CONFIG_VIDEO_DEV is not set ++CONFIG_VIDEO_V4L2=y + + # + # Digital Video Broadcasting Devices +@@ -507,6 +530,7 @@ + CONFIG_FB_CFB_COPYAREA=y + CONFIG_FB_CFB_IMAGEBLIT=y + # CONFIG_FB_MACMODES is not set ++CONFIG_FB_FIRMWARE_EDID=y + # CONFIG_FB_MODE_HELPERS is not set + # CONFIG_FB_TILEBLITTING is not set + # CONFIG_FB_EPSON1355 is not set +@@ -553,7 +577,6 @@ + # Open Sound System + # + CONFIG_SOUND_PRIME=y +-# CONFIG_OBSOLETE_OSS_DRIVER is not set + # CONFIG_SOUND_MSNDCLAS is not set + # CONFIG_SOUND_MSNDPIN is not set + CONFIG_SOUND_SH_DAC_AUDIO=y +@@ -564,6 +587,7 @@ + # + # CONFIG_USB_ARCH_HAS_HCD is not set + # CONFIG_USB_ARCH_HAS_OHCI is not set ++# CONFIG_USB_ARCH_HAS_EHCI is not set + + # + # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +@@ -580,13 +604,30 @@ + # CONFIG_MMC is not set + + # ++# LED devices ++# ++# CONFIG_NEW_LEDS is not set ++ ++# ++# LED drivers ++# ++ ++# ++# LED Triggers ++# ++ ++# + # InfiniBand support + # +-# CONFIG_INFINIBAND is not set + + # +-# SN Devices ++# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) ++# ++ ++# ++# Real Time Clock + # ++# CONFIG_RTC_CLASS is not set + + # + # File systems +@@ -595,7 +636,6 @@ + # CONFIG_EXT2_FS_XATTR is not set + # CONFIG_EXT2_FS_XIP is not set + # CONFIG_EXT3_FS is not set +-# CONFIG_JBD is not set + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set + # CONFIG_FS_POSIX_ACL is not set +@@ -635,7 +675,7 @@ + # CONFIG_HUGETLBFS is not set + # CONFIG_HUGETLB_PAGE is not set + CONFIG_RAMFS=y +-# CONFIG_RELAYFS_FS is not set ++# CONFIG_CONFIGFS_FS is not set + + # + # Miscellaneous filesystems +@@ -713,9 +753,11 @@ + # Kernel hacking + # + # CONFIG_PRINTK_TIME is not set ++# CONFIG_MAGIC_SYSRQ is not set + # CONFIG_DEBUG_KERNEL is not set + CONFIG_LOG_BUF_SHIFT=14 +-# CONFIG_FRAME_POINTER is not set ++# CONFIG_DEBUG_FS is not set ++# CONFIG_UNWIND_INFO is not set + # CONFIG_SH_STANDARD_BIOS is not set + # CONFIG_KGDB is not set + +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/hs7751rvoip_defconfig linux-2.6.17/arch/sh/configs/hs7751rvoip_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/hs7751rvoip_defconfig 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/hs7751rvoip_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,884 @@ ++# ++# Automatically generated make config: don't edit ++# Linux kernel version: 2.6.15-sh ++# Wed Jan 4 17:02:02 2006 ++# ++CONFIG_SUPERH=y ++CONFIG_UID16=y ++CONFIG_RWSEM_GENERIC_SPINLOCK=y ++CONFIG_GENERIC_HARDIRQS=y ++CONFIG_GENERIC_IRQ_PROBE=y ++CONFIG_GENERIC_CALIBRATE_DELAY=y ++ ++# ++# Code maturity level options ++# ++CONFIG_EXPERIMENTAL=y ++CONFIG_CLEAN_COMPILE=y ++CONFIG_BROKEN_ON_SMP=y ++CONFIG_LOCK_KERNEL=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 ++ ++# ++# General setup ++# ++CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y ++CONFIG_SWAP=y ++CONFIG_SYSVIPC=y ++CONFIG_POSIX_MQUEUE=y ++CONFIG_BSD_PROCESS_ACCT=y ++# CONFIG_BSD_PROCESS_ACCT_V3 is not set ++CONFIG_SYSCTL=y ++# CONFIG_AUDIT is not set ++CONFIG_HOTPLUG=y ++CONFIG_KOBJECT_UEVENT=y ++# CONFIG_IKCONFIG is not set ++CONFIG_INITRAMFS_SOURCE="" ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set ++CONFIG_EMBEDDED=y ++# CONFIG_KALLSYMS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y ++CONFIG_FUTEX=y ++CONFIG_EPOLL=y ++CONFIG_SHMEM=y ++CONFIG_CC_ALIGN_FUNCTIONS=0 ++CONFIG_CC_ALIGN_LABELS=0 ++CONFIG_CC_ALIGN_LOOPS=0 ++CONFIG_CC_ALIGN_JUMPS=0 ++# CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 ++ ++# ++# Loadable module support ++# ++CONFIG_MODULES=y ++CONFIG_MODULE_UNLOAD=y ++# CONFIG_MODULE_FORCE_UNLOAD is not set ++CONFIG_OBSOLETE_MODPARM=y ++# CONFIG_MODVERSIONS is not set ++# CONFIG_MODULE_SRCVERSION_ALL is not set ++CONFIG_KMOD=y ++ ++# ++# Block layer ++# ++# CONFIG_LBD is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++CONFIG_IOSCHED_AS=y ++CONFIG_IOSCHED_DEADLINE=y ++CONFIG_IOSCHED_CFQ=y ++CONFIG_DEFAULT_AS=y ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++# CONFIG_DEFAULT_NOOP is not set ++CONFIG_DEFAULT_IOSCHED="anticipatory" ++ ++# ++# System type ++# ++# CONFIG_SH_SOLUTION_ENGINE is not set ++# CONFIG_SH_7751_SOLUTION_ENGINE is not set ++# CONFIG_SH_7300_SOLUTION_ENGINE is not set ++# CONFIG_SH_73180_SOLUTION_ENGINE is not set ++# CONFIG_SH_7751_SYSTEMH is not set ++# CONFIG_SH_STB1_HARP is not set ++# CONFIG_SH_STB1_OVERDRIVE is not set ++# CONFIG_SH_HP6XX is not set ++# CONFIG_SH_CQREEK is not set ++# CONFIG_SH_DMIDA is not set ++# CONFIG_SH_EC3104 is not set ++# CONFIG_SH_SATURN is not set ++# CONFIG_SH_DREAMCAST is not set ++# CONFIG_SH_CAT68701 is not set ++# CONFIG_SH_BIGSUR is not set ++# CONFIG_SH_SH2000 is not set ++# CONFIG_SH_ADX is not set ++# CONFIG_SH_MPC1211 is not set ++# CONFIG_SH_SH03 is not set ++# CONFIG_SH_SECUREEDGE5410 is not set ++CONFIG_SH_HS7751RVOIP=y ++# CONFIG_SH_RTS7751R2D is not set ++# CONFIG_SH_EDOSK7705 is not set ++# CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set ++# CONFIG_SH_TITAN is not set ++# CONFIG_SH_UNKNOWN is not set ++ ++# ++# Processor selection ++# ++CONFIG_CPU_SH4=y ++ ++# ++# SH-2 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH7300 is not set ++# CONFIG_CPU_SUBTYPE_SH7705 is not set ++# CONFIG_CPU_SUBTYPE_SH7707 is not set ++# CONFIG_CPU_SUBTYPE_SH7708 is not set ++# CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH7750 is not set ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set ++CONFIG_CPU_SUBTYPE_SH7751=y ++CONFIG_CPU_SUBTYPE_SH7751R=y ++# CONFIG_CPU_SUBTYPE_SH7760 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_ST40STB1 is not set ++# CONFIG_CPU_SUBTYPE_ST40GX1 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# ++CONFIG_MMU=y ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set ++CONFIG_MEMORY_START=0x0c000000 ++CONFIG_MEMORY_SIZE=0x04000000 ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y ++CONFIG_SH_RTC=y ++CONFIG_SH_FPU=y ++# CONFIG_SH_STORE_QUEUES is not set ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++ ++# ++# HS7751RVoIP options ++# ++CONFIG_HS7751RVOIP_CODEC=y ++# CONFIG_SH_PCLK_FREQ_BOOL is not set ++ ++# ++# CPU Frequency scaling ++# ++# CONFIG_CPU_FREQ is not set ++ ++# ++# DMA support ++# ++# CONFIG_SH_DMA is not set ++ ++# ++# Companion Chips ++# ++# CONFIG_HD6446X_SERIES is not set ++ ++# ++# Kernel features ++# ++# CONFIG_KEXEC is not set ++CONFIG_PREEMPT=y ++# CONFIG_SMP is not set ++ ++# ++# Boot options ++# ++CONFIG_ZERO_PAGE_OFFSET=0x00001000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++CONFIG_CMDLINE_BOOL=y ++CONFIG_CMDLINE="mem=64M console=ttySC1,115200 root=/dev/hda1" ++ ++# ++# Bus options ++# ++CONFIG_PCI=y ++CONFIG_SH_PCIDMA_NONCOHERENT=y ++CONFIG_PCI_AUTO=y ++CONFIG_PCI_AUTO_UPDATE_RESOURCES=y ++CONFIG_PCI_LEGACY_PROC=y ++ ++# ++# PCCARD (PCMCIA/CardBus) support ++# ++# CONFIG_PCCARD is not set ++ ++# ++# PCI Hotplug Support ++# ++# CONFIG_HOTPLUG_PCI is not set ++ ++# ++# Executable file formats ++# ++CONFIG_BINFMT_ELF=y ++# CONFIG_BINFMT_FLAT is not set ++# CONFIG_BINFMT_MISC is not set ++ ++# ++# Networking ++# ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++CONFIG_PACKET=y ++CONFIG_PACKET_MMAP=y ++CONFIG_UNIX=y ++# CONFIG_NET_KEY is not set ++CONFIG_INET=y ++CONFIG_IP_MULTICAST=y ++CONFIG_IP_ADVANCED_ROUTER=y ++CONFIG_ASK_IP_FIB_HASH=y ++# CONFIG_IP_FIB_TRIE is not set ++CONFIG_IP_FIB_HASH=y ++# CONFIG_IP_MULTIPLE_TABLES is not set ++# CONFIG_IP_ROUTE_MULTIPATH is not set ++# CONFIG_IP_ROUTE_VERBOSE is not set ++# CONFIG_IP_PNP is not set ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_IP_MROUTE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_TUNNEL is not set ++CONFIG_INET_DIAG=y ++CONFIG_INET_TCP_DIAG=y ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++# CONFIG_IPV6 is not set ++# CONFIG_NETFILTER is not set ++ ++# ++# DCCP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_DCCP is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++# CONFIG_ATM is not set ++# CONFIG_BRIDGE is not set ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_NET_DIVERT is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++ ++# ++# QoS and/or fair queueing ++# ++# CONFIG_NET_SCHED is not set ++ ++# ++# Network testing ++# ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++# CONFIG_IEEE80211 is not set ++ ++# ++# Device Drivers ++# ++ ++# ++# Generic Driver Options ++# ++CONFIG_STANDALONE=y ++CONFIG_PREVENT_FIRMWARE_BUILD=y ++CONFIG_FW_LOADER=m ++ ++# ++# Connector - unified userspace <-> kernelspace linker ++# ++# CONFIG_CONNECTOR is not set ++ ++# ++# Memory Technology Devices (MTD) ++# ++# CONFIG_MTD is not set ++ ++# ++# Parallel port support ++# ++# CONFIG_PARPORT is not set ++ ++# ++# Plug and Play support ++# ++ ++# ++# Block devices ++# ++# CONFIG_BLK_CPQ_DA is not set ++# CONFIG_BLK_CPQ_CISS_DA is not set ++# CONFIG_BLK_DEV_DAC960 is not set ++# CONFIG_BLK_DEV_UMEM is not set ++# CONFIG_BLK_DEV_COW_COMMON is not set ++# CONFIG_BLK_DEV_LOOP is not set ++# CONFIG_BLK_DEV_NBD is not set ++# CONFIG_BLK_DEV_SX8 is not set ++# CONFIG_BLK_DEV_RAM is not set ++CONFIG_BLK_DEV_RAM_COUNT=16 ++# CONFIG_CDROM_PKTCDVD is not set ++# CONFIG_ATA_OVER_ETH is not set ++ ++# ++# ATA/ATAPI/MFM/RLL support ++# ++CONFIG_IDE=y ++CONFIG_IDE_MAX_HWIFS=1 ++CONFIG_BLK_DEV_IDE=y ++ ++# ++# Please see Documentation/ide.txt for help/info on IDE drives ++# ++# CONFIG_BLK_DEV_IDE_SATA is not set ++CONFIG_BLK_DEV_IDEDISK=y ++# CONFIG_IDEDISK_MULTI_MODE is not set ++# CONFIG_BLK_DEV_IDECD is not set ++# CONFIG_BLK_DEV_IDETAPE is not set ++# CONFIG_BLK_DEV_IDEFLOPPY is not set ++# CONFIG_IDE_TASK_IOCTL is not set ++ ++# ++# IDE chipset support/bugfixes ++# ++CONFIG_IDE_GENERIC=y ++CONFIG_BLK_DEV_IDEPCI=y ++CONFIG_IDEPCI_SHARE_IRQ=y ++# CONFIG_BLK_DEV_OFFBOARD is not set ++CONFIG_BLK_DEV_GENERIC=y ++# CONFIG_BLK_DEV_OPTI621 is not set ++# CONFIG_BLK_DEV_IDEDMA_PCI is not set ++CONFIG_IDE_SH=y ++# CONFIG_IDE_ARM is not set ++# CONFIG_BLK_DEV_IDEDMA is not set ++# CONFIG_IDEDMA_AUTO is not set ++# CONFIG_BLK_DEV_HD is not set ++ ++# ++# SCSI device support ++# ++# CONFIG_RAID_ATTRS is not set ++# CONFIG_SCSI is not set ++ ++# ++# Multi-device support (RAID and LVM) ++# ++# CONFIG_MD is not set ++ ++# ++# Fusion MPT device support ++# ++# CONFIG_FUSION is not set ++ ++# ++# IEEE 1394 (FireWire) support ++# ++# CONFIG_IEEE1394 is not set ++ ++# ++# I2O device support ++# ++# CONFIG_I2O is not set ++ ++# ++# Network device support ++# ++CONFIG_NETDEVICES=y ++# CONFIG_DUMMY is not set ++# CONFIG_BONDING is not set ++# CONFIG_EQUALIZER is not set ++# CONFIG_TUN is not set ++ ++# ++# ARCnet devices ++# ++# CONFIG_ARCNET is not set ++ ++# ++# PHY device support ++# ++# CONFIG_PHYLIB is not set ++ ++# ++# Ethernet (10 or 100Mbit) ++# ++CONFIG_NET_ETHERNET=y ++CONFIG_MII=y ++# CONFIG_STNIC is not set ++# CONFIG_HAPPYMEAL is not set ++# CONFIG_SUNGEM is not set ++# CONFIG_CASSINI is not set ++# CONFIG_NET_VENDOR_3COM is not set ++# CONFIG_SMC91X is not set ++ ++# ++# Tulip family network device support ++# ++# CONFIG_NET_TULIP is not set ++# CONFIG_HP100 is not set ++# CONFIG_NE2000 is not set ++CONFIG_NET_PCI=y ++# CONFIG_PCNET32 is not set ++# CONFIG_AMD8111_ETH is not set ++# CONFIG_ADAPTEC_STARFIRE is not set ++# CONFIG_B44 is not set ++# CONFIG_FORCEDETH is not set ++# CONFIG_DGRS is not set ++# CONFIG_EEPRO100 is not set ++# CONFIG_E100 is not set ++# CONFIG_FEALNX is not set ++# CONFIG_NATSEMI is not set ++# CONFIG_NE2K_PCI is not set ++# CONFIG_8139CP is not set ++CONFIG_8139TOO=y ++# CONFIG_8139TOO_PIO is not set ++# CONFIG_8139TOO_TUNE_TWISTER is not set ++# CONFIG_8139TOO_8129 is not set ++# CONFIG_8139_OLD_RX_RESET is not set ++# CONFIG_SIS900 is not set ++# CONFIG_EPIC100 is not set ++# CONFIG_SUNDANCE is not set ++# CONFIG_TLAN is not set ++# CONFIG_VIA_RHINE is not set ++ ++# ++# Ethernet (1000 Mbit) ++# ++# CONFIG_ACENIC is not set ++# CONFIG_DL2K is not set ++# CONFIG_E1000 is not set ++# CONFIG_NS83820 is not set ++# CONFIG_HAMACHI is not set ++# CONFIG_YELLOWFIN is not set ++# CONFIG_R8169 is not set ++# CONFIG_SIS190 is not set ++# CONFIG_SKGE is not set ++# CONFIG_SK98LIN is not set ++# CONFIG_VIA_VELOCITY is not set ++# CONFIG_TIGON3 is not set ++# CONFIG_BNX2 is not set ++ ++# ++# Ethernet (10000 Mbit) ++# ++# CONFIG_CHELSIO_T1 is not set ++# CONFIG_IXGB is not set ++# CONFIG_S2IO is not set ++ ++# ++# Token Ring devices ++# ++# CONFIG_TR is not set ++ ++# ++# Wireless LAN (non-hamradio) ++# ++# CONFIG_NET_RADIO is not set ++ ++# ++# Wan interfaces ++# ++# CONFIG_WAN is not set ++# CONFIG_FDDI is not set ++# CONFIG_HIPPI is not set ++# CONFIG_PPP is not set ++# CONFIG_SLIP is not set ++# CONFIG_SHAPER is not set ++# CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set ++ ++# ++# ISDN subsystem ++# ++# CONFIG_ISDN is not set ++ ++# ++# Telephony Support ++# ++# CONFIG_PHONE is not set ++ ++# ++# Input device support ++# ++CONFIG_INPUT=y ++ ++# ++# Userland interfaces ++# ++# CONFIG_INPUT_MOUSEDEV is not set ++# CONFIG_INPUT_JOYDEV is not set ++# CONFIG_INPUT_TSDEV is not set ++# CONFIG_INPUT_EVDEV is not set ++# CONFIG_INPUT_EVBUG is not set ++ ++# ++# Input Device Drivers ++# ++# CONFIG_INPUT_KEYBOARD is not set ++# CONFIG_INPUT_MOUSE is not set ++# CONFIG_INPUT_JOYSTICK is not set ++# CONFIG_INPUT_TOUCHSCREEN is not set ++# CONFIG_INPUT_MISC is not set ++ ++# ++# Hardware I/O ports ++# ++CONFIG_SERIO=y ++CONFIG_SERIO_I8042=y ++CONFIG_SERIO_SERPORT=y ++# CONFIG_SERIO_PCIPS2 is not set ++# CONFIG_SERIO_LIBPS2 is not set ++# CONFIG_SERIO_RAW is not set ++# CONFIG_GAMEPORT is not set ++ ++# ++# Character devices ++# ++# CONFIG_VT is not set ++# CONFIG_SERIAL_NONSTANDARD is not set ++ ++# ++# Serial drivers ++# ++# CONFIG_SERIAL_8250 is not set ++ ++# ++# Non-8250 serial port support ++# ++CONFIG_SERIAL_SH_SCI=y ++CONFIG_SERIAL_SH_SCI_CONSOLE=y ++CONFIG_SERIAL_CORE=y ++CONFIG_SERIAL_CORE_CONSOLE=y ++# CONFIG_SERIAL_JSM is not set ++CONFIG_UNIX98_PTYS=y ++# CONFIG_LEGACY_PTYS is not set ++ ++# ++# IPMI ++# ++# CONFIG_IPMI_HANDLER is not set ++ ++# ++# Watchdog Cards ++# ++# CONFIG_WATCHDOG is not set ++# CONFIG_RTC is not set ++# CONFIG_GEN_RTC is not set ++# CONFIG_DTLK is not set ++# CONFIG_R3964 is not set ++# CONFIG_APPLICOM is not set ++ ++# ++# Ftape, the floppy tape device driver ++# ++# CONFIG_DRM is not set ++# CONFIG_RAW_DRIVER is not set ++ ++# ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# ++# I2C support ++# ++# CONFIG_I2C is not set ++ ++# ++# Dallas's 1-wire bus ++# ++# CONFIG_W1 is not set ++ ++# ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# ++# Misc devices ++# ++ ++# ++# Multimedia Capabilities Port drivers ++# ++ ++# ++# Multimedia devices ++# ++# CONFIG_VIDEO_DEV is not set ++ ++# ++# Digital Video Broadcasting Devices ++# ++# CONFIG_DVB is not set ++ ++# ++# Graphics support ++# ++# CONFIG_FB is not set ++ ++# ++# Sound ++# ++# CONFIG_SOUND is not set ++ ++# ++# USB support ++# ++CONFIG_USB_ARCH_HAS_HCD=y ++CONFIG_USB_ARCH_HAS_OHCI=y ++# CONFIG_USB is not set ++ ++# ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' ++# ++ ++# ++# USB Gadget Support ++# ++# CONFIG_USB_GADGET is not set ++ ++# ++# MMC/SD Card support ++# ++# CONFIG_MMC is not set ++ ++# ++# InfiniBand support ++# ++# CONFIG_INFINIBAND is not set ++ ++# ++# SN Devices ++# ++ ++# ++# File systems ++# ++CONFIG_EXT2_FS=y ++# CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set ++# CONFIG_EXT3_FS is not set ++# CONFIG_JBD is not set ++# CONFIG_REISERFS_FS is not set ++# CONFIG_JFS_FS is not set ++# CONFIG_FS_POSIX_ACL is not set ++# CONFIG_XFS_FS is not set ++# CONFIG_MINIX_FS is not set ++# CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y ++# CONFIG_QUOTA is not set ++CONFIG_DNOTIFY=y ++# CONFIG_AUTOFS_FS is not set ++# CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set ++ ++# ++# CD-ROM/DVD Filesystems ++# ++# CONFIG_ISO9660_FS is not set ++# CONFIG_UDF_FS is not set ++ ++# ++# DOS/FAT/NT Filesystems ++# ++# CONFIG_MSDOS_FS is not set ++# CONFIG_VFAT_FS is not set ++# CONFIG_NTFS_FS is not set ++ ++# ++# Pseudo filesystems ++# ++CONFIG_PROC_FS=y ++CONFIG_PROC_KCORE=y ++CONFIG_SYSFS=y ++CONFIG_TMPFS=y ++# CONFIG_HUGETLBFS is not set ++# CONFIG_HUGETLB_PAGE is not set ++CONFIG_RAMFS=y ++# CONFIG_RELAYFS_FS is not set ++ ++# ++# Miscellaneous filesystems ++# ++# CONFIG_ADFS_FS is not set ++# CONFIG_AFFS_FS is not set ++# CONFIG_HFS_FS is not set ++# CONFIG_HFSPLUS_FS is not set ++# CONFIG_BEFS_FS is not set ++# CONFIG_BFS_FS is not set ++# CONFIG_EFS_FS is not set ++# CONFIG_CRAMFS is not set ++# CONFIG_VXFS_FS is not set ++# CONFIG_HPFS_FS is not set ++# CONFIG_QNX4FS_FS is not set ++# CONFIG_SYSV_FS is not set ++# CONFIG_UFS_FS is not set ++ ++# ++# Network File Systems ++# ++CONFIG_NFS_FS=y ++CONFIG_NFS_V3=y ++# CONFIG_NFS_V3_ACL is not set ++CONFIG_NFS_V4=y ++CONFIG_NFS_DIRECTIO=y ++# CONFIG_NFSD is not set ++CONFIG_LOCKD=y ++CONFIG_LOCKD_V4=y ++CONFIG_NFS_COMMON=y ++CONFIG_SUNRPC=y ++CONFIG_SUNRPC_GSS=y ++CONFIG_RPCSEC_GSS_KRB5=y ++# CONFIG_RPCSEC_GSS_SPKM3 is not set ++# CONFIG_SMB_FS is not set ++# CONFIG_CIFS is not set ++# CONFIG_NCP_FS is not set ++# CONFIG_CODA_FS is not set ++# CONFIG_AFS_FS is not set ++# CONFIG_9P_FS is not set ++ ++# ++# Partition Types ++# ++CONFIG_PARTITION_ADVANCED=y ++# CONFIG_ACORN_PARTITION is not set ++# CONFIG_OSF_PARTITION is not set ++# CONFIG_AMIGA_PARTITION is not set ++# CONFIG_ATARI_PARTITION is not set ++# CONFIG_MAC_PARTITION is not set ++CONFIG_MSDOS_PARTITION=y ++# CONFIG_BSD_DISKLABEL is not set ++# CONFIG_MINIX_SUBPARTITION is not set ++# CONFIG_SOLARIS_X86_PARTITION is not set ++# CONFIG_UNIXWARE_DISKLABEL is not set ++# CONFIG_LDM_PARTITION is not set ++# CONFIG_SGI_PARTITION is not set ++# CONFIG_ULTRIX_PARTITION is not set ++# CONFIG_SUN_PARTITION is not set ++# CONFIG_EFI_PARTITION is not set ++ ++# ++# Native Language Support ++# ++# CONFIG_NLS is not set ++ ++# ++# Profiling support ++# ++# CONFIG_PROFILING is not set ++ ++# ++# Kernel hacking ++# ++# CONFIG_PRINTK_TIME is not set ++# CONFIG_DEBUG_KERNEL is not set ++CONFIG_LOG_BUF_SHIFT=14 ++# CONFIG_FRAME_POINTER is not set ++# CONFIG_SH_STANDARD_BIOS is not set ++# CONFIG_EARLY_SCIF_CONSOLE is not set ++# CONFIG_KGDB is not set ++ ++# ++# Security options ++# ++# CONFIG_KEYS is not set ++# CONFIG_SECURITY is not set ++ ++# ++# Cryptographic options ++# ++CONFIG_CRYPTO=y ++# CONFIG_CRYPTO_HMAC is not set ++# CONFIG_CRYPTO_NULL is not set ++# CONFIG_CRYPTO_MD4 is not set ++CONFIG_CRYPTO_MD5=y ++# CONFIG_CRYPTO_SHA1 is not set ++# CONFIG_CRYPTO_SHA256 is not set ++# CONFIG_CRYPTO_SHA512 is not set ++# CONFIG_CRYPTO_WP512 is not set ++# CONFIG_CRYPTO_TGR192 is not set ++CONFIG_CRYPTO_DES=y ++# CONFIG_CRYPTO_BLOWFISH is not set ++# CONFIG_CRYPTO_TWOFISH is not set ++# CONFIG_CRYPTO_SERPENT is not set ++# CONFIG_CRYPTO_AES is not set ++# CONFIG_CRYPTO_CAST5 is not set ++# CONFIG_CRYPTO_CAST6 is not set ++# CONFIG_CRYPTO_TEA is not set ++# CONFIG_CRYPTO_ARC4 is not set ++# CONFIG_CRYPTO_KHAZAD is not set ++# CONFIG_CRYPTO_ANUBIS is not set ++# CONFIG_CRYPTO_DEFLATE is not set ++# CONFIG_CRYPTO_MICHAEL_MIC is not set ++# CONFIG_CRYPTO_CRC32C is not set ++# CONFIG_CRYPTO_TEST is not set ++ ++# ++# Hardware crypto devices ++# ++ ++# ++# Library routines ++# ++# CONFIG_CRC_CCITT is not set ++# CONFIG_CRC16 is not set ++CONFIG_CRC32=y ++# CONFIG_LIBCRC32C is not set +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/landisk_defconfig linux-2.6.17/arch/sh/configs/landisk_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/landisk_defconfig 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/landisk_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,1372 @@ ++# ++# Automatically generated make config: don't edit ++# Linux kernel version: 2.6.14-sh ++# Sun Dec 18 01:38:13 2005 ++# ++CONFIG_SUPERH=y ++CONFIG_UID16=y ++CONFIG_RWSEM_GENERIC_SPINLOCK=y ++CONFIG_GENERIC_HARDIRQS=y ++CONFIG_GENERIC_IRQ_PROBE=y ++CONFIG_GENERIC_CALIBRATE_DELAY=y ++ ++# ++# Code maturity level options ++# ++CONFIG_EXPERIMENTAL=y ++CONFIG_CLEAN_COMPILE=y ++CONFIG_BROKEN_ON_SMP=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 ++ ++# ++# General setup ++# ++CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y ++CONFIG_SWAP=y ++CONFIG_SYSVIPC=y ++# CONFIG_POSIX_MQUEUE is not set ++# CONFIG_BSD_PROCESS_ACCT is not set ++CONFIG_SYSCTL=y ++# CONFIG_AUDIT is not set ++CONFIG_HOTPLUG=y ++CONFIG_KOBJECT_UEVENT=y ++# CONFIG_IKCONFIG is not set ++CONFIG_INITRAMFS_SOURCE="" ++# CONFIG_EMBEDDED is not set ++CONFIG_KALLSYMS=y ++CONFIG_KALLSYMS_EXTRA_PASS=y ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y ++CONFIG_FUTEX=y ++CONFIG_EPOLL=y ++CONFIG_SHMEM=y ++CONFIG_CC_ALIGN_FUNCTIONS=0 ++CONFIG_CC_ALIGN_LABELS=0 ++CONFIG_CC_ALIGN_LOOPS=0 ++CONFIG_CC_ALIGN_JUMPS=0 ++# CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 ++ ++# ++# Loadable module support ++# ++CONFIG_MODULES=y ++CONFIG_MODULE_UNLOAD=y ++CONFIG_MODULE_FORCE_UNLOAD=y ++CONFIG_OBSOLETE_MODPARM=y ++# CONFIG_MODVERSIONS is not set ++# CONFIG_MODULE_SRCVERSION_ALL is not set ++CONFIG_KMOD=y ++ ++# ++# System type ++# ++# CONFIG_SH_SOLUTION_ENGINE is not set ++# CONFIG_SH_7751_SOLUTION_ENGINE is not set ++# CONFIG_SH_7300_SOLUTION_ENGINE is not set ++# CONFIG_SH_73180_SOLUTION_ENGINE is not set ++# CONFIG_SH_7751_SYSTEMH is not set ++# CONFIG_SH_STB1_HARP is not set ++# CONFIG_SH_STB1_OVERDRIVE is not set ++# CONFIG_SH_HP6XX is not set ++# CONFIG_SH_CQREEK is not set ++# CONFIG_SH_DMIDA is not set ++# CONFIG_SH_EC3104 is not set ++# CONFIG_SH_SATURN is not set ++# CONFIG_SH_DREAMCAST is not set ++# CONFIG_SH_CAT68701 is not set ++# CONFIG_SH_BIGSUR is not set ++# CONFIG_SH_SH2000 is not set ++# CONFIG_SH_ADX is not set ++# CONFIG_SH_MPC1211 is not set ++# CONFIG_SH_SH03 is not set ++# CONFIG_SH_SECUREEDGE5410 is not set ++# CONFIG_SH_HS7751RVOIP is not set ++# CONFIG_SH_RTS7751R2D is not set ++# CONFIG_SH_EDOSK7705 is not set ++# CONFIG_SH_SH4202_MICRODEV is not set ++CONFIG_SH_LANDISK=y ++# CONFIG_SH_TITAN is not set ++# CONFIG_SH_UNKNOWN is not set ++ ++# ++# Processor selection ++# ++CONFIG_CPU_SH4=y ++ ++# ++# SH-2 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH7300 is not set ++# CONFIG_CPU_SUBTYPE_SH7705 is not set ++# CONFIG_CPU_SUBTYPE_SH7707 is not set ++# CONFIG_CPU_SUBTYPE_SH7708 is not set ++# CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH7750 is not set ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set ++CONFIG_CPU_SUBTYPE_SH7751=y ++CONFIG_CPU_SUBTYPE_SH7751R=y ++# CONFIG_CPU_SUBTYPE_SH7760 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_ST40STB1 is not set ++# CONFIG_CPU_SUBTYPE_ST40GX1 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# ++CONFIG_MMU=y ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set ++CONFIG_MEMORY_START=0x0c000000 ++CONFIG_MEMORY_SIZE=0x04000000 ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y ++CONFIG_SH_FPU=y ++# CONFIG_SH_STORE_QUEUES is not set ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++CONFIG_SH_PCLK_FREQ_BOOL=y ++CONFIG_SH_PCLK_FREQ=33333333 ++ ++# ++# CPU Frequency scaling ++# ++# CONFIG_CPU_FREQ is not set ++ ++# ++# DMA support ++# ++CONFIG_SH_DMA=y ++CONFIG_NR_ONCHIP_DMA_CHANNELS=4 ++# CONFIG_NR_DMA_CHANNELS_BOOL is not set ++ ++# ++# Companion Chips ++# ++# CONFIG_HD6446X_SERIES is not set ++CONFIG_HEARTBEAT=y ++ ++# ++# Kernel features ++# ++CONFIG_KEXEC=y ++# CONFIG_PREEMPT is not set ++# CONFIG_SMP is not set ++ ++# ++# Boot options ++# ++CONFIG_ZERO_PAGE_OFFSET=0x00001000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++# CONFIG_CMDLINE_BOOL is not set ++ ++# ++# Bus options ++# ++CONFIG_ISA=y ++CONFIG_PCI=y ++CONFIG_SH_PCIDMA_NONCOHERENT=y ++CONFIG_PCI_AUTO=y ++CONFIG_PCI_AUTO_UPDATE_RESOURCES=y ++CONFIG_PCI_LEGACY_PROC=y ++ ++# ++# PCCARD (PCMCIA/CardBus) support ++# ++CONFIG_PCCARD=y ++# CONFIG_PCMCIA_DEBUG is not set ++CONFIG_PCMCIA=y ++CONFIG_PCMCIA_LOAD_CIS=y ++CONFIG_PCMCIA_IOCTL=y ++CONFIG_CARDBUS=y ++ ++# ++# PC-card bridges ++# ++CONFIG_YENTA=y ++# CONFIG_PD6729 is not set ++# CONFIG_I82092 is not set ++# CONFIG_I82365 is not set ++# CONFIG_TCIC is not set ++CONFIG_PCMCIA_PROBE=y ++CONFIG_PCCARD_NONSTATIC=y ++ ++# ++# PCI Hotplug Support ++# ++# CONFIG_HOTPLUG_PCI is not set ++ ++# ++# Executable file formats ++# ++CONFIG_BINFMT_ELF=y ++# CONFIG_BINFMT_FLAT is not set ++# CONFIG_BINFMT_MISC is not set ++ ++# ++# Networking ++# ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++CONFIG_PACKET=y ++# CONFIG_PACKET_MMAP is not set ++CONFIG_UNIX=y ++# CONFIG_NET_KEY is not set ++CONFIG_INET=y ++# CONFIG_IP_MULTICAST is not set ++CONFIG_IP_ADVANCED_ROUTER=y ++CONFIG_ASK_IP_FIB_HASH=y ++# CONFIG_IP_FIB_TRIE is not set ++CONFIG_IP_FIB_HASH=y ++# CONFIG_IP_MULTIPLE_TABLES is not set ++# CONFIG_IP_ROUTE_MULTIPATH is not set ++# CONFIG_IP_ROUTE_VERBOSE is not set ++CONFIG_IP_PNP=y ++# CONFIG_IP_PNP_DHCP is not set ++# CONFIG_IP_PNP_BOOTP is not set ++# CONFIG_IP_PNP_RARP is not set ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_TUNNEL is not set ++CONFIG_INET_DIAG=y ++CONFIG_INET_TCP_DIAG=y ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++ ++# ++# IP: Virtual Server Configuration ++# ++# CONFIG_IP_VS is not set ++# CONFIG_IPV6 is not set ++CONFIG_NETFILTER=y ++# CONFIG_NETFILTER_DEBUG is not set ++# CONFIG_NETFILTER_NETLINK is not set ++ ++# ++# IP: Netfilter Configuration ++# ++CONFIG_IP_NF_CONNTRACK=m ++CONFIG_IP_NF_CT_ACCT=y ++CONFIG_IP_NF_CONNTRACK_MARK=y ++# CONFIG_IP_NF_CONNTRACK_EVENTS is not set ++# CONFIG_IP_NF_CT_PROTO_SCTP is not set ++CONFIG_IP_NF_FTP=m ++CONFIG_IP_NF_IRC=m ++# CONFIG_IP_NF_NETBIOS_NS is not set ++CONFIG_IP_NF_TFTP=m ++CONFIG_IP_NF_AMANDA=m ++# CONFIG_IP_NF_PPTP is not set ++CONFIG_IP_NF_QUEUE=m ++CONFIG_IP_NF_IPTABLES=m ++CONFIG_IP_NF_MATCH_LIMIT=m ++CONFIG_IP_NF_MATCH_IPRANGE=m ++CONFIG_IP_NF_MATCH_MAC=m ++CONFIG_IP_NF_MATCH_PKTTYPE=m ++CONFIG_IP_NF_MATCH_MARK=m ++CONFIG_IP_NF_MATCH_MULTIPORT=m ++CONFIG_IP_NF_MATCH_TOS=m ++CONFIG_IP_NF_MATCH_RECENT=m ++CONFIG_IP_NF_MATCH_ECN=m ++CONFIG_IP_NF_MATCH_DSCP=m ++CONFIG_IP_NF_MATCH_AH_ESP=m ++CONFIG_IP_NF_MATCH_LENGTH=m ++CONFIG_IP_NF_MATCH_TTL=m ++CONFIG_IP_NF_MATCH_TCPMSS=m ++CONFIG_IP_NF_MATCH_HELPER=m ++CONFIG_IP_NF_MATCH_STATE=m ++CONFIG_IP_NF_MATCH_CONNTRACK=m ++CONFIG_IP_NF_MATCH_OWNER=m ++CONFIG_IP_NF_MATCH_ADDRTYPE=m ++CONFIG_IP_NF_MATCH_REALM=m ++CONFIG_IP_NF_MATCH_SCTP=m ++# CONFIG_IP_NF_MATCH_DCCP is not set ++CONFIG_IP_NF_MATCH_COMMENT=m ++CONFIG_IP_NF_MATCH_CONNMARK=m ++# CONFIG_IP_NF_MATCH_CONNBYTES is not set ++CONFIG_IP_NF_MATCH_HASHLIMIT=m ++# CONFIG_IP_NF_MATCH_STRING is not set ++CONFIG_IP_NF_FILTER=m ++CONFIG_IP_NF_TARGET_REJECT=m ++CONFIG_IP_NF_TARGET_LOG=m ++CONFIG_IP_NF_TARGET_ULOG=m ++CONFIG_IP_NF_TARGET_TCPMSS=m ++# CONFIG_IP_NF_TARGET_NFQUEUE is not set ++CONFIG_IP_NF_NAT=m ++CONFIG_IP_NF_NAT_NEEDED=y ++CONFIG_IP_NF_TARGET_MASQUERADE=m ++CONFIG_IP_NF_TARGET_REDIRECT=m ++CONFIG_IP_NF_TARGET_NETMAP=m ++CONFIG_IP_NF_TARGET_SAME=m ++# CONFIG_IP_NF_NAT_SNMP_BASIC is not set ++CONFIG_IP_NF_NAT_IRC=m ++CONFIG_IP_NF_NAT_FTP=m ++CONFIG_IP_NF_NAT_TFTP=m ++CONFIG_IP_NF_NAT_AMANDA=m ++CONFIG_IP_NF_MANGLE=m ++CONFIG_IP_NF_TARGET_TOS=m ++CONFIG_IP_NF_TARGET_ECN=m ++CONFIG_IP_NF_TARGET_DSCP=m ++CONFIG_IP_NF_TARGET_MARK=m ++CONFIG_IP_NF_TARGET_CLASSIFY=m ++# CONFIG_IP_NF_TARGET_TTL is not set ++CONFIG_IP_NF_TARGET_CONNMARK=m ++# CONFIG_IP_NF_TARGET_CLUSTERIP is not set ++CONFIG_IP_NF_RAW=m ++CONFIG_IP_NF_TARGET_NOTRACK=m ++CONFIG_IP_NF_ARPTABLES=m ++CONFIG_IP_NF_ARPFILTER=m ++CONFIG_IP_NF_ARP_MANGLE=m ++ ++# ++# DCCP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_DCCP is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++# CONFIG_ATM is not set ++# CONFIG_BRIDGE is not set ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++CONFIG_LLC=m ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++CONFIG_ATALK=m ++# CONFIG_DEV_APPLETALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_NET_DIVERT is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++# CONFIG_NET_SCHED is not set ++CONFIG_NET_CLS_ROUTE=y ++ ++# ++# Network testing ++# ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++# CONFIG_IEEE80211 is not set ++ ++# ++# Device Drivers ++# ++ ++# ++# Generic Driver Options ++# ++CONFIG_STANDALONE=y ++CONFIG_PREVENT_FIRMWARE_BUILD=y ++CONFIG_FW_LOADER=y ++ ++# ++# Connector - unified userspace <-> kernelspace linker ++# ++# CONFIG_CONNECTOR is not set ++ ++# ++# Memory Technology Devices (MTD) ++# ++# CONFIG_MTD is not set ++ ++# ++# Parallel port support ++# ++# CONFIG_PARPORT is not set ++ ++# ++# Plug and Play support ++# ++# CONFIG_PNP is not set ++ ++# ++# Block devices ++# ++# CONFIG_BLK_CPQ_DA is not set ++# CONFIG_BLK_CPQ_CISS_DA is not set ++# CONFIG_BLK_DEV_DAC960 is not set ++# CONFIG_BLK_DEV_UMEM is not set ++# CONFIG_BLK_DEV_COW_COMMON is not set ++CONFIG_BLK_DEV_LOOP=y ++# CONFIG_BLK_DEV_CRYPTOLOOP is not set ++# CONFIG_BLK_DEV_NBD is not set ++# CONFIG_BLK_DEV_SX8 is not set ++# CONFIG_BLK_DEV_UB is not set ++CONFIG_BLK_DEV_RAM=y ++CONFIG_BLK_DEV_RAM_COUNT=16 ++CONFIG_BLK_DEV_RAM_SIZE=4096 ++# CONFIG_BLK_DEV_INITRD is not set ++# CONFIG_LBD is not set ++# CONFIG_CDROM_PKTCDVD is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++CONFIG_IOSCHED_AS=y ++CONFIG_IOSCHED_DEADLINE=y ++CONFIG_IOSCHED_CFQ=y ++# CONFIG_ATA_OVER_ETH is not set ++ ++# ++# ATA/ATAPI/MFM/RLL support ++# ++CONFIG_IDE=y ++CONFIG_IDE_MAX_HWIFS=4 ++CONFIG_BLK_DEV_IDE=y ++ ++# ++# Please see Documentation/ide.txt for help/info on IDE drives ++# ++# CONFIG_BLK_DEV_IDE_SATA is not set ++CONFIG_BLK_DEV_IDEDISK=y ++# CONFIG_IDEDISK_MULTI_MODE is not set ++# CONFIG_BLK_DEV_IDECS is not set ++CONFIG_BLK_DEV_IDECD=y ++# CONFIG_BLK_DEV_IDETAPE is not set ++# CONFIG_BLK_DEV_IDEFLOPPY is not set ++CONFIG_BLK_DEV_IDESCSI=y ++# CONFIG_IDE_TASK_IOCTL is not set ++ ++# ++# IDE chipset support/bugfixes ++# ++CONFIG_IDE_GENERIC=y ++CONFIG_BLK_DEV_IDEPCI=y ++CONFIG_IDEPCI_SHARE_IRQ=y ++CONFIG_BLK_DEV_OFFBOARD=y ++CONFIG_BLK_DEV_GENERIC=y ++# CONFIG_BLK_DEV_OPTI621 is not set ++CONFIG_BLK_DEV_IDEDMA_PCI=y ++# CONFIG_BLK_DEV_IDEDMA_FORCED is not set ++CONFIG_IDEDMA_PCI_AUTO=y ++CONFIG_IDEDMA_ONLYDISK=y ++CONFIG_BLK_DEV_AEC62XX=y ++# CONFIG_BLK_DEV_ALI15X3 is not set ++# CONFIG_BLK_DEV_AMD74XX is not set ++# CONFIG_BLK_DEV_CMD64X is not set ++# CONFIG_BLK_DEV_TRIFLEX is not set ++# CONFIG_BLK_DEV_CY82C693 is not set ++# CONFIG_BLK_DEV_CS5520 is not set ++# CONFIG_BLK_DEV_CS5530 is not set ++# CONFIG_BLK_DEV_HPT34X is not set ++# CONFIG_BLK_DEV_HPT366 is not set ++# CONFIG_BLK_DEV_SC1200 is not set ++# CONFIG_BLK_DEV_PIIX is not set ++# CONFIG_BLK_DEV_IT821X is not set ++# CONFIG_BLK_DEV_NS87415 is not set ++# CONFIG_BLK_DEV_PDC202XX_OLD is not set ++# CONFIG_BLK_DEV_PDC202XX_NEW is not set ++# CONFIG_BLK_DEV_SVWKS is not set ++# CONFIG_BLK_DEV_SIIMAGE is not set ++# CONFIG_BLK_DEV_SLC90E66 is not set ++# CONFIG_BLK_DEV_TRM290 is not set ++# CONFIG_BLK_DEV_VIA82CXXX is not set ++CONFIG_IDE_SH=y ++# CONFIG_IDE_ARM is not set ++# CONFIG_IDE_CHIPSETS is not set ++CONFIG_BLK_DEV_IDEDMA=y ++# CONFIG_IDEDMA_IVB is not set ++CONFIG_IDEDMA_AUTO=y ++# CONFIG_BLK_DEV_HD is not set ++ ++# ++# SCSI device support ++# ++# CONFIG_RAID_ATTRS is not set ++CONFIG_SCSI=y ++CONFIG_SCSI_PROC_FS=y ++ ++# ++# SCSI support type (disk, tape, CD-ROM) ++# ++CONFIG_BLK_DEV_SD=y ++# CONFIG_CHR_DEV_ST is not set ++# CONFIG_CHR_DEV_OSST is not set ++# CONFIG_BLK_DEV_SR is not set ++# CONFIG_CHR_DEV_SG is not set ++# CONFIG_CHR_DEV_SCH is not set ++ ++# ++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs ++# ++CONFIG_SCSI_MULTI_LUN=y ++# CONFIG_SCSI_CONSTANTS is not set ++# CONFIG_SCSI_LOGGING is not set ++ ++# ++# SCSI Transport Attributes ++# ++# CONFIG_SCSI_SPI_ATTRS is not set ++# CONFIG_SCSI_FC_ATTRS is not set ++# CONFIG_SCSI_ISCSI_ATTRS is not set ++# CONFIG_SCSI_SAS_ATTRS is not set ++ ++# ++# SCSI low-level drivers ++# ++# CONFIG_BLK_DEV_3W_XXXX_RAID is not set ++# CONFIG_SCSI_3W_9XXX is not set ++# CONFIG_SCSI_ACARD is not set ++# CONFIG_SCSI_AHA152X is not set ++# CONFIG_SCSI_AACRAID is not set ++# CONFIG_SCSI_AIC7XXX is not set ++# CONFIG_SCSI_AIC7XXX_OLD is not set ++# CONFIG_SCSI_AIC79XX is not set ++# CONFIG_SCSI_DPT_I2O is not set ++# CONFIG_SCSI_IN2000 is not set ++# CONFIG_MEGARAID_NEWGEN is not set ++# CONFIG_MEGARAID_LEGACY is not set ++# CONFIG_MEGARAID_SAS is not set ++# CONFIG_SCSI_SATA is not set ++# CONFIG_SCSI_DMX3191D is not set ++# CONFIG_SCSI_DTC3280 is not set ++# CONFIG_SCSI_FUTURE_DOMAIN is not set ++# CONFIG_SCSI_GENERIC_NCR5380 is not set ++# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set ++# CONFIG_SCSI_IPS is not set ++# CONFIG_SCSI_INITIO is not set ++# CONFIG_SCSI_INIA100 is not set ++# CONFIG_SCSI_NCR53C406A is not set ++# CONFIG_SCSI_SYM53C8XX_2 is not set ++# CONFIG_SCSI_IPR is not set ++# CONFIG_SCSI_PAS16 is not set ++# CONFIG_SCSI_PSI240I is not set ++# CONFIG_SCSI_QLOGIC_FAS is not set ++# CONFIG_SCSI_QLOGIC_FC is not set ++# CONFIG_SCSI_QLOGIC_1280 is not set ++CONFIG_SCSI_QLA2XXX=y ++# CONFIG_SCSI_QLA21XX is not set ++# CONFIG_SCSI_QLA22XX is not set ++# CONFIG_SCSI_QLA2300 is not set ++# CONFIG_SCSI_QLA2322 is not set ++# CONFIG_SCSI_QLA6312 is not set ++# CONFIG_SCSI_QLA24XX is not set ++# CONFIG_SCSI_LPFC is not set ++# CONFIG_SCSI_SYM53C416 is not set ++# CONFIG_SCSI_DC395x is not set ++# CONFIG_SCSI_DC390T is not set ++# CONFIG_SCSI_T128 is not set ++# CONFIG_SCSI_NSP32 is not set ++# CONFIG_SCSI_DEBUG is not set ++ ++# ++# PCMCIA SCSI adapter support ++# ++# CONFIG_PCMCIA_AHA152X is not set ++# CONFIG_PCMCIA_FDOMAIN is not set ++# CONFIG_PCMCIA_NINJA_SCSI is not set ++# CONFIG_PCMCIA_QLOGIC is not set ++# CONFIG_PCMCIA_SYM53C500 is not set ++ ++# ++# Old CD-ROM drivers (not SCSI, not IDE) ++# ++# CONFIG_CD_NO_IDESCSI is not set ++ ++# ++# Multi-device support (RAID and LVM) ++# ++CONFIG_MD=y ++CONFIG_BLK_DEV_MD=m ++CONFIG_MD_LINEAR=m ++CONFIG_MD_RAID0=m ++CONFIG_MD_RAID1=m ++# CONFIG_MD_RAID10 is not set ++# CONFIG_MD_RAID5 is not set ++# CONFIG_MD_RAID6 is not set ++# CONFIG_MD_MULTIPATH is not set ++# CONFIG_MD_FAULTY is not set ++# CONFIG_BLK_DEV_DM is not set ++ ++# ++# Fusion MPT device support ++# ++# CONFIG_FUSION is not set ++# CONFIG_FUSION_SPI is not set ++# CONFIG_FUSION_FC is not set ++# CONFIG_FUSION_SAS is not set ++ ++# ++# IEEE 1394 (FireWire) support ++# ++# CONFIG_IEEE1394 is not set ++ ++# ++# I2O device support ++# ++# CONFIG_I2O is not set ++ ++# ++# Network device support ++# ++CONFIG_NETDEVICES=y ++# CONFIG_DUMMY is not set ++# CONFIG_BONDING is not set ++# CONFIG_EQUALIZER is not set ++CONFIG_TUN=m ++ ++# ++# ARCnet devices ++# ++# CONFIG_ARCNET is not set ++ ++# ++# PHY device support ++# ++# CONFIG_PHYLIB is not set ++ ++# ++# Ethernet (10 or 100Mbit) ++# ++CONFIG_NET_ETHERNET=y ++CONFIG_MII=y ++# CONFIG_STNIC is not set ++# CONFIG_HAPPYMEAL is not set ++# CONFIG_SUNGEM is not set ++# CONFIG_CASSINI is not set ++# CONFIG_NET_VENDOR_3COM is not set ++# CONFIG_NET_VENDOR_SMC is not set ++# CONFIG_SMC91X is not set ++# CONFIG_NET_VENDOR_RACAL is not set ++ ++# ++# Tulip family network device support ++# ++# CONFIG_NET_TULIP is not set ++# CONFIG_AT1700 is not set ++# CONFIG_DEPCA is not set ++# CONFIG_HP100 is not set ++# CONFIG_NET_ISA is not set ++# CONFIG_NE2000 is not set ++CONFIG_NET_PCI=y ++# CONFIG_PCNET32 is not set ++# CONFIG_AMD8111_ETH is not set ++# CONFIG_ADAPTEC_STARFIRE is not set ++# CONFIG_AC3200 is not set ++# CONFIG_APRICOT is not set ++# CONFIG_B44 is not set ++# CONFIG_FORCEDETH is not set ++# CONFIG_CS89x0 is not set ++# CONFIG_DGRS is not set ++# CONFIG_EEPRO100 is not set ++# CONFIG_E100 is not set ++# CONFIG_FEALNX is not set ++# CONFIG_NATSEMI is not set ++# CONFIG_NE2K_PCI is not set ++CONFIG_8139CP=y ++# CONFIG_8139TOO is not set ++# CONFIG_SIS900 is not set ++# CONFIG_EPIC100 is not set ++# CONFIG_SUNDANCE is not set ++# CONFIG_TLAN is not set ++# CONFIG_VIA_RHINE is not set ++ ++# ++# Ethernet (1000 Mbit) ++# ++# CONFIG_ACENIC is not set ++# CONFIG_DL2K is not set ++# CONFIG_E1000 is not set ++# CONFIG_NS83820 is not set ++# CONFIG_HAMACHI is not set ++# CONFIG_YELLOWFIN is not set ++# CONFIG_R8169 is not set ++# CONFIG_SIS190 is not set ++# CONFIG_SKGE is not set ++# CONFIG_SK98LIN is not set ++# CONFIG_VIA_VELOCITY is not set ++# CONFIG_TIGON3 is not set ++# CONFIG_BNX2 is not set ++ ++# ++# Ethernet (10000 Mbit) ++# ++# CONFIG_CHELSIO_T1 is not set ++# CONFIG_IXGB is not set ++# CONFIG_S2IO is not set ++ ++# ++# Token Ring devices ++# ++# CONFIG_TR is not set ++ ++# ++# Wireless LAN (non-hamradio) ++# ++# CONFIG_NET_RADIO is not set ++ ++# ++# PCMCIA network device support ++# ++# CONFIG_NET_PCMCIA is not set ++ ++# ++# Wan interfaces ++# ++# CONFIG_WAN is not set ++# CONFIG_FDDI is not set ++# CONFIG_HIPPI is not set ++# CONFIG_PPP is not set ++# CONFIG_SLIP is not set ++# CONFIG_NET_FC is not set ++# CONFIG_SHAPER is not set ++# CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set ++ ++# ++# ISDN subsystem ++# ++# CONFIG_ISDN is not set ++ ++# ++# Telephony Support ++# ++# CONFIG_PHONE is not set ++ ++# ++# Input device support ++# ++CONFIG_INPUT=y ++ ++# ++# Userland interfaces ++# ++CONFIG_INPUT_MOUSEDEV=y ++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set ++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 ++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 ++# CONFIG_INPUT_JOYDEV is not set ++# CONFIG_INPUT_TSDEV is not set ++# CONFIG_INPUT_EVDEV is not set ++# CONFIG_INPUT_EVBUG is not set ++ ++# ++# Input Device Drivers ++# ++# CONFIG_INPUT_KEYBOARD is not set ++# CONFIG_INPUT_MOUSE is not set ++# CONFIG_INPUT_JOYSTICK is not set ++# CONFIG_INPUT_TOUCHSCREEN is not set ++# CONFIG_INPUT_MISC is not set ++ ++# ++# Hardware I/O ports ++# ++# CONFIG_SERIO is not set ++# CONFIG_GAMEPORT is not set ++ ++# ++# Character devices ++# ++CONFIG_VT=y ++CONFIG_VT_CONSOLE=y ++CONFIG_HW_CONSOLE=y ++# CONFIG_SERIAL_NONSTANDARD is not set ++ ++# ++# Serial drivers ++# ++# CONFIG_SERIAL_8250 is not set ++ ++# ++# Non-8250 serial port support ++# ++CONFIG_SERIAL_SH_SCI=y ++CONFIG_SERIAL_SH_SCI_CONSOLE=y ++CONFIG_SERIAL_CORE=y ++CONFIG_SERIAL_CORE_CONSOLE=y ++# CONFIG_SERIAL_JSM is not set ++CONFIG_UNIX98_PTYS=y ++CONFIG_LEGACY_PTYS=y ++CONFIG_LEGACY_PTY_COUNT=256 ++ ++# ++# IPMI ++# ++# CONFIG_IPMI_HANDLER is not set ++ ++# ++# Watchdog Cards ++# ++# CONFIG_WATCHDOG is not set ++# CONFIG_RTC is not set ++CONFIG_RS5C313_RTC=y ++# CONFIG_GEN_RTC is not set ++# CONFIG_DTLK is not set ++# CONFIG_R3964 is not set ++# CONFIG_APPLICOM is not set ++ ++# ++# Ftape, the floppy tape device driver ++# ++# CONFIG_DRM is not set ++ ++# ++# PCMCIA character devices ++# ++# CONFIG_SYNCLINK_CS is not set ++# CONFIG_RAW_DRIVER is not set ++ ++# ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++ ++# ++# I2C support ++# ++# CONFIG_I2C is not set ++ ++# ++# Dallas's 1-wire bus ++# ++# CONFIG_W1 is not set ++ ++# ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# ++# Misc devices ++# ++ ++# ++# Multimedia Capabilities Port drivers ++# ++ ++# ++# Multimedia devices ++# ++CONFIG_VIDEO_DEV=m ++ ++# ++# Video For Linux ++# ++ ++# ++# Video Adapters ++# ++# CONFIG_VIDEO_PMS is not set ++# CONFIG_VIDEO_CPIA is not set ++# CONFIG_VIDEO_STRADIS is not set ++# CONFIG_VIDEO_MXB is not set ++# CONFIG_VIDEO_DPC is not set ++# CONFIG_VIDEO_HEXIUM_ORION is not set ++# CONFIG_VIDEO_HEXIUM_GEMINI is not set ++ ++# ++# Radio Adapters ++# ++# CONFIG_RADIO_CADET is not set ++# CONFIG_RADIO_RTRACK is not set ++# CONFIG_RADIO_RTRACK2 is not set ++# CONFIG_RADIO_AZTECH is not set ++# CONFIG_RADIO_GEMTEK is not set ++# CONFIG_RADIO_GEMTEK_PCI is not set ++# CONFIG_RADIO_MAXIRADIO is not set ++# CONFIG_RADIO_MAESTRO is not set ++# CONFIG_RADIO_SF16FMI is not set ++# CONFIG_RADIO_SF16FMR2 is not set ++# CONFIG_RADIO_TERRATEC is not set ++# CONFIG_RADIO_TRUST is not set ++# CONFIG_RADIO_TYPHOON is not set ++# CONFIG_RADIO_ZOLTRIX is not set ++ ++# ++# Digital Video Broadcasting Devices ++# ++# CONFIG_DVB is not set ++ ++# ++# Graphics support ++# ++# CONFIG_FB is not set ++ ++# ++# Console display driver support ++# ++# CONFIG_MDA_CONSOLE is not set ++CONFIG_DUMMY_CONSOLE=y ++CONFIG_FONT_8x16=y ++ ++# ++# Sound ++# ++CONFIG_SOUND=m ++ ++# ++# Advanced Linux Sound Architecture ++# ++# CONFIG_SND is not set ++ ++# ++# Open Sound System ++# ++CONFIG_SOUND_PRIME=m ++# CONFIG_SOUND_BT878 is not set ++# CONFIG_SOUND_CMPCI is not set ++# CONFIG_SOUND_EMU10K1 is not set ++# CONFIG_SOUND_FUSION is not set ++# CONFIG_SOUND_CS4281 is not set ++# CONFIG_SOUND_ES1370 is not set ++# CONFIG_SOUND_ES1371 is not set ++# CONFIG_SOUND_ESSSOLO1 is not set ++# CONFIG_SOUND_MAESTRO is not set ++# CONFIG_SOUND_MAESTRO3 is not set ++# CONFIG_SOUND_ICH is not set ++# CONFIG_SOUND_SONICVIBES is not set ++# CONFIG_SOUND_TRIDENT is not set ++# CONFIG_SOUND_MSNDCLAS is not set ++# CONFIG_SOUND_MSNDPIN is not set ++# CONFIG_SOUND_VIA82CXXX is not set ++# CONFIG_SOUND_ALI5455 is not set ++# CONFIG_SOUND_FORTE is not set ++# CONFIG_SOUND_RME96XX is not set ++# CONFIG_SOUND_AD1980 is not set ++ ++# ++# USB support ++# ++CONFIG_USB_ARCH_HAS_HCD=y ++CONFIG_USB_ARCH_HAS_OHCI=y ++CONFIG_USB=y ++# CONFIG_USB_DEBUG is not set ++ ++# ++# Miscellaneous USB options ++# ++CONFIG_USB_DEVICEFS=y ++# CONFIG_USB_BANDWIDTH is not set ++# CONFIG_USB_DYNAMIC_MINORS is not set ++# CONFIG_USB_OTG is not set ++ ++# ++# USB Host Controller Drivers ++# ++CONFIG_USB_EHCI_HCD=y ++# CONFIG_USB_EHCI_SPLIT_ISO is not set ++# CONFIG_USB_EHCI_ROOT_HUB_TT is not set ++# CONFIG_USB_ISP116X_HCD is not set ++CONFIG_USB_OHCI_HCD=y ++# CONFIG_USB_OHCI_BIG_ENDIAN is not set ++CONFIG_USB_OHCI_LITTLE_ENDIAN=y ++# CONFIG_USB_UHCI_HCD is not set ++# CONFIG_USB_SL811_HCD is not set ++ ++# ++# USB Device Class drivers ++# ++CONFIG_OBSOLETE_OSS_USB_DRIVER=y ++CONFIG_USB_AUDIO=m ++# CONFIG_USB_BLUETOOTH_TTY is not set ++CONFIG_USB_MIDI=m ++# CONFIG_USB_ACM is not set ++CONFIG_USB_PRINTER=m ++ ++# ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information ++# ++CONFIG_USB_STORAGE=m ++# CONFIG_USB_STORAGE_DEBUG is not set ++CONFIG_USB_STORAGE_DATAFAB=y ++CONFIG_USB_STORAGE_FREECOM=y ++CONFIG_USB_STORAGE_ISD200=y ++CONFIG_USB_STORAGE_DPCM=y ++# CONFIG_USB_STORAGE_USBAT is not set ++CONFIG_USB_STORAGE_SDDR09=y ++CONFIG_USB_STORAGE_SDDR55=y ++CONFIG_USB_STORAGE_JUMPSHOT=y ++ ++# ++# USB Input Devices ++# ++CONFIG_USB_HID=m ++CONFIG_USB_HIDINPUT=y ++# CONFIG_HID_FF is not set ++# CONFIG_USB_HIDDEV is not set ++ ++# ++# USB HID Boot Protocol drivers ++# ++# CONFIG_USB_KBD is not set ++# CONFIG_USB_MOUSE is not set ++# CONFIG_USB_AIPTEK is not set ++# CONFIG_USB_WACOM is not set ++# CONFIG_USB_ACECAD is not set ++# CONFIG_USB_KBTAB is not set ++# CONFIG_USB_POWERMATE is not set ++# CONFIG_USB_MTOUCH is not set ++# CONFIG_USB_ITMTOUCH is not set ++# CONFIG_USB_EGALAX is not set ++# CONFIG_USB_YEALINK is not set ++# CONFIG_USB_XPAD is not set ++# CONFIG_USB_ATI_REMOTE is not set ++# CONFIG_USB_KEYSPAN_REMOTE is not set ++# CONFIG_USB_APPLETOUCH is not set ++ ++# ++# USB Imaging devices ++# ++# CONFIG_USB_MDC800 is not set ++# CONFIG_USB_MICROTEK is not set ++ ++# ++# USB Multimedia devices ++# ++CONFIG_USB_DABUSB=m ++CONFIG_USB_VICAM=m ++CONFIG_USB_DSBR=m ++CONFIG_USB_IBMCAM=m ++CONFIG_USB_KONICAWC=m ++CONFIG_USB_OV511=m ++CONFIG_USB_SE401=m ++CONFIG_USB_SN9C102=m ++CONFIG_USB_STV680=m ++CONFIG_USB_PWC=m ++ ++# ++# USB Network Adapters ++# ++# CONFIG_USB_CATC is not set ++# CONFIG_USB_KAWETH is not set ++CONFIG_USB_PEGASUS=m ++CONFIG_USB_RTL8150=m ++# CONFIG_USB_USBNET is not set ++CONFIG_USB_MON=y ++ ++# ++# USB port drivers ++# ++ ++# ++# USB Serial Converter support ++# ++CONFIG_USB_SERIAL=m ++# CONFIG_USB_SERIAL_GENERIC is not set ++# CONFIG_USB_SERIAL_AIRPRIME is not set ++# CONFIG_USB_SERIAL_BELKIN is not set ++# CONFIG_USB_SERIAL_WHITEHEAT is not set ++# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set ++# CONFIG_USB_SERIAL_CP2101 is not set ++# CONFIG_USB_SERIAL_CYPRESS_M8 is not set ++# CONFIG_USB_SERIAL_EMPEG is not set ++CONFIG_USB_SERIAL_FTDI_SIO=m ++# CONFIG_USB_SERIAL_VISOR is not set ++# CONFIG_USB_SERIAL_IPAQ is not set ++# CONFIG_USB_SERIAL_IR is not set ++# CONFIG_USB_SERIAL_EDGEPORT is not set ++# CONFIG_USB_SERIAL_EDGEPORT_TI is not set ++# CONFIG_USB_SERIAL_GARMIN is not set ++# CONFIG_USB_SERIAL_IPW is not set ++# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set ++# CONFIG_USB_SERIAL_KEYSPAN is not set ++# CONFIG_USB_SERIAL_KLSI is not set ++# CONFIG_USB_SERIAL_KOBIL_SCT is not set ++# CONFIG_USB_SERIAL_MCT_U232 is not set ++CONFIG_USB_SERIAL_PL2303=m ++# CONFIG_USB_SERIAL_HP4X is not set ++# CONFIG_USB_SERIAL_SAFE is not set ++# CONFIG_USB_SERIAL_TI is not set ++# CONFIG_USB_SERIAL_CYBERJACK is not set ++# CONFIG_USB_SERIAL_XIRCOM is not set ++# CONFIG_USB_SERIAL_OPTION is not set ++# CONFIG_USB_SERIAL_OMNINET is not set ++ ++# ++# USB Miscellaneous drivers ++# ++CONFIG_USB_EMI62=m ++CONFIG_USB_EMI26=m ++# CONFIG_USB_AUERSWALD is not set ++# CONFIG_USB_RIO500 is not set ++# CONFIG_USB_LEGOTOWER is not set ++# CONFIG_USB_LCD is not set ++# CONFIG_USB_LED is not set ++# CONFIG_USB_CYTHERM is not set ++# CONFIG_USB_PHIDGETKIT is not set ++# CONFIG_USB_PHIDGETSERVO is not set ++# CONFIG_USB_IDMOUSE is not set ++CONFIG_USB_SISUSBVGA=m ++CONFIG_USB_SISUSBVGA_CON=y ++# CONFIG_USB_LD is not set ++# CONFIG_USB_TEST is not set ++ ++# ++# USB DSL modem support ++# ++ ++# ++# USB Gadget Support ++# ++# CONFIG_USB_GADGET is not set ++ ++# ++# MMC/SD Card support ++# ++# CONFIG_MMC is not set ++ ++# ++# InfiniBand support ++# ++# CONFIG_INFINIBAND is not set ++ ++# ++# SN Devices ++# ++ ++# ++# File systems ++# ++CONFIG_EXT2_FS=y ++# CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set ++CONFIG_EXT3_FS=y ++CONFIG_EXT3_FS_XATTR=y ++# CONFIG_EXT3_FS_POSIX_ACL is not set ++# CONFIG_EXT3_FS_SECURITY is not set ++CONFIG_JBD=y ++# CONFIG_JBD_DEBUG is not set ++CONFIG_FS_MBCACHE=y ++CONFIG_REISERFS_FS=y ++# CONFIG_REISERFS_CHECK is not set ++# CONFIG_REISERFS_PROC_INFO is not set ++# CONFIG_REISERFS_FS_XATTR is not set ++# CONFIG_JFS_FS is not set ++# CONFIG_FS_POSIX_ACL is not set ++# CONFIG_XFS_FS is not set ++# CONFIG_MINIX_FS is not set ++CONFIG_ROMFS_FS=y ++CONFIG_INOTIFY=y ++# CONFIG_QUOTA is not set ++CONFIG_DNOTIFY=y ++# CONFIG_AUTOFS_FS is not set ++# CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set ++ ++# ++# CD-ROM/DVD Filesystems ++# ++CONFIG_ISO9660_FS=m ++# CONFIG_JOLIET is not set ++# CONFIG_ZISOFS is not set ++# CONFIG_UDF_FS is not set ++ ++# ++# DOS/FAT/NT Filesystems ++# ++CONFIG_FAT_FS=y ++CONFIG_MSDOS_FS=y ++CONFIG_VFAT_FS=y ++CONFIG_FAT_DEFAULT_CODEPAGE=437 ++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" ++CONFIG_NTFS_FS=m ++# CONFIG_NTFS_DEBUG is not set ++CONFIG_NTFS_RW=y ++ ++# ++# Pseudo filesystems ++# ++CONFIG_PROC_FS=y ++# CONFIG_PROC_KCORE is not set ++CONFIG_SYSFS=y ++CONFIG_TMPFS=y ++# CONFIG_HUGETLBFS is not set ++# CONFIG_HUGETLB_PAGE is not set ++CONFIG_RAMFS=y ++# CONFIG_RELAYFS_FS is not set ++ ++# ++# Miscellaneous filesystems ++# ++# CONFIG_ADFS_FS is not set ++# CONFIG_AFFS_FS is not set ++# CONFIG_HFS_FS is not set ++# CONFIG_HFSPLUS_FS is not set ++# CONFIG_BEFS_FS is not set ++# CONFIG_BFS_FS is not set ++# CONFIG_EFS_FS is not set ++# CONFIG_CRAMFS is not set ++# CONFIG_VXFS_FS is not set ++# CONFIG_HPFS_FS is not set ++# CONFIG_QNX4FS_FS is not set ++# CONFIG_SYSV_FS is not set ++CONFIG_UFS_FS=m ++CONFIG_UFS_FS_WRITE=y ++ ++# ++# Network File Systems ++# ++CONFIG_NFS_FS=m ++CONFIG_NFS_V3=y ++# CONFIG_NFS_V3_ACL is not set ++# CONFIG_NFS_V4 is not set ++# CONFIG_NFS_DIRECTIO is not set ++CONFIG_NFSD=m ++CONFIG_NFSD_V3=y ++# CONFIG_NFSD_V3_ACL is not set ++# CONFIG_NFSD_V4 is not set ++CONFIG_NFSD_TCP=y ++CONFIG_LOCKD=m ++CONFIG_LOCKD_V4=y ++CONFIG_EXPORTFS=m ++CONFIG_NFS_COMMON=y ++CONFIG_SUNRPC=m ++# CONFIG_RPCSEC_GSS_KRB5 is not set ++# CONFIG_RPCSEC_GSS_SPKM3 is not set ++CONFIG_SMB_FS=m ++# CONFIG_SMB_NLS_DEFAULT is not set ++# CONFIG_CIFS is not set ++# CONFIG_NCP_FS is not set ++# CONFIG_CODA_FS is not set ++# CONFIG_AFS_FS is not set ++# CONFIG_9P_FS is not set ++ ++# ++# Partition Types ++# ++# CONFIG_PARTITION_ADVANCED is not set ++CONFIG_MSDOS_PARTITION=y ++ ++# ++# Native Language Support ++# ++CONFIG_NLS=y ++CONFIG_NLS_DEFAULT="iso8859-1" ++CONFIG_NLS_CODEPAGE_437=y ++# CONFIG_NLS_CODEPAGE_737 is not set ++# CONFIG_NLS_CODEPAGE_775 is not set ++# CONFIG_NLS_CODEPAGE_850 is not set ++# CONFIG_NLS_CODEPAGE_852 is not set ++# CONFIG_NLS_CODEPAGE_855 is not set ++# CONFIG_NLS_CODEPAGE_857 is not set ++# CONFIG_NLS_CODEPAGE_860 is not set ++# CONFIG_NLS_CODEPAGE_861 is not set ++# CONFIG_NLS_CODEPAGE_862 is not set ++# CONFIG_NLS_CODEPAGE_863 is not set ++# CONFIG_NLS_CODEPAGE_864 is not set ++# CONFIG_NLS_CODEPAGE_865 is not set ++# CONFIG_NLS_CODEPAGE_866 is not set ++# CONFIG_NLS_CODEPAGE_869 is not set ++# CONFIG_NLS_CODEPAGE_936 is not set ++# CONFIG_NLS_CODEPAGE_950 is not set ++CONFIG_NLS_CODEPAGE_932=y ++# CONFIG_NLS_CODEPAGE_949 is not set ++# CONFIG_NLS_CODEPAGE_874 is not set ++# CONFIG_NLS_ISO8859_8 is not set ++# CONFIG_NLS_CODEPAGE_1250 is not set ++# CONFIG_NLS_CODEPAGE_1251 is not set ++# CONFIG_NLS_ASCII is not set ++# CONFIG_NLS_ISO8859_1 is not set ++# CONFIG_NLS_ISO8859_2 is not set ++# CONFIG_NLS_ISO8859_3 is not set ++# CONFIG_NLS_ISO8859_4 is not set ++# CONFIG_NLS_ISO8859_5 is not set ++# CONFIG_NLS_ISO8859_6 is not set ++# CONFIG_NLS_ISO8859_7 is not set ++# CONFIG_NLS_ISO8859_9 is not set ++# CONFIG_NLS_ISO8859_13 is not set ++# CONFIG_NLS_ISO8859_14 is not set ++# CONFIG_NLS_ISO8859_15 is not set ++# CONFIG_NLS_KOI8_R is not set ++# CONFIG_NLS_KOI8_U is not set ++# CONFIG_NLS_UTF8 is not set ++ ++# ++# Profiling support ++# ++# CONFIG_PROFILING is not set ++ ++# ++# Kernel hacking ++# ++# CONFIG_PRINTK_TIME is not set ++# CONFIG_DEBUG_KERNEL is not set ++CONFIG_LOG_BUF_SHIFT=14 ++# CONFIG_FRAME_POINTER is not set ++CONFIG_SH_STANDARD_BIOS=y ++# CONFIG_EARLY_SCIF_CONSOLE is not set ++# CONFIG_EARLY_PRINTK is not set ++# CONFIG_KGDB is not set ++ ++# ++# Security options ++# ++# CONFIG_KEYS is not set ++# CONFIG_SECURITY is not set ++ ++# ++# Cryptographic options ++# ++# CONFIG_CRYPTO is not set ++ ++# ++# Hardware crypto devices ++# ++ ++# ++# Library routines ++# ++# CONFIG_CRC_CCITT is not set ++# CONFIG_CRC16 is not set ++CONFIG_CRC32=y ++# CONFIG_LIBCRC32C is not set +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/microdev_defconfig linux-2.6.17/arch/sh/configs/microdev_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/microdev_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/microdev_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,9 +1,10 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.16-rc1 +-# Fri Jan 27 19:43:20 2006 ++# Linux kernel version: 2.6.15-sh ++# Wed Jan 4 18:41:51 2006 + # + CONFIG_SUPERH=y ++CONFIG_UID16=y + CONFIG_RWSEM_GENERIC_SPINLOCK=y + CONFIG_GENERIC_HARDIRQS=y + CONFIG_GENERIC_IRQ_PROBE=y +@@ -30,17 +31,16 @@ + # CONFIG_BSD_PROCESS_ACCT_V3 is not set + CONFIG_SYSCTL=y + # CONFIG_AUDIT is not set ++CONFIG_HOTPLUG=y ++CONFIG_KOBJECT_UEVENT=y + # CONFIG_IKCONFIG is not set + CONFIG_INITRAMFS_SOURCE="" +-CONFIG_UID16=y + # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_EMBEDDED=y + CONFIG_KALLSYMS=y + # CONFIG_KALLSYMS_EXTRA_PASS is not set +-CONFIG_HOTPLUG=y + CONFIG_PRINTK=y + CONFIG_BUG=y +-CONFIG_ELF_CORE=y + CONFIG_BASE_FULL=y + CONFIG_FUTEX=y + CONFIG_EPOLL=y +@@ -49,10 +49,8 @@ + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 +-CONFIG_SLAB=y + # CONFIG_TINY_SHMEM is not set + CONFIG_BASE_SMALL=0 +-# CONFIG_SLOB is not set + + # + # Loadable module support +@@ -102,7 +100,6 @@ + # CONFIG_SH_SECUREEDGE5410 is not set + # CONFIG_SH_HS7751RVOIP is not set + # CONFIG_SH_RTS7751R2D is not set +-# CONFIG_SH_R7780RP is not set + # CONFIG_SH_EDOSK7705 is not set + CONFIG_SH_SH4202_MICRODEV=y + # CONFIG_SH_LANDISK is not set +@@ -157,6 +154,8 @@ + # Memory management options + # + CONFIG_MMU=y ++CONFIG_HUGETLB_PAGE_SIZE_64K=y ++# CONFIG_HUGETLB_PAGE_SIZE_1MB is not set + CONFIG_SELECT_MEMORY_MODEL=y + CONFIG_FLATMEM_MANUAL=y + # CONFIG_DISCONTIGMEM_MANUAL is not set +@@ -170,7 +169,7 @@ + # Cache configuration + # + # CONFIG_SH_DIRECT_MAPPED is not set +-# CONFIG_SH_WRITETHROUGH is not set ++CONFIG_SH_WRITETHROUGH=y + # CONFIG_SH_OCRAM is not set + CONFIG_MEMORY_START=0x08000000 + CONFIG_MEMORY_SIZE=0x04000000 +@@ -182,13 +181,12 @@ + CONFIG_SH_RTC=y + CONFIG_SH_FPU=y + # CONFIG_SH_STORE_QUEUES is not set +-CONFIG_CPU_HAS_INTEVT=y +-CONFIG_CPU_HAS_SR_RB=y + + # + # Timer support + # + CONFIG_SH_TMU=y ++CONFIG_SH_PCLK_FREQ_BOOL=y + CONFIG_SH_PCLK_FREQ=66000000 + + # +@@ -223,12 +221,12 @@ + CONFIG_BOOT_LINK_OFFSET=0x00800000 + # CONFIG_UBC_WAKEUP is not set + CONFIG_CMDLINE_BOOL=y +-CONFIG_CMDLINE="console=ttySC0,115200" ++CONFIG_CMDLINE="console=ttySC0,115200 root=/dev/hda1" + + # + # Bus options + # +-# CONFIG_SUPERHYWAY is not set ++CONFIG_SUPERHYWAY=y + # CONFIG_PCI is not set + + # +@@ -263,7 +261,7 @@ + # CONFIG_IP_ADVANCED_ROUTER is not set + CONFIG_IP_FIB_HASH=y + CONFIG_IP_PNP=y +-CONFIG_IP_PNP_DHCP=y ++# CONFIG_IP_PNP_DHCP is not set + # CONFIG_IP_PNP_BOOTP is not set + # CONFIG_IP_PNP_RARP is not set + # CONFIG_NET_IPIP is not set +@@ -290,11 +288,6 @@ + # SCTP Configuration (EXPERIMENTAL) + # + # CONFIG_IP_SCTP is not set +- +-# +-# TIPC Configuration (EXPERIMENTAL) +-# +-# CONFIG_TIPC is not set + # CONFIG_ATM is not set + # CONFIG_BRIDGE is not set + # CONFIG_VLAN_8021Q is not set +@@ -387,6 +380,7 @@ + # IDE chipset support/bugfixes + # + CONFIG_IDE_GENERIC=y ++CONFIG_IDE_SH=y + # CONFIG_IDE_ARM is not set + # CONFIG_BLK_DEV_IDEDMA is not set + # CONFIG_IDEDMA_AUTO is not set +@@ -437,6 +431,7 @@ + CONFIG_MII=y + # CONFIG_STNIC is not set + CONFIG_SMC91X=y ++# CONFIG_NE2000 is not set + + # + # Ethernet (1000 Mbit) +@@ -539,12 +534,6 @@ + # CONFIG_I2C is not set + + # +-# SPI support +-# +-# CONFIG_SPI is not set +-# CONFIG_SPI_MASTER is not set +- +-# + # Dallas's 1-wire bus + # + # CONFIG_W1 is not set +@@ -613,10 +602,6 @@ + # + + # +-# EDAC - error detection and reporting (RAS) +-# +- +-# + # File systems + # + CONFIG_EXT2_FS=y +@@ -633,7 +618,6 @@ + # CONFIG_JFS_FS is not set + # CONFIG_FS_POSIX_ACL is not set + # CONFIG_XFS_FS is not set +-# CONFIG_OCFS2_FS is not set + # CONFIG_MINIX_FS is not set + # CONFIG_ROMFS_FS is not set + CONFIG_INOTIFY=y +@@ -666,11 +650,10 @@ + CONFIG_PROC_KCORE=y + CONFIG_SYSFS=y + CONFIG_TMPFS=y +-# CONFIG_HUGETLBFS is not set +-# CONFIG_HUGETLB_PAGE is not set ++CONFIG_HUGETLBFS=y ++CONFIG_HUGETLB_PAGE=y + CONFIG_RAMFS=y + # CONFIG_RELAYFS_FS is not set +-# CONFIG_CONFIGFS_FS is not set + + # + # Miscellaneous filesystems +@@ -772,10 +755,9 @@ + # Kernel hacking + # + # CONFIG_PRINTK_TIME is not set +-# CONFIG_MAGIC_SYSRQ is not set + # CONFIG_DEBUG_KERNEL is not set + CONFIG_LOG_BUF_SHIFT=14 +-# CONFIG_FRAME_POINTER is not set ++CONFIG_FRAME_POINTER=y + # CONFIG_SH_STANDARD_BIOS is not set + # CONFIG_EARLY_SCIF_CONSOLE is not set + # CONFIG_KGDB is not set +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/r7780rp_defconfig linux-2.6.17/arch/sh/configs/r7780rp_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/r7780rp_defconfig 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/r7780rp_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,1140 @@ ++# ++# Automatically generated make config: don't edit ++# Linux kernel version: 2.6.17 ++# Wed Jul 5 17:40:33 2006 ++# ++CONFIG_SUPERH=y ++CONFIG_RWSEM_GENERIC_SPINLOCK=y ++CONFIG_GENERIC_FIND_NEXT_BIT=y ++CONFIG_GENERIC_HWEIGHT=y ++CONFIG_GENERIC_HARDIRQS=y ++CONFIG_GENERIC_IRQ_PROBE=y ++CONFIG_GENERIC_CALIBRATE_DELAY=y ++ ++# ++# Code maturity level options ++# ++CONFIG_EXPERIMENTAL=y ++CONFIG_BROKEN_ON_SMP=y ++CONFIG_LOCK_KERNEL=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 ++ ++# ++# General setup ++# ++CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y ++CONFIG_SWAP=y ++CONFIG_SYSVIPC=y ++# CONFIG_POSIX_MQUEUE is not set ++CONFIG_BSD_PROCESS_ACCT=y ++# CONFIG_BSD_PROCESS_ACCT_V3 is not set ++CONFIG_SYSCTL=y ++# CONFIG_AUDIT is not set ++CONFIG_IKCONFIG=y ++CONFIG_IKCONFIG_PROC=y ++# CONFIG_RELAY is not set ++CONFIG_INITRAMFS_SOURCE="" ++CONFIG_UID16=y ++CONFIG_CC_OPTIMIZE_FOR_SIZE=y ++CONFIG_EMBEDDED=y ++CONFIG_KALLSYMS=y ++# CONFIG_KALLSYMS_ALL is not set ++# CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_HOTPLUG=y ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_ELF_CORE=y ++CONFIG_BASE_FULL=y ++# CONFIG_FUTEX is not set ++# CONFIG_EPOLL is not set ++CONFIG_SHMEM=y ++CONFIG_SLAB=y ++# CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 ++# CONFIG_SLOB is not set ++ ++# ++# Loadable module support ++# ++CONFIG_MODULES=y ++CONFIG_MODULE_UNLOAD=y ++# CONFIG_MODULE_FORCE_UNLOAD is not set ++# CONFIG_MODVERSIONS is not set ++# CONFIG_MODULE_SRCVERSION_ALL is not set ++CONFIG_KMOD=y ++ ++# ++# Block layer ++# ++# CONFIG_LBD is not set ++# CONFIG_BLK_DEV_IO_TRACE is not set ++# CONFIG_LSF is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++# CONFIG_IOSCHED_AS is not set ++# CONFIG_IOSCHED_DEADLINE is not set ++# CONFIG_IOSCHED_CFQ is not set ++# CONFIG_DEFAULT_AS is not set ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++CONFIG_DEFAULT_NOOP=y ++CONFIG_DEFAULT_IOSCHED="noop" ++ ++# ++# System type ++# ++# CONFIG_SH_SOLUTION_ENGINE is not set ++# CONFIG_SH_7751_SOLUTION_ENGINE is not set ++# CONFIG_SH_7300_SOLUTION_ENGINE is not set ++# CONFIG_SH_73180_SOLUTION_ENGINE is not set ++# CONFIG_SH_7751_SYSTEMH is not set ++# CONFIG_SH_STB1_HARP is not set ++# CONFIG_SH_STB1_OVERDRIVE is not set ++# CONFIG_SH_HP6XX is not set ++# CONFIG_SH_CQREEK is not set ++# CONFIG_SH_DMIDA is not set ++# CONFIG_SH_EC3104 is not set ++# CONFIG_SH_SATURN is not set ++# CONFIG_SH_DREAMCAST is not set ++# CONFIG_SH_CAT68701 is not set ++# CONFIG_SH_BIGSUR is not set ++# CONFIG_SH_SH2000 is not set ++# CONFIG_SH_ADX is not set ++# CONFIG_SH_MPC1211 is not set ++# CONFIG_SH_SH03 is not set ++# CONFIG_SH_SECUREEDGE5410 is not set ++# CONFIG_SH_HS7751RVOIP is not set ++# CONFIG_SH_RTS7751R2D is not set ++CONFIG_SH_R7780RP=y ++# CONFIG_SH_EDOSK7705 is not set ++# CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set ++# CONFIG_SH_TITAN is not set ++# CONFIG_SH_UNKNOWN is not set ++ ++# ++# Processor selection ++# ++CONFIG_CPU_SH4=y ++CONFIG_CPU_SH4A=y ++ ++# ++# SH-2 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH7300 is not set ++# CONFIG_CPU_SUBTYPE_SH7705 is not set ++# CONFIG_CPU_SUBTYPE_SH7707 is not set ++# CONFIG_CPU_SUBTYPE_SH7708 is not set ++# CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH7750 is not set ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set ++# CONFIG_CPU_SUBTYPE_SH7751 is not set ++# CONFIG_CPU_SUBTYPE_SH7751R is not set ++# CONFIG_CPU_SUBTYPE_SH7760 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_ST40STB1 is not set ++# CONFIG_CPU_SUBTYPE_ST40GX1 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++CONFIG_CPU_SUBTYPE_SH7780=y ++ ++# ++# Memory management options ++# ++CONFIG_MMU=y ++CONFIG_32BIT=y ++CONFIG_HUGETLB_PAGE_SIZE_64K=y ++# CONFIG_HUGETLB_PAGE_SIZE_1MB is not set ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set ++CONFIG_MEMORY_START=0x08000000 ++CONFIG_MEMORY_SIZE=0x08000000 ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y ++CONFIG_SH_FPU=y ++CONFIG_SH_STORE_QUEUES=y ++CONFIG_CPU_HAS_INTEVT=y ++CONFIG_CPU_HAS_INTC2_IRQ=y ++CONFIG_CPU_HAS_SR_RB=y ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++CONFIG_SH_PCLK_FREQ=32000000 ++ ++# ++# CPU Frequency scaling ++# ++# CONFIG_CPU_FREQ is not set ++ ++# ++# DMA support ++# ++CONFIG_SH_DMA=y ++CONFIG_NR_ONCHIP_DMA_CHANNELS=6 ++# CONFIG_NR_DMA_CHANNELS_BOOL is not set ++ ++# ++# Companion Chips ++# ++# CONFIG_HD6446X_SERIES is not set ++ ++# ++# Kernel features ++# ++# CONFIG_KEXEC is not set ++CONFIG_PREEMPT=y ++# CONFIG_SMP is not set ++ ++# ++# Boot options ++# ++CONFIG_ZERO_PAGE_OFFSET=0x00001000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++CONFIG_CMDLINE_BOOL=y ++CONFIG_CMDLINE="mem=128M console=ttySC0,115200 root=/dev/hda1" ++ ++# ++# Bus options ++# ++CONFIG_PCI=y ++CONFIG_SH_PCIDMA_NONCOHERENT=y ++CONFIG_PCI_AUTO=y ++CONFIG_PCI_AUTO_UPDATE_RESOURCES=y ++# CONFIG_PCI_DEBUG is not set ++ ++# ++# PCCARD (PCMCIA/CardBus) support ++# ++# CONFIG_PCCARD is not set ++ ++# ++# PCI Hotplug Support ++# ++CONFIG_HOTPLUG_PCI=y ++# CONFIG_HOTPLUG_PCI_FAKE is not set ++# CONFIG_HOTPLUG_PCI_CPCI is not set ++# CONFIG_HOTPLUG_PCI_SHPC is not set ++ ++# ++# Executable file formats ++# ++CONFIG_BINFMT_ELF=y ++# CONFIG_BINFMT_FLAT is not set ++# CONFIG_BINFMT_MISC is not set ++ ++# ++# Power management options (EXPERIMENTAL) ++# ++# CONFIG_PM is not set ++ ++# ++# Networking ++# ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++# CONFIG_NETDEBUG is not set ++CONFIG_PACKET=y ++# CONFIG_PACKET_MMAP is not set ++CONFIG_UNIX=y ++# CONFIG_NET_KEY is not set ++CONFIG_INET=y ++# CONFIG_IP_MULTICAST is not set ++CONFIG_IP_ADVANCED_ROUTER=y ++CONFIG_ASK_IP_FIB_HASH=y ++# CONFIG_IP_FIB_TRIE is not set ++CONFIG_IP_FIB_HASH=y ++# CONFIG_IP_MULTIPLE_TABLES is not set ++# CONFIG_IP_ROUTE_MULTIPATH is not set ++# CONFIG_IP_ROUTE_VERBOSE is not set ++CONFIG_IP_PNP=y ++CONFIG_IP_PNP_DHCP=y ++# CONFIG_IP_PNP_BOOTP is not set ++# CONFIG_IP_PNP_RARP is not set ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_XFRM_TUNNEL is not set ++# CONFIG_INET_TUNNEL is not set ++CONFIG_INET_DIAG=y ++CONFIG_INET_TCP_DIAG=y ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++# CONFIG_IPV6 is not set ++# CONFIG_INET6_XFRM_TUNNEL is not set ++# CONFIG_INET6_TUNNEL is not set ++# CONFIG_NETFILTER is not set ++ ++# ++# DCCP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_DCCP is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++ ++# ++# TIPC Configuration (EXPERIMENTAL) ++# ++# CONFIG_TIPC is not set ++# CONFIG_ATM is not set ++CONFIG_BRIDGE=m ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++CONFIG_LLC=m ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_NET_DIVERT is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++ ++# ++# QoS and/or fair queueing ++# ++# CONFIG_NET_SCHED is not set ++ ++# ++# Network testing ++# ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++# CONFIG_IEEE80211 is not set ++CONFIG_WIRELESS_EXT=y ++ ++# ++# Device Drivers ++# ++ ++# ++# Generic Driver Options ++# ++CONFIG_STANDALONE=y ++CONFIG_PREVENT_FIRMWARE_BUILD=y ++CONFIG_FW_LOADER=m ++# CONFIG_DEBUG_DRIVER is not set ++ ++# ++# Connector - unified userspace <-> kernelspace linker ++# ++# CONFIG_CONNECTOR is not set ++ ++# ++# Memory Technology Devices (MTD) ++# ++# CONFIG_MTD is not set ++ ++# ++# Parallel port support ++# ++# CONFIG_PARPORT is not set ++ ++# ++# Plug and Play support ++# ++ ++# ++# Block devices ++# ++# CONFIG_BLK_CPQ_DA is not set ++# CONFIG_BLK_CPQ_CISS_DA is not set ++# CONFIG_BLK_DEV_DAC960 is not set ++# CONFIG_BLK_DEV_UMEM is not set ++# CONFIG_BLK_DEV_COW_COMMON is not set ++# CONFIG_BLK_DEV_LOOP is not set ++# CONFIG_BLK_DEV_NBD is not set ++# CONFIG_BLK_DEV_SX8 is not set ++CONFIG_BLK_DEV_RAM=y ++CONFIG_BLK_DEV_RAM_COUNT=16 ++CONFIG_BLK_DEV_RAM_SIZE=4096 ++# CONFIG_BLK_DEV_INITRD is not set ++# CONFIG_CDROM_PKTCDVD is not set ++# CONFIG_ATA_OVER_ETH is not set ++ ++# ++# ATA/ATAPI/MFM/RLL support ++# ++CONFIG_IDE=m ++CONFIG_IDE_MAX_HWIFS=4 ++CONFIG_BLK_DEV_IDE=m ++ ++# ++# Please see Documentation/ide.txt for help/info on IDE drives ++# ++CONFIG_BLK_DEV_IDE_SATA=y ++CONFIG_BLK_DEV_IDEDISK=m ++CONFIG_IDEDISK_MULTI_MODE=y ++# CONFIG_BLK_DEV_IDECD is not set ++# CONFIG_BLK_DEV_IDETAPE is not set ++# CONFIG_BLK_DEV_IDEFLOPPY is not set ++CONFIG_BLK_DEV_IDESCSI=m ++# CONFIG_IDE_TASK_IOCTL is not set ++ ++# ++# IDE chipset support/bugfixes ++# ++CONFIG_IDE_GENERIC=m ++CONFIG_BLK_DEV_IDEPCI=y ++CONFIG_IDEPCI_SHARE_IRQ=y ++# CONFIG_BLK_DEV_OFFBOARD is not set ++CONFIG_BLK_DEV_GENERIC=m ++# CONFIG_BLK_DEV_OPTI621 is not set ++CONFIG_BLK_DEV_IDEDMA_PCI=y ++# CONFIG_BLK_DEV_IDEDMA_FORCED is not set ++CONFIG_IDEDMA_PCI_AUTO=y ++# CONFIG_IDEDMA_ONLYDISK is not set ++CONFIG_BLK_DEV_AEC62XX=m ++# CONFIG_BLK_DEV_ALI15X3 is not set ++# CONFIG_BLK_DEV_AMD74XX is not set ++# CONFIG_BLK_DEV_CMD64X is not set ++# CONFIG_BLK_DEV_TRIFLEX is not set ++# CONFIG_BLK_DEV_CY82C693 is not set ++# CONFIG_BLK_DEV_CS5520 is not set ++# CONFIG_BLK_DEV_CS5530 is not set ++# CONFIG_BLK_DEV_HPT34X is not set ++# CONFIG_BLK_DEV_HPT366 is not set ++# CONFIG_BLK_DEV_SC1200 is not set ++# CONFIG_BLK_DEV_PIIX is not set ++# CONFIG_BLK_DEV_IT821X is not set ++# CONFIG_BLK_DEV_NS87415 is not set ++# CONFIG_BLK_DEV_PDC202XX_OLD is not set ++CONFIG_BLK_DEV_PDC202XX_NEW=m ++# CONFIG_BLK_DEV_SVWKS is not set ++CONFIG_BLK_DEV_SIIMAGE=m ++# CONFIG_BLK_DEV_SLC90E66 is not set ++# CONFIG_BLK_DEV_TRM290 is not set ++# CONFIG_BLK_DEV_VIA82CXXX is not set ++CONFIG_IDE_SH=y ++# CONFIG_IDE_ARM is not set ++CONFIG_BLK_DEV_IDEDMA=y ++# CONFIG_IDEDMA_IVB is not set ++CONFIG_IDEDMA_AUTO=y ++# CONFIG_BLK_DEV_HD is not set ++ ++# ++# SCSI device support ++# ++# CONFIG_RAID_ATTRS is not set ++CONFIG_SCSI=m ++CONFIG_SCSI_PROC_FS=y ++ ++# ++# SCSI support type (disk, tape, CD-ROM) ++# ++CONFIG_BLK_DEV_SD=m ++# CONFIG_CHR_DEV_ST is not set ++# CONFIG_CHR_DEV_OSST is not set ++# CONFIG_BLK_DEV_SR is not set ++CONFIG_CHR_DEV_SG=m ++# CONFIG_CHR_DEV_SCH is not set ++ ++# ++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs ++# ++# CONFIG_SCSI_MULTI_LUN is not set ++# CONFIG_SCSI_CONSTANTS is not set ++# CONFIG_SCSI_LOGGING is not set ++ ++# ++# SCSI Transport Attributes ++# ++# CONFIG_SCSI_SPI_ATTRS is not set ++# CONFIG_SCSI_FC_ATTRS is not set ++# CONFIG_SCSI_ISCSI_ATTRS is not set ++# CONFIG_SCSI_SAS_ATTRS is not set ++ ++# ++# SCSI low-level drivers ++# ++# CONFIG_ISCSI_TCP is not set ++# CONFIG_BLK_DEV_3W_XXXX_RAID is not set ++# CONFIG_SCSI_3W_9XXX is not set ++# CONFIG_SCSI_ACARD is not set ++# CONFIG_SCSI_AACRAID is not set ++# CONFIG_SCSI_AIC7XXX is not set ++# CONFIG_SCSI_AIC7XXX_OLD is not set ++# CONFIG_SCSI_AIC79XX is not set ++# CONFIG_SCSI_DPT_I2O is not set ++# CONFIG_MEGARAID_NEWGEN is not set ++# CONFIG_MEGARAID_LEGACY is not set ++# CONFIG_MEGARAID_SAS is not set ++# CONFIG_SCSI_SATA is not set ++# CONFIG_SCSI_DMX3191D is not set ++# CONFIG_SCSI_FUTURE_DOMAIN is not set ++# CONFIG_SCSI_IPS is not set ++# CONFIG_SCSI_INITIO is not set ++# CONFIG_SCSI_INIA100 is not set ++# CONFIG_SCSI_SYM53C8XX_2 is not set ++# CONFIG_SCSI_IPR is not set ++# CONFIG_SCSI_QLOGIC_1280 is not set ++# CONFIG_SCSI_QLA_FC is not set ++# CONFIG_SCSI_LPFC is not set ++# CONFIG_SCSI_DC395x is not set ++# CONFIG_SCSI_DC390T is not set ++# CONFIG_SCSI_NSP32 is not set ++# CONFIG_SCSI_DEBUG is not set ++ ++# ++# Multi-device support (RAID and LVM) ++# ++# CONFIG_MD is not set ++ ++# ++# Fusion MPT device support ++# ++# CONFIG_FUSION is not set ++# CONFIG_FUSION_SPI is not set ++# CONFIG_FUSION_FC is not set ++# CONFIG_FUSION_SAS is not set ++ ++# ++# IEEE 1394 (FireWire) support ++# ++# CONFIG_IEEE1394 is not set ++ ++# ++# I2O device support ++# ++# CONFIG_I2O is not set ++ ++# ++# Network device support ++# ++CONFIG_NETDEVICES=y ++# CONFIG_DUMMY is not set ++# CONFIG_BONDING is not set ++# CONFIG_EQUALIZER is not set ++# CONFIG_TUN is not set ++ ++# ++# ARCnet devices ++# ++# CONFIG_ARCNET is not set ++ ++# ++# PHY device support ++# ++# CONFIG_PHYLIB is not set ++ ++# ++# Ethernet (10 or 100Mbit) ++# ++CONFIG_NET_ETHERNET=y ++CONFIG_MII=y ++# CONFIG_STNIC is not set ++# CONFIG_HAPPYMEAL is not set ++# CONFIG_SUNGEM is not set ++# CONFIG_CASSINI is not set ++# CONFIG_NET_VENDOR_3COM is not set ++# CONFIG_SMC91X is not set ++ ++# ++# Tulip family network device support ++# ++# CONFIG_NET_TULIP is not set ++# CONFIG_HP100 is not set ++CONFIG_NE2000=y ++CONFIG_NET_PCI=y ++CONFIG_PCNET32=m ++# CONFIG_AMD8111_ETH is not set ++# CONFIG_ADAPTEC_STARFIRE is not set ++# CONFIG_B44 is not set ++# CONFIG_FORCEDETH is not set ++# CONFIG_DGRS is not set ++# CONFIG_EEPRO100 is not set ++# CONFIG_E100 is not set ++# CONFIG_FEALNX is not set ++# CONFIG_NATSEMI is not set ++# CONFIG_NE2K_PCI is not set ++CONFIG_8139CP=m ++CONFIG_8139TOO=m ++# CONFIG_8139TOO_PIO is not set ++# CONFIG_8139TOO_TUNE_TWISTER is not set ++CONFIG_8139TOO_8129=y ++# CONFIG_8139_OLD_RX_RESET is not set ++# CONFIG_SIS900 is not set ++# CONFIG_EPIC100 is not set ++# CONFIG_SUNDANCE is not set ++# CONFIG_TLAN is not set ++CONFIG_VIA_RHINE=m ++CONFIG_VIA_RHINE_MMIO=y ++ ++# ++# Ethernet (1000 Mbit) ++# ++# CONFIG_ACENIC is not set ++# CONFIG_DL2K is not set ++CONFIG_E1000=m ++# CONFIG_E1000_NAPI is not set ++# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set ++# CONFIG_NS83820 is not set ++# CONFIG_HAMACHI is not set ++# CONFIG_YELLOWFIN is not set ++CONFIG_R8169=y ++# CONFIG_R8169_NAPI is not set ++# CONFIG_SIS190 is not set ++# CONFIG_SKGE is not set ++# CONFIG_SKY2 is not set ++# CONFIG_SK98LIN is not set ++# CONFIG_VIA_VELOCITY is not set ++# CONFIG_TIGON3 is not set ++# CONFIG_BNX2 is not set ++ ++# ++# Ethernet (10000 Mbit) ++# ++# CONFIG_CHELSIO_T1 is not set ++# CONFIG_IXGB is not set ++# CONFIG_S2IO is not set ++ ++# ++# Token Ring devices ++# ++# CONFIG_TR is not set ++ ++# ++# Wireless LAN (non-hamradio) ++# ++CONFIG_NET_RADIO=y ++# CONFIG_NET_WIRELESS_RTNETLINK is not set ++ ++# ++# Obsolete Wireless cards support (pre-802.11) ++# ++# CONFIG_STRIP is not set ++ ++# ++# Wireless 802.11b ISA/PCI cards support ++# ++# CONFIG_IPW2100 is not set ++# CONFIG_IPW2200 is not set ++CONFIG_HERMES=m ++# CONFIG_PLX_HERMES is not set ++# CONFIG_TMD_HERMES is not set ++# CONFIG_NORTEL_HERMES is not set ++# CONFIG_PCI_HERMES is not set ++# CONFIG_ATMEL is not set ++ ++# ++# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support ++# ++CONFIG_PRISM54=m ++# CONFIG_HOSTAP is not set ++CONFIG_NET_WIRELESS=y ++ ++# ++# Wan interfaces ++# ++# CONFIG_WAN is not set ++# CONFIG_FDDI is not set ++# CONFIG_HIPPI is not set ++# CONFIG_PPP is not set ++# CONFIG_SLIP is not set ++# CONFIG_NET_FC is not set ++# CONFIG_SHAPER is not set ++# CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set ++ ++# ++# ISDN subsystem ++# ++# CONFIG_ISDN is not set ++ ++# ++# Telephony Support ++# ++# CONFIG_PHONE is not set ++ ++# ++# Input device support ++# ++CONFIG_INPUT=y ++ ++# ++# Userland interfaces ++# ++CONFIG_INPUT_MOUSEDEV=y ++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set ++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 ++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 ++# CONFIG_INPUT_JOYDEV is not set ++# CONFIG_INPUT_TSDEV is not set ++# CONFIG_INPUT_EVDEV is not set ++# CONFIG_INPUT_EVBUG is not set ++ ++# ++# Input Device Drivers ++# ++CONFIG_INPUT_KEYBOARD=y ++CONFIG_KEYBOARD_ATKBD=y ++# CONFIG_KEYBOARD_SUNKBD is not set ++# CONFIG_KEYBOARD_LKKBD is not set ++# CONFIG_KEYBOARD_XTKBD is not set ++# CONFIG_KEYBOARD_NEWTON is not set ++# CONFIG_INPUT_MOUSE is not set ++# CONFIG_INPUT_JOYSTICK is not set ++# CONFIG_INPUT_TOUCHSCREEN is not set ++# CONFIG_INPUT_MISC is not set ++ ++# ++# Hardware I/O ports ++# ++CONFIG_SERIO=y ++# CONFIG_SERIO_I8042 is not set ++# CONFIG_SERIO_SERPORT is not set ++# CONFIG_SERIO_PCIPS2 is not set ++CONFIG_SERIO_LIBPS2=y ++# CONFIG_SERIO_RAW is not set ++# CONFIG_GAMEPORT is not set ++ ++# ++# Character devices ++# ++# CONFIG_VT is not set ++# CONFIG_SERIAL_NONSTANDARD is not set ++ ++# ++# Serial drivers ++# ++# CONFIG_SERIAL_8250 is not set ++ ++# ++# Non-8250 serial port support ++# ++CONFIG_SERIAL_SH_SCI=y ++CONFIG_SERIAL_SH_SCI_CONSOLE=y ++CONFIG_SERIAL_CORE=y ++CONFIG_SERIAL_CORE_CONSOLE=y ++# CONFIG_SERIAL_JSM is not set ++CONFIG_UNIX98_PTYS=y ++CONFIG_LEGACY_PTYS=y ++CONFIG_LEGACY_PTY_COUNT=256 ++ ++# ++# IPMI ++# ++# CONFIG_IPMI_HANDLER is not set ++ ++# ++# Watchdog Cards ++# ++# CONFIG_WATCHDOG is not set ++# CONFIG_RTC is not set ++# CONFIG_GEN_RTC is not set ++# CONFIG_DTLK is not set ++# CONFIG_R3964 is not set ++# CONFIG_APPLICOM is not set ++ ++# ++# Ftape, the floppy tape device driver ++# ++# CONFIG_DRM is not set ++# CONFIG_RAW_DRIVER is not set ++ ++# ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# ++# I2C support ++# ++# CONFIG_I2C is not set ++ ++# ++# SPI support ++# ++# CONFIG_SPI is not set ++# CONFIG_SPI_MASTER is not set ++ ++# ++# Dallas's 1-wire bus ++# ++# CONFIG_W1 is not set ++ ++# ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_SENSORS_F71805F is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# ++# Misc devices ++# ++ ++# ++# Multimedia devices ++# ++# CONFIG_VIDEO_DEV is not set ++CONFIG_VIDEO_V4L2=y ++ ++# ++# Digital Video Broadcasting Devices ++# ++# CONFIG_DVB is not set ++ ++# ++# Graphics support ++# ++# CONFIG_FB is not set ++ ++# ++# Sound ++# ++CONFIG_SOUND=m ++ ++# ++# Advanced Linux Sound Architecture ++# ++# CONFIG_SND is not set ++ ++# ++# Open Sound System ++# ++CONFIG_SOUND_PRIME=m ++# CONFIG_SOUND_BT878 is not set ++# CONFIG_SOUND_EMU10K1 is not set ++# CONFIG_SOUND_FUSION is not set ++# CONFIG_SOUND_ES1371 is not set ++# CONFIG_SOUND_ICH is not set ++# CONFIG_SOUND_TRIDENT is not set ++# CONFIG_SOUND_MSNDCLAS is not set ++# CONFIG_SOUND_MSNDPIN is not set ++# CONFIG_SOUND_VIA82CXXX is not set ++ ++# ++# USB support ++# ++CONFIG_USB_ARCH_HAS_HCD=y ++CONFIG_USB_ARCH_HAS_OHCI=y ++CONFIG_USB_ARCH_HAS_EHCI=y ++# CONFIG_USB is not set ++ ++# ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' ++# ++ ++# ++# USB Gadget Support ++# ++# CONFIG_USB_GADGET is not set ++ ++# ++# MMC/SD Card support ++# ++# CONFIG_MMC is not set ++ ++# ++# LED devices ++# ++# CONFIG_NEW_LEDS is not set ++ ++# ++# LED drivers ++# ++ ++# ++# LED Triggers ++# ++ ++# ++# InfiniBand support ++# ++# CONFIG_INFINIBAND is not set ++ ++# ++# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) ++# ++ ++# ++# Real Time Clock ++# ++# CONFIG_RTC_CLASS is not set ++ ++# ++# File systems ++# ++CONFIG_EXT2_FS=y ++# CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set ++CONFIG_EXT3_FS=y ++CONFIG_EXT3_FS_XATTR=y ++# CONFIG_EXT3_FS_POSIX_ACL is not set ++# CONFIG_EXT3_FS_SECURITY is not set ++CONFIG_JBD=y ++# CONFIG_JBD_DEBUG is not set ++CONFIG_FS_MBCACHE=y ++# CONFIG_REISERFS_FS is not set ++# CONFIG_JFS_FS is not set ++CONFIG_FS_POSIX_ACL=y ++# CONFIG_XFS_FS is not set ++# CONFIG_OCFS2_FS is not set ++CONFIG_MINIX_FS=y ++# CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y ++# CONFIG_QUOTA is not set ++CONFIG_DNOTIFY=y ++# CONFIG_AUTOFS_FS is not set ++# CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set ++ ++# ++# CD-ROM/DVD Filesystems ++# ++# CONFIG_ISO9660_FS is not set ++# CONFIG_UDF_FS is not set ++ ++# ++# DOS/FAT/NT Filesystems ++# ++CONFIG_FAT_FS=y ++CONFIG_MSDOS_FS=y ++CONFIG_VFAT_FS=y ++CONFIG_FAT_DEFAULT_CODEPAGE=437 ++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" ++CONFIG_NTFS_FS=y ++# CONFIG_NTFS_DEBUG is not set ++CONFIG_NTFS_RW=y ++ ++# ++# Pseudo filesystems ++# ++CONFIG_PROC_FS=y ++CONFIG_PROC_KCORE=y ++CONFIG_SYSFS=y ++# CONFIG_TMPFS is not set ++CONFIG_HUGETLBFS=y ++CONFIG_HUGETLB_PAGE=y ++CONFIG_RAMFS=y ++# CONFIG_CONFIGFS_FS is not set ++ ++# ++# Miscellaneous filesystems ++# ++# CONFIG_ADFS_FS is not set ++# CONFIG_AFFS_FS is not set ++# CONFIG_HFS_FS is not set ++# CONFIG_HFSPLUS_FS is not set ++# CONFIG_BEFS_FS is not set ++# CONFIG_BFS_FS is not set ++# CONFIG_EFS_FS is not set ++# CONFIG_CRAMFS is not set ++# CONFIG_VXFS_FS is not set ++# CONFIG_HPFS_FS is not set ++# CONFIG_QNX4FS_FS is not set ++# CONFIG_SYSV_FS is not set ++# CONFIG_UFS_FS is not set ++ ++# ++# Network File Systems ++# ++CONFIG_NFS_FS=y ++CONFIG_NFS_V3=y ++# CONFIG_NFS_V3_ACL is not set ++CONFIG_NFS_V4=y ++# CONFIG_NFS_DIRECTIO is not set ++CONFIG_NFSD=y ++CONFIG_NFSD_V3=y ++# CONFIG_NFSD_V3_ACL is not set ++CONFIG_NFSD_V4=y ++CONFIG_NFSD_TCP=y ++CONFIG_ROOT_NFS=y ++CONFIG_LOCKD=y ++CONFIG_LOCKD_V4=y ++CONFIG_EXPORTFS=y ++CONFIG_NFS_COMMON=y ++CONFIG_SUNRPC=y ++CONFIG_SUNRPC_GSS=y ++CONFIG_RPCSEC_GSS_KRB5=y ++# CONFIG_RPCSEC_GSS_SPKM3 is not set ++# CONFIG_SMB_FS is not set ++# CONFIG_CIFS is not set ++# CONFIG_NCP_FS is not set ++# CONFIG_CODA_FS is not set ++# CONFIG_AFS_FS is not set ++# CONFIG_9P_FS is not set ++ ++# ++# Partition Types ++# ++# CONFIG_PARTITION_ADVANCED is not set ++CONFIG_MSDOS_PARTITION=y ++ ++# ++# Native Language Support ++# ++CONFIG_NLS=y ++CONFIG_NLS_DEFAULT="iso8859-1" ++CONFIG_NLS_CODEPAGE_437=y ++# CONFIG_NLS_CODEPAGE_737 is not set ++# CONFIG_NLS_CODEPAGE_775 is not set ++# CONFIG_NLS_CODEPAGE_850 is not set ++# CONFIG_NLS_CODEPAGE_852 is not set ++# CONFIG_NLS_CODEPAGE_855 is not set ++# CONFIG_NLS_CODEPAGE_857 is not set ++# CONFIG_NLS_CODEPAGE_860 is not set ++# CONFIG_NLS_CODEPAGE_861 is not set ++# CONFIG_NLS_CODEPAGE_862 is not set ++# CONFIG_NLS_CODEPAGE_863 is not set ++# CONFIG_NLS_CODEPAGE_864 is not set ++# CONFIG_NLS_CODEPAGE_865 is not set ++# CONFIG_NLS_CODEPAGE_866 is not set ++# CONFIG_NLS_CODEPAGE_869 is not set ++# CONFIG_NLS_CODEPAGE_936 is not set ++# CONFIG_NLS_CODEPAGE_950 is not set ++CONFIG_NLS_CODEPAGE_932=y ++# CONFIG_NLS_CODEPAGE_949 is not set ++# CONFIG_NLS_CODEPAGE_874 is not set ++# CONFIG_NLS_ISO8859_8 is not set ++# CONFIG_NLS_CODEPAGE_1250 is not set ++# CONFIG_NLS_CODEPAGE_1251 is not set ++# CONFIG_NLS_ASCII is not set ++CONFIG_NLS_ISO8859_1=y ++# CONFIG_NLS_ISO8859_2 is not set ++# CONFIG_NLS_ISO8859_3 is not set ++# CONFIG_NLS_ISO8859_4 is not set ++# CONFIG_NLS_ISO8859_5 is not set ++# CONFIG_NLS_ISO8859_6 is not set ++# CONFIG_NLS_ISO8859_7 is not set ++# CONFIG_NLS_ISO8859_9 is not set ++# CONFIG_NLS_ISO8859_13 is not set ++# CONFIG_NLS_ISO8859_14 is not set ++# CONFIG_NLS_ISO8859_15 is not set ++# CONFIG_NLS_KOI8_R is not set ++# CONFIG_NLS_KOI8_U is not set ++# CONFIG_NLS_UTF8 is not set ++ ++# ++# Profiling support ++# ++# CONFIG_PROFILING is not set ++ ++# ++# Kernel hacking ++# ++# CONFIG_PRINTK_TIME is not set ++# CONFIG_MAGIC_SYSRQ is not set ++CONFIG_DEBUG_KERNEL=y ++CONFIG_LOG_BUF_SHIFT=14 ++CONFIG_DETECT_SOFTLOCKUP=y ++# CONFIG_SCHEDSTATS is not set ++# CONFIG_DEBUG_SLAB is not set ++CONFIG_DEBUG_PREEMPT=y ++# CONFIG_DEBUG_MUTEXES is not set ++CONFIG_DEBUG_SPINLOCK=y ++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set ++# CONFIG_DEBUG_KOBJECT is not set ++# CONFIG_DEBUG_INFO is not set ++CONFIG_DEBUG_FS=y ++# CONFIG_DEBUG_VM is not set ++CONFIG_FRAME_POINTER=y ++CONFIG_FORCED_INLINING=y ++# CONFIG_RCU_TORTURE_TEST is not set ++# CONFIG_SH_STANDARD_BIOS is not set ++# CONFIG_EARLY_SCIF_CONSOLE is not set ++# CONFIG_KGDB is not set ++ ++# ++# Security options ++# ++# CONFIG_KEYS is not set ++# CONFIG_SECURITY is not set ++ ++# ++# Cryptographic options ++# ++CONFIG_CRYPTO=y ++CONFIG_CRYPTO_HMAC=y ++# CONFIG_CRYPTO_NULL is not set ++# CONFIG_CRYPTO_MD4 is not set ++CONFIG_CRYPTO_MD5=y ++# CONFIG_CRYPTO_SHA1 is not set ++# CONFIG_CRYPTO_SHA256 is not set ++# CONFIG_CRYPTO_SHA512 is not set ++# CONFIG_CRYPTO_WP512 is not set ++# CONFIG_CRYPTO_TGR192 is not set ++CONFIG_CRYPTO_DES=y ++# CONFIG_CRYPTO_BLOWFISH is not set ++# CONFIG_CRYPTO_TWOFISH is not set ++# CONFIG_CRYPTO_SERPENT is not set ++# CONFIG_CRYPTO_AES is not set ++# CONFIG_CRYPTO_CAST5 is not set ++# CONFIG_CRYPTO_CAST6 is not set ++# CONFIG_CRYPTO_TEA is not set ++# CONFIG_CRYPTO_ARC4 is not set ++# CONFIG_CRYPTO_KHAZAD is not set ++# CONFIG_CRYPTO_ANUBIS is not set ++# CONFIG_CRYPTO_DEFLATE is not set ++# CONFIG_CRYPTO_MICHAEL_MIC is not set ++# CONFIG_CRYPTO_CRC32C is not set ++# CONFIG_CRYPTO_TEST is not set ++ ++# ++# Hardware crypto devices ++# ++ ++# ++# Library routines ++# ++# CONFIG_CRC_CCITT is not set ++# CONFIG_CRC16 is not set ++CONFIG_CRC32=y ++# CONFIG_LIBCRC32C is not set +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/rts7751r2d_defconfig linux-2.6.17/arch/sh/configs/rts7751r2d_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/rts7751r2d_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/rts7751r2d_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,7 +1,7 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.11-sh +-# Wed Mar 2 15:09:42 2005 ++# Linux kernel version: 2.6.15-sh ++# Wed Jan 4 19:00:01 2006 + # + CONFIG_SUPERH=y + CONFIG_UID16=y +@@ -16,33 +16,39 @@ + CONFIG_EXPERIMENTAL=y + CONFIG_CLEAN_COMPILE=y + CONFIG_BROKEN_ON_SMP=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 + + # + # General setup + # + CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y + CONFIG_SWAP=y + CONFIG_SYSVIPC=y + # CONFIG_POSIX_MQUEUE is not set + # CONFIG_BSD_PROCESS_ACCT is not set + CONFIG_SYSCTL=y + # CONFIG_AUDIT is not set +-CONFIG_LOG_BUF_SHIFT=14 + CONFIG_HOTPLUG=y + CONFIG_KOBJECT_UEVENT=y + # CONFIG_IKCONFIG is not set ++CONFIG_INITRAMFS_SOURCE="" ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_EMBEDDED=y + CONFIG_KALLSYMS=y + # CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y + CONFIG_FUTEX=y + CONFIG_EPOLL=y +-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_SHMEM=y + CONFIG_CC_ALIGN_FUNCTIONS=0 + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 + # CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 + + # + # Loadable module support +@@ -55,6 +61,24 @@ + # CONFIG_KMOD is not set + + # ++# Block layer ++# ++# CONFIG_LBD is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++CONFIG_IOSCHED_AS=y ++CONFIG_IOSCHED_DEADLINE=y ++CONFIG_IOSCHED_CFQ=y ++CONFIG_DEFAULT_AS=y ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++# CONFIG_DEFAULT_NOOP is not set ++CONFIG_DEFAULT_IOSCHED="anticipatory" ++ ++# + # System type + # + # CONFIG_SH_SOLUTION_ENGINE is not set +@@ -64,9 +88,7 @@ + # CONFIG_SH_7751_SYSTEMH is not set + # CONFIG_SH_STB1_HARP is not set + # CONFIG_SH_STB1_OVERDRIVE is not set +-# CONFIG_SH_HP620 is not set +-# CONFIG_SH_HP680 is not set +-# CONFIG_SH_HP690 is not set ++# CONFIG_SH_HP6XX is not set + # CONFIG_SH_CQREEK is not set + # CONFIG_SH_DMIDA is not set + # CONFIG_SH_EC3104 is not set +@@ -83,44 +105,94 @@ + CONFIG_SH_RTS7751R2D=y + # CONFIG_SH_EDOSK7705 is not set + # CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set ++# CONFIG_SH_TITAN is not set + # CONFIG_SH_UNKNOWN is not set +-# CONFIG_CPU_SH2 is not set +-# CONFIG_CPU_SH3 is not set ++ ++# ++# Processor selection ++# + CONFIG_CPU_SH4=y ++ ++# ++# SH-2 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7300 is not set + # CONFIG_CPU_SUBTYPE_SH7705 is not set + # CONFIG_CPU_SUBTYPE_SH7707 is not set + # CONFIG_CPU_SUBTYPE_SH7708 is not set + # CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7750 is not set ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set + CONFIG_CPU_SUBTYPE_SH7751=y ++CONFIG_CPU_SUBTYPE_SH7751R=y + # CONFIG_CPU_SUBTYPE_SH7760 is not set +-# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# + # CONFIG_CPU_SUBTYPE_ST40STB1 is not set + # CONFIG_CPU_SUBTYPE_ST40GX1 is not set +-# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# + CONFIG_MMU=y +-CONFIG_CMDLINE_BOOL=y +-CONFIG_CMDLINE="mem=64M console=ttySC0,115200 root=/dev/hda1" ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set + CONFIG_MEMORY_START=0x0c000000 + CONFIG_MEMORY_SIZE=0x04000000 +-CONFIG_MEMORY_SET=y +-# CONFIG_MEMORY_OVERRIDE is not set ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y + CONFIG_SH_RTC=y + CONFIG_SH_FPU=y +-CONFIG_ZERO_PAGE_OFFSET=0x00010000 +-CONFIG_BOOT_LINK_OFFSET=0x00800000 +-CONFIG_CPU_LITTLE_ENDIAN=y +-# CONFIG_PREEMPT is not set +-# CONFIG_UBC_WAKEUP is not set +-# CONFIG_SH_WRITETHROUGH is not set +-# CONFIG_SH_OCRAM is not set + # CONFIG_SH_STORE_QUEUES is not set +-# CONFIG_SMP is not set ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++ ++# ++# RTS7751R2D options ++# + CONFIG_RTS7751R2D_REV11=y +-CONFIG_SH_PCLK_CALC=y +-CONFIG_SH_PCLK_FREQ=60000000 ++# CONFIG_SH_PCLK_FREQ_BOOL is not set + + # + # CPU Frequency scaling +@@ -140,17 +212,31 @@ + CONFIG_VOYAGERGX=y + # CONFIG_HD6446X_SERIES is not set + CONFIG_HEARTBEAT=y +-CONFIG_RTC_9701JE=y + + # +-# Bus options (PCI, PCMCIA, EISA, MCA, ISA) ++# Kernel features ++# ++# CONFIG_KEXEC is not set ++# CONFIG_PREEMPT is not set ++# CONFIG_SMP is not set ++ ++# ++# Boot options ++# ++CONFIG_ZERO_PAGE_OFFSET=0x00010000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++CONFIG_CMDLINE_BOOL=y ++CONFIG_CMDLINE="mem=64M console=ttySC0,115200 root=/dev/hda1" ++ ++# ++# Bus options + # + CONFIG_PCI=y + CONFIG_SH_PCIDMA_NONCOHERENT=y + CONFIG_PCI_AUTO=y + CONFIG_PCI_AUTO_UPDATE_RESOURCES=y + # CONFIG_PCI_LEGACY_PROC is not set +-CONFIG_PCI_NAMES=y + + # + # PCCARD (PCMCIA/CardBus) support +@@ -158,10 +244,6 @@ + # CONFIG_PCCARD is not set + + # +-# PC-card bridges +-# +- +-# + # PCI Hotplug Support + # + CONFIG_HOTPLUG_PCI=y +@@ -177,6 +259,74 @@ + # CONFIG_BINFMT_MISC is not set + + # ++# Networking ++# ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++CONFIG_PACKET=y ++# CONFIG_PACKET_MMAP is not set ++CONFIG_UNIX=y ++# CONFIG_NET_KEY is not set ++CONFIG_INET=y ++# CONFIG_IP_MULTICAST is not set ++# CONFIG_IP_ADVANCED_ROUTER is not set ++CONFIG_IP_FIB_HASH=y ++# CONFIG_IP_PNP is not set ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_TUNNEL is not set ++CONFIG_INET_DIAG=y ++CONFIG_INET_TCP_DIAG=y ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++# CONFIG_IPV6 is not set ++# CONFIG_NETFILTER is not set ++ ++# ++# DCCP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_DCCP is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++# CONFIG_ATM is not set ++# CONFIG_BRIDGE is not set ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_NET_DIVERT is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++ ++# ++# QoS and/or fair queueing ++# ++# CONFIG_NET_SCHED is not set ++ ++# ++# Network testing ++# ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++# CONFIG_IEEE80211 is not set ++ ++# + # Device Drivers + # + +@@ -188,6 +338,11 @@ + # CONFIG_FW_LOADER is not set + + # ++# Connector - unified userspace <-> kernelspace linker ++# ++# CONFIG_CONNECTOR is not set ++ ++# + # Memory Technology Devices (MTD) + # + # CONFIG_MTD is not set +@@ -204,7 +359,6 @@ + # + # Block devices + # +-# CONFIG_BLK_DEV_FD is not set + # CONFIG_BLK_CPQ_DA is not set + # CONFIG_BLK_CPQ_CISS_DA is not set + # CONFIG_BLK_DEV_DAC960 is not set +@@ -217,17 +371,7 @@ + CONFIG_BLK_DEV_RAM_COUNT=16 + CONFIG_BLK_DEV_RAM_SIZE=4096 + # CONFIG_BLK_DEV_INITRD is not set +-CONFIG_INITRAMFS_SOURCE="" +-# CONFIG_LBD is not set + # CONFIG_CDROM_PKTCDVD is not set +- +-# +-# IO Schedulers +-# +-CONFIG_IOSCHED_NOOP=y +-CONFIG_IOSCHED_AS=y +-CONFIG_IOSCHED_DEADLINE=y +-CONFIG_IOSCHED_CFQ=y + # CONFIG_ATA_OVER_ETH is not set + + # +@@ -262,6 +406,7 @@ + # + # SCSI device support + # ++# CONFIG_RAID_ATTRS is not set + # CONFIG_SCSI is not set + + # +@@ -272,6 +417,7 @@ + # + # Fusion MPT device support + # ++# CONFIG_FUSION is not set + + # + # IEEE 1394 (FireWire) support +@@ -284,67 +430,8 @@ + # CONFIG_I2O is not set + + # +-# Networking support +-# +-CONFIG_NET=y +- +-# +-# Networking options +-# +-CONFIG_PACKET=y +-# CONFIG_PACKET_MMAP is not set +-# CONFIG_NETLINK_DEV is not set +-CONFIG_UNIX=y +-# CONFIG_NET_KEY is not set +-CONFIG_INET=y +-# CONFIG_IP_MULTICAST is not set +-# CONFIG_IP_ADVANCED_ROUTER is not set +-# CONFIG_IP_PNP is not set +-# CONFIG_NET_IPIP is not set +-# CONFIG_NET_IPGRE is not set +-# CONFIG_ARPD is not set +-# CONFIG_SYN_COOKIES is not set +-# CONFIG_INET_AH is not set +-# CONFIG_INET_ESP is not set +-# CONFIG_INET_IPCOMP is not set +-# CONFIG_INET_TUNNEL is not set +-CONFIG_IP_TCPDIAG=y +-# CONFIG_IP_TCPDIAG_IPV6 is not set +-# CONFIG_IPV6 is not set +-# CONFIG_NETFILTER is not set +- +-# +-# SCTP Configuration (EXPERIMENTAL) +-# +-# CONFIG_IP_SCTP is not set +-# CONFIG_ATM is not set +-# CONFIG_BRIDGE is not set +-# CONFIG_VLAN_8021Q is not set +-# CONFIG_DECNET is not set +-# CONFIG_LLC2 is not set +-# CONFIG_IPX is not set +-# CONFIG_ATALK is not set +-# CONFIG_X25 is not set +-# CONFIG_LAPB is not set +-# CONFIG_NET_DIVERT is not set +-# CONFIG_ECONET is not set +-# CONFIG_WAN_ROUTER is not set +- +-# +-# QoS and/or fair queueing ++# Network device support + # +-# CONFIG_NET_SCHED is not set +-# CONFIG_NET_CLS_ROUTE is not set +- +-# +-# Network testing +-# +-# CONFIG_NET_PKTGEN is not set +-# CONFIG_NETPOLL is not set +-# CONFIG_NET_POLL_CONTROLLER is not set +-# CONFIG_HAMRADIO is not set +-# CONFIG_IRDA is not set +-# CONFIG_BT is not set + CONFIG_NETDEVICES=y + # CONFIG_DUMMY is not set + # CONFIG_BONDING is not set +@@ -357,6 +444,11 @@ + # CONFIG_ARCNET is not set + + # ++# PHY device support ++# ++# CONFIG_PHYLIB is not set ++ ++# + # Ethernet (10 or 100Mbit) + # + CONFIG_NET_ETHERNET=y +@@ -364,6 +456,7 @@ + # CONFIG_STNIC is not set + # CONFIG_HAPPYMEAL is not set + # CONFIG_SUNGEM is not set ++# CONFIG_CASSINI is not set + # CONFIG_NET_VENDOR_3COM is not set + # CONFIG_SMC91X is not set + +@@ -372,6 +465,7 @@ + # + # CONFIG_NET_TULIP is not set + # CONFIG_HP100 is not set ++# CONFIG_NE2000 is not set + CONFIG_NET_PCI=y + # CONFIG_PCNET32 is not set + # CONFIG_AMD8111_ETH is not set +@@ -406,13 +500,17 @@ + # CONFIG_HAMACHI is not set + # CONFIG_YELLOWFIN is not set + # CONFIG_R8169 is not set ++# CONFIG_SIS190 is not set ++# CONFIG_SKGE is not set + # CONFIG_SK98LIN is not set + # CONFIG_VIA_VELOCITY is not set + # CONFIG_TIGON3 is not set ++# CONFIG_BNX2 is not set + + # + # Ethernet (10000 Mbit) + # ++# CONFIG_CHELSIO_T1 is not set + # CONFIG_IXGB is not set + # CONFIG_S2IO is not set + +@@ -437,6 +535,7 @@ + CONFIG_HERMES=m + # CONFIG_PLX_HERMES is not set + # CONFIG_TMD_HERMES is not set ++# CONFIG_NORTEL_HERMES is not set + # CONFIG_PCI_HERMES is not set + # CONFIG_ATMEL is not set + +@@ -444,6 +543,7 @@ + # Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support + # + # CONFIG_PRISM54 is not set ++# CONFIG_HOSTAP is not set + CONFIG_NET_WIRELESS=y + + # +@@ -456,6 +556,8 @@ + # CONFIG_SLIP is not set + # CONFIG_SHAPER is not set + # CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set + + # + # ISDN subsystem +@@ -473,20 +575,10 @@ + # CONFIG_INPUT is not set + + # +-# Userland interfaces +-# +- +-# +-# Input I/O drivers ++# Hardware I/O ports + # +-# CONFIG_GAMEPORT is not set +-CONFIG_SOUND_GAMEPORT=y + # CONFIG_SERIO is not set +-# CONFIG_SERIO_I8042 is not set +- +-# +-# Input Device Drivers +-# ++# CONFIG_GAMEPORT is not set + + # + # Character devices +@@ -503,6 +595,7 @@ + # Non-8250 serial port support + # + # CONFIG_SERIAL_SH_SCI is not set ++# CONFIG_SERIAL_JSM is not set + # CONFIG_UNIX98_PTYS is not set + CONFIG_LEGACY_PTYS=y + CONFIG_LEGACY_PTY_COUNT=256 +@@ -517,6 +610,7 @@ + # + # CONFIG_WATCHDOG is not set + # CONFIG_RTC is not set ++CONFIG_RTC_9701JE=y + # CONFIG_GEN_RTC is not set + # CONFIG_DTLK is not set + # CONFIG_R3964 is not set +@@ -529,6 +623,12 @@ + # CONFIG_RAW_DRIVER is not set + + # ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# + # I2C support + # + # CONFIG_I2C is not set +@@ -539,10 +639,21 @@ + # CONFIG_W1 is not set + + # ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# + # Misc devices + # + + # ++# Multimedia Capabilities Port drivers ++# ++ ++# + # Multimedia devices + # + # CONFIG_VIDEO_DEV is not set +@@ -566,6 +677,8 @@ + # Advanced Linux Sound Architecture + # + CONFIG_SND=m ++CONFIG_SND_AC97_CODEC=m ++CONFIG_SND_AC97_BUS=m + CONFIG_SND_TIMER=m + CONFIG_SND_PCM=m + CONFIG_SND_HWDEP=m +@@ -589,7 +702,6 @@ + # + # PCI devices + # +-CONFIG_SND_AC97_CODEC=m + # CONFIG_SND_ALI5451 is not set + # CONFIG_SND_ATIIXP is not set + # CONFIG_SND_ATIIXP_MODEM is not set +@@ -610,9 +722,10 @@ + # CONFIG_SND_RME96 is not set + # CONFIG_SND_RME9652 is not set + # CONFIG_SND_HDSP is not set ++# CONFIG_SND_HDSPM is not set + # CONFIG_SND_TRIDENT is not set + CONFIG_SND_YMFPCI=m +-# CONFIG_SND_ALS4000 is not set ++# CONFIG_SND_AD1889 is not set + # CONFIG_SND_CMIPCI is not set + # CONFIG_SND_ENS1370 is not set + # CONFIG_SND_ENS1371 is not set +@@ -628,43 +741,29 @@ + # CONFIG_SND_VIA82XX is not set + # CONFIG_SND_VIA82XX_MODEM is not set + # CONFIG_SND_VX222 is not set ++# CONFIG_SND_HDA_INTEL is not set + + # + # Open Sound System + # + CONFIG_SOUND_PRIME=m +-# CONFIG_SOUND_BT878 is not set +-CONFIG_SOUND_CMPCI=m +-# CONFIG_SOUND_EMU10K1 is not set ++# CONFIG_OBSOLETE_OSS_DRIVER is not set + # CONFIG_SOUND_FUSION is not set +-# CONFIG_SOUND_CS4281 is not set +-# CONFIG_SOUND_ES1370 is not set +-# CONFIG_SOUND_ES1371 is not set +-# CONFIG_SOUND_ESSSOLO1 is not set +-# CONFIG_SOUND_MAESTRO is not set +-# CONFIG_SOUND_MAESTRO3 is not set + # CONFIG_SOUND_ICH is not set +-# CONFIG_SOUND_SONICVIBES is not set + # CONFIG_SOUND_TRIDENT is not set + # CONFIG_SOUND_MSNDCLAS is not set + # CONFIG_SOUND_MSNDPIN is not set +-# CONFIG_SOUND_VIA82CXXX is not set +-# CONFIG_SOUND_OSS is not set +-# CONFIG_SOUND_ALI5455 is not set +-# CONFIG_SOUND_FORTE is not set +-# CONFIG_SOUND_RME96XX is not set +-# CONFIG_SOUND_AD1980 is not set + CONFIG_SOUND_VOYAGERGX=m + + # + # USB support + # +-# CONFIG_USB is not set + CONFIG_USB_ARCH_HAS_HCD=y + CONFIG_USB_ARCH_HAS_OHCI=y ++# CONFIG_USB is not set + + # +-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' + # + + # +@@ -683,25 +782,29 @@ + # CONFIG_INFINIBAND is not set + + # ++# SN Devices ++# ++ ++# + # File systems + # + CONFIG_EXT2_FS=y + # CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set + # CONFIG_EXT3_FS is not set + # CONFIG_JBD is not set + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set +- +-# +-# XFS support +-# ++# CONFIG_FS_POSIX_ACL is not set + # CONFIG_XFS_FS is not set + CONFIG_MINIX_FS=y + # CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y + # CONFIG_QUOTA is not set + CONFIG_DNOTIFY=y + # CONFIG_AUTOFS_FS is not set + # CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set + + # + # CD-ROM/DVD Filesystems +@@ -725,11 +828,11 @@ + CONFIG_PROC_FS=y + CONFIG_PROC_KCORE=y + CONFIG_SYSFS=y +-# CONFIG_DEVFS_FS is not set + # CONFIG_TMPFS is not set + # CONFIG_HUGETLBFS is not set + # CONFIG_HUGETLB_PAGE is not set + CONFIG_RAMFS=y ++# CONFIG_RELAYFS_FS is not set + + # + # Miscellaneous filesystems +@@ -758,6 +861,7 @@ + # CONFIG_NCP_FS is not set + # CONFIG_CODA_FS is not set + # CONFIG_AFS_FS is not set ++# CONFIG_9P_FS is not set + + # + # Partition Types +@@ -818,7 +922,9 @@ + # + # Kernel hacking + # ++# CONFIG_PRINTK_TIME is not set + # CONFIG_DEBUG_KERNEL is not set ++CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_FRAME_POINTER is not set + # CONFIG_SH_STANDARD_BIOS is not set + # CONFIG_EARLY_SCIF_CONSOLE is not set +@@ -843,5 +949,6 @@ + # Library routines + # + # CONFIG_CRC_CCITT is not set ++# CONFIG_CRC16 is not set + CONFIG_CRC32=y + # CONFIG_LIBCRC32C is not set +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/se7300_defconfig linux-2.6.17/arch/sh/configs/se7300_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/se7300_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/se7300_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,7 +1,7 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.11-sh +-# Wed Mar 2 15:09:43 2005 ++# Linux kernel version: 2.6.15-sh ++# Wed Jan 4 19:07:24 2006 + # + CONFIG_SUPERH=y + CONFIG_UID16=y +@@ -16,30 +16,35 @@ + CONFIG_EXPERIMENTAL=y + CONFIG_CLEAN_COMPILE=y + CONFIG_BROKEN_ON_SMP=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 + + # + # General setup + # + CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y + # CONFIG_SWAP is not set + # CONFIG_SYSVIPC is not set + # CONFIG_BSD_PROCESS_ACCT is not set + CONFIG_SYSCTL=y +-# CONFIG_AUDIT is not set +-CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_HOTPLUG is not set + # CONFIG_IKCONFIG is not set ++CONFIG_INITRAMFS_SOURCE="" ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_EMBEDDED=y + # CONFIG_KALLSYMS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y + # CONFIG_FUTEX is not set + # CONFIG_EPOLL is not set +-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_SHMEM=y + CONFIG_CC_ALIGN_FUNCTIONS=0 + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 + # CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 + + # + # Loadable module support +@@ -47,6 +52,24 @@ + # CONFIG_MODULES is not set + + # ++# Block layer ++# ++# CONFIG_LBD is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++# CONFIG_IOSCHED_AS is not set ++# CONFIG_IOSCHED_DEADLINE is not set ++# CONFIG_IOSCHED_CFQ is not set ++# CONFIG_DEFAULT_AS is not set ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++CONFIG_DEFAULT_NOOP=y ++CONFIG_DEFAULT_IOSCHED="noop" ++ ++# + # System type + # + # CONFIG_SH_SOLUTION_ENGINE is not set +@@ -56,9 +79,7 @@ + # CONFIG_SH_7751_SYSTEMH is not set + # CONFIG_SH_STB1_HARP is not set + # CONFIG_SH_STB1_OVERDRIVE is not set +-# CONFIG_SH_HP620 is not set +-# CONFIG_SH_HP680 is not set +-# CONFIG_SH_HP690 is not set ++# CONFIG_SH_HP6XX is not set + # CONFIG_SH_CQREEK is not set + # CONFIG_SH_DMIDA is not set + # CONFIG_SH_EC3104 is not set +@@ -75,40 +96,88 @@ + # CONFIG_SH_RTS7751R2D is not set + # CONFIG_SH_EDOSK7705 is not set + # CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set ++# CONFIG_SH_TITAN is not set + # CONFIG_SH_UNKNOWN is not set +-# CONFIG_CPU_SH2 is not set ++ ++# ++# Processor selection ++# + CONFIG_CPU_SH3=y +-# CONFIG_CPU_SH4 is not set ++ ++# ++# SH-2 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# + CONFIG_CPU_SUBTYPE_SH7300=y + # CONFIG_CPU_SUBTYPE_SH7705 is not set + # CONFIG_CPU_SUBTYPE_SH7707 is not set + # CONFIG_CPU_SUBTYPE_SH7708 is not set + # CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7750 is not set ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set + # CONFIG_CPU_SUBTYPE_SH7751 is not set ++# CONFIG_CPU_SUBTYPE_SH7751R is not set + # CONFIG_CPU_SUBTYPE_SH7760 is not set +-# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# + # CONFIG_CPU_SUBTYPE_ST40STB1 is not set + # CONFIG_CPU_SUBTYPE_ST40GX1 is not set +-# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# + CONFIG_MMU=y +-CONFIG_CMDLINE_BOOL=y +-CONFIG_CMDLINE="console=ttySC0,38400 root=/dev/ram0" ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set + CONFIG_MEMORY_START=0x0c000000 + CONFIG_MEMORY_SIZE=0x04000000 +-# CONFIG_MEMORY_OVERRIDE is not set ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y + CONFIG_SH_DSP=y + # CONFIG_SH_ADC is not set +-CONFIG_ZERO_PAGE_OFFSET=0x00001000 +-CONFIG_BOOT_LINK_OFFSET=0x00210000 +-CONFIG_CPU_LITTLE_ENDIAN=y +-# CONFIG_PREEMPT is not set +-# CONFIG_UBC_WAKEUP is not set +-# CONFIG_SH_WRITETHROUGH is not set +-# CONFIG_SH_OCRAM is not set +-# CONFIG_SMP is not set +-# CONFIG_SH_PCLK_CALC is not set ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++CONFIG_SH_PCLK_FREQ_BOOL=y + CONFIG_SH_PCLK_FREQ=33333333 + + # +@@ -128,18 +197,30 @@ + CONFIG_HEARTBEAT=y + + # +-# Bus options (PCI, PCMCIA, EISA, MCA, ISA) ++# Kernel features + # +-# CONFIG_PCI is not set ++# CONFIG_KEXEC is not set ++# CONFIG_PREEMPT is not set ++# CONFIG_SMP is not set + + # +-# PCCARD (PCMCIA/CardBus) support ++# Boot options + # +-# CONFIG_PCCARD is not set ++CONFIG_ZERO_PAGE_OFFSET=0x00001000 ++CONFIG_BOOT_LINK_OFFSET=0x00210000 ++# CONFIG_UBC_WAKEUP is not set ++CONFIG_CMDLINE_BOOL=y ++CONFIG_CMDLINE="console=ttySC0,38400 root=/dev/ram0" ++ ++# ++# Bus options ++# ++# CONFIG_PCI is not set + + # +-# PC-card bridges ++# PCCARD (PCMCIA/CardBus) support + # ++# CONFIG_PCCARD is not set + + # + # PCI Hotplug Support +@@ -153,10 +234,9 @@ + # CONFIG_BINFMT_MISC is not set + + # +-# SH initrd options ++# Networking + # +-CONFIG_EMBEDDED_RAMDISK=y +-CONFIG_EMBEDDED_RAMDISK_IMAGE="ramdisk.gz" ++# CONFIG_NET is not set + + # + # Device Drivers +@@ -170,6 +250,10 @@ + # CONFIG_FW_LOADER is not set + + # ++# Connector - unified userspace <-> kernelspace linker ++# ++ ++# + # Memory Technology Devices (MTD) + # + # CONFIG_MTD is not set +@@ -186,26 +270,15 @@ + # + # Block devices + # +-# CONFIG_BLK_DEV_FD is not set + # CONFIG_BLK_DEV_COW_COMMON is not set + # CONFIG_BLK_DEV_LOOP is not set + CONFIG_BLK_DEV_RAM=y + CONFIG_BLK_DEV_RAM_COUNT=16 + CONFIG_BLK_DEV_RAM_SIZE=4096 + CONFIG_BLK_DEV_INITRD=y +-CONFIG_INITRAMFS_SOURCE="" +-# CONFIG_LBD is not set + # CONFIG_CDROM_PKTCDVD is not set + + # +-# IO Schedulers +-# +-CONFIG_IOSCHED_NOOP=y +-# CONFIG_IOSCHED_AS is not set +-# CONFIG_IOSCHED_DEADLINE is not set +-# CONFIG_IOSCHED_CFQ is not set +- +-# + # ATA/ATAPI/MFM/RLL support + # + # CONFIG_IDE is not set +@@ -213,6 +286,7 @@ + # + # SCSI device support + # ++# CONFIG_RAID_ATTRS is not set + # CONFIG_SCSI is not set + + # +@@ -223,6 +297,7 @@ + # + # Fusion MPT device support + # ++# CONFIG_FUSION is not set + + # + # IEEE 1394 (FireWire) support +@@ -233,9 +308,8 @@ + # + + # +-# Networking support ++# Network device support + # +-# CONFIG_NET is not set + # CONFIG_NETPOLL is not set + # CONFIG_NET_POLL_CONTROLLER is not set + +@@ -266,18 +340,6 @@ + # CONFIG_INPUT_EVBUG is not set + + # +-# Input I/O drivers +-# +-# CONFIG_GAMEPORT is not set +-CONFIG_SOUND_GAMEPORT=y +-CONFIG_SERIO=y +-# CONFIG_SERIO_I8042 is not set +-# CONFIG_SERIO_SERPORT is not set +-# CONFIG_SERIO_CT82C710 is not set +-# CONFIG_SERIO_LIBPS2 is not set +-# CONFIG_SERIO_RAW is not set +- +-# + # Input Device Drivers + # + # CONFIG_INPUT_KEYBOARD is not set +@@ -287,6 +349,16 @@ + # CONFIG_INPUT_MISC is not set + + # ++# Hardware I/O ports ++# ++CONFIG_SERIO=y ++# CONFIG_SERIO_I8042 is not set ++# CONFIG_SERIO_SERPORT is not set ++# CONFIG_SERIO_LIBPS2 is not set ++# CONFIG_SERIO_RAW is not set ++# CONFIG_GAMEPORT is not set ++ ++# + # Character devices + # + # CONFIG_VT is not set +@@ -336,10 +408,15 @@ + # + # Ftape, the floppy tape device driver + # +-# CONFIG_DRM is not set + # CONFIG_RAW_DRIVER is not set + + # ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# + # I2C support + # + # CONFIG_I2C is not set +@@ -350,10 +427,21 @@ + # CONFIG_W1 is not set + + # ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# + # Misc devices + # + + # ++# Multimedia Capabilities Port drivers ++# ++ ++# + # Multimedia devices + # + # CONFIG_VIDEO_DEV is not set +@@ -379,7 +467,7 @@ + # CONFIG_USB_ARCH_HAS_OHCI is not set + + # +-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' + # + + # +@@ -395,28 +483,31 @@ + # + # InfiniBand support + # +-# CONFIG_INFINIBAND is not set ++ ++# ++# SN Devices ++# + + # + # File systems + # + CONFIG_EXT2_FS=y + # CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set + # CONFIG_EXT3_FS is not set + # CONFIG_JBD is not set + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set +- +-# +-# XFS support +-# ++# CONFIG_FS_POSIX_ACL is not set + # CONFIG_XFS_FS is not set + # CONFIG_MINIX_FS is not set + # CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y + # CONFIG_QUOTA is not set + CONFIG_DNOTIFY=y + # CONFIG_AUTOFS_FS is not set + # CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set + + # + # CD-ROM/DVD Filesystems +@@ -437,13 +528,11 @@ + CONFIG_PROC_FS=y + CONFIG_PROC_KCORE=y + CONFIG_SYSFS=y +-CONFIG_DEVFS_FS=y +-CONFIG_DEVFS_MOUNT=y +-# CONFIG_DEVFS_DEBUG is not set + # CONFIG_TMPFS is not set + # CONFIG_HUGETLBFS is not set + # CONFIG_HUGETLB_PAGE is not set + CONFIG_RAMFS=y ++# CONFIG_RELAYFS_FS is not set + + # + # Miscellaneous filesystems +@@ -481,7 +570,9 @@ + # + # Kernel hacking + # ++# CONFIG_PRINTK_TIME is not set + # CONFIG_DEBUG_KERNEL is not set ++CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_FRAME_POINTER is not set + CONFIG_SH_STANDARD_BIOS=y + CONFIG_EARLY_PRINTK=y +@@ -527,5 +618,6 @@ + # Library routines + # + # CONFIG_CRC_CCITT is not set ++# CONFIG_CRC16 is not set + CONFIG_CRC32=y + # CONFIG_LIBCRC32C is not set +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/se73180_defconfig linux-2.6.17/arch/sh/configs/se73180_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/se73180_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/se73180_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,7 +1,7 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.11-sh +-# Wed Mar 2 15:09:44 2005 ++# Linux kernel version: 2.6.15-sh ++# Sun Jan 8 13:54:18 2006 + # + CONFIG_SUPERH=y + CONFIG_UID16=y +@@ -16,30 +16,35 @@ + CONFIG_EXPERIMENTAL=y + CONFIG_CLEAN_COMPILE=y + CONFIG_BROKEN_ON_SMP=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 + + # + # General setup + # + CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y + CONFIG_SWAP=y + # CONFIG_SYSVIPC is not set + # CONFIG_BSD_PROCESS_ACCT is not set + # CONFIG_SYSCTL is not set +-# CONFIG_AUDIT is not set +-CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_HOTPLUG is not set + # CONFIG_IKCONFIG is not set ++CONFIG_INITRAMFS_SOURCE="" ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_EMBEDDED=y + # CONFIG_KALLSYMS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y + # CONFIG_FUTEX is not set + # CONFIG_EPOLL is not set +-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_SHMEM=y + CONFIG_CC_ALIGN_FUNCTIONS=0 + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 + # CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 + + # + # Loadable module support +@@ -52,6 +57,24 @@ + # CONFIG_KMOD is not set + + # ++# Block layer ++# ++# CONFIG_LBD is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++# CONFIG_IOSCHED_AS is not set ++# CONFIG_IOSCHED_DEADLINE is not set ++# CONFIG_IOSCHED_CFQ is not set ++# CONFIG_DEFAULT_AS is not set ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++CONFIG_DEFAULT_NOOP=y ++CONFIG_DEFAULT_IOSCHED="noop" ++ ++# + # System type + # + # CONFIG_SH_SOLUTION_ENGINE is not set +@@ -61,9 +84,7 @@ + # CONFIG_SH_7751_SYSTEMH is not set + # CONFIG_SH_STB1_HARP is not set + # CONFIG_SH_STB1_OVERDRIVE is not set +-# CONFIG_SH_HP620 is not set +-# CONFIG_SH_HP680 is not set +-# CONFIG_SH_HP690 is not set ++# CONFIG_SH_HP6XX is not set + # CONFIG_SH_CQREEK is not set + # CONFIG_SH_DMIDA is not set + # CONFIG_SH_EC3104 is not set +@@ -78,42 +99,95 @@ + # CONFIG_SH_SECUREEDGE5410 is not set + # CONFIG_SH_HS7751RVOIP is not set + # CONFIG_SH_RTS7751R2D is not set ++# CONFIG_SH_R7780RP is not set + # CONFIG_SH_EDOSK7705 is not set + # CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set ++# CONFIG_SH_TITAN is not set + # CONFIG_SH_UNKNOWN is not set +-# CONFIG_CPU_SH2 is not set +-# CONFIG_CPU_SH3 is not set ++ ++# ++# Processor selection ++# + CONFIG_CPU_SH4=y ++CONFIG_CPU_SH4A=y ++ ++# ++# SH-2 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7300 is not set + # CONFIG_CPU_SUBTYPE_SH7705 is not set + # CONFIG_CPU_SUBTYPE_SH7707 is not set + # CONFIG_CPU_SUBTYPE_SH7708 is not set + # CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7750 is not set ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set + # CONFIG_CPU_SUBTYPE_SH7751 is not set ++# CONFIG_CPU_SUBTYPE_SH7751R is not set + # CONFIG_CPU_SUBTYPE_SH7760 is not set +-CONFIG_CPU_SUBTYPE_SH73180=y ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# + # CONFIG_CPU_SUBTYPE_ST40STB1 is not set + # CONFIG_CPU_SUBTYPE_ST40GX1 is not set +-# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# SH-4A Processor Support ++# ++CONFIG_CPU_SUBTYPE_SH73180=y ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# + CONFIG_MMU=y +-CONFIG_CMDLINE_BOOL=y +-CONFIG_CMDLINE="console=ttySC0,38400 root=/dev/ram" ++CONFIG_32BIT=y ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set + CONFIG_MEMORY_START=0x0c000000 + CONFIG_MEMORY_SIZE=0x02000000 +-# CONFIG_MEMORY_OVERRIDE is not set +-# CONFIG_SH_FPU is not set +-CONFIG_ZERO_PAGE_OFFSET=0x00010000 +-CONFIG_BOOT_LINK_OFFSET=0x00800000 ++ ++# ++# Processor features ++# + CONFIG_CPU_LITTLE_ENDIAN=y +-# CONFIG_PREEMPT is not set +-# CONFIG_UBC_WAKEUP is not set +-# CONFIG_SH_WRITETHROUGH is not set +-# CONFIG_SH_OCRAM is not set ++# CONFIG_SH_FPU is not set + # CONFIG_SH_STORE_QUEUES is not set +-# CONFIG_SMP is not set +-# CONFIG_SH_PCLK_CALC is not set ++CONFIG_CPU_HAS_INTEVT=y ++CONFIG_CPU_HAS_SR_RB=y ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++CONFIG_SH_PCLK_FREQ_BOOL=y + CONFIG_SH_PCLK_FREQ=27000000 + + # +@@ -133,18 +207,30 @@ + CONFIG_HEARTBEAT=y + + # +-# Bus options (PCI, PCMCIA, EISA, MCA, ISA) ++# Kernel features + # +-# CONFIG_PCI is not set ++# CONFIG_KEXEC is not set ++# CONFIG_PREEMPT is not set ++# CONFIG_SMP is not set + + # +-# PCCARD (PCMCIA/CardBus) support ++# Boot options + # +-# CONFIG_PCCARD is not set ++CONFIG_ZERO_PAGE_OFFSET=0x00010000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++CONFIG_CMDLINE_BOOL=y ++CONFIG_CMDLINE="console=ttySC0,38400 root=/dev/ram" ++ ++# ++# Bus options ++# ++# CONFIG_PCI is not set + + # +-# PC-card bridges ++# PCCARD (PCMCIA/CardBus) support + # ++# CONFIG_PCCARD is not set + + # + # PCI Hotplug Support +@@ -158,10 +244,9 @@ + # CONFIG_BINFMT_MISC is not set + + # +-# SH initrd options ++# Networking + # +-CONFIG_EMBEDDED_RAMDISK=y +-CONFIG_EMBEDDED_RAMDISK_IMAGE="ramdisk.gz" ++# CONFIG_NET is not set + + # + # Device Drivers +@@ -175,6 +260,10 @@ + # CONFIG_FW_LOADER is not set + + # ++# Connector - unified userspace <-> kernelspace linker ++# ++ ++# + # Memory Technology Devices (MTD) + # + # CONFIG_MTD is not set +@@ -191,7 +280,6 @@ + # + # Block devices + # +-# CONFIG_BLK_DEV_FD is not set + # CONFIG_BLK_DEV_COW_COMMON is not set + CONFIG_BLK_DEV_LOOP=y + # CONFIG_BLK_DEV_CRYPTOLOOP is not set +@@ -199,19 +287,9 @@ + CONFIG_BLK_DEV_RAM_COUNT=16 + CONFIG_BLK_DEV_RAM_SIZE=4096 + CONFIG_BLK_DEV_INITRD=y +-CONFIG_INITRAMFS_SOURCE="" +-# CONFIG_LBD is not set + # CONFIG_CDROM_PKTCDVD is not set + + # +-# IO Schedulers +-# +-CONFIG_IOSCHED_NOOP=y +-# CONFIG_IOSCHED_AS is not set +-# CONFIG_IOSCHED_DEADLINE is not set +-# CONFIG_IOSCHED_CFQ is not set +- +-# + # ATA/ATAPI/MFM/RLL support + # + # CONFIG_IDE is not set +@@ -219,6 +297,7 @@ + # + # SCSI device support + # ++# CONFIG_RAID_ATTRS is not set + # CONFIG_SCSI is not set + + # +@@ -229,6 +308,7 @@ + # + # Fusion MPT device support + # ++# CONFIG_FUSION is not set + + # + # IEEE 1394 (FireWire) support +@@ -239,9 +319,8 @@ + # + + # +-# Networking support ++# Network device support + # +-# CONFIG_NET is not set + # CONFIG_NETPOLL is not set + # CONFIG_NET_POLL_CONTROLLER is not set + +@@ -260,20 +339,10 @@ + # CONFIG_INPUT is not set + + # +-# Userland interfaces +-# +- +-# +-# Input I/O drivers ++# Hardware I/O ports + # +-# CONFIG_GAMEPORT is not set +-CONFIG_SOUND_GAMEPORT=y + # CONFIG_SERIO is not set +-# CONFIG_SERIO_I8042 is not set +- +-# +-# Input Device Drivers +-# ++# CONFIG_GAMEPORT is not set + + # + # Character devices +@@ -320,10 +389,15 @@ + # + # Ftape, the floppy tape device driver + # +-# CONFIG_DRM is not set + # CONFIG_RAW_DRIVER is not set + + # ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# + # I2C support + # + # CONFIG_I2C is not set +@@ -334,10 +408,21 @@ + # CONFIG_W1 is not set + + # ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# + # Misc devices + # + + # ++# Multimedia Capabilities Port drivers ++# ++ ++# + # Multimedia devices + # + # CONFIG_VIDEO_DEV is not set +@@ -363,7 +448,7 @@ + # CONFIG_USB_ARCH_HAS_OHCI is not set + + # +-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' + # + + # +@@ -379,28 +464,31 @@ + # + # InfiniBand support + # +-# CONFIG_INFINIBAND is not set ++ ++# ++# SN Devices ++# + + # + # File systems + # + CONFIG_EXT2_FS=y + # CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set + # CONFIG_EXT3_FS is not set + # CONFIG_JBD is not set + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set +- +-# +-# XFS support +-# ++# CONFIG_FS_POSIX_ACL is not set + # CONFIG_XFS_FS is not set + # CONFIG_MINIX_FS is not set + # CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y + # CONFIG_QUOTA is not set + CONFIG_DNOTIFY=y + # CONFIG_AUTOFS_FS is not set + # CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set + + # + # CD-ROM/DVD Filesystems +@@ -421,14 +509,11 @@ + CONFIG_PROC_FS=y + CONFIG_PROC_KCORE=y + # CONFIG_SYSFS is not set +-CONFIG_DEVFS_FS=y +-CONFIG_DEVFS_MOUNT=y +-# CONFIG_DEVFS_DEBUG is not set + CONFIG_TMPFS=y +-# CONFIG_TMPFS_XATTR is not set + # CONFIG_HUGETLBFS is not set + # CONFIG_HUGETLB_PAGE is not set + CONFIG_RAMFS=y ++# CONFIG_RELAYFS_FS is not set + + # + # Miscellaneous filesystems +@@ -466,7 +551,9 @@ + # + # Kernel hacking + # ++# CONFIG_PRINTK_TIME is not set + # CONFIG_DEBUG_KERNEL is not set ++CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_FRAME_POINTER is not set + CONFIG_SH_STANDARD_BIOS=y + # CONFIG_EARLY_SCIF_CONSOLE is not set +@@ -477,7 +564,6 @@ + # Security options + # + # CONFIG_KEYS is not set +-# CONFIG_SECURITY is not set + + # + # Cryptographic options +@@ -492,5 +578,6 @@ + # Library routines + # + # CONFIG_CRC_CCITT is not set ++# CONFIG_CRC16 is not set + CONFIG_CRC32=y + # CONFIG_LIBCRC32C is not set +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/se7705_defconfig linux-2.6.17/arch/sh/configs/se7705_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/se7705_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/se7705_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,7 +1,7 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.11-sh +-# Wed Mar 2 15:09:45 2005 ++# Linux kernel version: 2.6.15-sh ++# Wed Jan 4 19:35:13 2006 + # + CONFIG_SUPERH=y + CONFIG_UID16=y +@@ -17,32 +17,38 @@ + CONFIG_CLEAN_COMPILE=y + CONFIG_BROKEN_ON_SMP=y + CONFIG_LOCK_KERNEL=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 + + # + # General setup + # + CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y + # CONFIG_SWAP is not set + # CONFIG_SYSVIPC is not set + # CONFIG_POSIX_MQUEUE is not set + # CONFIG_BSD_PROCESS_ACCT is not set + # CONFIG_SYSCTL is not set + # CONFIG_AUDIT is not set +-CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_HOTPLUG is not set + CONFIG_KOBJECT_UEVENT=y + # CONFIG_IKCONFIG is not set ++CONFIG_INITRAMFS_SOURCE="" ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_EMBEDDED=y + # CONFIG_KALLSYMS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y + CONFIG_FUTEX=y + CONFIG_EPOLL=y +-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_SHMEM=y + CONFIG_CC_ALIGN_FUNCTIONS=0 + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 + # CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 + + # + # Loadable module support +@@ -55,6 +61,24 @@ + CONFIG_KMOD=y + + # ++# Block layer ++# ++# CONFIG_LBD is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++CONFIG_IOSCHED_AS=y ++# CONFIG_IOSCHED_DEADLINE is not set ++# CONFIG_IOSCHED_CFQ is not set ++CONFIG_DEFAULT_AS=y ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++# CONFIG_DEFAULT_NOOP is not set ++CONFIG_DEFAULT_IOSCHED="anticipatory" ++ ++# + # System type + # + CONFIG_SH_SOLUTION_ENGINE=y +@@ -64,9 +88,7 @@ + # CONFIG_SH_7751_SYSTEMH is not set + # CONFIG_SH_STB1_HARP is not set + # CONFIG_SH_STB1_OVERDRIVE is not set +-# CONFIG_SH_HP620 is not set +-# CONFIG_SH_HP680 is not set +-# CONFIG_SH_HP690 is not set ++# CONFIG_SH_HP6XX is not set + # CONFIG_SH_CQREEK is not set + # CONFIG_SH_DMIDA is not set + # CONFIG_SH_EC3104 is not set +@@ -83,44 +105,91 @@ + # CONFIG_SH_RTS7751R2D is not set + # CONFIG_SH_EDOSK7705 is not set + # CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set ++# CONFIG_SH_TITAN is not set + # CONFIG_SH_UNKNOWN is not set +-# CONFIG_CPU_SH2 is not set ++ ++# ++# Processor selection ++# + CONFIG_CPU_SH3=y +-# CONFIG_CPU_SH4 is not set ++ ++# ++# SH-2 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7300 is not set + CONFIG_CPU_SUBTYPE_SH7705=y + # CONFIG_CPU_SUBTYPE_SH7707 is not set + # CONFIG_CPU_SUBTYPE_SH7708 is not set + # CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7750 is not set ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set + # CONFIG_CPU_SUBTYPE_SH7751 is not set ++# CONFIG_CPU_SUBTYPE_SH7751R is not set + # CONFIG_CPU_SUBTYPE_SH7760 is not set +-# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# + # CONFIG_CPU_SUBTYPE_ST40STB1 is not set + # CONFIG_CPU_SUBTYPE_ST40GX1 is not set +-# CONFIG_CPU_SUBTYPE_SH4_202 is not set +-CONFIG_SH7705_CACHE_32KB=y ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# + CONFIG_MMU=y +-# CONFIG_CMDLINE_BOOL is not set ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++ ++# ++# Cache configuration ++# ++CONFIG_SH7705_CACHE_32KB=y ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set + CONFIG_MEMORY_START=0x0c000000 + CONFIG_MEMORY_SIZE=0x02000000 +-CONFIG_MEMORY_SET=y +-# CONFIG_MEMORY_OVERRIDE is not set + # CONFIG_CF_ENABLER is not set ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y + CONFIG_SH_RTC=y + # CONFIG_SH_DSP is not set + # CONFIG_SH_ADC is not set +-CONFIG_ZERO_PAGE_OFFSET=0x00001000 +-CONFIG_BOOT_LINK_OFFSET=0x00800000 +-CONFIG_CPU_LITTLE_ENDIAN=y +-CONFIG_PREEMPT=y +-# CONFIG_UBC_WAKEUP is not set +-# CONFIG_SH_WRITETHROUGH is not set +-# CONFIG_SH_OCRAM is not set +-# CONFIG_SMP is not set +-CONFIG_SH_PCLK_CALC=y +-CONFIG_SH_PCLK_FREQ=33333333 ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++# CONFIG_SH_PCLK_FREQ_BOOL is not set + + # + # CPU Frequency scaling +@@ -139,18 +208,29 @@ + CONFIG_HEARTBEAT=y + + # +-# Bus options (PCI, PCMCIA, EISA, MCA, ISA) ++# Kernel features + # +-# CONFIG_PCI is not set ++# CONFIG_KEXEC is not set ++CONFIG_PREEMPT=y ++# CONFIG_SMP is not set + + # +-# PCCARD (PCMCIA/CardBus) support ++# Boot options + # +-# CONFIG_PCCARD is not set ++CONFIG_ZERO_PAGE_OFFSET=0x00001000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++# CONFIG_CMDLINE_BOOL is not set ++ ++# ++# Bus options ++# ++# CONFIG_PCI is not set + + # +-# PC-card bridges ++# PCCARD (PCMCIA/CardBus) support + # ++# CONFIG_PCCARD is not set + + # + # PCI Hotplug Support +@@ -164,9 +244,75 @@ + # CONFIG_BINFMT_MISC is not set + + # +-# SH initrd options ++# Networking + # +-# CONFIG_EMBEDDED_RAMDISK is not set ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++CONFIG_PACKET=y ++# CONFIG_PACKET_MMAP is not set ++CONFIG_UNIX=y ++# CONFIG_NET_KEY is not set ++CONFIG_INET=y ++# CONFIG_IP_MULTICAST is not set ++# CONFIG_IP_ADVANCED_ROUTER is not set ++CONFIG_IP_FIB_HASH=y ++CONFIG_IP_PNP=y ++CONFIG_IP_PNP_DHCP=y ++CONFIG_IP_PNP_BOOTP=y ++CONFIG_IP_PNP_RARP=y ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_TUNNEL is not set ++CONFIG_INET_DIAG=y ++CONFIG_INET_TCP_DIAG=y ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++# CONFIG_IPV6 is not set ++# CONFIG_NETFILTER is not set ++ ++# ++# DCCP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_DCCP is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++# CONFIG_ATM is not set ++# CONFIG_BRIDGE is not set ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_NET_DIVERT is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++ ++# ++# QoS and/or fair queueing ++# ++# CONFIG_NET_SCHED is not set ++ ++# ++# Network testing ++# ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++# CONFIG_IEEE80211 is not set + + # + # Device Drivers +@@ -180,12 +326,17 @@ + # CONFIG_FW_LOADER is not set + + # ++# Connector - unified userspace <-> kernelspace linker ++# ++# CONFIG_CONNECTOR is not set ++ ++# + # Memory Technology Devices (MTD) + # + CONFIG_MTD=y + # CONFIG_MTD_DEBUG is not set +-CONFIG_MTD_PARTITIONS=y + # CONFIG_MTD_CONCAT is not set ++CONFIG_MTD_PARTITIONS=y + # CONFIG_MTD_REDBOOT_PARTS is not set + # CONFIG_MTD_CMDLINE_PARTS is not set + +@@ -197,6 +348,7 @@ + # CONFIG_FTL is not set + # CONFIG_NFTL is not set + # CONFIG_INFTL is not set ++# CONFIG_RFD_FTL is not set + + # + # RAM/ROM/Flash chip drivers +@@ -231,8 +383,7 @@ + # CONFIG_MTD_PHYSMAP is not set + CONFIG_MTD_SOLUTIONENGINE=y + CONFIG_MTD_SUPERH_RESERVE=0x300000 +-# CONFIG_MTD_MPC1211 is not set +-# CONFIG_MTD_RTS7751R2D is not set ++# CONFIG_MTD_PLATRAM is not set + + # + # Self-contained MTD device drivers +@@ -256,6 +407,11 @@ + # CONFIG_MTD_NAND is not set + + # ++# OneNAND Flash Device Drivers ++# ++# CONFIG_MTD_ONENAND is not set ++ ++# + # Parallel port support + # + # CONFIG_PARPORT is not set +@@ -267,7 +423,6 @@ + # + # Block devices + # +-# CONFIG_BLK_DEV_FD is not set + # CONFIG_BLK_DEV_COW_COMMON is not set + # CONFIG_BLK_DEV_LOOP is not set + # CONFIG_BLK_DEV_NBD is not set +@@ -275,17 +430,7 @@ + CONFIG_BLK_DEV_RAM_COUNT=16 + CONFIG_BLK_DEV_RAM_SIZE=8192 + CONFIG_BLK_DEV_INITRD=y +-CONFIG_INITRAMFS_SOURCE="" +-# CONFIG_LBD is not set + # CONFIG_CDROM_PKTCDVD is not set +- +-# +-# IO Schedulers +-# +-CONFIG_IOSCHED_NOOP=y +-CONFIG_IOSCHED_AS=y +-# CONFIG_IOSCHED_DEADLINE is not set +-# CONFIG_IOSCHED_CFQ is not set + # CONFIG_ATA_OVER_ETH is not set + + # +@@ -296,6 +441,7 @@ + # + # SCSI device support + # ++# CONFIG_RAID_ATTRS is not set + # CONFIG_SCSI is not set + + # +@@ -306,6 +452,7 @@ + # + # Fusion MPT device support + # ++# CONFIG_FUSION is not set + + # + # IEEE 1394 (FireWire) support +@@ -316,70 +463,8 @@ + # + + # +-# Networking support +-# +-CONFIG_NET=y +- +-# +-# Networking options +-# +-CONFIG_PACKET=y +-# CONFIG_PACKET_MMAP is not set +-# CONFIG_NETLINK_DEV is not set +-CONFIG_UNIX=y +-# CONFIG_NET_KEY is not set +-CONFIG_INET=y +-# CONFIG_IP_MULTICAST is not set +-# CONFIG_IP_ADVANCED_ROUTER is not set +-CONFIG_IP_PNP=y +-CONFIG_IP_PNP_DHCP=y +-CONFIG_IP_PNP_BOOTP=y +-CONFIG_IP_PNP_RARP=y +-# CONFIG_NET_IPIP is not set +-# CONFIG_NET_IPGRE is not set +-# CONFIG_ARPD is not set +-# CONFIG_SYN_COOKIES is not set +-# CONFIG_INET_AH is not set +-# CONFIG_INET_ESP is not set +-# CONFIG_INET_IPCOMP is not set +-# CONFIG_INET_TUNNEL is not set +-CONFIG_IP_TCPDIAG=y +-# CONFIG_IP_TCPDIAG_IPV6 is not set +-# CONFIG_IPV6 is not set +-# CONFIG_NETFILTER is not set +- +-# +-# SCTP Configuration (EXPERIMENTAL) +-# +-# CONFIG_IP_SCTP is not set +-# CONFIG_ATM is not set +-# CONFIG_BRIDGE is not set +-# CONFIG_VLAN_8021Q is not set +-# CONFIG_DECNET is not set +-# CONFIG_LLC2 is not set +-# CONFIG_IPX is not set +-# CONFIG_ATALK is not set +-# CONFIG_X25 is not set +-# CONFIG_LAPB is not set +-# CONFIG_NET_DIVERT is not set +-# CONFIG_ECONET is not set +-# CONFIG_WAN_ROUTER is not set +- +-# +-# QoS and/or fair queueing +-# +-# CONFIG_NET_SCHED is not set +-# CONFIG_NET_CLS_ROUTE is not set +- +-# +-# Network testing ++# Network device support + # +-# CONFIG_NET_PKTGEN is not set +-# CONFIG_NETPOLL is not set +-# CONFIG_NET_POLL_CONTROLLER is not set +-# CONFIG_HAMRADIO is not set +-# CONFIG_IRDA is not set +-# CONFIG_BT is not set + CONFIG_NETDEVICES=y + # CONFIG_DUMMY is not set + # CONFIG_BONDING is not set +@@ -387,12 +472,18 @@ + # CONFIG_TUN is not set + + # ++# PHY device support ++# ++# CONFIG_PHYLIB is not set ++ ++# + # Ethernet (10 or 100Mbit) + # + CONFIG_NET_ETHERNET=y + # CONFIG_MII is not set + CONFIG_STNIC=y + # CONFIG_SMC91X is not set ++# CONFIG_NE2000 is not set + + # + # Ethernet (1000 Mbit) +@@ -422,10 +513,13 @@ + # CONFIG_PPP_SYNC_TTY is not set + CONFIG_PPP_DEFLATE=y + # CONFIG_PPP_BSDCOMP is not set ++# CONFIG_PPP_MPPE is not set + # CONFIG_PPPOE is not set + # CONFIG_SLIP is not set + # CONFIG_SHAPER is not set + # CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set + + # + # ISDN subsystem +@@ -452,18 +546,6 @@ + # CONFIG_INPUT_EVBUG is not set + + # +-# Input I/O drivers +-# +-# CONFIG_GAMEPORT is not set +-CONFIG_SOUND_GAMEPORT=y +-CONFIG_SERIO=y +-# CONFIG_SERIO_I8042 is not set +-# CONFIG_SERIO_SERPORT is not set +-# CONFIG_SERIO_CT82C710 is not set +-# CONFIG_SERIO_LIBPS2 is not set +-# CONFIG_SERIO_RAW is not set +- +-# + # Input Device Drivers + # + # CONFIG_INPUT_KEYBOARD is not set +@@ -473,6 +555,16 @@ + # CONFIG_INPUT_MISC is not set + + # ++# Hardware I/O ports ++# ++CONFIG_SERIO=y ++# CONFIG_SERIO_I8042 is not set ++# CONFIG_SERIO_SERPORT is not set ++# CONFIG_SERIO_LIBPS2 is not set ++# CONFIG_SERIO_RAW is not set ++# CONFIG_GAMEPORT is not set ++ ++# + # Character devices + # + # CONFIG_VT is not set +@@ -510,10 +602,15 @@ + # + # Ftape, the floppy tape device driver + # +-# CONFIG_DRM is not set + # CONFIG_RAW_DRIVER is not set + + # ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# + # I2C support + # + # CONFIG_I2C is not set +@@ -524,10 +621,21 @@ + # CONFIG_W1 is not set + + # ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# + # Misc devices + # + + # ++# Multimedia Capabilities Port drivers ++# ++ ++# + # Multimedia devices + # + # CONFIG_VIDEO_DEV is not set +@@ -554,7 +662,7 @@ + # CONFIG_USB_ARCH_HAS_OHCI is not set + + # +-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' + # + + # +@@ -570,28 +678,31 @@ + # + # InfiniBand support + # +-# CONFIG_INFINIBAND is not set ++ ++# ++# SN Devices ++# + + # + # File systems + # + CONFIG_EXT2_FS=y + # CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set + # CONFIG_EXT3_FS is not set + # CONFIG_JBD is not set + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set +- +-# +-# XFS support +-# ++# CONFIG_FS_POSIX_ACL is not set + # CONFIG_XFS_FS is not set + # CONFIG_MINIX_FS is not set + # CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y + # CONFIG_QUOTA is not set + CONFIG_DNOTIFY=y + # CONFIG_AUTOFS_FS is not set + # CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set + + # + # CD-ROM/DVD Filesystems +@@ -612,12 +723,11 @@ + CONFIG_PROC_FS=y + CONFIG_PROC_KCORE=y + # CONFIG_SYSFS is not set +-# CONFIG_DEVFS_FS is not set +-# CONFIG_DEVPTS_FS_XATTR is not set + # CONFIG_TMPFS is not set + # CONFIG_HUGETLBFS is not set + # CONFIG_HUGETLB_PAGE is not set + CONFIG_RAMFS=y ++# CONFIG_RELAYFS_FS is not set + + # + # Miscellaneous filesystems +@@ -632,8 +742,8 @@ + # CONFIG_JFFS_FS is not set + CONFIG_JFFS2_FS=y + CONFIG_JFFS2_FS_DEBUG=0 +-# CONFIG_JFFS2_FS_NAND is not set +-# CONFIG_JFFS2_FS_NOR_ECC is not set ++CONFIG_JFFS2_FS_WRITEBUFFER=y ++# CONFIG_JFFS2_SUMMARY is not set + # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set + CONFIG_JFFS2_ZLIB=y + CONFIG_JFFS2_RTIME=y +@@ -655,6 +765,7 @@ + # CONFIG_NFSD is not set + CONFIG_ROOT_NFS=y + CONFIG_LOCKD=y ++CONFIG_NFS_COMMON=y + CONFIG_SUNRPC=y + # CONFIG_RPCSEC_GSS_KRB5 is not set + # CONFIG_RPCSEC_GSS_SPKM3 is not set +@@ -663,6 +774,7 @@ + # CONFIG_NCP_FS is not set + # CONFIG_CODA_FS is not set + # CONFIG_AFS_FS is not set ++# CONFIG_9P_FS is not set + + # + # Partition Types +@@ -683,8 +795,9 @@ + # + # Kernel hacking + # ++# CONFIG_PRINTK_TIME is not set + # CONFIG_DEBUG_KERNEL is not set +-CONFIG_DEBUG_PREEMPT=y ++CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_FRAME_POINTER is not set + # CONFIG_SH_STANDARD_BIOS is not set + # CONFIG_KGDB is not set +@@ -693,7 +806,6 @@ + # Security options + # + # CONFIG_KEYS is not set +-# CONFIG_SECURITY is not set + + # + # Cryptographic options +@@ -708,6 +820,7 @@ + # Library routines + # + CONFIG_CRC_CCITT=y ++# CONFIG_CRC16 is not set + CONFIG_CRC32=y + # CONFIG_LIBCRC32C is not set + CONFIG_ZLIB_INFLATE=y +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/se7750_defconfig linux-2.6.17/arch/sh/configs/se7750_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/se7750_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/se7750_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,7 +1,7 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.11-sh +-# Wed Mar 2 15:09:46 2005 ++# Linux kernel version: 2.6.15-sh ++# Wed Jan 4 19:57:15 2006 + # + CONFIG_SUPERH=y + CONFIG_UID16=y +@@ -16,11 +16,13 @@ + CONFIG_EXPERIMENTAL=y + CONFIG_CLEAN_COMPILE=y + CONFIG_BROKEN_ON_SMP=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 + + # + # General setup + # + CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y + # CONFIG_SWAP is not set + CONFIG_SYSVIPC=y + # CONFIG_POSIX_MQUEUE is not set +@@ -28,23 +30,27 @@ + # CONFIG_BSD_PROCESS_ACCT_V3 is not set + CONFIG_SYSCTL=y + # CONFIG_AUDIT is not set +-CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_HOTPLUG is not set + CONFIG_KOBJECT_UEVENT=y + CONFIG_IKCONFIG=y + CONFIG_IKCONFIG_PROC=y ++CONFIG_INITRAMFS_SOURCE="" ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_EMBEDDED=y + CONFIG_KALLSYMS=y + # CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y + CONFIG_FUTEX=y + CONFIG_EPOLL=y +-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_SHMEM=y + CONFIG_CC_ALIGN_FUNCTIONS=0 + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 + # CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 + + # + # Loadable module support +@@ -57,6 +63,24 @@ + CONFIG_KMOD=y + + # ++# Block layer ++# ++# CONFIG_LBD is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++CONFIG_IOSCHED_AS=y ++CONFIG_IOSCHED_DEADLINE=y ++CONFIG_IOSCHED_CFQ=y ++CONFIG_DEFAULT_AS=y ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++# CONFIG_DEFAULT_NOOP is not set ++CONFIG_DEFAULT_IOSCHED="anticipatory" ++ ++# + # System type + # + CONFIG_SH_SOLUTION_ENGINE=y +@@ -66,9 +90,7 @@ + # CONFIG_SH_7751_SYSTEMH is not set + # CONFIG_SH_STB1_HARP is not set + # CONFIG_SH_STB1_OVERDRIVE is not set +-# CONFIG_SH_HP620 is not set +-# CONFIG_SH_HP680 is not set +-# CONFIG_SH_HP690 is not set ++# CONFIG_SH_HP6XX is not set + # CONFIG_SH_CQREEK is not set + # CONFIG_SH_DMIDA is not set + # CONFIG_SH_EC3104 is not set +@@ -85,47 +107,93 @@ + # CONFIG_SH_RTS7751R2D is not set + # CONFIG_SH_EDOSK7705 is not set + # CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set ++# CONFIG_SH_TITAN is not set + # CONFIG_SH_UNKNOWN is not set +-# CONFIG_CPU_SH2 is not set +-# CONFIG_CPU_SH3 is not set ++ ++# ++# Processor selection ++# + CONFIG_CPU_SH4=y ++ ++# ++# SH-2 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7300 is not set + # CONFIG_CPU_SUBTYPE_SH7705 is not set + # CONFIG_CPU_SUBTYPE_SH7707 is not set + # CONFIG_CPU_SUBTYPE_SH7708 is not set + # CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# + CONFIG_CPU_SUBTYPE_SH7750=y ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set + # CONFIG_CPU_SUBTYPE_SH7751 is not set ++# CONFIG_CPU_SUBTYPE_SH7751R is not set + # CONFIG_CPU_SUBTYPE_SH7760 is not set +-# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# + # CONFIG_CPU_SUBTYPE_ST40STB1 is not set + # CONFIG_CPU_SUBTYPE_ST40GX1 is not set +-# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# + CONFIG_MMU=y +-CONFIG_CMDLINE_BOOL=y +-CONFIG_CMDLINE="console=ttySC1,38400 root=/dev/nfs ip=bootp" ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set + CONFIG_MEMORY_START=0x0c000000 + CONFIG_MEMORY_SIZE=0x02000000 +-CONFIG_MEMORY_SET=y +-# CONFIG_MEMORY_OVERRIDE is not set + CONFIG_CF_ENABLER=y + # CONFIG_CF_AREA5 is not set + CONFIG_CF_AREA6=y + CONFIG_CF_BASE_ADDR=0xb8000000 ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y + CONFIG_SH_RTC=y + CONFIG_SH_FPU=y +-CONFIG_ZERO_PAGE_OFFSET=0x00001000 +-CONFIG_BOOT_LINK_OFFSET=0x00800000 +-CONFIG_CPU_LITTLE_ENDIAN=y +-# CONFIG_PREEMPT is not set +-# CONFIG_UBC_WAKEUP is not set +-# CONFIG_SH_WRITETHROUGH is not set +-# CONFIG_SH_OCRAM is not set + # CONFIG_SH_STORE_QUEUES is not set +-# CONFIG_SMP is not set +-CONFIG_SH_PCLK_CALC=y +-CONFIG_SH_PCLK_FREQ=49876504 ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++# CONFIG_SH_PCLK_FREQ_BOOL is not set + + # + # CPU Frequency scaling +@@ -144,18 +212,30 @@ + CONFIG_HEARTBEAT=y + + # +-# Bus options (PCI, PCMCIA, EISA, MCA, ISA) ++# Kernel features + # +-# CONFIG_PCI is not set ++# CONFIG_KEXEC is not set ++# CONFIG_PREEMPT is not set ++# CONFIG_SMP is not set + + # +-# PCCARD (PCMCIA/CardBus) support ++# Boot options + # +-# CONFIG_PCCARD is not set ++CONFIG_ZERO_PAGE_OFFSET=0x00001000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++CONFIG_CMDLINE_BOOL=y ++CONFIG_CMDLINE="console=ttySC1,38400 root=/dev/nfs ip=bootp" + + # +-# PC-card bridges ++# Bus options + # ++# CONFIG_PCI is not set ++ ++# ++# PCCARD (PCMCIA/CardBus) support ++# ++# CONFIG_PCCARD is not set + + # + # PCI Hotplug Support +@@ -169,6 +249,78 @@ + # CONFIG_BINFMT_MISC is not set + + # ++# Networking ++# ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++CONFIG_PACKET=y ++# CONFIG_PACKET_MMAP is not set ++CONFIG_UNIX=y ++# CONFIG_NET_KEY is not set ++CONFIG_INET=y ++CONFIG_IP_MULTICAST=y ++# CONFIG_IP_ADVANCED_ROUTER is not set ++CONFIG_IP_FIB_HASH=y ++CONFIG_IP_PNP=y ++# CONFIG_IP_PNP_DHCP is not set ++CONFIG_IP_PNP_BOOTP=y ++# CONFIG_IP_PNP_RARP is not set ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_IP_MROUTE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_TUNNEL is not set ++CONFIG_INET_DIAG=y ++CONFIG_INET_TCP_DIAG=y ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++# CONFIG_IPV6 is not set ++# CONFIG_NETFILTER is not set ++ ++# ++# DCCP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_DCCP is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++# CONFIG_ATM is not set ++# CONFIG_BRIDGE is not set ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_NET_DIVERT is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++ ++# ++# QoS and/or fair queueing ++# ++# CONFIG_NET_SCHED is not set ++ ++# ++# Network testing ++# ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++# CONFIG_IEEE80211 is not set ++ ++# + # Device Drivers + # + +@@ -180,12 +332,17 @@ + # CONFIG_FW_LOADER is not set + + # ++# Connector - unified userspace <-> kernelspace linker ++# ++# CONFIG_CONNECTOR is not set ++ ++# + # Memory Technology Devices (MTD) + # + CONFIG_MTD=y + # CONFIG_MTD_DEBUG is not set +-CONFIG_MTD_PARTITIONS=y + # CONFIG_MTD_CONCAT is not set ++CONFIG_MTD_PARTITIONS=y + # CONFIG_MTD_REDBOOT_PARTS is not set + # CONFIG_MTD_CMDLINE_PARTS is not set + +@@ -197,6 +354,7 @@ + # CONFIG_FTL is not set + # CONFIG_NFTL is not set + # CONFIG_INFTL is not set ++# CONFIG_RFD_FTL is not set + + # + # RAM/ROM/Flash chip drivers +@@ -231,8 +389,7 @@ + # CONFIG_MTD_PHYSMAP is not set + CONFIG_MTD_SOLUTIONENGINE=y + CONFIG_MTD_SUPERH_RESERVE=0x00010000 +-# CONFIG_MTD_MPC1211 is not set +-# CONFIG_MTD_RTS7751R2D is not set ++# CONFIG_MTD_PLATRAM is not set + + # + # Self-contained MTD device drivers +@@ -256,6 +413,11 @@ + # CONFIG_MTD_NAND is not set + + # ++# OneNAND Flash Device Drivers ++# ++# CONFIG_MTD_ONENAND is not set ++ ++# + # Parallel port support + # + # CONFIG_PARPORT is not set +@@ -267,23 +429,12 @@ + # + # Block devices + # +-# CONFIG_BLK_DEV_FD is not set + # CONFIG_BLK_DEV_COW_COMMON is not set + # CONFIG_BLK_DEV_LOOP is not set + # CONFIG_BLK_DEV_NBD is not set + # CONFIG_BLK_DEV_RAM is not set + CONFIG_BLK_DEV_RAM_COUNT=16 +-CONFIG_INITRAMFS_SOURCE="" +-# CONFIG_LBD is not set + # CONFIG_CDROM_PKTCDVD is not set +- +-# +-# IO Schedulers +-# +-CONFIG_IOSCHED_NOOP=y +-CONFIG_IOSCHED_AS=y +-CONFIG_IOSCHED_DEADLINE=y +-CONFIG_IOSCHED_CFQ=y + # CONFIG_ATA_OVER_ETH is not set + + # +@@ -294,6 +445,7 @@ + # + # SCSI device support + # ++# CONFIG_RAID_ATTRS is not set + # CONFIG_SCSI is not set + + # +@@ -304,6 +456,7 @@ + # + # Fusion MPT device support + # ++# CONFIG_FUSION is not set + + # + # IEEE 1394 (FireWire) support +@@ -314,71 +467,8 @@ + # + + # +-# Networking support +-# +-CONFIG_NET=y +- +-# +-# Networking options +-# +-CONFIG_PACKET=y +-# CONFIG_PACKET_MMAP is not set +-# CONFIG_NETLINK_DEV is not set +-CONFIG_UNIX=y +-# CONFIG_NET_KEY is not set +-CONFIG_INET=y +-CONFIG_IP_MULTICAST=y +-# CONFIG_IP_ADVANCED_ROUTER is not set +-CONFIG_IP_PNP=y +-# CONFIG_IP_PNP_DHCP is not set +-CONFIG_IP_PNP_BOOTP=y +-# CONFIG_IP_PNP_RARP is not set +-# CONFIG_NET_IPIP is not set +-# CONFIG_NET_IPGRE is not set +-# CONFIG_IP_MROUTE is not set +-# CONFIG_ARPD is not set +-# CONFIG_SYN_COOKIES is not set +-# CONFIG_INET_AH is not set +-# CONFIG_INET_ESP is not set +-# CONFIG_INET_IPCOMP is not set +-# CONFIG_INET_TUNNEL is not set +-CONFIG_IP_TCPDIAG=y +-# CONFIG_IP_TCPDIAG_IPV6 is not set +-# CONFIG_IPV6 is not set +-# CONFIG_NETFILTER is not set +- +-# +-# SCTP Configuration (EXPERIMENTAL) +-# +-# CONFIG_IP_SCTP is not set +-# CONFIG_ATM is not set +-# CONFIG_BRIDGE is not set +-# CONFIG_VLAN_8021Q is not set +-# CONFIG_DECNET is not set +-# CONFIG_LLC2 is not set +-# CONFIG_IPX is not set +-# CONFIG_ATALK is not set +-# CONFIG_X25 is not set +-# CONFIG_LAPB is not set +-# CONFIG_NET_DIVERT is not set +-# CONFIG_ECONET is not set +-# CONFIG_WAN_ROUTER is not set +- +-# +-# QoS and/or fair queueing ++# Network device support + # +-# CONFIG_NET_SCHED is not set +-# CONFIG_NET_CLS_ROUTE is not set +- +-# +-# Network testing +-# +-# CONFIG_NET_PKTGEN is not set +-# CONFIG_NETPOLL is not set +-# CONFIG_NET_POLL_CONTROLLER is not set +-# CONFIG_HAMRADIO is not set +-# CONFIG_IRDA is not set +-# CONFIG_BT is not set + CONFIG_NETDEVICES=y + # CONFIG_DUMMY is not set + # CONFIG_BONDING is not set +@@ -386,12 +476,18 @@ + # CONFIG_TUN is not set + + # ++# PHY device support ++# ++# CONFIG_PHYLIB is not set ++ ++# + # Ethernet (10 or 100Mbit) + # + CONFIG_NET_ETHERNET=y + # CONFIG_MII is not set + CONFIG_STNIC=y + # CONFIG_SMC91X is not set ++# CONFIG_NE2000 is not set + + # + # Ethernet (1000 Mbit) +@@ -418,6 +514,8 @@ + # CONFIG_SLIP is not set + # CONFIG_SHAPER is not set + # CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set + + # + # ISDN subsystem +@@ -435,20 +533,10 @@ + # CONFIG_INPUT is not set + + # +-# Userland interfaces +-# +- +-# +-# Input I/O drivers ++# Hardware I/O ports + # +-# CONFIG_GAMEPORT is not set +-CONFIG_SOUND_GAMEPORT=y + # CONFIG_SERIO is not set +-# CONFIG_SERIO_I8042 is not set +- +-# +-# Input Device Drivers +-# ++# CONFIG_GAMEPORT is not set + + # + # Character devices +@@ -499,10 +587,15 @@ + # + # Ftape, the floppy tape device driver + # +-# CONFIG_DRM is not set + # CONFIG_RAW_DRIVER is not set + + # ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# + # I2C support + # + # CONFIG_I2C is not set +@@ -513,10 +606,21 @@ + # CONFIG_W1 is not set + + # ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# + # Misc devices + # + + # ++# Multimedia Capabilities Port drivers ++# ++ ++# + # Multimedia devices + # + # CONFIG_VIDEO_DEV is not set +@@ -543,7 +647,7 @@ + # CONFIG_USB_ARCH_HAS_OHCI is not set + + # +-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' + # + + # +@@ -559,7 +663,10 @@ + # + # InfiniBand support + # +-# CONFIG_INFINIBAND is not set ++ ++# ++# SN Devices ++# + + # + # File systems +@@ -569,17 +676,16 @@ + # CONFIG_JBD is not set + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set +- +-# +-# XFS support +-# ++# CONFIG_FS_POSIX_ACL is not set + # CONFIG_XFS_FS is not set + # CONFIG_MINIX_FS is not set + # CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y + # CONFIG_QUOTA is not set + CONFIG_DNOTIFY=y + # CONFIG_AUTOFS_FS is not set + # CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set + + # + # CD-ROM/DVD Filesystems +@@ -600,13 +706,11 @@ + CONFIG_PROC_FS=y + CONFIG_PROC_KCORE=y + CONFIG_SYSFS=y +-# CONFIG_DEVFS_FS is not set +-# CONFIG_DEVPTS_FS_XATTR is not set + CONFIG_TMPFS=y +-# CONFIG_TMPFS_XATTR is not set + # CONFIG_HUGETLBFS is not set + # CONFIG_HUGETLB_PAGE is not set + CONFIG_RAMFS=y ++# CONFIG_RELAYFS_FS is not set + + # + # Miscellaneous filesystems +@@ -621,8 +725,8 @@ + # CONFIG_JFFS_FS is not set + CONFIG_JFFS2_FS=y + CONFIG_JFFS2_FS_DEBUG=0 +-# CONFIG_JFFS2_FS_NAND is not set +-# CONFIG_JFFS2_FS_NOR_ECC is not set ++CONFIG_JFFS2_FS_WRITEBUFFER=y ++# CONFIG_JFFS2_SUMMARY is not set + # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set + CONFIG_JFFS2_ZLIB=y + CONFIG_JFFS2_RTIME=y +@@ -644,6 +748,7 @@ + # CONFIG_NFSD is not set + CONFIG_ROOT_NFS=y + CONFIG_LOCKD=y ++CONFIG_NFS_COMMON=y + CONFIG_SUNRPC=y + # CONFIG_RPCSEC_GSS_KRB5 is not set + # CONFIG_RPCSEC_GSS_SPKM3 is not set +@@ -652,6 +757,7 @@ + # CONFIG_NCP_FS is not set + # CONFIG_CODA_FS is not set + # CONFIG_AFS_FS is not set ++# CONFIG_9P_FS is not set + + # + # Partition Types +@@ -682,7 +788,9 @@ + # + # Kernel hacking + # ++# CONFIG_PRINTK_TIME is not set + # CONFIG_DEBUG_KERNEL is not set ++CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_FRAME_POINTER is not set + # CONFIG_SH_STANDARD_BIOS is not set + # CONFIG_EARLY_SCIF_CONSOLE is not set +@@ -707,6 +815,7 @@ + # Library routines + # + # CONFIG_CRC_CCITT is not set ++# CONFIG_CRC16 is not set + CONFIG_CRC32=y + # CONFIG_LIBCRC32C is not set + CONFIG_ZLIB_INFLATE=y +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/se7751_defconfig linux-2.6.17/arch/sh/configs/se7751_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/se7751_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/se7751_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,7 +1,7 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.11-sh +-# Wed Mar 2 15:09:48 2005 ++# Linux kernel version: 2.6.15-sh ++# Wed Jan 4 20:02:38 2006 + # + CONFIG_SUPERH=y + CONFIG_UID16=y +@@ -16,11 +16,13 @@ + CONFIG_EXPERIMENTAL=y + CONFIG_CLEAN_COMPILE=y + CONFIG_BROKEN_ON_SMP=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 + + # + # General setup + # + CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y + CONFIG_SWAP=y + CONFIG_SYSVIPC=y + # CONFIG_POSIX_MQUEUE is not set +@@ -28,22 +30,26 @@ + # CONFIG_BSD_PROCESS_ACCT_V3 is not set + CONFIG_SYSCTL=y + # CONFIG_AUDIT is not set +-CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_HOTPLUG is not set + CONFIG_KOBJECT_UEVENT=y + # CONFIG_IKCONFIG is not set ++CONFIG_INITRAMFS_SOURCE="" ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_EMBEDDED=y + CONFIG_KALLSYMS=y + # CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y + CONFIG_FUTEX=y + CONFIG_EPOLL=y +-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_SHMEM=y + CONFIG_CC_ALIGN_FUNCTIONS=0 + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 + # CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 + + # + # Loadable module support +@@ -56,6 +62,24 @@ + # CONFIG_KMOD is not set + + # ++# Block layer ++# ++# CONFIG_LBD is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++CONFIG_IOSCHED_AS=y ++CONFIG_IOSCHED_DEADLINE=y ++CONFIG_IOSCHED_CFQ=y ++CONFIG_DEFAULT_AS=y ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++# CONFIG_DEFAULT_NOOP is not set ++CONFIG_DEFAULT_IOSCHED="anticipatory" ++ ++# + # System type + # + # CONFIG_SH_SOLUTION_ENGINE is not set +@@ -65,9 +89,7 @@ + # CONFIG_SH_7751_SYSTEMH is not set + # CONFIG_SH_STB1_HARP is not set + # CONFIG_SH_STB1_OVERDRIVE is not set +-# CONFIG_SH_HP620 is not set +-# CONFIG_SH_HP680 is not set +-# CONFIG_SH_HP690 is not set ++# CONFIG_SH_HP6XX is not set + # CONFIG_SH_CQREEK is not set + # CONFIG_SH_DMIDA is not set + # CONFIG_SH_EC3104 is not set +@@ -84,43 +106,89 @@ + # CONFIG_SH_RTS7751R2D is not set + # CONFIG_SH_EDOSK7705 is not set + # CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set ++# CONFIG_SH_TITAN is not set + # CONFIG_SH_UNKNOWN is not set +-# CONFIG_CPU_SH2 is not set +-# CONFIG_CPU_SH3 is not set ++ ++# ++# Processor selection ++# + CONFIG_CPU_SH4=y ++ ++# ++# SH-2 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7300 is not set + # CONFIG_CPU_SUBTYPE_SH7705 is not set + # CONFIG_CPU_SUBTYPE_SH7707 is not set + # CONFIG_CPU_SUBTYPE_SH7708 is not set + # CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7750 is not set ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set + CONFIG_CPU_SUBTYPE_SH7751=y ++# CONFIG_CPU_SUBTYPE_SH7751R is not set + # CONFIG_CPU_SUBTYPE_SH7760 is not set +-# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# + # CONFIG_CPU_SUBTYPE_ST40STB1 is not set + # CONFIG_CPU_SUBTYPE_ST40GX1 is not set +-# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# + CONFIG_MMU=y +-CONFIG_CMDLINE_BOOL=y +-CONFIG_CMDLINE="console=ttySC1,38400" ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set + CONFIG_MEMORY_START=0x0c000000 + CONFIG_MEMORY_SIZE=0x04000000 +-CONFIG_MEMORY_SET=y +-# CONFIG_MEMORY_OVERRIDE is not set ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y + CONFIG_SH_RTC=y + CONFIG_SH_FPU=y +-CONFIG_ZERO_PAGE_OFFSET=0x00010000 +-CONFIG_BOOT_LINK_OFFSET=0x00800000 +-CONFIG_CPU_LITTLE_ENDIAN=y +-# CONFIG_PREEMPT is not set +-# CONFIG_UBC_WAKEUP is not set +-# CONFIG_SH_WRITETHROUGH is not set +-# CONFIG_SH_OCRAM is not set + # CONFIG_SH_STORE_QUEUES is not set +-# CONFIG_SMP is not set +-CONFIG_SH_PCLK_CALC=y +-CONFIG_SH_PCLK_FREQ=60013568 ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++# CONFIG_SH_PCLK_FREQ_BOOL is not set + + # + # CPU Frequency scaling +@@ -139,14 +207,29 @@ + CONFIG_HEARTBEAT=y + + # +-# Bus options (PCI, PCMCIA, EISA, MCA, ISA) ++# Kernel features ++# ++# CONFIG_KEXEC is not set ++# CONFIG_PREEMPT is not set ++# CONFIG_SMP is not set ++ ++# ++# Boot options ++# ++CONFIG_ZERO_PAGE_OFFSET=0x00010000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++CONFIG_CMDLINE_BOOL=y ++CONFIG_CMDLINE="console=ttySC1,38400" ++ ++# ++# Bus options + # + CONFIG_PCI=y + # CONFIG_SH_PCIDMA_NONCOHERENT is not set + CONFIG_PCI_AUTO=y + CONFIG_PCI_AUTO_UPDATE_RESOURCES=y + # CONFIG_PCI_LEGACY_PROC is not set +-# CONFIG_PCI_NAMES is not set + + # + # PCCARD (PCMCIA/CardBus) support +@@ -154,10 +237,6 @@ + # CONFIG_PCCARD is not set + + # +-# PC-card bridges +-# +- +-# + # PCI Hotplug Support + # + # CONFIG_HOTPLUG_PCI is not set +@@ -170,9 +249,96 @@ + # CONFIG_BINFMT_MISC is not set + + # +-# SH initrd options ++# Networking ++# ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++CONFIG_PACKET=y ++# CONFIG_PACKET_MMAP is not set ++CONFIG_UNIX=y ++# CONFIG_NET_KEY is not set ++CONFIG_INET=y ++CONFIG_IP_MULTICAST=y ++# CONFIG_IP_ADVANCED_ROUTER is not set ++CONFIG_IP_FIB_HASH=y ++CONFIG_IP_PNP=y ++CONFIG_IP_PNP_DHCP=y ++CONFIG_IP_PNP_BOOTP=y ++CONFIG_IP_PNP_RARP=y ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_IP_MROUTE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_TUNNEL is not set ++CONFIG_INET_DIAG=y ++CONFIG_INET_TCP_DIAG=y ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++ ++# ++# IP: Virtual Server Configuration ++# ++# CONFIG_IP_VS is not set ++# CONFIG_IPV6 is not set ++CONFIG_NETFILTER=y ++CONFIG_NETFILTER_DEBUG=y ++ ++# ++# Core Netfilter Configuration ++# ++# CONFIG_NETFILTER_NETLINK is not set ++# CONFIG_NF_CONNTRACK is not set ++ ++# ++# IP: Netfilter Configuration ++# ++# CONFIG_IP_NF_CONNTRACK is not set ++CONFIG_IP_NF_QUEUE=y ++# CONFIG_IP_NF_IPTABLES is not set ++# CONFIG_IP_NF_ARPTABLES is not set ++ ++# ++# DCCP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_DCCP is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++# CONFIG_ATM is not set ++# CONFIG_BRIDGE is not set ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_NET_DIVERT is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++ ++# ++# QoS and/or fair queueing ++# ++# CONFIG_NET_SCHED is not set ++ ++# ++# Network testing + # +-# CONFIG_EMBEDDED_RAMDISK is not set ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++# CONFIG_IEEE80211 is not set + + # + # Device Drivers +@@ -186,12 +352,17 @@ + # CONFIG_FW_LOADER is not set + + # ++# Connector - unified userspace <-> kernelspace linker ++# ++# CONFIG_CONNECTOR is not set ++ ++# + # Memory Technology Devices (MTD) + # + CONFIG_MTD=y + # CONFIG_MTD_DEBUG is not set +-CONFIG_MTD_PARTITIONS=y + # CONFIG_MTD_CONCAT is not set ++CONFIG_MTD_PARTITIONS=y + # CONFIG_MTD_REDBOOT_PARTS is not set + # CONFIG_MTD_CMDLINE_PARTS is not set + +@@ -203,6 +374,7 @@ + # CONFIG_FTL is not set + # CONFIG_NFTL is not set + # CONFIG_INFTL is not set ++# CONFIG_RFD_FTL is not set + + # + # RAM/ROM/Flash chip drivers +@@ -236,8 +408,7 @@ + # CONFIG_MTD_COMPLEX_MAPPINGS is not set + # CONFIG_MTD_PHYSMAP is not set + # CONFIG_MTD_SOLUTIONENGINE is not set +-# CONFIG_MTD_MPC1211 is not set +-# CONFIG_MTD_RTS7751R2D is not set ++# CONFIG_MTD_PLATRAM is not set + + # + # Self-contained MTD device drivers +@@ -262,6 +433,11 @@ + # CONFIG_MTD_NAND is not set + + # ++# OneNAND Flash Device Drivers ++# ++# CONFIG_MTD_ONENAND is not set ++ ++# + # Parallel port support + # + # CONFIG_PARPORT is not set +@@ -273,7 +449,6 @@ + # + # Block devices + # +-# CONFIG_BLK_DEV_FD is not set + # CONFIG_BLK_CPQ_DA is not set + # CONFIG_BLK_CPQ_CISS_DA is not set + # CONFIG_BLK_DEV_DAC960 is not set +@@ -286,17 +461,7 @@ + CONFIG_BLK_DEV_RAM_COUNT=16 + CONFIG_BLK_DEV_RAM_SIZE=4096 + CONFIG_BLK_DEV_INITRD=y +-CONFIG_INITRAMFS_SOURCE="" +-# CONFIG_LBD is not set + # CONFIG_CDROM_PKTCDVD is not set +- +-# +-# IO Schedulers +-# +-CONFIG_IOSCHED_NOOP=y +-CONFIG_IOSCHED_AS=y +-CONFIG_IOSCHED_DEADLINE=y +-CONFIG_IOSCHED_CFQ=y + # CONFIG_ATA_OVER_ETH is not set + + # +@@ -307,6 +472,7 @@ + # + # SCSI device support + # ++# CONFIG_RAID_ATTRS is not set + # CONFIG_SCSI is not set + + # +@@ -317,6 +483,7 @@ + # + # Fusion MPT device support + # ++# CONFIG_FUSION is not set + + # + # IEEE 1394 (FireWire) support +@@ -329,92 +496,13 @@ + # CONFIG_I2O is not set + + # +-# Networking support +-# +-CONFIG_NET=y +- +-# +-# Networking options +-# +-CONFIG_PACKET=y +-# CONFIG_PACKET_MMAP is not set +-CONFIG_NETLINK_DEV=y +-CONFIG_UNIX=y +-# CONFIG_NET_KEY is not set +-CONFIG_INET=y +-CONFIG_IP_MULTICAST=y +-# CONFIG_IP_ADVANCED_ROUTER is not set +-CONFIG_IP_PNP=y +-CONFIG_IP_PNP_DHCP=y +-CONFIG_IP_PNP_BOOTP=y +-CONFIG_IP_PNP_RARP=y +-# CONFIG_NET_IPIP is not set +-# CONFIG_NET_IPGRE is not set +-# CONFIG_IP_MROUTE is not set +-# CONFIG_ARPD is not set +-# CONFIG_SYN_COOKIES is not set +-# CONFIG_INET_AH is not set +-# CONFIG_INET_ESP is not set +-# CONFIG_INET_IPCOMP is not set +-# CONFIG_INET_TUNNEL is not set +-CONFIG_IP_TCPDIAG=y +-# CONFIG_IP_TCPDIAG_IPV6 is not set +- +-# +-# IP: Virtual Server Configuration +-# +-# CONFIG_IP_VS is not set +-# CONFIG_IPV6 is not set +-CONFIG_NETFILTER=y +-CONFIG_NETFILTER_DEBUG=y +- ++# Network device support + # +-# IP: Netfilter Configuration +-# +-# CONFIG_IP_NF_CONNTRACK is not set +-# CONFIG_IP_NF_CONNTRACK_MARK is not set +-CONFIG_IP_NF_QUEUE=y +-# CONFIG_IP_NF_IPTABLES is not set +-# CONFIG_IP_NF_ARPTABLES is not set +- +-# +-# SCTP Configuration (EXPERIMENTAL) +-# +-# CONFIG_IP_SCTP is not set +-# CONFIG_ATM is not set +-# CONFIG_BRIDGE is not set +-# CONFIG_VLAN_8021Q is not set +-# CONFIG_DECNET is not set +-# CONFIG_LLC2 is not set +-# CONFIG_IPX is not set +-# CONFIG_ATALK is not set +-# CONFIG_X25 is not set +-# CONFIG_LAPB is not set +-# CONFIG_NET_DIVERT is not set +-# CONFIG_ECONET is not set +-# CONFIG_WAN_ROUTER is not set +- +-# +-# QoS and/or fair queueing +-# +-# CONFIG_NET_SCHED is not set +-# CONFIG_NET_CLS_ROUTE is not set +- +-# +-# Network testing +-# +-# CONFIG_NET_PKTGEN is not set +-# CONFIG_NETPOLL is not set +-# CONFIG_NET_POLL_CONTROLLER is not set +-# CONFIG_HAMRADIO is not set +-# CONFIG_IRDA is not set +-# CONFIG_BT is not set + CONFIG_NETDEVICES=y + # CONFIG_DUMMY is not set + # CONFIG_BONDING is not set + # CONFIG_EQUALIZER is not set + # CONFIG_TUN is not set +-# CONFIG_ETHERTAP is not set + + # + # ARCnet devices +@@ -422,6 +510,11 @@ + # CONFIG_ARCNET is not set + + # ++# PHY device support ++# ++# CONFIG_PHYLIB is not set ++ ++# + # Ethernet (10 or 100Mbit) + # + CONFIG_NET_ETHERNET=y +@@ -429,6 +522,7 @@ + # CONFIG_STNIC is not set + # CONFIG_HAPPYMEAL is not set + # CONFIG_SUNGEM is not set ++# CONFIG_CASSINI is not set + # CONFIG_NET_VENDOR_3COM is not set + # CONFIG_SMC91X is not set + +@@ -437,6 +531,7 @@ + # + # CONFIG_NET_TULIP is not set + # CONFIG_HP100 is not set ++# CONFIG_NE2000 is not set + CONFIG_NET_PCI=y + CONFIG_PCNET32=y + # CONFIG_AMD8111_ETH is not set +@@ -467,13 +562,17 @@ + # CONFIG_HAMACHI is not set + # CONFIG_YELLOWFIN is not set + # CONFIG_R8169 is not set ++# CONFIG_SIS190 is not set ++# CONFIG_SKGE is not set + # CONFIG_SK98LIN is not set + # CONFIG_VIA_VELOCITY is not set + # CONFIG_TIGON3 is not set ++# CONFIG_BNX2 is not set + + # + # Ethernet (10000 Mbit) + # ++# CONFIG_CHELSIO_T1 is not set + # CONFIG_IXGB is not set + # CONFIG_S2IO is not set + +@@ -497,6 +596,8 @@ + # CONFIG_SLIP is not set + # CONFIG_SHAPER is not set + # CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set + + # + # ISDN subsystem +@@ -514,20 +615,10 @@ + # CONFIG_INPUT is not set + + # +-# Userland interfaces ++# Hardware I/O ports + # +- +-# +-# Input I/O drivers +-# +-# CONFIG_GAMEPORT is not set +-CONFIG_SOUND_GAMEPORT=y + # CONFIG_SERIO is not set +-# CONFIG_SERIO_I8042 is not set +- +-# +-# Input Device Drivers +-# ++# CONFIG_GAMEPORT is not set + + # + # Character devices +@@ -544,6 +635,7 @@ + # Non-8250 serial port support + # + # CONFIG_SERIAL_SH_SCI is not set ++# CONFIG_SERIAL_JSM is not set + CONFIG_UNIX98_PTYS=y + CONFIG_LEGACY_PTYS=y + CONFIG_LEGACY_PTY_COUNT=256 +@@ -583,6 +675,12 @@ + # CONFIG_RAW_DRIVER is not set + + # ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# + # I2C support + # + # CONFIG_I2C is not set +@@ -593,10 +691,21 @@ + # CONFIG_W1 is not set + + # ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# + # Misc devices + # + + # ++# Multimedia Capabilities Port drivers ++# ++ ++# + # Multimedia devices + # + # CONFIG_VIDEO_DEV is not set +@@ -619,12 +728,12 @@ + # + # USB support + # +-# CONFIG_USB is not set + CONFIG_USB_ARCH_HAS_HCD=y + CONFIG_USB_ARCH_HAS_OHCI=y ++# CONFIG_USB is not set + + # +-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' + # + + # +@@ -643,25 +752,29 @@ + # CONFIG_INFINIBAND is not set + + # ++# SN Devices ++# ++ ++# + # File systems + # + CONFIG_EXT2_FS=y + # CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set + # CONFIG_EXT3_FS is not set + # CONFIG_JBD is not set + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set +- +-# +-# XFS support +-# ++# CONFIG_FS_POSIX_ACL is not set + # CONFIG_XFS_FS is not set + # CONFIG_MINIX_FS is not set + # CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y + # CONFIG_QUOTA is not set + CONFIG_DNOTIFY=y + # CONFIG_AUTOFS_FS is not set + # CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set + + # + # CD-ROM/DVD Filesystems +@@ -682,13 +795,11 @@ + CONFIG_PROC_FS=y + CONFIG_PROC_KCORE=y + CONFIG_SYSFS=y +-# CONFIG_DEVFS_FS is not set +-# CONFIG_DEVPTS_FS_XATTR is not set + CONFIG_TMPFS=y +-# CONFIG_TMPFS_XATTR is not set + # CONFIG_HUGETLBFS is not set + # CONFIG_HUGETLB_PAGE is not set + CONFIG_RAMFS=y ++# CONFIG_RELAYFS_FS is not set + + # + # Miscellaneous filesystems +@@ -703,8 +814,8 @@ + # CONFIG_JFFS_FS is not set + CONFIG_JFFS2_FS=y + CONFIG_JFFS2_FS_DEBUG=0 +-# CONFIG_JFFS2_FS_NAND is not set +-# CONFIG_JFFS2_FS_NOR_ECC is not set ++CONFIG_JFFS2_FS_WRITEBUFFER=y ++# CONFIG_JFFS2_SUMMARY is not set + # CONFIG_JFFS2_COMPRESSION_OPTIONS is not set + CONFIG_JFFS2_ZLIB=y + CONFIG_JFFS2_RTIME=y +@@ -726,6 +837,7 @@ + # CONFIG_NCP_FS is not set + # CONFIG_CODA_FS is not set + # CONFIG_AFS_FS is not set ++# CONFIG_9P_FS is not set + + # + # Partition Types +@@ -746,7 +858,9 @@ + # + # Kernel hacking + # ++# CONFIG_PRINTK_TIME is not set + # CONFIG_DEBUG_KERNEL is not set ++CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_FRAME_POINTER is not set + # CONFIG_SH_STANDARD_BIOS is not set + # CONFIG_EARLY_SCIF_CONSOLE is not set +@@ -771,6 +885,7 @@ + # Library routines + # + # CONFIG_CRC_CCITT is not set ++# CONFIG_CRC16 is not set + CONFIG_CRC32=y + # CONFIG_LIBCRC32C is not set + CONFIG_ZLIB_INFLATE=y +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/sh03_defconfig linux-2.6.17/arch/sh/configs/sh03_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/sh03_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/sh03_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,7 +1,7 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.11-sh +-# Wed Mar 2 15:09:49 2005 ++# Linux kernel version: 2.6.15-sh ++# Wed Jan 4 20:14:31 2006 + # + CONFIG_SUPERH=y + CONFIG_UID16=y +@@ -18,11 +18,13 @@ + CONFIG_BROKEN=y + CONFIG_BROKEN_ON_SMP=y + CONFIG_LOCK_KERNEL=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 + + # + # General setup + # + CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y + CONFIG_SWAP=y + CONFIG_SYSVIPC=y + CONFIG_POSIX_MQUEUE=y +@@ -30,22 +32,26 @@ + # CONFIG_BSD_PROCESS_ACCT_V3 is not set + CONFIG_SYSCTL=y + # CONFIG_AUDIT is not set +-CONFIG_LOG_BUF_SHIFT=14 + CONFIG_HOTPLUG=y + CONFIG_KOBJECT_UEVENT=y + # CONFIG_IKCONFIG is not set ++CONFIG_INITRAMFS_SOURCE="" ++CONFIG_CC_OPTIMIZE_FOR_SIZE=y + # CONFIG_EMBEDDED is not set + CONFIG_KALLSYMS=y + # CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y + CONFIG_FUTEX=y + CONFIG_EPOLL=y +-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_SHMEM=y + CONFIG_CC_ALIGN_FUNCTIONS=0 + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 + # CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 + + # + # Loadable module support +@@ -59,6 +65,24 @@ + CONFIG_KMOD=y + + # ++# Block layer ++# ++# CONFIG_LBD is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++CONFIG_IOSCHED_AS=y ++CONFIG_IOSCHED_DEADLINE=y ++CONFIG_IOSCHED_CFQ=y ++CONFIG_DEFAULT_AS=y ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++# CONFIG_DEFAULT_NOOP is not set ++CONFIG_DEFAULT_IOSCHED="anticipatory" ++ ++# + # System type + # + # CONFIG_SH_SOLUTION_ENGINE is not set +@@ -68,9 +92,7 @@ + # CONFIG_SH_7751_SYSTEMH is not set + # CONFIG_SH_STB1_HARP is not set + # CONFIG_SH_STB1_OVERDRIVE is not set +-# CONFIG_SH_HP620 is not set +-# CONFIG_SH_HP680 is not set +-# CONFIG_SH_HP690 is not set ++# CONFIG_SH_HP6XX is not set + # CONFIG_SH_CQREEK is not set + # CONFIG_SH_DMIDA is not set + # CONFIG_SH_EC3104 is not set +@@ -87,47 +109,93 @@ + # CONFIG_SH_RTS7751R2D is not set + # CONFIG_SH_EDOSK7705 is not set + # CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set ++# CONFIG_SH_TITAN is not set + # CONFIG_SH_UNKNOWN is not set +-# CONFIG_CPU_SH2 is not set +-# CONFIG_CPU_SH3 is not set ++ ++# ++# Processor selection ++# + CONFIG_CPU_SH4=y ++ ++# ++# SH-2 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7300 is not set + # CONFIG_CPU_SUBTYPE_SH7705 is not set + # CONFIG_CPU_SUBTYPE_SH7707 is not set + # CONFIG_CPU_SUBTYPE_SH7708 is not set + # CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7750 is not set ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set + CONFIG_CPU_SUBTYPE_SH7751=y ++# CONFIG_CPU_SUBTYPE_SH7751R is not set + # CONFIG_CPU_SUBTYPE_SH7760 is not set +-# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# + # CONFIG_CPU_SUBTYPE_ST40STB1 is not set + # CONFIG_CPU_SUBTYPE_ST40GX1 is not set +-# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# + CONFIG_MMU=y +-CONFIG_CMDLINE_BOOL=y +-CONFIG_CMDLINE="console=ttySC1,115200 mem=64M root=/dev/nfs" ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set + CONFIG_MEMORY_START=0x08000000 + CONFIG_MEMORY_SIZE=0x08000000 +-CONFIG_MEMORY_SET=y +-# CONFIG_MEMORY_OVERRIDE is not set + CONFIG_CF_ENABLER=y + CONFIG_CF_AREA5=y + # CONFIG_CF_AREA6 is not set + CONFIG_CF_BASE_ADDR=0xb4000000 ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y + CONFIG_SH_RTC=y + CONFIG_SH_FPU=y +-CONFIG_ZERO_PAGE_OFFSET=0x00004000 +-CONFIG_BOOT_LINK_OFFSET=0x00800000 +-CONFIG_CPU_LITTLE_ENDIAN=y +-CONFIG_PREEMPT=y +-# CONFIG_UBC_WAKEUP is not set +-# CONFIG_SH_WRITETHROUGH is not set +-# CONFIG_SH_OCRAM is not set + # CONFIG_SH_STORE_QUEUES is not set +-# CONFIG_SMP is not set +-CONFIG_SH_PCLK_CALC=y +-CONFIG_SH_PCLK_FREQ=49876504 ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++# CONFIG_SH_PCLK_FREQ_BOOL is not set + + # + # CPU Frequency scaling +@@ -146,14 +214,29 @@ + CONFIG_HEARTBEAT=y + + # +-# Bus options (PCI, PCMCIA, EISA, MCA, ISA) ++# Kernel features ++# ++# CONFIG_KEXEC is not set ++CONFIG_PREEMPT=y ++# CONFIG_SMP is not set ++ ++# ++# Boot options ++# ++CONFIG_ZERO_PAGE_OFFSET=0x00004000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++CONFIG_CMDLINE_BOOL=y ++CONFIG_CMDLINE="console=ttySC1,115200 mem=64M root=/dev/nfs" ++ ++# ++# Bus options + # + CONFIG_PCI=y + CONFIG_SH_PCIDMA_NONCOHERENT=y + CONFIG_PCI_AUTO=y + CONFIG_PCI_AUTO_UPDATE_RESOURCES=y + CONFIG_PCI_LEGACY_PROC=y +-CONFIG_PCI_NAMES=y + + # + # PCCARD (PCMCIA/CardBus) support +@@ -161,10 +244,6 @@ + # CONFIG_PCCARD is not set + + # +-# PC-card bridges +-# +- +-# + # PCI Hotplug Support + # + CONFIG_HOTPLUG_PCI=m +@@ -180,9 +259,78 @@ + CONFIG_BINFMT_MISC=y + + # +-# SH initrd options ++# Networking ++# ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++CONFIG_PACKET=y ++# CONFIG_PACKET_MMAP is not set ++CONFIG_UNIX=y ++CONFIG_XFRM=y ++# CONFIG_XFRM_USER is not set ++CONFIG_NET_KEY=y ++CONFIG_INET=y ++CONFIG_IP_MULTICAST=y ++# CONFIG_IP_ADVANCED_ROUTER is not set ++CONFIG_IP_FIB_HASH=y ++CONFIG_IP_PNP=y ++CONFIG_IP_PNP_DHCP=y ++CONFIG_IP_PNP_BOOTP=y ++CONFIG_IP_PNP_RARP=y ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_IP_MROUTE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_TUNNEL is not set ++CONFIG_INET_DIAG=y ++CONFIG_INET_TCP_DIAG=y ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++# CONFIG_IPV6 is not set ++# CONFIG_NETFILTER is not set ++ ++# ++# DCCP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_DCCP is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++# CONFIG_ATM is not set ++# CONFIG_BRIDGE is not set ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_NET_DIVERT is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++ ++# ++# QoS and/or fair queueing ++# ++# CONFIG_NET_SCHED is not set ++ ++# ++# Network testing + # +-# CONFIG_EMBEDDED_RAMDISK is not set ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++# CONFIG_IEEE80211 is not set + + # + # Device Drivers +@@ -196,6 +344,11 @@ + # CONFIG_FW_LOADER is not set + + # ++# Connector - unified userspace <-> kernelspace linker ++# ++# CONFIG_CONNECTOR is not set ++ ++# + # Memory Technology Devices (MTD) + # + # CONFIG_MTD is not set +@@ -212,7 +365,6 @@ + # + # Block devices + # +-# CONFIG_BLK_DEV_FD is not set + # CONFIG_BLK_CPQ_DA is not set + # CONFIG_BLK_CPQ_CISS_DA is not set + # CONFIG_BLK_DEV_DAC960 is not set +@@ -226,17 +378,7 @@ + CONFIG_BLK_DEV_RAM_COUNT=16 + CONFIG_BLK_DEV_RAM_SIZE=4096 + CONFIG_BLK_DEV_INITRD=y +-CONFIG_INITRAMFS_SOURCE="" +-# CONFIG_LBD is not set + # CONFIG_CDROM_PKTCDVD is not set +- +-# +-# IO Schedulers +-# +-CONFIG_IOSCHED_NOOP=y +-CONFIG_IOSCHED_AS=y +-CONFIG_IOSCHED_DEADLINE=y +-CONFIG_IOSCHED_CFQ=y + # CONFIG_ATA_OVER_ETH is not set + + # +@@ -272,6 +414,7 @@ + # + # SCSI device support + # ++# CONFIG_RAID_ATTRS is not set + CONFIG_SCSI=m + CONFIG_SCSI_PROC_FS=y + +@@ -284,6 +427,7 @@ + CONFIG_BLK_DEV_SR=m + CONFIG_BLK_DEV_SR_VENDOR=y + CONFIG_CHR_DEV_SG=m ++# CONFIG_CHR_DEV_SCH is not set + + # + # Some SCSI devices (e.g. CD jukebox) support multiple LUNs +@@ -298,10 +442,12 @@ + # CONFIG_SCSI_SPI_ATTRS is not set + # CONFIG_SCSI_FC_ATTRS is not set + # CONFIG_SCSI_ISCSI_ATTRS is not set ++# CONFIG_SCSI_SAS_ATTRS is not set + + # + # SCSI low-level drivers + # ++# CONFIG_ISCSI_TCP is not set + # CONFIG_BLK_DEV_3W_XXXX_RAID is not set + # CONFIG_SCSI_3W_9XXX is not set + # CONFIG_SCSI_ACARD is not set +@@ -313,22 +459,16 @@ + # CONFIG_SCSI_ADVANSYS is not set + # CONFIG_MEGARAID_NEWGEN is not set + # CONFIG_MEGARAID_LEGACY is not set ++# CONFIG_MEGARAID_SAS is not set + # CONFIG_SCSI_SATA is not set +-# CONFIG_SCSI_BUSLOGIC is not set +-# CONFIG_SCSI_CPQFCTS is not set + # CONFIG_SCSI_DMX3191D is not set +-# CONFIG_SCSI_EATA is not set + # CONFIG_SCSI_EATA_PIO is not set + # CONFIG_SCSI_FUTURE_DOMAIN is not set +-# CONFIG_SCSI_GDTH is not set + # CONFIG_SCSI_IPS is not set + # CONFIG_SCSI_INITIO is not set + # CONFIG_SCSI_INIA100 is not set + # CONFIG_SCSI_SYM53C8XX_2 is not set + # CONFIG_SCSI_IPR is not set +-# CONFIG_SCSI_PCI2000 is not set +-# CONFIG_SCSI_PCI2220I is not set +-# CONFIG_SCSI_QLOGIC_ISP is not set + # CONFIG_SCSI_QLOGIC_FC is not set + # CONFIG_SCSI_QLOGIC_1280 is not set + CONFIG_SCSI_QLA2XXX=m +@@ -337,6 +477,8 @@ + # CONFIG_SCSI_QLA2300 is not set + # CONFIG_SCSI_QLA2322 is not set + # CONFIG_SCSI_QLA6312 is not set ++# CONFIG_SCSI_QLA24XX is not set ++# CONFIG_SCSI_LPFC is not set + # CONFIG_SCSI_DC395x is not set + # CONFIG_SCSI_DC390T is not set + # CONFIG_SCSI_NSP32 is not set +@@ -351,6 +493,9 @@ + # Fusion MPT device support + # + # CONFIG_FUSION is not set ++# CONFIG_FUSION_SPI is not set ++# CONFIG_FUSION_FC is not set ++# CONFIG_FUSION_SAS is not set + + # + # IEEE 1394 (FireWire) support +@@ -363,73 +508,8 @@ + # CONFIG_I2O is not set + + # +-# Networking support +-# +-CONFIG_NET=y +- +-# +-# Networking options +-# +-CONFIG_PACKET=y +-# CONFIG_PACKET_MMAP is not set +-# CONFIG_NETLINK_DEV is not set +-CONFIG_UNIX=y +-CONFIG_NET_KEY=y +-CONFIG_INET=y +-CONFIG_IP_MULTICAST=y +-# CONFIG_IP_ADVANCED_ROUTER is not set +-CONFIG_IP_PNP=y +-CONFIG_IP_PNP_DHCP=y +-CONFIG_IP_PNP_BOOTP=y +-CONFIG_IP_PNP_RARP=y +-# CONFIG_NET_IPIP is not set +-# CONFIG_NET_IPGRE is not set +-# CONFIG_IP_MROUTE is not set +-# CONFIG_ARPD is not set +-# CONFIG_SYN_COOKIES is not set +-# CONFIG_INET_AH is not set +-# CONFIG_INET_ESP is not set +-# CONFIG_INET_IPCOMP is not set +-# CONFIG_INET_TUNNEL is not set +-CONFIG_IP_TCPDIAG=y +-# CONFIG_IP_TCPDIAG_IPV6 is not set +-# CONFIG_IPV6 is not set +-# CONFIG_NETFILTER is not set +-CONFIG_XFRM=y +-# CONFIG_XFRM_USER is not set +- +-# +-# SCTP Configuration (EXPERIMENTAL) ++# Network device support + # +-# CONFIG_IP_SCTP is not set +-# CONFIG_ATM is not set +-# CONFIG_BRIDGE is not set +-# CONFIG_VLAN_8021Q is not set +-# CONFIG_DECNET is not set +-# CONFIG_LLC2 is not set +-# CONFIG_IPX is not set +-# CONFIG_ATALK is not set +-# CONFIG_X25 is not set +-# CONFIG_LAPB is not set +-# CONFIG_NET_DIVERT is not set +-# CONFIG_ECONET is not set +-# CONFIG_WAN_ROUTER is not set +- +-# +-# QoS and/or fair queueing +-# +-# CONFIG_NET_SCHED is not set +-# CONFIG_NET_CLS_ROUTE is not set +- +-# +-# Network testing +-# +-# CONFIG_NET_PKTGEN is not set +-# CONFIG_NETPOLL is not set +-# CONFIG_NET_POLL_CONTROLLER is not set +-# CONFIG_HAMRADIO is not set +-# CONFIG_IRDA is not set +-# CONFIG_BT is not set + CONFIG_NETDEVICES=y + # CONFIG_DUMMY is not set + # CONFIG_BONDING is not set +@@ -442,6 +522,11 @@ + # CONFIG_ARCNET is not set + + # ++# PHY device support ++# ++# CONFIG_PHYLIB is not set ++ ++# + # Ethernet (10 or 100Mbit) + # + CONFIG_NET_ETHERNET=y +@@ -449,6 +534,7 @@ + # CONFIG_STNIC is not set + # CONFIG_HAPPYMEAL is not set + # CONFIG_SUNGEM is not set ++# CONFIG_CASSINI is not set + # CONFIG_NET_VENDOR_3COM is not set + # CONFIG_SMC91X is not set + +@@ -457,6 +543,7 @@ + # + # CONFIG_NET_TULIP is not set + # CONFIG_HP100 is not set ++# CONFIG_NE2000 is not set + CONFIG_NET_PCI=y + # CONFIG_PCNET32 is not set + # CONFIG_AMD8111_ETH is not set +@@ -487,13 +574,17 @@ + # CONFIG_HAMACHI is not set + # CONFIG_YELLOWFIN is not set + # CONFIG_R8169 is not set ++# CONFIG_SIS190 is not set ++# CONFIG_SKGE is not set + # CONFIG_SK98LIN is not set + # CONFIG_VIA_VELOCITY is not set + # CONFIG_TIGON3 is not set ++# CONFIG_BNX2 is not set + + # + # Ethernet (10000 Mbit) + # ++# CONFIG_CHELSIO_T1 is not set + # CONFIG_IXGB is not set + # CONFIG_S2IO is not set + +@@ -518,6 +609,8 @@ + # CONFIG_NET_FC is not set + # CONFIG_SHAPER is not set + # CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set + + # + # ISDN subsystem +@@ -547,14 +640,6 @@ + # CONFIG_INPUT_EVBUG is not set + + # +-# Input I/O drivers +-# +-# CONFIG_GAMEPORT is not set +-CONFIG_SOUND_GAMEPORT=y +-# CONFIG_SERIO is not set +-# CONFIG_SERIO_I8042 is not set +- +-# + # Input Device Drivers + # + # CONFIG_INPUT_KEYBOARD is not set +@@ -564,6 +649,12 @@ + # CONFIG_INPUT_MISC is not set + + # ++# Hardware I/O ports ++# ++# CONFIG_SERIO is not set ++# CONFIG_GAMEPORT is not set ++ ++# + # Character devices + # + CONFIG_VT=y +@@ -585,6 +676,7 @@ + CONFIG_SERIAL_SH_SCI_CONSOLE=y + CONFIG_SERIAL_CORE=y + CONFIG_SERIAL_CORE_CONSOLE=y ++# CONFIG_SERIAL_JSM is not set + CONFIG_UNIX98_PTYS=y + CONFIG_LEGACY_PTYS=y + CONFIG_LEGACY_PTY_COUNT=256 +@@ -625,6 +717,12 @@ + # CONFIG_RAW_DRIVER is not set + + # ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# + # I2C support + # + # CONFIG_I2C is not set +@@ -635,10 +733,21 @@ + # CONFIG_W1 is not set + + # ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# + # Misc devices + # + + # ++# Multimedia Capabilities Port drivers ++# ++ ++# + # Multimedia devices + # + # CONFIG_VIDEO_DEV is not set +@@ -656,7 +765,6 @@ + # + # Console display driver support + # +-# CONFIG_VGA_CONSOLE is not set + CONFIG_DUMMY_CONSOLE=y + + # +@@ -667,12 +775,12 @@ + # + # USB support + # +-# CONFIG_USB is not set + CONFIG_USB_ARCH_HAS_HCD=y + CONFIG_USB_ARCH_HAS_OHCI=y ++# CONFIG_USB is not set + + # +-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' + # + + # +@@ -691,12 +799,17 @@ + # CONFIG_INFINIBAND is not set + + # ++# SN Devices ++# ++ ++# + # File systems + # + CONFIG_EXT2_FS=y + CONFIG_EXT2_FS_XATTR=y + # CONFIG_EXT2_FS_POSIX_ACL is not set + # CONFIG_EXT2_FS_SECURITY is not set ++# CONFIG_EXT2_FS_XIP is not set + CONFIG_EXT3_FS=y + CONFIG_EXT3_FS_XATTR=y + CONFIG_EXT3_FS_POSIX_ACL=y +@@ -707,17 +820,15 @@ + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set + CONFIG_FS_POSIX_ACL=y +- +-# +-# XFS support +-# + # CONFIG_XFS_FS is not set + # CONFIG_MINIX_FS is not set + # CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y + # CONFIG_QUOTA is not set + CONFIG_DNOTIFY=y + CONFIG_AUTOFS_FS=y + CONFIG_AUTOFS4_FS=y ++# CONFIG_FUSE_FS is not set + + # + # CD-ROM/DVD Filesystems +@@ -745,13 +856,11 @@ + CONFIG_PROC_FS=y + CONFIG_PROC_KCORE=y + CONFIG_SYSFS=y +-# CONFIG_DEVFS_FS is not set +-# CONFIG_DEVPTS_FS_XATTR is not set + CONFIG_TMPFS=y +-# CONFIG_TMPFS_XATTR is not set + # CONFIG_HUGETLBFS is not set + # CONFIG_HUGETLB_PAGE is not set + CONFIG_RAMFS=y ++# CONFIG_RELAYFS_FS is not set + + # + # Miscellaneous filesystems +@@ -775,16 +884,19 @@ + # + CONFIG_NFS_FS=y + CONFIG_NFS_V3=y ++# CONFIG_NFS_V3_ACL is not set + CONFIG_NFS_V4=y + # CONFIG_NFS_DIRECTIO is not set + CONFIG_NFSD=y + CONFIG_NFSD_V3=y ++# CONFIG_NFSD_V3_ACL is not set + # CONFIG_NFSD_V4 is not set + CONFIG_NFSD_TCP=y + CONFIG_ROOT_NFS=y + CONFIG_LOCKD=y + CONFIG_LOCKD_V4=y + CONFIG_EXPORTFS=y ++CONFIG_NFS_COMMON=y + CONFIG_SUNRPC=y + CONFIG_SUNRPC_GSS=y + CONFIG_RPCSEC_GSS_KRB5=y +@@ -794,6 +906,7 @@ + # CONFIG_NCP_FS is not set + # CONFIG_CODA_FS is not set + # CONFIG_AFS_FS is not set ++# CONFIG_9P_FS is not set + + # + # Partition Types +@@ -868,8 +981,9 @@ + # + # Kernel hacking + # ++# CONFIG_PRINTK_TIME is not set + # CONFIG_DEBUG_KERNEL is not set +-CONFIG_DEBUG_PREEMPT=y ++CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_FRAME_POINTER is not set + CONFIG_SH_STANDARD_BIOS=y + # CONFIG_EARLY_SCIF_CONSOLE is not set +@@ -894,6 +1008,7 @@ + # CONFIG_CRYPTO_SHA256 is not set + # CONFIG_CRYPTO_SHA512 is not set + # CONFIG_CRYPTO_WP512 is not set ++# CONFIG_CRYPTO_TGR192 is not set + CONFIG_CRYPTO_DES=y + # CONFIG_CRYPTO_BLOWFISH is not set + # CONFIG_CRYPTO_TWOFISH is not set +@@ -918,6 +1033,7 @@ + # Library routines + # + CONFIG_CRC_CCITT=y ++# CONFIG_CRC16 is not set + CONFIG_CRC32=y + # CONFIG_LIBCRC32C is not set + CONFIG_ZLIB_INFLATE=y +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/snapgear_defconfig linux-2.6.17/arch/sh/configs/snapgear_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/snapgear_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/snapgear_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,7 +1,7 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.11-sh +-# Wed Mar 2 15:09:51 2005 ++# Linux kernel version: 2.6.15-sh ++# Wed Jan 4 20:30:46 2006 + # + CONFIG_SUPERH=y + CONFIG_UID16=y +@@ -16,33 +16,39 @@ + CONFIG_EXPERIMENTAL=y + CONFIG_CLEAN_COMPILE=y + CONFIG_BROKEN_ON_SMP=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 + + # + # General setup + # + CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y + CONFIG_SWAP=y + # CONFIG_SYSVIPC is not set + # CONFIG_POSIX_MQUEUE is not set + # CONFIG_BSD_PROCESS_ACCT is not set + # CONFIG_SYSCTL is not set + # CONFIG_AUDIT is not set +-CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_HOTPLUG is not set + CONFIG_KOBJECT_UEVENT=y + # CONFIG_IKCONFIG is not set ++CONFIG_INITRAMFS_SOURCE="" ++CONFIG_CC_OPTIMIZE_FOR_SIZE=y + # CONFIG_EMBEDDED is not set + CONFIG_KALLSYMS=y + # CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y + CONFIG_FUTEX=y + CONFIG_EPOLL=y +-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_SHMEM=y + CONFIG_CC_ALIGN_FUNCTIONS=0 + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 + # CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 + + # + # Loadable module support +@@ -50,6 +56,24 @@ + # CONFIG_MODULES is not set + + # ++# Block layer ++# ++# CONFIG_LBD is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++CONFIG_IOSCHED_AS=y ++CONFIG_IOSCHED_DEADLINE=y ++CONFIG_IOSCHED_CFQ=y ++CONFIG_DEFAULT_AS=y ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++# CONFIG_DEFAULT_NOOP is not set ++CONFIG_DEFAULT_IOSCHED="anticipatory" ++ ++# + # System type + # + # CONFIG_SH_SOLUTION_ENGINE is not set +@@ -59,9 +83,7 @@ + # CONFIG_SH_7751_SYSTEMH is not set + # CONFIG_SH_STB1_HARP is not set + # CONFIG_SH_STB1_OVERDRIVE is not set +-# CONFIG_SH_HP620 is not set +-# CONFIG_SH_HP680 is not set +-# CONFIG_SH_HP690 is not set ++# CONFIG_SH_HP6XX is not set + # CONFIG_SH_CQREEK is not set + # CONFIG_SH_DMIDA is not set + # CONFIG_SH_EC3104 is not set +@@ -78,42 +100,89 @@ + # CONFIG_SH_RTS7751R2D is not set + # CONFIG_SH_EDOSK7705 is not set + # CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set ++# CONFIG_SH_TITAN is not set + # CONFIG_SH_UNKNOWN is not set +-# CONFIG_CPU_SH2 is not set +-# CONFIG_CPU_SH3 is not set ++ ++# ++# Processor selection ++# + CONFIG_CPU_SH4=y ++ ++# ++# SH-2 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7300 is not set + # CONFIG_CPU_SUBTYPE_SH7705 is not set + # CONFIG_CPU_SUBTYPE_SH7707 is not set + # CONFIG_CPU_SUBTYPE_SH7708 is not set + # CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7750 is not set ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set + CONFIG_CPU_SUBTYPE_SH7751=y ++CONFIG_CPU_SUBTYPE_SH7751R=y + # CONFIG_CPU_SUBTYPE_SH7760 is not set +-# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# + # CONFIG_CPU_SUBTYPE_ST40STB1 is not set + # CONFIG_CPU_SUBTYPE_ST40GX1 is not set +-# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# + CONFIG_MMU=y +-# CONFIG_CMDLINE_BOOL is not set ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set + CONFIG_MEMORY_START=0x08000000 + CONFIG_MEMORY_SIZE=0x01000000 +-CONFIG_MEMORY_SET=y +-# CONFIG_MEMORY_OVERRIDE is not set ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y + CONFIG_SH_RTC=y + CONFIG_SH_FPU=y +-CONFIG_ZERO_PAGE_OFFSET=0x00001000 +-CONFIG_BOOT_LINK_OFFSET=0x00800000 +-CONFIG_CPU_LITTLE_ENDIAN=y +-# CONFIG_PREEMPT is not set +-# CONFIG_UBC_WAKEUP is not set +-# CONFIG_SH_WRITETHROUGH is not set +-# CONFIG_SH_OCRAM is not set + # CONFIG_SH_STORE_QUEUES is not set +-# CONFIG_SMP is not set +-CONFIG_SH_PCLK_CALC=y +-CONFIG_SH_PCLK_FREQ=60013568 ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++# CONFIG_SH_PCLK_FREQ_BOOL is not set + + # + # CPU Frequency scaling +@@ -133,14 +202,28 @@ + # CONFIG_HD6446X_SERIES is not set + + # +-# Bus options (PCI, PCMCIA, EISA, MCA, ISA) ++# Kernel features ++# ++# CONFIG_KEXEC is not set ++# CONFIG_PREEMPT is not set ++# CONFIG_SMP is not set ++ ++# ++# Boot options ++# ++CONFIG_ZERO_PAGE_OFFSET=0x00001000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++# CONFIG_CMDLINE_BOOL is not set ++ ++# ++# Bus options + # + CONFIG_PCI=y + # CONFIG_SH_PCIDMA_NONCOHERENT is not set + CONFIG_PCI_AUTO=y + CONFIG_PCI_AUTO_UPDATE_RESOURCES=y + # CONFIG_PCI_LEGACY_PROC is not set +-CONFIG_PCI_NAMES=y + + # + # PCCARD (PCMCIA/CardBus) support +@@ -148,10 +231,6 @@ + # CONFIG_PCCARD is not set + + # +-# PC-card bridges +-# +- +-# + # PCI Hotplug Support + # + # CONFIG_HOTPLUG_PCI is not set +@@ -164,9 +243,74 @@ + # CONFIG_BINFMT_MISC is not set + + # +-# SH initrd options ++# Networking ++# ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++# CONFIG_PACKET is not set ++# CONFIG_UNIX is not set ++# CONFIG_NET_KEY is not set ++CONFIG_INET=y ++# CONFIG_IP_MULTICAST is not set ++# CONFIG_IP_ADVANCED_ROUTER is not set ++CONFIG_IP_FIB_HASH=y ++CONFIG_IP_PNP=y ++CONFIG_IP_PNP_DHCP=y ++# CONFIG_IP_PNP_BOOTP is not set ++# CONFIG_IP_PNP_RARP is not set ++# CONFIG_NET_IPIP is not set ++# CONFIG_NET_IPGRE is not set ++# CONFIG_ARPD is not set ++# CONFIG_SYN_COOKIES is not set ++# CONFIG_INET_AH is not set ++# CONFIG_INET_ESP is not set ++# CONFIG_INET_IPCOMP is not set ++# CONFIG_INET_TUNNEL is not set ++CONFIG_INET_DIAG=y ++CONFIG_INET_TCP_DIAG=y ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++# CONFIG_IPV6 is not set ++# CONFIG_NETFILTER is not set ++ ++# ++# DCCP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_DCCP is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++# CONFIG_ATM is not set ++# CONFIG_BRIDGE is not set ++# CONFIG_VLAN_8021Q is not set ++# CONFIG_DECNET is not set ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_NET_DIVERT is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++ ++# ++# QoS and/or fair queueing ++# ++# CONFIG_NET_SCHED is not set ++ ++# ++# Network testing + # +-# CONFIG_EMBEDDED_RAMDISK is not set ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++# CONFIG_IEEE80211 is not set + + # + # Device Drivers +@@ -180,6 +324,11 @@ + # CONFIG_FW_LOADER is not set + + # ++# Connector - unified userspace <-> kernelspace linker ++# ++# CONFIG_CONNECTOR is not set ++ ++# + # Memory Technology Devices (MTD) + # + # CONFIG_MTD is not set +@@ -196,7 +345,6 @@ + # + # Block devices + # +-# CONFIG_BLK_DEV_FD is not set + # CONFIG_BLK_CPQ_DA is not set + # CONFIG_BLK_CPQ_CISS_DA is not set + # CONFIG_BLK_DEV_DAC960 is not set +@@ -209,17 +357,7 @@ + CONFIG_BLK_DEV_RAM_COUNT=16 + CONFIG_BLK_DEV_RAM_SIZE=4096 + CONFIG_BLK_DEV_INITRD=y +-CONFIG_INITRAMFS_SOURCE="" +-# CONFIG_LBD is not set + # CONFIG_CDROM_PKTCDVD is not set +- +-# +-# IO Schedulers +-# +-CONFIG_IOSCHED_NOOP=y +-CONFIG_IOSCHED_AS=y +-CONFIG_IOSCHED_DEADLINE=y +-CONFIG_IOSCHED_CFQ=y + # CONFIG_ATA_OVER_ETH is not set + + # +@@ -230,6 +368,7 @@ + # + # SCSI device support + # ++# CONFIG_RAID_ATTRS is not set + # CONFIG_SCSI is not set + + # +@@ -240,6 +379,7 @@ + # + # Fusion MPT device support + # ++# CONFIG_FUSION is not set + + # + # IEEE 1394 (FireWire) support +@@ -252,69 +392,8 @@ + # CONFIG_I2O is not set + + # +-# Networking support +-# +-CONFIG_NET=y +- +-# +-# Networking options +-# +-# CONFIG_PACKET is not set +-# CONFIG_NETLINK_DEV is not set +-# CONFIG_UNIX is not set +-# CONFIG_NET_KEY is not set +-CONFIG_INET=y +-# CONFIG_IP_MULTICAST is not set +-# CONFIG_IP_ADVANCED_ROUTER is not set +-CONFIG_IP_PNP=y +-CONFIG_IP_PNP_DHCP=y +-# CONFIG_IP_PNP_BOOTP is not set +-# CONFIG_IP_PNP_RARP is not set +-# CONFIG_NET_IPIP is not set +-# CONFIG_NET_IPGRE is not set +-# CONFIG_ARPD is not set +-# CONFIG_SYN_COOKIES is not set +-# CONFIG_INET_AH is not set +-# CONFIG_INET_ESP is not set +-# CONFIG_INET_IPCOMP is not set +-# CONFIG_INET_TUNNEL is not set +-CONFIG_IP_TCPDIAG=y +-# CONFIG_IP_TCPDIAG_IPV6 is not set +-# CONFIG_IPV6 is not set +-# CONFIG_NETFILTER is not set +- +-# +-# SCTP Configuration (EXPERIMENTAL) +-# +-# CONFIG_IP_SCTP is not set +-# CONFIG_ATM is not set +-# CONFIG_BRIDGE is not set +-# CONFIG_VLAN_8021Q is not set +-# CONFIG_DECNET is not set +-# CONFIG_LLC2 is not set +-# CONFIG_IPX is not set +-# CONFIG_ATALK is not set +-# CONFIG_X25 is not set +-# CONFIG_LAPB is not set +-# CONFIG_NET_DIVERT is not set +-# CONFIG_ECONET is not set +-# CONFIG_WAN_ROUTER is not set +- +-# +-# QoS and/or fair queueing +-# +-# CONFIG_NET_SCHED is not set +-# CONFIG_NET_CLS_ROUTE is not set +- ++# Network device support + # +-# Network testing +-# +-# CONFIG_NET_PKTGEN is not set +-# CONFIG_NETPOLL is not set +-# CONFIG_NET_POLL_CONTROLLER is not set +-# CONFIG_HAMRADIO is not set +-# CONFIG_IRDA is not set +-# CONFIG_BT is not set + CONFIG_NETDEVICES=y + # CONFIG_DUMMY is not set + # CONFIG_BONDING is not set +@@ -327,6 +406,11 @@ + # CONFIG_ARCNET is not set + + # ++# PHY device support ++# ++# CONFIG_PHYLIB is not set ++ ++# + # Ethernet (10 or 100Mbit) + # + CONFIG_NET_ETHERNET=y +@@ -334,6 +418,7 @@ + # CONFIG_STNIC is not set + # CONFIG_HAPPYMEAL is not set + # CONFIG_SUNGEM is not set ++# CONFIG_CASSINI is not set + # CONFIG_NET_VENDOR_3COM is not set + # CONFIG_SMC91X is not set + +@@ -342,6 +427,7 @@ + # + # CONFIG_NET_TULIP is not set + # CONFIG_HP100 is not set ++# CONFIG_NE2000 is not set + CONFIG_NET_PCI=y + # CONFIG_PCNET32 is not set + # CONFIG_AMD8111_ETH is not set +@@ -376,13 +462,17 @@ + # CONFIG_HAMACHI is not set + # CONFIG_YELLOWFIN is not set + # CONFIG_R8169 is not set ++# CONFIG_SIS190 is not set ++# CONFIG_SKGE is not set + # CONFIG_SK98LIN is not set + # CONFIG_VIA_VELOCITY is not set + # CONFIG_TIGON3 is not set ++# CONFIG_BNX2 is not set + + # + # Ethernet (10000 Mbit) + # ++# CONFIG_CHELSIO_T1 is not set + # CONFIG_IXGB is not set + # CONFIG_S2IO is not set + +@@ -406,6 +496,8 @@ + # CONFIG_SLIP is not set + # CONFIG_SHAPER is not set + # CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set + + # + # ISDN subsystem +@@ -435,18 +527,6 @@ + # CONFIG_INPUT_EVBUG is not set + + # +-# Input I/O drivers +-# +-# CONFIG_GAMEPORT is not set +-CONFIG_SOUND_GAMEPORT=y +-CONFIG_SERIO=y +-CONFIG_SERIO_I8042=y +-CONFIG_SERIO_SERPORT=y +-# CONFIG_SERIO_CT82C710 is not set +-# CONFIG_SERIO_PCIPS2 is not set +-# CONFIG_SERIO_RAW is not set +- +-# + # Input Device Drivers + # + # CONFIG_INPUT_KEYBOARD is not set +@@ -456,6 +536,16 @@ + # CONFIG_INPUT_MISC is not set + + # ++# Hardware I/O ports ++# ++CONFIG_SERIO=y ++CONFIG_SERIO_I8042=y ++CONFIG_SERIO_SERPORT=y ++# CONFIG_SERIO_PCIPS2 is not set ++# CONFIG_SERIO_RAW is not set ++# CONFIG_GAMEPORT is not set ++ ++# + # Character devices + # + CONFIG_VT=y +@@ -472,6 +562,7 @@ + # Non-8250 serial port support + # + # CONFIG_SERIAL_SH_SCI is not set ++# CONFIG_SERIAL_JSM is not set + CONFIG_UNIX98_PTYS=y + CONFIG_LEGACY_PTYS=y + CONFIG_LEGACY_PTY_COUNT=256 +@@ -498,6 +589,12 @@ + # CONFIG_RAW_DRIVER is not set + + # ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# + # I2C support + # + # CONFIG_I2C is not set +@@ -508,10 +605,21 @@ + # CONFIG_W1 is not set + + # ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# + # Misc devices + # + + # ++# Multimedia Capabilities Port drivers ++# ++ ++# + # Multimedia devices + # + # CONFIG_VIDEO_DEV is not set +@@ -529,7 +637,6 @@ + # + # Console display driver support + # +-CONFIG_VGA_CONSOLE=y + CONFIG_DUMMY_CONSOLE=y + + # +@@ -540,12 +647,12 @@ + # + # USB support + # +-# CONFIG_USB is not set + CONFIG_USB_ARCH_HAS_HCD=y + CONFIG_USB_ARCH_HAS_OHCI=y ++# CONFIG_USB is not set + + # +-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' + # + + # +@@ -564,25 +671,29 @@ + # CONFIG_INFINIBAND is not set + + # ++# SN Devices ++# ++ ++# + # File systems + # + CONFIG_EXT2_FS=y + # CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set + # CONFIG_EXT3_FS is not set + # CONFIG_JBD is not set + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set +- +-# +-# XFS support +-# ++# CONFIG_FS_POSIX_ACL is not set + # CONFIG_XFS_FS is not set + # CONFIG_MINIX_FS is not set + CONFIG_ROMFS_FS=y ++CONFIG_INOTIFY=y + # CONFIG_QUOTA is not set + CONFIG_DNOTIFY=y + # CONFIG_AUTOFS_FS is not set + # CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set + + # + # CD-ROM/DVD Filesystems +@@ -603,15 +714,11 @@ + CONFIG_PROC_FS=y + # CONFIG_PROC_KCORE is not set + CONFIG_SYSFS=y +-CONFIG_DEVFS_FS=y +-CONFIG_DEVFS_MOUNT=y +-# CONFIG_DEVFS_DEBUG is not set +-# CONFIG_DEVPTS_FS_XATTR is not set + CONFIG_TMPFS=y +-# CONFIG_TMPFS_XATTR is not set + # CONFIG_HUGETLBFS is not set + # CONFIG_HUGETLB_PAGE is not set + CONFIG_RAMFS=y ++# CONFIG_RELAYFS_FS is not set + + # + # Miscellaneous filesystems +@@ -635,12 +742,14 @@ + # + CONFIG_NFS_FS=y + CONFIG_NFS_V3=y ++# CONFIG_NFS_V3_ACL is not set + # CONFIG_NFS_V4 is not set + # CONFIG_NFS_DIRECTIO is not set + # CONFIG_NFSD is not set + CONFIG_ROOT_NFS=y + CONFIG_LOCKD=y + CONFIG_LOCKD_V4=y ++CONFIG_NFS_COMMON=y + CONFIG_SUNRPC=y + # CONFIG_RPCSEC_GSS_KRB5 is not set + # CONFIG_RPCSEC_GSS_SPKM3 is not set +@@ -649,6 +758,7 @@ + # CONFIG_NCP_FS is not set + # CONFIG_CODA_FS is not set + # CONFIG_AFS_FS is not set ++# CONFIG_9P_FS is not set + + # + # Partition Types +@@ -669,7 +779,9 @@ + # + # Kernel hacking + # ++# CONFIG_PRINTK_TIME is not set + # CONFIG_DEBUG_KERNEL is not set ++CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_FRAME_POINTER is not set + # CONFIG_SH_STANDARD_BIOS is not set + # CONFIG_EARLY_SCIF_CONSOLE is not set +@@ -694,6 +806,7 @@ + # Library routines + # + # CONFIG_CRC_CCITT is not set ++# CONFIG_CRC16 is not set + CONFIG_CRC32=y + # CONFIG_LIBCRC32C is not set + CONFIG_ZLIB_INFLATE=y +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/systemh_defconfig linux-2.6.17/arch/sh/configs/systemh_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/systemh_defconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/systemh_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -1,7 +1,7 @@ + # + # Automatically generated make config: don't edit +-# Linux kernel version: 2.6.11-sh +-# Wed Mar 2 15:09:53 2005 ++# Linux kernel version: 2.6.15-sh ++# Wed Jan 4 20:44:53 2006 + # + CONFIG_SUPERH=y + CONFIG_UID16=y +@@ -18,31 +18,36 @@ + CONFIG_BROKEN=y + CONFIG_BROKEN_ON_SMP=y + CONFIG_LOCK_KERNEL=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 + + # + # General setup + # + CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y + CONFIG_SWAP=y + # CONFIG_SYSVIPC is not set + # CONFIG_BSD_PROCESS_ACCT is not set + # CONFIG_SYSCTL is not set +-# CONFIG_AUDIT is not set +-CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_HOTPLUG is not set + # CONFIG_IKCONFIG is not set ++CONFIG_INITRAMFS_SOURCE="" ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_EMBEDDED=y + CONFIG_KALLSYMS=y + # CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_BASE_FULL=y + CONFIG_FUTEX=y + CONFIG_EPOLL=y +-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set + CONFIG_SHMEM=y + CONFIG_CC_ALIGN_FUNCTIONS=0 + CONFIG_CC_ALIGN_LABELS=0 + CONFIG_CC_ALIGN_LOOPS=0 + CONFIG_CC_ALIGN_JUMPS=0 + # CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 + + # + # Loadable module support +@@ -56,6 +61,24 @@ + # CONFIG_KMOD is not set + + # ++# Block layer ++# ++# CONFIG_LBD is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++CONFIG_IOSCHED_AS=y ++CONFIG_IOSCHED_DEADLINE=y ++CONFIG_IOSCHED_CFQ=y ++CONFIG_DEFAULT_AS=y ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++# CONFIG_DEFAULT_NOOP is not set ++CONFIG_DEFAULT_IOSCHED="anticipatory" ++ ++# + # System type + # + # CONFIG_SH_SOLUTION_ENGINE is not set +@@ -65,9 +88,7 @@ + CONFIG_SH_7751_SYSTEMH=y + # CONFIG_SH_STB1_HARP is not set + # CONFIG_SH_STB1_OVERDRIVE is not set +-# CONFIG_SH_HP620 is not set +-# CONFIG_SH_HP680 is not set +-# CONFIG_SH_HP690 is not set ++# CONFIG_SH_HP6XX is not set + # CONFIG_SH_CQREEK is not set + # CONFIG_SH_DMIDA is not set + # CONFIG_SH_EC3104 is not set +@@ -84,41 +105,89 @@ + # CONFIG_SH_RTS7751R2D is not set + # CONFIG_SH_EDOSK7705 is not set + # CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set ++# CONFIG_SH_TITAN is not set + # CONFIG_SH_UNKNOWN is not set +-# CONFIG_CPU_SH2 is not set +-# CONFIG_CPU_SH3 is not set ++ ++# ++# Processor selection ++# + CONFIG_CPU_SH4=y ++ ++# ++# SH-2 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7300 is not set + # CONFIG_CPU_SUBTYPE_SH7705 is not set + # CONFIG_CPU_SUBTYPE_SH7707 is not set + # CONFIG_CPU_SUBTYPE_SH7708 is not set + # CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# + # CONFIG_CPU_SUBTYPE_SH7750 is not set ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set + CONFIG_CPU_SUBTYPE_SH7751=y ++CONFIG_CPU_SUBTYPE_SH7751R=y + # CONFIG_CPU_SUBTYPE_SH7760 is not set +-# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# + # CONFIG_CPU_SUBTYPE_ST40STB1 is not set + # CONFIG_CPU_SUBTYPE_ST40GX1 is not set +-# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# + CONFIG_MMU=y +-# CONFIG_CMDLINE_BOOL is not set ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set + CONFIG_MEMORY_START=0x0c000000 + CONFIG_MEMORY_SIZE=0x00400000 +-# CONFIG_MEMORY_OVERRIDE is not set ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y + CONFIG_SH_RTC=y + CONFIG_SH_FPU=y +-CONFIG_ZERO_PAGE_OFFSET=0x00001000 +-CONFIG_BOOT_LINK_OFFSET=0x00800000 +-CONFIG_CPU_LITTLE_ENDIAN=y +-CONFIG_PREEMPT=y +-# CONFIG_UBC_WAKEUP is not set +-# CONFIG_SH_WRITETHROUGH is not set +-# CONFIG_SH_OCRAM is not set + # CONFIG_SH_STORE_QUEUES is not set +-# CONFIG_SMP is not set +-CONFIG_SH_PCLK_CALC=y +-CONFIG_SH_PCLK_FREQ=49876504 ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++# CONFIG_SH_PCLK_FREQ_BOOL is not set + + # + # CPU Frequency scaling +@@ -136,14 +205,28 @@ + # CONFIG_HD6446X_SERIES is not set + + # +-# Bus options (PCI, PCMCIA, EISA, MCA, ISA) ++# Kernel features ++# ++# CONFIG_KEXEC is not set ++CONFIG_PREEMPT=y ++# CONFIG_SMP is not set ++ ++# ++# Boot options ++# ++CONFIG_ZERO_PAGE_OFFSET=0x00001000 ++CONFIG_BOOT_LINK_OFFSET=0x00800000 ++# CONFIG_UBC_WAKEUP is not set ++# CONFIG_CMDLINE_BOOL is not set ++ ++# ++# Bus options + # + CONFIG_PCI=y + # CONFIG_SH_PCIDMA_NONCOHERENT is not set + CONFIG_PCI_AUTO=y + CONFIG_PCI_AUTO_UPDATE_RESOURCES=y + CONFIG_PCI_LEGACY_PROC=y +-CONFIG_PCI_NAMES=y + + # + # PCCARD (PCMCIA/CardBus) support +@@ -151,10 +234,6 @@ + # CONFIG_PCCARD is not set + + # +-# PC-card bridges +-# +- +-# + # PCI Hotplug Support + # + # CONFIG_HOTPLUG_PCI is not set +@@ -167,9 +246,9 @@ + # CONFIG_BINFMT_MISC is not set + + # +-# SH initrd options ++# Networking + # +-# CONFIG_EMBEDDED_RAMDISK is not set ++# CONFIG_NET is not set + + # + # Device Drivers +@@ -183,6 +262,10 @@ + # CONFIG_FW_LOADER is not set + + # ++# Connector - unified userspace <-> kernelspace linker ++# ++ ++# + # Memory Technology Devices (MTD) + # + # CONFIG_MTD is not set +@@ -199,7 +282,6 @@ + # + # Block devices + # +-# CONFIG_BLK_DEV_FD is not set + # CONFIG_BLK_CPQ_DA is not set + # CONFIG_BLK_CPQ_CISS_DA is not set + # CONFIG_BLK_DEV_DAC960 is not set +@@ -211,19 +293,9 @@ + CONFIG_BLK_DEV_RAM_COUNT=16 + CONFIG_BLK_DEV_RAM_SIZE=1024 + CONFIG_BLK_DEV_INITRD=y +-CONFIG_INITRAMFS_SOURCE="" +-# CONFIG_LBD is not set + # CONFIG_CDROM_PKTCDVD is not set + + # +-# IO Schedulers +-# +-CONFIG_IOSCHED_NOOP=y +-CONFIG_IOSCHED_AS=y +-CONFIG_IOSCHED_DEADLINE=y +-CONFIG_IOSCHED_CFQ=y +- +-# + # ATA/ATAPI/MFM/RLL support + # + # CONFIG_IDE is not set +@@ -231,6 +303,7 @@ + # + # SCSI device support + # ++# CONFIG_RAID_ATTRS is not set + # CONFIG_SCSI is not set + + # +@@ -241,6 +314,7 @@ + # + # Fusion MPT device support + # ++# CONFIG_FUSION is not set + + # + # IEEE 1394 (FireWire) support +@@ -253,9 +327,8 @@ + # CONFIG_I2O is not set + + # +-# Networking support ++# Network device support + # +-# CONFIG_NET is not set + # CONFIG_NETPOLL is not set + # CONFIG_NET_POLL_CONTROLLER is not set + +@@ -274,25 +347,15 @@ + # CONFIG_INPUT is not set + + # +-# Userland interfaces +-# +- +-# +-# Input I/O drivers ++# Hardware I/O ports + # +-# CONFIG_GAMEPORT is not set +-CONFIG_SOUND_GAMEPORT=y + CONFIG_SERIO=y + # CONFIG_SERIO_I8042 is not set + # CONFIG_SERIO_SERPORT is not set +-# CONFIG_SERIO_CT82C710 is not set + # CONFIG_SERIO_PCIPS2 is not set + # CONFIG_SERIO_LIBPS2 is not set + # CONFIG_SERIO_RAW is not set +- +-# +-# Input Device Drivers +-# ++# CONFIG_GAMEPORT is not set + + # + # Character devices +@@ -309,6 +372,7 @@ + # Non-8250 serial port support + # + # CONFIG_SERIAL_SH_SCI is not set ++# CONFIG_SERIAL_JSM is not set + CONFIG_UNIX98_PTYS=y + CONFIG_LEGACY_PTYS=y + CONFIG_LEGACY_PTY_COUNT=256 +@@ -335,6 +399,12 @@ + # CONFIG_RAW_DRIVER is not set + + # ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# + # I2C support + # + # CONFIG_I2C is not set +@@ -345,10 +415,21 @@ + # CONFIG_W1 is not set + + # ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# + # Misc devices + # + + # ++# Multimedia Capabilities Port drivers ++# ++ ++# + # Multimedia devices + # + # CONFIG_VIDEO_DEV is not set +@@ -370,12 +451,12 @@ + # + # USB support + # +-# CONFIG_USB is not set + CONFIG_USB_ARCH_HAS_HCD=y + CONFIG_USB_ARCH_HAS_OHCI=y ++# CONFIG_USB is not set + + # +-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' may also be needed; see USB_STORAGE Help for more information ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' + # + + # +@@ -394,6 +475,10 @@ + # CONFIG_INFINIBAND is not set + + # ++# SN Devices ++# ++ ++# + # File systems + # + # CONFIG_EXT2_FS is not set +@@ -401,17 +486,16 @@ + # CONFIG_JBD is not set + # CONFIG_REISERFS_FS is not set + # CONFIG_JFS_FS is not set +- +-# +-# XFS support +-# ++# CONFIG_FS_POSIX_ACL is not set + # CONFIG_XFS_FS is not set + # CONFIG_MINIX_FS is not set + CONFIG_ROMFS_FS=y ++CONFIG_INOTIFY=y + # CONFIG_QUOTA is not set + CONFIG_DNOTIFY=y + # CONFIG_AUTOFS_FS is not set + # CONFIG_AUTOFS4_FS is not set ++# CONFIG_FUSE_FS is not set + + # + # CD-ROM/DVD Filesystems +@@ -432,15 +516,11 @@ + CONFIG_PROC_FS=y + CONFIG_PROC_KCORE=y + CONFIG_SYSFS=y +-CONFIG_DEVFS_FS=y +-CONFIG_DEVFS_MOUNT=y +-# CONFIG_DEVFS_DEBUG is not set +-# CONFIG_DEVPTS_FS_XATTR is not set + CONFIG_TMPFS=y +-# CONFIG_TMPFS_XATTR is not set + # CONFIG_HUGETLBFS is not set + # CONFIG_HUGETLB_PAGE is not set + CONFIG_RAMFS=y ++# CONFIG_RELAYFS_FS is not set + + # + # Miscellaneous filesystems +@@ -478,8 +558,9 @@ + # + # Kernel hacking + # ++# CONFIG_PRINTK_TIME is not set + # CONFIG_DEBUG_KERNEL is not set +-CONFIG_DEBUG_PREEMPT=y ++CONFIG_LOG_BUF_SHIFT=14 + # CONFIG_FRAME_POINTER is not set + # CONFIG_SH_STANDARD_BIOS is not set + # CONFIG_EARLY_SCIF_CONSOLE is not set +@@ -504,6 +585,7 @@ + # Library routines + # + # CONFIG_CRC_CCITT is not set ++# CONFIG_CRC16 is not set + CONFIG_CRC32=y + # CONFIG_LIBCRC32C is not set + CONFIG_ZLIB_INFLATE=y +diff -ruN linux-2.6.17-vanilla/arch/sh/configs/titan_defconfig linux-2.6.17/arch/sh/configs/titan_defconfig +--- linux-2.6.17-vanilla/arch/sh/configs/titan_defconfig 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/configs/titan_defconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,1551 @@ ++# ++# Automatically generated make config: don't edit ++# Linux kernel version: 2.6.17 ++# Thu Jul 6 12:42:07 2006 ++# ++CONFIG_SUPERH=y ++CONFIG_RWSEM_GENERIC_SPINLOCK=y ++CONFIG_GENERIC_FIND_NEXT_BIT=y ++CONFIG_GENERIC_HWEIGHT=y ++CONFIG_GENERIC_HARDIRQS=y ++CONFIG_GENERIC_IRQ_PROBE=y ++CONFIG_GENERIC_CALIBRATE_DELAY=y ++ ++# ++# Code maturity level options ++# ++CONFIG_EXPERIMENTAL=y ++CONFIG_BROKEN_ON_SMP=y ++CONFIG_INIT_ENV_ARG_LIMIT=32 ++ ++# ++# General setup ++# ++CONFIG_LOCALVERSION="" ++CONFIG_LOCALVERSION_AUTO=y ++CONFIG_SWAP=y ++CONFIG_SYSVIPC=y ++CONFIG_POSIX_MQUEUE=y ++# CONFIG_BSD_PROCESS_ACCT is not set ++CONFIG_SYSCTL=y ++# CONFIG_AUDIT is not set ++CONFIG_IKCONFIG=y ++CONFIG_IKCONFIG_PROC=y ++# CONFIG_RELAY is not set ++CONFIG_INITRAMFS_SOURCE="" ++CONFIG_UID16=y ++# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set ++# CONFIG_EMBEDDED is not set ++CONFIG_KALLSYMS=y ++# CONFIG_KALLSYMS_ALL is not set ++# CONFIG_KALLSYMS_EXTRA_PASS is not set ++CONFIG_HOTPLUG=y ++CONFIG_PRINTK=y ++CONFIG_BUG=y ++CONFIG_ELF_CORE=y ++CONFIG_BASE_FULL=y ++CONFIG_FUTEX=y ++CONFIG_EPOLL=y ++CONFIG_SHMEM=y ++CONFIG_SLAB=y ++# CONFIG_TINY_SHMEM is not set ++CONFIG_BASE_SMALL=0 ++# CONFIG_SLOB is not set ++CONFIG_OBSOLETE_INTERMODULE=m ++ ++# ++# Loadable module support ++# ++CONFIG_MODULES=y ++CONFIG_MODULE_UNLOAD=y ++CONFIG_MODULE_FORCE_UNLOAD=y ++# CONFIG_MODVERSIONS is not set ++# CONFIG_MODULE_SRCVERSION_ALL is not set ++CONFIG_KMOD=y ++ ++# ++# Block layer ++# ++# CONFIG_LBD is not set ++# CONFIG_BLK_DEV_IO_TRACE is not set ++# CONFIG_LSF is not set ++ ++# ++# IO Schedulers ++# ++CONFIG_IOSCHED_NOOP=y ++CONFIG_IOSCHED_AS=y ++CONFIG_IOSCHED_DEADLINE=y ++CONFIG_IOSCHED_CFQ=y ++CONFIG_DEFAULT_AS=y ++# CONFIG_DEFAULT_DEADLINE is not set ++# CONFIG_DEFAULT_CFQ is not set ++# CONFIG_DEFAULT_NOOP is not set ++CONFIG_DEFAULT_IOSCHED="anticipatory" ++ ++# ++# System type ++# ++# CONFIG_SH_SOLUTION_ENGINE is not set ++# CONFIG_SH_7751_SOLUTION_ENGINE is not set ++# CONFIG_SH_7300_SOLUTION_ENGINE is not set ++# CONFIG_SH_73180_SOLUTION_ENGINE is not set ++# CONFIG_SH_7751_SYSTEMH is not set ++# CONFIG_SH_STB1_HARP is not set ++# CONFIG_SH_STB1_OVERDRIVE is not set ++# CONFIG_SH_HP6XX is not set ++# CONFIG_SH_CQREEK is not set ++# CONFIG_SH_DMIDA is not set ++# CONFIG_SH_EC3104 is not set ++# CONFIG_SH_SATURN is not set ++# CONFIG_SH_DREAMCAST is not set ++# CONFIG_SH_CAT68701 is not set ++# CONFIG_SH_BIGSUR is not set ++# CONFIG_SH_SH2000 is not set ++# CONFIG_SH_ADX is not set ++# CONFIG_SH_MPC1211 is not set ++# CONFIG_SH_SH03 is not set ++# CONFIG_SH_SECUREEDGE5410 is not set ++# CONFIG_SH_HS7751RVOIP is not set ++# CONFIG_SH_RTS7751R2D is not set ++# CONFIG_SH_R7780RP is not set ++# CONFIG_SH_EDOSK7705 is not set ++# CONFIG_SH_SH4202_MICRODEV is not set ++# CONFIG_SH_LANDISK is not set ++CONFIG_SH_TITAN=y ++# CONFIG_SH_UNKNOWN is not set ++ ++# ++# Processor selection ++# ++CONFIG_CPU_SH4=y ++ ++# ++# SH-2 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH7604 is not set ++ ++# ++# SH-3 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH7300 is not set ++# CONFIG_CPU_SUBTYPE_SH7705 is not set ++# CONFIG_CPU_SUBTYPE_SH7707 is not set ++# CONFIG_CPU_SUBTYPE_SH7708 is not set ++# CONFIG_CPU_SUBTYPE_SH7709 is not set ++ ++# ++# SH-4 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH7750 is not set ++# CONFIG_CPU_SUBTYPE_SH7091 is not set ++# CONFIG_CPU_SUBTYPE_SH7750R is not set ++# CONFIG_CPU_SUBTYPE_SH7750S is not set ++CONFIG_CPU_SUBTYPE_SH7751=y ++CONFIG_CPU_SUBTYPE_SH7751R=y ++# CONFIG_CPU_SUBTYPE_SH7760 is not set ++# CONFIG_CPU_SUBTYPE_SH4_202 is not set ++ ++# ++# ST40 Processor Support ++# ++# CONFIG_CPU_SUBTYPE_ST40STB1 is not set ++# CONFIG_CPU_SUBTYPE_ST40GX1 is not set ++ ++# ++# SH-4A Processor Support ++# ++# CONFIG_CPU_SUBTYPE_SH73180 is not set ++# CONFIG_CPU_SUBTYPE_SH7770 is not set ++# CONFIG_CPU_SUBTYPE_SH7780 is not set ++ ++# ++# Memory management options ++# ++CONFIG_MMU=y ++CONFIG_SELECT_MEMORY_MODEL=y ++CONFIG_FLATMEM_MANUAL=y ++# CONFIG_DISCONTIGMEM_MANUAL is not set ++# CONFIG_SPARSEMEM_MANUAL is not set ++CONFIG_FLATMEM=y ++CONFIG_FLAT_NODE_MEM_MAP=y ++# CONFIG_SPARSEMEM_STATIC is not set ++CONFIG_SPLIT_PTLOCK_CPUS=4 ++ ++# ++# Cache configuration ++# ++# CONFIG_SH_DIRECT_MAPPED is not set ++# CONFIG_SH_WRITETHROUGH is not set ++# CONFIG_SH_OCRAM is not set ++CONFIG_MEMORY_START=0x08030000 ++CONFIG_MEMORY_SIZE=0x7fd0000 ++ ++# ++# Processor features ++# ++CONFIG_CPU_LITTLE_ENDIAN=y ++CONFIG_SH_RTC=y ++CONFIG_SH_FPU=y ++# CONFIG_SH_STORE_QUEUES is not set ++CONFIG_CPU_HAS_INTEVT=y ++CONFIG_CPU_HAS_SR_RB=y ++ ++# ++# Timer support ++# ++CONFIG_SH_TMU=y ++CONFIG_SH_PCLK_FREQ=30000000 ++ ++# ++# CPU Frequency scaling ++# ++# CONFIG_CPU_FREQ is not set ++ ++# ++# DMA support ++# ++CONFIG_SH_DMA=y ++CONFIG_NR_ONCHIP_DMA_CHANNELS=8 ++# CONFIG_NR_DMA_CHANNELS_BOOL is not set ++ ++# ++# Companion Chips ++# ++# CONFIG_HD6446X_SERIES is not set ++ ++# ++# Kernel features ++# ++# CONFIG_KEXEC is not set ++# CONFIG_PREEMPT is not set ++# CONFIG_SMP is not set ++ ++# ++# Boot options ++# ++CONFIG_ZERO_PAGE_OFFSET=0x00001000 ++CONFIG_BOOT_LINK_OFFSET=0x009e0000 ++# CONFIG_UBC_WAKEUP is not set ++CONFIG_CMDLINE_BOOL=y ++CONFIG_CMDLINE="console=ttySC1,38400N81 root=/dev/nfs ip=:::::eth1:autoconf" ++ ++# ++# Bus options ++# ++CONFIG_PCI=y ++CONFIG_SH_PCIDMA_NONCOHERENT=y ++CONFIG_PCI_AUTO=y ++CONFIG_PCI_AUTO_UPDATE_RESOURCES=y ++# CONFIG_PCI_DEBUG is not set ++ ++# ++# PCCARD (PCMCIA/CardBus) support ++# ++# CONFIG_PCCARD is not set ++ ++# ++# PCI Hotplug Support ++# ++CONFIG_HOTPLUG_PCI=y ++# CONFIG_HOTPLUG_PCI_FAKE is not set ++# CONFIG_HOTPLUG_PCI_CPCI is not set ++# CONFIG_HOTPLUG_PCI_SHPC is not set ++ ++# ++# Executable file formats ++# ++CONFIG_BINFMT_ELF=y ++# CONFIG_BINFMT_FLAT is not set ++# CONFIG_BINFMT_MISC is not set ++ ++# ++# Power management options (EXPERIMENTAL) ++# ++# CONFIG_PM is not set ++ ++# ++# Networking ++# ++CONFIG_NET=y ++ ++# ++# Networking options ++# ++# CONFIG_NETDEBUG is not set ++CONFIG_PACKET=y ++CONFIG_PACKET_MMAP=y ++CONFIG_UNIX=y ++CONFIG_XFRM=y ++# CONFIG_XFRM_USER is not set ++CONFIG_NET_KEY=y ++CONFIG_INET=y ++CONFIG_IP_MULTICAST=y ++CONFIG_IP_ADVANCED_ROUTER=y ++CONFIG_ASK_IP_FIB_HASH=y ++# CONFIG_IP_FIB_TRIE is not set ++CONFIG_IP_FIB_HASH=y ++CONFIG_IP_MULTIPLE_TABLES=y ++# CONFIG_IP_ROUTE_FWMARK is not set ++CONFIG_IP_ROUTE_MULTIPATH=y ++CONFIG_IP_ROUTE_MULTIPATH_CACHED=y ++CONFIG_IP_ROUTE_MULTIPATH_RR=m ++CONFIG_IP_ROUTE_MULTIPATH_RANDOM=m ++CONFIG_IP_ROUTE_MULTIPATH_WRANDOM=m ++CONFIG_IP_ROUTE_MULTIPATH_DRR=m ++# CONFIG_IP_ROUTE_VERBOSE is not set ++CONFIG_IP_PNP=y ++CONFIG_IP_PNP_DHCP=y ++CONFIG_IP_PNP_BOOTP=y ++CONFIG_IP_PNP_RARP=y ++CONFIG_NET_IPIP=y ++CONFIG_NET_IPGRE=y ++CONFIG_NET_IPGRE_BROADCAST=y ++CONFIG_IP_MROUTE=y ++CONFIG_IP_PIMSM_V1=y ++CONFIG_IP_PIMSM_V2=y ++# CONFIG_ARPD is not set ++CONFIG_SYN_COOKIES=y ++CONFIG_INET_AH=y ++CONFIG_INET_ESP=y ++CONFIG_INET_IPCOMP=y ++CONFIG_INET_XFRM_TUNNEL=y ++CONFIG_INET_TUNNEL=y ++CONFIG_INET_DIAG=m ++CONFIG_INET_TCP_DIAG=m ++# CONFIG_TCP_CONG_ADVANCED is not set ++CONFIG_TCP_CONG_BIC=y ++ ++# ++# IP: Virtual Server Configuration ++# ++# CONFIG_IP_VS is not set ++CONFIG_IPV6=y ++CONFIG_IPV6_PRIVACY=y ++# CONFIG_IPV6_ROUTER_PREF is not set ++CONFIG_INET6_AH=y ++CONFIG_INET6_ESP=y ++CONFIG_INET6_IPCOMP=y ++CONFIG_INET6_XFRM_TUNNEL=y ++CONFIG_INET6_TUNNEL=y ++CONFIG_IPV6_TUNNEL=y ++CONFIG_NETFILTER=y ++# CONFIG_NETFILTER_DEBUG is not set ++CONFIG_BRIDGE_NETFILTER=y ++ ++# ++# Core Netfilter Configuration ++# ++CONFIG_NETFILTER_NETLINK=m ++CONFIG_NETFILTER_NETLINK_QUEUE=m ++CONFIG_NETFILTER_NETLINK_LOG=m ++CONFIG_NETFILTER_XTABLES=m ++CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m ++CONFIG_NETFILTER_XT_TARGET_CONNMARK=m ++CONFIG_NETFILTER_XT_TARGET_MARK=m ++CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m ++CONFIG_NETFILTER_XT_TARGET_NOTRACK=m ++CONFIG_NETFILTER_XT_MATCH_COMMENT=m ++CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m ++CONFIG_NETFILTER_XT_MATCH_CONNMARK=m ++CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m ++CONFIG_NETFILTER_XT_MATCH_DCCP=m ++CONFIG_NETFILTER_XT_MATCH_ESP=m ++CONFIG_NETFILTER_XT_MATCH_HELPER=m ++CONFIG_NETFILTER_XT_MATCH_LENGTH=m ++CONFIG_NETFILTER_XT_MATCH_LIMIT=m ++CONFIG_NETFILTER_XT_MATCH_MAC=m ++CONFIG_NETFILTER_XT_MATCH_MARK=m ++CONFIG_NETFILTER_XT_MATCH_POLICY=m ++CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m ++CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m ++CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m ++CONFIG_NETFILTER_XT_MATCH_REALM=m ++CONFIG_NETFILTER_XT_MATCH_SCTP=m ++CONFIG_NETFILTER_XT_MATCH_STATE=m ++CONFIG_NETFILTER_XT_MATCH_STRING=m ++CONFIG_NETFILTER_XT_MATCH_TCPMSS=m ++ ++# ++# IP: Netfilter Configuration ++# ++CONFIG_IP_NF_CONNTRACK=m ++CONFIG_IP_NF_CT_ACCT=y ++CONFIG_IP_NF_CONNTRACK_MARK=y ++CONFIG_IP_NF_CONNTRACK_EVENTS=y ++CONFIG_IP_NF_CONNTRACK_NETLINK=m ++# CONFIG_IP_NF_CT_PROTO_SCTP is not set ++CONFIG_IP_NF_FTP=m ++CONFIG_IP_NF_IRC=m ++CONFIG_IP_NF_NETBIOS_NS=m ++CONFIG_IP_NF_TFTP=m ++# CONFIG_IP_NF_AMANDA is not set ++CONFIG_IP_NF_PPTP=m ++CONFIG_IP_NF_H323=m ++CONFIG_IP_NF_QUEUE=m ++CONFIG_IP_NF_IPTABLES=m ++CONFIG_IP_NF_MATCH_IPRANGE=m ++CONFIG_IP_NF_MATCH_TOS=m ++CONFIG_IP_NF_MATCH_RECENT=m ++CONFIG_IP_NF_MATCH_ECN=m ++CONFIG_IP_NF_MATCH_DSCP=m ++CONFIG_IP_NF_MATCH_AH=m ++CONFIG_IP_NF_MATCH_TTL=m ++CONFIG_IP_NF_MATCH_OWNER=m ++CONFIG_IP_NF_MATCH_ADDRTYPE=m ++CONFIG_IP_NF_MATCH_HASHLIMIT=m ++CONFIG_IP_NF_FILTER=m ++CONFIG_IP_NF_TARGET_REJECT=m ++CONFIG_IP_NF_TARGET_LOG=m ++CONFIG_IP_NF_TARGET_ULOG=m ++CONFIG_IP_NF_TARGET_TCPMSS=m ++CONFIG_IP_NF_NAT=m ++CONFIG_IP_NF_NAT_NEEDED=y ++CONFIG_IP_NF_TARGET_MASQUERADE=m ++CONFIG_IP_NF_TARGET_REDIRECT=m ++CONFIG_IP_NF_TARGET_NETMAP=m ++CONFIG_IP_NF_TARGET_SAME=m ++CONFIG_IP_NF_NAT_SNMP_BASIC=m ++CONFIG_IP_NF_NAT_IRC=m ++CONFIG_IP_NF_NAT_FTP=m ++CONFIG_IP_NF_NAT_TFTP=m ++CONFIG_IP_NF_NAT_PPTP=m ++CONFIG_IP_NF_NAT_H323=m ++CONFIG_IP_NF_MANGLE=m ++CONFIG_IP_NF_TARGET_TOS=m ++CONFIG_IP_NF_TARGET_ECN=m ++CONFIG_IP_NF_TARGET_DSCP=m ++CONFIG_IP_NF_TARGET_TTL=m ++CONFIG_IP_NF_TARGET_CLUSTERIP=m ++CONFIG_IP_NF_RAW=m ++CONFIG_IP_NF_ARPTABLES=m ++CONFIG_IP_NF_ARPFILTER=m ++CONFIG_IP_NF_ARP_MANGLE=m ++ ++# ++# IPv6: Netfilter Configuration (EXPERIMENTAL) ++# ++CONFIG_IP6_NF_QUEUE=m ++CONFIG_IP6_NF_IPTABLES=m ++CONFIG_IP6_NF_MATCH_RT=m ++CONFIG_IP6_NF_MATCH_OPTS=m ++CONFIG_IP6_NF_MATCH_FRAG=m ++CONFIG_IP6_NF_MATCH_HL=m ++CONFIG_IP6_NF_MATCH_OWNER=m ++CONFIG_IP6_NF_MATCH_IPV6HEADER=m ++CONFIG_IP6_NF_MATCH_AH=m ++CONFIG_IP6_NF_MATCH_EUI64=m ++CONFIG_IP6_NF_FILTER=m ++CONFIG_IP6_NF_TARGET_LOG=m ++CONFIG_IP6_NF_TARGET_REJECT=m ++CONFIG_IP6_NF_MANGLE=m ++CONFIG_IP6_NF_TARGET_HL=m ++CONFIG_IP6_NF_RAW=m ++ ++# ++# Bridge: Netfilter Configuration ++# ++# CONFIG_BRIDGE_NF_EBTABLES is not set ++ ++# ++# DCCP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_DCCP is not set ++ ++# ++# SCTP Configuration (EXPERIMENTAL) ++# ++# CONFIG_IP_SCTP is not set ++ ++# ++# TIPC Configuration (EXPERIMENTAL) ++# ++# CONFIG_TIPC is not set ++# CONFIG_ATM is not set ++CONFIG_BRIDGE=y ++CONFIG_VLAN_8021Q=y ++# CONFIG_DECNET is not set ++CONFIG_LLC=y ++# CONFIG_LLC2 is not set ++# CONFIG_IPX is not set ++# CONFIG_ATALK is not set ++# CONFIG_X25 is not set ++# CONFIG_LAPB is not set ++# CONFIG_NET_DIVERT is not set ++# CONFIG_ECONET is not set ++# CONFIG_WAN_ROUTER is not set ++ ++# ++# QoS and/or fair queueing ++# ++CONFIG_NET_SCHED=y ++CONFIG_NET_SCH_CLK_JIFFIES=y ++# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set ++# CONFIG_NET_SCH_CLK_CPU is not set ++ ++# ++# Queueing/Scheduling ++# ++CONFIG_NET_SCH_CBQ=m ++CONFIG_NET_SCH_HTB=m ++CONFIG_NET_SCH_HFSC=m ++CONFIG_NET_SCH_PRIO=m ++CONFIG_NET_SCH_RED=m ++CONFIG_NET_SCH_SFQ=m ++CONFIG_NET_SCH_TEQL=m ++CONFIG_NET_SCH_TBF=m ++CONFIG_NET_SCH_GRED=m ++CONFIG_NET_SCH_DSMARK=m ++CONFIG_NET_SCH_NETEM=m ++CONFIG_NET_SCH_INGRESS=m ++ ++# ++# Classification ++# ++CONFIG_NET_CLS=y ++CONFIG_NET_CLS_BASIC=m ++CONFIG_NET_CLS_TCINDEX=m ++CONFIG_NET_CLS_ROUTE4=m ++CONFIG_NET_CLS_ROUTE=y ++CONFIG_NET_CLS_FW=m ++CONFIG_NET_CLS_U32=m ++CONFIG_CLS_U32_PERF=y ++CONFIG_CLS_U32_MARK=y ++CONFIG_NET_CLS_RSVP=m ++CONFIG_NET_CLS_RSVP6=m ++CONFIG_NET_EMATCH=y ++CONFIG_NET_EMATCH_STACK=32 ++CONFIG_NET_EMATCH_CMP=m ++CONFIG_NET_EMATCH_NBYTE=m ++CONFIG_NET_EMATCH_U32=m ++CONFIG_NET_EMATCH_META=m ++CONFIG_NET_EMATCH_TEXT=m ++CONFIG_NET_CLS_ACT=y ++CONFIG_NET_ACT_POLICE=m ++CONFIG_NET_ACT_GACT=m ++CONFIG_GACT_PROB=y ++CONFIG_NET_ACT_MIRRED=m ++CONFIG_NET_ACT_IPT=m ++CONFIG_NET_ACT_PEDIT=m ++# CONFIG_NET_ACT_SIMP is not set ++CONFIG_NET_CLS_IND=y ++CONFIG_NET_ESTIMATOR=y ++ ++# ++# Network testing ++# ++# CONFIG_NET_PKTGEN is not set ++# CONFIG_HAMRADIO is not set ++# CONFIG_IRDA is not set ++# CONFIG_BT is not set ++CONFIG_IEEE80211=y ++# CONFIG_IEEE80211_DEBUG is not set ++CONFIG_IEEE80211_CRYPT_WEP=y ++CONFIG_IEEE80211_CRYPT_CCMP=y ++CONFIG_IEEE80211_CRYPT_TKIP=y ++CONFIG_IEEE80211_SOFTMAC=m ++# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set ++CONFIG_WIRELESS_EXT=y ++ ++# ++# Device Drivers ++# ++ ++# ++# Generic Driver Options ++# ++CONFIG_STANDALONE=y ++CONFIG_PREVENT_FIRMWARE_BUILD=y ++CONFIG_FW_LOADER=m ++# CONFIG_DEBUG_DRIVER is not set ++ ++# ++# Connector - unified userspace <-> kernelspace linker ++# ++CONFIG_CONNECTOR=m ++ ++# ++# Memory Technology Devices (MTD) ++# ++CONFIG_MTD=m ++CONFIG_MTD_DEBUG=y ++CONFIG_MTD_DEBUG_VERBOSE=0 ++# CONFIG_MTD_CONCAT is not set ++# CONFIG_MTD_PARTITIONS is not set ++ ++# ++# User Modules And Translation Layers ++# ++CONFIG_MTD_CHAR=m ++CONFIG_MTD_BLOCK=m ++# CONFIG_MTD_BLOCK_RO is not set ++CONFIG_FTL=m ++CONFIG_NFTL=m ++# CONFIG_NFTL_RW is not set ++CONFIG_INFTL=m ++CONFIG_RFD_FTL=m ++ ++# ++# RAM/ROM/Flash chip drivers ++# ++CONFIG_MTD_CFI=m ++CONFIG_MTD_JEDECPROBE=m ++CONFIG_MTD_GEN_PROBE=m ++# CONFIG_MTD_CFI_ADV_OPTIONS is not set ++CONFIG_MTD_MAP_BANK_WIDTH_1=y ++CONFIG_MTD_MAP_BANK_WIDTH_2=y ++CONFIG_MTD_MAP_BANK_WIDTH_4=y ++# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set ++# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set ++# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set ++CONFIG_MTD_CFI_I1=y ++CONFIG_MTD_CFI_I2=y ++# CONFIG_MTD_CFI_I4 is not set ++# CONFIG_MTD_CFI_I8 is not set ++# CONFIG_MTD_CFI_INTELEXT is not set ++# CONFIG_MTD_CFI_AMDSTD is not set ++# CONFIG_MTD_CFI_STAA is not set ++# CONFIG_MTD_RAM is not set ++# CONFIG_MTD_ROM is not set ++# CONFIG_MTD_ABSENT is not set ++# CONFIG_MTD_OBSOLETE_CHIPS is not set ++ ++# ++# Mapping drivers for chip access ++# ++# CONFIG_MTD_COMPLEX_MAPPINGS is not set ++# CONFIG_MTD_PHYSMAP is not set ++# CONFIG_MTD_SOLUTIONENGINE is not set ++# CONFIG_MTD_PLATRAM is not set ++ ++# ++# Self-contained MTD device drivers ++# ++# CONFIG_MTD_PMC551 is not set ++# CONFIG_MTD_SLRAM is not set ++# CONFIG_MTD_PHRAM is not set ++# CONFIG_MTD_MTDRAM is not set ++# CONFIG_MTD_BLOCK2MTD is not set ++ ++# ++# Disk-On-Chip Device Drivers ++# ++# CONFIG_MTD_DOC2000 is not set ++# CONFIG_MTD_DOC2001 is not set ++# CONFIG_MTD_DOC2001PLUS is not set ++ ++# ++# NAND Flash Device Drivers ++# ++CONFIG_MTD_NAND=m ++# CONFIG_MTD_NAND_VERIFY_WRITE is not set ++CONFIG_MTD_NAND_IDS=m ++# CONFIG_MTD_NAND_DISKONCHIP is not set ++ ++# ++# OneNAND Flash Device Drivers ++# ++# CONFIG_MTD_ONENAND is not set ++ ++# ++# Parallel port support ++# ++# CONFIG_PARPORT is not set ++ ++# ++# Plug and Play support ++# ++ ++# ++# Block devices ++# ++# CONFIG_BLK_CPQ_DA is not set ++# CONFIG_BLK_CPQ_CISS_DA is not set ++# CONFIG_BLK_DEV_DAC960 is not set ++CONFIG_BLK_SSFDC=y ++# CONFIG_BLK_DEV_UMEM is not set ++# CONFIG_BLK_DEV_COW_COMMON is not set ++CONFIG_BLK_DEV_LOOP=m ++CONFIG_BLK_DEV_CRYPTOLOOP=m ++# CONFIG_BLK_DEV_NBD is not set ++# CONFIG_BLK_DEV_SX8 is not set ++# CONFIG_BLK_DEV_UB is not set ++CONFIG_BLK_DEV_RAM=y ++CONFIG_BLK_DEV_RAM_COUNT=16 ++CONFIG_BLK_DEV_RAM_SIZE=4096 ++CONFIG_BLK_DEV_INITRD=y ++# CONFIG_CDROM_PKTCDVD is not set ++CONFIG_ATA_OVER_ETH=m ++ ++# ++# ATA/ATAPI/MFM/RLL support ++# ++# CONFIG_IDE is not set ++ ++# ++# SCSI device support ++# ++# CONFIG_RAID_ATTRS is not set ++CONFIG_SCSI=y ++CONFIG_SCSI_PROC_FS=y ++ ++# ++# SCSI support type (disk, tape, CD-ROM) ++# ++CONFIG_BLK_DEV_SD=m ++# CONFIG_CHR_DEV_ST is not set ++# CONFIG_CHR_DEV_OSST is not set ++CONFIG_BLK_DEV_SR=m ++# CONFIG_BLK_DEV_SR_VENDOR is not set ++CONFIG_CHR_DEV_SG=m ++# CONFIG_CHR_DEV_SCH is not set ++ ++# ++# Some SCSI devices (e.g. CD jukebox) support multiple LUNs ++# ++# CONFIG_SCSI_MULTI_LUN is not set ++# CONFIG_SCSI_CONSTANTS is not set ++# CONFIG_SCSI_LOGGING is not set ++ ++# ++# SCSI Transport Attributes ++# ++# CONFIG_SCSI_SPI_ATTRS is not set ++# CONFIG_SCSI_FC_ATTRS is not set ++# CONFIG_SCSI_ISCSI_ATTRS is not set ++# CONFIG_SCSI_SAS_ATTRS is not set ++ ++# ++# SCSI low-level drivers ++# ++# CONFIG_ISCSI_TCP is not set ++# CONFIG_BLK_DEV_3W_XXXX_RAID is not set ++# CONFIG_SCSI_3W_9XXX is not set ++# CONFIG_SCSI_ACARD is not set ++# CONFIG_SCSI_AACRAID is not set ++# CONFIG_SCSI_AIC7XXX is not set ++# CONFIG_SCSI_AIC7XXX_OLD is not set ++# CONFIG_SCSI_AIC79XX is not set ++# CONFIG_SCSI_DPT_I2O is not set ++# CONFIG_MEGARAID_NEWGEN is not set ++# CONFIG_MEGARAID_LEGACY is not set ++# CONFIG_MEGARAID_SAS is not set ++# CONFIG_SCSI_SATA is not set ++# CONFIG_SCSI_DMX3191D is not set ++# CONFIG_SCSI_FUTURE_DOMAIN is not set ++# CONFIG_SCSI_IPS is not set ++# CONFIG_SCSI_INITIO is not set ++# CONFIG_SCSI_INIA100 is not set ++# CONFIG_SCSI_SYM53C8XX_2 is not set ++# CONFIG_SCSI_IPR is not set ++# CONFIG_SCSI_QLOGIC_1280 is not set ++# CONFIG_SCSI_QLA_FC is not set ++# CONFIG_SCSI_LPFC is not set ++# CONFIG_SCSI_DC395x is not set ++# CONFIG_SCSI_DC390T is not set ++# CONFIG_SCSI_NSP32 is not set ++# CONFIG_SCSI_DEBUG is not set ++ ++# ++# Multi-device support (RAID and LVM) ++# ++# CONFIG_MD is not set ++ ++# ++# Fusion MPT device support ++# ++# CONFIG_FUSION is not set ++# CONFIG_FUSION_SPI is not set ++# CONFIG_FUSION_FC is not set ++# CONFIG_FUSION_SAS is not set ++ ++# ++# IEEE 1394 (FireWire) support ++# ++# CONFIG_IEEE1394 is not set ++ ++# ++# I2O device support ++# ++# CONFIG_I2O is not set ++ ++# ++# Network device support ++# ++CONFIG_NETDEVICES=y ++# CONFIG_IFB is not set ++# CONFIG_DUMMY is not set ++# CONFIG_BONDING is not set ++# CONFIG_EQUALIZER is not set ++CONFIG_TUN=m ++ ++# ++# ARCnet devices ++# ++# CONFIG_ARCNET is not set ++ ++# ++# PHY device support ++# ++CONFIG_PHYLIB=m ++ ++# ++# MII PHY device drivers ++# ++CONFIG_MARVELL_PHY=m ++CONFIG_DAVICOM_PHY=m ++CONFIG_QSEMI_PHY=m ++CONFIG_LXT_PHY=m ++CONFIG_CICADA_PHY=m ++ ++# ++# Ethernet (10 or 100Mbit) ++# ++CONFIG_NET_ETHERNET=y ++CONFIG_MII=y ++# CONFIG_STNIC is not set ++# CONFIG_HAPPYMEAL is not set ++# CONFIG_SUNGEM is not set ++# CONFIG_CASSINI is not set ++# CONFIG_NET_VENDOR_3COM is not set ++# CONFIG_SMC91X is not set ++ ++# ++# Tulip family network device support ++# ++# CONFIG_NET_TULIP is not set ++# CONFIG_HP100 is not set ++# CONFIG_NE2000 is not set ++CONFIG_NET_PCI=y ++# CONFIG_PCNET32 is not set ++# CONFIG_AMD8111_ETH is not set ++# CONFIG_ADAPTEC_STARFIRE is not set ++# CONFIG_B44 is not set ++# CONFIG_FORCEDETH is not set ++# CONFIG_DGRS is not set ++# CONFIG_EEPRO100 is not set ++# CONFIG_E100 is not set ++# CONFIG_FEALNX is not set ++# CONFIG_NATSEMI is not set ++# CONFIG_NE2K_PCI is not set ++# CONFIG_8139CP is not set ++CONFIG_8139TOO=y ++# CONFIG_8139TOO_PIO is not set ++CONFIG_8139TOO_TUNE_TWISTER=y ++# CONFIG_8139TOO_8129 is not set ++CONFIG_8139_OLD_RX_RESET=y ++# CONFIG_SIS900 is not set ++# CONFIG_EPIC100 is not set ++# CONFIG_SUNDANCE is not set ++# CONFIG_TLAN is not set ++# CONFIG_VIA_RHINE is not set ++ ++# ++# Ethernet (1000 Mbit) ++# ++# CONFIG_ACENIC is not set ++# CONFIG_DL2K is not set ++# CONFIG_E1000 is not set ++# CONFIG_NS83820 is not set ++# CONFIG_HAMACHI is not set ++# CONFIG_YELLOWFIN is not set ++# CONFIG_R8169 is not set ++# CONFIG_SIS190 is not set ++# CONFIG_SKGE is not set ++# CONFIG_SKY2 is not set ++# CONFIG_SK98LIN is not set ++# CONFIG_VIA_VELOCITY is not set ++# CONFIG_TIGON3 is not set ++# CONFIG_BNX2 is not set ++ ++# ++# Ethernet (10000 Mbit) ++# ++# CONFIG_CHELSIO_T1 is not set ++# CONFIG_IXGB is not set ++# CONFIG_S2IO is not set ++ ++# ++# Token Ring devices ++# ++# CONFIG_TR is not set ++ ++# ++# Wireless LAN (non-hamradio) ++# ++CONFIG_NET_RADIO=y ++CONFIG_NET_WIRELESS_RTNETLINK=y ++ ++# ++# Obsolete Wireless cards support (pre-802.11) ++# ++# CONFIG_STRIP is not set ++ ++# ++# Wireless 802.11b ISA/PCI cards support ++# ++# CONFIG_IPW2100 is not set ++# CONFIG_IPW2200 is not set ++# CONFIG_HERMES is not set ++# CONFIG_ATMEL is not set ++ ++# ++# Prism GT/Duette 802.11(a/b/g) PCI/Cardbus support ++# ++CONFIG_PRISM54=m ++# CONFIG_HOSTAP is not set ++CONFIG_BCM43XX=m ++CONFIG_BCM43XX_DEBUG=y ++CONFIG_BCM43XX_DMA=y ++CONFIG_BCM43XX_PIO=y ++CONFIG_BCM43XX_DMA_AND_PIO_MODE=y ++# CONFIG_BCM43XX_DMA_MODE is not set ++# CONFIG_BCM43XX_PIO_MODE is not set ++CONFIG_NET_WIRELESS=y ++ ++# ++# Wan interfaces ++# ++# CONFIG_WAN is not set ++# CONFIG_FDDI is not set ++# CONFIG_HIPPI is not set ++CONFIG_PPP=m ++CONFIG_PPP_MULTILINK=y ++CONFIG_PPP_FILTER=y ++CONFIG_PPP_ASYNC=m ++CONFIG_PPP_SYNC_TTY=m ++CONFIG_PPP_DEFLATE=m ++CONFIG_PPP_BSDCOMP=m ++CONFIG_PPP_MPPE=m ++CONFIG_PPPOE=m ++CONFIG_SLIP=m ++CONFIG_SLIP_COMPRESSED=y ++CONFIG_SLIP_SMART=y ++# CONFIG_SLIP_MODE_SLIP6 is not set ++# CONFIG_NET_FC is not set ++# CONFIG_SHAPER is not set ++# CONFIG_NETCONSOLE is not set ++# CONFIG_NETPOLL is not set ++# CONFIG_NET_POLL_CONTROLLER is not set ++ ++# ++# ISDN subsystem ++# ++# CONFIG_ISDN is not set ++ ++# ++# Telephony Support ++# ++# CONFIG_PHONE is not set ++ ++# ++# Input device support ++# ++CONFIG_INPUT=y ++ ++# ++# Userland interfaces ++# ++CONFIG_INPUT_MOUSEDEV=y ++# CONFIG_INPUT_MOUSEDEV_PSAUX is not set ++CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 ++CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 ++# CONFIG_INPUT_JOYDEV is not set ++# CONFIG_INPUT_TSDEV is not set ++# CONFIG_INPUT_EVDEV is not set ++# CONFIG_INPUT_EVBUG is not set ++ ++# ++# Input Device Drivers ++# ++# CONFIG_INPUT_KEYBOARD is not set ++# CONFIG_INPUT_MOUSE is not set ++# CONFIG_INPUT_JOYSTICK is not set ++# CONFIG_INPUT_TOUCHSCREEN is not set ++# CONFIG_INPUT_MISC is not set ++ ++# ++# Hardware I/O ports ++# ++# CONFIG_SERIO is not set ++# CONFIG_GAMEPORT is not set ++ ++# ++# Character devices ++# ++CONFIG_VT=y ++CONFIG_VT_CONSOLE=y ++CONFIG_HW_CONSOLE=y ++# CONFIG_SERIAL_NONSTANDARD is not set ++ ++# ++# Serial drivers ++# ++# CONFIG_SERIAL_8250 is not set ++ ++# ++# Non-8250 serial port support ++# ++CONFIG_SERIAL_SH_SCI=y ++CONFIG_SERIAL_SH_SCI_CONSOLE=y ++CONFIG_SERIAL_CORE=y ++CONFIG_SERIAL_CORE_CONSOLE=y ++# CONFIG_SERIAL_JSM is not set ++CONFIG_UNIX98_PTYS=y ++CONFIG_LEGACY_PTYS=y ++CONFIG_LEGACY_PTY_COUNT=256 ++ ++# ++# IPMI ++# ++# CONFIG_IPMI_HANDLER is not set ++ ++# ++# Watchdog Cards ++# ++CONFIG_WATCHDOG=y ++# CONFIG_WATCHDOG_NOWAYOUT is not set ++ ++# ++# Watchdog Device Drivers ++# ++# CONFIG_SOFT_WATCHDOG is not set ++CONFIG_SH_WDT=m ++ ++# ++# PCI-based Watchdog Cards ++# ++# CONFIG_PCIPCWATCHDOG is not set ++# CONFIG_WDTPCI is not set ++ ++# ++# USB-based Watchdog Cards ++# ++# CONFIG_USBPCWATCHDOG is not set ++# CONFIG_RTC is not set ++# CONFIG_GEN_RTC is not set ++# CONFIG_DTLK is not set ++# CONFIG_R3964 is not set ++# CONFIG_APPLICOM is not set ++ ++# ++# Ftape, the floppy tape device driver ++# ++# CONFIG_DRM is not set ++# CONFIG_RAW_DRIVER is not set ++ ++# ++# TPM devices ++# ++# CONFIG_TCG_TPM is not set ++# CONFIG_TELCLOCK is not set ++ ++# ++# I2C support ++# ++# CONFIG_I2C is not set ++ ++# ++# SPI support ++# ++# CONFIG_SPI is not set ++# CONFIG_SPI_MASTER is not set ++ ++# ++# Dallas's 1-wire bus ++# ++# CONFIG_W1 is not set ++ ++# ++# Hardware Monitoring support ++# ++CONFIG_HWMON=y ++# CONFIG_HWMON_VID is not set ++# CONFIG_SENSORS_F71805F is not set ++# CONFIG_HWMON_DEBUG_CHIP is not set ++ ++# ++# Misc devices ++# ++ ++# ++# Multimedia devices ++# ++# CONFIG_VIDEO_DEV is not set ++CONFIG_VIDEO_V4L2=y ++ ++# ++# Digital Video Broadcasting Devices ++# ++# CONFIG_DVB is not set ++# CONFIG_USB_DABUSB is not set ++ ++# ++# Graphics support ++# ++# CONFIG_FB is not set ++ ++# ++# Console display driver support ++# ++CONFIG_DUMMY_CONSOLE=y ++ ++# ++# Sound ++# ++# CONFIG_SOUND is not set ++ ++# ++# USB support ++# ++CONFIG_USB_ARCH_HAS_HCD=y ++CONFIG_USB_ARCH_HAS_OHCI=y ++CONFIG_USB_ARCH_HAS_EHCI=y ++CONFIG_USB=y ++# CONFIG_USB_DEBUG is not set ++ ++# ++# Miscellaneous USB options ++# ++CONFIG_USB_DEVICEFS=y ++# CONFIG_USB_BANDWIDTH is not set ++# CONFIG_USB_DYNAMIC_MINORS is not set ++# CONFIG_USB_OTG is not set ++ ++# ++# USB Host Controller Drivers ++# ++CONFIG_USB_EHCI_HCD=y ++# CONFIG_USB_EHCI_SPLIT_ISO is not set ++# CONFIG_USB_EHCI_ROOT_HUB_TT is not set ++# CONFIG_USB_ISP116X_HCD is not set ++CONFIG_USB_OHCI_HCD=y ++# CONFIG_USB_OHCI_BIG_ENDIAN is not set ++CONFIG_USB_OHCI_LITTLE_ENDIAN=y ++# CONFIG_USB_UHCI_HCD is not set ++# CONFIG_USB_SL811_HCD is not set ++ ++# ++# USB Device Class drivers ++# ++CONFIG_USB_ACM=m ++CONFIG_USB_PRINTER=m ++ ++# ++# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' ++# ++ ++# ++# may also be needed; see USB_STORAGE Help for more information ++# ++CONFIG_USB_STORAGE=y ++# CONFIG_USB_STORAGE_DEBUG is not set ++# CONFIG_USB_STORAGE_DATAFAB is not set ++# CONFIG_USB_STORAGE_FREECOM is not set ++# CONFIG_USB_STORAGE_DPCM is not set ++# CONFIG_USB_STORAGE_USBAT is not set ++# CONFIG_USB_STORAGE_SDDR09 is not set ++# CONFIG_USB_STORAGE_SDDR55 is not set ++# CONFIG_USB_STORAGE_JUMPSHOT is not set ++# CONFIG_USB_STORAGE_ALAUDA is not set ++# CONFIG_USB_LIBUSUAL is not set ++ ++# ++# USB Input Devices ++# ++# CONFIG_USB_HID is not set ++ ++# ++# USB HID Boot Protocol drivers ++# ++# CONFIG_USB_KBD is not set ++# CONFIG_USB_MOUSE is not set ++# CONFIG_USB_AIPTEK is not set ++# CONFIG_USB_WACOM is not set ++# CONFIG_USB_ACECAD is not set ++# CONFIG_USB_KBTAB is not set ++# CONFIG_USB_POWERMATE is not set ++# CONFIG_USB_TOUCHSCREEN is not set ++# CONFIG_USB_YEALINK is not set ++# CONFIG_USB_XPAD is not set ++# CONFIG_USB_ATI_REMOTE is not set ++# CONFIG_USB_ATI_REMOTE2 is not set ++# CONFIG_USB_KEYSPAN_REMOTE is not set ++# CONFIG_USB_APPLETOUCH is not set ++ ++# ++# USB Imaging devices ++# ++# CONFIG_USB_MDC800 is not set ++# CONFIG_USB_MICROTEK is not set ++ ++# ++# USB Network Adapters ++# ++# CONFIG_USB_CATC is not set ++# CONFIG_USB_KAWETH is not set ++# CONFIG_USB_PEGASUS is not set ++# CONFIG_USB_RTL8150 is not set ++# CONFIG_USB_USBNET is not set ++# CONFIG_USB_ZD1201 is not set ++CONFIG_USB_MON=y ++ ++# ++# USB port drivers ++# ++ ++# ++# USB Serial Converter support ++# ++CONFIG_USB_SERIAL=m ++CONFIG_USB_SERIAL_GENERIC=y ++# CONFIG_USB_SERIAL_AIRPRIME is not set ++# CONFIG_USB_SERIAL_ANYDATA is not set ++CONFIG_USB_SERIAL_ARK3116=m ++# CONFIG_USB_SERIAL_BELKIN is not set ++# CONFIG_USB_SERIAL_WHITEHEAT is not set ++# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set ++# CONFIG_USB_SERIAL_CP2101 is not set ++# CONFIG_USB_SERIAL_CYPRESS_M8 is not set ++# CONFIG_USB_SERIAL_EMPEG is not set ++# CONFIG_USB_SERIAL_FTDI_SIO is not set ++# CONFIG_USB_SERIAL_FUNSOFT is not set ++# CONFIG_USB_SERIAL_VISOR is not set ++# CONFIG_USB_SERIAL_IPAQ is not set ++# CONFIG_USB_SERIAL_IR is not set ++# CONFIG_USB_SERIAL_EDGEPORT is not set ++# CONFIG_USB_SERIAL_EDGEPORT_TI is not set ++# CONFIG_USB_SERIAL_GARMIN is not set ++# CONFIG_USB_SERIAL_IPW is not set ++# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set ++# CONFIG_USB_SERIAL_KEYSPAN is not set ++# CONFIG_USB_SERIAL_KLSI is not set ++# CONFIG_USB_SERIAL_KOBIL_SCT is not set ++# CONFIG_USB_SERIAL_MCT_U232 is not set ++# CONFIG_USB_SERIAL_NAVMAN is not set ++CONFIG_USB_SERIAL_PL2303=m ++# CONFIG_USB_SERIAL_HP4X is not set ++# CONFIG_USB_SERIAL_SAFE is not set ++# CONFIG_USB_SERIAL_TI is not set ++# CONFIG_USB_SERIAL_CYBERJACK is not set ++# CONFIG_USB_SERIAL_XIRCOM is not set ++# CONFIG_USB_SERIAL_OMNINET is not set ++ ++# ++# USB Miscellaneous drivers ++# ++# CONFIG_USB_EMI62 is not set ++# CONFIG_USB_EMI26 is not set ++# CONFIG_USB_AUERSWALD is not set ++# CONFIG_USB_RIO500 is not set ++# CONFIG_USB_LEGOTOWER is not set ++# CONFIG_USB_LCD is not set ++# CONFIG_USB_LED is not set ++# CONFIG_USB_CYTHERM is not set ++# CONFIG_USB_PHIDGETKIT is not set ++# CONFIG_USB_PHIDGETSERVO is not set ++# CONFIG_USB_IDMOUSE is not set ++# CONFIG_USB_SISUSBVGA is not set ++# CONFIG_USB_LD is not set ++# CONFIG_USB_TEST is not set ++ ++# ++# USB DSL modem support ++# ++ ++# ++# USB Gadget Support ++# ++# CONFIG_USB_GADGET is not set ++ ++# ++# MMC/SD Card support ++# ++# CONFIG_MMC is not set ++ ++# ++# LED devices ++# ++# CONFIG_NEW_LEDS is not set ++ ++# ++# LED drivers ++# ++ ++# ++# LED Triggers ++# ++ ++# ++# InfiniBand support ++# ++# CONFIG_INFINIBAND is not set ++ ++# ++# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) ++# ++ ++# ++# Real Time Clock ++# ++# CONFIG_RTC_CLASS is not set ++ ++# ++# File systems ++# ++CONFIG_EXT2_FS=y ++# CONFIG_EXT2_FS_XATTR is not set ++# CONFIG_EXT2_FS_XIP is not set ++CONFIG_EXT3_FS=y ++# CONFIG_EXT3_FS_XATTR is not set ++CONFIG_JBD=y ++# CONFIG_JBD_DEBUG is not set ++CONFIG_REISERFS_FS=m ++# CONFIG_REISERFS_CHECK is not set ++# CONFIG_REISERFS_PROC_INFO is not set ++# CONFIG_REISERFS_FS_XATTR is not set ++# CONFIG_JFS_FS is not set ++# CONFIG_FS_POSIX_ACL is not set ++CONFIG_XFS_FS=m ++CONFIG_XFS_EXPORT=y ++# CONFIG_XFS_QUOTA is not set ++# CONFIG_XFS_SECURITY is not set ++# CONFIG_XFS_POSIX_ACL is not set ++# CONFIG_XFS_RT is not set ++# CONFIG_OCFS2_FS is not set ++# CONFIG_MINIX_FS is not set ++# CONFIG_ROMFS_FS is not set ++CONFIG_INOTIFY=y ++# CONFIG_QUOTA is not set ++CONFIG_DNOTIFY=y ++# CONFIG_AUTOFS_FS is not set ++# CONFIG_AUTOFS4_FS is not set ++CONFIG_FUSE_FS=m ++ ++# ++# CD-ROM/DVD Filesystems ++# ++CONFIG_ISO9660_FS=m ++CONFIG_JOLIET=y ++CONFIG_ZISOFS=y ++CONFIG_ZISOFS_FS=m ++CONFIG_UDF_FS=m ++CONFIG_UDF_NLS=y ++ ++# ++# DOS/FAT/NT Filesystems ++# ++CONFIG_FAT_FS=m ++CONFIG_MSDOS_FS=m ++CONFIG_VFAT_FS=m ++CONFIG_FAT_DEFAULT_CODEPAGE=437 ++CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" ++# CONFIG_NTFS_FS is not set ++ ++# ++# Pseudo filesystems ++# ++CONFIG_PROC_FS=y ++CONFIG_PROC_KCORE=y ++CONFIG_SYSFS=y ++CONFIG_TMPFS=y ++# CONFIG_HUGETLBFS is not set ++# CONFIG_HUGETLB_PAGE is not set ++CONFIG_RAMFS=y ++CONFIG_CONFIGFS_FS=m ++ ++# ++# Miscellaneous filesystems ++# ++# CONFIG_ADFS_FS is not set ++# CONFIG_AFFS_FS is not set ++# CONFIG_HFS_FS is not set ++# CONFIG_HFSPLUS_FS is not set ++# CONFIG_BEFS_FS is not set ++# CONFIG_BFS_FS is not set ++# CONFIG_EFS_FS is not set ++# CONFIG_JFFS_FS is not set ++# CONFIG_JFFS2_FS is not set ++# CONFIG_CRAMFS is not set ++# CONFIG_VXFS_FS is not set ++# CONFIG_HPFS_FS is not set ++# CONFIG_QNX4FS_FS is not set ++# CONFIG_SYSV_FS is not set ++# CONFIG_UFS_FS is not set ++ ++# ++# Network File Systems ++# ++CONFIG_NFS_FS=y ++CONFIG_NFS_V3=y ++# CONFIG_NFS_V3_ACL is not set ++# CONFIG_NFS_V4 is not set ++# CONFIG_NFS_DIRECTIO is not set ++CONFIG_NFSD=y ++CONFIG_NFSD_V3=y ++# CONFIG_NFSD_V3_ACL is not set ++# CONFIG_NFSD_V4 is not set ++CONFIG_NFSD_TCP=y ++CONFIG_ROOT_NFS=y ++CONFIG_LOCKD=y ++CONFIG_LOCKD_V4=y ++CONFIG_EXPORTFS=y ++CONFIG_NFS_COMMON=y ++CONFIG_SUNRPC=y ++# CONFIG_RPCSEC_GSS_KRB5 is not set ++# CONFIG_RPCSEC_GSS_SPKM3 is not set ++CONFIG_SMB_FS=m ++# CONFIG_SMB_NLS_DEFAULT is not set ++# CONFIG_CIFS is not set ++# CONFIG_NCP_FS is not set ++# CONFIG_CODA_FS is not set ++# CONFIG_AFS_FS is not set ++CONFIG_9P_FS=m ++ ++# ++# Partition Types ++# ++CONFIG_PARTITION_ADVANCED=y ++# CONFIG_ACORN_PARTITION is not set ++# CONFIG_OSF_PARTITION is not set ++# CONFIG_AMIGA_PARTITION is not set ++# CONFIG_ATARI_PARTITION is not set ++# CONFIG_MAC_PARTITION is not set ++CONFIG_MSDOS_PARTITION=y ++# CONFIG_BSD_DISKLABEL is not set ++# CONFIG_MINIX_SUBPARTITION is not set ++# CONFIG_SOLARIS_X86_PARTITION is not set ++# CONFIG_UNIXWARE_DISKLABEL is not set ++# CONFIG_LDM_PARTITION is not set ++# CONFIG_SGI_PARTITION is not set ++# CONFIG_ULTRIX_PARTITION is not set ++# CONFIG_SUN_PARTITION is not set ++# CONFIG_KARMA_PARTITION is not set ++# CONFIG_EFI_PARTITION is not set ++ ++# ++# Native Language Support ++# ++CONFIG_NLS=m ++CONFIG_NLS_DEFAULT="iso8859-1" ++CONFIG_NLS_CODEPAGE_437=m ++# CONFIG_NLS_CODEPAGE_737 is not set ++# CONFIG_NLS_CODEPAGE_775 is not set ++# CONFIG_NLS_CODEPAGE_850 is not set ++# CONFIG_NLS_CODEPAGE_852 is not set ++# CONFIG_NLS_CODEPAGE_855 is not set ++# CONFIG_NLS_CODEPAGE_857 is not set ++# CONFIG_NLS_CODEPAGE_860 is not set ++# CONFIG_NLS_CODEPAGE_861 is not set ++# CONFIG_NLS_CODEPAGE_862 is not set ++# CONFIG_NLS_CODEPAGE_863 is not set ++# CONFIG_NLS_CODEPAGE_864 is not set ++# CONFIG_NLS_CODEPAGE_865 is not set ++# CONFIG_NLS_CODEPAGE_866 is not set ++# CONFIG_NLS_CODEPAGE_869 is not set ++# CONFIG_NLS_CODEPAGE_936 is not set ++# CONFIG_NLS_CODEPAGE_950 is not set ++# CONFIG_NLS_CODEPAGE_932 is not set ++# CONFIG_NLS_CODEPAGE_949 is not set ++# CONFIG_NLS_CODEPAGE_874 is not set ++# CONFIG_NLS_ISO8859_8 is not set ++# CONFIG_NLS_CODEPAGE_1250 is not set ++# CONFIG_NLS_CODEPAGE_1251 is not set ++CONFIG_NLS_ASCII=m ++CONFIG_NLS_ISO8859_1=m ++# CONFIG_NLS_ISO8859_2 is not set ++# CONFIG_NLS_ISO8859_3 is not set ++# CONFIG_NLS_ISO8859_4 is not set ++# CONFIG_NLS_ISO8859_5 is not set ++# CONFIG_NLS_ISO8859_6 is not set ++# CONFIG_NLS_ISO8859_7 is not set ++# CONFIG_NLS_ISO8859_9 is not set ++# CONFIG_NLS_ISO8859_13 is not set ++# CONFIG_NLS_ISO8859_14 is not set ++# CONFIG_NLS_ISO8859_15 is not set ++# CONFIG_NLS_KOI8_R is not set ++# CONFIG_NLS_KOI8_U is not set ++CONFIG_NLS_UTF8=m ++ ++# ++# Profiling support ++# ++# CONFIG_PROFILING is not set ++ ++# ++# Kernel hacking ++# ++# CONFIG_PRINTK_TIME is not set ++CONFIG_MAGIC_SYSRQ=y ++CONFIG_DEBUG_KERNEL=y ++CONFIG_LOG_BUF_SHIFT=16 ++# CONFIG_DETECT_SOFTLOCKUP is not set ++# CONFIG_SCHEDSTATS is not set ++# CONFIG_DEBUG_SLAB is not set ++# CONFIG_DEBUG_MUTEXES is not set ++# CONFIG_DEBUG_SPINLOCK is not set ++# CONFIG_DEBUG_SPINLOCK_SLEEP is not set ++# CONFIG_DEBUG_KOBJECT is not set ++# CONFIG_DEBUG_INFO is not set ++# CONFIG_DEBUG_FS is not set ++# CONFIG_DEBUG_VM is not set ++# CONFIG_FRAME_POINTER is not set ++# CONFIG_FORCED_INLINING is not set ++# CONFIG_RCU_TORTURE_TEST is not set ++# CONFIG_SH_STANDARD_BIOS is not set ++CONFIG_EARLY_SCIF_CONSOLE=y ++# CONFIG_EARLY_PRINTK is not set ++# CONFIG_KGDB is not set ++ ++# ++# Security options ++# ++# CONFIG_KEYS is not set ++# CONFIG_SECURITY is not set ++ ++# ++# Cryptographic options ++# ++CONFIG_CRYPTO=y ++CONFIG_CRYPTO_HMAC=y ++CONFIG_CRYPTO_NULL=m ++CONFIG_CRYPTO_MD4=m ++CONFIG_CRYPTO_MD5=y ++CONFIG_CRYPTO_SHA1=y ++CONFIG_CRYPTO_SHA256=m ++CONFIG_CRYPTO_SHA512=m ++CONFIG_CRYPTO_WP512=m ++CONFIG_CRYPTO_TGR192=m ++CONFIG_CRYPTO_DES=y ++CONFIG_CRYPTO_BLOWFISH=m ++CONFIG_CRYPTO_TWOFISH=m ++CONFIG_CRYPTO_SERPENT=m ++CONFIG_CRYPTO_AES=y ++CONFIG_CRYPTO_CAST5=m ++CONFIG_CRYPTO_CAST6=m ++CONFIG_CRYPTO_TEA=m ++CONFIG_CRYPTO_ARC4=y ++CONFIG_CRYPTO_KHAZAD=m ++CONFIG_CRYPTO_ANUBIS=m ++CONFIG_CRYPTO_DEFLATE=y ++CONFIG_CRYPTO_MICHAEL_MIC=y ++CONFIG_CRYPTO_CRC32C=m ++# CONFIG_CRYPTO_TEST is not set ++ ++# ++# Hardware crypto devices ++# ++ ++# ++# Library routines ++# ++CONFIG_CRC_CCITT=m ++CONFIG_CRC16=m ++CONFIG_CRC32=y ++CONFIG_LIBCRC32C=m ++CONFIG_ZLIB_INFLATE=y ++CONFIG_ZLIB_DEFLATE=y ++CONFIG_TEXTSEARCH=y ++CONFIG_TEXTSEARCH_KMP=m ++CONFIG_TEXTSEARCH_BM=m ++CONFIG_TEXTSEARCH_FSM=m +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/CVS/Entries linux-2.6.17/arch/sh/drivers/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/drivers/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,4 @@ ++/Makefile/1.2/Thu Mar 17 07:43:07 2005// ++D/dma//// ++D/pci//// ++D/superhyway//// +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/CVS/Repository linux-2.6.17/arch/sh/drivers/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/drivers/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/drivers +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/CVS/Root linux-2.6.17/arch/sh/drivers/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/drivers/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/CVS/Entries linux-2.6.17/arch/sh/drivers/dma/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/drivers/dma/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/dma/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,10 @@ ++/Kconfig/1.6/Sun Feb 5 15:23:46 2006// ++/Makefile/1.5/Sun May 16 01:53:40 2004// ++/dma-api.c/1.15/Wed Jan 4 15:01:03 2006// ++/dma-isa.c/1.4/Sun Oct 16 16:37:55 2005// ++/dma-pvr2.c/1.6/Sun Feb 5 15:28:01 2006// ++/dma-sh.c/1.15/Sun Feb 5 15:25:52 2006// ++/dma-sh.h/1.5/Mon Oct 17 02:27:14 2005// ++/dma-sysfs.c/1.7/Wed Jan 4 15:01:03 2006// ++/dma-g2.c/1.6/Thu Jul 6 12:38:08 2006// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/CVS/Repository linux-2.6.17/arch/sh/drivers/dma/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/drivers/dma/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/dma/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/drivers/dma +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/CVS/Root linux-2.6.17/arch/sh/drivers/dma/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/drivers/dma/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/dma/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/Kconfig linux-2.6.17/arch/sh/drivers/dma/Kconfig +--- linux-2.6.17-vanilla/arch/sh/drivers/dma/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/dma/Kconfig 2006-07-12 16:54:21.000000000 +0000 +@@ -11,6 +11,8 @@ + config NR_ONCHIP_DMA_CHANNELS + depends on SH_DMA + int "Number of on-chip DMAC channels" ++ default "8" if CPU_SUBTYPE_SH7750R || CPU_SUBTYPE_SH7751R ++ default "12" if CPU_SUBTYPE_SH7780 + default "4" + help + This allows you to specify the number of channels that the on-chip +@@ -52,4 +54,3 @@ + are dual-address capable. + + endmenu +- +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/dma-g2.c linux-2.6.17/arch/sh/drivers/dma/dma-g2.c +--- linux-2.6.17-vanilla/arch/sh/drivers/dma/dma-g2.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/dma/dma-g2.c 2006-07-12 16:54:21.000000000 +0000 +@@ -3,7 +3,7 @@ + * + * G2 bus DMA support + * +- * Copyright (C) 2003, 2004 Paul Mundt ++ * Copyright (C) 2003 - 2006 Paul Mundt + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive +@@ -13,7 +13,7 @@ + #include <linux/kernel.h> + #include <linux/module.h> + #include <linux/interrupt.h> +- ++#include <asm/cacheflush.h> + #include <asm/mach/sysasic.h> + #include <asm/mach/dma.h> + #include <asm/dma.h> +@@ -47,17 +47,31 @@ + + static volatile struct g2_dma_info *g2_dma = (volatile struct g2_dma_info *)0xa05f7800; + ++#define g2_bytes_remaining(i) \ ++ ((g2_dma->channel[i].size - \ ++ g2_dma->status[i].size) & 0x0fffffff) ++ + static irqreturn_t g2_dma_interrupt(int irq, void *dev_id, struct pt_regs *regs) + { +- /* FIXME: Do some meaningful completion work here.. */ +- return IRQ_HANDLED; +-} ++ int i; + +-static struct irqaction g2_dma_irq = { +- .name = "g2 DMA handler", +- .handler = g2_dma_interrupt, +- .flags = SA_INTERRUPT, +-}; ++ for (i = 0; i < G2_NR_DMA_CHANNELS; i++) { ++ if (g2_dma->status[i].status & 0x20000000) { ++ unsigned int bytes = g2_bytes_remaining(i); ++ ++ if (likely(bytes == 0)) { ++ struct dma_info *info = dev_id; ++ struct dma_channel *chan = info->channels + i; ++ ++ wake_up(&chan->wait_queue); ++ ++ return IRQ_HANDLED; ++ } ++ } ++ } ++ ++ return IRQ_NONE; ++} + + static int g2_enable_dma(struct dma_channel *chan) + { +@@ -135,8 +149,14 @@ + return 0; + } + ++static int g2_get_residue(struct dma_channel *chan) ++{ ++ return g2_bytes_remaining(chan->chan); ++} ++ + static struct dma_ops g2_dma_ops = { + .xfer = g2_xfer_dma, ++ .get_residue = g2_get_residue, + }; + + static struct dma_info g2_dma_info = { +@@ -148,13 +168,22 @@ + + static int __init g2_dma_init(void) + { +- setup_irq(HW_EVENT_G2_DMA, &g2_dma_irq); ++ int ret; + ++ ret = request_irq(HW_EVENT_G2_DMA, g2_dma_interrupt, SA_INTERRUPT, ++ "g2 DMA handler", &g2_dma_info); ++ if (unlikely(ret)) ++ return -EINVAL; ++ + /* Magic */ + g2_dma->wait_state = 27; + g2_dma->magic = 0x4659404f; + +- return register_dmac(&g2_dma_info); ++ ret = register_dmac(&g2_dma_info); ++ if (unlikely(ret != 0)) ++ free_irq(HW_EVENT_G2_DMA, 0); ++ ++ return ret; + } + + static void __exit g2_dma_exit(void) +@@ -169,4 +198,3 @@ + MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>"); + MODULE_DESCRIPTION("G2 bus DMA driver"); + MODULE_LICENSE("GPL"); +- +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/dma-pvr2.c linux-2.6.17/arch/sh/drivers/dma/dma-pvr2.c +--- linux-2.6.17-vanilla/arch/sh/drivers/dma/dma-pvr2.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/dma/dma-pvr2.c 2006-07-12 16:54:21.000000000 +0000 +@@ -18,8 +18,8 @@ + #include <asm/dma.h> + #include <asm/io.h> + +-static unsigned int xfer_complete = 0; +-static int count = 0; ++static unsigned int xfer_complete; ++static int count; + + static irqreturn_t pvr2_dma_interrupt(int irq, void *dev_id, struct pt_regs *regs) + { +@@ -107,4 +107,3 @@ + MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>"); + MODULE_DESCRIPTION("NEC PowerVR 2 DMA driver"); + MODULE_LICENSE("GPL"); +- +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/dma/dma-sh.c linux-2.6.17/arch/sh/drivers/dma/dma-sh.c +--- linux-2.6.17-vanilla/arch/sh/drivers/dma/dma-sh.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/dma/dma-sh.c 2006-07-12 16:54:21.000000000 +0000 +@@ -11,15 +11,11 @@ + * License. See the file "COPYING" in the main directory of this archive + * for more details. + */ +- + #include <linux/config.h> + #include <linux/init.h> +-#include <linux/irq.h> + #include <linux/interrupt.h> + #include <linux/module.h> + #include <asm/dreamcast/dma.h> +-#include <asm/signal.h> +-#include <asm/irq.h> + #include <asm/dma.h> + #include <asm/io.h> + #include "dma-sh.h" +@@ -87,6 +83,9 @@ + { + char name[32]; + ++ if (unlikely(!chan->flags & DMA_TEI_CAPABLE)) ++ return 0; ++ + snprintf(name, sizeof(name), "DMAC Transfer End (Channel %d)", + chan->chan); + +@@ -260,7 +259,7 @@ + #ifdef CONFIG_CPU_SH4 + make_ipr_irq(DMAE_IRQ, DMA_IPR_ADDR, DMA_IPR_POS, DMA_PRIORITY); + i = request_irq(DMAE_IRQ, dma_err, SA_INTERRUPT, "DMAC Address Error", 0); +- if (i < 0) ++ if (unlikely(i < 0)) + return i; + #endif + +@@ -275,7 +274,7 @@ + * been set. + */ + i = dmaor_reset(); +- if (i < 0) ++ if (unlikely(i != 0)) + return i; + + return register_dmac(info); +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/CVS/Entries linux-2.6.17/arch/sh/drivers/pci/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,26 @@ ++/Kconfig/1.4/Wed Mar 2 13:02:55 2005// ++/Makefile/1.9/Wed Feb 8 21:55:09 2006// ++/dma-dreamcast.c/1.4/Tue Jan 3 22:35:51 2006// ++/fixups-dreamcast.c/1.6/Tue Feb 7 20:12:06 2006// ++/fixups-r7780rp.c/1.5/Wed Feb 8 12:17:46 2006/-ko/ ++/fixups-rts7751r2d.c/1.4/Thu Feb 23 11:10:52 2006/-ko/ ++/fixups-sh03.c/1.3/Sun Feb 5 18:34:56 2006/-ko/ ++/ops-bigsur.c/1.3/Sun Feb 5 21:55:29 2006// ++/ops-dreamcast.c/1.1/Sun Aug 24 19:15:45 2003// ++/ops-landisk.c/1.1/Wed Feb 8 21:55:09 2006/-ko/ ++/ops-r7780rp.c/1.3/Sun Feb 5 21:55:29 2006/-ko/ ++/ops-rts7751r2d.c/1.4/Sun Feb 5 21:55:29 2006/-ko/ ++/ops-sh03.c/1.1/Thu Oct 7 11:01:14 2004/-ko/ ++/ops-sh4.c/1.1/Sun Feb 5 21:55:29 2006/-ko/ ++/ops-snapgear.c/1.4/Sun Feb 5 21:55:29 2006// ++/ops-titan.c/1.5/Wed Feb 8 13:32:20 2006/-ko/ ++/pci-auto.c/1.6/Sun Feb 5 18:31:46 2006// ++/pci-sh4.h/1.1/Sun Feb 5 21:55:29 2006/-ko/ ++/pci-sh7751.c/1.17/Thu Feb 23 11:10:52 2006// ++/pci-sh7751.h/1.5/Sun Feb 5 21:55:29 2006/-ko/ ++/pci-sh7780.c/1.5/Tue Feb 7 15:28:03 2006/-ko/ ++/pci-sh7780.h/1.4/Wed Feb 8 12:09:30 2006/-ko/ ++/pci-st40.c/1.7/Sun Feb 5 18:45:40 2006// ++/pci-st40.h/1.3/Thu Aug 19 16:10:14 2004// ++/pci.c/1.10/Wed Feb 8 12:21:32 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/CVS/Repository linux-2.6.17/arch/sh/drivers/pci/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/drivers/pci +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/CVS/Root linux-2.6.17/arch/sh/drivers/pci/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/Makefile linux-2.6.17/arch/sh/drivers/pci/Makefile +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/Makefile 2006-07-12 16:54:21.000000000 +0000 +@@ -6,7 +6,8 @@ + obj-$(CONFIG_PCI_AUTO) += pci-auto.o + + obj-$(CONFIG_CPU_SUBTYPE_ST40STB1) += pci-st40.o +-obj-$(CONFIG_CPU_SUBTYPE_SH7751) += pci-sh7751.o ++obj-$(CONFIG_CPU_SUBTYPE_SH7751) += pci-sh7751.o ops-sh4.o ++obj-$(CONFIG_CPU_SUBTYPE_SH7780) += pci-sh7780.o ops-sh4.o + + obj-$(CONFIG_SH_DREAMCAST) += ops-dreamcast.o fixups-dreamcast.o \ + dma-dreamcast.o +@@ -14,3 +15,6 @@ + obj-$(CONFIG_SH_BIGSUR) += ops-bigsur.o + obj-$(CONFIG_SH_RTS7751R2D) += ops-rts7751r2d.o fixups-rts7751r2d.o + obj-$(CONFIG_SH_SH03) += ops-sh03.o fixups-sh03.o ++obj-$(CONFIG_SH_R7780RP) += ops-r7780rp.o fixups-r7780rp.o ++obj-$(CONFIG_SH_TITAN) += ops-titan.o ++obj-$(CONFIG_SH_LANDISK) += ops-landisk.o +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-dreamcast.c linux-2.6.17/arch/sh/drivers/pci/fixups-dreamcast.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-dreamcast.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/fixups-dreamcast.c 2006-07-12 16:54:21.000000000 +0000 +@@ -4,7 +4,7 @@ + * PCI fixups for the Sega Dreamcast + * + * Copyright (C) 2001, 2002 M. R. Brown +- * Copyright (C) 2002, 2003 Paul Mundt ++ * Copyright (C) 2002, 2003, 2006 Paul Mundt + * + * This file originally bore the message (with enclosed-$): + * Id: pci.c,v 1.3 2003/05/04 19:29:46 lethal Exp +@@ -46,36 +46,16 @@ + printk("PCI: Failed resource fixup\n"); + } + } +- + DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, gapspci_fixup_resources); + +-void __init pcibios_fixup_bus(struct pci_bus *bus) ++int __init pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin) + { +- /* +- * We don't have any sub bus to fix up, and this is a rather +- * stupid place to put general device fixups. Don't do it. +- * Use the pcibios_fixups table or suffer the consequences. ++ /* ++ * The interrupt routing semantics here are quite trivial. ++ * ++ * We basically only support one interrupt, so we only bother ++ * updating a device's interrupt line with this single shared ++ * interrupt. Keeps routing quite simple, doesn't it? + */ ++ return GAPSPCI_IRQ; + } +- +-void __init pcibios_fixup_irqs(void) +-{ +- struct pci_dev *dev = 0; +- +- for_each_pci_dev(dev) { +- /* +- * The interrupt routing semantics here are quite trivial. +- * +- * We basically only support one interrupt, so we only bother +- * updating a device's interrupt line with this single shared +- * interrupt. Keeps routing quite simple, doesn't it? +- */ +- printk(KERN_NOTICE "PCI: Fixing up IRQ routing for device %s\n", +- pci_name(dev)); +- +- dev->irq = GAPSPCI_IRQ; +- +- pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq); +- } +-} +- +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-r7780rp.c linux-2.6.17/arch/sh/drivers/pci/fixups-r7780rp.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-r7780rp.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/fixups-r7780rp.c 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,45 @@ ++/* ++ * arch/sh/drivers/pci/fixups-r7780rp.c ++ * ++ * Highlander R7780RP-1 PCI fixups ++ * ++ * Copyright (C) 2003 Lineo uSolutions, Inc. ++ * Copyright (C) 2004 - 2006 Paul Mundt ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ ++#include <linux/pci.h> ++#include "pci-sh4.h" ++#include <asm/io.h> ++ ++int pci_fixup_pcic(void) ++{ ++ pci_write_reg(0x000043ff, SH4_PCIINTM); ++ pci_write_reg(0x0000380f, SH4_PCIAINTM); ++ ++ pci_write_reg(0xfbb00047, SH7780_PCICMD); ++ pci_write_reg(0x00000000, SH7780_PCIIBAR); ++ ++ pci_write_reg(0x00011912, SH7780_PCISVID); ++ pci_write_reg(0x08000000, SH7780_PCICSCR0); ++ pci_write_reg(0x0000001b, SH7780_PCICSAR0); ++ pci_write_reg(0xfd000000, SH7780_PCICSCR1); ++ pci_write_reg(0x0000000f, SH7780_PCICSAR1); ++ ++ pci_write_reg(0xfd000000, SH7780_PCIMBR0); ++ pci_write_reg(0x00fc0000, SH7780_PCIMBMR0); ++ ++#ifdef CONFIG_32BIT ++ pci_write_reg(0xc0000000, SH7780_PCIMBR2); ++ pci_write_reg(0x20000000 - SH7780_PCI_IO_SIZE, SH7780_PCIMBMR2); ++#endif ++ ++ /* Set IOBR for windows containing area specified in pci.h */ ++ pci_write_reg((PCIBIOS_MIN_IO & ~(SH7780_PCI_IO_SIZE - 1)), ++ SH7780_PCIIOBR); ++ pci_write_reg(((SH7780_PCI_IO_SIZE-1) & (7<<18)), SH7780_PCIIOBMR); ++ ++ return 0; ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-rts7751r2d.c linux-2.6.17/arch/sh/drivers/pci/fixups-rts7751r2d.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-rts7751r2d.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/fixups-rts7751r2d.c 2006-07-12 16:54:21.000000000 +0000 +@@ -10,8 +10,7 @@ + * License. See the file "COPYING" in the main directory of this archive + * for more details. + */ +-#include "pci-sh7751.h" +-#include <asm/io.h> ++#include "pci-sh4.h" + + #define PCIMCR_MRSET_OFF 0xBFFFFFFF + #define PCIMCR_RFSH_OFF 0xFFFFFFFB +@@ -22,22 +21,23 @@ + + bcr1 = inl(SH7751_BCR1); + bcr1 |= 0x40080000; /* Enable Bit 19 BREQEN, set PCIC to slave */ +- outl(bcr1, PCI_REG(SH7751_PCIBCR1)); ++ pci_write_reg(bcr1, SH4_PCIBCR1); + + /* Enable all interrupts, so we known what to fix */ +- outl(0x0000c3ff, PCI_REG(SH7751_PCIINTM)); +- outl(0x0000380f, PCI_REG(SH7751_PCIAINTM)); ++ pci_write_reg(0x0000c3ff, SH4_PCIINTM); ++ pci_write_reg(0x0000380f, SH4_PCIAINTM); + +- outl(0xfb900047, PCI_REG(SH7751_PCICONF1)); +- outl(0xab000001, PCI_REG(SH7751_PCICONF4)); ++ pci_write_reg(0xfb900047, SH7751_PCICONF1); ++ pci_write_reg(0xab000001, SH7751_PCICONF4); + + mcr = inl(SH7751_MCR); + mcr = (mcr & PCIMCR_MRSET_OFF) & PCIMCR_RFSH_OFF; +- outl(mcr, PCI_REG(SH7751_PCIMCR)); ++ pci_write_reg(mcr, SH4_PCIMCR); ++ ++ pci_write_reg(0x0c000000, SH7751_PCICONF5); ++ pci_write_reg(0xd0000000, SH7751_PCICONF6); ++ pci_write_reg(0x0c000000, SH4_PCILAR0); ++ pci_write_reg(0x00000000, SH4_PCILAR1); + +- outl(0x0c000000, PCI_REG(SH7751_PCICONF5)); +- outl(0xd0000000, PCI_REG(SH7751_PCICONF6)); +- outl(0x0c000000, PCI_REG(SH7751_PCILAR0)); +- outl(0x00000000, PCI_REG(SH7751_PCILAR1)); + return 0; + } +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-sh03.c linux-2.6.17/arch/sh/drivers/pci/fixups-sh03.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/fixups-sh03.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/fixups-sh03.c 2006-07-12 16:54:21.000000000 +0000 +@@ -3,11 +3,7 @@ + #include <linux/types.h> + #include <linux/pci.h> + +-/* +- * IRQ functions +- */ +- +-int __init pcibios_map_platform_irq(u8 slot, u8 pin, struct pci_dev *dev) ++int __init pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin) + { + int irq; + +@@ -17,8 +13,9 @@ + case 8: return 5; /* eth1 */ + case 6: return 2; /* PCI bridge */ + default: +- printk("PCI: Bad IRQ mapping request for slot %d\n", slot); +- return 2; ++ printk(KERN_ERR "PCI: Bad IRQ mapping request " ++ "for slot %d\n", slot); ++ return 2; + } + } else { + switch (pin) { +@@ -32,30 +29,3 @@ + } + return irq; + } +- +-static u8 __init sh03_no_swizzle(struct pci_dev *dev, u8 *pin) +-{ +- /* no swizzling */ +- return PCI_SLOT(dev->devfn); +-} +- +-static int sh03_pci_lookup_irq(struct pci_dev *dev, u8 slot, u8 pin) +-{ +- int irq = -1; +- +- /* now lookup the actual IRQ on a platform specific basis (pci-'platform'.c) */ +- irq = pcibios_map_platform_irq(slot, pin, dev); +- if( irq < 0 ) { +- pr_debug("PCI: Error mapping IRQ on device %s\n", pci_name(dev)); +- return irq; +- } +- +- pr_debug("Setting IRQ for slot %s to %d\n", pci_name(dev), irq); +- +- return irq; +-} +- +-void __init pcibios_fixup_irqs(void) +-{ +- pci_fixup_irqs(sh03_no_swizzle, sh03_pci_lookup_irq); +-} +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-bigsur.c linux-2.6.17/arch/sh/drivers/pci/ops-bigsur.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-bigsur.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/ops-bigsur.c 2006-07-12 16:54:21.000000000 +0000 +@@ -10,16 +10,13 @@ + * + * PCI initialization for the Hitachi Big Sur Evaluation Board + */ +- + #include <linux/config.h> + #include <linux/kernel.h> + #include <linux/types.h> + #include <linux/init.h> +-#include <linux/delay.h> + #include <linux/pci.h> +- + #include <asm/io.h> +-#include "pci-sh7751.h" ++#include "pci-sh4.h" + #include <asm/bigsur/bigsur.h> + + #define BIGSUR_PCI_IO 0x4000 +@@ -42,11 +39,11 @@ + extern struct pci_ops sh7751_pci_ops; + + struct pci_channel board_pci_channels[] = { +- { &sh7751_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff }, ++ { &sh4_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff }, + { 0, } + }; + +-static struct sh7751_pci_address_map sh7751_pci_map = { ++static struct sh4_pci_address_map sh7751_pci_map = { + .window0 = { + .base = SH7751_CS3_BASE_ADDR, + .size = BIGSUR_LSR0_SIZE, +@@ -59,7 +56,7 @@ + }; + + /* +- * Initialize the Big Sur PCI interface ++ * Initialize the Big Sur PCI interface + * Setup hardware to be Central Funtion + * Copy the BSR regs to the PCI interface + * Setup PCI windows into local RAM +@@ -69,15 +66,15 @@ + return sh7751_pcic_init(&sh7751_pci_map); + } + +-int pcibios_map_platform_irq(u8 slot, u8 pin) ++int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) + { +- /* ++ /* + * The Big Sur can be used in a CPCI chassis, but the SH7751 PCI + * interface is on the wrong end of the board so that it can also + * support a V320 CPI interface chip... Therefor the IRQ mapping is + * somewhat use dependent... I'l assume a linear map for now, i.e. + * INTA=slot0,pin0... INTD=slot3,pin0... +- */ ++ */ + int irq = (slot + pin-1) % 4 + BIGSUR_SH7751_PCI_IRQ_BASE; + + PCIDBG(2, "PCI: Mapping Big Sur IRQ for slot %d, pin %c to irq %d\n", +@@ -85,4 +82,3 @@ + + return irq; + } +- +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-landisk.c linux-2.6.17/arch/sh/drivers/pci/ops-landisk.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-landisk.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/ops-landisk.c 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,68 @@ ++/* ++ * arch/sh/drivers/pci/ops-landisk.c ++ * ++ * PCI initialization for the I-O DATA Device, Inc. LANDISK board ++ * ++ * Copyright (C) 2006 kogiidena ++ * ++ * May be copied or modified under the terms of the GNU General Public ++ * License. See linux/COPYING for more information. ++ */ ++#include <linux/config.h> ++#include <linux/kernel.h> ++#include <linux/types.h> ++#include <linux/init.h> ++#include <linux/delay.h> ++#include <linux/pci.h> ++#include "pci-sh4.h" ++ ++static struct resource sh7751_io_resource = { ++ .name = "SH7751 IO", ++ .start = 0x4000, ++ .end = 0x4000 + SH7751_PCI_IO_SIZE - 1, ++ .flags = IORESOURCE_IO ++}; ++ ++static struct resource sh7751_mem_resource = { ++ .name = "SH7751 mem", ++ .start = SH7751_PCI_MEMORY_BASE, ++ .end = SH7751_PCI_MEMORY_BASE + SH7751_PCI_MEM_SIZE - 1, ++ .flags = IORESOURCE_MEM ++}; ++ ++struct pci_channel board_pci_channels[] = { ++ {&sh4_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0x3ff}, ++ {NULL, NULL, NULL, 0, 0}, ++}; ++ ++static struct sh4_pci_address_map sh7751_pci_map = { ++ .window0 = { ++ .base = SH7751_CS3_BASE_ADDR, ++ .size = (64 << 20), /* 64MB */ ++ }, ++ ++ .flags = SH4_PCIC_NO_RESET, ++}; ++ ++int __init pcibios_init_platform(void) ++{ ++ return sh7751_pcic_init(&sh7751_pci_map); ++} ++ ++int pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) ++{ ++ /* ++ * slot0: pin1-4 = irq5,6,7,8 ++ * slot1: pin1-4 = irq6,7,8,5 ++ * slot2: pin1-4 = irq7,8,5,6 ++ * slot3: pin1-4 = irq8,5,6,7 ++ */ ++ int irq = ((slot + pin - 1) & 0x3) + 5; ++ ++ if ((slot | (pin - 1)) > 0x3) { ++ printk("PCI: Bad IRQ mapping request for slot %d pin %c\n", ++ slot, pin - 1 + 'A'); ++ return -1; ++ } ++ return irq; ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-r7780rp.c linux-2.6.17/arch/sh/drivers/pci/ops-r7780rp.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-r7780rp.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/ops-r7780rp.c 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,75 @@ ++/* ++ * Author: Ian DaSilva (idasilva@mvista.com) ++ * ++ * Highly leveraged from pci-bigsur.c, written by Dustin McIntire. ++ * ++ * May be copied or modified under the terms of the GNU General Public ++ * License. See linux/COPYING for more information. ++ * ++ * PCI initialization for the Renesas SH7780 Highlander R7780RP-1 board ++ */ ++ ++#include <linux/config.h> ++#include <linux/kernel.h> ++#include <linux/types.h> ++#include <linux/init.h> ++#include <linux/delay.h> ++#include <linux/pci.h> ++#include <asm/r7780rp/r7780rp.h> ++#include <asm/io.h> ++#include "pci-sh4.h" ++ ++int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) ++{ ++ switch (slot) { ++ case 0: return IRQ_PCISLOT1; /* PCI Interrupt #1 */ ++ case 1: return IRQ_PCISLOT2; /* PCI Interrupt #2 */ ++ case 2: return IRQ_PCISLOT3; /* PCI Interrupt #3 */ ++ case 3: return IRQ_PCISLOT4; /* PCI Interrupt E4 */ ++ default: ++ printk(KERN_ERR "PCI: Bad IRQ mapping " ++ "request for slot %d, func %d\n", slot, pin-1); ++ return -1; ++ } ++} ++ ++static struct resource sh7780_io_resource = { ++ .name = "SH7780_IO", ++ .start = 0x2000, ++ .end = 0x2000 + SH7780_PCI_IO_SIZE - 1, ++ .flags = IORESOURCE_IO ++}; ++ ++static struct resource sh7780_mem_resource = { ++ .name = "SH7780_mem", ++ .start = SH7780_PCI_MEMORY_BASE, ++ .end = SH7780_PCI_MEMORY_BASE + SH7780_PCI_MEM_SIZE - 1, ++ .flags = IORESOURCE_MEM ++}; ++ ++extern struct pci_ops sh7780_pci_ops; ++ ++struct pci_channel board_pci_channels[] = { ++ { &sh4_pci_ops, &sh7780_io_resource, &sh7780_mem_resource, 0, 0xff }, ++ { NULL, NULL, NULL, 0, 0 }, ++}; ++EXPORT_SYMBOL(board_pci_channels); ++ ++static struct sh4_pci_address_map sh7780_pci_map = { ++ .window0 = { ++ .base = SH7780_CS2_BASE_ADDR, ++ .size = 0x04000000, ++ }, ++ ++ .window1 = { ++ .base = SH7780_CS3_BASE_ADDR, ++ .size = 0x04000000, ++ }, ++ ++ .flags = SH4_PCIC_NO_RESET, ++}; ++ ++int __init pcibios_init_platform(void) ++{ ++ return sh7780_pcic_init(&sh7780_pci_map); ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-rts7751r2d.c linux-2.6.17/arch/sh/drivers/pci/ops-rts7751r2d.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-rts7751r2d.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/ops-rts7751r2d.c 2006-07-12 16:54:21.000000000 +0000 +@@ -18,12 +18,11 @@ + #include <linux/delay.h> + #include <linux/pci.h> + #include <linux/module.h> +- +-#include <asm/io.h> +-#include "pci-sh7751.h" + #include <asm/rts7751r2d/rts7751r2d.h> ++#include <asm/io.h> ++#include "pci-sh4.h" + +-int __init pcibios_map_platform_irq(u8 slot, u8 pin) ++int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) + { + switch (slot) { + case 0: return IRQ_PCISLOT1; /* PCI Extend slot #1 */ +@@ -53,12 +52,12 @@ + extern struct pci_ops sh7751_pci_ops; + + struct pci_channel board_pci_channels[] = { +- { &sh7751_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff }, ++ { &sh4_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff }, + { NULL, NULL, NULL, 0, 0 }, + }; + EXPORT_SYMBOL(board_pci_channels); + +-static struct sh7751_pci_address_map sh7751_pci_map = { ++static struct sh4_pci_address_map sh7751_pci_map = { + .window0 = { + .base = SH7751_CS3_BASE_ADDR, + .size = 0x04000000, +@@ -69,7 +68,7 @@ + .size = 0x00000000, /* Unused */ + }, + +- .flags = SH7751_PCIC_NO_RESET, ++ .flags = SH4_PCIC_NO_RESET, + }; + + int __init pcibios_init_platform(void) +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-sh4.c linux-2.6.17/arch/sh/drivers/pci/ops-sh4.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-sh4.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/ops-sh4.c 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,164 @@ ++/* ++ * Generic SH-4 / SH-4A PCIC operations (SH7751, SH7780). ++ * ++ * Copyright (C) 2002 - 2006 Paul Mundt ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License v2. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ ++#include <linux/pci.h> ++#include <asm/addrspace.h> ++#include <asm/io.h> ++#include "pci-sh4.h" ++ ++/* ++ * Direct access to PCI hardware... ++ */ ++#define CONFIG_CMD(bus, devfn, where) \ ++ P1SEGADDR((bus->number << 16) | (devfn << 8) | (where & ~3)) ++ ++static DEFINE_SPINLOCK(sh4_pci_lock); ++ ++/* ++ * Functions for accessing PCI configuration space with type 1 accesses ++ */ ++static int sh4_pci_read(struct pci_bus *bus, unsigned int devfn, ++ int where, int size, u32 *val) ++{ ++ unsigned long flags; ++ u32 data; ++ ++ /* ++ * PCIPDR may only be accessed as 32 bit words, ++ * so we must do byte alignment by hand ++ */ ++ spin_lock_irqsave(&sh4_pci_lock, flags); ++ pci_write_reg(CONFIG_CMD(bus, devfn, where), SH4_PCIPAR); ++ data = pci_read_reg(SH4_PCIPDR); ++ spin_unlock_irqrestore(&sh4_pci_lock, flags); ++ ++ switch (size) { ++ case 1: ++ *val = (data >> ((where & 3) << 3)) & 0xff; ++ break; ++ case 2: ++ *val = (data >> ((where & 2) << 3)) & 0xffff; ++ break; ++ case 4: ++ *val = data; ++ break; ++ default: ++ return PCIBIOS_FUNC_NOT_SUPPORTED; ++ } ++ ++ return PCIBIOS_SUCCESSFUL; ++} ++ ++/* ++ * Since SH4 only does 32bit access we'll have to do a read, ++ * mask,write operation. ++ * We'll allow an odd byte offset, though it should be illegal. ++ */ ++static int sh4_pci_write(struct pci_bus *bus, unsigned int devfn, ++ int where, int size, u32 val) ++{ ++ unsigned long flags; ++ int shift; ++ u32 data; ++ ++ spin_lock_irqsave(&sh4_pci_lock, flags); ++ pci_write_reg(CONFIG_CMD(bus, devfn, where), SH4_PCIPAR); ++ data = pci_read_reg(SH4_PCIPDR); ++ spin_unlock_irqrestore(&sh4_pci_lock, flags); ++ ++ switch (size) { ++ case 1: ++ shift = (where & 3) << 3; ++ data &= ~(0xff << shift); ++ data |= ((val & 0xff) << shift); ++ break; ++ case 2: ++ shift = (where & 2) << 3; ++ data &= ~(0xffff << shift); ++ data |= ((val & 0xffff) << shift); ++ break; ++ case 4: ++ data = val; ++ break; ++ default: ++ return PCIBIOS_FUNC_NOT_SUPPORTED; ++ } ++ ++ pci_write_reg(data, SH4_PCIPDR); ++ ++ return PCIBIOS_SUCCESSFUL; ++} ++ ++struct pci_ops sh4_pci_ops = { ++ .read = sh4_pci_read, ++ .write = sh4_pci_write, ++}; ++ ++/* ++ * Not really related to pci_ops, but it's common and not worth shoving ++ * somewhere else for now.. ++ */ ++static unsigned int pci_probe = PCI_PROBE_CONF1; ++ ++int __init sh4_pci_check_direct(void) ++{ ++ /* ++ * Check if configuration works. ++ */ ++ if (pci_probe & PCI_PROBE_CONF1) { ++ unsigned int tmp = pci_read_reg(SH4_PCIPAR); ++ ++ pci_write_reg(P1SEG, SH4_PCIPAR); ++ ++ if (pci_read_reg(SH4_PCIPAR) == P1SEG) { ++ pci_write_reg(tmp, SH4_PCIPAR); ++ printk(KERN_INFO "PCI: Using configuration type 1\n"); ++ request_region(PCI_REG(SH4_PCIPAR), 8, "PCI conf1"); ++ ++ return 0; ++ } ++ ++ pci_write_reg(tmp, SH4_PCIPAR); ++ } ++ ++ pr_debug("PCI: pci_check_direct failed\n"); ++ return -EINVAL; ++} ++ ++/* Handle generic fixups */ ++static void __init pci_fixup_ide_bases(struct pci_dev *d) ++{ ++ int i; ++ ++ /* ++ * PCI IDE controllers use non-standard I/O port decoding, respect it. ++ */ ++ if ((d->class >> 8) != PCI_CLASS_STORAGE_IDE) ++ return; ++ pr_debug("PCI: IDE base address fixup for %s\n", pci_name(d)); ++ for(i = 0; i < 4; i++) { ++ struct resource *r = &d->resource[i]; ++ ++ if ((r->start & ~0x80) == 0x374) { ++ r->start |= 2; ++ r->end = r->start; ++ } ++ } ++} ++DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases); ++ ++char * __init pcibios_setup(char *str) ++{ ++ if (!strcmp(str, "off")) { ++ pci_probe = 0; ++ return NULL; ++ } ++ ++ return str; ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-snapgear.c linux-2.6.17/arch/sh/drivers/pci/ops-snapgear.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-snapgear.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/ops-snapgear.c 2006-07-12 16:54:21.000000000 +0000 +@@ -2,7 +2,7 @@ + * arch/sh/drivers/pci/ops-snapgear.c + * + * Author: David McCullough <davidm@snapgear.com> +- * ++ * + * Ported to new API by Paul Mundt <lethal@linux-sh.org> + * + * Highly leveraged from pci-bigsur.c, written by Dustin McIntire. +@@ -12,16 +12,12 @@ + * + * PCI initialization for the SnapGear boards + */ +- + #include <linux/config.h> + #include <linux/kernel.h> + #include <linux/types.h> + #include <linux/init.h> +-#include <linux/delay.h> + #include <linux/pci.h> +- +-#include <asm/io.h> +-#include "pci-sh7751.h" ++#include "pci-sh4.h" + + #define SNAPGEAR_PCI_IO 0x4000 + #define SNAPGEAR_PCI_MEM 0xfd000000 +@@ -44,14 +40,12 @@ + .flags = IORESOURCE_MEM, + }; + +-extern struct pci_ops sh7751_pci_ops; +- + struct pci_channel board_pci_channels[] = { +- { &sh7751_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff }, ++ { &sh4_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff }, + { 0, } + }; + +-static struct sh7751_pci_address_map sh7751_pci_map = { ++static struct sh4_pci_address_map sh7751_pci_map = { + .window0 = { + .base = SH7751_CS2_BASE_ADDR, + .size = SNAPGEAR_LSR0_SIZE, +@@ -62,11 +56,11 @@ + .size = SNAPGEAR_LSR1_SIZE, + }, + +- .flags = SH7751_PCIC_NO_RESET, ++ .flags = SH4_PCIC_NO_RESET, + }; + + /* +- * Initialize the SnapGear PCI interface ++ * Initialize the SnapGear PCI interface + * Setup hardware to be Central Funtion + * Copy the BSR regs to the PCI interface + * Setup PCI windows into local RAM +@@ -76,7 +70,7 @@ + return sh7751_pcic_init(&sh7751_pci_map); + } + +-int __init pcibios_map_platform_irq(u8 slot, u8 pin) ++int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) + { + int irq = -1; + +@@ -99,4 +93,3 @@ + { + /* Nothing to fixup .. */ + } +- +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-titan.c linux-2.6.17/arch/sh/drivers/pci/ops-titan.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/ops-titan.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/ops-titan.c 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,83 @@ ++/* ++ * arch/sh/drivers/pci/ops-titan.c ++ * ++ * Ported to new API by Paul Mundt <lethal@linux-sh.org> ++ * ++ * Modified from ops-snapgear.c written by David McCullough ++ * Highly leveraged from pci-bigsur.c, written by Dustin McIntire. ++ * ++ * May be copied or modified under the terms of the GNU General Public ++ * License. See linux/COPYING for more information. ++ * ++ * PCI initialization for the Titan boards ++ */ ++ ++#include <linux/config.h> ++#include <linux/kernel.h> ++#include <linux/types.h> ++#include <linux/init.h> ++#include <linux/pci.h> ++#include <asm/io.h> ++#include <asm/titan.h> ++#include "pci-sh4.h" ++ ++int __init pcibios_map_platform_irq(struct pci_dev *pdev, u8 slot, u8 pin) ++{ ++ int irq = -1; ++ ++ switch (slot) { ++ case 0: irq = TITAN_IRQ_WAN; break; /* eth0 (WAN) */ ++ case 1: irq = TITAN_IRQ_LAN; break; /* eth1 (LAN) */ ++ case 2: irq = TITAN_IRQ_MPCIA; break; /* mPCI A */ ++ case 3: irq = TITAN_IRQ_MPCIB; break; /* mPCI B */ ++ case 4: irq = TITAN_IRQ_USB; break; /* USB */ ++ default: ++ printk(KERN_INFO "PCI: Bad IRQ mapping " ++ "request for slot %d\n", slot); ++ return -1; ++ } ++ ++ printk("PCI: Mapping TITAN IRQ for slot %d, pin %c to irq %d\n", ++ slot, pin - 1 + 'A', irq); ++ ++ return irq; ++} ++ ++static struct resource sh7751_io_resource = { ++ .name = "SH7751_IO", ++ .start = SH7751_PCI_IO_BASE, ++ .end = SH7751_PCI_IO_BASE + SH7751_PCI_IO_SIZE - 1, ++ .flags = IORESOURCE_IO ++}; ++ ++static struct resource sh7751_mem_resource = { ++ .name = "SH7751_mem", ++ .start = SH7751_PCI_MEMORY_BASE, ++ .end = SH7751_PCI_MEMORY_BASE + SH7751_PCI_MEM_SIZE - 1, ++ .flags = IORESOURCE_MEM ++}; ++ ++struct pci_channel board_pci_channels[] = { ++ { &sh4_pci_ops, &sh7751_io_resource, &sh7751_mem_resource, 0, 0xff }, ++ { NULL, NULL, NULL, 0, 0 }, ++}; ++EXPORT_SYMBOL(board_pci_channels); ++ ++static struct sh4_pci_address_map sh7751_pci_map = { ++ .window0 = { ++ .base = SH7751_CS2_BASE_ADDR, ++ .size = SH7751_MEM_REGION_SIZE*2, /* cs2 and cs3 */ ++ }, ++ ++ .window1 = { ++ .base = SH7751_CS2_BASE_ADDR, ++ .size = SH7751_MEM_REGION_SIZE*2, ++ }, ++ ++ .flags = SH4_PCIC_NO_RESET, ++}; ++ ++int __init pcibios_init_platform(void) ++{ ++ return sh7751_pcic_init(&sh7751_pci_map); ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-auto.c linux-2.6.17/arch/sh/drivers/pci/pci-auto.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-auto.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/pci-auto.c 2006-07-12 16:54:21.000000000 +0000 +@@ -45,11 +45,11 @@ + #include <linux/types.h> + #include <linux/pci.h> + +-#undef DEBUG +-#ifdef DEBUG ++#define DEBUG ++#ifdef DEBUG + #define DBG(x...) printk(x) + #else +-#define DBG(x...) ++#define DBG(x...) + #endif + + /* +@@ -102,7 +102,7 @@ + static u32 pciauto_lower_memspc; + static u32 pciauto_upper_memspc; + +-static void __init ++static void __init + pciauto_setup_bars(struct pci_channel *hose, + int top_bus, + int current_bus, +@@ -116,7 +116,6 @@ + int found_mem64 = 0; + + for (bar = PCI_BASE_ADDRESS_0; bar <= bar_limit; bar+=4) { +-#if !defined(CONFIG_SH_HS7751RVOIP) && !defined(CONFIG_SH_RTS7751R2D) + u32 bar_addr; + + /* Read the old BAR value */ +@@ -125,7 +124,6 @@ + pci_devfn, + bar, + &bar_addr); +-#endif + + /* Tickle the BAR and get the response */ + early_write_config_dword(hose, top_bus, +@@ -140,8 +138,7 @@ + bar, + &bar_response); + +-#if !defined(CONFIG_SH_HS7751RVOIP) && !defined(CONFIG_SH_RTS7751R2D) +- /* ++ /* + * Write the old BAR value back out, only update the BAR + * if we implicitly want resources to be updated, which + * is done by the generic code further down. -- PFM. +@@ -151,7 +148,6 @@ + pci_devfn, + bar, + bar_addr); +-#endif + + /* If BAR is not implemented go to the next BAR */ + if (!bar_response) +@@ -177,7 +173,7 @@ + PCI_BASE_ADDRESS_MEM_TYPE_64) + found_mem64 = 1; + +- addr_mask = PCI_BASE_ADDRESS_MEM_MASK; ++ addr_mask = PCI_BASE_ADDRESS_MEM_MASK; + upper_limit = &pciauto_upper_memspc; + lower_limit = &pciauto_lower_memspc; + DBG(" Mem"); +@@ -193,22 +189,22 @@ + if ((bar_value + bar_size) > *upper_limit) { + if (bar_response & PCI_BASE_ADDRESS_SPACE) { + if (io_resource_inuse->child) { +- io_resource_inuse = ++ io_resource_inuse = + io_resource_inuse->child; +- pciauto_lower_iospc = ++ pciauto_lower_iospc = + io_resource_inuse->start; +- pciauto_upper_iospc = ++ pciauto_upper_iospc = + io_resource_inuse->end + 1; + goto retry; + } + + } else { + if (mem_resource_inuse->child) { +- mem_resource_inuse = ++ mem_resource_inuse = + mem_resource_inuse->child; +- pciauto_lower_memspc = ++ pciauto_lower_memspc = + mem_resource_inuse->start; +- pciauto_upper_memspc = ++ pciauto_upper_memspc = + mem_resource_inuse->end + 1; + goto retry; + } +@@ -230,7 +226,7 @@ + * If we are a 64-bit decoder then increment to the + * upper 32 bits of the bar and force it to locate + * in the lower 4GB of memory. +- */ ++ */ + if (found_mem64) { + bar += 4; + early_write_config_dword(hose, top_bus, +@@ -362,7 +358,6 @@ + { + u32 temp; + +-#if !defined(CONFIG_SH_HS7751RVOIP) && !defined(CONFIG_SH_RTS7751R2D) + /* + * [jsun] we always bump up baselines a little, so that if there + * nothing behind P2P bridge, we don't wind up overlapping IO/MEM +@@ -370,7 +365,6 @@ + */ + pciauto_lower_memspc += 1; + pciauto_lower_iospc += 1; +-#endif + + /* + * Configure subordinate bus number. The PCI subsystem +@@ -396,11 +390,6 @@ + * configured by this routine to happily live behind a + * P2P bridge in a system. + */ +-#if defined(CONFIG_SH_HS7751RVOIP) || defined(CONFIG_SH_RTS7751R2D) +- pciauto_lower_memspc += 0x00400000; +- pciauto_lower_iospc += 0x00004000; +-#endif +- + /* Align memory and I/O to 4KB and 4 byte boundaries. */ + pciauto_lower_memspc = (pciauto_lower_memspc + (0x1000 - 1)) + & ~(0x1000 - 1); +@@ -433,12 +422,12 @@ + int devfn_stop = 0xff; + + sub_bus = current_bus; +- ++ + if (hose->first_devfn) + devfn_start = hose->first_devfn; + if (hose->last_devfn) + devfn_stop = hose->last_devfn; +- ++ + for (pci_devfn=devfn_start; pci_devfn<devfn_stop; pci_devfn++) { + + if (PCI_FUNC(pci_devfn) && !found_multi) +@@ -471,9 +460,6 @@ + if ((pci_class >> 16) == PCI_CLASS_BRIDGE_PCI) { + DBG(" Bridge: primary=%.2x, secondary=%.2x\n", + current_bus, sub_bus + 1); +-#if defined(CONFIG_SH_HS7751RVOIP) || defined(CONFIG_SH_RTS7751R2D) +- pciauto_setup_bars(hose, top_bus, current_bus, pci_devfn, PCI_BASE_ADDRESS_1); +-#endif + pciauto_prescan_setup_bridge(hose, top_bus, current_bus, + pci_devfn, sub_bus); + DBG("Scanning sub bus %.2x, I/O 0x%.8x, Mem 0x%.8x\n", +@@ -490,10 +476,10 @@ + DBG("PCI Autoconfig: Found CardBus bridge, device %d function %d\n", PCI_SLOT(pci_devfn), PCI_FUNC(pci_devfn)); + /* Place CardBus Socket/ExCA registers */ + pciauto_setup_bars(hose, top_bus, current_bus, pci_devfn, PCI_BASE_ADDRESS_0); +- ++ + pciauto_prescan_setup_cardbus_bridge(hose, top_bus, + current_bus, pci_devfn, sub_bus); +- ++ + DBG("Scanning sub bus %.2x, I/O 0x%.8x, Mem 0x%.8x\n", + sub_bus + 1, + pciauto_lower_iospc, pciauto_lower_memspc); +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh4.h linux-2.6.17/arch/sh/drivers/pci/pci-sh4.h +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh4.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/pci-sh4.h 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,180 @@ ++#ifndef __PCI_SH4_H ++#define __PCI_SH4_H ++ ++#ifdef CONFIG_CPU_SUBTYPE_SH7780 ++#include "pci-sh7780.h" ++#else ++#include "pci-sh7751.h" ++#endif ++ ++#include <asm/io.h> ++ ++/* startup values */ ++#define PCI_PROBE_BIOS 1 ++#define PCI_PROBE_CONF1 2 ++#define PCI_PROBE_CONF2 4 ++#define PCI_NO_SORT 0x100 ++#define PCI_BIOS_SORT 0x200 ++#define PCI_NO_CHECKS 0x400 ++#define PCI_ASSIGN_ROMS 0x1000 ++#define PCI_BIOS_IRQ_SCAN 0x2000 ++ ++#define SH4_PCICR 0x100 /* PCI Control Register */ ++ #define SH4_PCICR_PREFIX 0xA5000000 /* CR prefix for write */ ++ #define SH4_PCICR_FTO 0x00000400 /* TRDY/IRDY Enable */ ++ #define SH4_PCICR_TRSB 0x00000200 /* Target Read Single */ ++ #define SH4_PCICR_BSWP 0x00000100 /* Target Byte Swap */ ++ #define SH4_PCICR_PLUP 0x00000080 /* Enable PCI Pullup */ ++ #define SH4_PCICR_ARBM 0x00000040 /* PCI Arbitration Mode */ ++ #define SH4_PCICR_MD 0x00000030 /* MD9 and MD10 status */ ++ #define SH4_PCICR_SERR 0x00000008 /* SERR output assert */ ++ #define SH4_PCICR_INTA 0x00000004 /* INTA output assert */ ++ #define SH4_PCICR_PRST 0x00000002 /* PCI Reset Assert */ ++ #define SH4_PCICR_CFIN 0x00000001 /* Central Fun. Init Done */ ++#define SH4_PCILSR0 0x104 /* PCI Local Space Register0 */ ++#define SH4_PCILSR1 0x108 /* PCI Local Space Register1 */ ++#define SH4_PCILAR0 0x10C /* PCI Local Addr Register1 */ ++#define SH4_PCILAR1 0x110 /* PCI Local Addr Register1 */ ++#define SH4_PCIINT 0x114 /* PCI Interrupt Register */ ++ #define SH4_PCIINT_MLCK 0x00008000 /* Master Lock Error */ ++ #define SH4_PCIINT_TABT 0x00004000 /* Target Abort Error */ ++ #define SH4_PCIINT_TRET 0x00000200 /* Target Retry Error */ ++ #define SH4_PCIINT_MFDE 0x00000100 /* Master Func. Disable Error */ ++ #define SH4_PCIINT_PRTY 0x00000080 /* Address Parity Error */ ++ #define SH4_PCIINT_SERR 0x00000040 /* SERR Detection Error */ ++ #define SH4_PCIINT_TWDP 0x00000020 /* Tgt. Write Parity Error */ ++ #define SH4_PCIINT_TRDP 0x00000010 /* Tgt. Read Parity Err Det. */ ++ #define SH4_PCIINT_MTABT 0x00000008 /* Master-Tgt. Abort Error */ ++ #define SH4_PCIINT_MMABT 0x00000004 /* Master-Master Abort Error */ ++ #define SH4_PCIINT_MWPD 0x00000002 /* Master Write PERR Detect */ ++ #define SH4_PCIINT_MRPD 0x00000001 /* Master Read PERR Detect */ ++#define SH4_PCIINTM 0x118 /* PCI Interrupt Mask */ ++#define SH4_PCIALR 0x11C /* Error Address Register */ ++#define SH4_PCICLR 0x120 /* Error Command/Data */ ++ #define SH4_PCICLR_MPIO 0x80000000 ++ #define SH4_PCICLR_MDMA0 0x40000000 /* DMA0 Transfer Error */ ++ #define SH4_PCICLR_MDMA1 0x20000000 /* DMA1 Transfer Error */ ++ #define SH4_PCICLR_MDMA2 0x10000000 /* DMA2 Transfer Error */ ++ #define SH4_PCICLR_MDMA3 0x08000000 /* DMA3 Transfer Error */ ++ #define SH4_PCICLR_TGT 0x04000000 /* Target Transfer Error */ ++ #define SH4_PCICLR_CMDL 0x0000000F /* PCI Command at Error */ ++#define SH4_PCIAINT 0x130 /* Arbiter Interrupt Register */ ++ #define SH4_PCIAINT_MBKN 0x00002000 /* Master Broken Interrupt */ ++ #define SH4_PCIAINT_TBTO 0x00001000 /* Target Bus Time Out */ ++ #define SH4_PCIAINT_MBTO 0x00001000 /* Master Bus Time Out */ ++ #define SH4_PCIAINT_TABT 0x00000008 /* Target Abort */ ++ #define SH4_PCIAINT_MABT 0x00000004 /* Master Abort */ ++ #define SH4_PCIAINT_RDPE 0x00000002 /* Read Data Parity Error */ ++ #define SH4_PCIAINT_WDPE 0x00000001 /* Write Data Parity Error */ ++#define SH4_PCIAINTM 0x134 /* Arbiter Int. Mask Register */ ++#define SH4_PCIBMLR 0x138 /* Error Bus Master Register */ ++ #define SH4_PCIBMLR_REQ4 0x00000010 /* REQ4 bus master at error */ ++ #define SH4_PCIBMLR_REQ3 0x00000008 /* REQ3 bus master at error */ ++ #define SH4_PCIBMLR_REQ2 0x00000004 /* REQ2 bus master at error */ ++ #define SH4_PCIBMLR_REQ1 0x00000002 /* REQ1 bus master at error */ ++ #define SH4_PCIBMLR_REQ0 0x00000001 /* REQ0 bus master at error */ ++#define SH4_PCIDMABT 0x140 /* DMA Transfer Arb. Register */ ++ #define SH4_PCIDMABT_RRBN 0x00000001 /* DMA Arbitor Round-Robin */ ++#define SH4_PCIDPA0 0x180 /* DMA0 Transfer Addr. */ ++#define SH4_PCIDLA0 0x184 /* DMA0 Local Addr. */ ++#define SH4_PCIDTC0 0x188 /* DMA0 Transfer Cnt. */ ++#define SH4_PCIDCR0 0x18C /* DMA0 Control Register */ ++ #define SH4_PCIDCR_ALGN 0x00000600 /* DMA Alignment Mode */ ++ #define SH4_PCIDCR_MAST 0x00000100 /* DMA Termination Type */ ++ #define SH4_PCIDCR_INTM 0x00000080 /* DMA Interrupt Done Mask*/ ++ #define SH4_PCIDCR_INTS 0x00000040 /* DMA Interrupt Done Status */ ++ #define SH4_PCIDCR_LHLD 0x00000020 /* Local Address Control */ ++ #define SH4_PCIDCR_PHLD 0x00000010 /* PCI Address Control*/ ++ #define SH4_PCIDCR_IOSEL 0x00000008 /* PCI Address Space Type */ ++ #define SH4_PCIDCR_DIR 0x00000004 /* DMA Transfer Direction */ ++ #define SH4_PCIDCR_STOP 0x00000002 /* Force DMA Stop */ ++ #define SH4_PCIDCR_STRT 0x00000001 /* DMA Start */ ++#define SH4_PCIDPA1 0x190 /* DMA1 Transfer Addr. */ ++#define SH4_PCIDLA1 0x194 /* DMA1 Local Addr. */ ++#define SH4_PCIDTC1 0x198 /* DMA1 Transfer Cnt. */ ++#define SH4_PCIDCR1 0x19C /* DMA1 Control Register */ ++#define SH4_PCIDPA2 0x1A0 /* DMA2 Transfer Addr. */ ++#define SH4_PCIDLA2 0x1A4 /* DMA2 Local Addr. */ ++#define SH4_PCIDTC2 0x1A8 /* DMA2 Transfer Cnt. */ ++#define SH4_PCIDCR2 0x1AC /* DMA2 Control Register */ ++#define SH4_PCIDPA3 0x1B0 /* DMA3 Transfer Addr. */ ++#define SH4_PCIDLA3 0x1B4 /* DMA3 Local Addr. */ ++#define SH4_PCIDTC3 0x1B8 /* DMA3 Transfer Cnt. */ ++#define SH4_PCIDCR3 0x1BC /* DMA3 Control Register */ ++#define SH4_PCIPAR 0x1C0 /* PIO Address Register */ ++ #define SH4_PCIPAR_CFGEN 0x80000000 /* Configuration Enable */ ++ #define SH4_PCIPAR_BUSNO 0x00FF0000 /* Config. Bus Number */ ++ #define SH4_PCIPAR_DEVNO 0x0000FF00 /* Config. Device Number */ ++ #define SH4_PCIPAR_REGAD 0x000000FC /* Register Address Number */ ++#define SH4_PCIMBR 0x1C4 /* Memory Base Address */ ++ #define SH4_PCIMBR_MASK 0xFF000000 /* Memory Space Mask */ ++ #define SH4_PCIMBR_LOCK 0x00000001 /* Lock Memory Space */ ++#define SH4_PCIIOBR 0x1C8 /* I/O Base Address Register */ ++ #define SH4_PCIIOBR_MASK 0xFFFC0000 /* IO Space Mask */ ++ #define SH4_PCIIOBR_LOCK 0x00000001 /* Lock IO Space */ ++#define SH4_PCIPINT 0x1CC /* Power Mgmnt Int. Register */ ++ #define SH4_PCIPINT_D3 0x00000002 /* D3 Pwr Mgmt. Interrupt */ ++ #define SH4_PCIPINT_D0 0x00000001 /* D0 Pwr Mgmt. Interrupt */ ++#define SH4_PCIPINTM 0x1D0 /* Power Mgmnt Mask Register */ ++#define SH4_PCICLKR 0x1D4 /* Clock Ctrl. Register */ ++ #define SH4_PCICLKR_PCSTP 0x00000002 /* PCI Clock Stop */ ++ #define SH4_PCICLKR_BCSTP 0x00000001 /* BCLK Clock Stop */ ++/* For definitions of BCR, MCR see ... */ ++#define SH4_PCIBCR1 0x1E0 /* Memory BCR1 Register */ ++ #define SH4_PCIMBR0 SH4_PCIBCR1 ++#define SH4_PCIBCR2 0x1E4 /* Memory BCR2 Register */ ++ #define SH4_PCIMBMR0 SH4_PCIBCR2 ++#define SH4_PCIWCR1 0x1E8 /* Wait Control 1 Register */ ++#define SH4_PCIWCR2 0x1EC /* Wait Control 2 Register */ ++#define SH4_PCIWCR3 0x1F0 /* Wait Control 3 Register */ ++ #define SH4_PCIMBR2 SH4_PCIWCR3 ++#define SH4_PCIMCR 0x1F4 /* Memory Control Register */ ++#define SH4_PCIBCR3 0x1f8 /* Memory BCR3 Register */ ++#define SH4_PCIPCTR 0x200 /* Port Control Register */ ++ #define SH4_PCIPCTR_P2EN 0x000400000 /* Port 2 Enable */ ++ #define SH4_PCIPCTR_P1EN 0x000200000 /* Port 1 Enable */ ++ #define SH4_PCIPCTR_P0EN 0x000100000 /* Port 0 Enable */ ++ #define SH4_PCIPCTR_P2UP 0x000000020 /* Port2 Pull Up Enable */ ++ #define SH4_PCIPCTR_P2IO 0x000000010 /* Port2 Output Enable */ ++ #define SH4_PCIPCTR_P1UP 0x000000008 /* Port1 Pull Up Enable */ ++ #define SH4_PCIPCTR_P1IO 0x000000004 /* Port1 Output Enable */ ++ #define SH4_PCIPCTR_P0UP 0x000000002 /* Port0 Pull Up Enable */ ++ #define SH4_PCIPCTR_P0IO 0x000000001 /* Port0 Output Enable */ ++#define SH4_PCIPDTR 0x204 /* Port Data Register */ ++ #define SH4_PCIPDTR_PB5 0x000000020 /* Port 5 Enable */ ++ #define SH4_PCIPDTR_PB4 0x000000010 /* Port 4 Enable */ ++ #define SH4_PCIPDTR_PB3 0x000000008 /* Port 3 Enable */ ++ #define SH4_PCIPDTR_PB2 0x000000004 /* Port 2 Enable */ ++ #define SH4_PCIPDTR_PB1 0x000000002 /* Port 1 Enable */ ++ #define SH4_PCIPDTR_PB0 0x000000001 /* Port 0 Enable */ ++#define SH4_PCIPDR 0x220 /* Port IO Data Register */ ++ ++/* Flags */ ++#define SH4_PCIC_NO_RESET 0x0001 ++ ++/* arch/sh/kernel/drivers/pci/ops-sh4.c */ ++extern struct pci_ops sh4_pci_ops; ++int sh4_pci_check_direct(void); ++int pci_fixup_pcic(void); ++ ++struct sh4_pci_address_space { ++ unsigned long base; ++ unsigned long size; ++}; ++ ++struct sh4_pci_address_map { ++ struct sh4_pci_address_space window0; ++ struct sh4_pci_address_space window1; ++ unsigned long flags; ++}; ++ ++static inline void pci_write_reg(unsigned long val, unsigned long reg) ++{ ++ outl(val, PCI_REG(reg)); ++} ++ ++static inline unsigned long pci_read_reg(unsigned long reg) ++{ ++ return inl(PCI_REG(reg)); ++} ++#endif /* __PCI_SH4_H */ +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7751.c linux-2.6.17/arch/sh/drivers/pci/pci-sh7751.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7751.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/pci-sh7751.c 2006-07-12 16:54:21.000000000 +0000 +@@ -16,206 +16,44 @@ + #undef DEBUG + + #include <linux/config.h> +-#include <linux/types.h> +-#include <linux/kernel.h> + #include <linux/init.h> + #include <linux/pci.h> +-#include <linux/sched.h> +-#include <linux/ioport.h> ++#include <linux/types.h> + #include <linux/errno.h> +-#include <linux/irq.h> + #include <linux/delay.h> +- +-#include <asm/machvec.h> ++#include "pci-sh4.h" ++#include <asm/addrspace.h> + #include <asm/io.h> +-#include "pci-sh7751.h" +- +-static unsigned int pci_probe = PCI_PROBE_CONF1; +-extern int pci_fixup_pcic(void); +- +-void pcibios_fixup_irqs(void) __attribute__ ((weak)); +- +-/* +- * Direct access to PCI hardware... +- */ +- +-#define CONFIG_CMD(bus, devfn, where) (0x80000000 | (bus->number << 16) | (devfn << 8) | (where & ~3)) + + /* +- * Functions for accessing PCI configuration space with type 1 accesses ++ * Initialization. Try all known PCI access methods. Note that we support ++ * using both PCI BIOS and direct access: in such cases, we use I/O ports ++ * to access config space. ++ * ++ * Note that the platform specific initialization (BSC registers, and memory ++ * space mapping) will be called via the platform defined function ++ * pcibios_init_platform(). + */ +-static int sh7751_pci_read(struct pci_bus *bus, unsigned int devfn, +- int where, int size, u32 *val) +-{ +- unsigned long flags; +- u32 data; +- +- /* +- * PCIPDR may only be accessed as 32 bit words, +- * so we must do byte alignment by hand +- */ +- local_irq_save(flags); +- outl(CONFIG_CMD(bus,devfn,where), PCI_REG(SH7751_PCIPAR)); +- data = inl(PCI_REG(SH7751_PCIPDR)); +- local_irq_restore(flags); +- +- switch (size) { +- case 1: +- *val = (data >> ((where & 3) << 3)) & 0xff; +- break; +- case 2: +- *val = (data >> ((where & 2) << 3)) & 0xffff; +- break; +- case 4: +- *val = data; +- break; +- default: +- return PCIBIOS_FUNC_NOT_SUPPORTED; +- } +- +- return PCIBIOS_SUCCESSFUL; +-} +- +-/* +- * Since SH7751 only does 32bit access we'll have to do a read, +- * mask,write operation. +- * We'll allow an odd byte offset, though it should be illegal. +- */ +-static int sh7751_pci_write(struct pci_bus *bus, unsigned int devfn, +- int where, int size, u32 val) ++static int __init sh7751_pci_init(void) + { +- unsigned long flags; +- int shift; +- u32 data; +- +- local_irq_save(flags); +- outl(CONFIG_CMD(bus,devfn,where), PCI_REG(SH7751_PCIPAR)); +- data = inl(PCI_REG(SH7751_PCIPDR)); +- local_irq_restore(flags); +- +- switch (size) { +- case 1: +- shift = (where & 3) << 3; +- data &= ~(0xff << shift); +- data |= ((val & 0xff) << shift); +- break; +- case 2: +- shift = (where & 2) << 3; +- data &= ~(0xffff << shift); +- data |= ((val & 0xffff) << shift); +- break; +- case 4: +- data = val; +- break; +- default: +- return PCIBIOS_FUNC_NOT_SUPPORTED; +- } +- +- outl(data, PCI_REG(SH7751_PCIPDR)); +- +- return PCIBIOS_SUCCESSFUL; +-} +- +-#undef CONFIG_CMD +- +-struct pci_ops sh7751_pci_ops = { +- .read = sh7751_pci_read, +- .write = sh7751_pci_write, +-}; ++ unsigned int id; ++ int ret; + +-static int __init pci_check_direct(void) +-{ +- unsigned int tmp, id; ++ pr_debug("PCI: Starting intialization.\n"); + + /* check for SH7751/SH7751R hardware */ +- id = inl(SH7751_PCIREG_BASE+SH7751_PCICONF0); ++ id = pci_read_reg(SH7751_PCICONF0); + if (id != ((SH7751_DEVICE_ID << 16) | SH7751_VENDOR_ID) && + id != ((SH7751R_DEVICE_ID << 16) | SH7751_VENDOR_ID)) { + pr_debug("PCI: This is not an SH7751(R) (%x)\n", id); + return -ENODEV; + } + +- /* +- * Check if configuration works. +- */ +- if (pci_probe & PCI_PROBE_CONF1) { +- tmp = inl (PCI_REG(SH7751_PCIPAR)); +- outl (0x80000000, PCI_REG(SH7751_PCIPAR)); +- if (inl (PCI_REG(SH7751_PCIPAR)) == 0x80000000) { +- outl (tmp, PCI_REG(SH7751_PCIPAR)); +- printk(KERN_INFO "PCI: Using configuration type 1\n"); +- request_region(PCI_REG(SH7751_PCIPAR), 8, "PCI conf1"); +- return 0; +- } +- outl (tmp, PCI_REG(SH7751_PCIPAR)); +- } +- +- pr_debug("PCI: pci_check_direct failed\n"); +- return -EINVAL; +-} +- +-/***************************************************************************************/ +- +-/* +- * Handle bus scanning and fixups .... +- */ +- +-static void __init pci_fixup_ide_bases(struct pci_dev *d) +-{ +- int i; +- +- /* +- * PCI IDE controllers use non-standard I/O port decoding, respect it. +- */ +- if ((d->class >> 8) != PCI_CLASS_STORAGE_IDE) +- return; +- pr_debug("PCI: IDE base address fixup for %s\n", pci_name(d)); +- for(i=0; i<4; i++) { +- struct resource *r = &d->resource[i]; +- if ((r->start & ~0x80) == 0x374) { +- r->start |= 2; +- r->end = r->start; +- } +- } +-} +- +-DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases); +- +-/* +- * Called after each bus is probed, but before its children +- * are examined. +- */ +- +-void __init pcibios_fixup_bus(struct pci_bus *b) +-{ +- pci_read_bridge_bases(b); +-} +- +-/* +- * Initialization. Try all known PCI access methods. Note that we support +- * using both PCI BIOS and direct access: in such cases, we use I/O ports +- * to access config space. +- * +- * Note that the platform specific initialization (BSC registers, and memory +- * space mapping) will be called via the machine vectors (sh_mv.mv_pci_init()) if it +- * exitst and via the platform defined function pcibios_init_platform(). +- * See pci_bigsur.c for implementation; +- * +- * The BIOS version of the pci functions is not yet implemented but it is left +- * in for completeness. Currently an error will be genereated at compile time. +- */ +- +-static int __init sh7751_pci_init(void) +-{ +- int ret; +- +- pr_debug("PCI: Starting intialization.\n"); +- if ((ret = pci_check_direct()) != 0) ++ if ((ret = sh4_pci_check_direct()) != 0) + return ret; + + return pcibios_init_platform(); + } +- + subsys_initcall(sh7751_pci_init); + + static int __init __area_sdram_check(unsigned int area) +@@ -224,26 +62,26 @@ + + word = inl(SH7751_BCR1); + /* check BCR for SDRAM in area */ +- if(((word >> area) & 1) == 0) { ++ if (((word >> area) & 1) == 0) { + printk("PCI: Area %d is not configured for SDRAM. BCR1=0x%x\n", + area, word); + return 0; + } +- outl(word, PCI_REG(SH7751_PCIBCR1)); ++ pci_write_reg(word, SH4_PCIBCR1); + + word = (u16)inw(SH7751_BCR2); + /* check BCR2 for 32bit SDRAM interface*/ +- if(((word >> (area << 1)) & 0x3) != 0x3) { ++ if (((word >> (area << 1)) & 0x3) != 0x3) { + printk("PCI: Area %d is not 32 bit SDRAM. BCR2=0x%x\n", + area, word); + return 0; + } +- outl(word, PCI_REG(SH7751_PCIBCR2)); ++ pci_write_reg(word, SH4_PCIBCR2); + + return 1; + } + +-int __init sh7751_pcic_init(struct sh7751_pci_address_map *map) ++int __init sh7751_pcic_init(struct sh4_pci_address_map *map) + { + u32 reg; + u32 word; +@@ -252,86 +90,89 @@ + reg = inl(SH7751_BCR1); + reg |= 0x80000; + outl(reg, SH7751_BCR1); +- ++ + /* Turn the clocks back on (not done in reset)*/ +- outl(0, PCI_REG(SH7751_PCICLKR)); ++ pci_write_reg(0, SH4_PCICLKR); + /* Clear Powerdown IRQ's (not done in reset) */ +- word = SH7751_PCIPINT_D3 | SH7751_PCIPINT_D0; +- outl(word, PCI_REG(SH7751_PCIPINT)); ++ word = SH4_PCIPINT_D3 | SH4_PCIPINT_D0; ++ pci_write_reg(word, SH4_PCIPINT); + + /* + * This code is unused for some boards as it is done in the + * bootloader and doing it here means the MAC addresses loaded + * by the bootloader get lost. + */ +- if (!(map->flags & SH7751_PCIC_NO_RESET)) { ++ if (!(map->flags & SH4_PCIC_NO_RESET)) { + /* toggle PCI reset pin */ +- word = SH7751_PCICR_PREFIX | SH7751_PCICR_PRST; +- outl(word,PCI_REG(SH7751_PCICR)); ++ word = SH4_PCICR_PREFIX | SH4_PCICR_PRST; ++ pci_write_reg(word, SH4_PCICR); + /* Wait for a long time... not 1 sec. but long enough */ + mdelay(100); +- word = SH7751_PCICR_PREFIX; +- outl(word,PCI_REG(SH7751_PCICR)); ++ word = SH4_PCICR_PREFIX; ++ pci_write_reg(word, SH4_PCICR); + } +- ++ + /* set the command/status bits to: + * Wait Cycle Control + Parity Enable + Bus Master + + * Mem space enable + */ +- word = SH7751_PCICONF1_WCC | SH7751_PCICONF1_PER | ++ word = SH7751_PCICONF1_WCC | SH7751_PCICONF1_PER | + SH7751_PCICONF1_BUM | SH7751_PCICONF1_MES; +- outl(word, PCI_REG(SH7751_PCICONF1)); ++ pci_write_reg(word, SH7751_PCICONF1); + + /* define this host as the host bridge */ +- word = SH7751_PCI_HOST_BRIDGE << 24; +- outl(word, PCI_REG(SH7751_PCICONF2)); ++ word = PCI_BASE_CLASS_BRIDGE << 24; ++ pci_write_reg(word, SH7751_PCICONF2); + +- /* Set IO and Mem windows to local address +- * Make PCI and local address the same for easy 1 to 1 mapping ++ /* Set IO and Mem windows to local address ++ * Make PCI and local address the same for easy 1 to 1 mapping + * Window0 = map->window0.size @ non-cached area base = SDRAM +- * Window1 = map->window1.size @ cached area base = SDRAM ++ * Window1 = map->window1.size @ cached area base = SDRAM + */ + word = map->window0.size - 1; +- outl(word, PCI_REG(SH7751_PCILSR0)); ++ pci_write_reg(word, SH4_PCILSR0); + word = map->window1.size - 1; +- outl(word, PCI_REG(SH7751_PCILSR1)); ++ pci_write_reg(word, SH4_PCILSR1); + /* Set the values on window 0 PCI config registers */ + word = P2SEGADDR(map->window0.base); +- outl(word, PCI_REG(SH7751_PCILAR0)); +- outl(word, PCI_REG(SH7751_PCICONF5)); ++ pci_write_reg(word, SH4_PCILAR0); ++ pci_write_reg(word, SH7751_PCICONF5); + /* Set the values on window 1 PCI config registers */ + word = PHYSADDR(map->window1.base); +- outl(word, PCI_REG(SH7751_PCILAR1)); +- outl(word, PCI_REG(SH7751_PCICONF6)); ++ pci_write_reg(word, SH4_PCILAR1); ++ pci_write_reg(word, SH7751_PCICONF6); + +- /* Set the local 16MB PCI memory space window to ++ /* Set the local 16MB PCI memory space window to + * the lowest PCI mapped address + */ +- word = PCIBIOS_MIN_MEM & SH7751_PCIMBR_MASK; +- PCIDBG(2,"PCI: Setting upper bits of Memory window to 0x%x\n", word); +- outl(word , PCI_REG(SH7751_PCIMBR)); ++ word = PCIBIOS_MIN_MEM & SH4_PCIMBR_MASK; ++ pr_debug("PCI: Setting upper bits of Memory window to 0x%x\n", word); ++ pci_write_reg(word , SH4_PCIMBR); + + /* Map IO space into PCI IO window + * The IO window is 64K-PCIBIOS_MIN_IO in size +- * IO addresses will be translated to the ++ * IO addresses will be translated to the + * PCI IO window base address + */ +- PCIDBG(3,"PCI: Mapping IO address 0x%x - 0x%x to base 0x%x\n", PCIBIOS_MIN_IO, +- (64*1024), SH7751_PCI_IO_BASE+PCIBIOS_MIN_IO); ++ pr_debug("PCI: Mapping IO address 0x%x - 0x%x to base 0x%x\n", ++ PCIBIOS_MIN_IO, (64 << 10), ++ SH4_PCI_IO_BASE + PCIBIOS_MIN_IO); + +- /* ++ /* + * XXX: For now, leave this board-specific. In the event we have other + * boards that need to do similar work, this can be wrapped. + */ + #ifdef CONFIG_SH_BIGSUR +- bigsur_port_map(PCIBIOS_MIN_IO, (64*1024), SH7751_PCI_IO_BASE+PCIBIOS_MIN_IO,0); ++ bigsur_port_map(PCIBIOS_MIN_IO, (64 << 10), ++ SH4_PCI_IO_BASE + PCIBIOS_MIN_IO, 0); + #endif + +- /* Make sure the MSB's of IO window are set to access PCI space correctly */ +- word = PCIBIOS_MIN_IO & SH7751_PCIIOBR_MASK; +- PCIDBG(2,"PCI: Setting upper bits of IO window to 0x%x\n", word); +- outl(word, PCI_REG(SH7751_PCIIOBR)); +- ++ /* Make sure the MSB's of IO window are set to access PCI space ++ * correctly */ ++ word = PCIBIOS_MIN_IO & SH4_PCIIOBR_MASK; ++ pr_debug("PCI: Setting upper bits of IO window to 0x%x\n", word); ++ pci_write_reg(word, SH4_PCIIOBR); ++ + /* Set PCI WCRx, BCRx's, copy from BSC locations */ + + /* check BCR for SDRAM in specified area */ +@@ -344,19 +185,19 @@ + case SH7751_CS5_BASE_ADDR: word = __area_sdram_check(5); break; + case SH7751_CS6_BASE_ADDR: word = __area_sdram_check(6); break; + } +- ++ + if (!word) + return 0; + + /* configure the wait control registers */ + word = inl(SH7751_WCR1); +- outl(word, PCI_REG(SH7751_PCIWCR1)); ++ pci_write_reg(word, SH4_PCIWCR1); + word = inl(SH7751_WCR2); +- outl(word, PCI_REG(SH7751_PCIWCR2)); ++ pci_write_reg(word, SH4_PCIWCR2); + word = inl(SH7751_WCR3); +- outl(word, PCI_REG(SH7751_PCIWCR3)); ++ pci_write_reg(word, SH4_PCIWCR3); + word = inl(SH7751_MCR); +- outl(word, PCI_REG(SH7751_PCIMCR)); ++ pci_write_reg(word, SH4_PCIMCR); + + /* NOTE: I'm ignoring the PCI error IRQs for now.. + * TODO: add support for the internal error interrupts and +@@ -369,49 +210,8 @@ + + /* SH7751 init done, set central function init complete */ + /* use round robin mode to stop a device starving/overruning */ +- word = SH7751_PCICR_PREFIX | SH7751_PCICR_CFIN | SH7751_PCICR_ARBM; +- outl(word,PCI_REG(SH7751_PCICR)); ++ word = SH4_PCICR_PREFIX | SH4_PCICR_CFIN | SH4_PCICR_ARBM; ++ pci_write_reg(word, SH4_PCICR); + + return 1; + } +- +-char * __init pcibios_setup(char *str) +-{ +- if (!strcmp(str, "off")) { +- pci_probe = 0; +- return NULL; +- } +- +- return str; +-} +- +-/* +- * IRQ functions +- */ +-static u8 __init sh7751_no_swizzle(struct pci_dev *dev, u8 *pin) +-{ +- /* no swizzling */ +- return PCI_SLOT(dev->devfn); +-} +- +-static int sh7751_pci_lookup_irq(struct pci_dev *dev, u8 slot, u8 pin) +-{ +- int irq = -1; +- +- /* now lookup the actual IRQ on a platform specific basis (pci-'platform'.c) */ +- irq = pcibios_map_platform_irq(slot,pin); +- if( irq < 0 ) { +- pr_debug("PCI: Error mapping IRQ on device %s\n", pci_name(dev)); +- return irq; +- } +- +- pr_debug("Setting IRQ for slot %s to %d\n", pci_name(dev), irq); +- +- return irq; +-} +- +-void __init pcibios_fixup_irqs(void) +-{ +- pci_fixup_irqs(sh7751_no_swizzle, sh7751_pci_lookup_irq); +-} +- +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7751.h linux-2.6.17/arch/sh/drivers/pci/pci-sh7751.h +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7751.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/pci-sh7751.h 2006-07-12 16:54:21.000000000 +0000 +@@ -3,7 +3,7 @@ + * + * Dustin McIntire (dustin@sensoria.com) (c) 2001 + * Paul Mundt (lethal@linux-sh.org) (c) 2003 +- * ++ * + * May be copied or modified under the terms of the GNU General Public + * License. See linux/COPYING for more information. + * +@@ -12,28 +12,6 @@ + #ifndef _PCI_SH7751_H_ + #define _PCI_SH7751_H_ + +-#include <linux/pci.h> +- +-/* set debug level 4=verbose...1=terse */ +-//#define DEBUG_PCI 3 +-#undef DEBUG_PCI +- +-#ifdef DEBUG_PCI +-#define PCIDBG(n, x...) { if(DEBUG_PCI>=n) printk(x); } +-#else +-#define PCIDBG(n, x...) +-#endif +- +-/* startup values */ +-#define PCI_PROBE_BIOS 1 +-#define PCI_PROBE_CONF1 2 +-#define PCI_PROBE_CONF2 4 +-#define PCI_NO_SORT 0x100 +-#define PCI_BIOS_SORT 0x200 +-#define PCI_NO_CHECKS 0x400 +-#define PCI_ASSIGN_ROMS 0x1000 +-#define PCI_BIOS_IRQ_SCAN 0x2000 +- + /* Platform Specific Values */ + #define SH7751_VENDOR_ID 0x1054 + #define SH7751_DEVICE_ID 0x3505 +@@ -128,131 +106,6 @@ + #define SH7751_PCICONF17_PMEN 0x00010000 /* PME Enable */ + #define SH7751_PCICONF17_PWST 0x00000003 /* Power State */ + /* SH7715 Internal PCI Registers */ +-#define SH7751_PCICR 0x100 /* PCI Control Register */ +- #define SH7751_PCICR_PREFIX 0xA5000000 /* CR prefix for write */ +- #define SH7751_PCICR_TRSB 0x00000200 /* Target Read Single */ +- #define SH7751_PCICR_BSWP 0x00000100 /* Target Byte Swap */ +- #define SH7751_PCICR_PLUP 0x00000080 /* Enable PCI Pullup */ +- #define SH7751_PCICR_ARBM 0x00000040 /* PCI Arbitration Mode */ +- #define SH7751_PCICR_MD 0x00000030 /* MD9 and MD10 status */ +- #define SH7751_PCICR_SERR 0x00000008 /* SERR output assert */ +- #define SH7751_PCICR_INTA 0x00000004 /* INTA output assert */ +- #define SH7751_PCICR_PRST 0x00000002 /* PCI Reset Assert */ +- #define SH7751_PCICR_CFIN 0x00000001 /* Central Fun. Init Done */ +-#define SH7751_PCILSR0 0x104 /* PCI Local Space Register0 */ +-#define SH7751_PCILSR1 0x108 /* PCI Local Space Register1 */ +-#define SH7751_PCILAR0 0x10C /* PCI Local Address Register1 */ +-#define SH7751_PCILAR1 0x110 /* PCI Local Address Register1 */ +-#define SH7751_PCIINT 0x114 /* PCI Interrupt Register */ +- #define SH7751_PCIINT_MLCK 0x00008000 /* Master Lock Error */ +- #define SH7751_PCIINT_TABT 0x00004000 /* Target Abort Error */ +- #define SH7751_PCIINT_TRET 0x00000200 /* Target Retry Error */ +- #define SH7751_PCIINT_MFDE 0x00000100 /* Master Func. Disable Error */ +- #define SH7751_PCIINT_PRTY 0x00000080 /* Address Parity Error */ +- #define SH7751_PCIINT_SERR 0x00000040 /* SERR Detection Error */ +- #define SH7751_PCIINT_TWDP 0x00000020 /* Tgt. Write Parity Error */ +- #define SH7751_PCIINT_TRDP 0x00000010 /* Tgt. Read Parity Error Det. */ +- #define SH7751_PCIINT_MTABT 0x00000008 /* Master-Tgt. Abort Error */ +- #define SH7751_PCIINT_MMABT 0x00000004 /* Master-Master Abort Error */ +- #define SH7751_PCIINT_MWPD 0x00000002 /* Master Write PERR Detect */ +- #define SH7751_PCIINT_MRPD 0x00000002 /* Master Read PERR Detect */ +-#define SH7751_PCIINTM 0x118 /* PCI Interrupt Mask Register */ +-#define SH7751_PCIALR 0x11C /* Error Address Register */ +-#define SH7751_PCICLR 0x120 /* Error Command/Data Register */ +- #define SH7751_PCICLR_MPIO 0x80000000 /* Error Command/Data Register */ +- #define SH7751_PCICLR_MDMA0 0x40000000 /* DMA0 Transfer Error */ +- #define SH7751_PCICLR_MDMA1 0x20000000 /* DMA1 Transfer Error */ +- #define SH7751_PCICLR_MDMA2 0x10000000 /* DMA2 Transfer Error */ +- #define SH7751_PCICLR_MDMA3 0x08000000 /* DMA3 Transfer Error */ +- #define SH7751_PCICLR_TGT 0x04000000 /* Target Transfer Error */ +- #define SH7751_PCICLR_CMDL 0x0000000F /* PCI Command at Error */ +-#define SH7751_PCIAINT 0x130 /* Arbiter Interrupt Register */ +- #define SH7751_PCIAINT_MBKN 0x00002000 /* Master Broken Interrupt */ +- #define SH7751_PCIAINT_TBTO 0x00001000 /* Target Bus Time Out */ +- #define SH7751_PCIAINT_MBTO 0x00001000 /* Master Bus Time Out */ +- #define SH7751_PCIAINT_TABT 0x00000008 /* Target Abort */ +- #define SH7751_PCIAINT_MABT 0x00000004 /* Master Abort */ +- #define SH7751_PCIAINT_RDPE 0x00000002 /* Read Data Parity Error */ +- #define SH7751_PCIAINT_WDPE 0x00000002 /* Write Data Parity Error */ +-#define SH7751_PCIAINTM 0x134 /* Arbiter Int. Mask Register */ +-#define SH7751_PCIBMLR 0x138 /* Error Bus Master Register */ +- #define SH7751_PCIBMLR_REQ4 0x00000010 /* REQ4 bus master at error */ +- #define SH7751_PCIBMLR_REQ3 0x00000008 /* REQ3 bus master at error */ +- #define SH7751_PCIBMLR_REQ2 0x00000004 /* REQ2 bus master at error */ +- #define SH7751_PCIBMLR_REQ1 0x00000002 /* REQ1 bus master at error */ +- #define SH7751_PCIBMLR_REQ0 0x00000001 /* REQ0 bus master at error */ +-#define SH7751_PCIDMABT 0x140 /* DMA Transfer Arb. Register */ +- #define SH7751_PCIDMABT_RRBN 0x00000001 /* DMA Arbitor Round-Robin */ +-#define SH7751_PCIDPA0 0x180 /* DMA0 Transfer Addr. Register */ +-#define SH7751_PCIDLA0 0x184 /* DMA0 Local Addr. Register */ +-#define SH7751_PCIDTC0 0x188 /* DMA0 Transfer Cnt. Register */ +-#define SH7751_PCIDCR0 0x18C /* DMA0 Control Register */ +- #define SH7751_PCIDCR_ALGN 0x00000600 /* DMA Alignment Mode */ +- #define SH7751_PCIDCR_MAST 0x00000100 /* DMA Termination Type */ +- #define SH7751_PCIDCR_INTM 0x00000080 /* DMA Interrupt Done Mask*/ +- #define SH7751_PCIDCR_INTS 0x00000040 /* DMA Interrupt Done Status */ +- #define SH7751_PCIDCR_LHLD 0x00000020 /* Local Address Control */ +- #define SH7751_PCIDCR_PHLD 0x00000010 /* PCI Address Control*/ +- #define SH7751_PCIDCR_IOSEL 0x00000008 /* PCI Address Space Type */ +- #define SH7751_PCIDCR_DIR 0x00000004 /* DMA Transfer Direction */ +- #define SH7751_PCIDCR_STOP 0x00000002 /* Force DMA Stop */ +- #define SH7751_PCIDCR_STRT 0x00000001 /* DMA Start */ +-#define SH7751_PCIDPA1 0x190 /* DMA1 Transfer Addr. Register */ +-#define SH7751_PCIDLA1 0x194 /* DMA1 Local Addr. Register */ +-#define SH7751_PCIDTC1 0x198 /* DMA1 Transfer Cnt. Register */ +-#define SH7751_PCIDCR1 0x19C /* DMA1 Control Register */ +-#define SH7751_PCIDPA2 0x1A0 /* DMA2 Transfer Addr. Register */ +-#define SH7751_PCIDLA2 0x1A4 /* DMA2 Local Addr. Register */ +-#define SH7751_PCIDTC2 0x1A8 /* DMA2 Transfer Cnt. Register */ +-#define SH7751_PCIDCR2 0x1AC /* DMA2 Control Register */ +-#define SH7751_PCIDPA3 0x1B0 /* DMA3 Transfer Addr. Register */ +-#define SH7751_PCIDLA3 0x1B4 /* DMA3 Local Addr. Register */ +-#define SH7751_PCIDTC3 0x1B8 /* DMA3 Transfer Cnt. Register */ +-#define SH7751_PCIDCR3 0x1BC /* DMA3 Control Register */ +-#define SH7751_PCIPAR 0x1C0 /* PIO Address Register */ +- #define SH7751_PCIPAR_CFGEN 0x80000000 /* Configuration Enable */ +- #define SH7751_PCIPAR_BUSNO 0x00FF0000 /* Config. Bus Number */ +- #define SH7751_PCIPAR_DEVNO 0x0000FF00 /* Config. Device Number */ +- #define SH7751_PCIPAR_REGAD 0x000000FC /* Register Address Number */ +-#define SH7751_PCIMBR 0x1C4 /* Memory Base Address Register */ +- #define SH7751_PCIMBR_MASK 0xFF000000 /* Memory Space Mask */ +- #define SH7751_PCIMBR_LOCK 0x00000001 /* Lock Memory Space */ +-#define SH7751_PCIIOBR 0x1C8 /* I/O Base Address Register */ +- #define SH7751_PCIIOBR_MASK 0xFFFC0000 /* IO Space Mask */ +- #define SH7751_PCIIOBR_LOCK 0x00000001 /* Lock IO Space */ +-#define SH7751_PCIPINT 0x1CC /* Power Mgmnt Int. Register */ +- #define SH7751_PCIPINT_D3 0x00000002 /* D3 Pwr Mgmt. Interrupt */ +- #define SH7751_PCIPINT_D0 0x00000001 /* D0 Pwr Mgmt. Interrupt */ +-#define SH7751_PCIPINTM 0x1D0 /* Power Mgmnt Mask Register */ +-#define SH7751_PCICLKR 0x1D4 /* Clock Ctrl. Register */ +- #define SH7751_PCICLKR_PCSTP 0x00000002 /* PCI Clock Stop */ +- #define SH7751_PCICLKR_BCSTP 0x00000002 /* BCLK Clock Stop */ +-/* For definitions of BCR, MCR see ... */ +-#define SH7751_PCIBCR1 0x1E0 /* Memory BCR1 Register */ +-#define SH7751_PCIBCR2 0x1E4 /* Memory BCR2 Register */ +-#define SH7751_PCIWCR1 0x1E8 /* Wait Control 1 Register */ +-#define SH7751_PCIWCR2 0x1EC /* Wait Control 2 Register */ +-#define SH7751_PCIWCR3 0x1F0 /* Wait Control 3 Register */ +-#define SH7751_PCIMCR 0x1F4 /* Memory Control Register */ +-#define SH7751_PCIBCR3 0x1f8 /* Memory BCR3 Register */ +-#define SH7751_PCIPCTR 0x200 /* Port Control Register */ +- #define SH7751_PCIPCTR_P2EN 0x000400000 /* Port 2 Enable */ +- #define SH7751_PCIPCTR_P1EN 0x000200000 /* Port 1 Enable */ +- #define SH7751_PCIPCTR_P0EN 0x000100000 /* Port 0 Enable */ +- #define SH7751_PCIPCTR_P2UP 0x000000020 /* Port2 Pull Up Enable */ +- #define SH7751_PCIPCTR_P2IO 0x000000010 /* Port2 Output Enable */ +- #define SH7751_PCIPCTR_P1UP 0x000000008 /* Port1 Pull Up Enable */ +- #define SH7751_PCIPCTR_P1IO 0x000000004 /* Port1 Output Enable */ +- #define SH7751_PCIPCTR_P0UP 0x000000002 /* Port0 Pull Up Enable */ +- #define SH7751_PCIPCTR_P0IO 0x000000001 /* Port0 Output Enable */ +-#define SH7751_PCIPDTR 0x204 /* Port Data Register */ +- #define SH7751_PCIPDTR_PB5 0x000000020 /* Port 5 Enable */ +- #define SH7751_PCIPDTR_PB4 0x000000010 /* Port 4 Enable */ +- #define SH7751_PCIPDTR_PB3 0x000000008 /* Port 3 Enable */ +- #define SH7751_PCIPDTR_PB2 0x000000004 /* Port 2 Enable */ +- #define SH7751_PCIPDTR_PB1 0x000000002 /* Port 1 Enable */ +- #define SH7751_PCIPDTR_PB0 0x000000001 /* Port 0 Enable */ +-#define SH7751_PCIPDR 0x220 /* Port IO Data Register */ + + /* Memory Control Registers */ + #define SH7751_BCR1 0xFF800000 /* Memory BCR1 Register */ +@@ -274,30 +127,9 @@ + #define SH7751_CS5_BASE_ADDR (SH7751_CS4_BASE_ADDR + SH7751_MEM_REGION_SIZE) + #define SH7751_CS6_BASE_ADDR (SH7751_CS5_BASE_ADDR + SH7751_MEM_REGION_SIZE) + +-/* General PCI values */ +-#define SH7751_PCI_HOST_BRIDGE 0x6 +- +-/* Flags */ +-#define SH7751_PCIC_NO_RESET 0x0001 +- +-/* External functions defined per platform i.e. Big Sur, SE... (these could be routed +- * through the machine vectors... */ +-extern int pcibios_init_platform(void); +-extern int pcibios_map_platform_irq(u8 slot, u8 pin); +- +-struct sh7751_pci_address_space { +- unsigned long base; +- unsigned long size; +-}; +- +-struct sh7751_pci_address_map { +- struct sh7751_pci_address_space window0; +- struct sh7751_pci_address_space window1; +- unsigned long flags; +-}; ++struct sh4_pci_address_map; + + /* arch/sh/drivers/pci/pci-sh7751.c */ +-extern int sh7751_pcic_init(struct sh7751_pci_address_map *map); ++int sh7751_pcic_init(struct sh4_pci_address_map *map); + + #endif /* _PCI_SH7751_H_ */ +- +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7780.c linux-2.6.17/arch/sh/drivers/pci/pci-sh7780.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7780.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/pci-sh7780.c 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,139 @@ ++/* ++ * Low-Level PCI Support for the SH7780 ++ * ++ * Dustin McIntire (dustin@sensoria.com) ++ * Derived from arch/i386/kernel/pci-*.c which bore the message: ++ * (c) 1999--2000 Martin Mares <mj@ucw.cz> ++ * ++ * Ported to the new API by Paul Mundt <lethal@linux-sh.org> ++ * With cleanup by Paul van Gool <pvangool@mimotech.com> ++ * ++ * May be copied or modified under the terms of the GNU General Public ++ * License. See linux/COPYING for more information. ++ * ++ */ ++ ++#undef DEBUG ++ ++#include <linux/config.h> ++#include <linux/types.h> ++#include <linux/kernel.h> ++#include <linux/init.h> ++#include <linux/pci.h> ++#include <linux/errno.h> ++#include <linux/delay.h> ++#include "pci-sh4.h" ++ ++/* ++ * Initialization. Try all known PCI access methods. Note that we support ++ * using both PCI BIOS and direct access: in such cases, we use I/O ports ++ * to access config space. ++ * ++ * Note that the platform specific initialization (BSC registers, and memory ++ * space mapping) will be called via the platform defined function ++ * pcibios_init_platform(). ++ */ ++static int __init sh7780_pci_init(void) ++{ ++ unsigned int id; ++ int ret; ++ ++ pr_debug("PCI: Starting intialization.\n"); ++ ++ outl(0x00000001, SH7780_PCI_VCR2); /* Enable PCIC */ ++ ++ /* check for SH7780/SH7780R hardware */ ++ id = pci_read_reg(SH7780_PCIVID); ++ if ((id != ((SH7780_DEVICE_ID << 16) | SH7780_VENDOR_ID)) && ++ (id != ((SH7781_DEVICE_ID << 16) | SH7780_VENDOR_ID))) { ++ printk(KERN_ERR "PCI: This is not an SH7780 (%x)\n", id); ++ return -ENODEV; ++ } ++ ++ /* Setup the INTC */ ++ ctrl_outl(0x00200000, INTC_ICR0); /* INTC SH-4 Mode */ ++ ctrl_outl(0x00078000, INTC_INT2MSKCR); /* enable PCIINTA - PCIINTD */ ++ ctrl_outl(0x40000000, INTC_INTMSK1); /* disable IRL4-7 Interrupt */ ++ ctrl_outl(0x0000fffe, INTC_INTMSK2); /* disable IRL4-7 Interrupt */ ++ ctrl_outl(0x80000000, INTC_INTMSKCLR1); /* enable IRL0-3 Interrupt */ ++ ctrl_outl(0xfffe0000, INTC_INTMSKCLR2); /* enable IRL0-3 Interrupt */ ++ ++ if ((ret = sh4_pci_check_direct()) != 0) ++ return ret; ++ ++ return pcibios_init_platform(); ++} ++core_initcall(sh7780_pci_init); ++ ++int __init sh7780_pcic_init(struct sh4_pci_address_map *map) ++{ ++ u32 word; ++ ++ /* ++ * This code is unused for some boards as it is done in the ++ * bootloader and doing it here means the MAC addresses loaded ++ * by the bootloader get lost. ++ */ ++ if (!(map->flags & SH4_PCIC_NO_RESET)) { ++ /* toggle PCI reset pin */ ++ word = SH4_PCICR_PREFIX | SH4_PCICR_PRST; ++ pci_write_reg(word, SH4_PCICR); ++ /* Wait for a long time... not 1 sec. but long enough */ ++ mdelay(100); ++ word = SH4_PCICR_PREFIX; ++ pci_write_reg(word, SH4_PCICR); ++ } ++ ++ /* set the command/status bits to: ++ * Wait Cycle Control + Parity Enable + Bus Master + ++ * Mem space enable ++ */ ++ pci_write_reg(0x00000046, SH7780_PCICMD); ++ ++ /* define this host as the host bridge */ ++ word = PCI_BASE_CLASS_BRIDGE << 24; ++ pci_write_reg(word, SH7780_PCIRID); ++ ++ /* Set IO and Mem windows to local address ++ * Make PCI and local address the same for easy 1 to 1 mapping ++ * Window0 = map->window0.size @ non-cached area base = SDRAM ++ * Window1 = map->window1.size @ cached area base = SDRAM ++ */ ++ word = ((map->window0.size - 1) & 0x1ff00001) | 0x01; ++ pci_write_reg(0x07f00001, SH4_PCILSR0); ++ word = ((map->window1.size - 1) & 0x1ff00001) | 0x01; ++ pci_write_reg(0x00000001, SH4_PCILSR1); ++ /* Set the values on window 0 PCI config registers */ ++ word = P2SEGADDR(map->window0.base); ++ pci_write_reg(0xa8000000, SH4_PCILAR0); ++ pci_write_reg(0x08000000, SH7780_PCIMBAR0); ++ /* Set the values on window 1 PCI config registers */ ++ word = P2SEGADDR(map->window1.base); ++ pci_write_reg(0x00000000, SH4_PCILAR1); ++ pci_write_reg(0x00000000, SH7780_PCIMBAR1); ++ ++ /* Map IO space into PCI IO window ++ * The IO window is 64K-PCIBIOS_MIN_IO in size ++ * IO addresses will be translated to the ++ * PCI IO window base address ++ */ ++ pr_debug("PCI: Mapping IO address 0x%x - 0x%x to base 0x%x\n", ++ PCIBIOS_MIN_IO, (64 << 10), ++ SH7780_PCI_IO_BASE + PCIBIOS_MIN_IO); ++ ++ /* NOTE: I'm ignoring the PCI error IRQs for now.. ++ * TODO: add support for the internal error interrupts and ++ * DMA interrupts... ++ */ ++ ++#ifdef CONFIG_SH_R7780RP ++ pci_fixup_pcic(); ++#endif ++ ++ /* SH7780 init done, set central function init complete */ ++ /* use round robin mode to stop a device starving/overruning */ ++ word = SH4_PCICR_PREFIX | SH4_PCICR_CFIN | SH4_PCICR_FTO; ++ pci_write_reg(word, SH4_PCICR); ++ ++ return 1; ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7780.h linux-2.6.17/arch/sh/drivers/pci/pci-sh7780.h +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-sh7780.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/pci-sh7780.h 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,94 @@ ++/* ++ * Low-Level PCI Support for SH7780 targets ++ * ++ * Dustin McIntire (dustin@sensoria.com) (c) 2001 ++ * Paul Mundt (lethal@linux-sh.org) (c) 2003 ++ * ++ * May be copied or modified under the terms of the GNU General Public ++ * License. See linux/COPYING for more information. ++ * ++ */ ++ ++#ifndef _PCI_SH7780_H_ ++#define _PCI_SH7780_H_ ++ ++/* Platform Specific Values */ ++#define SH7780_VENDOR_ID 0x1912 ++#define SH7780_DEVICE_ID 0x0002 ++#define SH7781_DEVICE_ID 0x0001 ++ ++/* SH7780 Control Registers */ ++#define SH7780_PCI_VCR0 0xFE000000 ++#define SH7780_PCI_VCR1 0xFE000004 ++#define SH7780_PCI_VCR2 0xFE000008 ++ ++/* SH7780 Specific Values */ ++#define SH7780_PCI_CONFIG_BASE 0xFD000000 /* Config space base addr */ ++#define SH7780_PCI_CONFIG_SIZE 0x01000000 /* Config space size */ ++ ++#define SH7780_PCI_MEMORY_BASE 0xFD000000 /* Memory space base addr */ ++#define SH7780_PCI_MEM_SIZE 0x01000000 /* Size of Memory window */ ++ ++#define SH7780_PCI_IO_BASE 0xFE400000 /* IO space base address */ ++#define SH7780_PCI_IO_SIZE 0x00400000 /* Size of IO window */ ++ ++#define SH7780_PCIREG_BASE 0xFE040000 /* PCI regs base address */ ++#define PCI_REG(n) (SH7780_PCIREG_BASE+n) ++ ++/* SH7780 PCI Config Registers */ ++#define SH7780_PCIVID 0x000 /* Vendor ID */ ++#define SH7780_PCIDID 0x002 /* Device ID */ ++#define SH7780_PCICMD 0x004 /* Command */ ++#define SH7780_PCISTATUS 0x006 /* Status */ ++#define SH7780_PCIRID 0x008 /* Revision ID */ ++#define SH7780_PCIPIF 0x009 /* Program Interface */ ++#define SH7780_PCISUB 0x00a /* Sub class code */ ++#define SH7780_PCIBCC 0x00b /* Base class code */ ++#define SH7780_PCICLS 0x00c /* Cache line size */ ++#define SH7780_PCILTM 0x00d /* latency timer */ ++#define SH7780_PCIHDR 0x00e /* Header type */ ++#define SH7780_PCIBIST 0x00f /* BIST */ ++#define SH7780_PCIIBAR 0x010 /* IO Base address */ ++#define SH7780_PCIMBAR0 0x014 /* Memory base address0 */ ++#define SH7780_PCIMBAR1 0x018 /* Memory base address1 */ ++#define SH7780_PCISVID 0x02c /* Sub system vendor ID */ ++#define SH7780_PCISID 0x02e /* Sub system ID */ ++#define SH7780_PCICP 0x034 ++#define SH7780_PCIINTLINE 0x03c /* Interrupt line */ ++#define SH7780_PCIINTPIN 0x03d /* Interrupt pin */ ++#define SH7780_PCIMINGNT 0x03e /* Minumum grand */ ++#define SH7780_PCIMAXLAT 0x03f /* Maxmum latency */ ++#define SH7780_PCICID 0x040 ++#define SH7780_PCINIP 0x041 ++#define SH7780_PCIPMC 0x042 ++#define SH7780_PCIPMCSR 0x044 ++#define SH7780_PCIPMCSR_BSE 0x046 ++#define SH7780_PCICDD 0x047 ++ ++#define SH7780_PCIMBR0 0x1E0 ++#define SH7780_PCIMBMR0 0x1E4 ++#define SH7780_PCIMBR2 0x1F0 ++#define SH7780_PCIMBMR2 0x1F4 ++#define SH7780_PCIIOBR 0x1F8 ++#define SH7780_PCIIOBMR 0x1FC ++#define SH7780_PCICSCR0 0x210 /* Cache Snoop1 Cnt. Register */ ++#define SH7780_PCICSCR1 0x214 /* Cache Snoop2 Cnt. Register */ ++#define SH7780_PCICSAR0 0x218 /* Cache Snoop1 Addr. Register */ ++#define SH7780_PCICSAR1 0x21C /* Cache Snoop2 Addr. Register */ ++ ++/* General Memory Config Addresses */ ++#define SH7780_CS0_BASE_ADDR 0x0 ++#define SH7780_MEM_REGION_SIZE 0x04000000 ++#define SH7780_CS1_BASE_ADDR (SH7780_CS0_BASE_ADDR + SH7780_MEM_REGION_SIZE) ++#define SH7780_CS2_BASE_ADDR (SH7780_CS1_BASE_ADDR + SH7780_MEM_REGION_SIZE) ++#define SH7780_CS3_BASE_ADDR (SH7780_CS2_BASE_ADDR + SH7780_MEM_REGION_SIZE) ++#define SH7780_CS4_BASE_ADDR (SH7780_CS3_BASE_ADDR + SH7780_MEM_REGION_SIZE) ++#define SH7780_CS5_BASE_ADDR (SH7780_CS4_BASE_ADDR + SH7780_MEM_REGION_SIZE) ++#define SH7780_CS6_BASE_ADDR (SH7780_CS5_BASE_ADDR + SH7780_MEM_REGION_SIZE) ++ ++struct sh4_pci_address_map; ++ ++/* arch/sh/drivers/pci/pci-sh7780.c */ ++int sh7780_pcic_init(struct sh4_pci_address_map *map); ++ ++#endif /* _PCI_SH7780_H_ */ +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-st40.c linux-2.6.17/arch/sh/drivers/pci/pci-st40.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci-st40.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/pci-st40.c 2006-07-12 16:54:21.000000000 +0000 +@@ -71,12 +71,6 @@ + static void pci_set_rbar_region(unsigned int region, unsigned long localAddr, + unsigned long pciOffset, unsigned long regionSize); + +-/* +- * The pcibios_map_platform_irq function is defined in the appropriate +- * board specific code and referenced here +- */ +-extern int __init pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin); +- + static __init void SetPCIPLL(void) + { + { +@@ -110,12 +104,12 @@ + + static struct pci_err int_error[]={ + { INT_MNLTDIM,"MNLTDIM: Master non-lock transfer"}, +- { INT_TTADI, "TTADI: Illegal byte enable in I/O transfer"}, +- { INT_TMTO, "TMTO: Target memory read/write timeout"}, ++ { INT_TTADI, "TTADI: Illegal byte enable in I/O transfer"}, ++ { INT_TMTO, "TMTO: Target memory read/write timeout"}, + { INT_MDEI, "MDEI: Master function disable error"}, + { INT_APEDI, "APEDI: Address parity error"}, + { INT_SDI, "SDI: SERR detected"}, +- { INT_DPEITW, "DPEITW: Data parity error target write"}, ++ { INT_DPEITW, "DPEITW: Data parity error target write"}, + { INT_PEDITR, "PEDITR: PERR detected"}, + { INT_TADIM, "TADIM: Target abort detected"}, + { INT_MADIM, "MADIM: Master abort detected"}, +@@ -178,7 +172,7 @@ + pci_cir = ST40PCI_READ(CIR);pci_air = ST40PCI_READ(AIR); + + /* Reset state to stop multiple interrupts */ +- ST40PCI_WRITE(INT, ~0); ST40PCI_WRITE(AINT, ~0); ++ ST40PCI_WRITE(INT, ~0); ST40PCI_WRITE(AINT, ~0); + + + if(++count>1) return IRQ_HANDLED; +@@ -193,8 +187,8 @@ + if(pci_aint) { + printk("** AINT register status\n"); + print_pci_errors(pci_aint,aint_error,NUM_PCI_AINT_ERRS); +- } +- ++ } ++ + printk("** Address and command info\n"); + + printk("** Command %s : Address 0x%x\n", +@@ -246,7 +240,7 @@ + */ + if ((d->class >> 8) != PCI_CLASS_STORAGE_IDE) + return; +- printk("PCI: IDE base address fixup for %s\n", pci_name(d)); ++ printk("PCI: IDE base address fixup for %s\n", d->slot_name); + for(i=0; i<4; i++) { + struct resource *r = &d->resource[i]; + if ((r->start & ~0x80) == 0x374) { +@@ -255,11 +249,13 @@ + } + } + } ++ + DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, pci_fixup_ide_bases); + + int __init st40pci_init(unsigned memStart, unsigned memSize) + { +- u32 lsr0; ++ ++ printk("PCI version register reads 0x%x\n",ST40PCI_READ(VCR_VERSION)); + + SetPCIPLL(); + +@@ -423,19 +419,12 @@ + /* Everything hangs off this */ + static struct pci_bus *pci_root_bus; + +- +-static u8 __init no_swizzle(struct pci_dev *dev, u8 * pin) +-{ +- return PCI_SLOT(dev->devfn); +-} +- +- + static int __init pcibios_init(void) + { + extern unsigned long memory_start, memory_end; + + printk(KERN_ALERT "pci-st40.c: pcibios_init\n"); +- ++ + if (sh_mv.mv_init_pci != NULL) { + sh_mv.mv_init_pci(); + } +@@ -466,17 +455,11 @@ + /* ok, do the scan man */ + pci_root_bus = pci_scan_bus(0, &st40pci_config_ops, NULL); + pci_assign_unassigned_resources(); +- pci_fixup_irqs(no_swizzle, pcibios_map_platform_irq); + + return 0; + } +- + subsys_initcall(pcibios_init); + +-void __init pcibios_fixup_bus(struct pci_bus *bus) +-{ +-} +- + /* + * Publish a region of local address space over the PCI bus + * to other devices. +@@ -505,5 +488,5 @@ + + /* Size of region */ + ST40PCI_WRITE_INDEXED(RSR, region, mask | 1); +-} ++} + +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/pci/pci.c linux-2.6.17/arch/sh/drivers/pci/pci.c +--- linux-2.6.17-vanilla/arch/sh/drivers/pci/pci.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/pci/pci.c 2006-07-12 16:54:21.000000000 +0000 +@@ -1,21 +1,45 @@ +-/* arch/sh/kernel/pci.c +- * $Id: pci.c,v 1.1 2003/08/24 19:15:45 lethal Exp $ ++/* ++ * arch/sh/drivers/pci/pci.c + * + * Copyright (c) 2002 M. R. Brown <mrbrown@linux-sh.org> +- * +- * ++ * Copyright (c) 2004 - 2006 Paul Mundt <lethal@linux-sh.org> ++ * + * These functions are collected here to reduce duplication of common + * code amongst the many platform-specific PCI support code files. +- * ++ * + * These routines require the following board-specific routines: + * void pcibios_fixup_irqs(); + * + * See include/asm-sh/pci.h for more information. ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. + */ +- + #include <linux/kernel.h> + #include <linux/pci.h> + #include <linux/init.h> ++#include <asm/io.h> ++ ++static inline u8 bridge_swizzle(u8 pin, u8 slot) ++{ ++ return (((pin - 1) + slot) % 4) + 1; ++} ++ ++static u8 __init simple_swizzle(struct pci_dev *dev, u8 *pinp) ++{ ++ u8 pin = *pinp; ++ ++ while (dev->bus->parent) { ++ pin = bridge_swizzle(pin, PCI_SLOT(dev->devfn)); ++ /* Move up the chain of bridges. */ ++ dev = dev->bus->self; ++ } ++ *pinp = pin; ++ ++ /* The slot is the slot of the last bridge. */ ++ return PCI_SLOT(dev->devfn); ++} + + static int __init pcibios_init(void) + { +@@ -26,26 +50,32 @@ + #ifdef CONFIG_PCI_AUTO + /* assign resources */ + busno = 0; +- for (p = board_pci_channels; p->pci_ops != NULL; p++) { ++ for (p = board_pci_channels; p->pci_ops != NULL; p++) + busno = pciauto_assign_resources(busno, p) + 1; +- } + #endif + + /* scan the buses */ + busno = 0; +- for (p= board_pci_channels; p->pci_ops != NULL; p++) { ++ for (p = board_pci_channels; p->pci_ops != NULL; p++) { + bus = pci_scan_bus(busno, p->pci_ops, p); +- busno = bus->subordinate+1; ++ busno = bus->subordinate + 1; + } + +- /* board-specific fixups */ +- pcibios_fixup_irqs(); ++ pci_fixup_irqs(simple_swizzle, pcibios_map_platform_irq); + + return 0; + } +- + subsys_initcall(pcibios_init); + ++/* ++ * Called after each bus is probed, but before its children ++ * are examined. ++ */ ++void __init pcibios_fixup_bus(struct pci_bus *bus) ++{ ++ pci_read_bridge_bases(bus); ++} ++ + void + pcibios_update_resource(struct pci_dev *dev, struct resource *root, + struct resource *res, int resource) +@@ -61,13 +91,17 @@ + new |= PCI_ROM_ADDRESS_ENABLE; + reg = dev->rom_base_reg; + } else { +- /* Somebody might have asked allocation of a non-standard resource */ ++ /* ++ * Somebody might have asked allocation of a non-standard ++ * resource ++ */ + return; + } +- ++ + pci_write_config_dword(dev, reg, new); + pci_read_config_dword(dev, reg, &check); +- if ((new ^ check) & ((new & PCI_BASE_ADDRESS_SPACE_IO) ? PCI_BASE_ADDRESS_IO_MASK : PCI_BASE_ADDRESS_MEM_MASK)) { ++ if ((new ^ check) & ((new & PCI_BASE_ADDRESS_SPACE_IO) ? ++ PCI_BASE_ADDRESS_IO_MASK : PCI_BASE_ADDRESS_MEM_MASK)) { + printk(KERN_ERR "PCI: Error while updating region " + "%s/%d (%08x != %08x)\n", pci_name(dev), resource, + new, check); +@@ -145,7 +179,8 @@ + lat = pcibios_max_latency; + else + return; +- printk(KERN_INFO "PCI: Setting latency timer of device %s to %d\n", pci_name(dev), lat); ++ printk(KERN_INFO "PCI: Setting latency timer of device %s to %d\n", ++ pci_name(dev), lat); + pci_write_config_byte(dev, PCI_LATENCY_TIMER, lat); + } + +@@ -153,3 +188,39 @@ + { + pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq); + } ++ ++void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long maxlen) ++{ ++ unsigned long start = pci_resource_start(dev, bar); ++ unsigned long len = pci_resource_len(dev, bar); ++ unsigned long flags = pci_resource_flags(dev, bar); ++ ++ if (unlikely(!len || !start)) ++ return NULL; ++ if (maxlen && len > maxlen) ++ len = maxlen; ++ ++ /* ++ * Presently the IORESOURCE_MEM case is a bit special, most ++ * SH7751 style PCI controllers have PCI memory at a fixed ++ * location in the address space where no remapping is desired ++ * (typically at 0xfd000000, but is_pci_memaddr() will know ++ * best). With the IORESOURCE_MEM case more care has to be taken ++ * to inhibit page table mapping for legacy cores, but this is ++ * punted off to __ioremap(). ++ * -- PFM. ++ */ ++ if (flags & IORESOURCE_IO) ++ return ioport_map(start, len); ++ if (flags & IORESOURCE_MEM) ++ return ioremap(start, len); ++ ++ return NULL; ++} ++EXPORT_SYMBOL(pci_iomap); ++ ++void pci_iounmap(struct pci_dev *dev, void __iomem *addr) ++{ ++ iounmap(addr); ++} ++EXPORT_SYMBOL(pci_iounmap); +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/superhyway/CVS/Entries linux-2.6.17/arch/sh/drivers/superhyway/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/drivers/superhyway/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/superhyway/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,3 @@ ++/Makefile/1.1/Thu Mar 17 07:43:07 2005// ++/ops-sh4-202.c/1.3/Tue Jan 3 22:35:52 2006// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/superhyway/CVS/Repository linux-2.6.17/arch/sh/drivers/superhyway/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/drivers/superhyway/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/superhyway/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/drivers/superhyway +diff -ruN linux-2.6.17-vanilla/arch/sh/drivers/superhyway/CVS/Root linux-2.6.17/arch/sh/drivers/superhyway/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/drivers/superhyway/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/drivers/superhyway/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/.cvsignore linux-2.6.17/arch/sh/kernel/.cvsignore +--- linux-2.6.17-vanilla/arch/sh/kernel/.cvsignore 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/.cvsignore 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1 @@ ++vmlinux.lds.s +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/CVS/Entries linux-2.6.17/arch/sh/kernel/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/kernel/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,34 @@ ++/.cvsignore/1.1/Wed May 12 13:51:13 2004/-ko/ ++/Makefile/1.19/Sun Jan 29 17:46:23 2006// ++/apm.c/1.2/Mon Jan 30 15:57:20 2006// ++/asm-offsets.c/1.1/Mon Jun 28 22:03:37 2004/-ko/ ++/cf-enabler.c/1.6/Wed Jan 4 18:03:38 2006/-ko/ ++/cpufreq.c/1.7/Tue Jan 3 22:35:53 2006/-ko/ ++/early_printk.c/1.4/Sat Aug 13 15:49:28 2005// ++/entry.S/1.46/Sun Jan 29 17:46:23 2006/-ko/ ++/head.S/1.9/Thu Oct 20 22:51:38 2005/-ko/ ++/init_task.c/1.7/Sun Aug 15 16:59:26 2004// ++/io.c/1.7/Wed Nov 23 15:47:38 2005/-ko/ ++/io_generic.c/1.6/Tue Jan 3 22:51:47 2006/-ko/ ++/kgdb_jmp.S/1.2/Fri Nov 1 17:19:24 2002// ++/kgdb_stub.c/1.5/Sun Feb 5 12:27:59 2006// ++/machine_kexec.c/1.1/Mon Sep 19 19:20:56 2005/-ko/ ++/module.c/1.5/Sun Feb 22 23:08:43 2004/-ko/ ++/pm.c/1.2/Mon Jan 30 15:57:20 2006// ++/ptrace.c/1.22/Mon Mar 27 21:06:13 2006// ++/relocate_kernel.S/1.1/Mon Sep 19 19:20:56 2005/-ko/ ++/semaphore.c/1.4/Thu Mar 17 07:40:18 2005/-ko/ ++/sh_bios.c/1.3/Tue Jun 15 18:40:42 2004/-ko/ ++/signal.c/1.30/Fri Oct 28 13:12:48 2005/-ko/ ++/smp.c/1.10/Mon Mar 27 21:06:14 2006/-ko/ ++/sys_sh.c/1.11/Sat Dec 31 11:30:47 2005// ++/vmlinux.lds.S/1.6/Thu Mar 17 07:49:06 2005/-ko/ ++D/cpu//// ++D/timers//// ++/irq.c/1.28/Wed Jul 5 14:50:39 2006/-ko/ ++/process.c/1.42/Fri Jul 7 10:15:14 2006/-ko/ ++/syscalls.S/1.4/Fri Jul 7 10:15:14 2006/-ko/ ++/setup.c/1.53/Sat Jul 8 20:16:09 2006/-ko/ ++/time.c/1.38/Sat Jul 8 20:16:09 2006/-ko/ ++/sh_ksyms.c/1.26/Wed Jul 12 16:51:54 2006// ++/traps.c/1.21/Wed Jul 12 16:51:54 2006/-ko/ +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/CVS/Repository linux-2.6.17/arch/sh/kernel/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/kernel/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/kernel +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/CVS/Root linux-2.6.17/arch/sh/kernel/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/kernel/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/Makefile linux-2.6.17/arch/sh/kernel/Makefile +--- linux-2.6.17-vanilla/arch/sh/kernel/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/Makefile 2006-07-12 16:54:22.000000000 +0000 +@@ -6,7 +6,7 @@ + + obj-y := process.o signal.o entry.o traps.o irq.o \ + ptrace.o setup.o time.o sys_sh.o semaphore.o \ +- io.o io_generic.o sh_ksyms.o ++ io.o io_generic.o sh_ksyms.o syscalls.o + + obj-y += cpu/ timers/ + +@@ -18,3 +18,5 @@ + obj-$(CONFIG_MODULES) += module.o + obj-$(CONFIG_EARLY_PRINTK) += early_printk.o + obj-$(CONFIG_KEXEC) += machine_kexec.o relocate_kernel.o ++obj-$(CONFIG_APM) += apm.o ++obj-$(CONFIG_PM) += pm.o +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/apm.c linux-2.6.17/arch/sh/kernel/apm.c +--- linux-2.6.17-vanilla/arch/sh/kernel/apm.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/apm.c 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1,539 @@ ++/* ++ * bios-less APM driver for hp680 ++ * ++ * Copyright 2005 (c) Andriy Skulysh <askulysh@gmail.com> ++ * ++ * based on ARM APM driver by ++ * Jamey Hicks <jamey@crl.dec.com> ++ * ++ * adapted from the APM BIOS driver for Linux by ++ * Stephen Rothwell (sfr@linuxcare.com) ++ * ++ * APM 1.2 Reference: ++ * Intel Corporation, Microsoft Corporation. Advanced Power Management ++ * (APM) BIOS Interface Specification, Revision 1.2, February 1996. ++ * ++ * [This document is available from Microsoft at: ++ * http://www.microsoft.com/hwdev/busbios/amp_12.htm] ++ */ ++#include <linux/config.h> ++#include <linux/module.h> ++#include <linux/poll.h> ++#include <linux/timer.h> ++#include <linux/slab.h> ++#include <linux/proc_fs.h> ++#include <linux/miscdevice.h> ++#include <linux/apm_bios.h> ++#include <linux/pm.h> ++#include <linux/pm_legacy.h> ++#include <asm/apm.h> ++ ++#define MODNAME "apm" ++ ++/* ++ * The apm_bios device is one of the misc char devices. ++ * This is its minor number. ++ */ ++#define APM_MINOR_DEV 134 ++ ++/* ++ * Maximum number of events stored ++ */ ++#define APM_MAX_EVENTS 16 ++ ++struct apm_queue { ++ unsigned int event_head; ++ unsigned int event_tail; ++ apm_event_t events[APM_MAX_EVENTS]; ++}; ++ ++/* ++ * The per-file APM data ++ */ ++struct apm_user { ++ struct list_head list; ++ ++ unsigned int suser: 1; ++ unsigned int writer: 1; ++ unsigned int reader: 1; ++ ++ int suspend_result; ++ unsigned int suspend_state; ++#define SUSPEND_NONE 0 /* no suspend pending */ ++#define SUSPEND_PENDING 1 /* suspend pending read */ ++#define SUSPEND_READ 2 /* suspend read, pending ack */ ++#define SUSPEND_ACKED 3 /* suspend acked */ ++#define SUSPEND_DONE 4 /* suspend completed */ ++ ++ struct apm_queue queue; ++}; ++ ++/* ++ * Local variables ++ */ ++static int suspends_pending; ++ ++static DECLARE_WAIT_QUEUE_HEAD(apm_waitqueue); ++static DECLARE_WAIT_QUEUE_HEAD(apm_suspend_waitqueue); ++ ++/* ++ * This is a list of everyone who has opened /dev/apm_bios ++ */ ++static DECLARE_RWSEM(user_list_lock); ++static LIST_HEAD(apm_user_list); ++ ++/* ++ * kapmd info. kapmd provides us a process context to handle ++ * "APM" events within - specifically necessary if we're going ++ * to be suspending the system. ++ */ ++static DECLARE_WAIT_QUEUE_HEAD(kapmd_wait); ++static DECLARE_COMPLETION(kapmd_exit); ++static DEFINE_SPINLOCK(kapmd_queue_lock); ++static struct apm_queue kapmd_queue; ++ ++int apm_suspended; ++EXPORT_SYMBOL(apm_suspended); ++ ++/* Platform-specific apm_read_proc(). */ ++int (*apm_get_info)(char *buf, char **start, off_t fpos, int length); ++EXPORT_SYMBOL(apm_get_info); ++ ++/* ++ * APM event queue management. ++ */ ++static inline int queue_empty(struct apm_queue *q) ++{ ++ return q->event_head == q->event_tail; ++} ++ ++static inline apm_event_t queue_get_event(struct apm_queue *q) ++{ ++ q->event_tail = (q->event_tail + 1) % APM_MAX_EVENTS; ++ return q->events[q->event_tail]; ++} ++ ++static void queue_add_event(struct apm_queue *q, apm_event_t event) ++{ ++ q->event_head = (q->event_head + 1) % APM_MAX_EVENTS; ++ if (q->event_head == q->event_tail) { ++ static int notified; ++ ++ if (notified++ == 0) ++ printk(KERN_ERR "apm: an event queue overflowed\n"); ++ ++ q->event_tail = (q->event_tail + 1) % APM_MAX_EVENTS; ++ } ++ q->events[q->event_head] = event; ++} ++ ++static void queue_event_one_user(struct apm_user *as, apm_event_t event) ++{ ++ if (as->suser && as->writer) { ++ switch (event) { ++ case APM_SYS_SUSPEND: ++ case APM_USER_SUSPEND: ++ /* ++ * If this user already has a suspend pending, ++ * don't queue another one. ++ */ ++ if (as->suspend_state != SUSPEND_NONE) ++ return; ++ ++ as->suspend_state = SUSPEND_PENDING; ++ suspends_pending++; ++ break; ++ } ++ } ++ queue_add_event(&as->queue, event); ++} ++ ++static void queue_event(apm_event_t event, struct apm_user *sender) ++{ ++ struct apm_user *as; ++ ++ down_read(&user_list_lock); ++ ++ list_for_each_entry(as, &apm_user_list, list) ++ if (as != sender && as->reader) ++ queue_event_one_user(as, event); ++ ++ up_read(&user_list_lock); ++ wake_up_interruptible(&apm_waitqueue); ++} ++ ++/** ++ * apm_queue_event - queue an APM event for kapmd ++ * @event: APM event ++ * ++ * Queue an APM event for kapmd to process and ultimately take the ++ * appropriate action. Only a subset of events are handled: ++ * %APM_LOW_BATTERY ++ * %APM_POWER_STATUS_CHANGE ++ * %APM_USER_SUSPEND ++ * %APM_SYS_SUSPEND ++ * %APM_CRITICAL_SUSPEND ++ */ ++void apm_queue_event(apm_event_t event) ++{ ++ spin_lock_irq(&kapmd_queue_lock); ++ queue_add_event(&kapmd_queue, event); ++ spin_unlock_irq(&kapmd_queue_lock); ++ ++ wake_up_interruptible(&kapmd_wait); ++} ++EXPORT_SYMBOL(apm_queue_event); ++ ++static void apm_suspend(void) ++{ ++ struct apm_user *as; ++ int err; ++ ++ apm_suspended = 1; ++ err = pm_suspend(PM_SUSPEND_MEM); ++ ++ /* ++ * Anyone on the APM queues will think we're still suspended. ++ * Send a message so everyone knows we're now awake again. ++ */ ++ queue_event(APM_NORMAL_RESUME, NULL); ++ ++ /* ++ * Finally, wake up anyone who is sleeping on the suspend. ++ */ ++ down_read(&user_list_lock); ++ list_for_each_entry(as, &apm_user_list, list) { ++ as->suspend_result = err; ++ as->suspend_state = SUSPEND_DONE; ++ } ++ up_read(&user_list_lock); ++ ++ wake_up(&apm_suspend_waitqueue); ++ apm_suspended = 0; ++} ++ ++static ssize_t apm_read(struct file *fp, char __user *buf, ++ size_t count, loff_t *ppos) ++{ ++ struct apm_user *as = fp->private_data; ++ apm_event_t event; ++ int i = count, ret = 0; ++ ++ if (count < sizeof(apm_event_t)) ++ return -EINVAL; ++ ++ if (queue_empty(&as->queue) && fp->f_flags & O_NONBLOCK) ++ return -EAGAIN; ++ ++ wait_event_interruptible(apm_waitqueue, !queue_empty(&as->queue)); ++ ++ while ((i >= sizeof(event)) && !queue_empty(&as->queue)) { ++ event = queue_get_event(&as->queue); ++ ++ ret = -EFAULT; ++ if (copy_to_user(buf, &event, sizeof(event))) ++ break; ++ ++ if (event == APM_SYS_SUSPEND || event == APM_USER_SUSPEND) ++ as->suspend_state = SUSPEND_READ; ++ ++ buf += sizeof(event); ++ i -= sizeof(event); ++ } ++ ++ if (i < count) ++ ret = count - i; ++ ++ return ret; ++} ++ ++static unsigned int apm_poll(struct file *fp, poll_table * wait) ++{ ++ struct apm_user *as = fp->private_data; ++ ++ poll_wait(fp, &apm_waitqueue, wait); ++ return queue_empty(&as->queue) ? 0 : POLLIN | POLLRDNORM; ++} ++ ++/* ++ * apm_ioctl - handle APM ioctl ++ * ++ * APM_IOC_SUSPEND ++ * This IOCTL is overloaded, and performs two functions. It is used to: ++ * - initiate a suspend ++ * - acknowledge a suspend read from /dev/apm_bios. ++ * Only when everyone who has opened /dev/apm_bios with write permission ++ * has acknowledge does the actual suspend happen. ++ */ ++static int ++apm_ioctl(struct inode * inode, struct file *filp, u_int cmd, u_long arg) ++{ ++ struct apm_user *as = filp->private_data; ++ unsigned long flags; ++ int err = -EINVAL; ++ ++ if (!as->suser || !as->writer) ++ return -EPERM; ++ ++ switch (cmd) { ++ case APM_IOC_SUSPEND: ++ as->suspend_result = -EINTR; ++ ++ if (as->suspend_state == SUSPEND_READ) { ++ /* ++ * If we read a suspend command from /dev/apm_bios, ++ * then the corresponding APM_IOC_SUSPEND ioctl is ++ * interpreted as an acknowledge. ++ */ ++ as->suspend_state = SUSPEND_ACKED; ++ suspends_pending--; ++ } else { ++ /* ++ * Otherwise it is a request to suspend the system. ++ * Queue an event for all readers, and expect an ++ * acknowledge from all writers who haven't already ++ * acknowledged. ++ */ ++ queue_event(APM_USER_SUSPEND, as); ++ } ++ ++ /* ++ * If there are no further acknowledges required, suspend ++ * the system. ++ */ ++ if (suspends_pending == 0) ++ apm_suspend(); ++ ++ /* ++ * Wait for the suspend/resume to complete. If there are ++ * pending acknowledges, we wait here for them. ++ * ++ * Note that we need to ensure that the PM subsystem does ++ * not kick us out of the wait when it suspends the threads. ++ */ ++ flags = current->flags; ++ current->flags |= PF_NOFREEZE; ++ ++ /* ++ * Note: do not allow a thread which is acking the suspend ++ * to escape until the resume is complete. ++ */ ++ if (as->suspend_state == SUSPEND_ACKED) ++ wait_event(apm_suspend_waitqueue, ++ as->suspend_state == SUSPEND_DONE); ++ else ++ wait_event_interruptible(apm_suspend_waitqueue, ++ as->suspend_state == SUSPEND_DONE); ++ ++ current->flags = flags; ++ err = as->suspend_result; ++ as->suspend_state = SUSPEND_NONE; ++ break; ++ } ++ ++ return err; ++} ++ ++static int apm_release(struct inode * inode, struct file * filp) ++{ ++ struct apm_user *as = filp->private_data; ++ filp->private_data = NULL; ++ ++ down_write(&user_list_lock); ++ list_del(&as->list); ++ up_write(&user_list_lock); ++ ++ /* ++ * We are now unhooked from the chain. As far as new ++ * events are concerned, we no longer exist. However, we ++ * need to balance suspends_pending, which means the ++ * possibility of sleeping. ++ */ ++ if (as->suspend_state != SUSPEND_NONE) { ++ suspends_pending -= 1; ++ if (suspends_pending == 0) ++ apm_suspend(); ++ } ++ ++ kfree(as); ++ return 0; ++} ++ ++static int apm_open(struct inode * inode, struct file * filp) ++{ ++ struct apm_user *as; ++ ++ as = kzalloc(sizeof(*as), GFP_KERNEL); ++ if (as) { ++ /* ++ * XXX - this is a tiny bit broken, when we consider BSD ++ * process accounting. If the device is opened by root, we ++ * instantly flag that we used superuser privs. Who knows, ++ * we might close the device immediately without doing a ++ * privileged operation -- cevans ++ */ ++ as->suser = capable(CAP_SYS_ADMIN); ++ as->writer = (filp->f_mode & FMODE_WRITE) == FMODE_WRITE; ++ as->reader = (filp->f_mode & FMODE_READ) == FMODE_READ; ++ ++ down_write(&user_list_lock); ++ list_add(&as->list, &apm_user_list); ++ up_write(&user_list_lock); ++ ++ filp->private_data = as; ++ } ++ ++ return as ? 0 : -ENOMEM; ++} ++ ++static struct file_operations apm_bios_fops = { ++ .owner = THIS_MODULE, ++ .read = apm_read, ++ .poll = apm_poll, ++ .ioctl = apm_ioctl, ++ .open = apm_open, ++ .release = apm_release, ++}; ++ ++static struct miscdevice apm_device = { ++ .minor = APM_MINOR_DEV, ++ .name = "apm_bios", ++ .fops = &apm_bios_fops ++}; ++ ++ ++#ifdef CONFIG_PROC_FS ++/* ++ * Arguments, with symbols from linux/apm_bios.h. ++ * ++ * 0) Linux driver version (this will change if format changes) ++ * 1) APM BIOS Version. Usually 1.0, 1.1 or 1.2. ++ * 2) APM flags from APM Installation Check (0x00): ++ * bit 0: APM_16_BIT_SUPPORT ++ * bit 1: APM_32_BIT_SUPPORT ++ * bit 2: APM_IDLE_SLOWS_CLOCK ++ * bit 3: APM_BIOS_DISABLED ++ * bit 4: APM_BIOS_DISENGAGED ++ * 3) AC line status ++ * 0x00: Off-line ++ * 0x01: On-line ++ * 0x02: On backup power (BIOS >= 1.1 only) ++ * 0xff: Unknown ++ * 4) Battery status ++ * 0x00: High ++ * 0x01: Low ++ * 0x02: Critical ++ * 0x03: Charging ++ * 0x04: Selected battery not present (BIOS >= 1.2 only) ++ * 0xff: Unknown ++ * 5) Battery flag ++ * bit 0: High ++ * bit 1: Low ++ * bit 2: Critical ++ * bit 3: Charging ++ * bit 7: No system battery ++ * 0xff: Unknown ++ * 6) Remaining battery life (percentage of charge): ++ * 0-100: valid ++ * -1: Unknown ++ * 7) Remaining battery life (time units): ++ * Number of remaining minutes or seconds ++ * -1: Unknown ++ * 8) min = minutes; sec = seconds ++ */ ++static int apm_read_proc(char *buf, char **start, off_t fpos, int length) ++{ ++ if (likely(apm_get_info)) ++ return apm_get_info(buf, start, fpos, length); ++ ++ return -EINVAL; ++} ++#endif ++ ++static int kapmd(void *arg) ++{ ++ daemonize("kapmd"); ++ current->flags |= PF_NOFREEZE; ++ ++ do { ++ apm_event_t event; ++ ++ wait_event_interruptible(kapmd_wait, ++ !queue_empty(&kapmd_queue) || !pm_active); ++ ++ if (!pm_active) ++ break; ++ ++ spin_lock_irq(&kapmd_queue_lock); ++ event = 0; ++ if (!queue_empty(&kapmd_queue)) ++ event = queue_get_event(&kapmd_queue); ++ spin_unlock_irq(&kapmd_queue_lock); ++ ++ switch (event) { ++ case 0: ++ break; ++ ++ case APM_LOW_BATTERY: ++ case APM_POWER_STATUS_CHANGE: ++ queue_event(event, NULL); ++ break; ++ ++ case APM_USER_SUSPEND: ++ case APM_SYS_SUSPEND: ++ queue_event(event, NULL); ++ if (suspends_pending == 0) ++ apm_suspend(); ++ break; ++ ++ case APM_CRITICAL_SUSPEND: ++ apm_suspend(); ++ break; ++ } ++ } while (1); ++ ++ complete_and_exit(&kapmd_exit, 0); ++} ++ ++static int __init apm_init(void) ++{ ++ int ret; ++ ++ pm_active = 1; ++ ++ ret = kernel_thread(kapmd, NULL, CLONE_KERNEL); ++ if (unlikely(ret < 0)) { ++ pm_active = 0; ++ return ret; ++ } ++ ++ create_proc_info_entry("apm", 0, NULL, apm_read_proc); ++ ++ ret = misc_register(&apm_device); ++ if (unlikely(ret != 0)) { ++ remove_proc_entry("apm", NULL); ++ ++ pm_active = 0; ++ wake_up(&kapmd_wait); ++ wait_for_completion(&kapmd_exit); ++ } ++ ++ return ret; ++} ++ ++static void __exit apm_exit(void) ++{ ++ misc_deregister(&apm_device); ++ remove_proc_entry("apm", NULL); ++ ++ pm_active = 0; ++ wake_up(&kapmd_wait); ++ wait_for_completion(&kapmd_exit); ++} ++ ++module_init(apm_init); ++module_exit(apm_exit); ++ ++MODULE_AUTHOR("Stephen Rothwell, Andriy Skulysh"); ++MODULE_DESCRIPTION("Advanced Power Management"); ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cf-enabler.c linux-2.6.17/arch/sh/kernel/cf-enabler.c +--- linux-2.6.17-vanilla/arch/sh/kernel/cf-enabler.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cf-enabler.c 2006-07-12 16:54:22.000000000 +0000 +@@ -11,7 +11,8 @@ + + #include <linux/config.h> + #include <linux/init.h> +- ++#include <linux/mm.h> ++#include <linux/vmalloc.h> + #include <asm/io.h> + #include <asm/irq.h> + +@@ -33,8 +34,6 @@ + /* SH4 can't access PCMCIA interface through P2 area. + * we must remap it with appropreate attribute bit of the page set. + * this part is based on Greg Banks' hd64465_ss.c implementation - Masahiro Abe */ +-#include <linux/mm.h> +-#include <linux/vmalloc.h> + + #if defined(CONFIG_CF_AREA6) + #define slot_no 0 +@@ -42,9 +41,6 @@ + #define slot_no 1 + #endif + +-/* defined in mm/ioremap.c */ +-extern void * p3_ioremap(unsigned long phys_addr, unsigned long size, unsigned long flags); +- + /* use this pointer to access to directly connected compact flash io area*/ + void *cf_io_base; + +@@ -63,7 +59,7 @@ + return -ENOMEM; + } + /* printk("p3_ioremap(paddr=0x%08lx, psize=0x%08lx, prot=0x%08lx)=0x%08lx\n", +- paddrbase, psize, prot.pgprot, cf_io_base);*/ ++ paddrbase, psize, prot.pgprot, cf_io_base);*/ + + /* XXX : do we need attribute and common-memory area also? */ + +@@ -88,7 +84,7 @@ + } + + #if defined(CONFIG_SH_SOLUTION_ENGINE) +-#include <asm/se/se.h> ++#include <asm/se.h> + + /* + * SolutionEngine +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/CVS/Entries linux-2.6.17/arch/sh/kernel/cpu/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,10 @@ ++/Makefile/1.10/Sat Jan 28 01:22:16 2006/-ko/ ++/adc.c/1.2/Sun Aug 15 16:59:26 2004/-ko/ ++/clock.c/1.6/Sat Jan 28 01:27:00 2006/-ko/ ++/ubc.S/1.2/Sun May 4 19:29:53 2003/-ko/ ++D/irq//// ++D/sh2//// ++D/sh3//// ++D/sh4//// ++/init.c/1.11/Wed Jul 5 14:50:40 2006/-ko/ ++/rtc.c/1.5/Wed Jul 5 14:50:40 2006/-ko/ +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/CVS/Repository linux-2.6.17/arch/sh/kernel/cpu/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/kernel/cpu +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/CVS/Root linux-2.6.17/arch/sh/kernel/cpu/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/clock.c linux-2.6.17/arch/sh/kernel/cpu/clock.c +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/clock.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/clock.c 2006-07-12 16:54:22.000000000 +0000 +@@ -225,7 +225,7 @@ + { + int i, ret = 0; + +- BUG_ON(unlikely(!master_clk.rate)); ++ BUG_ON(!master_clk.rate); + + for (i = 0; i < ARRAY_SIZE(onchip_clocks); i++) { + struct clk *clk = onchip_clocks[i]; +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/init.c linux-2.6.17/arch/sh/kernel/cpu/init.c +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/init.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/init.c 2006-07-12 16:54:22.000000000 +0000 +@@ -4,6 +4,7 @@ + * CPU init code + * + * Copyright (C) 2002, 2003 Paul Mundt ++ * Copyright (C) 2003 Richard Curnow + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive +@@ -51,7 +52,15 @@ + ccr = ctrl_inl(CCR); + + /* +- * If the cache is already enabled .. flush it. ++ * At this point we don't know whether the cache is enabled or not - a ++ * bootloader may have enabled it. There are at least 2 things that ++ * could be dirty in the cache at this point: ++ * 1. kernel command line set up by boot loader ++ * 2. spilled registers from the prolog of this function ++ * => before re-initialising the cache, we must do a purge of the whole ++ * cache out to memory for safety. As long as nothing is spilled ++ * during the loop to lines that have already been done, this is safe. ++ * - RPC + */ + if (ccr & CCR_CACHE_ENABLE) { + unsigned long ways, waysize, addrstart; +@@ -98,6 +107,8 @@ + /* Force EMODE if possible */ + if (cpu_data->dcache.ways > 1) + flags |= CCR_CACHE_EMODE; ++ else ++ flags &= ~CCR_CACHE_EMODE; + #endif + + #ifdef CONFIG_SH_WRITETHROUGH +@@ -112,6 +123,9 @@ + /* Turn on OCRAM -- halve the OC */ + flags |= CCR_CACHE_ORA; + cpu_data->dcache.sets >>= 1; ++ ++ cpu_data->dcache.way_size = cpu_data->dcache.sets * ++ cpu_data->dcache.linesz; + #endif + + ctrl_outl(flags, CCR); +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/CVS/Entries linux-2.6.17/arch/sh/kernel/cpu/irq/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/irq/CVS/Entries 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1,6 @@ ++/Makefile/1.1/Sat Jan 7 20:16:39 2006/-ko/ ++/imask.c/1.1/Sat Jan 7 20:16:39 2006/-ko/ ++/ipr.c/1.2/Sun Jan 8 12:21:42 2006/-ko/ ++/pint.c/1.1/Sat Jan 7 20:16:39 2006/-ko/ ++/intc2.c/1.2/Wed Jul 12 16:51:54 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/CVS/Repository linux-2.6.17/arch/sh/kernel/cpu/irq/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/irq/CVS/Repository 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/kernel/cpu/irq +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/CVS/Root linux-2.6.17/arch/sh/kernel/cpu/irq/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/irq/CVS/Root 2006-07-12 16:54:21.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/intc2.c linux-2.6.17/arch/sh/kernel/cpu/irq/intc2.c +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/irq/intc2.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/irq/intc2.c 2006-07-12 16:54:21.000000000 +0000 +@@ -241,9 +241,9 @@ + /* 110-111 reserved/unused */ + #elif defined(CONFIG_CPU_SUBTYPE_SH7780) + { TIMER_IRQ, 0, 24, 0, INTC_TMU0_MSK, 2}, +-#ifdef CONFIG_SH_RTC +- { RTC_IRQ, 4, 0, 0, INTC_RTC_MSK, TIMER_PRIORITY }, +-#endif ++ { 21, 1, 0, 0, INTC_RTC_MSK, TIMER_PRIORITY }, ++ { 22, 1, 1, 0, INTC_RTC_MSK, TIMER_PRIORITY }, ++ { 23, 1, 2, 0, INTC_RTC_MSK, TIMER_PRIORITY }, + { SCIF0_ERI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY }, + { SCIF0_RXI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY }, + { SCIF0_BRI_IRQ, 8, 24, 0, INTC_SCIF0_MSK, SCIF0_PRIORITY }, +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh2/CVS/Entries linux-2.6.17/arch/sh/kernel/cpu/sh2/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh2/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh2/CVS/Entries 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1,3 @@ ++/Makefile/1.3/Thu Jul 8 13:52:22 2004/-ko/ ++/probe.c/1.1/Thu Jul 8 13:52:22 2004/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh2/CVS/Repository linux-2.6.17/arch/sh/kernel/cpu/sh2/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh2/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh2/CVS/Repository 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/kernel/cpu/sh2 +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh2/CVS/Root linux-2.6.17/arch/sh/kernel/cpu/sh2/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh2/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh2/CVS/Root 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/CVS/Entries linux-2.6.17/arch/sh/kernel/cpu/sh3/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh3/CVS/Entries 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1,8 @@ ++/Makefile/1.6/Fri Jun 10 15:51:47 2005/-ko/ ++/clock-sh3.c/1.1/Sat Mar 26 20:25:36 2005/-ko/ ++/clock-sh7300.c/1.2/Tue May 31 14:06:34 2005/-ko/ ++/clock-sh7705.c/1.1/Sat Mar 26 20:25:36 2005/-ko/ ++/clock-sh7709.c/1.2/Wed Sep 28 11:32:44 2005// ++/ex.S/1.4/Sun Jun 20 20:27:22 2004/-ko/ ++/probe.c/1.2/Mon Aug 30 12:55:31 2004/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/CVS/Repository linux-2.6.17/arch/sh/kernel/cpu/sh3/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh3/CVS/Repository 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/kernel/cpu/sh3 +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/CVS/Root linux-2.6.17/arch/sh/kernel/cpu/sh3/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh3/CVS/Root 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/clock-sh7709.c linux-2.6.17/arch/sh/kernel/cpu/sh3/clock-sh7709.c +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh3/clock-sh7709.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh3/clock-sh7709.c 2006-07-12 16:54:22.000000000 +0000 +@@ -4,7 +4,7 @@ + * SH7709 support for the clock framework + * + * Copyright (C) 2005 Andriy Skulysh +- * ++ * + * Based on arch/sh/kernel/cpu/sh3/clock-sh7705.c + * Copyright (C) 2005 Paul Mundt + * +@@ -59,7 +59,7 @@ + static void bus_clk_recalc(struct clk *clk) + { + int frqcr = ctrl_inw(FRQCR); +- int idx = (frqcr & 0x0080) ? ++ int idx = (frqcr & 0x0080) ? + ((frqcr & 0x8000) >> 13) | ((frqcr & 0x0030) >> 4) : 1; + + clk->rate = clk->parent->rate * stc_multipliers[idx]; +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/CVS/Entries linux-2.6.17/arch/sh/kernel/cpu/sh4/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh4/CVS/Entries 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1,12 @@ ++/clock-sh4-202.c/1.1/Sat Mar 26 20:25:36 2005/-ko/ ++/clock-sh4.c/1.1/Sat Mar 26 20:25:36 2005/-ko/ ++/clock-sh73180.c/1.1/Sat Mar 26 20:25:36 2005/-ko/ ++/clock-sh7770.c/1.1/Sun Aug 21 23:47:31 2005/-ko/ ++/clock-sh7780.c/1.1/Sun Aug 21 23:47:31 2005/-ko/ ++/ex.S/1.3/Sun Aug 21 23:47:31 2005// ++/fpu.c/1.5/Wed Mar 2 13:02:56 2005/-ko/ ++/probe.c/1.6/Sat Oct 8 22:08:40 2005/-ko/ ++/sq.c/1.15/Sat Jan 7 17:33:56 2006// ++/Makefile/1.13/Wed Jul 12 16:51:55 2006/-ko/ ++/setup-sh7780.c/1.1/Tue Jul 11 07:57:40 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/CVS/Repository linux-2.6.17/arch/sh/kernel/cpu/sh4/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh4/CVS/Repository 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/kernel/cpu/sh4 +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/CVS/Root linux-2.6.17/arch/sh/kernel/cpu/sh4/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh4/CVS/Root 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/Makefile linux-2.6.17/arch/sh/kernel/cpu/sh4/Makefile +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh4/Makefile 2006-07-12 16:54:22.000000000 +0000 +@@ -4,9 +4,12 @@ + + obj-y := ex.o probe.o + +-obj-$(CONFIG_SH_FPU) += fpu.o ++obj-$(CONFIG_SH_FPU) += fpu.o + obj-$(CONFIG_SH_STORE_QUEUES) += sq.o + ++# CPU subtype setup ++obj-$(CONFIG_CPU_SUBTYPE_SH7780) += setup-sh7780.o ++ + # Primary on-chip clocks (common) + clock-$(CONFIG_CPU_SH4) := clock-sh4.o + clock-$(CONFIG_CPU_SUBTYPE_SH73180) := clock-sh73180.o +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/ex.S linux-2.6.17/arch/sh/kernel/cpu/sh4/ex.S +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/ex.S 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh4/ex.S 2006-07-12 16:54:22.000000000 +0000 +@@ -39,9 +39,9 @@ + #endif + #if defined(CONFIG_SH_FPU) + .long do_fpu_error /* 120 */ +-#else ++#else + .long exception_error /* 120 */ +-#endif ++#endif + .long exception_error /* 140 */ + .long system_call ! Unconditional Trap /* 160 */ + .long exception_error ! reserved_instruction (filled by trap_init) /* 180 */ +@@ -73,6 +73,7 @@ + .long do_IRQ ! 1110 + .long exception_error + ! Internal hardware ++#ifndef CONFIG_CPU_SUBTYPE_SH7780 + .long do_IRQ ! TMU0 tuni0 /* 400 */ + .long do_IRQ ! TMU1 tuni1 + .long do_IRQ ! TMU2 tuni2 +@@ -129,13 +130,13 @@ + .long exception_error ! 46 + .long exception_error ! 47 + #endif +-#if defined(CONFIG_SH_FPU) ++#if defined(CONFIG_SH_FPU) + .long do_fpu_state_restore ! 48 /* 800 */ + .long do_fpu_state_restore ! 49 /* 820 */ +-#else ++#else + .long exception_error + .long exception_error +-#endif ++#endif + #if defined(CONFIG_CPU_SUBTYPE_SH7751) + .long exception_error /* 840 */ + .long exception_error +@@ -380,5 +381,168 @@ + .long exception_error ! 141 0x13a0 + .long exception_error ! 142 0x13c0 + .long exception_error ! 143 0x13e0 ++#elif defined(CONFIG_CPU_SUBTYPE_SH7770) ++ .long do_IRQ ! 50 0x840 ++ .long do_IRQ ! 51 0x860 ++ .long do_IRQ ! 52 0x880 ++ .long do_IRQ ! 53 0x8a0 ++ .long do_IRQ ! 54 0x8c0 ++ .long do_IRQ ! 55 0x8e0 ++ .long do_IRQ ! 56 0x900 ++ .long do_IRQ ! 57 0x920 ++ .long do_IRQ ! 58 0x940 ++ .long do_IRQ ! 59 0x960 ++ .long do_IRQ ! 60 0x980 ++ .long do_IRQ ! 61 0x9a0 ++ .long do_IRQ ! 62 0x9c0 ++ .long do_IRQ ! 63 0x9e0 ++ .long do_IRQ ! 64 0xa00 ++ .long do_IRQ ! 65 0xa20 ++ .long do_IRQ ! 66 0xa4d ++ .long do_IRQ ! 67 0xa60 ++ .long do_IRQ ! 68 0xa80 ++ .long do_IRQ ! 69 0xaa0 ++ .long do_IRQ ! 70 0xac0 ++ .long do_IRQ ! 71 0xae0 ++ .long do_IRQ ! 72 0xb00 ++ .long do_IRQ ! 73 0xb20 ++ .long do_IRQ ! 74 0xb40 ++ .long do_IRQ ! 75 0xb60 ++ .long do_IRQ ! 76 0xb80 ++ .long do_IRQ ! 77 0xba0 ++ .long do_IRQ ! 78 0xbc0 ++ .long do_IRQ ! 79 0xbe0 ++ .long do_IRQ ! 80 0xc00 ++ .long do_IRQ ! 81 0xc20 ++ .long do_IRQ ! 82 0xc40 ++ .long do_IRQ ! 83 0xc60 ++ .long do_IRQ ! 84 0xc80 ++ .long do_IRQ ! 85 0xca0 ++ .long do_IRQ ! 86 0xcc0 ++ .long do_IRQ ! 87 0xce0 ++ .long do_IRQ ! 88 0xd00 ++ .long do_IRQ ! 89 0xd20 ++ .long do_IRQ ! 90 0xd40 ++ .long do_IRQ ! 91 0xd60 ++ .long do_IRQ ! 92 0xd80 ++ .long do_IRQ ! 93 0xda0 ++ .long do_IRQ ! 94 0xdc0 ++ .long do_IRQ ! 95 0xde0 ++ .long do_IRQ ! 96 0xe00 ++ .long do_IRQ ! 97 0xe20 ++ .long do_IRQ ! 98 0xe40 ++ .long do_IRQ ! 99 0xe60 ++ .long do_IRQ ! 100 0xe80 ++ .long do_IRQ ! 101 0xea0 ++ .long do_IRQ ! 102 0xec0 ++ .long do_IRQ ! 103 0xee0 ++ .long do_IRQ ! 104 0xf00 ++ .long do_IRQ ! 105 0xf20 ++ .long do_IRQ ! 106 0xf40 ++ .long do_IRQ ! 107 0xf60 ++ .long do_IRQ ! 108 0xf80 ++#endif ++#else ++ .long exception_error /* 400 */ ++ .long exception_error ++ .long exception_error ++ .long exception_error ++ .long do_IRQ ! RTC ati ++ .long do_IRQ ! pri ++ .long do_IRQ ! cui ++ .long exception_error ++ .long exception_error /* 500 */ ++ .long exception_error ++ .long exception_error ++ .long do_IRQ ! WDT iti /* 560 */ ++ .long do_IRQ ! TMU-ch0 ++ .long do_IRQ ! TMU-ch1 ++ .long do_IRQ ! TMU-ch2 ++ .long do_IRQ ! ticpi2 /* 5E0 */ ++ .long do_IRQ ! 32 Hitachi UDI /* 600 */ ++ .long exception_error ++ .long do_IRQ ! 34 DMAC dmte0 ++ .long do_IRQ ! 35 dmte1 ++ .long do_IRQ ! 36 dmte2 ++ .long do_IRQ ! 37 dmte3 ++ .long do_IRQ ! 38 dmae ++ .long exception_error ! 39 /* 6E0 */ ++ .long do_IRQ ! 40 SCIF-ch0 eri /* 700 */ ++ .long do_IRQ ! 41 rxi ++ .long do_IRQ ! 42 bri ++ .long do_IRQ ! 43 txi ++ .long do_IRQ ! 44 DMAC dmte4 /* 780 */ ++ .long do_IRQ ! 45 dmte5 ++ .long do_IRQ ! 46 dmte6 ++ .long do_IRQ ! 47 dmte7 /* 7E0 */ ++#if defined(CONFIG_SH_FPU) ++ .long do_fpu_state_restore ! 48 /* 800 */ ++ .long do_fpu_state_restore ! 49 /* 820 */ ++#else ++ .long exception_error ++ .long exception_error ++#endif ++ .long exception_error /* 840 */ ++ .long exception_error ++ .long exception_error ++ .long exception_error ++ .long exception_error ++ .long exception_error ++ .long do_IRQ ! 56 CMT /* 900 */ ++ .long exception_error ++ .long exception_error ++ .long exception_error ++ .long do_IRQ ! 60 HAC ++ .long exception_error ++ .long exception_error ++ .long exception_error ++ .long do_IRQ ! PCI serr /* A00 */ ++ .long do_IRQ ! INTA ++ .long do_IRQ ! INTB ++ .long do_IRQ ! INTC ++ .long do_IRQ ! INTD ++ .long do_IRQ ! err ++ .long do_IRQ ! pwd3 ++ .long do_IRQ ! pwd2 ++ .long do_IRQ ! pwd1 /* B00 */ ++ .long do_IRQ ! pwd0 ++ .long exception_error ++ .long exception_error ++ .long do_IRQ ! SCIF-ch1 eri /* B80 */ ++ .long do_IRQ ! rxi ++ .long do_IRQ ! bri ++ .long do_IRQ ! txi ++ .long do_IRQ ! SIOF /* C00 */ ++ .long exception_error ++ .long exception_error ++ .long exception_error ++ .long do_IRQ ! HSPI /* C80 */ ++ .long exception_error ++ .long exception_error ++ .long exception_error ++ .long do_IRQ ! MMCIF fatat /* D00 */ ++ .long do_IRQ ! tran ++ .long do_IRQ ! err ++ .long do_IRQ ! frdy ++ .long do_IRQ ! DMAC dmint8 /* D80 */ ++ .long do_IRQ ! dmint9 ++ .long do_IRQ ! dmint10 ++ .long do_IRQ ! dmint11 ++ .long do_IRQ ! TMU-ch3 /* E00 */ ++ .long do_IRQ ! TMU-ch4 ++ .long do_IRQ ! TMU-ch5 ++ .long exception_error ++ .long do_IRQ ! SSI ++ .long exception_error ++ .long exception_error ++ .long exception_error ++ .long do_IRQ ! FLCTL flste /* F00 */ ++ .long do_IRQ ! fltend ++ .long do_IRQ ! fltrq0 ++ .long do_IRQ ! fltrq1 ++ .long do_IRQ ! GPIO gpioi0 /* F80 */ ++ .long do_IRQ ! gpioi1 ++ .long do_IRQ ! gpioi2 ++ .long do_IRQ ! gpioi3 + #endif + +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/probe.c linux-2.6.17/arch/sh/kernel/cpu/sh4/probe.c +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/probe.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh4/probe.c 2006-07-12 16:54:22.000000000 +0000 +@@ -3,7 +3,7 @@ + * + * CPU Subtype Probing for SH-4. + * +- * Copyright (C) 2001, 2002, 2003, 2004 Paul Mundt ++ * Copyright (C) 2001 - 2005 Paul Mundt + * Copyright (C) 2003 Richard Curnow + * + * This file is subject to the terms and conditions of the GNU General Public +@@ -53,9 +53,6 @@ + cpu_data->dcache.ways = 1; + cpu_data->dcache.linesz = L1_CACHE_BYTES; + +- /* Set the FPU flag, virtually all SH-4's have one */ +- cpu_data->flags |= CPU_HAS_FPU; +- + /* + * Probe the underlying processor version/revision and + * adjust cpu_data setup accordingly. +@@ -63,56 +60,99 @@ + switch (pvr) { + case 0x205: + cpu_data->type = CPU_SH7750; +- cpu_data->flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_PERF_COUNTER; ++ cpu_data->flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_FPU | ++ CPU_HAS_PERF_COUNTER | CPU_HAS_PTEA; + break; + case 0x206: + cpu_data->type = CPU_SH7750S; +- cpu_data->flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_PERF_COUNTER; ++ cpu_data->flags |= CPU_HAS_P2_FLUSH_BUG | CPU_HAS_FPU | ++ CPU_HAS_PERF_COUNTER | CPU_HAS_PTEA; + break; + case 0x1100: + cpu_data->type = CPU_SH7751; ++ cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PTEA; + break; + case 0x2000: + cpu_data->type = CPU_SH73180; + cpu_data->icache.ways = 4; + cpu_data->dcache.ways = 4; +- cpu_data->flags &= ~CPU_HAS_FPU; ++ ++ /* ++ * XXX: Double check this, none of the SH-4A/SH-4AL processors ++ * should have this, as it's essentially a legacy thing. ++ */ ++ cpu_data->flags |= CPU_HAS_PTEA; ++ break; ++ case 0x2001: ++ case 0x2004: ++ cpu_data->type = CPU_SH7770; ++ cpu_data->icache.ways = 4; ++ cpu_data->dcache.ways = 4; ++ ++ /* Same note as above applies here for PTEA */ ++ cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PTEA; ++ break; ++ case 0x2006: ++ case 0x200A: ++ if (prr == 0x61) ++ cpu_data->type = CPU_SH7781; ++ else ++ cpu_data->type = CPU_SH7780; ++ ++ cpu_data->icache.ways = 4; ++ cpu_data->dcache.ways = 4; ++ ++ cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PERF_COUNTER; + break; + case 0x8000: + cpu_data->type = CPU_ST40RA; ++ cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PTEA; + break; + case 0x8100: + cpu_data->type = CPU_ST40GX1; ++ cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PTEA; + break; + case 0x700: + cpu_data->type = CPU_SH4_501; + cpu_data->icache.ways = 2; + cpu_data->dcache.ways = 2; +- +- /* No FPU on the SH4-500 series.. */ +- cpu_data->flags &= ~CPU_HAS_FPU; ++ cpu_data->flags |= CPU_HAS_PTEA; + break; + case 0x600: + cpu_data->type = CPU_SH4_202; + cpu_data->icache.ways = 2; + cpu_data->dcache.ways = 2; ++ cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PTEA; + break; + case 0x500 ... 0x501: + switch (prr) { +- case 0x10: cpu_data->type = CPU_SH7750R; break; +- case 0x11: cpu_data->type = CPU_SH7751R; break; +- case 0x50: cpu_data->type = CPU_SH7760; break; ++ case 0x10: ++ cpu_data->type = CPU_SH7750R; ++ break; ++ case 0x11: ++ cpu_data->type = CPU_SH7751R; ++ break; ++ case 0x50 ... 0x5f: ++ cpu_data->type = CPU_SH7760; ++ break; + } + + cpu_data->icache.ways = 2; + cpu_data->dcache.ways = 2; + ++ cpu_data->flags |= CPU_HAS_FPU | CPU_HAS_PTEA; ++ + break; + default: + cpu_data->type = CPU_SH_NONE; + break; + } + ++#ifdef CONFIG_SH_DIRECT_MAPPED ++ cpu_data->icache.ways = 1; ++ cpu_data->dcache.ways = 1; ++#endif ++ + /* + * On anything that's not a direct-mapped cache, look to the CVR + * for I/D-cache specifics. +@@ -125,6 +165,9 @@ + (cpu_data->icache.way_incr - (1 << 5)); + } + ++ cpu_data->icache.way_size = cpu_data->icache.sets * ++ cpu_data->icache.linesz; ++ + if (cpu_data->dcache.ways > 1) { + size = sizes[(cvr >> 16) & 0xf]; + cpu_data->dcache.way_incr = (size >> 1); +@@ -133,6 +176,9 @@ + (cpu_data->dcache.way_incr - (1 << 5)); + } + ++ cpu_data->dcache.way_size = cpu_data->dcache.sets * ++ cpu_data->dcache.linesz; ++ + return 0; + } + +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/setup-sh7780.c linux-2.6.17/arch/sh/kernel/cpu/sh4/setup-sh7780.c +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/setup-sh7780.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh4/setup-sh7780.c 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1,52 @@ ++/* ++ * SH7780 Setup ++ * ++ * Copyright (C) 2006 Paul Mundt ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ ++#include <linux/platform_device.h> ++#include <linux/init.h> ++ ++static struct resource rtc_resources[] = { ++ [0] = { ++ .start = 0xffe80000, ++ .end = 0xffe80000 + 0x58 - 1, ++ .flags = IORESOURCE_IO, ++ }, ++ [1] = { ++ /* Period IRQ */ ++ .start = 21, ++ .flags = IORESOURCE_IRQ, ++ }, ++ [2] = { ++ /* Carry IRQ */ ++ .start = 22, ++ .flags = IORESOURCE_IRQ, ++ }, ++ [3] = { ++ /* Alarm IRQ */ ++ .start = 23, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++static struct platform_device rtc_device = { ++ .name = "sh-rtc", ++ .id = -1, ++ .num_resources = ARRAY_SIZE(rtc_resources), ++ .resource = rtc_resources, ++}; ++ ++static struct platform_device *sh7780_devices[] __initdata = { ++ &rtc_device, ++}; ++ ++static int __init sh7780_devices_setup(void) ++{ ++ return platform_add_devices(sh7780_devices, ++ ARRAY_SIZE(sh7780_devices)); ++} ++__initcall(sh7780_devices_setup); +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/sq.c linux-2.6.17/arch/sh/kernel/cpu/sh4/sq.c +--- linux-2.6.17-vanilla/arch/sh/kernel/cpu/sh4/sq.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/cpu/sh4/sq.c 2006-07-12 16:54:22.000000000 +0000 +@@ -1,50 +1,53 @@ + /* +- * arch/sh/kernel/cpu/sq.c ++ * arch/sh/kernel/cpu/sh4/sq.c + * + * General management API for SH-4 integrated Store Queues + * +- * Copyright (C) 2001, 2002, 2003, 2004 Paul Mundt ++ * Copyright (C) 2001 - 2006 Paul Mundt + * Copyright (C) 2001, 2002 M. R. Brown + * +- * Some of this code has been adopted directly from the old arch/sh/mm/sq.c +- * hack that was part of the LinuxDC project. For all intents and purposes, +- * this is a completely new interface that really doesn't have much in common +- * with the old zone-based approach at all. In fact, it's only listed here for +- * general completeness. +- * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + */ + #include <linux/init.h> ++#include <linux/cpu.h> ++#include <linux/bitmap.h> ++#include <linux/sysdev.h> + #include <linux/kernel.h> + #include <linux/module.h> + #include <linux/config.h> + #include <linux/slab.h> +-#include <linux/list.h> +-#include <linux/proc_fs.h> +-#include <linux/miscdevice.h> + #include <linux/vmalloc.h> +- ++#include <linux/mm.h> + #include <asm/io.h> + #include <asm/page.h> +-#include <asm/mmu_context.h> ++#include <asm/cacheflush.h> + #include <asm/cpu/sq.h> + +-static LIST_HEAD(sq_mapping_list); ++struct sq_mapping; ++ ++struct sq_mapping { ++ const char *name; ++ ++ unsigned long sq_addr; ++ unsigned long addr; ++ unsigned int size; ++ ++ struct sq_mapping *next; ++}; ++ ++static struct sq_mapping *sq_mapping_list; + static DEFINE_SPINLOCK(sq_mapping_lock); ++static kmem_cache_t *sq_cache; ++static unsigned long *sq_bitmap; + +-/** +- * sq_flush - Flush (prefetch) the store queue cache +- * @addr: the store queue address to flush +- * +- * Executes a prefetch instruction on the specified store queue cache, +- * so that the cached data is written to physical memory. +- */ +-inline void sq_flush(void *addr) +-{ +- __asm__ __volatile__ ("pref @%0" : : "r" (addr) : "memory"); +-} ++#define store_queue_barrier() \ ++do { \ ++ (void)ctrl_inl(P4SEG_STORE_QUE); \ ++ ctrl_outl(0, P4SEG_STORE_QUE + 0); \ ++ ctrl_outl(0, P4SEG_STORE_QUE + 8); \ ++} while (0); + + /** + * sq_flush_range - Flush (prefetch) a specific SQ range +@@ -57,152 +60,73 @@ + void sq_flush_range(unsigned long start, unsigned int len) + { + volatile unsigned long *sq = (unsigned long *)start; +- unsigned long dummy; + + /* Flush the queues */ + for (len >>= 5; len--; sq += 8) +- sq_flush((void *)sq); ++ prefetchw((void *)sq); + + /* Wait for completion */ +- dummy = ctrl_inl(P4SEG_STORE_QUE); +- +- ctrl_outl(0, P4SEG_STORE_QUE + 0); +- ctrl_outl(0, P4SEG_STORE_QUE + 8); ++ store_queue_barrier(); + } + +-static struct sq_mapping *__sq_alloc_mapping(unsigned long virt, unsigned long phys, unsigned long size, const char *name) ++static inline void sq_mapping_list_add(struct sq_mapping *map) + { +- struct sq_mapping *map; +- +- if (virt + size > SQ_ADDRMAX) +- return ERR_PTR(-ENOSPC); ++ struct sq_mapping **p, *tmp; + +- map = kmalloc(sizeof(struct sq_mapping), GFP_KERNEL); +- if (!map) +- return ERR_PTR(-ENOMEM); ++ spin_lock_irq(&sq_mapping_lock); + +- INIT_LIST_HEAD(&map->list); ++ p = &sq_mapping_list; ++ while ((tmp = *p) != NULL) ++ p = &tmp->next; + +- map->sq_addr = virt; +- map->addr = phys; +- map->size = size + 1; +- map->name = name; ++ map->next = tmp; ++ *p = map; + +- list_add(&map->list, &sq_mapping_list); +- +- return map; ++ spin_unlock_irq(&sq_mapping_lock); + } + +-static unsigned long __sq_get_next_addr(void) ++static inline void sq_mapping_list_del(struct sq_mapping *map) + { +- if (!list_empty(&sq_mapping_list)) { +- struct list_head *pos, *tmp; +- +- /* +- * Read one off the list head, as it will have the highest +- * mapped allocation. Set the next one up right above it. +- * +- * This is somewhat sub-optimal, as we don't look at +- * gaps between allocations or anything lower then the +- * highest-level allocation. +- * +- * However, in the interest of performance and the general +- * lack of desire to do constant list rebalancing, we don't +- * worry about it. +- */ +- list_for_each_safe(pos, tmp, &sq_mapping_list) { +- struct sq_mapping *entry; ++ struct sq_mapping **p, *tmp; + +- entry = list_entry(pos, typeof(*entry), list); ++ spin_lock_irq(&sq_mapping_lock); + +- return entry->sq_addr + entry->size; ++ for (p = &sq_mapping_list; (tmp = *p); p = &tmp->next) ++ if (tmp == map) { ++ *p = tmp->next; ++ break; + } +- } + +- return P4SEG_STORE_QUE; ++ spin_unlock_irq(&sq_mapping_lock); + } + +-/** +- * __sq_remap - Perform a translation from the SQ to a phys addr +- * @map: sq mapping containing phys and store queue addresses. +- * +- * Maps the store queue address specified in the mapping to the physical +- * address specified in the mapping. +- */ +-static struct sq_mapping *__sq_remap(struct sq_mapping *map) ++static int __sq_remap(struct sq_mapping *map, unsigned long flags) + { +- unsigned long flags, pteh, ptel; ++#if defined(CONFIG_MMU) + struct vm_struct *vma; +- pgprot_t pgprot; +- +- /* +- * Without an MMU (or with it turned off), this is much more +- * straightforward, as we can just load up each queue's QACR with +- * the physical address appropriately masked. +- */ +- +- ctrl_outl(((map->addr >> 26) << 2) & 0x1c, SQ_QACR0); +- ctrl_outl(((map->addr >> 26) << 2) & 0x1c, SQ_QACR1); +- +-#ifdef CONFIG_MMU +- /* +- * With an MMU on the other hand, things are slightly more involved. +- * Namely, we have to have a direct mapping between the SQ addr and +- * the associated physical address in the UTLB by way of setting up +- * a virt<->phys translation by hand. We do this by simply specifying +- * the SQ addr in UTLB.VPN and the associated physical address in +- * UTLB.PPN. +- * +- * Notably, even though this is a special case translation, and some +- * of the configuration bits are meaningless, we're still required +- * to have a valid ASID context in PTEH. +- * +- * We could also probably get by without explicitly setting PTEA, but +- * we do it here just for good measure. +- */ +- spin_lock_irqsave(&sq_mapping_lock, flags); +- +- pteh = map->sq_addr; +- ctrl_outl((pteh & MMU_VPN_MASK) | get_asid(), MMU_PTEH); +- +- ptel = map->addr & PAGE_MASK; +- ctrl_outl(((ptel >> 28) & 0xe) | (ptel & 0x1), MMU_PTEA); +- +- pgprot = pgprot_noncached(PAGE_KERNEL); +- +- ptel &= _PAGE_FLAGS_HARDWARE_MASK; +- ptel |= pgprot_val(pgprot); +- ctrl_outl(ptel, MMU_PTEL); + +- __asm__ __volatile__ ("ldtlb" : : : "memory"); +- +- spin_unlock_irqrestore(&sq_mapping_lock, flags); +- +- /* +- * Next, we need to map ourselves in the kernel page table, so that +- * future accesses after a TLB flush will be handled when we take a +- * page fault. +- * +- * Theoretically we could just do this directly and not worry about +- * setting up the translation by hand ahead of time, but for the +- * cases where we want a one-shot SQ mapping followed by a quick +- * writeout before we hit the TLB flush, we do it anyways. This way +- * we at least save ourselves the initial page fault overhead. +- */ + vma = __get_vm_area(map->size, VM_ALLOC, map->sq_addr, SQ_ADDRMAX); + if (!vma) +- return ERR_PTR(-ENOMEM); ++ return -ENOMEM; + + vma->phys_addr = map->addr; + + if (remap_area_pages((unsigned long)vma->addr, vma->phys_addr, +- map->size, pgprot_val(pgprot))) { ++ map->size, flags)) { + vunmap(vma->addr); +- return NULL; ++ return -EAGAIN; + } +-#endif /* CONFIG_MMU */ ++#else ++ /* ++ * Without an MMU (or with it turned off), this is much more ++ * straightforward, as we can just load up each queue's QACR with ++ * the physical address appropriately masked. ++ */ ++ ctrl_outl(((map->addr >> 26) << 2) & 0x1c, SQ_QACR0); ++ ctrl_outl(((map->addr >> 26) << 2) & 0x1c, SQ_QACR1); ++#endif + +- return map; ++ return 0; + } + + /** +@@ -210,42 +134,65 @@ + * @phys: Physical address of mapping. + * @size: Length of mapping. + * @name: User invoking mapping. ++ * @flags: Protection flags. + * + * Remaps the physical address @phys through the next available store queue + * address of @size length. @name is logged at boot time as well as through +- * the procfs interface. +- * +- * A pre-allocated and filled sq_mapping pointer is returned, and must be +- * cleaned up with a call to sq_unmap() when the user is done with the +- * mapping. ++ * the sysfs interface. + */ +-struct sq_mapping *sq_remap(unsigned long phys, unsigned int size, const char *name) ++unsigned long sq_remap(unsigned long phys, unsigned int size, ++ const char *name, unsigned long flags) + { + struct sq_mapping *map; +- unsigned long virt, end; ++ unsigned long end; + unsigned int psz; ++ int ret, page; + + /* Don't allow wraparound or zero size */ + end = phys + size - 1; +- if (!size || end < phys) +- return NULL; ++ if (unlikely(!size || end < phys)) ++ return -EINVAL; + /* Don't allow anyone to remap normal memory.. */ +- if (phys < virt_to_phys(high_memory)) +- return NULL; ++ if (unlikely(phys < virt_to_phys(high_memory))) ++ return -EINVAL; + + phys &= PAGE_MASK; ++ size = PAGE_ALIGN(end + 1) - phys; ++ ++ map = kmem_cache_alloc(sq_cache, GFP_KERNEL); ++ if (unlikely(!map)) ++ return -ENOMEM; ++ ++ map->addr = phys; ++ map->size = size; ++ map->name = name; ++ ++ page = bitmap_find_free_region(sq_bitmap, 0x04000000, ++ get_order(map->size)); ++ if (unlikely(page < 0)) { ++ ret = -ENOSPC; ++ goto out; ++ } ++ ++ map->sq_addr = P4SEG_STORE_QUE + (page << PAGE_SHIFT); ++ ++ ret = __sq_remap(map, flags); ++ if (unlikely(ret != 0)) ++ goto out; ++ ++ psz = (size + (PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ pr_info("sqremap: %15s [%4d page%s] va 0x%08lx pa 0x%08lx\n", ++ likely(map->name) ? map->name : "???", ++ psz, psz == 1 ? " " : "s", ++ map->sq_addr, map->addr); ++ ++ sq_mapping_list_add(map); + +- size = PAGE_ALIGN(end + 1) - phys; +- virt = __sq_get_next_addr(); +- psz = (size + (PAGE_SIZE - 1)) / PAGE_SIZE; +- map = __sq_alloc_mapping(virt, phys, size, name); +- +- printk("sqremap: %15s [%4d page%s] va 0x%08lx pa 0x%08lx\n", +- map->name ? map->name : "???", +- psz, psz == 1 ? " " : "s", +- map->sq_addr, map->addr); ++ return map->sq_addr; + +- return __sq_remap(map); ++out: ++ kmem_cache_free(sq_cache, map); ++ return ret; + } + + /** +@@ -256,185 +203,196 @@ + * sq_remap(). Also frees up the pte that was previously inserted into + * the kernel page table and discards the UTLB translation. + */ +-void sq_unmap(struct sq_mapping *map) ++void sq_unmap(unsigned long vaddr) + { +- if (map->sq_addr > (unsigned long)high_memory) +- vfree((void *)(map->sq_addr & PAGE_MASK)); ++ struct sq_mapping **p, *map; ++ struct vm_struct *vma; ++ int page; + +- list_del(&map->list); +- kfree(map); +-} ++ for (p = &sq_mapping_list; (map = *p); p = &map->next) ++ if (map->sq_addr == vaddr) ++ break; ++ ++ if (unlikely(!map)) { ++ printk("%s: bad store queue address 0x%08lx\n", ++ __FUNCTION__, vaddr); ++ return; ++ } + +-/** +- * sq_clear - Clear a store queue range +- * @addr: Address to start clearing from. +- * @len: Length to clear. +- * +- * A quick zero-fill implementation for clearing out memory that has been +- * remapped through the store queues. +- */ +-void sq_clear(unsigned long addr, unsigned int len) +-{ +- int i; ++ page = (map->sq_addr - P4SEG_STORE_QUE) >> PAGE_SHIFT; ++ bitmap_release_region(sq_bitmap, page, get_order(map->size)); + +- /* Clear out both queues linearly */ +- for (i = 0; i < 8; i++) { +- ctrl_outl(0, addr + i + 0); +- ctrl_outl(0, addr + i + 8); ++ vma = remove_vm_area((void *)(map->sq_addr & PAGE_MASK)); ++ if (!vma) { ++ printk(KERN_ERR "%s: bad address 0x%08lx\n", ++ __FUNCTION__, map->sq_addr); ++ return; + } + +- sq_flush_range(addr, len); ++ sq_mapping_list_del(map); ++ ++ kmem_cache_free(sq_cache, map); + } + +-/** +- * sq_vma_unmap - Unmap a VMA range +- * @area: VMA containing range. +- * @addr: Start of range. +- * @len: Length of range. +- * +- * Searches the sq_mapping_list for a mapping matching the sq addr @addr, +- * and subsequently frees up the entry. Further cleanup is done by generic +- * code. ++/* ++ * Needlessly complex sysfs interface. Unfortunately it doesn't seem like ++ * there is any other easy way to add things on a per-cpu basis without ++ * putting the directory entries somewhere stupid and having to create ++ * links in sysfs by hand back in to the per-cpu directories. ++ * ++ * Some day we may want to have an additional abstraction per store ++ * queue, but considering the kobject hell we already have to deal with, ++ * it's simply not worth the trouble. + */ +-static void sq_vma_unmap(struct vm_area_struct *area, +- unsigned long addr, size_t len) +-{ +- struct list_head *pos, *tmp; ++static struct kobject *sq_kobject[NR_CPUS]; + +- list_for_each_safe(pos, tmp, &sq_mapping_list) { +- struct sq_mapping *entry; ++struct sq_sysfs_attr { ++ struct attribute attr; ++ ssize_t (*show)(char *buf); ++ ssize_t (*store)(const char *buf, size_t count); ++}; + +- entry = list_entry(pos, typeof(*entry), list); ++#define to_sq_sysfs_attr(attr) container_of(attr, struct sq_sysfs_attr, attr) + +- if (entry->sq_addr == addr) { +- /* +- * We could probably get away without doing the tlb flush +- * here, as generic code should take care of most of this +- * when unmapping the rest of the VMA range for us. Leave +- * it in for added sanity for the time being.. +- */ +- __flush_tlb_page(get_asid(), entry->sq_addr & PAGE_MASK); ++static ssize_t sq_sysfs_show(struct kobject *kobj, struct attribute *attr, ++ char *buf) ++{ ++ struct sq_sysfs_attr *sattr = to_sq_sysfs_attr(attr); + +- list_del(&entry->list); +- kfree(entry); ++ if (likely(sattr->show)) ++ return sattr->show(buf); + +- return; +- } +- } ++ return -EIO; + } + +-/** +- * sq_vma_sync - Sync a VMA range +- * @area: VMA containing range. +- * @start: Start of range. +- * @len: Length of range. +- * @flags: Additional flags. +- * +- * Synchronizes an sq mapped range by flushing the store queue cache for +- * the duration of the mapping. +- * +- * Used internally for user mappings, which must use msync() to prefetch +- * the store queue cache. +- */ +-static int sq_vma_sync(struct vm_area_struct *area, +- unsigned long start, size_t len, unsigned int flags) ++static ssize_t sq_sysfs_store(struct kobject *kobj, struct attribute *attr, ++ const char *buf, size_t count) + { +- sq_flush_range(start, len); ++ struct sq_sysfs_attr *sattr = to_sq_sysfs_attr(attr); + +- return 0; ++ if (likely(sattr->store)) ++ return sattr->store(buf, count); ++ ++ return -EIO; + } + +-static struct vm_operations_struct sq_vma_ops = { +- .unmap = sq_vma_unmap, +- .sync = sq_vma_sync, +-}; ++static ssize_t mapping_show(char *buf) ++{ ++ struct sq_mapping **list, *entry; ++ char *p = buf; + +-/** +- * sq_mmap - mmap() for /dev/cpu/sq +- * @file: unused. +- * @vma: VMA to remap. +- * +- * Remap the specified vma @vma through the store queues, and setup associated +- * information for the new mapping. Also build up the page tables for the new +- * area. +- */ +-static int sq_mmap(struct file *file, struct vm_area_struct *vma) ++ for (list = &sq_mapping_list; (entry = *list); list = &entry->next) ++ p += sprintf(p, "%08lx-%08lx [%08lx]: %s\n", ++ entry->sq_addr, entry->sq_addr + entry->size, ++ entry->addr, entry->name); ++ ++ return p - buf; ++} ++ ++static ssize_t mapping_store(const char *buf, size_t count) + { +- unsigned long offset = vma->vm_pgoff << PAGE_SHIFT; +- unsigned long size = vma->vm_end - vma->vm_start; +- struct sq_mapping *map; ++ unsigned long base = 0, len = 0; + +- /* +- * We're not interested in any arbitrary virtual address that has +- * been stuck in the VMA, as we already know what addresses we +- * want. Save off the size, and reposition the VMA to begin at +- * the next available sq address. +- */ +- vma->vm_start = __sq_get_next_addr(); +- vma->vm_end = vma->vm_start + size; ++ sscanf(buf, "%lx %lx", &base, &len); ++ if (!base) ++ return -EIO; + +- vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); ++ if (likely(len)) { ++ int ret = sq_remap(base, len, "Userspace", ++ pgprot_val(PAGE_SHARED)); ++ if (ret < 0) ++ return ret; ++ } else ++ sq_unmap(base); + +- vma->vm_flags |= VM_IO | VM_RESERVED; ++ return count; ++} + +- map = __sq_alloc_mapping(vma->vm_start, offset, size, "Userspace"); ++static struct sq_sysfs_attr mapping_attr = ++ __ATTR(mapping, 0644, mapping_show, mapping_store); + +- if (io_remap_pfn_range(vma, map->sq_addr, map->addr >> PAGE_SHIFT, +- size, vma->vm_page_prot)) +- return -EAGAIN; ++static struct attribute *sq_sysfs_attrs[] = { ++ &mapping_attr.attr, ++ NULL, ++}; + +- vma->vm_ops = &sq_vma_ops; ++static struct sysfs_ops sq_sysfs_ops = { ++ .show = sq_sysfs_show, ++ .store = sq_sysfs_store, ++}; + +- return 0; +-} ++static struct kobj_type ktype_percpu_entry = { ++ .sysfs_ops = &sq_sysfs_ops, ++ .default_attrs = sq_sysfs_attrs, ++}; + +-#ifdef CONFIG_PROC_FS +-static int sq_mapping_read_proc(char *buf, char **start, off_t off, +- int len, int *eof, void *data) ++static int __devinit sq_sysdev_add(struct sys_device *sysdev) + { +- struct list_head *pos; +- char *p = buf; ++ unsigned int cpu = sysdev->id; ++ struct kobject *kobj; + +- list_for_each_prev(pos, &sq_mapping_list) { +- struct sq_mapping *entry; ++ sq_kobject[cpu] = kzalloc(sizeof(struct kobject), GFP_KERNEL); ++ if (unlikely(!sq_kobject[cpu])) ++ return -ENOMEM; + +- entry = list_entry(pos, typeof(*entry), list); ++ kobj = sq_kobject[cpu]; ++ kobj->parent = &sysdev->kobj; ++ kobject_set_name(kobj, "%s", "sq"); ++ kobj->ktype = &ktype_percpu_entry; + +- p += sprintf(p, "%08lx-%08lx [%08lx]: %s\n", entry->sq_addr, +- entry->sq_addr + entry->size - 1, entry->addr, +- entry->name); +- } +- +- return p - buf; ++ return kobject_register(kobj); + } +-#endif + +-static struct file_operations sq_fops = { +- .owner = THIS_MODULE, +- .mmap = sq_mmap, +-}; ++static int __devexit sq_sysdev_remove(struct sys_device *sysdev) ++{ ++ unsigned int cpu = sysdev->id; ++ struct kobject *kobj = sq_kobject[cpu]; ++ ++ kobject_unregister(kobj); ++ return 0; ++} + +-static struct miscdevice sq_dev = { +- .minor = STORE_QUEUE_MINOR, +- .name = "sq", +- .devfs_name = "cpu/sq", +- .fops = &sq_fops, ++static struct sysdev_driver sq_sysdev_driver = { ++ .add = sq_sysdev_add, ++ .remove = __devexit_p(sq_sysdev_remove), + }; + + static int __init sq_api_init(void) + { ++ unsigned int nr_pages = 0x04000000 >> PAGE_SHIFT; ++ unsigned int size = (nr_pages + (BITS_PER_LONG - 1)) / BITS_PER_LONG; ++ int ret = -ENOMEM; ++ + printk(KERN_NOTICE "sq: Registering store queue API.\n"); + +-#ifdef CONFIG_PROC_FS +- create_proc_read_entry("sq_mapping", 0, 0, sq_mapping_read_proc, 0); +-#endif ++ sq_cache = kmem_cache_create("store_queue_cache", ++ sizeof(struct sq_mapping), 0, 0, ++ NULL, NULL); ++ if (unlikely(!sq_cache)) ++ return ret; ++ ++ sq_bitmap = kzalloc(size, GFP_KERNEL); ++ if (unlikely(!sq_bitmap)) ++ goto out; ++ ++ ret = sysdev_driver_register(&cpu_sysdev_class, &sq_sysdev_driver); ++ if (unlikely(ret != 0)) ++ goto out; + +- return misc_register(&sq_dev); ++ return 0; ++ ++out: ++ kfree(sq_bitmap); ++ kmem_cache_destroy(sq_cache); ++ ++ return ret; + } + + static void __exit sq_api_exit(void) + { +- misc_deregister(&sq_dev); ++ sysdev_driver_unregister(&cpu_sysdev_class, &sq_sysdev_driver); ++ kfree(sq_bitmap); ++ kmem_cache_destroy(sq_cache); + } + + module_init(sq_api_init); +@@ -443,11 +401,7 @@ + MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>, M. R. Brown <mrbrown@0xd6.org>"); + MODULE_DESCRIPTION("Simple API for SH-4 integrated Store Queues"); + MODULE_LICENSE("GPL"); +-MODULE_ALIAS_MISCDEV(STORE_QUEUE_MINOR); + + EXPORT_SYMBOL(sq_remap); + EXPORT_SYMBOL(sq_unmap); +-EXPORT_SYMBOL(sq_clear); +-EXPORT_SYMBOL(sq_flush); + EXPORT_SYMBOL(sq_flush_range); +- +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/early_printk.c linux-2.6.17/arch/sh/kernel/early_printk.c +--- linux-2.6.17-vanilla/arch/sh/kernel/early_printk.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/early_printk.c 2006-07-12 16:54:22.000000000 +0000 +@@ -59,34 +59,42 @@ + #endif + + #ifdef CONFIG_EARLY_SCIF_CONSOLE ++#include <linux/serial_core.h> ++#include "../../../drivers/serial/sh-sci.h" ++ ++#ifdef CONFIG_CPU_SH4 + #define SCIF_REG 0xffe80000 ++#elif defined(CONFIG_CPU_SUBTYPE_SH72060) ++#define SCIF_REG 0xfffe9800 ++#else ++#error "Undefined SCIF for this subtype" ++#endif ++ ++static struct uart_port scif_port = { ++ .mapbase = SCIF_REG, ++ .membase = (char *)SCIF_REG, ++}; + + static void scif_sercon_putc(int c) + { +- while (!(ctrl_inw(SCIF_REG + 0x10) & 0x20)) ; ++ while (((sci_in(&scif_port, SCFDR) & 0x1f00 >> 8) == 16)) ++ ; ++ ++ sci_out(&scif_port, SCxTDR, c); ++ sci_in(&scif_port, SCxSR); ++ sci_out(&scif_port, SCxSR, 0xf3 & ~(0x20 | 0x40)); + +- ctrl_outb(c, SCIF_REG + 12); +- ctrl_outw((ctrl_inw(SCIF_REG + 0x10) & 0x9f), SCIF_REG + 0x10); ++ while ((sci_in(&scif_port, SCxSR) & 0x40) == 0); ++ ; + + if (c == '\n') + scif_sercon_putc('\r'); + } + +-static void scif_sercon_flush(void) +-{ +- ctrl_outw((ctrl_inw(SCIF_REG + 0x10) & 0xbf), SCIF_REG + 0x10); +- +- while (!(ctrl_inw(SCIF_REG + 0x10) & 0x40)) ; +- +- ctrl_outw((ctrl_inw(SCIF_REG + 0x10) & 0xbf), SCIF_REG + 0x10); +-} +- + static void scif_sercon_write(struct console *con, const char *s, unsigned count) + { + while (count-- > 0) + scif_sercon_putc(*s++); +- +- scif_sercon_flush(); + } + + static int __init scif_sercon_setup(struct console *con, char *options) +@@ -124,7 +132,7 @@ + + void __init enable_early_printk(void) + { +-#ifdef CONFIG_EARLY_SCIF_CONSOLE ++#if defined(CONFIG_EARLY_SCIF_CONSOLE) && defined(CONFIG_CPU_SH4) + scif_sercon_init(115200); + #endif + register_console(&early_console); +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/entry.S linux-2.6.17/arch/sh/kernel/entry.S +--- linux-2.6.17-vanilla/arch/sh/kernel/entry.S 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/entry.S 2006-07-12 16:54:22.000000000 +0000 +@@ -19,24 +19,6 @@ + #include <asm/cpu/mmu_context.h> + #include <asm/unistd.h> + +-#if !defined(CONFIG_NFSD) && !defined(CONFIG_NFSD_MODULE) +-#define sys_nfsservctl sys_ni_syscall +-#endif +- +-#if !defined(CONFIG_MMU) +-#define sys_madvise sys_ni_syscall +-#define sys_readahead sys_ni_syscall +-#define sys_mprotect sys_ni_syscall +-#define sys_msync sys_ni_syscall +-#define sys_mlock sys_ni_syscall +-#define sys_munlock sys_ni_syscall +-#define sys_mlockall sys_ni_syscall +-#define sys_munlockall sys_ni_syscall +-#define sys_mremap sys_ni_syscall +-#define sys_mincore sys_ni_syscall +-#define sys_remap_file_pages sys_ni_syscall +-#endif +- + ! NOTE: + ! GNU as (as of 2.9.1) changes bf/s into bt/s and bra, when the address + ! to be jumped is too far, but it causes illegal slot exception. +@@ -327,7 +309,7 @@ + .align 2 + ret_from_exception: + preempt_stop() +-ret_from_irq: ++ENTRY(ret_from_irq) + ! + mov #OFF_SR, r0 + mov.l @(r0,r15), r0 ! get status register +@@ -645,7 +627,7 @@ + ! + #if defined(CONFIG_KGDB_NMI) + ! Clear in_nmi +- mov.l 4f, k0 ++ mov.l 6f, k0 + mov #0, k1 + mov.b k1, @k0 + #endif +@@ -723,7 +705,7 @@ + ! + ! + .align 2 +-handle_exception: ++ENTRY(handle_exception) + ! Using k0, k1 for scratch registers (r0_bank1, r1_bank), + ! save all registers onto stack. + ! +@@ -839,300 +821,3 @@ + rts + nop + +- .data +-ENTRY(sys_call_table) +- .long sys_ni_syscall /* 0 - old "setup()" system call*/ +- .long sys_exit +- .long sys_fork +- .long sys_read +- .long sys_write +- .long sys_open /* 5 */ +- .long sys_close +- .long sys_waitpid +- .long sys_creat +- .long sys_link +- .long sys_unlink /* 10 */ +- .long sys_execve +- .long sys_chdir +- .long sys_time +- .long sys_mknod +- .long sys_chmod /* 15 */ +- .long sys_lchown16 +- .long sys_ni_syscall /* old break syscall holder */ +- .long sys_stat +- .long sys_lseek +- .long sys_getpid /* 20 */ +- .long sys_mount +- .long sys_oldumount +- .long sys_setuid16 +- .long sys_getuid16 +- .long sys_stime /* 25 */ +- .long sys_ptrace +- .long sys_alarm +- .long sys_fstat +- .long sys_pause +- .long sys_utime /* 30 */ +- .long sys_ni_syscall /* old stty syscall holder */ +- .long sys_ni_syscall /* old gtty syscall holder */ +- .long sys_access +- .long sys_nice +- .long sys_ni_syscall /* 35 */ /* old ftime syscall holder */ +- .long sys_sync +- .long sys_kill +- .long sys_rename +- .long sys_mkdir +- .long sys_rmdir /* 40 */ +- .long sys_dup +- .long sys_pipe +- .long sys_times +- .long sys_ni_syscall /* old prof syscall holder */ +- .long sys_brk /* 45 */ +- .long sys_setgid16 +- .long sys_getgid16 +- .long sys_signal +- .long sys_geteuid16 +- .long sys_getegid16 /* 50 */ +- .long sys_acct +- .long sys_umount /* recycled never used phys() */ +- .long sys_ni_syscall /* old lock syscall holder */ +- .long sys_ioctl +- .long sys_fcntl /* 55 */ +- .long sys_ni_syscall /* old mpx syscall holder */ +- .long sys_setpgid +- .long sys_ni_syscall /* old ulimit syscall holder */ +- .long sys_ni_syscall /* sys_olduname */ +- .long sys_umask /* 60 */ +- .long sys_chroot +- .long sys_ustat +- .long sys_dup2 +- .long sys_getppid +- .long sys_getpgrp /* 65 */ +- .long sys_setsid +- .long sys_sigaction +- .long sys_sgetmask +- .long sys_ssetmask +- .long sys_setreuid16 /* 70 */ +- .long sys_setregid16 +- .long sys_sigsuspend +- .long sys_sigpending +- .long sys_sethostname +- .long sys_setrlimit /* 75 */ +- .long sys_old_getrlimit +- .long sys_getrusage +- .long sys_gettimeofday +- .long sys_settimeofday +- .long sys_getgroups16 /* 80 */ +- .long sys_setgroups16 +- .long sys_ni_syscall /* sys_oldselect */ +- .long sys_symlink +- .long sys_lstat +- .long sys_readlink /* 85 */ +- .long sys_uselib +- .long sys_swapon +- .long sys_reboot +- .long old_readdir +- .long old_mmap /* 90 */ +- .long sys_munmap +- .long sys_truncate +- .long sys_ftruncate +- .long sys_fchmod +- .long sys_fchown16 /* 95 */ +- .long sys_getpriority +- .long sys_setpriority +- .long sys_ni_syscall /* old profil syscall holder */ +- .long sys_statfs +- .long sys_fstatfs /* 100 */ +- .long sys_ni_syscall /* ioperm */ +- .long sys_socketcall +- .long sys_syslog +- .long sys_setitimer +- .long sys_getitimer /* 105 */ +- .long sys_newstat +- .long sys_newlstat +- .long sys_newfstat +- .long sys_uname +- .long sys_ni_syscall /* 110 */ /* iopl */ +- .long sys_vhangup +- .long sys_ni_syscall /* idle */ +- .long sys_ni_syscall /* vm86old */ +- .long sys_wait4 +- .long sys_swapoff /* 115 */ +- .long sys_sysinfo +- .long sys_ipc +- .long sys_fsync +- .long sys_sigreturn +- .long sys_clone /* 120 */ +- .long sys_setdomainname +- .long sys_newuname +- .long sys_ni_syscall /* sys_modify_ldt */ +- .long sys_adjtimex +- .long sys_mprotect /* 125 */ +- .long sys_sigprocmask +- .long sys_ni_syscall /* old "create_module" */ +- .long sys_init_module +- .long sys_delete_module +- .long sys_ni_syscall /* 130: old "get_kernel_syms" */ +- .long sys_quotactl +- .long sys_getpgid +- .long sys_fchdir +- .long sys_bdflush +- .long sys_sysfs /* 135 */ +- .long sys_personality +- .long sys_ni_syscall /* for afs_syscall */ +- .long sys_setfsuid16 +- .long sys_setfsgid16 +- .long sys_llseek /* 140 */ +- .long sys_getdents +- .long sys_select +- .long sys_flock +- .long sys_msync +- .long sys_readv /* 145 */ +- .long sys_writev +- .long sys_getsid +- .long sys_fdatasync +- .long sys_sysctl +- .long sys_mlock /* 150 */ +- .long sys_munlock +- .long sys_mlockall +- .long sys_munlockall +- .long sys_sched_setparam +- .long sys_sched_getparam /* 155 */ +- .long sys_sched_setscheduler +- .long sys_sched_getscheduler +- .long sys_sched_yield +- .long sys_sched_get_priority_max +- .long sys_sched_get_priority_min /* 160 */ +- .long sys_sched_rr_get_interval +- .long sys_nanosleep +- .long sys_mremap +- .long sys_setresuid16 +- .long sys_getresuid16 /* 165 */ +- .long sys_ni_syscall /* vm86 */ +- .long sys_ni_syscall /* old "query_module" */ +- .long sys_poll +- .long sys_nfsservctl +- .long sys_setresgid16 /* 170 */ +- .long sys_getresgid16 +- .long sys_prctl +- .long sys_rt_sigreturn +- .long sys_rt_sigaction +- .long sys_rt_sigprocmask /* 175 */ +- .long sys_rt_sigpending +- .long sys_rt_sigtimedwait +- .long sys_rt_sigqueueinfo +- .long sys_rt_sigsuspend +- .long sys_pread_wrapper /* 180 */ +- .long sys_pwrite_wrapper +- .long sys_chown16 +- .long sys_getcwd +- .long sys_capget +- .long sys_capset /* 185 */ +- .long sys_sigaltstack +- .long sys_sendfile +- .long sys_ni_syscall /* streams1 */ +- .long sys_ni_syscall /* streams2 */ +- .long sys_vfork /* 190 */ +- .long sys_getrlimit +- .long sys_mmap2 +- .long sys_truncate64 +- .long sys_ftruncate64 +- .long sys_stat64 /* 195 */ +- .long sys_lstat64 +- .long sys_fstat64 +- .long sys_lchown +- .long sys_getuid +- .long sys_getgid /* 200 */ +- .long sys_geteuid +- .long sys_getegid +- .long sys_setreuid +- .long sys_setregid +- .long sys_getgroups /* 205 */ +- .long sys_setgroups +- .long sys_fchown +- .long sys_setresuid +- .long sys_getresuid +- .long sys_setresgid /* 210 */ +- .long sys_getresgid +- .long sys_chown +- .long sys_setuid +- .long sys_setgid +- .long sys_setfsuid /* 215 */ +- .long sys_setfsgid +- .long sys_pivot_root +- .long sys_mincore +- .long sys_madvise +- .long sys_getdents64 /* 220 */ +- .long sys_fcntl64 +- .long sys_ni_syscall /* reserved for TUX */ +- .long sys_ni_syscall /* Reserved for Security */ +- .long sys_gettid +- .long sys_readahead /* 225 */ +- .long sys_setxattr +- .long sys_lsetxattr +- .long sys_fsetxattr +- .long sys_getxattr +- .long sys_lgetxattr /* 230 */ +- .long sys_fgetxattr +- .long sys_listxattr +- .long sys_llistxattr +- .long sys_flistxattr +- .long sys_removexattr /* 235 */ +- .long sys_lremovexattr +- .long sys_fremovexattr +- .long sys_tkill +- .long sys_sendfile64 +- .long sys_futex /* 240 */ +- .long sys_sched_setaffinity +- .long sys_sched_getaffinity +- .long sys_ni_syscall +- .long sys_ni_syscall +- .long sys_io_setup /* 245 */ +- .long sys_io_destroy +- .long sys_io_getevents +- .long sys_io_submit +- .long sys_io_cancel +- .long sys_fadvise64 /* 250 */ +- .long sys_ni_syscall +- .long sys_exit_group +- .long sys_lookup_dcookie +- .long sys_epoll_create +- .long sys_epoll_ctl /* 255 */ +- .long sys_epoll_wait +- .long sys_remap_file_pages +- .long sys_set_tid_address +- .long sys_timer_create +- .long sys_timer_settime /* 260 */ +- .long sys_timer_gettime +- .long sys_timer_getoverrun +- .long sys_timer_delete +- .long sys_clock_settime +- .long sys_clock_gettime /* 265 */ +- .long sys_clock_getres +- .long sys_clock_nanosleep +- .long sys_statfs64 +- .long sys_fstatfs64 +- .long sys_tgkill /* 270 */ +- .long sys_utimes +- .long sys_fadvise64_64_wrapper +- .long sys_ni_syscall /* Reserved for vserver */ +- .long sys_ni_syscall /* Reserved for mbind */ +- .long sys_ni_syscall /* 275 - get_mempolicy */ +- .long sys_ni_syscall /* set_mempolicy */ +- .long sys_mq_open +- .long sys_mq_unlink +- .long sys_mq_timedsend +- .long sys_mq_timedreceive /* 280 */ +- .long sys_mq_notify +- .long sys_mq_getsetattr +- .long sys_ni_syscall /* Reserved for kexec */ +- .long sys_waitid +- .long sys_add_key /* 285 */ +- .long sys_request_key +- .long sys_keyctl +- .long sys_ioprio_set +- .long sys_ioprio_get +- .long sys_inotify_init /* 290 */ +- .long sys_inotify_add_watch +- .long sys_inotify_rm_watch +- +-/* End of entry.S */ +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/head.S linux-2.6.17/arch/sh/kernel/head.S +--- linux-2.6.17-vanilla/arch/sh/kernel/head.S 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/head.S 2006-07-12 16:54:22.000000000 +0000 +@@ -12,6 +12,17 @@ + */ + #include <linux/linkage.h> + ++#ifdef CONFIG_CPU_SH4A ++#define SYNCO() synco ++ ++#define PREFI(label, reg) \ ++ mov.l label, reg; \ ++ prefi @reg ++#else ++#define SYNCO() ++#define PREFI(label, reg) ++#endif ++ + .section .empty_zero_page, "aw" + ENTRY(empty_zero_page) + .long 1 /* MOUNT_ROOT_RDONLY */ +@@ -42,6 +53,17 @@ + ! Initialize global interrupt mask + mov #0, r0 + ldc r0, r6_bank ++ ++ /* ++ * Prefetch if possible to reduce cache miss penalty. ++ * ++ * We do this early on for SH-4A as a micro-optimization, ++ * as later on we will have speculative execution enabled ++ * and this will become less of an issue. ++ */ ++ PREFI(5f, r0) ++ PREFI(6f, r0) ++ + ! + mov.l 2f, r0 + mov r0, r15 ! Set initial r15 (stack pointer) +@@ -49,11 +71,7 @@ + shll8 r1 ! r1 = 8192 + sub r1, r0 ! + ldc r0, r7_bank ! ... and initial thread_info +- ! +- ! Additional CPU initialization +- mov.l 6f, r0 +- jsr @r0 +- nop ++ + ! Clear BSS area + mov.l 3f, r1 + add #4, r1 +@@ -62,6 +80,14 @@ + 9: cmp/hs r2, r1 + bf/s 9b ! while (r1 < r2) + mov.l r0,@-r2 ++ ++ ! Additional CPU initialization ++ mov.l 6f, r0 ++ jsr @r0 ++ nop ++ ++ SYNCO() ! Wait for pending instructions.. ++ + ! Start kernel + mov.l 5f, r0 + jmp @r0 +@@ -69,7 +95,7 @@ + + .balign 4 + 1: .long 0x400080F0 ! MD=1, RB=0, BL=0, FD=1, IMASK=0xF +-2: .long stack ++2: .long init_thread_union+8192 + 3: .long __bss_start + 4: .long _end + 5: .long start_kernel +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/kgdb_stub.c linux-2.6.17/arch/sh/kernel/kgdb_stub.c +--- linux-2.6.17-vanilla/arch/sh/kernel/kgdb_stub.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/kgdb_stub.c 2006-07-12 16:54:22.000000000 +0000 +@@ -101,16 +101,17 @@ + #include <linux/linkage.h> + #include <linux/init.h> + ++#ifdef CONFIG_SH_KGDB_CONSOLE ++#include <linux/console.h> ++#endif ++ + #include <asm/system.h> + #include <asm/current.h> + #include <asm/signal.h> + #include <asm/pgtable.h> + #include <asm/ptrace.h> + #include <asm/kgdb.h> +- +-#ifdef CONFIG_SH_KGDB_CONSOLE +-#include <linux/console.h> +-#endif ++#include <asm/io.h> + + /* Function pointers for linkage */ + kgdb_debug_hook_t *kgdb_debug_hook; +@@ -240,7 +241,6 @@ + /* Misc static */ + static int stepped_address; + static short stepped_opcode; +-static const char hexchars[] = "0123456789abcdef"; + static char in_buffer[BUFMAX]; + static char out_buffer[OUTBUFMAX]; + +@@ -253,29 +253,6 @@ + #define BUF_THREAD_ID_SIZE 16 + #endif + +-/* Return addr as a real volatile address */ +-static inline unsigned int ctrl_inl(const unsigned long addr) +-{ +- return *(volatile unsigned long *) addr; +-} +- +-/* Correctly set *addr using volatile */ +-static inline void ctrl_outl(const unsigned int b, unsigned long addr) +-{ +- *(volatile unsigned long *) addr = b; +-} +- +-/* Get high hex bits */ +-static char highhex(const int x) +-{ +- return hexchars[(x >> 4) & 0xf]; +-} +- +-/* Get low hex bits */ +-static char lowhex(const int x) +-{ +- return hexchars[x & 0xf]; +-} + + /* Convert ch to hex */ + static int hex(const char ch) +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/machine_kexec.c linux-2.6.17/arch/sh/kernel/machine_kexec.c +--- linux-2.6.17-vanilla/arch/sh/kernel/machine_kexec.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/machine_kexec.c 2006-07-12 16:54:22.000000000 +0000 +@@ -27,7 +27,7 @@ + + const extern unsigned char relocate_new_kernel[]; + const extern unsigned int relocate_new_kernel_size; +-extern void *gdb_vbr_vector; ++extern void *gdb_vbr_vector; + + /* + * Provide a dummy crash_notes definition while crash dump arrives to ppc. +@@ -78,7 +78,7 @@ + */ + NORET_TYPE void machine_kexec(struct kimage *image) + { +- ++ + unsigned long page_list; + unsigned long reboot_code_buffer; + unsigned long vbr_reg; +@@ -87,7 +87,7 @@ + #if defined(CONFIG_SH_STANDARD_BIOS) + vbr_reg = ((unsigned long )gdb_vbr_vector) - 0x100; + #else +- vbr_reg = 0x80000000; // dummy ++ vbr_reg = 0x80000000; // dummy + #endif + /* Interrupts aren't acceptable while we reboot */ + local_irq_disable(); +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/pm.c linux-2.6.17/arch/sh/kernel/pm.c +--- linux-2.6.17-vanilla/arch/sh/kernel/pm.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/pm.c 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1,88 @@ ++/* ++ * Generic Power Management Routine ++ * ++ * Copyright (c) 2006 Andriy Skulysh <askulsyh@gmail.com> ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License. ++ */ ++#include <linux/suspend.h> ++#include <linux/delay.h> ++#include <linux/gfp.h> ++#include <asm/freq.h> ++#include <asm/io.h> ++#include <asm/watchdog.h> ++#include <asm/pm.h> ++ ++#define INTR_OFFSET 0x600 ++ ++#define STBCR 0xffffff82 ++#define STBCR2 0xffffff88 ++ ++#define STBCR_STBY 0x80 ++#define STBCR_MSTP2 0x04 ++ ++#define MCR 0xffffff68 ++#define RTCNT 0xffffff70 ++ ++#define MCR_RMODE 2 ++#define MCR_RFSH 4 ++ ++void pm_enter(void) ++{ ++ u8 stbcr, csr; ++ u16 frqcr, mcr; ++ u32 vbr_new, vbr_old; ++ ++ set_bl_bit(); ++ ++ /* set wdt */ ++ csr = sh_wdt_read_csr(); ++ csr &= ~WTCSR_TME; ++ csr |= WTCSR_CKS_4096; ++ sh_wdt_write_csr(csr); ++ csr = sh_wdt_read_csr(); ++ sh_wdt_write_cnt(0); ++ ++ /* disable PLL1 */ ++ frqcr = ctrl_inw(FRQCR); ++ frqcr &= ~(FRQCR_PLLEN | FRQCR_PSTBY); ++ ctrl_outw(frqcr, FRQCR); ++ ++ /* enable standby */ ++ stbcr = ctrl_inb(STBCR); ++ ctrl_outb(stbcr | STBCR_STBY | STBCR_MSTP2, STBCR); ++ ++ /* set self-refresh */ ++ mcr = ctrl_inw(MCR); ++ ctrl_outw(mcr & ~MCR_RFSH, MCR); ++ ++ /* set interrupt handler */ ++ asm volatile("stc vbr, %0" : "=r" (vbr_old)); ++ vbr_new = get_zeroed_page(GFP_ATOMIC); ++ udelay(50); ++ memcpy((void*)(vbr_new + INTR_OFFSET), ++ &wakeup_start, &wakeup_end - &wakeup_start); ++ asm volatile("ldc %0, vbr" : : "r" (vbr_new)); ++ ++ ctrl_outw(0, RTCNT); ++ ctrl_outw(mcr | MCR_RFSH | MCR_RMODE, MCR); ++ ++ cpu_sleep(); ++ ++ asm volatile("ldc %0, vbr" : : "r" (vbr_old)); ++ ++ free_page(vbr_new); ++ ++ /* enable PLL1 */ ++ frqcr = ctrl_inw(FRQCR); ++ frqcr |= FRQCR_PSTBY; ++ ctrl_outw(frqcr, FRQCR); ++ udelay(50); ++ frqcr |= FRQCR_PLLEN; ++ ctrl_outw(frqcr, FRQCR); ++ ++ ctrl_outb(stbcr, STBCR); ++ ++ clear_bl_bit(); ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/process.c linux-2.6.17/arch/sh/kernel/process.c +--- linux-2.6.17-vanilla/arch/sh/kernel/process.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/process.c 2006-07-12 16:54:22.000000000 +0000 +@@ -227,13 +227,13 @@ + return fpvalid; + } + +-/* ++/* + * Capture the user space registers if the task is not running (in user space) + */ + int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs) + { + struct pt_regs ptregs; +- ++ + ptregs = *task_pt_regs(tsk); + elf_core_copy_regs(regs, &ptregs); + +@@ -262,6 +262,7 @@ + unsigned long unused, + struct task_struct *p, struct pt_regs *regs) + { ++ struct thread_info *ti = task_thread_info(p); + struct pt_regs *childregs; + #if defined(CONFIG_SH_FPU) + struct task_struct *tsk = current; +@@ -276,8 +277,10 @@ + + if (user_mode(regs)) { + childregs->regs[15] = usp; ++ ti->addr_limit = USER_DS; + } else { + childregs->regs[15] = (unsigned long)task_stack_page(p) + THREAD_SIZE; ++ ti->addr_limit = KERNEL_DS; + } + if (clone_flags & CLONE_SETTLS) { + childregs->gbr = childregs->regs[0]; +@@ -345,7 +348,7 @@ + + /* + * Restore the kernel mode register +- * k7 (r7_bank1) ++ * k7 (r7_bank1) + */ + asm volatile("ldc %0, r7_bank" + : /* no output */ +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/ptrace.c linux-2.6.17/arch/sh/kernel/ptrace.c +--- linux-2.6.17-vanilla/arch/sh/kernel/ptrace.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/ptrace.c 2006-07-12 16:54:22.000000000 +0000 +@@ -225,7 +225,6 @@ + + case PTRACE_SETDSPREGS: { + unsigned long dp; +- int i; + + ret = -EIO; + dp = ((unsigned long) child) + THREAD_SIZE - +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/relocate_kernel.S linux-2.6.17/arch/sh/kernel/relocate_kernel.S +--- linux-2.6.17-vanilla/arch/sh/kernel/relocate_kernel.S 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/relocate_kernel.S 2006-07-12 16:54:22.000000000 +0000 +@@ -12,8 +12,8 @@ + #include <linux/linkage.h> + + #define PAGE_SIZE 4096 /* must be same value as in <asm/page.h> */ +- +- ++ ++ + .globl relocate_new_kernel + relocate_new_kernel: + /* r4 = indirection_page */ +@@ -30,43 +30,43 @@ + + bra 1f + mov r4,r0 /* cmd = indirection_page */ +-0: +- mov.l @r4+,r0 /* cmd = *ind++ */ ++0: ++ mov.l @r4+,r0 /* cmd = *ind++ */ + + 1: /* addr = (cmd | 0xa0000000) & 0xfffffff0 */ + mov r0,r2 + or r9,r2 + mov #-16,r1 +- and r1,r2 ++ and r1,r2 + + /* if(cmd & IND_DESTINATION) dst = addr */ +- tst #1,r0 ++ tst #1,r0 + bt 2f +- bra 0b +- mov r2,r5 ++ bra 0b ++ mov r2,r5 + + 2: /* else if(cmd & IND_INDIRECTION) ind = addr */ +- tst #2,r0 ++ tst #2,r0 + bt 3f +- bra 0b +- mov r2,r4 ++ bra 0b ++ mov r2,r4 + + 3: /* else if(cmd & IND_DONE) goto 6 */ +- tst #4,r0 ++ tst #4,r0 + bt 4f + bra 6f + nop + + 4: /* else if(cmd & IND_SOURCE) memcpy(dst,addr,PAGE_SIZE) */ +- tst #8,r0 ++ tst #8,r0 + bt 0b + +- mov r8,r3 +- shlr2 r3 +- shlr2 r3 +-5: ++ mov r8,r3 ++ shlr2 r3 ++ shlr2 r3 ++5: + dt r3 +- mov.l @r2+,r1 /* 16n+0 */ ++ mov.l @r2+,r1 /* 16n+0 */ + mov.l r1,@r5 + add #4,r5 + mov.l @r2+,r1 /* 16n+4 */ +@@ -79,7 +79,7 @@ + mov.l r1,@r5 + add #4,r5 + bf 5b +- ++ + bra 0b + nop + 6: +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/semaphore.c linux-2.6.17/arch/sh/kernel/semaphore.c +--- linux-2.6.17-vanilla/arch/sh/kernel/semaphore.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/semaphore.c 2006-07-12 16:54:22.000000000 +0000 +@@ -14,7 +14,7 @@ + #include <asm/semaphore.h> + #include <asm/semaphore-helper.h> + +-spinlock_t semaphore_wake_lock; ++DEFINE_SPINLOCK(semaphore_wake_lock); + + /* + * Semaphores are implemented using a two-way counter: +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/setup.c linux-2.6.17/arch/sh/kernel/setup.c +--- linux-2.6.17-vanilla/arch/sh/kernel/setup.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/setup.c 2006-07-12 16:54:22.000000000 +0000 +@@ -493,7 +493,7 @@ + * unified cache on the SH-2 and SH-3, as well as the harvard + * style cache on the SH-4. + */ +- if (test_bit(SH_CACHE_COMBINED, &(boot_cpu_data.icache.flags))) { ++ if (boot_cpu_data.icache.flags & SH_CACHE_COMBINED) { + seq_printf(m, "unified\n"); + show_cacheinfo(m, "cache", boot_cpu_data.icache); + } else { +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/sh_ksyms.c linux-2.6.17/arch/sh/kernel/sh_ksyms.c +--- linux-2.6.17-vanilla/arch/sh/kernel/sh_ksyms.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/sh_ksyms.c 2006-07-12 16:54:22.000000000 +0000 +@@ -28,21 +28,11 @@ + + /* platform dependent support */ + EXPORT_SYMBOL(dump_fpu); +-EXPORT_SYMBOL(iounmap); +-EXPORT_SYMBOL(enable_irq); +-EXPORT_SYMBOL(disable_irq); +-EXPORT_SYMBOL(probe_irq_mask); + EXPORT_SYMBOL(kernel_thread); +-EXPORT_SYMBOL(disable_irq_nosync); + EXPORT_SYMBOL(irq_desc); + EXPORT_SYMBOL(no_irq_type); + +-EXPORT_SYMBOL(strstr); + EXPORT_SYMBOL(strlen); +-EXPORT_SYMBOL(strnlen); +-EXPORT_SYMBOL(strchr); +-EXPORT_SYMBOL(strcat); +-EXPORT_SYMBOL(strncat); + + /* PCI exports */ + #ifdef CONFIG_PCI +@@ -53,13 +43,8 @@ + /* mem exports */ + EXPORT_SYMBOL(memchr); + EXPORT_SYMBOL(memcpy); +-EXPORT_SYMBOL(memcpy_fromio); +-EXPORT_SYMBOL(memcpy_toio); + EXPORT_SYMBOL(memset); +-EXPORT_SYMBOL(memset_io); + EXPORT_SYMBOL(memmove); +-EXPORT_SYMBOL(memcmp); +-EXPORT_SYMBOL(memscan); + EXPORT_SYMBOL(__copy_user); + EXPORT_SYMBOL(boot_cpu_data); + +@@ -101,6 +86,7 @@ + EXPORT_SYMBOL(flush_cache_range); + EXPORT_SYMBOL(flush_dcache_page); + EXPORT_SYMBOL(__flush_purge_region); ++EXPORT_SYMBOL(clear_user_page); + #endif + + #if defined(CONFIG_SH7705_CACHE_32KB) +@@ -117,7 +103,12 @@ + EXPORT_SYMBOL(synchronize_irq); + #endif + ++#ifdef CONFIG_PM ++EXPORT_SYMBOL(pm_suspend); ++#endif ++ + EXPORT_SYMBOL(csum_partial); ++#ifdef CONFIG_IPV6 + EXPORT_SYMBOL(csum_ipv6_magic); +-EXPORT_SYMBOL(consistent_sync); ++#endif + EXPORT_SYMBOL(clear_page); +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/sys_sh.c linux-2.6.17/arch/sh/kernel/sys_sh.c +--- linux-2.6.17-vanilla/arch/sh/kernel/sys_sh.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/sys_sh.c 2006-07-12 16:54:22.000000000 +0000 +@@ -21,7 +21,7 @@ + #include <linux/mman.h> + #include <linux/file.h> + #include <linux/utsname.h> +- ++#include <asm/cacheflush.h> + #include <asm/uaccess.h> + #include <asm/ipc.h> + +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/syscalls.S linux-2.6.17/arch/sh/kernel/syscalls.S +--- linux-2.6.17-vanilla/arch/sh/kernel/syscalls.S 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/syscalls.S 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1,354 @@ ++/* ++ * arch/sh/kernel/syscalls.S ++ * ++ * System call table for SuperH ++ * ++ * Copyright (C) 1999, 2000, 2002 Niibe Yutaka ++ * Copyright (C) 2003 Paul Mundt ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ * ++ */ ++ ++#include <linux/sys.h> ++#include <linux/linkage.h> ++#include <linux/config.h> ++ ++#if !defined(CONFIG_NFSD) && !defined(CONFIG_NFSD_MODULE) ++#define sys_nfsservctl sys_ni_syscall ++#endif ++ ++#if !defined(CONFIG_MMU) ++#define sys_madvise sys_ni_syscall ++#define sys_readahead sys_ni_syscall ++#define sys_mprotect sys_ni_syscall ++#define sys_msync sys_ni_syscall ++#define sys_mlock sys_ni_syscall ++#define sys_munlock sys_ni_syscall ++#define sys_mlockall sys_ni_syscall ++#define sys_munlockall sys_ni_syscall ++#define sys_mremap sys_ni_syscall ++#define sys_mincore sys_ni_syscall ++#define sys_remap_file_pages sys_ni_syscall ++#endif ++ ++ .data ++ENTRY(sys_call_table) ++ .long sys_ni_syscall /* 0 - old "setup()" system call*/ ++ .long sys_exit ++ .long sys_fork ++ .long sys_read ++ .long sys_write ++ .long sys_open /* 5 */ ++ .long sys_close ++ .long sys_waitpid ++ .long sys_creat ++ .long sys_link ++ .long sys_unlink /* 10 */ ++ .long sys_execve ++ .long sys_chdir ++ .long sys_time ++ .long sys_mknod ++ .long sys_chmod /* 15 */ ++ .long sys_lchown16 ++ .long sys_ni_syscall /* old break syscall holder */ ++ .long sys_stat ++ .long sys_lseek ++ .long sys_getpid /* 20 */ ++ .long sys_mount ++ .long sys_oldumount ++ .long sys_setuid16 ++ .long sys_getuid16 ++ .long sys_stime /* 25 */ ++ .long sys_ptrace ++ .long sys_alarm ++ .long sys_fstat ++ .long sys_pause ++ .long sys_utime /* 30 */ ++ .long sys_ni_syscall /* old stty syscall holder */ ++ .long sys_ni_syscall /* old gtty syscall holder */ ++ .long sys_access ++ .long sys_nice ++ .long sys_ni_syscall /* 35 */ /* old ftime syscall holder */ ++ .long sys_sync ++ .long sys_kill ++ .long sys_rename ++ .long sys_mkdir ++ .long sys_rmdir /* 40 */ ++ .long sys_dup ++ .long sys_pipe ++ .long sys_times ++ .long sys_ni_syscall /* old prof syscall holder */ ++ .long sys_brk /* 45 */ ++ .long sys_setgid16 ++ .long sys_getgid16 ++ .long sys_signal ++ .long sys_geteuid16 ++ .long sys_getegid16 /* 50 */ ++ .long sys_acct ++ .long sys_umount /* recycled never used phys() */ ++ .long sys_ni_syscall /* old lock syscall holder */ ++ .long sys_ioctl ++ .long sys_fcntl /* 55 */ ++ .long sys_ni_syscall /* old mpx syscall holder */ ++ .long sys_setpgid ++ .long sys_ni_syscall /* old ulimit syscall holder */ ++ .long sys_ni_syscall /* sys_olduname */ ++ .long sys_umask /* 60 */ ++ .long sys_chroot ++ .long sys_ustat ++ .long sys_dup2 ++ .long sys_getppid ++ .long sys_getpgrp /* 65 */ ++ .long sys_setsid ++ .long sys_sigaction ++ .long sys_sgetmask ++ .long sys_ssetmask ++ .long sys_setreuid16 /* 70 */ ++ .long sys_setregid16 ++ .long sys_sigsuspend ++ .long sys_sigpending ++ .long sys_sethostname ++ .long sys_setrlimit /* 75 */ ++ .long sys_old_getrlimit ++ .long sys_getrusage ++ .long sys_gettimeofday ++ .long sys_settimeofday ++ .long sys_getgroups16 /* 80 */ ++ .long sys_setgroups16 ++ .long sys_ni_syscall /* sys_oldselect */ ++ .long sys_symlink ++ .long sys_lstat ++ .long sys_readlink /* 85 */ ++ .long sys_uselib ++ .long sys_swapon ++ .long sys_reboot ++ .long old_readdir ++ .long old_mmap /* 90 */ ++ .long sys_munmap ++ .long sys_truncate ++ .long sys_ftruncate ++ .long sys_fchmod ++ .long sys_fchown16 /* 95 */ ++ .long sys_getpriority ++ .long sys_setpriority ++ .long sys_ni_syscall /* old profil syscall holder */ ++ .long sys_statfs ++ .long sys_fstatfs /* 100 */ ++ .long sys_ni_syscall /* ioperm */ ++ .long sys_socketcall ++ .long sys_syslog ++ .long sys_setitimer ++ .long sys_getitimer /* 105 */ ++ .long sys_newstat ++ .long sys_newlstat ++ .long sys_newfstat ++ .long sys_uname ++ .long sys_ni_syscall /* 110 */ /* iopl */ ++ .long sys_vhangup ++ .long sys_ni_syscall /* idle */ ++ .long sys_ni_syscall /* vm86old */ ++ .long sys_wait4 ++ .long sys_swapoff /* 115 */ ++ .long sys_sysinfo ++ .long sys_ipc ++ .long sys_fsync ++ .long sys_sigreturn ++ .long sys_clone /* 120 */ ++ .long sys_setdomainname ++ .long sys_newuname ++ .long sys_ni_syscall /* sys_modify_ldt */ ++ .long sys_adjtimex ++ .long sys_mprotect /* 125 */ ++ .long sys_sigprocmask ++ .long sys_ni_syscall /* old "create_module" */ ++ .long sys_init_module ++ .long sys_delete_module ++ .long sys_ni_syscall /* 130: old "get_kernel_syms" */ ++ .long sys_quotactl ++ .long sys_getpgid ++ .long sys_fchdir ++ .long sys_bdflush ++ .long sys_sysfs /* 135 */ ++ .long sys_personality ++ .long sys_ni_syscall /* for afs_syscall */ ++ .long sys_setfsuid16 ++ .long sys_setfsgid16 ++ .long sys_llseek /* 140 */ ++ .long sys_getdents ++ .long sys_select ++ .long sys_flock ++ .long sys_msync ++ .long sys_readv /* 145 */ ++ .long sys_writev ++ .long sys_getsid ++ .long sys_fdatasync ++ .long sys_sysctl ++ .long sys_mlock /* 150 */ ++ .long sys_munlock ++ .long sys_mlockall ++ .long sys_munlockall ++ .long sys_sched_setparam ++ .long sys_sched_getparam /* 155 */ ++ .long sys_sched_setscheduler ++ .long sys_sched_getscheduler ++ .long sys_sched_yield ++ .long sys_sched_get_priority_max ++ .long sys_sched_get_priority_min /* 160 */ ++ .long sys_sched_rr_get_interval ++ .long sys_nanosleep ++ .long sys_mremap ++ .long sys_setresuid16 ++ .long sys_getresuid16 /* 165 */ ++ .long sys_ni_syscall /* vm86 */ ++ .long sys_ni_syscall /* old "query_module" */ ++ .long sys_poll ++ .long sys_nfsservctl ++ .long sys_setresgid16 /* 170 */ ++ .long sys_getresgid16 ++ .long sys_prctl ++ .long sys_rt_sigreturn ++ .long sys_rt_sigaction ++ .long sys_rt_sigprocmask /* 175 */ ++ .long sys_rt_sigpending ++ .long sys_rt_sigtimedwait ++ .long sys_rt_sigqueueinfo ++ .long sys_rt_sigsuspend ++ .long sys_pread_wrapper /* 180 */ ++ .long sys_pwrite_wrapper ++ .long sys_chown16 ++ .long sys_getcwd ++ .long sys_capget ++ .long sys_capset /* 185 */ ++ .long sys_sigaltstack ++ .long sys_sendfile ++ .long sys_ni_syscall /* streams1 */ ++ .long sys_ni_syscall /* streams2 */ ++ .long sys_vfork /* 190 */ ++ .long sys_getrlimit ++ .long sys_mmap2 ++ .long sys_truncate64 ++ .long sys_ftruncate64 ++ .long sys_stat64 /* 195 */ ++ .long sys_lstat64 ++ .long sys_fstat64 ++ .long sys_lchown ++ .long sys_getuid ++ .long sys_getgid /* 200 */ ++ .long sys_geteuid ++ .long sys_getegid ++ .long sys_setreuid ++ .long sys_setregid ++ .long sys_getgroups /* 205 */ ++ .long sys_setgroups ++ .long sys_fchown ++ .long sys_setresuid ++ .long sys_getresuid ++ .long sys_setresgid /* 210 */ ++ .long sys_getresgid ++ .long sys_chown ++ .long sys_setuid ++ .long sys_setgid ++ .long sys_setfsuid /* 215 */ ++ .long sys_setfsgid ++ .long sys_pivot_root ++ .long sys_mincore ++ .long sys_madvise ++ .long sys_getdents64 /* 220 */ ++ .long sys_fcntl64 ++ .long sys_ni_syscall /* reserved for TUX */ ++ .long sys_ni_syscall /* Reserved for Security */ ++ .long sys_gettid ++ .long sys_readahead /* 225 */ ++ .long sys_setxattr ++ .long sys_lsetxattr ++ .long sys_fsetxattr ++ .long sys_getxattr ++ .long sys_lgetxattr /* 230 */ ++ .long sys_fgetxattr ++ .long sys_listxattr ++ .long sys_llistxattr ++ .long sys_flistxattr ++ .long sys_removexattr /* 235 */ ++ .long sys_lremovexattr ++ .long sys_fremovexattr ++ .long sys_tkill ++ .long sys_sendfile64 ++ .long sys_futex /* 240 */ ++ .long sys_sched_setaffinity ++ .long sys_sched_getaffinity ++ .long sys_ni_syscall ++ .long sys_ni_syscall ++ .long sys_io_setup /* 245 */ ++ .long sys_io_destroy ++ .long sys_io_getevents ++ .long sys_io_submit ++ .long sys_io_cancel ++ .long sys_fadvise64 /* 250 */ ++ .long sys_ni_syscall ++ .long sys_exit_group ++ .long sys_lookup_dcookie ++ .long sys_epoll_create ++ .long sys_epoll_ctl /* 255 */ ++ .long sys_epoll_wait ++ .long sys_remap_file_pages ++ .long sys_set_tid_address ++ .long sys_timer_create ++ .long sys_timer_settime /* 260 */ ++ .long sys_timer_gettime ++ .long sys_timer_getoverrun ++ .long sys_timer_delete ++ .long sys_clock_settime ++ .long sys_clock_gettime /* 265 */ ++ .long sys_clock_getres ++ .long sys_clock_nanosleep ++ .long sys_statfs64 ++ .long sys_fstatfs64 ++ .long sys_tgkill /* 270 */ ++ .long sys_utimes ++ .long sys_fadvise64_64_wrapper ++ .long sys_ni_syscall /* Reserved for vserver */ ++ .long sys_ni_syscall /* Reserved for mbind */ ++ .long sys_ni_syscall /* 275 - get_mempolicy */ ++ .long sys_ni_syscall /* set_mempolicy */ ++ .long sys_mq_open ++ .long sys_mq_unlink ++ .long sys_mq_timedsend ++ .long sys_mq_timedreceive /* 280 */ ++ .long sys_mq_notify ++ .long sys_mq_getsetattr ++ .long sys_kexec_load ++ .long sys_waitid ++ .long sys_add_key /* 285 */ ++ .long sys_request_key ++ .long sys_keyctl ++ .long sys_ioprio_set ++ .long sys_ioprio_get ++ .long sys_inotify_init /* 290 */ ++ .long sys_inotify_add_watch ++ .long sys_inotify_rm_watch ++ .long sys_migrate_pages ++ .long sys_openat ++ .long sys_mkdirat /* 295 */ ++ .long sys_mknodat ++ .long sys_fchownat ++ .long sys_futimesat ++ .long sys_fstatat64 ++ .long sys_unlinkat /* 300 */ ++ .long sys_renameat ++ .long sys_linkat ++ .long sys_symlinkat ++ .long sys_readlinkat ++ .long sys_fchmodat /* 305 */ ++ .long sys_faccessat ++ .long sys_ni_syscall /* Reserved for pselect6 */ ++ .long sys_ni_syscall /* Reserved for ppoll */ ++ .long sys_unshare ++ .long sys_set_robust_list /* 310 */ ++ .long sys_get_robust_list ++ .long sys_splice ++ .long sys_sync_file_range ++ .long sys_tee ++ .long sys_vmsplice /* 315 */ +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/time.c linux-2.6.17/arch/sh/kernel/time.c +--- linux-2.6.17-vanilla/arch/sh/kernel/time.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/time.c 2006-07-12 16:54:22.000000000 +0000 +@@ -30,11 +30,11 @@ + /* XXX: Can we initialize this in a routine somewhere? Dreamcast doesn't want + * these routines anywhere... */ + #ifdef CONFIG_SH_RTC +-void (*rtc_get_time)(struct timespec *) = sh_rtc_gettimeofday; +-int (*rtc_set_time)(const time_t) = sh_rtc_settimeofday; ++void (*rtc_sh_get_time)(struct timespec *) = sh_rtc_gettimeofday; ++int (*rtc_sh_set_time)(const time_t) = sh_rtc_settimeofday; + #else +-void (*rtc_get_time)(struct timespec *); +-int (*rtc_set_time)(const time_t); ++void (*rtc_sh_get_time)(struct timespec *); ++int (*rtc_sh_set_time)(const time_t); + #endif + + /* +@@ -136,7 +136,7 @@ + xtime.tv_sec > last_rtc_update + 660 && + (xtime.tv_nsec / 1000) >= 500000 - ((unsigned) TICK_SIZE) / 2 && + (xtime.tv_nsec / 1000) <= 500000 + ((unsigned) TICK_SIZE) / 2) { +- if (rtc_set_time(xtime.tv_sec) == 0) ++ if (rtc_sh_set_time(xtime.tv_sec) == 0) + last_rtc_update = xtime.tv_sec; + else + /* do it again in 60s */ +@@ -144,8 +144,33 @@ + } + } + ++#ifdef CONFIG_PM ++int timer_suspend(struct sys_device *dev, pm_message_t state) ++{ ++ struct sys_timer *sys_timer = container_of(dev, struct sys_timer, dev); ++ ++ sys_timer->ops->stop(); ++ ++ return 0; ++} ++ ++int timer_resume(struct sys_device *dev) ++{ ++ struct sys_timer *sys_timer = container_of(dev, struct sys_timer, dev); ++ ++ sys_timer->ops->start(); ++ ++ return 0; ++} ++#else ++#define timer_suspend NULL ++#define timer_resume NULL ++#endif ++ + static struct sysdev_class timer_sysclass = { + set_kset_name("timer"), ++ .suspend = timer_suspend, ++ .resume = timer_resume, + }; + + static int __init timer_init_sysfs(void) +@@ -169,8 +194,8 @@ + + clk_init(); + +- if (rtc_get_time) { +- rtc_get_time(&xtime); ++ if (rtc_sh_get_time) { ++ rtc_sh_get_time(&xtime); + } else { + xtime.tv_sec = mktime(2000, 1, 1, 0, 0, 0); + xtime.tv_nsec = 0; +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/timers/CVS/Entries linux-2.6.17/arch/sh/kernel/timers/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/kernel/timers/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/timers/CVS/Entries 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1,4 @@ ++/Makefile/1.1/Sat Mar 26 20:25:36 2005/-ko/ ++/timer.c/1.1/Sat Mar 26 20:25:36 2005/-ko/ ++/timer-tmu.c/1.4/Sat Jul 8 20:16:10 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/timers/CVS/Repository linux-2.6.17/arch/sh/kernel/timers/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/kernel/timers/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/timers/CVS/Repository 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/kernel/timers +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/timers/CVS/Root linux-2.6.17/arch/sh/kernel/timers/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/kernel/timers/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/timers/CVS/Root 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/timers/timer-tmu.c linux-2.6.17/arch/sh/kernel/timers/timer-tmu.c +--- linux-2.6.17-vanilla/arch/sh/kernel/timers/timer-tmu.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/timers/timer-tmu.c 2006-07-12 16:54:22.000000000 +0000 +@@ -132,17 +132,17 @@ + ctrl_outl(0xffffffff, TMU0_TCOR); + ctrl_outl(0xffffffff, TMU0_TCNT); + +- rtc_get_time(&ts2); ++ rtc_sh_get_time(&ts2); + + do { +- rtc_get_time(&ts1); ++ rtc_sh_get_time(&ts1); + } while (ts1.tv_nsec == ts2.tv_nsec && ts1.tv_sec == ts2.tv_sec); + + /* actually start the timer */ + ctrl_outb(TMU_TSTR_INIT, TMU_TSTR); + + do { +- rtc_get_time(&ts2); ++ rtc_sh_get_time(&ts2); + } while (ts1.tv_nsec == ts2.tv_nsec && ts1.tv_sec == ts2.tv_sec); + + freq = 0xffffffff - ctrl_inl(TMU0_TCNT); +@@ -188,6 +188,18 @@ + .ops = &tmu_clk_ops, + }; + ++static int tmu_timer_start(void) ++{ ++ ctrl_outb(TMU_TSTR_INIT, TMU_TSTR); ++ return 0; ++} ++ ++static int tmu_timer_stop(void) ++{ ++ ctrl_outb(0, TMU_TSTR); ++ return 0; ++} ++ + static int tmu_timer_init(void) + { + unsigned long interval; +@@ -197,7 +209,7 @@ + tmu0_clk.parent = clk_get("module_clk"); + + /* Start TMU0 */ +- ctrl_outb(0, TMU_TSTR); ++ tmu_timer_stop(); + #if !defined(CONFIG_CPU_SUBTYPE_SH7300) && !defined(CONFIG_CPU_SUBTYPE_SH7760) + ctrl_outb(TMU_TOCR_INIT, TMU_TOCR); + #endif +@@ -211,13 +223,15 @@ + ctrl_outl(interval, TMU0_TCOR); + ctrl_outl(interval, TMU0_TCNT); + +- ctrl_outb(TMU_TSTR_INIT, TMU_TSTR); ++ tmu_timer_start(); + + return 0; + } + + struct sys_timer_ops tmu_timer_ops = { + .init = tmu_timer_init, ++ .start = tmu_timer_start, ++ .stop = tmu_timer_stop, + .get_frequency = tmu_timer_get_frequency, + .get_offset = tmu_timer_get_offset, + }; +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/traps.c linux-2.6.17/arch/sh/kernel/traps.c +--- linux-2.6.17-vanilla/arch/sh/kernel/traps.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/traps.c 2006-07-12 16:54:22.000000000 +0000 +@@ -37,40 +37,15 @@ + + #ifdef CONFIG_SH_KGDB + #include <asm/kgdb.h> +-#define CHK_REMOTE_DEBUG(regs) \ +-{ \ +- if ((kgdb_debug_hook != (kgdb_debug_hook_t *) NULL) && (!user_mode(regs))) \ +- { \ +- (*kgdb_debug_hook)(regs); \ +- } \ ++#define CHK_REMOTE_DEBUG(regs) \ ++{ \ ++ if (kgdb_debug_hook && !user_mode(regs))\ ++ (*kgdb_debug_hook)(regs); \ + } + #else + #define CHK_REMOTE_DEBUG(regs) + #endif + +-#define DO_ERROR(trapnr, signr, str, name, tsk) \ +-asmlinkage void do_##name(unsigned long r4, unsigned long r5, \ +- unsigned long r6, unsigned long r7, \ +- struct pt_regs regs) \ +-{ \ +- unsigned long error_code; \ +- \ +- /* Check if it's a DSP instruction */ \ +- if (is_dsp_inst(®s)) { \ +- /* Enable DSP mode, and restart instruction. */ \ +- regs.sr |= SR_DSP; \ +- return; \ +- } \ +- \ +- asm volatile("stc r2_bank, %0": "=r" (error_code)); \ +- local_irq_enable(); \ +- tsk->thread.error_code = error_code; \ +- tsk->thread.trap_no = trapnr; \ +- CHK_REMOTE_DEBUG(®s); \ +- force_sig(signr, tsk); \ +- die_if_no_fixup(str,®s,error_code); \ +-} +- + #ifdef CONFIG_CPU_SH2 + #define TRAP_RESERVED_INST 4 + #define TRAP_ILLEGAL_SLOT_INST 6 +@@ -87,7 +62,7 @@ + #define VMALLOC_OFFSET (8*1024*1024) + #define MODULE_RANGE (8*1024*1024) + +-spinlock_t die_lock; ++DEFINE_SPINLOCK(die_lock); + + void die(const char * str, struct pt_regs * regs, long err) + { +@@ -576,8 +551,117 @@ + #define is_dsp_inst(regs) (0) + #endif /* CONFIG_SH_DSP */ + +-DO_ERROR(TRAP_RESERVED_INST, SIGILL, "reserved instruction", reserved_inst, current) +-DO_ERROR(TRAP_ILLEGAL_SLOT_INST, SIGILL, "illegal slot instruction", illegal_slot_inst, current) ++extern int do_fpu_inst(unsigned short, struct pt_regs*); ++ ++asmlinkage void do_reserved_inst(unsigned long r4, unsigned long r5, ++ unsigned long r6, unsigned long r7, ++ struct pt_regs regs) ++{ ++ unsigned long error_code; ++ struct task_struct *tsk = current; ++ ++#ifdef CONFIG_SH_FPU_EMU ++ unsigned short inst; ++ int err; ++ ++ get_user(inst, (unsigned short*)regs.pc); ++ ++ err = do_fpu_inst(inst, ®s); ++ if (!err) { ++ regs.pc += 2; ++ return; ++ } ++ /* not a FPU inst. */ ++#endif ++ ++#ifdef CONFIG_SH_DSP ++ /* Check if it's a DSP instruction */ ++ if (is_dsp_inst(®s)) { ++ /* Enable DSP mode, and restart instruction. */ ++ regs.sr |= SR_DSP; ++ return; ++ } ++#endif ++ ++ asm volatile("stc r2_bank, %0": "=r" (error_code)); ++ local_irq_enable(); ++ tsk->thread.error_code = error_code; ++ tsk->thread.trap_no = TRAP_RESERVED_INST; ++ CHK_REMOTE_DEBUG(®s); ++ force_sig(SIGILL, tsk); ++ die_if_no_fixup("reserved instruction", ®s, error_code); ++} ++ ++#ifdef CONFIG_SH_FPU_EMU ++static int emulate_branch(unsigned short inst, struct pt_regs* regs) ++{ ++ /* ++ * bfs: 8fxx: PC+=d*2+4; ++ * bts: 8dxx: PC+=d*2+4; ++ * bra: axxx: PC+=D*2+4; ++ * bsr: bxxx: PC+=D*2+4 after PR=PC+4; ++ * braf:0x23: PC+=Rn*2+4; ++ * bsrf:0x03: PC+=Rn*2+4 after PR=PC+4; ++ * jmp: 4x2b: PC=Rn; ++ * jsr: 4x0b: PC=Rn after PR=PC+4; ++ * rts: 000b: PC=PR; ++ */ ++ if ((inst & 0xfd00) == 0x8d00) { ++ regs->pc += SH_PC_8BIT_OFFSET(inst); ++ return 0; ++ } ++ ++ if ((inst & 0xe000) == 0xa000) { ++ regs->pc += SH_PC_12BIT_OFFSET(inst); ++ return 0; ++ } ++ ++ if ((inst & 0xf0df) == 0x0003) { ++ regs->pc += regs->regs[(inst & 0x0f00) >> 8] + 4; ++ return 0; ++ } ++ ++ if ((inst & 0xf0df) == 0x400b) { ++ regs->pc = regs->regs[(inst & 0x0f00) >> 8]; ++ return 0; ++ } ++ ++ if ((inst & 0xffff) == 0x000b) { ++ regs->pc = regs->pr; ++ return 0; ++ } ++ ++ return 1; ++} ++#endif ++ ++asmlinkage void do_illegal_slot_inst(unsigned long r4, unsigned long r5, ++ unsigned long r6, unsigned long r7, ++ struct pt_regs regs) ++{ ++ unsigned long error_code; ++ struct task_struct *tsk = current; ++#ifdef CONFIG_SH_FPU_EMU ++ unsigned short inst; ++ ++ get_user(inst, (unsigned short *)regs.pc + 1); ++ if (!do_fpu_inst(inst, ®s)) { ++ get_user(inst, (unsigned short *)regs.pc); ++ if (!emulate_branch(inst, ®s)) ++ return; ++ /* fault in branch.*/ ++ } ++ /* not a FPU inst. */ ++#endif ++ ++ asm volatile("stc r2_bank, %0": "=r" (error_code)); ++ local_irq_enable(); ++ tsk->thread.error_code = error_code; ++ tsk->thread.trap_no = TRAP_RESERVED_INST; ++ CHK_REMOTE_DEBUG(®s); ++ force_sig(SIGILL, tsk); ++ die_if_no_fixup("illegal slot instruction", ®s, error_code); ++} + + asmlinkage void do_exception_error(unsigned long r4, unsigned long r5, + unsigned long r6, unsigned long r7, +@@ -635,14 +719,16 @@ + exception_handling_table[TRAP_ILLEGAL_SLOT_INST] + = (void *)do_illegal_slot_inst; + +-#ifdef CONFIG_CPU_SH4 +- if (!(cpu_data->flags & CPU_HAS_FPU)) { +- /* For SH-4 lacking an FPU, treat floating point instructions +- as reserved. */ +- /* entry 64 corresponds to EXPEVT=0x800 */ +- exception_handling_table[64] = (void *)do_reserved_inst; +- exception_handling_table[65] = (void *)do_illegal_slot_inst; +- } ++#if defined(CONFIG_CPU_SH4) && !defined(CONFIG_SH_FPU) || \ ++ defined(CONFIG_SH_FPU_EMU) ++ /* ++ * For SH-4 lacking an FPU, treat floating point instructions as ++ * reserved. They'll be handled in the math-emu case, or faulted on ++ * otherwise. ++ */ ++ /* entry 64 corresponds to EXPEVT=0x800 */ ++ exception_handling_table[64] = (void *)do_reserved_inst; ++ exception_handling_table[65] = (void *)do_illegal_slot_inst; + #endif + + /* Setup VBR for boot cpu */ +diff -ruN linux-2.6.17-vanilla/arch/sh/kernel/vmlinux.lds.S linux-2.6.17/arch/sh/kernel/vmlinux.lds.S +--- linux-2.6.17-vanilla/arch/sh/kernel/vmlinux.lds.S 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/kernel/vmlinux.lds.S 2006-07-12 16:54:22.000000000 +0000 +@@ -63,8 +63,6 @@ + + . = ALIGN(8192); /* init_task */ + .data.init_task : { *(.data.init_task) } +- /* stack */ +- .stack : { stack = .; _stack = .; } + + . = ALIGN(4096); /* Init code and data */ + __init_begin = .; +diff -ruN linux-2.6.17-vanilla/arch/sh/lib/CVS/Entries linux-2.6.17/arch/sh/lib/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/lib/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/lib/CVS/Entries 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1,13 @@ ++/Makefile/1.9/Tue Jun 29 01:59:02 2004/-ko/ ++/checksum.S/1.3/Fri Sep 2 23:02:18 2005/-ko/ ++/delay.c/1.5/Mon Aug 29 21:01:18 2005/-ko/ ++/div64-generic.c/1.2/Sat Sep 6 00:27:16 2003// ++/div64.S/1.2/Sat Jul 19 22:56:20 2003// ++/memchr.S/1.2/Wed Apr 7 20:18:39 2004/-ko/ ++/memcpy-sh4.S/1.1/Tue Jun 29 01:59:02 2004/-ko/ ++/memcpy.S/1.2/Wed Apr 7 20:18:39 2004/-ko/ ++/memmove.S/1.4/Tue Apr 20 13:06:06 2004/-ko/ ++/memset.S/1.3/Mon Jul 25 00:55:36 2005/-ko/ ++/strlen.S/1.2/Wed Apr 7 20:18:39 2004/-ko/ ++/udivdi3.c/1.2/Sat Jul 19 22:56:20 2003// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/lib/CVS/Repository linux-2.6.17/arch/sh/lib/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/lib/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/lib/CVS/Repository 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/lib +diff -ruN linux-2.6.17-vanilla/arch/sh/lib/CVS/Root linux-2.6.17/arch/sh/lib/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/lib/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/lib/CVS/Root 2006-07-12 16:54:22.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/lib/checksum.S linux-2.6.17/arch/sh/lib/checksum.S +--- linux-2.6.17-vanilla/arch/sh/lib/checksum.S 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/lib/checksum.S 2006-07-12 16:54:22.000000000 +0000 +@@ -202,8 +202,9 @@ + cmp/pz r6 ! Jump if we had at least two bytes. + bt/s 1f + clrt ++ add #2,r6 ! r6 was < 2. Deal with it. + bra 4f +- add #2,r6 ! r6 was < 2. Deal with it. ++ mov r6,r2 + + 3: ! Handle different src and dest alignments. + ! This is not common, so simple byte by byte copy will do. +diff -ruN linux-2.6.17-vanilla/arch/sh/lib/memcpy-sh4.S linux-2.6.17/arch/sh/lib/memcpy-sh4.S +--- linux-2.6.17-vanilla/arch/sh/lib/memcpy-sh4.S 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/lib/memcpy-sh4.S 2006-07-12 16:54:22.000000000 +0000 +@@ -20,7 +20,7 @@ + ! + ! GHIJ KLMN OPQR --> ...G HIJK LMNO PQR. + ! +- ++ + ! Size is 16 or greater, and may have trailing bytes + + .balign 32 +@@ -39,7 +39,7 @@ + ! 6 cycles, 4 bytes per iteration + 3: mov.l @(r0,r5),r1 ! 21 LS (latency=2) ! NMLK + mov r7, r3 ! 5 MT (latency=0) ! RQPO +- ++ + cmp/hi r2,r0 ! 57 MT + shll16 r3 ! 103 EX + +@@ -48,7 +48,7 @@ + + shlr8 r6 ! 106 EX ! xNML + mov r1, r7 ! 5 MT (latency=0) +- ++ + or r6,r3 ! 82 EX ! ONML + bt/s 3b ! 109 BR + +@@ -81,7 +81,7 @@ + + 8: cmp/hi r2,r0 ! 57 MT + mov.b @(r0,r5),r1 ! 20 LS (latency=2) +- ++ + bt/s 8b ! 109 BR + + mov.b r1,@-r0 ! 29 LS +@@ -89,11 +89,11 @@ + 9: rts + nop + +- ++ + ! + ! GHIJ KLMN OPQR --> .GHI JKLM NOPQ R... + ! +- ++ + ! Size is 16 or greater, and may have trailing bytes + + .balign 32 +@@ -112,7 +112,7 @@ + ! 6 cycles, 4 bytes per iteration + 3: mov.l @(r0,r5),r1 ! 21 LS (latency=2) ! NMLK + mov r7, r3 ! 5 MT (latency=0) ! RQPO +- ++ + cmp/hi r2,r0 ! 57 MT + shll8 r3 ! 102 EX ! QPOx + +@@ -121,7 +121,7 @@ + + shlr8 r6 ! 106 EX ! xxxN + mov r1, r7 ! 5 MT (latency=0) +- ++ + or r6,r3 ! 82 EX ! QPON + bt/s 3b ! 109 BR + +@@ -149,14 +149,14 @@ + + 8: cmp/hi r2,r0 ! 57 MT + mov.b @(r0,r5),r1 ! 20 LS (latency=2) +- ++ + bt/s 8b ! 109 BR + + mov.b r1,@-r0 ! 29 LS + + 9: rts + nop +- ++ + ENTRY(memcpy) + + ! Calculate the invariants which will be used in the remainder +@@ -168,7 +168,7 @@ + ! r0 --> [ ... ] r0+r5 --> [ ... ] + ! + ! +- ++ + ! Short circuit the common case of src, dst and len being 32 bit aligned + ! and test for zero length move + +@@ -201,7 +201,7 @@ + ! 36 82 49-50 66-70 80-85 + ! However the penalty for getting it 'wrong' is much higher for long word + ! aligned data (and this is more common), so use a value of 16. +- ++ + cmp/gt r6,r1 ! 56 MT + + add #-1,r5 ! 50 EX +@@ -212,7 +212,7 @@ + + mov.b @(r0,r5),r1 ! 20 LS (latency=2) + bf/s 4f ! 111 BR +- ++ + add #-1,r3 ! 50 EX + tst r6, r6 ! 86 MT + +@@ -247,7 +247,7 @@ + bt/s 2f ! 111 BR + and r0,r3 ! 78 EX + +- ! 3 cycles, 1 byte per iteration ++ ! 3 cycles, 1 byte per iteration + 1: dt r3 ! 67 EX + mov.b @(r0,r5),r1 ! 19 LS (latency=2) + +@@ -257,10 +257,10 @@ + mov.b r1,@-r0 ! 28 LS + + 2: add #1, r5 ! 79 EX +- ++ + ! Now select the appropriate bulk transfer code based on relative + ! alignment of src and dst. +- ++ + mov r0, r3 ! 5 MT (latency=0) + + mov r5, r0 ! 5 MT (latency=0) +@@ -270,7 +270,7 @@ + mov #64, r7 ! 6 EX + + ! bit 0 clear +- ++ + cmp/ge r7, r6 ! 55 MT + + bt/s 2f ! 111 BR +@@ -289,7 +289,7 @@ + + bra .Lcase2b + nop +- ++ + ! bit 0 set + 1: tst #2, r0 ! 87 MT + +@@ -298,7 +298,7 @@ + + bra .Lcase3 + nop +- ++ + + ! + ! GHIJ KLMN OPQR --> GHIJ KLMN OPQR +@@ -306,7 +306,7 @@ + + ! src, dst and size are all long word aligned + ! size is non-zero +- ++ + .balign 32 + .Lcase00: + mov #64, r1 ! 6 EX +@@ -319,7 +319,7 @@ + shlr2 r6 ! 105 EX + + shlr r6 ! 104 EX +- mov.l @(r0, r5), r1 ! 21 LS (latency=2) ++ mov.l @(r0, r5), r1 ! 21 LS (latency=2) + + bf/s 4f ! 111 BR + add #-8, r3 ! 50 EX +@@ -343,7 +343,7 @@ + 5: rts + nop + +- ++ + ! Size is 16 or greater and less than 64, but may have trailing bytes + + .balign 32 +@@ -351,7 +351,7 @@ + add #-4, r5 ! 50 EX + mov r4, r7 ! 5 MT (latency=0) + +- mov.l @(r0, r5), r1 ! 21 LS (latency=2) ++ mov.l @(r0, r5), r1 ! 21 LS (latency=2) + mov #4, r2 ! 6 EX + + add #11, r7 ! 50 EX +@@ -377,7 +377,7 @@ + ! Copy the final 0-3 bytes + + add #3,r5 ! 50 EX +- ++ + cmp/eq r0, r4 ! 54 MT + add #-10, r7 ! 50 EX + +@@ -386,7 +386,7 @@ + ! 3 cycles, 1 byte per iteration + 1: mov.b @(r0,r5),r1 ! 19 LS + cmp/hi r7,r0 ! 57 MT +- ++ + bt/s 1b ! 111 BR + mov.b r1,@-r0 ! 28 LS + +@@ -427,10 +427,10 @@ + add #8, r3 ! 50 EX + + tst #0x18, r0 ! 87 MT +- ++ + bt/s 1f ! 109 BR + mov.l r1,@-r0 ! 30 LS +- ++ + ! 4 cycles, 2 long words per iteration + 3: mov.l @(r0, r5), r1 ! 21 LS (latency=2) + +@@ -450,7 +450,7 @@ + ! We could do this with the four scratch registers, but if src + ! and dest hit the same cache line, this will thrash, so make + ! use of additional registers. +- ! ++ ! + ! We also need r0 as a temporary (for movca), so 'undo' the invariant: + ! r5: src (was r0+r5) + ! r1: dest (was r0) +@@ -459,14 +459,14 @@ + ! + 1: mov.l r8, @-r15 ! 30 LS + add r0, r5 ! 49 EX +- ++ + mov.l r9, @-r15 ! 30 LS + mov r0, r1 ! 5 MT (latency=0) +- ++ + mov.l r10, @-r15 ! 30 LS + add #-0x1c, r5 ! 50 EX +- +- mov.l r11, @-r15 ! 30 LS ++ ++ mov.l r11, @-r15 ! 30 LS + + ! 16 cycles, 32 bytes per iteration + 2: mov.l @(0x00,r5),r0 ! 18 LS (latency=2) +@@ -510,10 +510,10 @@ + sub r4, r1 ! 75 EX (len remaining) + + ! number of trailing bytes is non-zero +- ! ++ ! + ! invariants restored (r5 already decremented by 4) + ! also r1=num bytes remaining +- ++ + mov #4, r2 ! 6 EX + mov r4, r7 ! 5 MT (latency=0) + +@@ -523,7 +523,7 @@ + bf/s 5f ! 108 BR + add #11, r7 ! 50 EX + +- mov.l @(r0, r5), r6 ! 21 LS (latency=2) ++ mov.l @(r0, r5), r6 ! 21 LS (latency=2) + tst r2, r1 ! 86 MT + + mov r5, r3 ! 5 MT (latency=0) +@@ -553,11 +553,11 @@ + + bt 9f ! 110 BR + add #3,r5 ! 50 EX +- ++ + ! 3 cycles, 1 byte per iteration + 1: mov.b @(r0,r5),r1 ! 19 LS + cmp/hi r7,r0 ! 57 MT +- ++ + bt/s 1b ! 111 BR + mov.b r1,@-r0 ! 28 LS + +@@ -567,7 +567,7 @@ + ! + ! GHIJ KLMN OPQR --> ..GH IJKL MNOP QR.. + ! +- ++ + .balign 32 + .Lcase2: + ! Size is 16 or greater and less then 64, but may have trailing bytes +@@ -608,21 +608,21 @@ + + cmp/eq r3, r0 ! 54 MT + add #0x1f, r2 ! 50 EX +- ++ + add #-2, r5 ! 50 EX + bt/s 1f ! 110 BR + and r1, r2 ! 78 EX +- ++ + ! Copy a short word one at a time until we are cache line aligned + ! Normal values: r0, r2, r3, r4 + ! Unused: r1, r6, r7 + ! Mod: r5 (=r5-2) + ! + add #2, r3 ! 50 EX +- ++ + 2: mov.w @(r0,r5),r1 ! 20 LS (latency=2) + cmp/eq r3,r0 ! 54 MT +- ++ + bf/s 2b ! 111 BR + + mov.w r1,@-r0 ! 29 LS +@@ -635,7 +635,7 @@ + ! We could do this with the four scratch registers, but if src + ! and dest hit the same cache line, this will thrash, so make + ! use of additional registers. +- ! ++ ! + ! We also need r0 as a temporary (for movca), so 'undo' the invariant: + ! r5: src (was r0+r5) + ! r1: dest (was r0) +@@ -644,16 +644,16 @@ + ! + 1: mov.l r8, @-r15 ! 30 LS + add r0, r5 ! 49 EX +- ++ + mov.l r9, @-r15 ! 30 LS + mov r0, r1 ! 5 MT (latency=0) +- ++ + mov.l r10, @-r15 ! 30 LS + add #-0x1e, r5 ! 50 EX +- +- mov.l r11, @-r15 ! 30 LS +- +- mov.l r12, @-r15 ! 30 LS ++ ++ mov.l r11, @-r15 ! 30 LS ++ ++ mov.l r12, @-r15 ! 30 LS + + ! 17 cycles, 32 bytes per iteration + #ifdef CONFIG_CPU_LITTLE_ENDIAN +@@ -690,7 +690,7 @@ + xtrct r12, r11 ! 48 EX + + mov.l r6, @(0x08,r1) ! 33 LS +- ++ + mov.l r7, @(0x0c,r1) ! 33 LS + + mov.l r8, @(0x10,r1) ! 33 LS +@@ -739,7 +739,7 @@ + + mov.l r6, @(0x18,r1) ! 33 LS + xtrct r12, r11 ! 48 EX +- ++ + mov.l r7, @(0x14,r1) ! 33 LS + + mov.l r8, @(0x10,r1) ! 33 LS +@@ -770,7 +770,7 @@ + 1: mov.l @r15+, r8 ! 15 LS + + add #0x1e, r5 ! 50 EX +- ++ + ! Finish off a short word at a time + ! r5 must be invariant - 2 + 10: mov r4,r2 ! 5 MT (latency=0) +@@ -780,7 +780,7 @@ + bf/s 1f ! 109 BR + + add #2, r2 ! 50 EX +- ++ + 3: mov.w @(r0,r5),r1 ! 20 LS + cmp/hi r2,r0 ! 57 MT + +@@ -788,7 +788,7 @@ + + mov.w r1,@-r0 ! 29 LS + 1: +- ++ + ! + ! Finally, copy the last byte if necessary + cmp/eq r4,r0 ! 54 MT +diff -ruN linux-2.6.17-vanilla/arch/sh/lib/memmove.S linux-2.6.17/arch/sh/lib/memmove.S +--- linux-2.6.17-vanilla/arch/sh/lib/memmove.S 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/lib/memmove.S 2006-07-12 16:54:22.000000000 +0000 +@@ -1,4 +1,4 @@ +-/* $Id: memmove.S,v 1.2 2001/07/27 11:51:09 gniibe Exp $ ++/* $Id: memmove.S,v 1.3 2003/05/04 19:29:54 lethal Exp $ + * + * "memmove" implementation of SuperH + * +diff -ruN linux-2.6.17-vanilla/arch/sh/lib/memset.S linux-2.6.17/arch/sh/lib/memset.S +--- linux-2.6.17-vanilla/arch/sh/lib/memset.S 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/lib/memset.S 2006-07-12 16:54:23.000000000 +0000 +@@ -29,6 +29,7 @@ + bf/s 1b + mov.b r5,@-r4 + 2: ! make VVVV ++ extu.b r5,r5 + swap.b r5,r0 ! V0 + or r0,r5 ! VV + swap.w r5,r0 ! VV00 +diff -ruN linux-2.6.17-vanilla/arch/sh/math-emu/CVS/Entries linux-2.6.17/arch/sh/math-emu/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/math-emu/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/math-emu/CVS/Entries 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,4 @@ ++/Makefile/1.1/Wed Jul 12 10:35:55 2006/-ko/ ++/math.c/1.1/Wed Jul 12 10:35:55 2006/-ko/ ++/sfp-util.h/1.1/Wed Jul 12 10:35:55 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/math-emu/CVS/Repository linux-2.6.17/arch/sh/math-emu/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/math-emu/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/math-emu/CVS/Repository 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/math-emu +diff -ruN linux-2.6.17-vanilla/arch/sh/math-emu/CVS/Root linux-2.6.17/arch/sh/math-emu/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/math-emu/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/math-emu/CVS/Root 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/math-emu/Makefile linux-2.6.17/arch/sh/math-emu/Makefile +--- linux-2.6.17-vanilla/arch/sh/math-emu/Makefile 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/math-emu/Makefile 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++obj-y := math.o +diff -ruN linux-2.6.17-vanilla/arch/sh/math-emu/math.c linux-2.6.17/arch/sh/math-emu/math.c +--- linux-2.6.17-vanilla/arch/sh/math-emu/math.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/math-emu/math.c 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,624 @@ ++/* ++ * arch/sh/math-emu/math.c ++ * ++ * Copyright (C) 2006 Takashi YOSHII <takasi-y@ops.dti.ne.jp> ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ ++#include <linux/config.h> ++#include <linux/kernel.h> ++#include <linux/errno.h> ++#include <linux/types.h> ++#include <linux/sched.h> ++#include <linux/signal.h> ++ ++#include <asm/system.h> ++#include <asm/uaccess.h> ++#include <asm/processor.h> ++#include <asm/io.h> ++ ++#include "sfp-util.h" ++#include <math-emu/soft-fp.h> ++#include <math-emu/single.h> ++#include <math-emu/double.h> ++ ++#define FPUL (fregs->fpul) ++#define FPSCR (fregs->fpscr) ++#define FPSCR_RM (FPSCR&3) ++#define FPSCR_DN ((FPSCR>>18)&1) ++#define FPSCR_PR ((FPSCR>>19)&1) ++#define FPSCR_SZ ((FPSCR>>20)&1) ++#define FPSCR_FR ((FPSCR>>21)&1) ++#define FPSCR_MASK 0x003fffffUL ++ ++#define BANK(n) (n^(FPSCR_FR?16:0)) ++#define FR ((unsigned long*)(fregs->fp_regs)) ++#define FR0 (FR[BANK(0)]) ++#define FRn (FR[BANK(n)]) ++#define FRm (FR[BANK(m)]) ++#define DR ((unsigned long long*)(fregs->fp_regs)) ++#define DRn (DR[BANK(n)/2]) ++#define DRm (DR[BANK(m)/2]) ++ ++#define XREG(n) (n^16) ++#define XFn (FR[BANK(XREG(n))]) ++#define XFm (FR[BANK(XREG(m))]) ++#define XDn (DR[BANK(XREG(n))/2]) ++#define XDm (DR[BANK(XREG(m))/2]) ++ ++#define R0 (regs->regs[0]) ++#define Rn (regs->regs[n]) ++#define Rm (regs->regs[m]) ++ ++#define WRITE(d,a) ({if(put_user(d, (typeof (d)*)a)) return -EFAULT;}) ++#define READ(d,a) ({if(get_user(d, (typeof (d)*)a)) return -EFAULT;}) ++ ++#define PACK_S(r,f) FP_PACK_SP(&r,f) ++#define UNPACK_S(f,r) FP_UNPACK_SP(f,&r) ++#define PACK_D(r,f) \ ++ {u32 t[2]; FP_PACK_DP(t,f); ((u32*)&r)[0]=t[1]; ((u32*)&r)[1]=t[0];} ++#define UNPACK_D(f,r) \ ++ {u32 t[2]; t[0]=((u32*)&r)[1]; t[1]=((u32*)&r)[0]; FP_UNPACK_DP(f,t);} ++ ++// 2 args instructions. ++#define BOTH_PRmn(op,x) \ ++ FP_DECL_EX; if(FPSCR_PR) op(D,x,DRm,DRn); else op(S,x,FRm,FRn); ++ ++#define CMP_X(SZ,R,M,N) do{ \ ++ FP_DECL_##SZ(Fm); FP_DECL_##SZ(Fn); \ ++ UNPACK_##SZ(Fm, M); UNPACK_##SZ(Fn, N); \ ++ FP_CMP_##SZ(R, Fn, Fm, 2); }while(0) ++#define EQ_X(SZ,R,M,N) do{ \ ++ FP_DECL_##SZ(Fm); FP_DECL_##SZ(Fn); \ ++ UNPACK_##SZ(Fm, M); UNPACK_##SZ(Fn, N); \ ++ FP_CMP_EQ_##SZ(R, Fn, Fm); }while(0) ++#define CMP(OP) ({ int r; BOTH_PRmn(OP##_X,r); r; }) ++ ++static int ++fcmp_gt(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n) ++{ ++ if (CMP(CMP) > 0) ++ regs->sr |= 1; ++ else ++ regs->sr &= ~1; ++ ++ return 0; ++} ++ ++static int ++fcmp_eq(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n) ++{ ++ if (CMP(CMP /*EQ*/) == 0) ++ regs->sr |= 1; ++ else ++ regs->sr &= ~1; ++ return 0; ++} ++ ++#define ARITH_X(SZ,OP,M,N) do{ \ ++ FP_DECL_##SZ(Fm); FP_DECL_##SZ(Fn); FP_DECL_##SZ(Fr); \ ++ UNPACK_##SZ(Fm, M); UNPACK_##SZ(Fn, N); \ ++ FP_##OP##_##SZ(Fr, Fn, Fm); \ ++ PACK_##SZ(N, Fr); }while(0) ++ ++static int ++fadd(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n) ++{ ++ BOTH_PRmn(ARITH_X, ADD); ++ return 0; ++} ++ ++static int ++fsub(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n) ++{ ++ BOTH_PRmn(ARITH_X, SUB); ++ return 0; ++} ++ ++static int ++fmul(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n) ++{ ++ BOTH_PRmn(ARITH_X, MUL); ++ return 0; ++} ++ ++static int ++fdiv(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n) ++{ ++ BOTH_PRmn(ARITH_X, DIV); ++ return 0; ++} ++ ++static int ++fmac(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n) ++{ ++ FP_DECL_EX; ++ FP_DECL_S(Fr); ++ FP_DECL_S(Ft); ++ FP_DECL_S(F0); ++ FP_DECL_S(Fm); ++ FP_DECL_S(Fn); ++ UNPACK_S(F0, FR0); ++ UNPACK_S(Fm, FRm); ++ UNPACK_S(Fn, FRn); ++ FP_MUL_S(Ft, Fm, F0); ++ FP_ADD_S(Fr, Fn, Ft); ++ PACK_S(FRn, Fr); ++ return 0; ++} ++ ++// to process fmov's extention (odd n for DR access XD). ++#define FMOV_EXT(x) if(x&1) x+=16-1 ++ ++static int ++fmov_idx_reg(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, ++ int n) ++{ ++ if (FPSCR_SZ) { ++ FMOV_EXT(n); ++ READ(FRn, Rm + R0 + 4); ++ n++; ++ READ(FRn, Rm + R0); ++ } else { ++ READ(FRn, Rm + R0); ++ } ++ ++ return 0; ++} ++ ++static int ++fmov_mem_reg(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, ++ int n) ++{ ++ if (FPSCR_SZ) { ++ FMOV_EXT(n); ++ READ(FRn, Rm + 4); ++ n++; ++ READ(FRn, Rm); ++ } else { ++ READ(FRn, Rm); ++ } ++ ++ return 0; ++} ++ ++static int ++fmov_inc_reg(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, ++ int n) ++{ ++ if (FPSCR_SZ) { ++ FMOV_EXT(n); ++ READ(FRn, Rm + 4); ++ n++; ++ READ(FRn, Rm); ++ Rm += 8; ++ } else { ++ READ(FRn, Rm); ++ Rm += 4; ++ } ++ ++ return 0; ++} ++ ++static int ++fmov_reg_idx(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, ++ int n) ++{ ++ if (FPSCR_SZ) { ++ FMOV_EXT(m); ++ WRITE(FRm, Rn + R0 + 4); ++ m++; ++ WRITE(FRm, Rn + R0); ++ } else { ++ WRITE(FRm, Rn + R0); ++ } ++ ++ return 0; ++} ++ ++static int ++fmov_reg_mem(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, ++ int n) ++{ ++ if (FPSCR_SZ) { ++ FMOV_EXT(m); ++ WRITE(FRm, Rn + 4); ++ m++; ++ WRITE(FRm, Rn); ++ } else { ++ WRITE(FRm, Rn); ++ } ++ ++ return 0; ++} ++ ++static int ++fmov_reg_dec(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, ++ int n) ++{ ++ if (FPSCR_SZ) { ++ FMOV_EXT(m); ++ Rn -= 8; ++ WRITE(FRm, Rn + 4); ++ m++; ++ WRITE(FRm, Rn); ++ } else { ++ Rn -= 4; ++ WRITE(FRm, Rn); ++ } ++ ++ return 0; ++} ++ ++static int ++fmov_reg_reg(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, ++ int n) ++{ ++ if (FPSCR_SZ) { ++ FMOV_EXT(m); ++ FMOV_EXT(n); ++ DRn = DRm; ++ } else { ++ FRn = FRm; ++ } ++ ++ return 0; ++} ++ ++static int ++fnop_mn(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int m, int n) ++{ ++ return -EINVAL; ++} ++ ++// 1 arg instructions. ++#define NOTYETn(i) static int i(struct sh_fpu_soft_struct *fregs, int n) \ ++ { printk( #i " not yet done.\n"); return 0; } ++ ++NOTYETn(ftrv) ++NOTYETn(fsqrt) ++NOTYETn(fipr) ++NOTYETn(fsca) ++NOTYETn(fsrra) ++ ++#define EMU_FLOAT_X(SZ,N) do { \ ++ FP_DECL_##SZ(Fn); \ ++ FP_FROM_INT_##SZ(Fn, FPUL, 32, int); \ ++ PACK_##SZ(N, Fn); }while(0) ++static int ffloat(struct sh_fpu_soft_struct *fregs, int n) ++{ ++ FP_DECL_EX; ++ ++ if (FPSCR_PR) ++ EMU_FLOAT_X(D, DRn); ++ else ++ EMU_FLOAT_X(S, FRn); ++ ++ return 0; ++} ++ ++#define EMU_FTRC_X(SZ,N) do { \ ++ FP_DECL_##SZ(Fn); \ ++ UNPACK_##SZ(Fn, N); \ ++ FP_TO_INT_##SZ(FPUL, Fn, 32, 1); }while(0) ++static int ftrc(struct sh_fpu_soft_struct *fregs, int n) ++{ ++ FP_DECL_EX; ++ ++ if (FPSCR_PR) ++ EMU_FTRC_X(D, DRn); ++ else ++ EMU_FTRC_X(S, FRn); ++ ++ return 0; ++} ++ ++static int fcnvsd(struct sh_fpu_soft_struct *fregs, int n) ++{ ++ FP_DECL_EX; ++ FP_DECL_S(Fn); ++ FP_DECL_D(Fr); ++ UNPACK_S(Fn, FPUL); ++ FP_CONV(D, S, 2, 1, Fr, Fn); ++ PACK_D(DRn, Fr); ++ return 0; ++} ++ ++static int fcnvds(struct sh_fpu_soft_struct *fregs, int n) ++{ ++ FP_DECL_EX; ++ FP_DECL_D(Fn); ++ FP_DECL_S(Fr); ++ UNPACK_D(Fn, DRn); ++ FP_CONV(S, D, 1, 2, Fr, Fn); ++ PACK_S(FPUL, Fr); ++ return 0; ++} ++ ++static int fxchg(struct sh_fpu_soft_struct *fregs, int flag) ++{ ++ FPSCR ^= flag; ++ return 0; ++} ++ ++static int fsts(struct sh_fpu_soft_struct *fregs, int n) ++{ ++ FRn = FPUL; ++ return 0; ++} ++ ++static int flds(struct sh_fpu_soft_struct *fregs, int n) ++{ ++ FPUL = FRn; ++ return 0; ++} ++ ++static int fneg(struct sh_fpu_soft_struct *fregs, int n) ++{ ++ FRn ^= (1 << (_FP_W_TYPE_SIZE - 1)); ++ return 0; ++} ++ ++static int fabs(struct sh_fpu_soft_struct *fregs, int n) ++{ ++ FRn &= ~(1 << (_FP_W_TYPE_SIZE - 1)); ++ return 0; ++} ++ ++static int fld0(struct sh_fpu_soft_struct *fregs, int n) ++{ ++ FRn = 0; ++ return 0; ++} ++ ++static int fld1(struct sh_fpu_soft_struct *fregs, int n) ++{ ++ FRn = (_FP_EXPBIAS_S << (_FP_FRACBITS_S - 1)); ++ return 0; ++} ++ ++static int fnop_n(struct sh_fpu_soft_struct *fregs, int n) ++{ ++ return -EINVAL; ++} ++ ++/// Instruction decoders. ++ ++static int id_fxfd(struct sh_fpu_soft_struct *, int); ++static int id_fnxd(struct sh_fpu_soft_struct *, struct pt_regs *, int, int); ++ ++static int (*fnxd[])(struct sh_fpu_soft_struct *, int) = { ++ fsts, flds, ffloat, ftrc, fneg, fabs, fsqrt, fsrra, ++ fld0, fld1, fcnvsd, fcnvds, fnop_n, fnop_n, fipr, id_fxfd ++}; ++ ++static int (*fnmx[])(struct sh_fpu_soft_struct *, struct pt_regs *, int, int) = { ++ fadd, fsub, fmul, fdiv, fcmp_eq, fcmp_gt, fmov_idx_reg, fmov_reg_idx, ++ fmov_mem_reg, fmov_inc_reg, fmov_reg_mem, fmov_reg_dec, ++ fmov_reg_reg, id_fnxd, fmac, fnop_mn}; ++ ++static int id_fxfd(struct sh_fpu_soft_struct *fregs, int x) ++{ ++ const int flag[] = { FPSCR_SZ, FPSCR_PR, FPSCR_FR, 0 }; ++ switch (x & 3) { ++ case 3: ++ fxchg(fregs, flag[x >> 2]); ++ break; ++ case 1: ++ ftrv(fregs, x - 1); ++ break; ++ default: ++ fsca(fregs, x); ++ } ++ return 0; ++} ++ ++static int ++id_fnxd(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, int x, int n) ++{ ++ return (fnxd[x])(fregs, n); ++} ++ ++static int ++id_fnmx(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, u16 code) ++{ ++ int n = (code >> 8) & 0xf, m = (code >> 4) & 0xf, x = code & 0xf; ++ return (fnmx[x])(fregs, regs, m, n); ++} ++ ++static int ++id_sys(struct sh_fpu_soft_struct *fregs, struct pt_regs *regs, u16 code) ++{ ++ int n = ((code >> 8) & 0xf); ++ unsigned long *reg = (code & 0x0010) ? &FPUL : &FPSCR; ++ ++ switch (code & 0xf0ff) { ++ case 0x005a: ++ case 0x006a: ++ Rn = *reg; ++ break; ++ case 0x405a: ++ case 0x406a: ++ *reg = Rn; ++ break; ++ case 0x4052: ++ case 0x4062: ++ Rn -= 4; ++ WRITE(*reg, Rn); ++ break; ++ case 0x4056: ++ case 0x4066: ++ READ(*reg, Rn); ++ Rn += 4; ++ break; ++ default: ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++static int fpu_emulate(u16 code, struct sh_fpu_soft_struct *fregs, struct pt_regs *regs) ++{ ++ if ((code & 0xf000) == 0xf000) ++ return id_fnmx(fregs, regs, code); ++ else ++ return id_sys(fregs, regs, code); ++} ++ ++/** ++ * denormal_to_double - Given denormalized float number, ++ * store double float ++ * ++ * @fpu: Pointer to sh_fpu_hard structure ++ * @n: Index to FP register ++ */ ++static void denormal_to_double(struct sh_fpu_hard_struct *fpu, int n) ++{ ++ unsigned long du, dl; ++ unsigned long x = fpu->fpul; ++ int exp = 1023 - 126; ++ ++ if (x != 0 && (x & 0x7f800000) == 0) { ++ du = (x & 0x80000000); ++ while ((x & 0x00800000) == 0) { ++ x <<= 1; ++ exp--; ++ } ++ x &= 0x007fffff; ++ du |= (exp << 20) | (x >> 3); ++ dl = x << 29; ++ ++ fpu->fp_regs[n] = du; ++ fpu->fp_regs[n+1] = dl; ++ } ++} ++ ++/** ++ * ieee_fpe_handler - Handle denormalized number exception ++ * ++ * @regs: Pointer to register structure ++ * ++ * Returns 1 when it's handled (should not cause exception). ++ */ ++static int ieee_fpe_handler(struct pt_regs *regs) ++{ ++ unsigned short insn = *(unsigned short *)regs->pc; ++ unsigned short finsn; ++ unsigned long nextpc; ++ int nib[4] = { ++ (insn >> 12) & 0xf, ++ (insn >> 8) & 0xf, ++ (insn >> 4) & 0xf, ++ insn & 0xf}; ++ ++ if (nib[0] == 0xb || ++ (nib[0] == 0x4 && nib[2] == 0x0 && nib[3] == 0xb)) /* bsr & jsr */ ++ regs->pr = regs->pc + 4; ++ ++ if (nib[0] == 0xa || nib[0] == 0xb) { /* bra & bsr */ ++ nextpc = regs->pc + 4 + ((short) ((insn & 0xfff) << 4) >> 3); ++ finsn = *(unsigned short *) (regs->pc + 2); ++ } else if (nib[0] == 0x8 && nib[1] == 0xd) { /* bt/s */ ++ if (regs->sr & 1) ++ nextpc = regs->pc + 4 + ((char) (insn & 0xff) << 1); ++ else ++ nextpc = regs->pc + 4; ++ finsn = *(unsigned short *) (regs->pc + 2); ++ } else if (nib[0] == 0x8 && nib[1] == 0xf) { /* bf/s */ ++ if (regs->sr & 1) ++ nextpc = regs->pc + 4; ++ else ++ nextpc = regs->pc + 4 + ((char) (insn & 0xff) << 1); ++ finsn = *(unsigned short *) (regs->pc + 2); ++ } else if (nib[0] == 0x4 && nib[3] == 0xb && ++ (nib[2] == 0x0 || nib[2] == 0x2)) { /* jmp & jsr */ ++ nextpc = regs->regs[nib[1]]; ++ finsn = *(unsigned short *) (regs->pc + 2); ++ } else if (nib[0] == 0x0 && nib[3] == 0x3 && ++ (nib[2] == 0x0 || nib[2] == 0x2)) { /* braf & bsrf */ ++ nextpc = regs->pc + 4 + regs->regs[nib[1]]; ++ finsn = *(unsigned short *) (regs->pc + 2); ++ } else if (insn == 0x000b) { /* rts */ ++ nextpc = regs->pr; ++ finsn = *(unsigned short *) (regs->pc + 2); ++ } else { ++ nextpc = regs->pc + 2; ++ finsn = insn; ++ } ++ ++ if ((finsn & 0xf1ff) == 0xf0ad) { /* fcnvsd */ ++ struct task_struct *tsk = current; ++ ++ if ((tsk->thread.fpu.hard.fpscr & (1 << 17))) { ++ /* FPU error */ ++ denormal_to_double (&tsk->thread.fpu.hard, ++ (finsn >> 8) & 0xf); ++ tsk->thread.fpu.hard.fpscr &= ++ ~(FPSCR_CAUSE_MASK | FPSCR_FLAG_MASK); ++ set_tsk_thread_flag(tsk, TIF_USEDFPU); ++ } else { ++ tsk->thread.trap_no = 11; ++ tsk->thread.error_code = 0; ++ force_sig(SIGFPE, tsk); ++ } ++ ++ regs->pc = nextpc; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++asmlinkage void do_fpu_error(unsigned long r4, unsigned long r5, ++ unsigned long r6, unsigned long r7, ++ struct pt_regs regs) ++{ ++ struct task_struct *tsk = current; ++ ++ if (ieee_fpe_handler (®s)) ++ return; ++ ++ regs.pc += 2; ++ tsk->thread.trap_no = 11; ++ tsk->thread.error_code = 0; ++ force_sig(SIGFPE, tsk); ++} ++ ++/** ++ * fpu_init - Initialize FPU registers ++ * @fpu: Pointer to software emulated FPU registers. ++ */ ++static void fpu_init(struct sh_fpu_soft_struct *fpu) ++{ ++ int i; ++ ++ fpu->fpscr = FPSCR_INIT; ++ fpu->fpul = 0; ++ ++ for (i = 0; i < 16; i++) { ++ fpu->fp_regs[i] = 0; ++ fpu->xfp_regs[i]= 0; ++ } ++} ++ ++/** ++ * do_fpu_inst - Handle reserved instructions for FPU emulation ++ * @inst: instruction code. ++ * @regs: registers on stack. ++ */ ++int do_fpu_inst(unsigned short inst, struct pt_regs *regs) ++{ ++ struct task_struct *tsk = current; ++ struct sh_fpu_soft_struct *fpu = &(tsk->thread.fpu.soft); ++ ++ if (!test_tsk_thread_flag(tsk, TIF_USEDFPU)) { ++ /* initialize once. */ ++ fpu_init(fpu); ++ set_tsk_thread_flag(tsk, TIF_USEDFPU); ++ } ++ ++ return fpu_emulate(inst, fpu, regs); ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/math-emu/sfp-util.h linux-2.6.17/arch/sh/math-emu/sfp-util.h +--- linux-2.6.17-vanilla/arch/sh/math-emu/sfp-util.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/math-emu/sfp-util.h 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,72 @@ ++/* ++ * These are copied from glibc/stdlib/longlong.h ++ */ ++ ++#define add_ssaaaa(sh, sl, ah, al, bh, bl) \ ++ do { \ ++ UWtype __x; \ ++ __x = (al) + (bl); \ ++ (sh) = (ah) + (bh) + (__x < (al)); \ ++ (sl) = __x; \ ++ } while (0) ++ ++#define sub_ddmmss(sh, sl, ah, al, bh, bl) \ ++ do { \ ++ UWtype __x; \ ++ __x = (al) - (bl); \ ++ (sh) = (ah) - (bh) - (__x > (al)); \ ++ (sl) = __x; \ ++ } while (0) ++ ++#define umul_ppmm(w1, w0, u, v) \ ++ __asm__ ("dmulu.l %2,%3\n\tsts macl,%1\n\tsts mach,%0" \ ++ : "=r" ((u32)(w1)), "=r" ((u32)(w0)) \ ++ : "r" ((u32)(u)), "r" ((u32)(v)) \ ++ : "macl", "mach") ++ ++#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2)) ++#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1)) ++#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2)) ++ ++#define udiv_qrnnd(q, r, n1, n0, d) \ ++ do { \ ++ UWtype __d1, __d0, __q1, __q0; \ ++ UWtype __r1, __r0, __m; \ ++ __d1 = __ll_highpart (d); \ ++ __d0 = __ll_lowpart (d); \ ++ \ ++ __r1 = (n1) % __d1; \ ++ __q1 = (n1) / __d1; \ ++ __m = (UWtype) __q1 * __d0; \ ++ __r1 = __r1 * __ll_B | __ll_highpart (n0); \ ++ if (__r1 < __m) \ ++ { \ ++ __q1--, __r1 += (d); \ ++ if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\ ++ if (__r1 < __m) \ ++ __q1--, __r1 += (d); \ ++ } \ ++ __r1 -= __m; \ ++ \ ++ __r0 = __r1 % __d1; \ ++ __q0 = __r1 / __d1; \ ++ __m = (UWtype) __q0 * __d0; \ ++ __r0 = __r0 * __ll_B | __ll_lowpart (n0); \ ++ if (__r0 < __m) \ ++ { \ ++ __q0--, __r0 += (d); \ ++ if (__r0 >= (d)) \ ++ if (__r0 < __m) \ ++ __q0--, __r0 += (d); \ ++ } \ ++ __r0 -= __m; \ ++ \ ++ (q) = (UWtype) __q1 * __ll_B | __q0; \ ++ (r) = __r0; \ ++ } while (0) ++ ++#define abort() return 0 ++ ++#define __BYTE_ORDER __LITTLE_ENDIAN ++ ++ +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/CVS/Entries linux-2.6.17/arch/sh/mm/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/mm/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/CVS/Entries 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,25 @@ ++/Kconfig/1.10/Sun Jan 8 12:22:58 2006/-ko/ ++/Makefile/1.14/Wed Jan 4 14:49:04 2006// ++/cache-sh2.c/1.5/Thu Jul 8 13:52:22 2004/-ko/ ++/cache-sh3.c/1.11/Thu Jul 8 13:52:22 2004/-ko/ ++/cache-sh4.c/1.38/Thu Oct 20 22:48:04 2005/-ko/ ++/cache-sh7705.c/1.2/Tue Jun 21 04:15:48 2005/-ko/ ++/clear_page.S/1.14/Sat Jul 2 13:00:24 2005/-ko/ ++/copy_page.S/1.8/Mon Aug 25 17:03:10 2003// ++/extable.c/1.5/Tue Jun 15 18:40:43 2004/-ko/ ++/fault-nommu.c/1.3/Mon Oct 25 10:41:02 2004/-ko/ ++/fault.c/1.21/Mon Mar 27 21:06:14 2006/-ko/ ++/ioremap.c/1.16/Wed Feb 8 13:21:41 2006/-ko/ ++/pg-dma.c/1.4/Sat Mar 6 22:26:37 2004// ++/pg-nommu.c/1.1/Sat Oct 25 21:45:29 2003// ++/pg-sh4.c/1.5/Thu Sep 1 18:59:11 2005/-ko/ ++/pg-sh7705.c/1.2/Tue Jun 21 04:15:48 2005/-ko/ ++/pmb.c/1.2/Tue Jan 3 22:51:47 2006/-ko/ ++/tlb-flush.c/1.1/Sat Dec 31 11:30:47 2005/-ko/ ++/tlb-nommu.c/1.2/Sun May 4 19:29:55 2003/-ko/ ++/tlb-sh3.c/1.7/Sat Aug 13 14:30:27 2005/-ko/ ++/tlb-sh4.c/1.7/Sat Oct 8 22:08:39 2005/-ko/ ++/consistent.c/1.10/Wed Jul 5 14:50:50 2006// ++/hugetlbpage.c/1.12/Wed Jul 5 14:50:50 2006/-ko/ ++/init.c/1.28/Wed Jul 5 14:50:50 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/CVS/Repository linux-2.6.17/arch/sh/mm/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/mm/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/CVS/Repository 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/mm +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/CVS/Root linux-2.6.17/arch/sh/mm/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/mm/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/CVS/Root 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/Kconfig linux-2.6.17/arch/sh/mm/Kconfig +--- linux-2.6.17-vanilla/arch/sh/mm/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/Kconfig 2006-07-12 16:54:23.000000000 +0000 +@@ -20,7 +20,6 @@ + config CPU_SH4A + bool + select CPU_SH4 +- select CPU_HAS_INTC2_IRQ + + config CPU_SUBTYPE_ST40 + bool +@@ -144,6 +143,7 @@ + config CPU_SUBTYPE_SH7780 + bool "Support SH7780 processor" + select CPU_SH4A ++ select CPU_HAS_INTC2_IRQ + + endmenu + +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/Makefile linux-2.6.17/arch/sh/mm/Makefile +--- linux-2.6.17-vanilla/arch/sh/mm/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/Makefile 2006-07-12 16:54:23.000000000 +0000 +@@ -12,14 +12,16 @@ + obj-$(CONFIG_HUGETLB_PAGE) += hugetlbpage.o + + mmu-y := fault-nommu.o tlb-nommu.o pg-nommu.o +-mmu-$(CONFIG_MMU) := fault.o clear_page.o copy_page.o ++mmu-$(CONFIG_MMU) := fault.o clear_page.o copy_page.o tlb-flush.o \ ++ ioremap.o + + obj-y += $(mmu-y) + + ifdef CONFIG_MMU +-obj-$(CONFIG_CPU_SH3) += tlb-sh3.o +-obj-$(CONFIG_CPU_SH4) += tlb-sh4.o ioremap.o ++obj-$(CONFIG_CPU_SH3) += tlb-sh3.o ++obj-$(CONFIG_CPU_SH4) += tlb-sh4.o + obj-$(CONFIG_SH7705_CACHE_32KB) += pg-sh7705.o + endif + +-obj-$(CONFIG_SH7705_CACHE_32KB) += cache-sh7705.o ++obj-$(CONFIG_SH7705_CACHE_32KB) += cache-sh7705.o ++obj-$(CONFIG_32BIT) += pmb.o +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/cache-sh4.c linux-2.6.17/arch/sh/mm/cache-sh4.c +--- linux-2.6.17-vanilla/arch/sh/mm/cache-sh4.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/cache-sh4.c 2006-07-12 16:54:23.000000000 +0000 +@@ -2,7 +2,7 @@ + * arch/sh/mm/cache-sh4.c + * + * Copyright (C) 1999, 2000, 2002 Niibe Yutaka +- * Copyright (C) 2001, 2002, 2003, 2004 Paul Mundt ++ * Copyright (C) 2001, 2002, 2003, 2004, 2005 Paul Mundt + * Copyright (C) 2003 Richard Curnow + * + * This file is subject to the terms and conditions of the GNU General Public +@@ -26,26 +26,95 @@ + #include <asm/mmu_context.h> + #include <asm/cacheflush.h> + +-extern void __flush_cache_4096_all(unsigned long start); +-static void __flush_cache_4096_all_ex(unsigned long start); +-extern void __flush_dcache_all(void); +-static void __flush_dcache_all_ex(void); ++static void __flush_dcache_segment_1way(unsigned long start, ++ unsigned long extent); ++static void __flush_dcache_segment_2way(unsigned long start, ++ unsigned long extent); ++static void __flush_dcache_segment_4way(unsigned long start, ++ unsigned long extent); ++ ++static void __flush_cache_4096(unsigned long addr, unsigned long phys, ++ unsigned long exec_offset); ++ ++/* ++ * This is initialised here to ensure that it is not placed in the BSS. If ++ * that were to happen, note that cache_init gets called before the BSS is ++ * cleared, so this would get nulled out which would be hopeless. ++ */ ++static void (*__flush_dcache_segment_fn)(unsigned long, unsigned long) = ++ (void (*)(unsigned long, unsigned long))0xdeadbeef; ++ ++static void compute_alias(struct cache_info *c) ++{ ++ c->alias_mask = ((c->sets - 1) << c->entry_shift) & ~(PAGE_SIZE - 1); ++ c->n_aliases = (c->alias_mask >> PAGE_SHIFT) + 1; ++} ++ ++static void __init emit_cache_params(void) ++{ ++ printk("PVR=%08x CVR=%08x PRR=%08x\n", ++ ctrl_inl(CCN_PVR), ++ ctrl_inl(CCN_CVR), ++ ctrl_inl(CCN_PRR)); ++ printk("I-cache : n_ways=%d n_sets=%d way_incr=%d\n", ++ cpu_data->icache.ways, ++ cpu_data->icache.sets, ++ cpu_data->icache.way_incr); ++ printk("I-cache : entry_mask=0x%08x alias_mask=0x%08x n_aliases=%d\n", ++ cpu_data->icache.entry_mask, ++ cpu_data->icache.alias_mask, ++ cpu_data->icache.n_aliases); ++ printk("D-cache : n_ways=%d n_sets=%d way_incr=%d\n", ++ cpu_data->dcache.ways, ++ cpu_data->dcache.sets, ++ cpu_data->dcache.way_incr); ++ printk("D-cache : entry_mask=0x%08x alias_mask=0x%08x n_aliases=%d\n", ++ cpu_data->dcache.entry_mask, ++ cpu_data->dcache.alias_mask, ++ cpu_data->dcache.n_aliases); ++ ++ if (!__flush_dcache_segment_fn) ++ panic("unknown number of cache ways\n"); ++} + + /* + * SH-4 has virtually indexed and physically tagged cache. + */ + +-struct semaphore p3map_sem[4]; ++/* Worst case assumed to be 64k cache, direct-mapped i.e. 4 synonym bits. */ ++#define MAX_P3_SEMAPHORES 16 ++ ++struct semaphore p3map_sem[MAX_P3_SEMAPHORES]; + + void __init p3_cache_init(void) + { +- if (remap_area_pages(P3SEG, 0, PAGE_SIZE*4, _PAGE_CACHABLE)) ++ int i; ++ ++ compute_alias(&cpu_data->icache); ++ compute_alias(&cpu_data->dcache); ++ ++ switch (cpu_data->dcache.ways) { ++ case 1: ++ __flush_dcache_segment_fn = __flush_dcache_segment_1way; ++ break; ++ case 2: ++ __flush_dcache_segment_fn = __flush_dcache_segment_2way; ++ break; ++ case 4: ++ __flush_dcache_segment_fn = __flush_dcache_segment_4way; ++ break; ++ default: ++ __flush_dcache_segment_fn = NULL; ++ break; ++ } ++ ++ emit_cache_params(); ++ ++ if (remap_area_pages(P3SEG, 0, PAGE_SIZE * 4, _PAGE_CACHABLE)) + panic("%s failed.", __FUNCTION__); + +- sema_init (&p3map_sem[0], 1); +- sema_init (&p3map_sem[1], 1); +- sema_init (&p3map_sem[2], 1); +- sema_init (&p3map_sem[3], 1); ++ for (i = 0; i < cpu_data->dcache.n_aliases; i++) ++ sema_init(&p3map_sem[i], 1); + } + + /* +@@ -90,7 +159,6 @@ + } + } + +- + /* + * No write back please + */ +@@ -109,40 +177,6 @@ + } + } + +-static void __flush_dcache_all_ex(void) +-{ +- unsigned long addr, end_addr, entry_offset; +- +- end_addr = CACHE_OC_ADDRESS_ARRAY + (cpu_data->dcache.sets << cpu_data->dcache.entry_shift) * cpu_data->dcache.ways; +- entry_offset = 1 << cpu_data->dcache.entry_shift; +- for (addr = CACHE_OC_ADDRESS_ARRAY; addr < end_addr; addr += entry_offset) { +- ctrl_outl(0, addr); +- } +-} +- +-static void __flush_cache_4096_all_ex(unsigned long start) +-{ +- unsigned long addr, entry_offset; +- int i; +- +- entry_offset = 1 << cpu_data->dcache.entry_shift; +- for (i = 0; i < cpu_data->dcache.ways; i++, start += cpu_data->dcache.way_incr) { +- for (addr = CACHE_OC_ADDRESS_ARRAY + start; +- addr < CACHE_OC_ADDRESS_ARRAY + 4096 + start; +- addr += entry_offset) { +- ctrl_outl(0, addr); +- } +- } +-} +- +-void flush_cache_4096_all(unsigned long start) +-{ +- if (cpu_data->dcache.ways == 1) +- __flush_cache_4096_all(start); +- else +- __flush_cache_4096_all_ex(start); +-} +- + /* + * Write back the range of D-cache, and purge the I-cache. + * +@@ -154,14 +188,14 @@ + } + + /* +- * Write back the D-cache and purge the I-cache for signal trampoline. ++ * Write back the D-cache and purge the I-cache for signal trampoline. + * .. which happens to be the same behavior as flush_icache_range(). + * So, we simply flush out a line. + */ + void flush_cache_sigtramp(unsigned long addr) + { + unsigned long v, index; +- unsigned long flags; ++ unsigned long flags; + int i; + + v = addr & ~(L1_CACHE_BYTES-1); +@@ -173,29 +207,34 @@ + + local_irq_save(flags); + jump_to_P2(); +- for(i = 0; i < cpu_data->icache.ways; i++, index += cpu_data->icache.way_incr) ++ ++ for (i = 0; i < cpu_data->icache.ways; ++ i++, index += cpu_data->icache.way_incr) + ctrl_outl(0, index); /* Clear out Valid-bit */ ++ + back_to_P1(); ++ wmb(); + local_irq_restore(flags); + } + + static inline void flush_cache_4096(unsigned long start, + unsigned long phys) + { +- unsigned long flags; +- extern void __flush_cache_4096(unsigned long addr, unsigned long phys, unsigned long exec_offset); ++ unsigned long flags; + + /* +- * SH7751, SH7751R, and ST40 have no restriction to handle cache. +- * (While SH7750 must do that at P2 area.) ++ * All types of SH-4 require PC to be in P2 to operate on the I-cache. ++ * Some types of SH-4 require PC to be in P2 to operate on the D-cache. + */ + if ((cpu_data->flags & CPU_HAS_P2_FLUSH_BUG) + || start < CACHE_OC_ADDRESS_ARRAY) { + local_irq_save(flags); +- __flush_cache_4096(start | SH_CACHE_ASSOC, P1SEGADDR(phys), 0x20000000); ++ __flush_cache_4096(start | SH_CACHE_ASSOC, ++ P1SEGADDR(phys), 0x20000000); + local_irq_restore(flags); + } else { +- __flush_cache_4096(start | SH_CACHE_ASSOC, P1SEGADDR(phys), 0); ++ __flush_cache_4096(start | SH_CACHE_ASSOC, ++ P1SEGADDR(phys), 0); + } + } + +@@ -207,13 +246,16 @@ + { + if (test_bit(PG_mapped, &page->flags)) { + unsigned long phys = PHYSADDR(page_address(page)); ++ unsigned long addr = CACHE_OC_ADDRESS_ARRAY; ++ int i, n; + + /* Loop all the D-cache */ +- flush_cache_4096(CACHE_OC_ADDRESS_ARRAY, phys); +- flush_cache_4096(CACHE_OC_ADDRESS_ARRAY | 0x1000, phys); +- flush_cache_4096(CACHE_OC_ADDRESS_ARRAY | 0x2000, phys); +- flush_cache_4096(CACHE_OC_ADDRESS_ARRAY | 0x3000, phys); ++ n = cpu_data->dcache.n_aliases; ++ for (i = 0; i < n; i++, addr += PAGE_SIZE) ++ flush_cache_4096(addr, phys); + } ++ ++ wmb(); + } + + static inline void flush_icache_all(void) +@@ -228,32 +270,38 @@ + ccr |= CCR_CACHE_ICI; + ctrl_outl(ccr, CCR); + ++ /* ++ * back_to_P1() will take care of the barrier for us, don't add ++ * another one! ++ */ ++ + back_to_P1(); + local_irq_restore(flags); + } + ++void flush_dcache_all(void) ++{ ++ (*__flush_dcache_segment_fn)(0UL, cpu_data->dcache.way_size); ++ wmb(); ++} ++ + void flush_cache_all(void) + { +- if (cpu_data->dcache.ways == 1) +- __flush_dcache_all(); +- else +- __flush_dcache_all_ex(); ++ flush_dcache_all(); + flush_icache_all(); + } + + void flush_cache_mm(struct mm_struct *mm) + { +- /* Is there any good way? */ +- /* XXX: possibly call flush_cache_range for each vm area */ +- /* +- * FIXME: Really, the optimal solution here would be able to flush out +- * individual lines created by the specified context, but this isn't +- * feasible for a number of architectures (such as MIPS, and some +- * SPARC) .. is this possible for SuperH? +- * +- * In the meantime, we'll just flush all of the caches.. this +- * seems to be the simplest way to avoid at least a few wasted +- * cache flushes. -Lethal ++ /* ++ * Note : (RPC) since the caches are physically tagged, the only point ++ * of flush_cache_mm for SH-4 is to get rid of aliases from the ++ * D-cache. The assumption elsewhere, e.g. flush_cache_range, is that ++ * lines can stay resident so long as the virtual address they were ++ * accessed with (hence cache set) is in accord with the physical ++ * address (i.e. tag). It's no different here. So I reckon we don't ++ * need to flush the I-cache, since aliases don't matter for that. We ++ * should try that. + */ + flush_cache_all(); + } +@@ -267,24 +315,36 @@ + void flush_cache_page(struct vm_area_struct *vma, unsigned long address, unsigned long pfn) + { + unsigned long phys = pfn << PAGE_SHIFT; ++ unsigned int alias_mask; ++ ++ alias_mask = cpu_data->dcache.alias_mask; + + /* We only need to flush D-cache when we have alias */ +- if ((address^phys) & CACHE_ALIAS) { ++ if ((address^phys) & alias_mask) { + /* Loop 4K of the D-cache */ + flush_cache_4096( +- CACHE_OC_ADDRESS_ARRAY | (address & CACHE_ALIAS), ++ CACHE_OC_ADDRESS_ARRAY | (address & alias_mask), + phys); + /* Loop another 4K of the D-cache */ + flush_cache_4096( +- CACHE_OC_ADDRESS_ARRAY | (phys & CACHE_ALIAS), ++ CACHE_OC_ADDRESS_ARRAY | (phys & alias_mask), + phys); + } + +- if (vma->vm_flags & VM_EXEC) +- /* Loop 4K (half) of the I-cache */ ++ alias_mask = cpu_data->icache.alias_mask; ++ if (vma->vm_flags & VM_EXEC) { ++ /* ++ * Evict entries from the portion of the cache from which code ++ * may have been executed at this address (virtual). There's ++ * no need to evict from the portion corresponding to the ++ * physical address as for the D-cache, because we know the ++ * kernel has never executed the code through its identity ++ * translation. ++ */ + flush_cache_4096( +- CACHE_IC_ADDRESS_ARRAY | (address & 0x1000), ++ CACHE_IC_ADDRESS_ARRAY | (address & alias_mask), + phys); ++ } + } + + /* +@@ -299,52 +359,96 @@ + void flush_cache_range(struct vm_area_struct *vma, unsigned long start, + unsigned long end) + { +- unsigned long p = start & PAGE_MASK; ++ unsigned long d = 0, p = start & PAGE_MASK; ++ unsigned long alias_mask = cpu_data->dcache.alias_mask; ++ unsigned long n_aliases = cpu_data->dcache.n_aliases; ++ unsigned long select_bit; ++ unsigned long all_aliases_mask; ++ unsigned long addr_offset; ++ unsigned long phys; + pgd_t *dir; + pmd_t *pmd; ++ pud_t *pud; + pte_t *pte; + pte_t entry; +- unsigned long phys; +- unsigned long d = 0; ++ int i; ++ ++ /* ++ * If cache is only 4k-per-way, there are never any 'aliases'. Since ++ * the cache is physically tagged, the data can just be left in there. ++ */ ++ if (n_aliases == 0) ++ return; ++ ++ all_aliases_mask = (1 << n_aliases) - 1; ++ ++ /* ++ * Don't bother with the lookup and alias check if we have a ++ * wide range to cover, just blow away the dcache in its ++ * entirety instead. -- PFM. ++ */ ++ if (((end - start) >> PAGE_SHIFT) >= 64) { ++ flush_dcache_all(); ++ ++ if (vma->vm_flags & VM_EXEC) ++ flush_icache_all(); ++ ++ return; ++ } + + dir = pgd_offset(vma->vm_mm, p); +- pmd = pmd_offset(dir, p); ++ pud = pud_offset(dir, p); ++ pmd = pmd_offset(pud, p); ++ end = PAGE_ALIGN(end); + + do { + if (pmd_none(*pmd) || pmd_bad(*pmd)) { +- p &= ~((1 << PMD_SHIFT) -1); ++ p &= ~((1 << PMD_SHIFT) - 1); + p += (1 << PMD_SHIFT); + pmd++; ++ + continue; + } ++ + pte = pte_offset_kernel(pmd, p); ++ + do { + entry = *pte; ++ + if ((pte_val(entry) & _PAGE_PRESENT)) { +- phys = pte_val(entry)&PTE_PHYS_MASK; +- if ((p^phys) & CACHE_ALIAS) { +- d |= 1 << ((p & CACHE_ALIAS)>>12); +- d |= 1 << ((phys & CACHE_ALIAS)>>12); +- if (d == 0x0f) ++ phys = pte_val(entry) & PTE_PHYS_MASK; ++ ++ if ((p ^ phys) & alias_mask) { ++ d |= 1 << ((p & alias_mask) >> PAGE_SHIFT); ++ d |= 1 << ((phys & alias_mask) >> PAGE_SHIFT); ++ ++ if (d == all_aliases_mask) + goto loop_exit; + } + } ++ + pte++; + p += PAGE_SIZE; + } while (p < end && ((unsigned long)pte & ~PAGE_MASK)); + pmd++; + } while (p < end); +- loop_exit: +- if (d & 1) +- flush_cache_4096_all(0); +- if (d & 2) +- flush_cache_4096_all(0x1000); +- if (d & 4) +- flush_cache_4096_all(0x2000); +- if (d & 8) +- flush_cache_4096_all(0x3000); +- if (vma->vm_flags & VM_EXEC) ++ ++loop_exit: ++ for (i = 0, select_bit = 0x1, addr_offset = 0x0; i < n_aliases; ++ i++, select_bit <<= 1, addr_offset += PAGE_SIZE) ++ if (d & select_bit) { ++ (*__flush_dcache_segment_fn)(addr_offset, PAGE_SIZE); ++ wmb(); ++ } ++ ++ if (vma->vm_flags & VM_EXEC) { ++ /* ++ * TODO: Is this required??? Need to look at how I-cache ++ * coherency is assured when new programs are loaded to see if ++ * this matters. ++ */ + flush_icache_all(); ++ } + } + + /* +@@ -358,5 +462,274 @@ + struct page *page, unsigned long addr, int len) + { + flush_cache_page(vma, addr, page_to_pfn(page)); ++ mb(); ++} ++ ++/** ++ * __flush_cache_4096 ++ * ++ * @addr: address in memory mapped cache array ++ * @phys: P1 address to flush (has to match tags if addr has 'A' bit ++ * set i.e. associative write) ++ * @exec_offset: set to 0x20000000 if flush has to be executed from P2 ++ * region else 0x0 ++ * ++ * The offset into the cache array implied by 'addr' selects the ++ * 'colour' of the virtual address range that will be flushed. The ++ * operation (purge/write-back) is selected by the lower 2 bits of ++ * 'phys'. ++ */ ++static void __flush_cache_4096(unsigned long addr, unsigned long phys, ++ unsigned long exec_offset) ++{ ++ int way_count; ++ unsigned long base_addr = addr; ++ struct cache_info *dcache; ++ unsigned long way_incr; ++ unsigned long a, ea, p; ++ unsigned long temp_pc; ++ ++ dcache = &cpu_data->dcache; ++ /* Write this way for better assembly. */ ++ way_count = dcache->ways; ++ way_incr = dcache->way_incr; ++ ++ /* ++ * Apply exec_offset (i.e. branch to P2 if required.). ++ * ++ * FIXME: ++ * ++ * If I write "=r" for the (temp_pc), it puts this in r6 hence ++ * trashing exec_offset before it's been added on - why? Hence ++ * "=&r" as a 'workaround' ++ */ ++ asm volatile("mov.l 1f, %0\n\t" ++ "add %1, %0\n\t" ++ "jmp @%0\n\t" ++ "nop\n\t" ++ ".balign 4\n\t" ++ "1: .long 2f\n\t" ++ "2:\n" : "=&r" (temp_pc) : "r" (exec_offset)); ++ ++ /* ++ * We know there will be >=1 iteration, so write as do-while to avoid ++ * pointless nead-of-loop check for 0 iterations. ++ */ ++ do { ++ ea = base_addr + PAGE_SIZE; ++ a = base_addr; ++ p = phys; ++ ++ do { ++ *(volatile unsigned long *)a = p; ++ /* ++ * Next line: intentionally not p+32, saves an add, p ++ * will do since only the cache tag bits need to ++ * match. ++ */ ++ *(volatile unsigned long *)(a+32) = p; ++ a += 64; ++ p += 64; ++ } while (a < ea); ++ ++ base_addr += way_incr; ++ } while (--way_count != 0); ++} ++ ++/* ++ * Break the 1, 2 and 4 way variants of this out into separate functions to ++ * avoid nearly all the overhead of having the conditional stuff in the function ++ * bodies (+ the 1 and 2 way cases avoid saving any registers too). ++ */ ++static void __flush_dcache_segment_1way(unsigned long start, ++ unsigned long extent_per_way) ++{ ++ unsigned long orig_sr, sr_with_bl; ++ unsigned long base_addr; ++ unsigned long way_incr, linesz, way_size; ++ struct cache_info *dcache; ++ register unsigned long a0, a0e; ++ ++ asm volatile("stc sr, %0" : "=r" (orig_sr)); ++ sr_with_bl = orig_sr | (1<<28); ++ base_addr = ((unsigned long)&empty_zero_page[0]); ++ ++ /* ++ * The previous code aligned base_addr to 16k, i.e. the way_size of all ++ * existing SH-4 D-caches. Whilst I don't see a need to have this ++ * aligned to any better than the cache line size (which it will be ++ * anyway by construction), let's align it to at least the way_size of ++ * any existing or conceivable SH-4 D-cache. -- RPC ++ */ ++ base_addr = ((base_addr >> 16) << 16); ++ base_addr |= start; ++ ++ dcache = &cpu_data->dcache; ++ linesz = dcache->linesz; ++ way_incr = dcache->way_incr; ++ way_size = dcache->way_size; ++ ++ a0 = base_addr; ++ a0e = base_addr + extent_per_way; ++ do { ++ asm volatile("ldc %0, sr" : : "r" (sr_with_bl)); ++ asm volatile("movca.l r0, @%0\n\t" ++ "ocbi @%0" : : "r" (a0)); ++ a0 += linesz; ++ asm volatile("movca.l r0, @%0\n\t" ++ "ocbi @%0" : : "r" (a0)); ++ a0 += linesz; ++ asm volatile("movca.l r0, @%0\n\t" ++ "ocbi @%0" : : "r" (a0)); ++ a0 += linesz; ++ asm volatile("movca.l r0, @%0\n\t" ++ "ocbi @%0" : : "r" (a0)); ++ asm volatile("ldc %0, sr" : : "r" (orig_sr)); ++ a0 += linesz; ++ } while (a0 < a0e); ++} ++ ++static void __flush_dcache_segment_2way(unsigned long start, ++ unsigned long extent_per_way) ++{ ++ unsigned long orig_sr, sr_with_bl; ++ unsigned long base_addr; ++ unsigned long way_incr, linesz, way_size; ++ struct cache_info *dcache; ++ register unsigned long a0, a1, a0e; ++ ++ asm volatile("stc sr, %0" : "=r" (orig_sr)); ++ sr_with_bl = orig_sr | (1<<28); ++ base_addr = ((unsigned long)&empty_zero_page[0]); ++ ++ /* See comment under 1-way above */ ++ base_addr = ((base_addr >> 16) << 16); ++ base_addr |= start; ++ ++ dcache = &cpu_data->dcache; ++ linesz = dcache->linesz; ++ way_incr = dcache->way_incr; ++ way_size = dcache->way_size; ++ ++ a0 = base_addr; ++ a1 = a0 + way_incr; ++ a0e = base_addr + extent_per_way; ++ do { ++ asm volatile("ldc %0, sr" : : "r" (sr_with_bl)); ++ asm volatile("movca.l r0, @%0\n\t" ++ "movca.l r0, @%1\n\t" ++ "ocbi @%0\n\t" ++ "ocbi @%1" : : ++ "r" (a0), "r" (a1)); ++ a0 += linesz; ++ a1 += linesz; ++ asm volatile("movca.l r0, @%0\n\t" ++ "movca.l r0, @%1\n\t" ++ "ocbi @%0\n\t" ++ "ocbi @%1" : : ++ "r" (a0), "r" (a1)); ++ a0 += linesz; ++ a1 += linesz; ++ asm volatile("movca.l r0, @%0\n\t" ++ "movca.l r0, @%1\n\t" ++ "ocbi @%0\n\t" ++ "ocbi @%1" : : ++ "r" (a0), "r" (a1)); ++ a0 += linesz; ++ a1 += linesz; ++ asm volatile("movca.l r0, @%0\n\t" ++ "movca.l r0, @%1\n\t" ++ "ocbi @%0\n\t" ++ "ocbi @%1" : : ++ "r" (a0), "r" (a1)); ++ asm volatile("ldc %0, sr" : : "r" (orig_sr)); ++ a0 += linesz; ++ a1 += linesz; ++ } while (a0 < a0e); ++} ++ ++static void __flush_dcache_segment_4way(unsigned long start, ++ unsigned long extent_per_way) ++{ ++ unsigned long orig_sr, sr_with_bl; ++ unsigned long base_addr; ++ unsigned long way_incr, linesz, way_size; ++ struct cache_info *dcache; ++ register unsigned long a0, a1, a2, a3, a0e; ++ ++ asm volatile("stc sr, %0" : "=r" (orig_sr)); ++ sr_with_bl = orig_sr | (1<<28); ++ base_addr = ((unsigned long)&empty_zero_page[0]); ++ ++ /* See comment under 1-way above */ ++ base_addr = ((base_addr >> 16) << 16); ++ base_addr |= start; ++ ++ dcache = &cpu_data->dcache; ++ linesz = dcache->linesz; ++ way_incr = dcache->way_incr; ++ way_size = dcache->way_size; ++ ++ a0 = base_addr; ++ a1 = a0 + way_incr; ++ a2 = a1 + way_incr; ++ a3 = a2 + way_incr; ++ a0e = base_addr + extent_per_way; ++ do { ++ asm volatile("ldc %0, sr" : : "r" (sr_with_bl)); ++ asm volatile("movca.l r0, @%0\n\t" ++ "movca.l r0, @%1\n\t" ++ "movca.l r0, @%2\n\t" ++ "movca.l r0, @%3\n\t" ++ "ocbi @%0\n\t" ++ "ocbi @%1\n\t" ++ "ocbi @%2\n\t" ++ "ocbi @%3\n\t" : : ++ "r" (a0), "r" (a1), "r" (a2), "r" (a3)); ++ a0 += linesz; ++ a1 += linesz; ++ a2 += linesz; ++ a3 += linesz; ++ asm volatile("movca.l r0, @%0\n\t" ++ "movca.l r0, @%1\n\t" ++ "movca.l r0, @%2\n\t" ++ "movca.l r0, @%3\n\t" ++ "ocbi @%0\n\t" ++ "ocbi @%1\n\t" ++ "ocbi @%2\n\t" ++ "ocbi @%3\n\t" : : ++ "r" (a0), "r" (a1), "r" (a2), "r" (a3)); ++ a0 += linesz; ++ a1 += linesz; ++ a2 += linesz; ++ a3 += linesz; ++ asm volatile("movca.l r0, @%0\n\t" ++ "movca.l r0, @%1\n\t" ++ "movca.l r0, @%2\n\t" ++ "movca.l r0, @%3\n\t" ++ "ocbi @%0\n\t" ++ "ocbi @%1\n\t" ++ "ocbi @%2\n\t" ++ "ocbi @%3\n\t" : : ++ "r" (a0), "r" (a1), "r" (a2), "r" (a3)); ++ a0 += linesz; ++ a1 += linesz; ++ a2 += linesz; ++ a3 += linesz; ++ asm volatile("movca.l r0, @%0\n\t" ++ "movca.l r0, @%1\n\t" ++ "movca.l r0, @%2\n\t" ++ "movca.l r0, @%3\n\t" ++ "ocbi @%0\n\t" ++ "ocbi @%1\n\t" ++ "ocbi @%2\n\t" ++ "ocbi @%3\n\t" : : ++ "r" (a0), "r" (a1), "r" (a2), "r" (a3)); ++ asm volatile("ldc %0, sr" : : "r" (orig_sr)); ++ a0 += linesz; ++ a1 += linesz; ++ a2 += linesz; ++ a3 += linesz; ++ } while (a0 < a0e); + } + +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/clear_page.S linux-2.6.17/arch/sh/mm/clear_page.S +--- linux-2.6.17-vanilla/arch/sh/mm/clear_page.S 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/clear_page.S 2006-07-12 16:54:23.000000000 +0000 +@@ -194,102 +194,5 @@ + nop + .L4096: .word 4096 + +-ENTRY(__flush_cache_4096) +- mov.l 1f,r3 +- add r6,r3 +- mov r4,r0 +- mov #64,r2 +- shll r2 +- mov #64,r6 +- jmp @r3 +- mov #96,r7 +- .align 2 +-1: .long 2f +-2: +- .rept 32 +- mov.l r5,@r0 +- mov.l r5,@(32,r0) +- mov.l r5,@(r0,r6) +- mov.l r5,@(r0,r7) +- add r2,r5 +- add r2,r0 +- .endr +- nop +- nop +- nop +- nop +- nop +- nop +- nop +- rts +- nop +- +-ENTRY(__flush_dcache_all) +- mov.l 2f,r0 +- mov.l 3f,r4 +- and r0,r4 ! r4 = (unsigned long)&empty_zero_page[0] & ~0xffffc000 +- stc sr,r1 ! save SR +- mov.l 4f,r2 +- or r1,r2 +- mov #32,r3 +- shll2 r3 +-1: +- ldc r2,sr ! set BL bit +- movca.l r0,@r4 +- ocbi @r4 +- add #32,r4 +- movca.l r0,@r4 +- ocbi @r4 +- add #32,r4 +- movca.l r0,@r4 +- ocbi @r4 +- add #32,r4 +- movca.l r0,@r4 +- ocbi @r4 +- ldc r1,sr ! restore SR +- dt r3 +- bf/s 1b +- add #32,r4 +- +- rts +- nop +- .align 2 +-2: .long 0xffffc000 +-3: .long empty_zero_page +-4: .long 0x10000000 ! BL bit +- +-/* __flush_cache_4096_all(unsigned long addr) */ +-ENTRY(__flush_cache_4096_all) +- mov.l 2f,r0 +- mov.l 3f,r2 +- and r0,r2 +- or r2,r4 ! r4 = addr | (unsigned long)&empty_zero_page[0] & ~0x3fff +- stc sr,r1 ! save SR +- mov.l 4f,r2 +- or r1,r2 +- mov #32,r3 +-1: +- ldc r2,sr ! set BL bit +- movca.l r0,@r4 +- ocbi @r4 +- add #32,r4 +- movca.l r0,@r4 +- ocbi @r4 +- add #32,r4 +- movca.l r0,@r4 +- ocbi @r4 +- add #32,r4 +- movca.l r0,@r4 +- ocbi @r4 +- ldc r1,sr ! restore SR +- dt r3 +- bf/s 1b +- add #32,r4 +- +- rts +- nop +- .align 2 +-2: .long 0xffffc000 +-3: .long empty_zero_page +-4: .long 0x10000000 ! BL bit + #endif ++ +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/consistent.c linux-2.6.17/arch/sh/mm/consistent.c +--- linux-2.6.17-vanilla/arch/sh/mm/consistent.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/consistent.c 2006-07-12 16:54:23.000000000 +0000 +@@ -9,6 +9,8 @@ + */ + #include <linux/mm.h> + #include <linux/dma-mapping.h> ++#include <asm/cacheflush.h> ++#include <asm/addrspace.h> + #include <asm/io.h> + + void *consistent_alloc(gfp_t gfp, size_t size, dma_addr_t *handle) +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/fault.c linux-2.6.17/arch/sh/mm/fault.c +--- linux-2.6.17-vanilla/arch/sh/mm/fault.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/fault.c 2006-07-12 16:54:23.000000000 +0000 +@@ -1,33 +1,21 @@ +-/* $Id: fault.c,v 1.14 2004/01/13 05:52:11 kkojima Exp $ ++/* ++ * Page fault handler for SH with an MMU. + * +- * linux/arch/sh/mm/fault.c + * Copyright (C) 1999 Niibe Yutaka + * Copyright (C) 2003 Paul Mundt + * + * Based on linux/arch/i386/mm/fault.c: + * Copyright (C) 1995 Linus Torvalds ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. + */ +- +-#include <linux/signal.h> +-#include <linux/sched.h> + #include <linux/kernel.h> +-#include <linux/errno.h> +-#include <linux/string.h> +-#include <linux/types.h> +-#include <linux/ptrace.h> +-#include <linux/mman.h> + #include <linux/mm.h> +-#include <linux/smp.h> +-#include <linux/smp_lock.h> +-#include <linux/interrupt.h> +-#include <linux/module.h> +- ++#include <linux/hardirq.h> + #include <asm/system.h> +-#include <asm/io.h> +-#include <asm/uaccess.h> +-#include <asm/pgalloc.h> + #include <asm/mmu_context.h> +-#include <asm/cacheflush.h> + #include <asm/kgdb.h> + + extern void die(const char *,struct pt_regs *,long); +@@ -187,14 +175,25 @@ + goto no_context; + } + ++#ifdef CONFIG_SH_STORE_QUEUES ++/* ++ * This is a special case for the SH-4 store queues, as pages for this ++ * space still need to be faulted in before it's possible to flush the ++ * store queue cache for writeout to the remapped region. ++ */ ++#define P3_ADDR_MAX (P4SEG_STORE_QUE + 0x04000000) ++#else ++#define P3_ADDR_MAX P4SEG ++#endif ++ + /* +- * Called with interrupt disabled. ++ * Called with interrupts disabled. + */ + asmlinkage int __do_page_fault(struct pt_regs *regs, unsigned long writeaccess, + unsigned long address) + { +- unsigned long addrmax = P4SEG; + pgd_t *pgd; ++ pud_t *pud; + pmd_t *pmd; + pte_t *pte; + pte_t entry; +@@ -207,31 +206,37 @@ + kgdb_bus_err_hook(); + #endif + +-#ifdef CONFIG_SH_STORE_QUEUES +- addrmax = P4SEG_STORE_QUE + 0x04000000; +-#endif +- +- if (address >= P3SEG && address < addrmax) { ++ /* ++ * We don't take page faults for P1, P2, and parts of P4, these ++ * are always mapped, whether it be due to legacy behaviour in ++ * 29-bit mode, or due to PMB configuration in 32-bit mode. ++ */ ++ if (address >= P3SEG && address < P3_ADDR_MAX) { + pgd = pgd_offset_k(address); + mm = NULL; +- } else if (address >= TASK_SIZE) +- return 1; +- else if (!(mm = current->mm)) +- return 1; +- else +- pgd = pgd_offset(mm, address); ++ } else { ++ if (unlikely(address >= TASK_SIZE || !(mm = current->mm))) ++ return 1; + +- pmd = pmd_offset(pgd, address); ++ pgd = pgd_offset(current->mm, address); ++ } ++ ++ pud = pud_offset(pgd, address); ++ if (pud_none_or_clear_bad(pud)) ++ return 1; ++ pmd = pmd_offset(pud, address); + if (pmd_none_or_clear_bad(pmd)) + return 1; ++ + if (mm) + pte = pte_offset_map_lock(mm, pmd, address, &ptl); + else + pte = pte_offset_kernel(pmd, address); + + entry = *pte; +- if (pte_none(entry) || pte_not_present(entry) +- || (writeaccess && !pte_write(entry))) ++ if (unlikely(pte_none(entry) || pte_not_present(entry))) ++ goto unlock; ++ if (unlikely(writeaccess && !pte_write(entry))) + goto unlock; + + if (writeaccess) +@@ -243,13 +248,7 @@ + * ITLB is not affected by "ldtlb" instruction. + * So, we need to flush the entry by ourselves. + */ +- +- { +- unsigned long flags; +- local_irq_save(flags); +- __flush_tlb_page(get_asid(), address&PAGE_MASK); +- local_irq_restore(flags); +- } ++ __flush_tlb_page(get_asid(), address & PAGE_MASK); + #endif + + set_pte(pte, entry); +@@ -260,121 +259,3 @@ + pte_unmap_unlock(pte, ptl); + return ret; + } +- +-void flush_tlb_page(struct vm_area_struct *vma, unsigned long page) +-{ +- if (vma->vm_mm && vma->vm_mm->context != NO_CONTEXT) { +- unsigned long flags; +- unsigned long asid; +- unsigned long saved_asid = MMU_NO_ASID; +- +- asid = vma->vm_mm->context & MMU_CONTEXT_ASID_MASK; +- page &= PAGE_MASK; +- +- local_irq_save(flags); +- if (vma->vm_mm != current->mm) { +- saved_asid = get_asid(); +- set_asid(asid); +- } +- __flush_tlb_page(asid, page); +- if (saved_asid != MMU_NO_ASID) +- set_asid(saved_asid); +- local_irq_restore(flags); +- } +-} +- +-void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, +- unsigned long end) +-{ +- struct mm_struct *mm = vma->vm_mm; +- +- if (mm->context != NO_CONTEXT) { +- unsigned long flags; +- int size; +- +- local_irq_save(flags); +- size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT; +- if (size > (MMU_NTLB_ENTRIES/4)) { /* Too many TLB to flush */ +- mm->context = NO_CONTEXT; +- if (mm == current->mm) +- activate_context(mm); +- } else { +- unsigned long asid = mm->context&MMU_CONTEXT_ASID_MASK; +- unsigned long saved_asid = MMU_NO_ASID; +- +- start &= PAGE_MASK; +- end += (PAGE_SIZE - 1); +- end &= PAGE_MASK; +- if (mm != current->mm) { +- saved_asid = get_asid(); +- set_asid(asid); +- } +- while (start < end) { +- __flush_tlb_page(asid, start); +- start += PAGE_SIZE; +- } +- if (saved_asid != MMU_NO_ASID) +- set_asid(saved_asid); +- } +- local_irq_restore(flags); +- } +-} +- +-void flush_tlb_kernel_range(unsigned long start, unsigned long end) +-{ +- unsigned long flags; +- int size; +- +- local_irq_save(flags); +- size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT; +- if (size > (MMU_NTLB_ENTRIES/4)) { /* Too many TLB to flush */ +- flush_tlb_all(); +- } else { +- unsigned long asid = init_mm.context&MMU_CONTEXT_ASID_MASK; +- unsigned long saved_asid = get_asid(); +- +- start &= PAGE_MASK; +- end += (PAGE_SIZE - 1); +- end &= PAGE_MASK; +- set_asid(asid); +- while (start < end) { +- __flush_tlb_page(asid, start); +- start += PAGE_SIZE; +- } +- set_asid(saved_asid); +- } +- local_irq_restore(flags); +-} +- +-void flush_tlb_mm(struct mm_struct *mm) +-{ +- /* Invalidate all TLB of this process. */ +- /* Instead of invalidating each TLB, we get new MMU context. */ +- if (mm->context != NO_CONTEXT) { +- unsigned long flags; +- +- local_irq_save(flags); +- mm->context = NO_CONTEXT; +- if (mm == current->mm) +- activate_context(mm); +- local_irq_restore(flags); +- } +-} +- +-void flush_tlb_all(void) +-{ +- unsigned long flags, status; +- +- /* +- * Flush all the TLB. +- * +- * Write to the MMU control register's bit: +- * TF-bit for SH-3, TI-bit for SH-4. +- * It's same position, bit #2. +- */ +- local_irq_save(flags); +- status = ctrl_inl(MMUCR); +- status |= 0x04; +- ctrl_outl(status, MMUCR); +- local_irq_restore(flags); +-} +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/hugetlbpage.c linux-2.6.17/arch/sh/mm/hugetlbpage.c +--- linux-2.6.17-vanilla/arch/sh/mm/hugetlbpage.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/hugetlbpage.c 2006-07-12 16:54:23.000000000 +0000 +@@ -27,61 +27,41 @@ + pte_t *huge_pte_alloc(struct mm_struct *mm, unsigned long addr) + { + pgd_t *pgd; ++ pud_t *pud; + pmd_t *pmd; + pte_t *pte = NULL; + + pgd = pgd_offset(mm, addr); + if (pgd) { +- pmd = pmd_alloc(mm, pgd, addr); +- if (pmd) +- pte = pte_alloc_map(mm, pmd, addr); ++ pud = pud_alloc(mm, pgd, addr); ++ if (pud) { ++ pmd = pmd_alloc(mm, pud, addr); ++ if (pmd) ++ pte = pte_alloc_map(mm, pmd, addr); ++ } + } ++ + return pte; + } + + pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr) + { + pgd_t *pgd; ++ pud_t *pud; + pmd_t *pmd; + pte_t *pte = NULL; + + pgd = pgd_offset(mm, addr); + if (pgd) { +- pmd = pmd_offset(pgd, addr); +- if (pmd) +- pte = pte_offset_map(pmd, addr); +- } +- return pte; +-} +- +-void set_huge_pte_at(struct mm_struct *mm, unsigned long addr, +- pte_t *ptep, pte_t entry) +-{ +- int i; +- +- for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) { +- set_pte_at(mm, addr, ptep, entry); +- ptep++; +- addr += PAGE_SIZE; +- pte_val(entry) += PAGE_SIZE; ++ pud = pud_offset(pgd, addr); ++ if (pud) { ++ pmd = pmd_offset(pud, addr); ++ if (pmd) ++ pte = pte_offset_map(pmd, addr); ++ } + } +-} +- +-pte_t huge_ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, +- pte_t *ptep) +-{ +- pte_t entry; +- int i; +- +- entry = *ptep; + +- for (i = 0; i < (1 << HUGETLB_PAGE_ORDER); i++) { +- pte_clear(mm, addr, ptep); +- addr += PAGE_SIZE; +- ptep++; +- } +- +- return entry; ++ return pte; + } + + struct page *follow_huge_addr(struct mm_struct *mm, +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/init.c linux-2.6.17/arch/sh/mm/init.c +--- linux-2.6.17-vanilla/arch/sh/mm/init.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/init.c 2006-07-12 16:54:23.000000000 +0000 +@@ -61,7 +61,7 @@ + + printk("Mem-info:\n"); + show_free_areas(); +- printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10)); ++ printk("Free swap: %6ldkB\n",nr_swap_pages<<(PAGE_SHIFT-10)); + i = max_mapnr; + while (i-- > 0) { + total++; +@@ -81,6 +81,7 @@ + static void set_pte_phys(unsigned long addr, unsigned long phys, pgprot_t prot) + { + pgd_t *pgd; ++ pud_t *pud; + pmd_t *pmd; + pte_t *pte; + +@@ -90,7 +91,17 @@ + return; + } + +- pmd = pmd_offset(pgd, addr); ++ pud = pud_offset(pgd, addr); ++ if (pud_none(*pud)) { ++ pmd = (pmd_t *)get_zeroed_page(GFP_ATOMIC); ++ set_pud(pud, __pud(__pa(pmd) | _KERNPG_TABLE | _PAGE_USER)); ++ if (pmd != pmd_offset(pud, 0)) { ++ pud_ERROR(*pud); ++ return; ++ } ++ } ++ ++ pmd = pmd_offset(pud, addr); + if (pmd_none(*pmd)) { + pte = (pte_t *)get_zeroed_page(GFP_ATOMIC); + set_pmd(pmd, __pmd(__pa(pte) | _KERNPG_TABLE | _PAGE_USER)); +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/ioremap.c linux-2.6.17/arch/sh/mm/ioremap.c +--- linux-2.6.17-vanilla/arch/sh/mm/ioremap.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/ioremap.c 2006-07-12 16:54:23.000000000 +0000 +@@ -15,6 +15,7 @@ + #include <linux/vmalloc.h> + #include <linux/module.h> + #include <linux/mm.h> ++#include <linux/pci.h> + #include <asm/io.h> + #include <asm/page.h> + #include <asm/pgalloc.h> +@@ -135,6 +136,20 @@ + return (void __iomem *)phys_to_virt(phys_addr); + + /* ++ * If we're on an SH7751 or SH7780 PCI controller, PCI memory is ++ * mapped at the end of the address space (typically 0xfd000000) ++ * in a non-translatable area, so mapping through page tables for ++ * this area is not only pointless, but also fundamentally ++ * broken. Just return the physical address instead. ++ * ++ * For boards that map a small PCI memory aperture somewhere in ++ * P1/P2 space, ioremap() will already do the right thing, ++ * and we'll never get this far. ++ */ ++ if (is_pci_memaddr(phys_addr) && is_pci_memaddr(last_addr)) ++ return (void __iomem *)phys_addr; ++ ++ /* + * Don't allow anybody to remap normal RAM that we're using.. + */ + if (phys_addr < virt_to_phys(high_memory)) +@@ -192,7 +207,7 @@ + unsigned long vaddr = (unsigned long __force)addr; + struct vm_struct *p; + +- if (PXSEG(vaddr) < P3SEG) ++ if (PXSEG(vaddr) < P3SEG || is_pci_memaddr(vaddr)) + return; + + #ifdef CONFIG_32BIT +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/pg-sh4.c linux-2.6.17/arch/sh/mm/pg-sh4.c +--- linux-2.6.17-vanilla/arch/sh/mm/pg-sh4.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/pg-sh4.c 2006-07-12 16:54:23.000000000 +0000 +@@ -2,7 +2,7 @@ + * arch/sh/mm/pg-sh4.c + * + * Copyright (C) 1999, 2000, 2002 Niibe Yutaka +- * Copyright (C) 2002 Paul Mundt ++ * Copyright (C) 2002 - 2005 Paul Mundt + * + * Released under the terms of the GNU GPL v2.0. + */ +@@ -24,6 +24,8 @@ + + extern struct semaphore p3map_sem[]; + ++#define CACHE_ALIAS (cpu_data->dcache.alias_mask) ++ + /* + * clear_user_page + * @to: P1 address +@@ -36,14 +38,15 @@ + if (((address ^ (unsigned long)to) & CACHE_ALIAS) == 0) + clear_page(to); + else { +- pgprot_t pgprot = __pgprot(_PAGE_PRESENT | ++ pgprot_t pgprot = __pgprot(_PAGE_PRESENT | + _PAGE_RW | _PAGE_CACHABLE | +- _PAGE_DIRTY | _PAGE_ACCESSED | ++ _PAGE_DIRTY | _PAGE_ACCESSED | + _PAGE_HW_SHARED | _PAGE_FLAGS_HARD); + unsigned long phys_addr = PHYSADDR(to); + unsigned long p3_addr = P3SEG + (address & CACHE_ALIAS); +- pgd_t *dir = pgd_offset_k(p3_addr); +- pmd_t *pmd = pmd_offset(dir, p3_addr); ++ pgd_t *pgd = pgd_offset_k(p3_addr); ++ pud_t *pud = pud_offset(pgd, p3_addr); ++ pmd_t *pmd = pmd_offset(pud, p3_addr); + pte_t *pte = pte_offset_kernel(pmd, p3_addr); + pte_t entry; + unsigned long flags; +@@ -68,21 +71,22 @@ + * @address: U0 address to be mapped + * @page: page (virt_to_page(to)) + */ +-void copy_user_page(void *to, void *from, unsigned long address, ++void copy_user_page(void *to, void *from, unsigned long address, + struct page *page) + { + __set_bit(PG_mapped, &page->flags); + if (((address ^ (unsigned long)to) & CACHE_ALIAS) == 0) + copy_page(to, from); + else { +- pgprot_t pgprot = __pgprot(_PAGE_PRESENT | ++ pgprot_t pgprot = __pgprot(_PAGE_PRESENT | + _PAGE_RW | _PAGE_CACHABLE | +- _PAGE_DIRTY | _PAGE_ACCESSED | ++ _PAGE_DIRTY | _PAGE_ACCESSED | + _PAGE_HW_SHARED | _PAGE_FLAGS_HARD); + unsigned long phys_addr = PHYSADDR(to); + unsigned long p3_addr = P3SEG + (address & CACHE_ALIAS); +- pgd_t *dir = pgd_offset_k(p3_addr); +- pmd_t *pmd = pmd_offset(dir, p3_addr); ++ pgd_t *pgd = pgd_offset_k(p3_addr); ++ pud_t *pud = pud_offset(pgd, p3_addr); ++ pmd_t *pmd = pmd_offset(pud, p3_addr); + pte_t *pte = pte_offset_kernel(pmd, p3_addr); + pte_t entry; + unsigned long flags; +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/pmb.c linux-2.6.17/arch/sh/mm/pmb.c +--- linux-2.6.17-vanilla/arch/sh/mm/pmb.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/pmb.c 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,404 @@ ++/* ++ * arch/sh/mm/pmb.c ++ * ++ * Privileged Space Mapping Buffer (PMB) Support. ++ * ++ * Copyright (C) 2005, 2006 Paul Mundt ++ * ++ * P1/P2 Section mapping definitions from map32.h, which was: ++ * ++ * Copyright 2003 (c) Lineo Solutions,Inc. ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ ++#include <linux/init.h> ++#include <linux/kernel.h> ++#include <linux/module.h> ++#include <linux/slab.h> ++#include <linux/bitops.h> ++#include <linux/debugfs.h> ++#include <linux/fs.h> ++#include <linux/seq_file.h> ++#include <linux/err.h> ++#include <asm/system.h> ++#include <asm/uaccess.h> ++#include <asm/pgtable.h> ++#include <asm/mmu.h> ++#include <asm/io.h> ++ ++#define NR_PMB_ENTRIES 16 ++ ++static kmem_cache_t *pmb_cache; ++static unsigned long pmb_map; ++ ++static struct pmb_entry pmb_init_map[] = { ++ /* vpn ppn flags (ub/sz/c/wt) */ ++ ++ /* P1 Section Mappings */ ++ { 0x80000000, 0x00000000, PMB_SZ_64M | PMB_C, }, ++ { 0x84000000, 0x04000000, PMB_SZ_64M | PMB_C, }, ++ { 0x88000000, 0x08000000, PMB_SZ_128M | PMB_C, }, ++ { 0x90000000, 0x10000000, PMB_SZ_64M | PMB_C, }, ++ { 0x94000000, 0x14000000, PMB_SZ_64M | PMB_C, }, ++ { 0x98000000, 0x18000000, PMB_SZ_64M | PMB_C, }, ++ ++ /* P2 Section Mappings */ ++ { 0xa0000000, 0x00000000, PMB_UB | PMB_SZ_64M | PMB_WT, }, ++ { 0xa4000000, 0x04000000, PMB_UB | PMB_SZ_64M | PMB_WT, }, ++ { 0xa8000000, 0x08000000, PMB_UB | PMB_SZ_128M | PMB_WT, }, ++ { 0xb0000000, 0x10000000, PMB_UB | PMB_SZ_64M | PMB_WT, }, ++ { 0xb4000000, 0x14000000, PMB_UB | PMB_SZ_64M | PMB_WT, }, ++ { 0xb8000000, 0x18000000, PMB_UB | PMB_SZ_64M | PMB_WT, }, ++}; ++ ++static inline unsigned long mk_pmb_entry(unsigned int entry) ++{ ++ return (entry & PMB_E_MASK) << PMB_E_SHIFT; ++} ++ ++static inline unsigned long mk_pmb_addr(unsigned int entry) ++{ ++ return mk_pmb_entry(entry) | PMB_ADDR; ++} ++ ++static inline unsigned long mk_pmb_data(unsigned int entry) ++{ ++ return mk_pmb_entry(entry) | PMB_DATA; ++} ++ ++struct pmb_entry *pmb_alloc(unsigned long vpn, unsigned long ppn, ++ unsigned long flags) ++{ ++ struct pmb_entry *pmbe; ++ ++ pmbe = kmem_cache_alloc(pmb_cache, GFP_KERNEL); ++ if (!pmbe) ++ return ERR_PTR(-ENOMEM); ++ ++ pmbe->vpn = vpn; ++ pmbe->ppn = ppn; ++ pmbe->flags = flags; ++ ++ return pmbe; ++} ++ ++void pmb_free(struct pmb_entry *pmbe) ++{ ++ kmem_cache_free(pmb_cache, pmbe); ++} ++ ++/* ++ * Must be in P2 for __set_pmb_entry() ++ */ ++int __set_pmb_entry(unsigned long vpn, unsigned long ppn, ++ unsigned long flags, int *entry) ++{ ++ unsigned int pos = *entry; ++ ++ if (unlikely(pos == PMB_NO_ENTRY)) ++ pos = find_first_zero_bit(&pmb_map, NR_PMB_ENTRIES); ++ ++repeat: ++ if (unlikely(pos > NR_PMB_ENTRIES)) ++ return -ENOSPC; ++ ++ if (test_and_set_bit(pos, &pmb_map)) { ++ pos = find_first_zero_bit(&pmb_map, NR_PMB_ENTRIES); ++ goto repeat; ++ } ++ ++ ctrl_outl(vpn | PMB_V, mk_pmb_addr(pos)); ++ ++#ifdef CONFIG_SH_WRITETHROUGH ++ /* ++ * When we are in 32-bit address extended mode, CCR.CB becomes ++ * invalid, so care must be taken to manually adjust cacheable ++ * translations. ++ */ ++ if (likely(flags & PMB_C)) ++ flags |= PMB_WT; ++#endif ++ ++ ctrl_outl(ppn | flags | PMB_V, mk_pmb_data(pos)); ++ ++ *entry = pos; ++ ++ return 0; ++} ++ ++int set_pmb_entry(struct pmb_entry *pmbe) ++{ ++ int ret; ++ ++ jump_to_P2(); ++ ret = __set_pmb_entry(pmbe->vpn, pmbe->ppn, pmbe->flags, &pmbe->entry); ++ back_to_P1(); ++ ++ return ret; ++} ++ ++void clear_pmb_entry(struct pmb_entry *pmbe) ++{ ++ unsigned int entry = pmbe->entry; ++ unsigned long addr; ++ ++ /* ++ * Don't allow clearing of wired init entries, P1 or P2 access ++ * without a corresponding mapping in the PMB will lead to reset ++ * by the TLB. ++ */ ++ if (unlikely(entry < ARRAY_SIZE(pmb_init_map) || ++ entry >= NR_PMB_ENTRIES)) ++ return; ++ ++ jump_to_P2(); ++ ++ /* Clear V-bit */ ++ addr = mk_pmb_addr(entry); ++ ctrl_outl(ctrl_inl(addr) & ~PMB_V, addr); ++ ++ addr = mk_pmb_data(entry); ++ ctrl_outl(ctrl_inl(addr) & ~PMB_V, addr); ++ ++ back_to_P1(); ++ ++ clear_bit(entry, &pmb_map); ++} ++ ++static DEFINE_SPINLOCK(pmb_list_lock); ++static struct pmb_entry *pmb_list; ++ ++static inline void pmb_list_add(struct pmb_entry *pmbe) ++{ ++ struct pmb_entry **p, *tmp; ++ ++ p = &pmb_list; ++ while ((tmp = *p) != NULL) ++ p = &tmp->next; ++ ++ pmbe->next = tmp; ++ *p = pmbe; ++} ++ ++static inline void pmb_list_del(struct pmb_entry *pmbe) ++{ ++ struct pmb_entry **p, *tmp; ++ ++ for (p = &pmb_list; (tmp = *p); p = &tmp->next) ++ if (tmp == pmbe) { ++ *p = tmp->next; ++ return; ++ } ++} ++ ++static struct { ++ unsigned long size; ++ int flag; ++} pmb_sizes[] = { ++ { .size = 0x20000000, .flag = PMB_SZ_512M, }, ++ { .size = 0x08000000, .flag = PMB_SZ_128M, }, ++ { .size = 0x04000000, .flag = PMB_SZ_64M, }, ++ { .size = 0x01000000, .flag = PMB_SZ_16M, }, ++}; ++ ++long pmb_remap(unsigned long vaddr, unsigned long phys, ++ unsigned long size, unsigned long flags) ++{ ++ struct pmb_entry *pmbp; ++ unsigned long wanted; ++ int pmb_flags, i; ++ ++ /* Convert typical pgprot value to the PMB equivalent */ ++ if (flags & _PAGE_CACHABLE) { ++ if (flags & _PAGE_WT) ++ pmb_flags = PMB_WT; ++ else ++ pmb_flags = PMB_C; ++ } else ++ pmb_flags = PMB_WT | PMB_UB; ++ ++ pmbp = NULL; ++ wanted = size; ++ ++again: ++ for (i = 0; i < ARRAY_SIZE(pmb_sizes); i++) { ++ struct pmb_entry *pmbe; ++ int ret; ++ ++ if (size < pmb_sizes[i].size) ++ continue; ++ ++ pmbe = pmb_alloc(vaddr, phys, pmb_flags | pmb_sizes[i].flag); ++ if (IS_ERR(pmbe)) ++ return PTR_ERR(pmbe); ++ ++ ret = set_pmb_entry(pmbe); ++ if (ret != 0) { ++ pmb_free(pmbe); ++ return -EBUSY; ++ } ++ ++ phys += pmb_sizes[i].size; ++ vaddr += pmb_sizes[i].size; ++ size -= pmb_sizes[i].size; ++ ++ /* ++ * Link adjacent entries that span multiple PMB entries ++ * for easier tear-down. ++ */ ++ if (likely(pmbp)) ++ pmbp->link = pmbe; ++ ++ pmbp = pmbe; ++ } ++ ++ if (size >= 0x1000000) ++ goto again; ++ ++ return wanted - size; ++} ++ ++void pmb_unmap(unsigned long addr) ++{ ++ struct pmb_entry **p, *pmbe; ++ ++ for (p = &pmb_list; (pmbe = *p); p = &pmbe->next) ++ if (pmbe->vpn == addr) ++ break; ++ ++ if (unlikely(!pmbe)) ++ return; ++ ++ WARN_ON(!test_bit(pmbe->entry, &pmb_map)); ++ ++ do { ++ struct pmb_entry *pmblink = pmbe; ++ ++ clear_pmb_entry(pmbe); ++ pmbe = pmblink->link; ++ ++ pmb_free(pmblink); ++ } while (pmbe); ++} ++ ++static void pmb_cache_ctor(void *pmb, kmem_cache_t *cachep, unsigned long flags) ++{ ++ struct pmb_entry *pmbe = pmb; ++ ++ memset(pmb, 0, sizeof(struct pmb_entry)); ++ ++ spin_lock_irq(&pmb_list_lock); ++ ++ pmbe->entry = PMB_NO_ENTRY; ++ pmb_list_add(pmbe); ++ ++ spin_unlock_irq(&pmb_list_lock); ++} ++ ++static void pmb_cache_dtor(void *pmb, kmem_cache_t *cachep, unsigned long flags) ++{ ++ spin_lock_irq(&pmb_list_lock); ++ pmb_list_del(pmb); ++ spin_unlock_irq(&pmb_list_lock); ++} ++ ++static int __init pmb_init(void) ++{ ++ unsigned int nr_entries = ARRAY_SIZE(pmb_init_map); ++ unsigned int entry; ++ ++ BUG_ON(unlikely(nr_entries >= NR_PMB_ENTRIES)); ++ ++ pmb_cache = kmem_cache_create("pmb", sizeof(struct pmb_entry), ++ 0, 0, pmb_cache_ctor, pmb_cache_dtor); ++ BUG_ON(!pmb_cache); ++ ++ jump_to_P2(); ++ ++ /* ++ * Ordering is important, P2 must be mapped in the PMB before we ++ * can set PMB.SE, and P1 must be mapped before we jump back to ++ * P1 space. ++ */ ++ for (entry = 0; entry < nr_entries; entry++) { ++ struct pmb_entry *pmbe = pmb_init_map + entry; ++ ++ __set_pmb_entry(pmbe->vpn, pmbe->ppn, pmbe->flags, &entry); ++ } ++ ++ ctrl_outl(0, PMB_IRMCR); ++ ++ /* PMB.SE and UB[7] */ ++ ctrl_outl((1 << 31) | (1 << 7), PMB_PASCR); ++ ++ back_to_P1(); ++ ++ return 0; ++} ++ ++arch_initcall(pmb_init); ++ ++#ifdef CONFIG_DEBUG_FS ++static int pmb_seq_show(struct seq_file *file, void *iter) ++{ ++ int i; ++ ++ seq_printf(file, "V: Valid, C: Cacheable, WT: Write-Through\n" ++ "CB: Copy-Back, B: Buffered, UB: Unbuffered\n"); ++ seq_printf(file, "ety vpn ppn size flags\n"); ++ ++ for (i = 0; i < NR_PMB_ENTRIES; i++) { ++ unsigned long addr, data; ++ unsigned int size; ++ char *sz_str = NULL; ++ ++ addr = ctrl_inl(mk_pmb_addr(i)); ++ data = ctrl_inl(mk_pmb_data(i)); ++ ++ size = data & PMB_SZ_MASK; ++ sz_str = (size == PMB_SZ_16M) ? " 16MB": ++ (size == PMB_SZ_64M) ? " 64MB": ++ (size == PMB_SZ_128M) ? "128MB": ++ "512MB"; ++ ++ /* 02: V 0x88 0x08 128MB C CB B */ ++ seq_printf(file, "%02d: %c 0x%02lx 0x%02lx %s %c %s %s\n", ++ i, ((addr & PMB_V) && (data & PMB_V)) ? 'V' : ' ', ++ (addr >> 24) & 0xff, (data >> 24) & 0xff, ++ sz_str, (data & PMB_C) ? 'C' : ' ', ++ (data & PMB_WT) ? "WT" : "CB", ++ (data & PMB_UB) ? "UB" : " B"); ++ } ++ ++ return 0; ++} ++ ++static int pmb_debugfs_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, pmb_seq_show, NULL); ++} ++ ++static struct file_operations pmb_debugfs_fops = { ++ .owner = THIS_MODULE, ++ .open = pmb_debugfs_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = seq_release, ++}; ++ ++static int __init pmb_debugfs_init(void) ++{ ++ struct dentry *dentry; ++ ++ dentry = debugfs_create_file("pmb", S_IFREG | S_IRUGO, ++ NULL, NULL, &pmb_debugfs_fops); ++ if (IS_ERR(dentry)) ++ return PTR_ERR(dentry); ++ ++ return 0; ++} ++ ++postcore_initcall(pmb_debugfs_init); ++#endif +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/tlb-flush.c linux-2.6.17/arch/sh/mm/tlb-flush.c +--- linux-2.6.17-vanilla/arch/sh/mm/tlb-flush.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/tlb-flush.c 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,132 @@ ++/* ++ * TLB flushing operations for SH with an MMU. ++ * ++ * Copyright (C) 1999 Niibe Yutaka ++ * Copyright (C) 2003 Paul Mundt ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ ++#include <linux/mm.h> ++#include <asm/mmu_context.h> ++#include <asm/tlbflush.h> ++ ++void flush_tlb_page(struct vm_area_struct *vma, unsigned long page) ++{ ++ if (vma->vm_mm && vma->vm_mm->context != NO_CONTEXT) { ++ unsigned long flags; ++ unsigned long asid; ++ unsigned long saved_asid = MMU_NO_ASID; ++ ++ asid = vma->vm_mm->context & MMU_CONTEXT_ASID_MASK; ++ page &= PAGE_MASK; ++ ++ local_irq_save(flags); ++ if (vma->vm_mm != current->mm) { ++ saved_asid = get_asid(); ++ set_asid(asid); ++ } ++ __flush_tlb_page(asid, page); ++ if (saved_asid != MMU_NO_ASID) ++ set_asid(saved_asid); ++ local_irq_restore(flags); ++ } ++} ++ ++void flush_tlb_range(struct vm_area_struct *vma, unsigned long start, ++ unsigned long end) ++{ ++ struct mm_struct *mm = vma->vm_mm; ++ ++ if (mm->context != NO_CONTEXT) { ++ unsigned long flags; ++ int size; ++ ++ local_irq_save(flags); ++ size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ if (size > (MMU_NTLB_ENTRIES/4)) { /* Too many TLB to flush */ ++ mm->context = NO_CONTEXT; ++ if (mm == current->mm) ++ activate_context(mm); ++ } else { ++ unsigned long asid = mm->context&MMU_CONTEXT_ASID_MASK; ++ unsigned long saved_asid = MMU_NO_ASID; ++ ++ start &= PAGE_MASK; ++ end += (PAGE_SIZE - 1); ++ end &= PAGE_MASK; ++ if (mm != current->mm) { ++ saved_asid = get_asid(); ++ set_asid(asid); ++ } ++ while (start < end) { ++ __flush_tlb_page(asid, start); ++ start += PAGE_SIZE; ++ } ++ if (saved_asid != MMU_NO_ASID) ++ set_asid(saved_asid); ++ } ++ local_irq_restore(flags); ++ } ++} ++ ++void flush_tlb_kernel_range(unsigned long start, unsigned long end) ++{ ++ unsigned long flags; ++ int size; ++ ++ local_irq_save(flags); ++ size = (end - start + (PAGE_SIZE - 1)) >> PAGE_SHIFT; ++ if (size > (MMU_NTLB_ENTRIES/4)) { /* Too many TLB to flush */ ++ flush_tlb_all(); ++ } else { ++ unsigned long asid = init_mm.context&MMU_CONTEXT_ASID_MASK; ++ unsigned long saved_asid = get_asid(); ++ ++ start &= PAGE_MASK; ++ end += (PAGE_SIZE - 1); ++ end &= PAGE_MASK; ++ set_asid(asid); ++ while (start < end) { ++ __flush_tlb_page(asid, start); ++ start += PAGE_SIZE; ++ } ++ set_asid(saved_asid); ++ } ++ local_irq_restore(flags); ++} ++ ++void flush_tlb_mm(struct mm_struct *mm) ++{ ++ /* Invalidate all TLB of this process. */ ++ /* Instead of invalidating each TLB, we get new MMU context. */ ++ if (mm->context != NO_CONTEXT) { ++ unsigned long flags; ++ ++ local_irq_save(flags); ++ mm->context = NO_CONTEXT; ++ if (mm == current->mm) ++ activate_context(mm); ++ local_irq_restore(flags); ++ } ++} ++ ++void flush_tlb_all(void) ++{ ++ unsigned long flags, status; ++ ++ /* ++ * Flush all the TLB. ++ * ++ * Write to the MMU control register's bit: ++ * TF-bit for SH-3, TI-bit for SH-4. ++ * It's same position, bit #2. ++ */ ++ local_irq_save(flags); ++ status = ctrl_inl(MMUCR); ++ status |= 0x04; ++ ctrl_outl(status, MMUCR); ++ ctrl_barrier(); ++ local_irq_restore(flags); ++} +diff -ruN linux-2.6.17-vanilla/arch/sh/mm/tlb-sh4.c linux-2.6.17/arch/sh/mm/tlb-sh4.c +--- linux-2.6.17-vanilla/arch/sh/mm/tlb-sh4.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/mm/tlb-sh4.c 2006-07-12 16:54:23.000000000 +0000 +@@ -36,7 +36,6 @@ + unsigned long vpn; + struct page *page; + unsigned long pfn; +- unsigned long ptea; + + /* Ptrace may call this routine. */ + if (vma && current->active_mm != vma->vm_mm) +@@ -59,10 +58,11 @@ + ctrl_outl(vpn, MMU_PTEH); + + pteval = pte_val(pte); ++ + /* Set PTEA register */ +- /* TODO: make this look less hacky */ +- ptea = ((pteval >> 28) & 0xe) | (pteval & 0x1); +- ctrl_outl(ptea, MMU_PTEA); ++ if (cpu_data->flags & CPU_HAS_PTEA) ++ /* TODO: make this look less hacky */ ++ ctrl_outl(((pteval >> 28) & 0xe) | (pteval & 0x1), MMU_PTEA); + + /* Set PTEL register */ + pteval &= _PAGE_FLAGS_HARDWARE_MASK; /* drop software flags */ +diff -ruN linux-2.6.17-vanilla/arch/sh/oprofile/CVS/Entries linux-2.6.17/arch/sh/oprofile/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/oprofile/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/oprofile/CVS/Entries 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,5 @@ ++/Kconfig/1.1/Sun Oct 12 21:34:48 2003// ++/Makefile/1.4/Sun Aug 21 23:08:54 2005// ++/op_model_null.c/1.2/Wed Mar 2 13:02:56 2005// ++/op_model_sh7750.c/1.2/Wed Mar 2 13:02:57 2005/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/oprofile/CVS/Repository linux-2.6.17/arch/sh/oprofile/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/oprofile/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/oprofile/CVS/Repository 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/oprofile +diff -ruN linux-2.6.17-vanilla/arch/sh/oprofile/CVS/Root linux-2.6.17/arch/sh/oprofile/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/oprofile/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/oprofile/CVS/Root 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/oprofile/Makefile linux-2.6.17/arch/sh/oprofile/Makefile +--- linux-2.6.17-vanilla/arch/sh/oprofile/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/oprofile/Makefile 2006-07-12 16:54:23.000000000 +0000 +@@ -7,7 +7,11 @@ + timer_int.o ) + + profdrvr-y := op_model_null.o ++ ++# SH7750-style performance counters exist across 7750/7750S and 7091. ++profdrvr-$(CONFIG_CPU_SUBTYPE_SH7750S) := op_model_sh7750.o + profdrvr-$(CONFIG_CPU_SUBTYPE_SH7750) := op_model_sh7750.o ++profdrvr-$(CONFIG_CPU_SUBTYPE_SH7091) := op_model_sh7750.o + + oprofile-y := $(DRIVER_OBJS) $(profdrvr-y) + +diff -ruN linux-2.6.17-vanilla/arch/sh/tools/CVS/Entries linux-2.6.17/arch/sh/tools/CVS/Entries +--- linux-2.6.17-vanilla/arch/sh/tools/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/tools/CVS/Entries 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,4 @@ ++/Makefile/1.2/Fri Sep 24 15:12:43 2004// ++/gen-mach-types/1.1/Fri Sep 24 15:12:45 2004/-ko/ ++/mach-types/1.15/Thu Jul 6 12:38:12 2006// ++D +diff -ruN linux-2.6.17-vanilla/arch/sh/tools/CVS/Repository linux-2.6.17/arch/sh/tools/CVS/Repository +--- linux-2.6.17-vanilla/arch/sh/tools/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/tools/CVS/Repository 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++linux/arch/sh/tools +diff -ruN linux-2.6.17-vanilla/arch/sh/tools/CVS/Root linux-2.6.17/arch/sh/tools/CVS/Root +--- linux-2.6.17-vanilla/arch/sh/tools/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/arch/sh/tools/CVS/Root 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/arch/sh/tools/mach-types linux-2.6.17/arch/sh/tools/mach-types +--- linux-2.6.17-vanilla/arch/sh/tools/mach-types 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/arch/sh/tools/mach-types 2006-07-12 16:54:23.000000000 +0000 +@@ -7,7 +7,7 @@ + # + SE SH_SOLUTION_ENGINE + 7751SE SH_7751_SOLUTION_ENGINE +-7300SE SH_7300_SOLUTION_ENGINE ++7300SE SH_7300_SOLUTION_ENGINE + 73180SE SH_73180_SOLUTION_ENGINE + 7751SYSTEMH SH_7751_SYSTEMH + HP6XX SH_HP6XX +@@ -25,4 +25,7 @@ + EDOSK7705 SH_EDOSK7705 + SH4202_MICRODEV SH_SH4202_MICRODEV + SH03 SH_SH03 +- ++LANDISK SH_LANDISK ++R7780RP SH_R7780RP ++R7780MP SH_R7780MP ++TITAN SH_TITAN +diff -ruN linux-2.6.17-vanilla/drivers/CVS/Entries linux-2.6.17/drivers/CVS/Entries +--- linux-2.6.17-vanilla/drivers/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/CVS/Entries 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,12 @@ ++D/char//// ++D/i2c//// ++D/ide//// ++D/input//// ++D/mtd//// ++D/net//// ++D/pcmcia//// ++D/serial//// ++D/sh//// ++D/usb//// ++D/video//// ++D/rtc//// +diff -ruN linux-2.6.17-vanilla/drivers/CVS/Repository linux-2.6.17/drivers/CVS/Repository +--- linux-2.6.17-vanilla/drivers/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/CVS/Repository 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers +diff -ruN linux-2.6.17-vanilla/drivers/CVS/Root linux-2.6.17/drivers/CVS/Root +--- linux-2.6.17-vanilla/drivers/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/CVS/Root 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/char/CVS/Entries linux-2.6.17/drivers/char/CVS/Entries +--- linux-2.6.17-vanilla/drivers/char/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/char/CVS/Entries 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,8 @@ ++/rs5c313_rtc.c/1.1/Thu Sep 29 07:19:20 2005/-ko/ ++/rtc.c/1.8/Mon Mar 27 21:06:14 2006/-ko/ ++/rtc9701_rtc.c/1.2/Mon May 30 06:24:28 2005/-ko/ ++/sh03rtc.c/1.3/Wed Jan 18 05:37:19 2006/-ko/ ++D/watchdog//// ++/Kconfig/1.15/Wed Jul 5 14:50:58 2006/-ko/ ++/Makefile/1.50/Wed Jul 5 14:50:59 2006/-ko/ ++/sysrq.c/1.17/Wed Jul 5 14:50:59 2006/-ko/ +diff -ruN linux-2.6.17-vanilla/drivers/char/CVS/Repository linux-2.6.17/drivers/char/CVS/Repository +--- linux-2.6.17-vanilla/drivers/char/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/char/CVS/Repository 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/char +diff -ruN linux-2.6.17-vanilla/drivers/char/CVS/Root linux-2.6.17/drivers/char/CVS/Root +--- linux-2.6.17-vanilla/drivers/char/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/char/CVS/Root 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/char/Kconfig linux-2.6.17/drivers/char/Kconfig +--- linux-2.6.17-vanilla/drivers/char/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/char/Kconfig 2006-07-12 16:54:23.000000000 +0000 +@@ -737,6 +737,22 @@ + To compile this driver as a module, choose M here: the + module will be called rtc. + ++config SH03_RTC ++ tristate "Enhanced Real Time Clock (SH03) Support" ++ depends on SH_SH03 ++ ++config RS5C313_RTC ++ tristate "RICHO RS5C313 RTC Support for LANDISK" ++ depends on SH_LANDISK ++ help ++ Selecting this option will support RICHO RS5C313 RTC for LANDISK. ++ ++config RTC_9701JE ++ tristate "EPSON RTC-9701JE support" ++ depends on SH_RTS7751R2D ++ help ++ Selecting this option will support EPSON RTC-9701JE. ++ + config SGI_DS1286 + tristate "SGI DS1286 RTC support" + depends on SGI_IP22 +diff -ruN linux-2.6.17-vanilla/drivers/char/Makefile linux-2.6.17/drivers/char/Makefile +--- linux-2.6.17-vanilla/drivers/char/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/char/Makefile 2006-07-12 16:54:23.000000000 +0000 +@@ -67,6 +67,9 @@ + obj-$(CONFIG_SGI_IP27_RTC) += ip27-rtc.o + obj-$(CONFIG_DS1302) += ds1302.o + obj-$(CONFIG_S3C2410_RTC) += s3c2410-rtc.o ++obj-$(CONFIG_RTC_9701JE) += rtc9701_rtc.o ++obj-$(CONFIG_RS5C313_RTC) += rs5c313_rtc.o ++obj-$(CONFIG_SH03_RTC) += sh03rtc.o + ifeq ($(CONFIG_GENERIC_NVRAM),y) + obj-$(CONFIG_NVRAM) += generic_nvram.o + else +diff -ruN linux-2.6.17-vanilla/drivers/char/rs5c313_rtc.c linux-2.6.17/drivers/char/rs5c313_rtc.c +--- linux-2.6.17-vanilla/drivers/char/rs5c313_rtc.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/char/rs5c313_rtc.c 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,855 @@ ++/* ++ * RICHO RS5C313 Real Time Clock interface for Linux ++ * ++ * 2005-09-19 modifed by kogiidena ++ * ++ * Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org> ++ * Copyright (C) 1999 Tetsuya Okada & Niibe Yutaka ++ * ++ * Based on code written by Paul Gortmaker. ++ * Copyright (C) 1996 Paul Gortmaker ++ * ++ * This driver allows use of the real time clock (built into ++ * nearly all computers) from user space. It exports the /dev/rtc ++ * interface supporting various ioctl() and also the ++ * /proc/driver/rtc pseudo-file for status information. ++ * ++ * The ioctls can be used to set the interrupt behaviour and ++ * generation rate from the RTC via IRQ 8. Then the /dev/rtc ++ * interface can be used to make use of these timer interrupts, ++ * be they interval or alarm based. ++ * ++ * The /dev/rtc interface will block on reads until an interrupt ++ * has been received. If a RTC interrupt has already happened, ++ * it will output an unsigned long and then block. The output value ++ * contains the interrupt status in the low byte and the number of ++ * interrupts since the last read in the remaining high bytes. The ++ * /dev/rtc interface can also be used with the select(2) call. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version ++ * 2 of the License, or (at your option) any later version. ++ * ++ * Based on other minimal char device drivers, like Alan's ++ * watchdog, Ted's random, etc. etc. ++ * ++ * 1.07 Paul Gortmaker. ++ * 1.08 Miquel van Smoorenburg: disallow certain things on the ++ * DEC Alpha as the CMOS clock is also used for other things. ++ * 1.09 Nikita Schmidt: epoch support and some Alpha cleanup. ++ * 1.09a Pete Zaitcev: Sun SPARC ++ * 1.09b Jeff Garzik: Modularize, init cleanup ++ * 1.09c Jeff Garzik: SMP cleanup ++ * 1.10 Paul Barton-Davis: add support for async I/O ++ * 1.10a Andrea Arcangeli: Alpha updates ++ * 1.10b Andrew Morton: SMP lock fix ++ * 1.10c Cesar Barros: SMP locking fixes and cleanup ++ * 1.10d Paul Gortmaker: delete paranoia check in rtc_exit ++ * 1.10e Maciej W. Rozycki: Handle DECstation's year weirdness. ++ * 1.11 Takashi Iwai: Kernel access functions ++ * rtc_register/rtc_unregister/rtc_control ++ * 1.11a Daniele Bellucci: Audit create_proc_read_entry in rtc_init ++ * 1.12 Venkatesh Pallipadi: Hooks for emulating rtc on HPET base-timer ++ * CONFIG_HPET_EMULATE_RTC ++ * ++ */ ++ ++#define RTC_VERSION "1.12" ++ ++#include <linux/config.h> ++#include <linux/delay.h> ++#include <linux/bcd.h> ++#include <linux/interrupt.h> ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/types.h> ++#include <linux/miscdevice.h> ++#include <linux/ioport.h> ++#include <linux/fcntl.h> ++#include <linux/mc146818rtc.h> ++#include <linux/init.h> ++#include <linux/poll.h> ++#include <linux/proc_fs.h> ++#include <linux/seq_file.h> ++#include <linux/spinlock.h> ++#include <linux/sysctl.h> ++#include <linux/wait.h> ++#include <asm/current.h> ++#include <asm/uaccess.h> ++#include <asm/system.h> ++#include <asm/io.h> ++ ++ ++#ifndef CONFIG_SH_LANDISK ++#error rs5c313 read and write function not defined ++#endif ++ ++#ifdef CONFIG_SH_LANDISK ++/*****************************************************/ ++/* LANDISK dependence part of RS5C313 */ ++/*****************************************************/ ++ ++#define SCSMR1 0xFFE00000 ++#define SCSCR1 0xFFE00008 ++#define SCSMR1_CA 0x80 ++#define SCSCR1_CKE 0x03 ++#define SCSPTR1 0xFFE0001C ++#define SCSPTR1_EIO 0x80 ++#define SCSPTR1_SPB1IO 0x08 ++#define SCSPTR1_SPB1DT 0x04 ++#define SCSPTR1_SPB0IO 0x02 ++#define SCSPTR1_SPB0DT 0x01 ++ ++#define SDA_OEN SCSPTR1_SPB1IO ++#define SDA SCSPTR1_SPB1DT ++#define SCL_OEN SCSPTR1_SPB0IO ++#define SCL SCSPTR1_SPB0DT ++ ++/* RICOH RS5C313 CE port */ ++#define RS5C313_CE 0xB0000003 ++ ++/* RICOH RS5C313 CE port bit */ ++#define RS5C313_CE_RTCCE 0x02 ++ ++/* SCSPTR1 data */ ++unsigned char scsptr1_data; ++ ++#define RS5C313_CEENABLE ctrl_outb(RS5C313_CE_RTCCE, RS5C313_CE); ++#define RS5C313_CEDISABLE ctrl_outb(0x00, RS5C313_CE) ++#define RS5C313_MISCOP ctrl_outb(0x02, 0xB0000008) ++ ++static void rs5c313_initialize(void) ++{ ++ /* Set SCK as I/O port and Initialize SCSPTR1 data & I/O port. */ ++ ctrl_outb(ctrl_inb(SCSMR1) & ~SCSMR1_CA, SCSMR1); ++ ctrl_outb(ctrl_inb(SCSCR1) & ~SCSCR1_CKE, SCSCR1); ++ ++ /* And Initialize SCL for RS5C313 clock */ ++ scsptr1_data = ctrl_inb(SCSPTR1) | SCL; /* SCL:H */ ++ ctrl_outb(scsptr1_data, SCSPTR1); ++ scsptr1_data = ctrl_inb(SCSPTR1) | SCL_OEN; /* SCL output enable */ ++ ctrl_outb(scsptr1_data, SCSPTR1); ++ RS5C313_CEDISABLE; /* CE:L */ ++} ++ ++static void rs5c313_write(unsigned char data) ++{ ++ int i; ++ ++ for (i = 0; i < 8; i++) { ++ /* SDA:Write Data */ ++ scsptr1_data = (scsptr1_data & ~SDA) ++ | ((((0x80 >> i) & data) >> (7 - i)) << 2); ++ ctrl_outb(scsptr1_data, SCSPTR1); ++ if (i == 0) { ++ scsptr1_data |= SDA_OEN; /* SDA:output enable */ ++ ctrl_outb(scsptr1_data, SCSPTR1); ++ } ++ ndelay(700); ++ scsptr1_data &= ~SCL; /* SCL:L */ ++ ctrl_outb(scsptr1_data, SCSPTR1); ++ ndelay(700); ++ scsptr1_data |= SCL; /* SCL:H */ ++ ctrl_outb(scsptr1_data, SCSPTR1); ++ } ++ ++ scsptr1_data &= ~SDA_OEN; /* SDA:output disable */ ++ ctrl_outb(scsptr1_data, SCSPTR1); ++ ++} ++ ++static unsigned char rs5c313_read_data(void) ++{ ++ int i; ++ unsigned char data = 0; ++ ++ for (i = 0; i < 8; i++) { ++ ndelay(700); ++ /* SDA:Read Data */ ++ data |= ((ctrl_inb(SCSPTR1) & SDA) >> 2) << (7 - i); ++ scsptr1_data &= ~SCL; /* SCL:L */ ++ ctrl_outb(scsptr1_data, SCSPTR1); ++ ndelay(700); ++ scsptr1_data |= SCL; /* SCL:H */ ++ ctrl_outb(scsptr1_data, SCSPTR1); ++ } ++ return data & 0x0F; ++} ++ ++#endif /* CONFIG_SH_LANDISK */ ++ ++ ++/*****************************************************/ ++/* machine independence part of RS5C313 */ ++/*****************************************************/ ++ ++/* RICOH RS5C313 address */ ++#define RS5C313_ADDR_SEC 0x00 ++#define RS5C313_ADDR_SEC10 0x01 ++#define RS5C313_ADDR_MIN 0x02 ++#define RS5C313_ADDR_MIN10 0x03 ++#define RS5C313_ADDR_HOUR 0x04 ++#define RS5C313_ADDR_HOUR10 0x05 ++#define RS5C313_ADDR_WEEK 0x06 ++#define RS5C313_ADDR_INTINTVREG 0x07 ++#define RS5C313_ADDR_DAY 0x08 ++#define RS5C313_ADDR_DAY10 0x09 ++#define RS5C313_ADDR_MON 0x0A ++#define RS5C313_ADDR_MON10 0x0B ++#define RS5C313_ADDR_YEAR 0x0C ++#define RS5C313_ADDR_YEAR10 0x0D ++#define RS5C313_ADDR_CNTREG 0x0E ++#define RS5C313_ADDR_TESTREG 0x0F ++ ++/* RICOH RS5C313 control register */ ++#define RS5C313_CNTREG_ADJ_BSY 0x01 ++#define RS5C313_CNTREG_WTEN_XSTP 0x02 ++#define RS5C313_CNTREG_12_24 0x04 ++#define RS5C313_CNTREG_CTFG 0x08 ++ ++/* RICOH RS5C313 test register */ ++#define RS5C313_TESTREG_TEST 0x01 ++ ++/* RICOH RS5C313 control bit */ ++#define RS5C313_CNTBIT_READ 0x40 ++#define RS5C313_CNTBIT_AD 0x20 ++#define RS5C313_CNTBIT_DT 0x10 ++ ++static unsigned char rs5c313_read_reg(unsigned char addr) ++{ ++ ++ rs5c313_write(addr | RS5C313_CNTBIT_READ | RS5C313_CNTBIT_AD); ++ return rs5c313_read_data(); ++ ++} ++ ++static void rs5c313_write_reg(unsigned char addr, unsigned char data) ++{ ++ data &= 0x0f; ++ rs5c313_write(addr | RS5C313_CNTBIT_AD); ++ rs5c313_write(data | RS5C313_CNTBIT_DT); ++ return; ++} ++ ++#define rs5c313_read_cntreg() rs5c313_read_reg(RS5C313_ADDR_CNTREG) ++#define rs5c313_write_cntreg(data) rs5c313_write_reg(RS5C313_ADDR_CNTREG,data) ++#define rs5c313_write_intintvreg(data) rs5c313_write_reg(RS5C313_ADDR_INTINTVREG,data) ++ ++ ++static void rs5c313_get_cur_time(unsigned char *sec, unsigned char *min, ++ unsigned char *hr, ++ unsigned char *day, unsigned char *mon, ++ unsigned char *yr) ++{ ++ ++ while (1) { ++ RS5C313_CEENABLE; /* CE:H */ ++ ++ /* Initialize control reg. 24 hour */ ++ rs5c313_write_cntreg(0x04); ++ ++ if (!(rs5c313_read_cntreg() & RS5C313_CNTREG_ADJ_BSY)) ++ break; ++ RS5C313_MISCOP; ++ RS5C313_CEDISABLE; ++ ndelay(700); /* CE:L */ ++ } ++ ++ *sec = rs5c313_read_reg(RS5C313_ADDR_SEC); ++ *sec |= (rs5c313_read_reg(RS5C313_ADDR_SEC10) << 4); ++ ++ *min = rs5c313_read_reg(RS5C313_ADDR_MIN); ++ *min |= (rs5c313_read_reg(RS5C313_ADDR_MIN10) << 4); ++ ++ *hr = rs5c313_read_reg(RS5C313_ADDR_HOUR); ++ *hr |= (rs5c313_read_reg(RS5C313_ADDR_HOUR10) << 4); ++ ++ *day = rs5c313_read_reg(RS5C313_ADDR_DAY); ++ *day |= (rs5c313_read_reg(RS5C313_ADDR_DAY10) << 4); ++ ++ *mon = rs5c313_read_reg(RS5C313_ADDR_MON); ++ *mon |= (rs5c313_read_reg(RS5C313_ADDR_MON10) << 4); ++ ++ *yr = rs5c313_read_reg(RS5C313_ADDR_YEAR); ++ *yr |= (rs5c313_read_reg(RS5C313_ADDR_YEAR10) << 4); ++ ++ RS5C313_CEDISABLE; ++ ndelay(700); /* CE:L */ ++ ++} ++ ++static void rs5c313_set_cur_time(unsigned char sec, unsigned char min, ++ unsigned char hr, ++ unsigned char day, unsigned char mon, ++ unsigned char yr) ++{ ++ ++ /* bysy check. */ ++ while (1) { ++ RS5C313_CEENABLE; /* CE:H */ ++ ++ /* Initialize control reg. 24 hour */ ++ rs5c313_write_cntreg(0x04); ++ ++ if (!(rs5c313_read_cntreg() & RS5C313_CNTREG_ADJ_BSY)) ++ break; ++ RS5C313_MISCOP; ++ RS5C313_CEDISABLE; ++ ndelay(700); /* CE:L */ ++ } ++ ++ rs5c313_write_reg(RS5C313_ADDR_SEC, sec); ++ rs5c313_write_reg(RS5C313_ADDR_SEC10, (sec >> 4)); ++ ++ rs5c313_write_reg(RS5C313_ADDR_MIN, min); ++ rs5c313_write_reg(RS5C313_ADDR_MIN10, (min >> 4)); ++ ++ rs5c313_write_reg(RS5C313_ADDR_HOUR, hr); ++ rs5c313_write_reg(RS5C313_ADDR_HOUR10, (hr >> 4)); ++ ++ rs5c313_write_reg(RS5C313_ADDR_DAY, day); ++ rs5c313_write_reg(RS5C313_ADDR_DAY10,(day >> 4)); ++ ++ rs5c313_write_reg(RS5C313_ADDR_MON, mon); ++ rs5c313_write_reg(RS5C313_ADDR_MON10, (mon >> 4)); ++ ++ rs5c313_write_reg(RS5C313_ADDR_YEAR, yr); ++ rs5c313_write_reg(RS5C313_ADDR_YEAR10, (yr >> 4)); ++ ++ RS5C313_CEDISABLE; ++ ndelay(700); /* CE:H */ ++ ++} ++ ++unsigned long rs5c313_get_cmos_time( ++ unsigned int *BCD_yr, unsigned int *BCD_mon, ++ unsigned int *BCD_day, unsigned int *BCD_hr, ++ unsigned int *BCD_min, unsigned int *BCD_sec) ++{ ++ ++ unsigned int sec128, sec, min, hr, day, mon, yr, yr100; ++ int clkstop = 0; ++ ++ /* Set SCK as I/O port and Initialize SCSPTR1 data & I/O port. */ ++ /* And Initialize SCL for RS5C313 clock */ ++ rs5c313_initialize(); ++ ++ again: ++ /* check XSTP bit for clock stoped */ ++ RS5C313_CEENABLE; /* CE:H */ ++ if (rs5c313_read_cntreg() & RS5C313_CNTREG_WTEN_XSTP) { ++ /* INT interval reg. OFF */ ++ rs5c313_write_intintvreg(0x00); ++ /* Initialize control reg. 24 hour & adjust */ ++ rs5c313_write_cntreg(0x07); ++ /* bysy check. */ ++ while (rs5c313_read_cntreg() & RS5C313_CNTREG_ADJ_BSY) ++ RS5C313_MISCOP; ++ /* Initialize control reg. 24 hour */ ++ rs5c313_write_cntreg(0x04); ++ clkstop = 1; ++ } else { ++ clkstop = 0; ++ } ++ RS5C313_CEDISABLE; ++ ndelay(700); /* CE:L */ ++ ++ /* Get current time. */ ++ sec = 0; ++ min = 0; ++ hr = 0; ++ day = 0; ++ mon = 0; ++ yr = 0; ++ rs5c313_get_cur_time((unsigned char *)&sec, ++ (unsigned char *)&min, (unsigned char *)&hr, ++ (unsigned char *)&day, ++ (unsigned char *)&mon, (unsigned char *)&yr); ++ ++ /* S-3531A count year from 2000 to 2099. */ ++ yr100 = 0x20; ++ /* S-3531A can't get sec128. */ ++ sec128 = 0; ++ ++ *BCD_yr = yr; ++ *BCD_mon = mon; ++ *BCD_day = day; ++ *BCD_hr = hr; ++ *BCD_min = min; ++ *BCD_sec = sec; ++ ++ yr100 = BCD2BIN(yr100); ++ yr = BCD2BIN(yr); ++ mon = BCD2BIN(mon); ++ day = BCD2BIN(day); ++ hr = BCD2BIN(hr); ++ min = BCD2BIN(min); ++ sec = BCD2BIN(sec); ++ ++ if (yr > 99 || mon < 1 || mon > 12 || day > 31 || day < 1 || ++ hr > 23 || min > 59 || sec > 59 || clkstop) { ++ printk(KERN_ERR ++ "RICHO RS5C313: invalid value, resetting to 1 Jan 2000\n"); ++ /* Reset S-3531A set (20)00year/01month/01day */ ++ /* 00hour 00minute 00second */ ++ sec = 0; ++ min = 0; ++ hr = 0; ++ day = 1; ++ mon = 1; ++ yr = 00; ++ rs5c313_set_cur_time((unsigned char)sec, ++ (unsigned char)min, (unsigned char)hr, ++ (unsigned char)day, ++ (unsigned char)mon, (unsigned char)yr); ++ ++ goto again; ++ } ++ ++ return mktime(yr100 * 100 + yr, mon, day, hr, min, sec); ++} ++ ++void rs5c313_set_cmos_time(unsigned int BCD_yr, unsigned int BCD_mon, ++ unsigned int BCD_day, unsigned int BCD_hr, ++ unsigned int BCD_min, unsigned int BCD_sec) ++{ ++ ++ rs5c313_set_cur_time((unsigned char)BCD_sec, ++ (unsigned char)BCD_min, ++ (unsigned char)BCD_hr, ++ (unsigned char)BCD_day, ++ (unsigned char)BCD_mon, (unsigned char)BCD_yr); ++ ++} ++ ++/*****************************************************/ ++/* machine independence part of RTC driver */ ++/*****************************************************/ ++ ++#define RTC_IO_EXTENT 0x8 ++ ++static struct fasync_struct *rtc_async_queue; ++static DECLARE_WAIT_QUEUE_HEAD(rtc_wait); ++static ssize_t rtc_read(struct file *file, char __user *buf, ++ size_t count, loff_t *ppos); ++static int rtc_ioctl(struct inode *inode, struct file *file, ++ unsigned int cmd, unsigned long arg); ++static int rtc_proc_open(struct inode *inode, struct file *file); ++ ++/* ++ * Bits in rtc_status. (6 bits of room for future expansion) ++ */ ++ ++#define RTC_IS_OPEN 0x01 /* means /dev/rtc is in use */ ++#define RTC_TIMER_ON 0x02 /* missed irq timer active */ ++ ++/* ++ * rtc_status is never changed by rtc_interrupt, and ioctl/open/close is ++ * protected by the big kernel lock. However, ioctl can still disable the timer ++ * in rtc_status and then with del_timer after the interrupt has read ++ * rtc_status but before mod_timer is called, which would then reenable the ++ * timer (but you would need to have an awful timing before you'd trip on it) ++ */ ++static unsigned long rtc_status = 0; /* bitmapped status byte. */ ++static unsigned long rtc_freq = 0; /* Current periodic IRQ rate */ ++static unsigned long rtc_irq_data = 0; /* our output to the world */ ++static unsigned long rtc_max_user_freq = 64; /* > this, need CAP_SYS_RESOURCE */ ++ ++/* ++ * If this driver ever becomes modularised, it will be really nice ++ * to make the epoch retain its value across module reload... ++ */ ++ ++static unsigned long epoch = 1900; /* year corresponding to 0x00 */ ++ ++static const unsigned char days_in_mo[] = ++{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; ++ ++/* ++ * sysctl-tuning infrastructure. ++ */ ++static ctl_table rtc_table[] = { ++ { ++ .ctl_name = 1, ++ .procname = "max-user-freq", ++ .data = &rtc_max_user_freq, ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static ctl_table rtc_root[] = { ++ { ++ .ctl_name = 1, ++ .procname = "rtc", ++ .maxlen = 0, ++ .mode = 0555, ++ .child = rtc_table, ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static ctl_table dev_root[] = { ++ { ++ .ctl_name = CTL_DEV, ++ .procname = "dev", ++ .maxlen = 0, ++ .mode = 0555, ++ .child = rtc_root, ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static struct ctl_table_header *sysctl_header; ++ ++static int __init init_sysctl(void) ++{ ++ sysctl_header = register_sysctl_table(dev_root, 0); ++ return 0; ++} ++ ++static void __exit cleanup_sysctl(void) ++{ ++ unregister_sysctl_table(sysctl_header); ++} ++ ++/* ++ * Now all the various file operations that we export. ++ */ ++ ++static ssize_t rtc_read(struct file *file, char __user *buf, ++ size_t count, loff_t *ppos) ++{ ++ return -EIO; ++} ++ ++static int rtc_do_ioctl(unsigned int cmd, unsigned long arg, int kernel) ++{ ++ struct rtc_time wtime; ++ ++ switch (cmd) { ++ case RTC_RD_TIME: /* Read the time/date from RTC */ ++ { ++ memset(&wtime, 0, sizeof(struct rtc_time)); ++ rtc_get_rtc_time(&wtime); ++ break; ++ } ++ case RTC_SET_TIME: /* Set the RTC */ ++ { ++ struct rtc_time rtc_tm; ++ unsigned char mon, day, hrs, min, sec, leap_yr; ++ unsigned int yrs; ++ ++ if (!capable(CAP_SYS_TIME)) ++ return -EACCES; ++ ++ if (copy_from_user(&rtc_tm, (struct rtc_time __user *)arg, ++ sizeof(struct rtc_time))) ++ return -EFAULT; ++ ++ yrs = rtc_tm.tm_year + 1900; ++ mon = rtc_tm.tm_mon + 1; /* tm_mon starts at zero */ ++ day = rtc_tm.tm_mday; ++ hrs = rtc_tm.tm_hour; ++ min = rtc_tm.tm_min; ++ sec = rtc_tm.tm_sec; ++ ++ if (yrs < 1970) ++ return -EINVAL; ++ ++ leap_yr = ((!(yrs % 4) && (yrs % 100)) || !(yrs % 400)); ++ ++ if ((mon > 12) || (day == 0)) ++ return -EINVAL; ++ ++ if (day > (days_in_mo[mon] + ((mon == 2) && leap_yr))) ++ return -EINVAL; ++ ++ if ((hrs >= 24) || (min >= 60) || (sec >= 60)) ++ return -EINVAL; ++ ++ if ((yrs -= epoch) > 255) /* They are unsigned */ ++ return -EINVAL; ++ ++ /* These limits and adjustments are independent of ++ * whether the chip is in binary mode or not. ++ */ ++ if (yrs > 169) { ++ return -EINVAL; ++ } ++ if (yrs >= 100) ++ yrs -= 100; ++ ++ sec = BIN2BCD(sec); ++ min = BIN2BCD(min); ++ hrs = BIN2BCD(hrs); ++ day = BIN2BCD(day); ++ mon = BIN2BCD(mon); ++ yrs = BIN2BCD(yrs); ++ ++ spin_lock_irq(&rtc_lock); ++ rs5c313_set_cmos_time(yrs, mon, day, hrs, min, sec); ++ spin_unlock_irq(&rtc_lock); ++ ++ return 0; ++ } ++ case RTC_EPOCH_READ: /* Read the epoch. */ ++ { ++ return put_user (epoch, (unsigned long __user *)arg); ++ } ++ case RTC_EPOCH_SET: /* Set the epoch. */ ++ { ++ /* ++ * There were no RTC clocks before 1900. ++ */ ++ if (arg < 1900) ++ return -EINVAL; ++ ++ if (!capable(CAP_SYS_TIME)) ++ return -EACCES; ++ ++ epoch = arg; ++ return 0; ++ } ++ default: ++ return -ENOTTY; ++ } ++ return copy_to_user((void __user *)arg, &wtime, sizeof wtime) ? -EFAULT : 0; ++} ++ ++static int rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd, ++ unsigned long arg) ++{ ++ return rtc_do_ioctl(cmd, arg, 0); ++} ++ ++/* ++ * We enforce only one user at a time here with the open/close. ++ * Also clear the previous interrupt data on an open, and clean ++ * up things on a close. ++ */ ++ ++/* We use rtc_lock to protect against concurrent opens. So the BKL is not ++ * needed here. Or anywhere else in this driver. */ ++static int rtc_open(struct inode *inode, struct file *file) ++{ ++ spin_lock_irq (&rtc_lock); ++ ++ if(rtc_status & RTC_IS_OPEN) ++ goto out_busy; ++ ++ rtc_status |= RTC_IS_OPEN; ++ ++ rtc_irq_data = 0; ++ spin_unlock_irq (&rtc_lock); ++ return 0; ++ ++out_busy: ++ spin_unlock_irq (&rtc_lock); ++ return -EBUSY; ++} ++ ++static int rtc_fasync (int fd, struct file *filp, int on) ++ ++{ ++ return fasync_helper (fd, filp, on, &rtc_async_queue); ++} ++ ++static int rtc_release(struct inode *inode, struct file *file) ++{ ++ spin_lock_irq (&rtc_lock); ++ rtc_irq_data = 0; ++ rtc_status &= ~RTC_IS_OPEN; ++ spin_unlock_irq (&rtc_lock); ++ return 0; ++} ++ ++ ++/* ++ * exported stuffs ++ */ ++ ++EXPORT_SYMBOL(rtc_register); ++EXPORT_SYMBOL(rtc_unregister); ++EXPORT_SYMBOL(rtc_control); ++ ++int rtc_register(rtc_task_t *task) ++{ ++ return -EIO; ++} ++ ++int rtc_unregister(rtc_task_t *task) ++{ ++ return -EIO; ++} ++ ++int rtc_control(rtc_task_t *task, unsigned int cmd, unsigned long arg) ++{ ++ return -EIO; ++} ++ ++ ++/* ++ * The various file operations we support. ++ */ ++ ++static struct file_operations rtc_fops = { ++ .owner = THIS_MODULE, ++ .llseek = no_llseek, ++ .read = rtc_read, ++ .ioctl = rtc_ioctl, ++ .open = rtc_open, ++ .release = rtc_release, ++ .fasync = rtc_fasync, ++}; ++ ++static struct miscdevice rtc_dev = { ++ .minor = RTC_MINOR, ++ .name = "rtc", ++ .fops = &rtc_fops, ++}; ++ ++static struct file_operations rtc_proc_fops = { ++ .owner = THIS_MODULE, ++ .open = rtc_proc_open, ++ .read = seq_read, ++ .llseek = seq_lseek, ++ .release = single_release, ++}; ++ ++ ++static int __init rtc_init(void) ++{ ++ struct proc_dir_entry *ent; ++ ++ if (!request_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc")) { ++ printk(KERN_ERR "rtc: I/O port %d is not free.\n", RTC_PORT (0)); ++ return -EIO; ++ } ++ ++ if (misc_register(&rtc_dev)) { ++ release_region(RTC_PORT(0), RTC_IO_EXTENT); ++ return -ENODEV; ++ } ++ ++ ent = create_proc_entry("driver/rtc", 0, NULL); ++ if (!ent) { ++ release_region(RTC_PORT(0), RTC_IO_EXTENT); ++ misc_deregister(&rtc_dev); ++ return -ENOMEM; ++ } ++ ent->proc_fops = &rtc_proc_fops; ++ (void) init_sysctl(); ++ ++ printk(KERN_INFO "RICHO RS5C313 Real Time Clock Driver v" RTC_VERSION "\n"); ++ ++ return 0; ++} ++ ++static void __exit rtc_exit (void) ++{ ++ cleanup_sysctl(); ++ remove_proc_entry ("driver/rtc", NULL); ++ misc_deregister(&rtc_dev); ++ release_region (RTC_PORT (0), RTC_IO_EXTENT); ++} ++ ++module_init(rtc_init); ++module_exit(rtc_exit); ++ ++ ++/* ++ * Info exported via "/proc/driver/rtc". ++ */ ++ ++static int rtc_proc_show(struct seq_file *seq, void *v) ++{ ++#define YN(bit) ((ctrl & bit) ? "yes" : "no") ++#define NY(bit) ((ctrl & bit) ? "no" : "yes") ++ struct rtc_time tm; ++ unsigned char batt, ctrl; ++ unsigned long freq; ++ ++ batt = 1; ++ freq = rtc_freq; ++ ctrl = RTC_24H; ++ ++ rtc_get_rtc_time(&tm); ++ ++ /* ++ * There is no way to tell if the luser has the RTC set for local ++ * time or for Universal Standard Time (GMT). Probably local though. ++ */ ++ seq_printf(seq, ++ "rtc_time\t: %02d:%02d:%02d\n" ++ "rtc_date\t: %04d-%02d-%02d\n" ++ "rtc_epoch\t: %04lu\n", ++ tm.tm_hour, tm.tm_min, tm.tm_sec, ++ tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, epoch); ++ ++ seq_puts(seq, "alarm\t\t: **:**:**\n"); ++ ++ seq_printf(seq, ++ "DST_enable\t: %s\n" ++ "BCD\t\t: %s\n" ++ "24hr\t\t: %s\n" ++ "square_wave\t: %s\n" ++ "alarm_IRQ\t: %s\n" ++ "update_IRQ\t: %s\n" ++ "periodic_IRQ\t: %s\n" ++ "periodic_freq\t: %ld\n" ++ "batt_status\t: %s\n", ++ YN(RTC_DST_EN), ++ NY(RTC_DM_BINARY), ++ YN(RTC_24H), ++ YN(RTC_SQWE), ++ YN(RTC_AIE), ++ YN(RTC_UIE), ++ YN(RTC_PIE), ++ freq, ++ batt ? "okay" : "dead"); ++ ++ return 0; ++#undef YN ++#undef NY ++} ++ ++static int rtc_proc_open(struct inode *inode, struct file *file) ++{ ++ return single_open(file, rtc_proc_show, NULL); ++} ++ ++void rtc_get_rtc_time(struct rtc_time *rtc_tm) ++{ ++ unsigned int BCD_yr, BCD_mon, BCD_day, BCD_hr, BCD_min, BCD_sec; ++ ++ spin_lock_irq(&rtc_lock); ++ rs5c313_get_cmos_time(&BCD_yr, &BCD_mon, &BCD_day, ++ &BCD_hr, &BCD_min, &BCD_sec); ++ spin_unlock_irq(&rtc_lock); ++ ++ rtc_tm->tm_sec = BCD2BIN(BCD_sec); ++ rtc_tm->tm_min = BCD2BIN(BCD_min); ++ rtc_tm->tm_hour = BCD2BIN(BCD_hr); ++ rtc_tm->tm_mday = BCD2BIN(BCD_day); ++ rtc_tm->tm_mon = BCD2BIN(BCD_mon); ++ rtc_tm->tm_year = BCD2BIN(BCD_yr); ++ ++ /* ++ * Account for differences between how the RTC uses the values ++ * and how they are defined in a struct rtc_time; ++ */ ++ if ((rtc_tm->tm_year += (epoch - 1900)) <= 69) ++ rtc_tm->tm_year += 100; ++ ++ rtc_tm->tm_mon--; ++} ++ ++ ++MODULE_AUTHOR("kogiidena"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS_MISCDEV(RTC_MINOR); ++ +diff -ruN linux-2.6.17-vanilla/drivers/char/rtc.c linux-2.6.17/drivers/char/rtc.c +--- linux-2.6.17-vanilla/drivers/char/rtc.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/char/rtc.c 2006-07-12 16:54:23.000000000 +0000 +@@ -104,7 +104,7 @@ + #endif + + #ifdef RTC_IRQ +-static int rtc_has_irq = 1; ++static int rtc_has_irq = RTC_IRQ; + #endif + + #ifndef CONFIG_HPET_EMULATE_RTC +diff -ruN linux-2.6.17-vanilla/drivers/char/rtc9701_rtc.c linux-2.6.17/drivers/char/rtc9701_rtc.c +--- linux-2.6.17-vanilla/drivers/char/rtc9701_rtc.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/char/rtc9701_rtc.c 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,888 @@ ++/* ++ * linux/drivers/char/rtc9701_rtc.c ++ * ++ * Real Time Clock interface for Linux ++ * EPSON RTC-9701JE support ++ * ++ */ ++#include <linux/config.h> ++#include <linux/module.h> ++#include <linux/fs.h> ++#include <linux/miscdevice.h> ++#include <linux/delay.h> ++#include <asm/delay.h> ++#include <linux/string.h> ++#include <linux/interrupt.h> ++#include <linux/init.h> ++#include <linux/poll.h> ++#ifdef CONFIG_PROC_FS ++#include <linux/proc_fs.h> ++#endif ++ ++#include <asm/io.h> ++#include <asm/rts7751r2d/rts7751r2d.h> ++ ++#include <linux/rtc.h> ++ ++/* define to 1 enable copious debugging info */ ++#undef RTC9701_DEBUG ++#undef RTC9701_DEBUG_IO ++#undef RTC9701_DEBUG_INTR ++ ++#ifndef BCD_TO_BIN ++#define BCD_TO_BIN(val) ((val)=((val)&15) + ((val)>>4)*10) ++#endif ++ ++#ifndef BIN_TO_BCD ++#define BIN_TO_BCD(val) ((val)=(((val)/10)<<4) + (val)%10) ++#endif ++ ++#define DRIVER_VERSION "0.02" ++ ++#define RSECCNT 0x00 /* Second Counter */ ++#define RMINCNT 0x01 /* Minute Counter */ ++#define RHRCNT 0x02 /* Hour Counter */ ++#define RWKCNT 0x03 /* Week Counter */ ++#define RDAYCNT 0x04 /* Day Counter */ ++#define RMONCNT 0x05 /* Month Counter */ ++#define RYRCNT 0x06 /* Year Counter */ ++#define R100CNT 0x07 /* Y100 Counter */ ++#define RMINAR 0x08 /* Minute Alarm */ ++#define RHRAR 0x09 /* Hour Alarm */ ++#define RWKAR 0x0a /* Week/Day Alarm */ ++#define RTIMCNT 0x0c /* Interval Timer */ ++#define REXT 0x0d /* Extension Register */ ++#define RFLAG 0x0e /* RTC Flag Register */ ++#define RCR 0x0f /* RTC Control Register */ ++ ++#define WRITE_CMD 0x00 /* Write Command */ ++#define READ_CMD 0x08 /* Read Command */ ++ ++#define SCSMR1 0xffe00000 /* Serial Mode Register(SCI) */ ++#define SCSCR1 0xffe00008 /* Serial Control Register(SCI) */ ++#define SCSPTR1 0xffe0001c /* Serial Port Register(SCI) */ ++ ++static int rtc_usage; ++static int rtc_irq_data; ++ ++static struct fasync_struct* rtc_async_queue; ++ ++static DECLARE_WAIT_QUEUE_HEAD(rtc_wait); ++extern spinlock_t rtc_lock; ++static unsigned int epoch = 1900; /* year corresponding to 0x00 */ ++ ++static const unsigned char days_in_mo[] = ++{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; ++ ++static __inline__ unsigned char rtc9701_inb(unsigned long addr) ++{ ++ unsigned char data, retval; ++ int i; ++ ++ ctrl_outw(0x0001, PA_RTCCE); /* CE=1 */ ++ ndelay(170); /* 170ns delay (tZR) */ ++ ctrl_outb(0x8c, SCSPTR1); ++ for (i=0 ; i<18 ; i++) ++ if (ctrl_inb(SCSPTR1) & 0x01) /* Check ready */ ++ break; ++ else ++ mdelay(1); /* 1ms delay */ ++//#ifdef RTC9701_DEBUG_IO ++ if (i >= 18) ++ printk("RTC-9701JE Read Time out ready wait\n"); ++//#endif ++ ndelay(65); /* 65ns delay (tRDY) */ ++ ++ for (i=0 ; i<4 ; i++) { /* Command Set */ ++ if ((READ_CMD << i) & 0x08) ++ data = 0x8b; /* DATA=1 */ ++ else ++ data = 0x8a; /* DATA=0 */ ++ ctrl_outb(data, SCSPTR1); /* CLK=0, DATA */ ++ ndelay(250); /* 250ns delay (tWL) */ ++ data |= 0x04; ++ ctrl_outb(data, SCSPTR1); /* CLK=1 */ ++ ndelay(250); /* 250ns delay (tWH) */ ++ } ++ ++ for (i=0 ; i<4 ; i++) { /* Address Set */ ++ if ((addr << i) & 0x08) ++ data = 0x8b; /* DATA=1 */ ++ else ++ data = 0x8a; /* DATA=0 */ ++ ctrl_outb(data, SCSPTR1); /* CLK=0, DATA */ ++ ndelay(250); /* 250ns delay (tWL) */ ++ data |= 0x04; ++ ctrl_outb(data, SCSPTR1); /* CLK=1 */ ++ ndelay(250); /* 250ns delay (tWH) */ ++ } ++ ++#if 0 ++ /* Dummy clock */ ++ ctrl_outb(0x88, SCSPTR1); /* CLK=0 */ ++ ndelay(250); /* 250ns delay (tWL) */ ++ ctrl_inb(SCSPTR1); /* Dummy read */ ++ ctrl_outb(0x8c, SCSPTR1); /* CLK=1 */ ++ ndelay(250); /* 250ns delay (tWH) */ ++#endif ++ ++ retval = 0; ++ for (i=0 ; i<8 ; i++) { /* DATA Read */ ++ ctrl_outb(0x88, SCSPTR1); /* CLK=0 */ ++#if 0 ++ if (i == 0) ++ ndelay(200); /* 200ns delay (tZR) */ ++#endif ++ ndelay(250); /* 250ns delay (tWL) */ ++ retval <<= 1; ++ retval &= 0xfe; ++ if (ctrl_inb(SCSPTR1) & 0x01) ++ retval |= 0x01; ++ ctrl_outb(0x8c, SCSPTR1); /* CLK=1 */ ++ ndelay(250); /* 250ns delay (tWH) */ ++ } ++ ++ ctrl_outw(0x0000, PA_RTCCE); /* CE=0 */ ++#if 0 ++ mdelay(1); /* 1ms delay (tCR) */ ++#endif ++ ++#ifdef RTC9701_DEBUG_IO ++ printk("rtc9701_inb addr=%x value=%x\n", (unsigned int)addr, retval); ++#endif ++ return retval; ++} ++ ++static __inline__ void rtc9701_outb(unsigned char b, unsigned long addr) ++{ ++ int i; ++ unsigned char data; ++ ++#ifdef RTC9701_DEBUG_IO ++ printk("rtc9701_outb addr=%x value=%x\n", (unsigned int)addr, b); ++#endif ++ ctrl_outw(0x0001, PA_RTCCE); /* CE=1 */ ++ ndelay(170); /* 170ns delay (tZR) */ ++ ctrl_outb(0x8c, SCSPTR1); ++ for (i=0 ; i<18 ; i++) ++ if (ctrl_inb(SCSPTR1) & 0x01) /* Check ready */ ++ break; ++ else ++ mdelay(1); /* 1ms delay */ ++//#ifdef RTC9701_DEBUG_IO ++ if (i >= 18) ++ printk("RTC-9701JE Write Time out ready wait\n"); ++//#endif ++ ndelay(65); /* 65ns delay (tRDY) */ ++ ++ for (i=0 ; i<4 ; i++) { /* Command Set */ ++ if ((WRITE_CMD << i) & 0x08) ++ data = 0x8b; /* DATA=1 */ ++ else ++ data = 0x8a; /* DATA=0 */ ++ ctrl_outb(data, SCSPTR1); /* CLK=0, DATA */ ++ ndelay(250); /* 250ns delay (tWL) */ ++ data |= 0x04; ++ ctrl_outb(data, SCSPTR1); /* CLK=1 */ ++ ndelay(250); /* 250ns delay (tWH) */ ++ } ++ ++ for (i=0 ; i<4 ; i++) { /* Address Set */ ++ if ((addr << i) & 0x08) ++ data = 0x8b; /* DATA=1 */ ++ else ++ data = 0x8a; /* DATA=0 */ ++ ctrl_outb(data, SCSPTR1); /* CLK=0, DATA */ ++ ndelay(250); /* 250ns delay (tWL) */ ++ data |= 0x04; ++ ctrl_outb(data, SCSPTR1); /* CLK=1 */ ++ ndelay(250); /* 250ns delay (tWH) */ ++ } ++ ++ for (i=0 ; i<8 ; i++) { /* DATA Write */ ++ if ((b << i ) & 0x80) ++ data = 0x8b; /* DATA=1 */ ++ else ++ data = 0x8a; /* DATA=0 */ ++ ctrl_outb(data, SCSPTR1); /* CLK=0, DATA */ ++ ndelay(250); /* 250ns delay (tWL) */ ++ data |= 0x04; ++ ctrl_outb(data, SCSPTR1); /* CLK=1 */ ++ ndelay(250); /* 250ns delay (tWH) */ ++ } ++ ++ ctrl_outw(0x0000, PA_RTCCE); /* CE=0 */ ++#if 0 ++ mdelay(1); /* 1ms delay (tCR) */ ++#endif ++} ++ ++static irqreturn_t rtc9701_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ unsigned char wk; ++ ++#ifdef RTC9701_DEBUG ++ printk("RTC-9701JE Interrupt irq=%d\n", irq); ++#endif ++ spin_lock(&rtc_lock); ++ ++ if (irq == IRQ_RTCALM) { ++ wk = rtc9701_inb(RFLAG); ++#ifdef RTC9701_DEBUG_INTR ++ printk("RTC-9701JE Interrupt alarm flag=%02x\n", wk); ++#endif ++ if (wk & 0x08) { ++ wk &= 0xb6; ++ rtc9701_outb(wk, RFLAG); ++ rtc_irq_data = 1; ++ } ++ } else if (irq == IRQ_RTCTIME) { ++ wk = rtc9701_inb(RFLAG); ++#ifdef RTC9701_DEBUG_INTR ++ printk("RTC-9701JE Interrupt timer flag=%02x\n", wk); ++#endif ++ if (wk & 0x10) { /* Interval timer */ ++ wk &= 0xae; ++ rtc9701_outb(wk, RFLAG); ++ rtc_irq_data = 2; ++ } ++ if (wk & 0x20) { /* Update time */ ++ wk &= 0x9e; ++ rtc9701_outb(wk, RFLAG); ++ rtc_irq_data = 2; ++ } ++ } ++ ++ spin_unlock(&rtc_lock); ++#if 0 ++ mdelay(20); ++#endif ++ wake_up_interruptible(&rtc_wait); ++ ++ kill_fasync(&rtc_async_queue, SIGIO, POLL_IN); ++ ++ return IRQ_HANDLED; ++} ++ ++static int rtc9701_rtc_open(struct inode *minode, struct file *mfile) ++{ ++ if (rtc_usage != 0) ++ return -EBUSY; ++ ++ rtc_usage = 1; ++ ++ return 0; ++} ++ ++static int rtc9701_rtc_release(struct inode *minode, struct file *mfile) ++{ ++ rtc_usage = 0; ++ ++ return 0; ++} ++ ++static int rtc9701_rtc_fasync(int fd, struct file *filp, int on) ++{ ++ return fasync_helper(fd, filp, on, &rtc_async_queue); ++} ++ ++static loff_t rtc9701_rtc_llseek(struct file *file, loff_t offset, int origin) ++{ ++ return -ESPIPE; ++} ++ ++static ssize_t rtc9701_rtc_read(struct file* file, ++ char* buf, ++ size_t count, ++ loff_t* ppos) ++{ ++ DECLARE_WAITQUEUE(wait, current); ++ unsigned long data = 1; ++ ssize_t retval; ++ ++ if (count < sizeof(unsigned long)) ++ return -EINVAL; ++ ++ add_wait_queue(&rtc_wait, &wait); ++ ++ current->state = TASK_INTERRUPTIBLE; ++ ++ do { ++ spin_lock_irq (&rtc_lock); ++ data = rtc_irq_data; ++ spin_unlock_irq (&rtc_lock); ++ ++ if (data != 0) { ++ rtc_irq_data = 0; ++ break; ++ } ++ ++ if (file->f_flags & O_NONBLOCK) { ++ retval = -EAGAIN; ++ goto out; ++ } ++ if (signal_pending(current)) { ++ retval = -ERESTARTSYS; ++ goto out; ++ } ++ schedule(); ++ } while (1); ++ ++ retval = put_user(data, (unsigned long *)buf); ++ if (!retval) ++ retval = sizeof(unsigned long); ++out: ++ current->state = TASK_RUNNING; ++ remove_wait_queue(&rtc_wait, &wait); ++ ++ return retval; ++} ++ ++static void rtc_set_timer(unsigned long value) ++{ ++ unsigned char time; ++ ++ time = (unsigned char)value | 0x80; ++ rtc9701_outb(time, RTIMCNT); ++#ifdef RTC9701_DEBUG ++ time = rtc9701_inb(RTIMCNT); ++ printk("RTC-9701JE Set timer value=%x\n", time); ++#endif ++} ++ ++static unsigned long rtc_read_timer(void) ++{ ++ unsigned char time; ++ ++ time = rtc9701_inb(RTIMCNT); ++#ifdef RTC9701_DEBUG ++ printk("RTC-9701JE Read timer value=%x\n", time); ++#endif ++ return (unsigned long)time; ++} ++ ++static void control_periodic_irq(int mode) ++{ ++ unsigned char wk; ++ unsigned char rcr; ++ ++ if (mode == 0) { /* OFF */ ++ rcr = rtc9701_inb(RCR); ++ wk = rcr & 0x2e; ++ rtc9701_outb(wk, RCR); ++ } else { /* ON */ ++ rcr = rtc9701_inb(RCR); ++ wk = rcr | 0x10; ++ rtc9701_outb(wk, RCR); ++ } ++ ++ rtc_irq_data = 0; ++} ++ ++static void control_alarm_irq(int mode) ++{ ++ unsigned char rcr; ++ ++ if (mode == 0) { /* AIE = OFF */ ++ rcr = rtc9701_inb(RCR); ++ rcr &= 0x36; ++ rtc9701_outb(rcr, RCR); ++ } else { /* AIE = ON */ ++ rcr = rtc9701_inb(RCR); ++ rcr |= 0x08; ++ rtc9701_outb(rcr, RCR); ++ } ++ ++ rtc_irq_data = 0; ++} ++ ++static void get_rtc_data(struct rtc_time *tm) ++{ ++ unsigned char wk; ++ ++ tm->tm_sec = 0; ++ tm->tm_min = 0; ++ tm->tm_hour = 0; ++ tm->tm_mday = 0; ++ tm->tm_mon = 0; ++ tm->tm_year = 0; ++ tm->tm_wday = 0; ++ tm->tm_yday = 0; ++ tm->tm_isdst = 0; ++ ++ wk = rtc9701_inb(RSECCNT); ++ wk &= 0x7f; ++ BCD_TO_BIN(wk); ++ tm->tm_sec = wk; ++ ++ wk = rtc9701_inb(RMINCNT); ++ wk &= 0x7f; ++ BCD_TO_BIN(wk); ++ tm->tm_min = wk; ++ ++ wk = rtc9701_inb(RHRCNT); ++ wk &= 0x7f; ++ BCD_TO_BIN(wk); ++ tm->tm_hour = wk; ++ ++ wk = rtc9701_inb(RWKCNT); ++ wk &= 0x7f; ++ tm->tm_wday = wk - 1; ++ ++ wk = rtc9701_inb(RDAYCNT); ++ wk &= 0x7f; ++ BCD_TO_BIN(wk); ++ tm->tm_mday = wk; ++ ++ wk = rtc9701_inb(RMONCNT); ++ wk &= 0x7f; ++ BCD_TO_BIN(wk); ++ tm->tm_mon = wk - 1; ++ ++ wk = rtc9701_inb(RYRCNT); ++ BCD_TO_BIN(wk); ++ tm->tm_year = wk + 100; ++} ++ ++static void get_rtc_alarm_data(struct rtc_time *tm) ++{ ++ unsigned char wk; ++ unsigned char rflag, rcr; ++ ++ tm->tm_sec = 0; ++ tm->tm_min = 0; ++ tm->tm_hour = 0; ++ tm->tm_mday = 0; ++ tm->tm_mon = 0; ++ tm->tm_year = 0; ++ tm->tm_wday = 0; ++ tm->tm_yday = 0; ++ tm->tm_isdst = 0; ++ ++ rflag = rtc9701_inb(RFLAG); ++ wk = rflag & 0xf7; ++ rtc9701_outb(wk, RFLAG); /* AF=0 */ ++ rcr = rtc9701_inb(RCR); ++ wk = rcr & 0xf7; ++ rtc9701_outb(wk, RCR); /* AIE=0 */ ++ ++ wk = rtc9701_inb(RMINAR); ++ wk &= 0x7f; ++ BCD_TO_BIN(wk); ++ tm->tm_min = wk; ++ ++ wk = rtc9701_inb(RHRAR); ++ wk &= 0x7f; ++ BCD_TO_BIN(wk); ++ tm->tm_hour = wk; ++ ++ rtc9701_outb(rflag, RFLAG); ++ rtc9701_outb(rcr, RCR); ++#ifdef RTC9701_DEBUG ++ printk("get_rtc_alarm_data: hour:%x min:%x\n", tm->tm_hour, tm->tm_min); ++#endif ++} ++ ++static void set_rtc_data(struct rtc_time *tm) ++{ ++ unsigned char sec, min, hour, mday, wday, mon, year; ++ ++#ifdef RTC9701_DEBUG ++ printk("set_rtc_data:%d/%d/%d %d:%d:%d\n", tm->tm_year, tm->tm_mon, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec); ++#endif ++ sec = tm->tm_sec; ++ min = tm->tm_min; ++ hour = tm->tm_hour; ++ mday = tm->tm_mday; ++ wday = tm->tm_wday; ++ mon = tm->tm_mon; ++ ++ BIN_TO_BCD(sec); ++ rtc9701_outb(sec, RSECCNT); ++ ++ BIN_TO_BCD(min); ++ rtc9701_outb(min, RMINCNT); ++ ++ BIN_TO_BCD(hour); ++ rtc9701_outb(hour, RHRCNT); ++ ++ rtc9701_outb(wday, RWKCNT); ++ ++ BIN_TO_BCD(mday); ++ rtc9701_outb(mday, RDAYCNT); ++ ++ BIN_TO_BCD(mon); ++ rtc9701_outb(mon, RMONCNT); ++ ++ if (tm->tm_year > 100) ++ tm->tm_year -= 100; ++ year = tm->tm_year; ++ BIN_TO_BCD(year); ++ rtc9701_outb(year, RYRCNT); ++} ++ ++static void set_rtc_alarm_data(struct rtc_time *tm) ++{ ++ unsigned char wk; ++ unsigned char min, hour; ++ ++#ifdef RTC9701_DEBUG ++ printk("set_rtc_alarm_data: hour:%x min:%x\n", tm->tm_hour, tm->tm_min); ++#endif ++ wk = rtc9701_inb(RFLAG); ++ wk &= 0xf7; ++ rtc9701_outb(wk, RFLAG); /* AF=0 */ ++ wk = rtc9701_inb(RCR); ++ wk &= 0xf7; ++ rtc9701_outb(wk, RCR); /* AIE=0 */ ++ ++ min = tm->tm_min; ++ BIN_TO_BCD(min); ++ rtc9701_outb(min, RMINAR); ++ ++ hour = tm->tm_hour; ++ BIN_TO_BCD(hour); ++ rtc9701_outb(hour, RHRAR); ++ ++ wk = rtc9701_inb(RFLAG); ++ wk &= 0xf7; ++ rtc9701_outb(wk, RFLAG); /* AF=0 */ ++} ++ ++static int rtc9701_rtc_ioctl(struct inode* inode, ++ struct file* file, ++ unsigned int cmd, ++ unsigned long arg) ++{ ++ struct rtc_time wtime, rtc_tm; ++ unsigned char mon, day, hrs, min, sec, week, leap_yr; ++ unsigned int yrs; ++ unsigned long value; ++ ++ wtime.tm_sec = 0; ++ wtime.tm_min = 0; ++ wtime.tm_hour = 0; ++ wtime.tm_mday = 0; ++ wtime.tm_mon = 0; ++ wtime.tm_year = 0; ++ wtime.tm_wday = 0; ++ wtime.tm_yday = 0; ++ wtime.tm_isdst = 0; ++ ++ switch (cmd) { ++ case RTC_AIE_OFF: /* =2:Alarm int. disable */ ++ spin_lock_irq(&rtc_lock); ++ control_alarm_irq(0); ++ spin_unlock_irq(&rtc_lock); ++ mdelay(20); ++ return 0; ++ ++ case RTC_AIE_ON: /* =1:Alarm int. enable */ ++ spin_lock_irq(&rtc_lock); ++ control_alarm_irq(1); ++ spin_unlock_irq(&rtc_lock); ++ mdelay(20); ++ return 0; ++ ++ case RTC_PIE_OFF: /* =6:Periodic int. disable */ ++ spin_lock_irq(&rtc_lock); ++ control_periodic_irq(0); ++ spin_unlock_irq(&rtc_lock); ++ mdelay(20); ++ return 0; ++ ++ case RTC_PIE_ON: /* =5:Periodic int. enable */ ++ spin_lock_irq(&rtc_lock); ++ control_periodic_irq(1); ++ spin_unlock_irq(&rtc_lock); ++ mdelay(20); ++ return 0; ++ ++ case RTC_IRQP_SET: ++ if (copy_from_user(&value, (unsigned long *)arg, sizeof(value))) ++ return -EFAULT; ++ rtc_set_timer(value); ++ mdelay(20); ++ return 0; ++ ++ case RTC_IRQP_READ: ++ value = rtc_read_timer(); ++ mdelay(20); ++ return put_user(value, (unsigned long *)arg); ++ ++ case RTC_ALM_READ: /* =8:Read alarm time */ ++ get_rtc_alarm_data(&wtime); ++ mdelay(20); ++ break; ++ ++ case RTC_ALM_SET: /* =7:Set alarm time */ ++ if (copy_from_user(&rtc_tm, (struct rtc_time*)arg, ++ sizeof(struct rtc_time))) ++ return -EFAULT; ++ ++ hrs = rtc_tm.tm_hour; ++ min = rtc_tm.tm_min; ++ ++ if ((hrs >= 24) || (min >= 60)) { ++ return -EINVAL; ++ } ++ ++ /* update the alarm register */ ++ spin_lock_irq(&rtc_lock); ++ wtime.tm_min = min; ++ wtime.tm_hour = hrs; ++ set_rtc_alarm_data(&wtime); ++ spin_unlock_irq(&rtc_lock); ++ mdelay(20); ++ return 0; ++ ++ case RTC_RD_TIME: /* =9:Read RTC time */ ++ spin_lock_irq(&rtc_lock); ++ get_rtc_data(&wtime); ++ spin_unlock_irq(&rtc_lock); ++ mdelay(20); ++ break; ++ ++ case RTC_SET_TIME: /* =10:Set RTC time */ ++ if (copy_from_user(&rtc_tm, (struct rtc_time*)arg, ++ sizeof(struct rtc_time))) ++ return -EFAULT; ++ ++ yrs = rtc_tm.tm_year + epoch; ++ mon = rtc_tm.tm_mon+1; ++ day = rtc_tm.tm_mday; ++ hrs = rtc_tm.tm_hour; ++ min = rtc_tm.tm_min; ++ sec = rtc_tm.tm_sec; ++ week = rtc_tm.tm_wday+1; ++ ++ if (yrs < epoch){ ++ return -EINVAL; ++ } ++ leap_yr = ((!(yrs % 4) && (yrs % 100)) || !(yrs % 400)); ++ if ((mon > 12) || (day == 0)){ ++ return -EINVAL; ++ } ++ if (day > (days_in_mo[mon] + ((mon == 2) && leap_yr))){ ++ return -EINVAL; ++ } ++ if ((hrs >= 24) || (min >= 60) || (sec >= 60) || (week > 64)){ ++ return -EINVAL; ++ } ++ if ((yrs - epoch) > 255){ ++ return -EINVAL; ++ } ++ ++ spin_lock_irq(&rtc_lock); ++ wtime.tm_sec = sec; ++ wtime.tm_min = min; ++ wtime.tm_hour = hrs; ++ wtime.tm_mday = day; ++ wtime.tm_mon = mon; ++ wtime.tm_wday = week; ++ wtime.tm_year = yrs - epoch; ++ set_rtc_data(&wtime); ++ spin_unlock_irq(&rtc_lock); ++ mdelay(20); ++ return 0; ++ ++ default: ++ return -EINVAL; ++ } ++ ++ return copy_to_user((void*)arg, &wtime, sizeof(wtime)) ? -EFAULT : 0; ++} ++ ++static unsigned int rtc9701_rtc_poll(struct file* file, poll_table* wait) ++{ ++ unsigned long l; ++ ++ poll_wait(file, &rtc_wait, wait); ++ ++ spin_lock_irq(&rtc_lock); ++ l = rtc_irq_data; ++ spin_unlock_irq(&rtc_lock); ++ ++ if (l != 0) ++ return POLLIN | POLLRDNORM; ++ else ++ return 0; ++} ++ ++#ifdef CONFIG_PROC_FS ++ ++static int rtc9701_rtc_proc_output(char *buf) ++{ ++ char *p; ++ struct rtc_time tm; ++ ++ get_rtc_data(&tm); ++ mdelay(20); ++ ++ p = buf; ++ p += sprintf(p, ++ "rtc_time\t: %02d:%02d:%02d\n" ++ "rtc_date\t: %04d-%02d-%02d\n" ++ "rtc_epoch\t: %04lu\n", ++ tm.tm_hour, tm.tm_min, tm.tm_sec, ++ tm.tm_year + epoch, tm.tm_mon+1, tm.tm_mday, ++ (unsigned long)epoch); ++ ++ get_rtc_alarm_data(&tm); ++ mdelay(20); ++ ++ p += sprintf(p, ++ "alrm_time\t: %02d:%02d\n", ++ tm.tm_hour, tm.tm_min); ++ ++ p += sprintf(p,"alarm_IRQ\t: %s\n", ++ (rtc9701_inb(RCR) & 0x08) ? "yes" : "no" ); ++ mdelay(20); ++ p += sprintf(p,"periodic_IRQ\t: %s\n", ++ (rtc9701_inb(RCR) & 0x10) ? "yes" : "no" ); ++ mdelay(20); ++ ++ p += sprintf(p,"periodic_freq\t: 1\n"); ++ p += sprintf(p,"batt_status\t: unsupported\n"); ++ ++ return (p - buf); ++} ++ ++static int rtc9701_rtc_read_proc(char* page, ++ char** start, ++ off_t off, ++ int count, ++ int* eof, ++ void* data) ++{ ++ int len = rtc9701_rtc_proc_output(page); ++ ++ if (len <= off + count) { *eof = 1; } ++ *start = page + off; ++ len -= off; ++ if (len > count) { len = count; } ++ if (len < 0) { len = 0; } ++ ++ return len; ++} ++ ++#endif ++ ++static void rtc9701_initial_check(void) ++{ ++ unsigned int sec, min, hr, day, mon, yr; ++ ++ sec = rtc9701_inb(RSECCNT) & 0x7f; ++ min = rtc9701_inb(RMINCNT) & 0x7f; ++ hr = rtc9701_inb(RHRCNT) & 0x7f; ++ day = rtc9701_inb(RDAYCNT) & 0x7f; ++ mon = rtc9701_inb(RMONCNT) & 0x7f; ++ yr = rtc9701_inb(RYRCNT) & 0x7f; ++ ++ BCD_TO_BIN(sec); ++ BCD_TO_BIN(min); ++ BCD_TO_BIN(hr); ++ BCD_TO_BIN(day); ++ BCD_TO_BIN(mon); ++ BCD_TO_BIN(yr); ++ ++ if (yr > 99 || mon < 1 || mon > 12 || day > 31 || day < 1 || ++ hr > 23 || min > 59 || sec > 59) { ++ printk("Current RTC Time:%d-%d-%d %d:%d:%d\n", yr, mon, day, hr, min, sec); ++ printk(KERN_ERR "RTC-9701: invalid value, resetting to 1 Jan 2000\n"); ++ rtc9701_outb(0, RSECCNT); ++ rtc9701_outb(0, RMINCNT); ++ rtc9701_outb(0, RHRCNT); ++ rtc9701_outb(0x40, RWKCNT); ++ rtc9701_outb(1, RDAYCNT); ++ rtc9701_outb(1, RMONCNT); ++ rtc9701_outb(0, RYRCNT); ++ } ++} ++ ++static struct file_operations rtc_fops = { ++ .owner = THIS_MODULE, ++ .llseek = rtc9701_rtc_llseek, ++ .read = rtc9701_rtc_read, ++ .poll = rtc9701_rtc_poll, ++ .ioctl = rtc9701_rtc_ioctl, ++ .open = rtc9701_rtc_open, ++ .release = rtc9701_rtc_release, ++ .fasync = rtc9701_rtc_fasync, ++}; ++ ++ ++static struct miscdevice rts7751r2drtc_miscdev = { ++ RTC_MINOR, ++ "rtc", ++ &rtc_fops ++}; ++ ++static void rtc9701_rtc_exit(void) ++{ ++ spin_lock_irq(&rtc_lock); ++ rtc9701_outb(0x00, RCR); ++ spin_unlock_irq(&rtc_lock); ++ mdelay(20); ++ ++ free_irq(IRQ_RTCALM, NULL); ++ free_irq(IRQ_RTCTIME, NULL); ++#ifdef CONFIG_PROC_FS ++ remove_proc_entry("driver/rtc", NULL); ++#endif ++ ++ misc_deregister(&rts7751r2drtc_miscdev); ++} ++ ++static int __init rtc9701_rtc_init(void) ++{ ++ unsigned char val; ++ ++ misc_register(&rts7751r2drtc_miscdev); ++ ++#ifdef CONFIG_PROC_FS ++ create_proc_read_entry("driver/rtc", 0, 0, rtc9701_rtc_read_proc, NULL); ++#endif ++ ctrl_outb((ctrl_inb(SCSMR1) & 0x7f), SCSMR1); ++ ctrl_outb((ctrl_inb(SCSCR1) & 0x9c), SCSCR1); ++ ctrl_outw(0x0000, PA_RTCCE); /* CE=0 */ ++ ctrl_outb(0x8c, SCSPTR1); /* EIO=1, SPB1IO=1, SPB1DT=1, SPB0IO=0 */ ++ ++ rtc9701_initial_check(); /* RTC Data Initial check */ ++ mdelay(20); ++ ++ rtc9701_outb(0x02, REXT); /* WADA=0, UDUTY=0, USEL=0, TSEL1=1, TSEL0=0 */ ++ mdelay(20); ++ rtc9701_outb(0x00, RCR); /* UIE=0, TIE=0, AIE=0, EXIE=0, VLIE=0 */ ++ mdelay(20); ++ rtc9701_outb(0x00, RFLAG); ++ mdelay(20); ++#if 0 ++ val = rtc9701_inb(REXT); ++ val &= 0x33; ++ rtc9701_outb(val, REXT); /* WADA=0 */ ++#endif ++ val = 0xff; ++ rtc9701_outb(val, RWKAR); ++ mdelay(20); ++ ++ rtc9701_outb(0x00, RTIMCNT); ++ mdelay(20); ++ ++ if (request_irq(IRQ_RTCALM, rtc9701_rtc_interrupt, SA_INTERRUPT, "rtc_alarm", NULL)) { ++ printk(KERN_ERR "rtc: IRQ %d already in use.\n", IRQ_RTCALM); ++ return -EIO; ++ } ++ ++ if (request_irq(IRQ_RTCTIME, rtc9701_rtc_interrupt, SA_INTERRUPT, "rtc_timer", NULL)) { ++ printk(KERN_ERR "rtc: IRQ %d already in use.\n", IRQ_RTCTIME); ++ return -EIO; ++ } ++ ++ printk(KERN_INFO "RTC-9701JE Real Time Clock Driver v" DRIVER_VERSION "\n"); ++ ++ return 0; ++} ++ ++module_init(rtc9701_rtc_init); ++module_exit(rtc9701_rtc_exit); +diff -ruN linux-2.6.17-vanilla/drivers/char/sh03rtc.c linux-2.6.17/drivers/char/sh03rtc.c +--- linux-2.6.17-vanilla/drivers/char/sh03rtc.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/char/sh03rtc.c 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,1185 @@ ++/* ++ * Real Time Clock interface for Linux ++ * ++ * Copyright (C) 2004 Interface Corporation Saito.K ++ * ++ * Based on skelrton from the drivers/char/rtc.c ++ * ++ * This driver allows use of the real time clock (built into ++ * nearly all computers) from user space. It exports the /dev/rtc ++ * interface supporting various ioctl() and also the ++ * /proc/driver/rtc pseudo-file for status information. ++ * ++ * The ioctls can be used to set the interrupt behaviour and ++ * generation rate from the RTC via IRQ 8. Then the /dev/rtc ++ * interface can be used to make use of these timer interrupts, ++ * be they interval or alarm based. ++ * ++ * The /dev/rtc interface will block on reads until an interrupt ++ * has been received. If a RTC interrupt has already happened, ++ * it will output an unsigned long and then block. The output value ++ * contains the interrupt status in the low byte and the number of ++ * interrupts since the last read in the remaining high bytes. The ++ * /dev/rtc interface can also be used with the select(2) call. ++ * ++ * This program is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU General Public License ++ * as published by the Free Software Foundation; either version ++ * 2 of the License, or (at your option) any later version. ++ * ++ * Based on other minimal char device drivers, like Alan's ++ * watchdog, Ted's random, etc. etc. ++ * ++ * 1.07 Paul Gortmaker. ++ * 1.08 Miquel van Smoorenburg: disallow certain things on the ++ * DEC Alpha as the CMOS clock is also used for other things. ++ * 1.09 Nikita Schmidt: epoch support and some Alpha cleanup. ++ * 1.09a Pete Zaitcev: Sun SPARC ++ * 1.09b Jeff Garzik: Modularize, init cleanup ++ * 1.09c Jeff Garzik: SMP cleanup ++ * 1.10 Paul Barton-Davis: add support for async I/O ++ * 1.10a Andrea Arcangeli: Alpha updates ++ * 1.10b Andrew Morton: SMP lock fix ++ * 1.10c Cesar Barros: SMP locking fixes and cleanup ++ * 1.10d Paul Gortmaker: delete paranoia check in rtc_exit ++ * 1.10e Maciej W. Rozycki: Handle DECstation's year weirdness. ++ * 1.11 Takashi Iwai: Kernel access functions ++ * rtc_register/rtc_unregister/rtc_control ++ * 1.11a Daniele Bellucci: Audit create_proc_read_entry in rtc_init ++ * 1.12 Venkatesh Pallipadi: Hooks for emulating rtc on HPET base-timer ++ * CONFIG_HPET_EMULATE_RTC ++ * ++ */ ++ ++#define SH03_RTC_VERSION "0.09" ++ ++#define RTC_IO_EXTENT 0x8 ++ ++/* ++ * Note that *all* calls to CMOS_READ and CMOS_WRITE are done with ++ * interrupts disabled. Due to the index-port/data-port (0x70/0x71) ++ * design of the RTC, we don't want two different things trying to ++ * get to it at once. (e.g. the periodic 11 min sync from time.c vs. ++ * this driver.) ++ */ ++ ++#include <linux/config.h> ++#include <linux/interrupt.h> ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/types.h> ++#include <linux/miscdevice.h> ++#include <linux/ioport.h> ++#include <linux/fcntl.h> ++ ++// @@@@@ 16.09.29 #include <linux/mc146818rtc.h> ++#include <linux/rtc.h> ++ ++#include <linux/init.h> ++#include <linux/poll.h> ++#include <linux/proc_fs.h> ++#include <linux/spinlock.h> ++#include <linux/sysctl.h> ++#include <linux/wait.h> ++#include <linux/bcd.h> ++ ++#include <asm/current.h> ++#include <asm/uaccess.h> ++#include <asm/system.h> ++#include <asm/io.h> ++ ++extern spinlock_t rtc_lock; ++ ++/* ++TODO: Timer ++*/ ++#define SH03_RTC_IRQ 11 ++ ++#define RTC_BASE 0xb0000000 ++#define RTC_SEC1 (RTC_BASE + 0) ++#define RTC_SEC10 (RTC_BASE + 1) ++#define RTC_MIN1 (RTC_BASE + 2) ++#define RTC_MIN10 (RTC_BASE + 3) ++#define RTC_HOU1 (RTC_BASE + 4) ++#define RTC_HOU10 (RTC_BASE + 5) ++#define RTC_WEE1 (RTC_BASE + 6) ++#define RTC_DAY1 (RTC_BASE + 7) ++#define RTC_DAY10 (RTC_BASE + 8) ++#define RTC_MON1 (RTC_BASE + 9) ++#define RTC_MON10 (RTC_BASE + 10) ++#define RTC_YEA1 (RTC_BASE + 11) ++#define RTC_YEA10 (RTC_BASE + 12) ++#define RTC_YEA100 (RTC_BASE + 13) ++#define RTC_YEA1000 (RTC_BASE + 14) ++#define RTC_CTL (RTC_BASE + 15) ++#define RTC_BUSY 1 ++#define RTC_STOP 2 ++#define RTC_BANK0 (0 << 2) ++#define RTC_BANK1 (1 << 2) ++#define RTC_BANK2 (2 << 2) ++ ++#define RTC_ATCTL (RTC_BASE + 14) ++#define RTC_AIE 1 ++#define RTC_AF 2 ++ ++#define RTC_TE_CLOCK (RTC_BASE + 8) ++#define RTC_TMCTL (RTC_BASE + 14) ++#define RTC_TIE 1 ++#define RTC_TF 2 ++ ++#define SH03_RTC_PORT(n) ((RTC_BASE) + n) ++#define SH03_RTC_IO_EXTENT 0x10 ++ ++#ifndef BIN_TO_BCD ++#define BIN_TO_BCD(val) ((val)=(((val)/10)<<4) + (val)%10) ++#endif ++ ++#define SELECT_BANK(n) ctrl_outb((n), RTC_CTL) ++ ++#define READ_SECONDS ((ctrl_inb(RTC_SEC1) & 15) + (ctrl_inb(RTC_SEC10) & 7) * 10) ++#define READ_MINUTES ((ctrl_inb(RTC_MIN1) & 15) + (ctrl_inb(RTC_MIN10) & 7) * 10) ++#define READ_HOURS ((ctrl_inb(RTC_HOU1) & 15) + (ctrl_inb(RTC_HOU10) & 3) * 10) ++#define READ_WEEK (ctrl_inb(RTC_WEE1) & 7) ++#define READ_DAY ((ctrl_inb(RTC_DAY1) & 15) + (ctrl_inb(RTC_DAY10) & 3) * 10) ++#define READ_MONTH ((ctrl_inb(RTC_MON1) & 15) + (ctrl_inb(RTC_MON10) & 1) * 10) ++#define READ_YEAR ((ctrl_inb(RTC_YEA1) & 15) + (ctrl_inb(RTC_YEA10) & 15) * 10 \ ++ + (ctrl_inb(RTC_YEA100) & 15) * 100 + (ctrl_inb(RTC_YEA1000) & 3) * 1000) ++ ++#define WRITE_SECONDS(d) ctrl_outb((d) & 15, RTC_SEC1); ctrl_outb((d) >> 4, RTC_SEC10) ++#define WRITE_MINUTES(d) ctrl_outb((d) & 15, RTC_MIN1); ctrl_outb((d) >> 4, RTC_MIN10) ++#define WRITE_HOURS(d) ctrl_outb((d) & 15, RTC_HOU1); ctrl_outb((d) >> 4, RTC_HOU10) ++#define WRITE_WEEK(d) ctrl_outb((d) & 15, RTC_WEE1) ++#define WRITE_DAY(d) ctrl_outb((d) & 15, RTC_DAY1); ctrl_outb((d) >> 4, RTC_DAY10) ++#define WRITE_MONTH(d) ctrl_outb((d) & 15, RTC_MON1); ctrl_outb((d) >> 4, RTC_MON10) ++#define WRITE_YEAR_LOW(d) ctrl_outb((d) & 15, RTC_YEA1); ctrl_outb((d) >> 4, RTC_YEA10) ++#define WRITE_YEAR_HIGH(d) ctrl_outb((d) & 15, RTC_YEA100); ctrl_outb((d) >> 4, RTC_YEA1000) ++ ++#define READ_ATCTL (ctrl_inb(RTC_ATCTL)) ++#define WRITE_ATCTL(d) ctrl_outb((d), RTC_ATCTL) ++ ++#define READ_TMCTL (ctrl_inb(RTC_TMCTL)) ++#define WRITE_TMCTL(d) ctrl_outb((d), RTC_TMCTL) ++ ++#define READ_CLOCK (ctrl_inb(RTC_TE_CLOCK)) ++#define WRITE_CLOCK(d) ctrl_outb((d) & 15, RTC_TE_CLOCK) ++ ++ ++ ++#ifdef SH03_RTC_IRQ ++static int sh03_rtc_has_irq = SH03_RTC_IRQ; ++#endif ++ ++/* ++ * We sponge a minor off of the misc major. No need slurping ++ * up another valuable major dev number for this. If you add ++ * an ioctl, make sure you don't conflict with SPARC's RTC ++ * ioctls. ++ */ ++ ++static struct fasync_struct *sh03_rtc_async_queue; ++ ++static DECLARE_WAIT_QUEUE_HEAD(sh03_rtc_wait); ++ ++#ifdef SH03_RTC_IRQ ++static struct timer_list sh03_rtc_irq_timer; ++#endif ++ ++static ssize_t sh03_rtc_read(struct file *file, char __user *buf, ++ size_t count, loff_t *ppos); ++ ++static int sh03_rtc_ioctl(struct inode *inode, struct file *file, ++ unsigned int cmd, unsigned long arg); ++ ++#ifdef SH03_RTC_IRQ ++static unsigned int sh03_rtc_poll(struct file *file, poll_table *wait); ++#endif ++ ++void sh03_rtc_get_rtc_time(struct rtc_time *rtc_tm); ++static void sh03_get_rtc_alm_time (struct rtc_time *alm_tm); ++#ifdef SH03_RTC_IRQ ++static void sh03_rtc_dropped_irq(unsigned long data); ++ ++static void sh03_set_rtc_irq_bit(unsigned int bit); ++static void sh03_mask_rtc_irq_bit(unsigned int bit); ++#endif ++ ++static int sh03_rtc_read_proc(char *page, char **start, off_t off, ++ int count, int *eof, void *data); ++ ++/* ++ * Bits in rtc_status. (6 bits of room for future expansion) ++ */ ++ ++#define RTC_IS_OPEN 0x01 /* means /dev/rtc is in use */ ++#define RTC_TIMER_ON 0x02 /* missed irq timer active */ ++ ++/* ++ * rtc_status is never changed by rtc_interrupt, and ioctl/open/close is ++ * protected by the big kernel lock. However, ioctl can still disable the timer ++ * in rtc_status and then with del_timer after the interrupt has read ++ * rtc_status but before mod_timer is called, which would then reenable the ++ * timer (but you would need to have an awful timing before you'd trip on it) ++ */ ++static unsigned long rtc_status = 0; /* bitmapped status byte. */ ++static unsigned long rtc_freq = 0; /* Current periodic IRQ rate */ ++static unsigned long rtc_irq_data = 0; /* our output to the world */ ++static unsigned long rtc_max_user_freq = 64; /* > this, need CAP_SYS_RESOURCE */ ++ ++#ifdef SH03_RTC_IRQ ++/* ++ * rtc_task_lock nests inside rtc_lock. ++ */ ++static spinlock_t rtc_task_lock = SPIN_LOCK_UNLOCKED; ++static rtc_task_t *rtc_callback = NULL; ++#endif ++ ++/* ++ * If this driver ever becomes modularised, it will be really nice ++ * to make the epoch retain its value across module reload... ++ */ ++ ++static unsigned long epoch = 1900; /* year corresponding to 0x00 */ ++ ++static const unsigned char days_in_mo[] = ++{0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; ++ ++#if 0 /* @@@@@ 16.09.29 TODO */ ++/* ++ * Returns true if a clock update is in progress ++ */ ++static inline unsigned char rtc_is_updating(void) ++{ ++ unsigned char uip; ++ ++ spin_lock_irq(&rtc_lock); ++ uip = (CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP); ++ spin_unlock_irq(&rtc_lock); ++ return uip; ++} ++#endif ++ ++#ifdef SH03_RTC_IRQ ++/* ++ * A very tiny interrupt handler. It runs with SA_INTERRUPT set, ++ * but there is possibility of conflicting with the set_rtc_mmss() ++ * call (the rtc irq and the timer irq can easily run at the same ++ * time in two different CPUs). So we need to serialize ++ * accesses to the chip with the rtc_lock spinlock that each ++ * architecture should implement in the timer code. ++ * (See ./arch/XXXX/kernel/time.c for the set_rtc_mmss() function.) ++ */ ++ ++irqreturn_t sh03_rtc_interrupt(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ /* ++ * Can be an alarm interrupt, update complete interrupt, ++ * or a periodic interrupt. We store the status in the ++ * low byte and the number of interrupts received since ++ * the last read in the remainder of rtc_irq_data. ++ */ ++ ++ spin_lock (&rtc_lock); ++ rtc_irq_data += 0x100; ++ rtc_irq_data &= ~0xff; ++ SELECT_BANK(RTC_BANK1); ++ rtc_irq_data |= (READ_ATCTL & RTC_AF) >> 1; ++ WRITE_ATCTL(READ_ATCTL & ~ RTC_AF); ++ SELECT_BANK(RTC_BANK2); ++ rtc_irq_data |= (READ_TMCTL & RTC_TF); ++ WRITE_TMCTL(READ_TMCTL & ~ RTC_TF); ++ SELECT_BANK(RTC_BANK0); ++ ++ if (rtc_status & RTC_TIMER_ON) ++ mod_timer(&sh03_rtc_irq_timer, jiffies + HZ/rtc_freq + 2*HZ/100); ++ ++ spin_unlock (&rtc_lock); ++ ++ /* Now do the rest of the actions */ ++ spin_lock(&rtc_task_lock); ++ if (rtc_callback) ++ rtc_callback->func(rtc_callback->private_data); ++ spin_unlock(&rtc_task_lock); ++ wake_up_interruptible(&sh03_rtc_wait); ++ ++ kill_fasync (&sh03_rtc_async_queue, SIGIO, POLL_IN); ++ ++ return IRQ_HANDLED; ++} ++#endif ++ ++/* ++ * sysctl-tuning infrastructure. ++ */ ++static ctl_table rtc_table[] = { ++ { ++ .ctl_name = 1, ++ .procname = "max-user-freq", ++ .data = &rtc_max_user_freq, ++ .maxlen = sizeof(int), ++ .mode = 0644, ++ .proc_handler = &proc_dointvec, ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static ctl_table rtc_root[] = { ++ { ++ .ctl_name = 1, ++ .procname = "rtc", ++ .maxlen = 0, ++ .mode = 0555, ++ .child = rtc_table, ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static ctl_table dev_root[] = { ++ { ++ .ctl_name = CTL_DEV, ++ .procname = "dev", ++ .maxlen = 0, ++ .mode = 0555, ++ .child = rtc_root, ++ }, ++ { .ctl_name = 0 } ++}; ++ ++static struct ctl_table_header *sysctl_header; ++ ++static int __init init_sysctl(void) ++{ ++ sysctl_header = register_sysctl_table(dev_root, 0); ++ return 0; ++} ++ ++static void __exit cleanup_sysctl(void) ++{ ++ unregister_sysctl_table(sysctl_header); ++} ++ ++/* ++ * Now all the various file operations that we export. ++ */ ++ ++static ssize_t sh03_rtc_read(struct file *file, char __user *buf, ++ size_t count, loff_t *ppos) ++{ ++#ifndef SH03_RTC_IRQ ++ return -EIO; ++#else ++ DECLARE_WAITQUEUE(wait, current); ++ unsigned long data; ++ ssize_t retval; ++ ++ if (sh03_rtc_has_irq == 0) ++ return -EIO; ++ ++ if (count < sizeof(unsigned)) ++ return -EINVAL; ++ ++ add_wait_queue(&sh03_rtc_wait, &wait); ++ ++ do { ++ /* First make it right. Then make it fast. Putting this whole ++ * block within the parentheses of a while would be too ++ * confusing. And no, xchg() is not the answer. */ ++ ++ __set_current_state(TASK_INTERRUPTIBLE); ++ ++ spin_lock_irq (&rtc_lock); ++ data = rtc_irq_data; ++ rtc_irq_data = 0; ++ spin_unlock_irq (&rtc_lock); ++ ++ if (data != 0) ++ break; ++ ++ if (file->f_flags & O_NONBLOCK) { ++ retval = -EAGAIN; ++ goto out; ++ } ++ if (signal_pending(current)) { ++ retval = -ERESTARTSYS; ++ goto out; ++ } ++ schedule(); ++ } while (1); ++ ++ if (count < sizeof(unsigned long)) ++ retval = put_user(data, (unsigned int __user *)buf) ?: sizeof(int); ++ else ++ retval = put_user(data, (unsigned long __user *)buf) ?: sizeof(long); ++ out: ++ current->state = TASK_RUNNING; ++ remove_wait_queue(&sh03_rtc_wait, &wait); ++ ++ return retval; ++#endif ++} ++ ++static int sh03_rtc_do_ioctl(unsigned int cmd, unsigned long arg, int kernel) ++{ ++ struct rtc_time wtime; ++ ++#ifdef SH03_RTC_IRQ ++ if (sh03_rtc_has_irq == 0) { ++ switch (cmd) { ++ case RTC_AIE_OFF: ++ case RTC_AIE_ON: ++ case RTC_PIE_OFF: ++ case RTC_PIE_ON: ++ case RTC_UIE_OFF: ++ case RTC_UIE_ON: ++ case RTC_IRQP_READ: ++ case RTC_IRQP_SET: ++ return -EINVAL; ++ }; ++ } ++#endif ++ ++ switch (cmd) { ++#ifdef SH03_RTC_IRQ ++ case RTC_AIE_OFF: /* Mask alarm int. enab. bit */ ++ { ++ sh03_mask_rtc_irq_bit(RTC_AIE); ++ return 0; ++ } ++ case RTC_AIE_ON: /* Allow alarm interrupts. */ ++ { ++ sh03_set_rtc_irq_bit(RTC_AIE); ++ return 0; ++ } ++ case RTC_PIE_OFF: /* Mask periodic int. enab. bit */ ++ { ++ sh03_mask_rtc_irq_bit(RTC_PIE_OFF); ++ if (rtc_status & RTC_TIMER_ON) { ++ spin_lock_irq (&rtc_lock); ++ rtc_status &= ~RTC_TIMER_ON; ++ del_timer(&sh03_rtc_irq_timer); ++ spin_unlock_irq (&rtc_lock); ++ } ++ return 0; ++ } ++ case RTC_PIE_ON: /* Allow periodic ints */ ++ { ++ ++ /* ++ * We don't really want Joe User enabling more ++ * than 64Hz of interrupts on a multi-user machine. ++ */ ++ if (!kernel && (rtc_freq > rtc_max_user_freq) && ++ (!capable(CAP_SYS_RESOURCE))) ++ return -EACCES; ++ ++ if (!(rtc_status & RTC_TIMER_ON)) { ++ spin_lock_irq (&rtc_lock); ++ sh03_rtc_irq_timer.expires = jiffies + HZ/rtc_freq + 2*HZ/100; ++ add_timer(&sh03_rtc_irq_timer); ++ rtc_status |= RTC_TIMER_ON; ++ spin_unlock_irq (&rtc_lock); ++ } ++ sh03_set_rtc_irq_bit(RTC_PIE_ON); ++ return 0; ++ } ++#if 1 /* @@@@@ 16.09.29 TODO */ ++ case RTC_UIE_OFF: /* Mask ints from RTC updates. */ ++ case RTC_UIE_ON: /* Allow ints for RTC updates. */ ++ return -EINVAL; ++#else ++ case RTC_UIE_OFF: /* Mask ints from RTC updates. */ ++ { ++ sh03_mask_rtc_irq_bit(RTC_UIE); ++ return 0; ++ } ++ case RTC_UIE_ON: /* Allow ints for RTC updates. */ ++ { ++ sh03_set_rtc_irq_bit(RTC_UIE); ++ return 0; ++ } ++#endif ++#endif ++ case RTC_ALM_READ: /* Read the present alarm time */ ++ { ++ /* ++ * This returns a struct rtc_time. Reading >= 0xc0 ++ * means "don't care" or "match all". Only the tm_hour, ++ * tm_min, and tm_sec values are filled in. ++ */ ++ memset(&wtime, 0, sizeof(struct rtc_time)); ++ sh03_get_rtc_alm_time(&wtime); ++ break; ++ } ++ case RTC_ALM_SET: /* Store a time into the alarm */ ++ { ++ /* ++ * This expects a struct rtc_time. Writing 0xff means ++ * "don't care" or "match all". Only the tm_hour, ++ * tm_min and tm_sec are used. ++ */ ++ unsigned char day, week, hrs, min, sec; ++ struct rtc_time alm_tm; ++ ++ if (copy_from_user(&alm_tm, (struct rtc_time __user *)arg, ++ sizeof(struct rtc_time))) ++ return -EFAULT; ++ ++ day = alm_tm.tm_mday; ++ week = alm_tm.tm_wday; ++ hrs = alm_tm.tm_hour; ++ min = alm_tm.tm_min; ++ sec = alm_tm.tm_sec; ++ if (day >= 31) ++ day = 99; ++ ++ if (week >= 7) ++ week = 9; ++ ++ if (hrs >= 24) ++ hrs = 99; ++ ++ if (min >= 60) ++ min = 99; ++ ++ if (sec >= 60) ++ sec = 99; ++ ++ spin_lock_irq(&rtc_lock); ++ BIN_TO_BCD(sec); ++ BIN_TO_BCD(min); ++ BIN_TO_BCD(hrs); ++ BIN_TO_BCD(day); ++ SELECT_BANK(RTC_BANK1); ++ WRITE_DAY(day); ++ WRITE_WEEK(week); ++ WRITE_HOURS(hrs); ++ WRITE_MINUTES(min); ++ WRITE_SECONDS(sec); ++ SELECT_BANK(RTC_BANK0); ++ spin_unlock_irq(&rtc_lock); ++ ++ return 0; ++ } ++ case RTC_RD_TIME: /* Read the time/date from RTC */ ++ { ++ memset(&wtime, 0, sizeof(struct rtc_time)); ++ sh03_rtc_get_rtc_time(&wtime); ++ break; ++ } ++ case RTC_SET_TIME: /* Set the RTC */ ++ { ++ struct rtc_time rtc_tm; ++ unsigned char mon, day, hrs, min, sec, leap_yr; ++ unsigned int yrs, yrs_low, yrs_high; ++ ++ if (!capable(CAP_SYS_TIME)) ++ return -EACCES; ++ ++ if (copy_from_user(&rtc_tm, (struct rtc_time __user *)arg, ++ sizeof(struct rtc_time))) ++ return -EFAULT; ++ ++ yrs = rtc_tm.tm_year + 1900; ++ mon = rtc_tm.tm_mon + 1; /* tm_mon starts at zero */ ++ day = rtc_tm.tm_mday; ++ hrs = rtc_tm.tm_hour; ++ min = rtc_tm.tm_min; ++ sec = rtc_tm.tm_sec; ++ ++ if (yrs < 1970) ++ return -EINVAL; ++ ++ leap_yr = ((!(yrs % 4) && (yrs % 100)) || !(yrs % 400)); ++ ++ if ((mon > 12) || (day == 0)) ++ return -EINVAL; ++ ++ if (day > (days_in_mo[mon] + ((mon == 2) && leap_yr))) ++ return -EINVAL; ++ ++ if ((hrs >= 24) || (min >= 60) || (sec >= 60)) ++ return -EINVAL; ++ ++ if ((yrs -= epoch) > 255) /* They are unsigned */ ++ return -EINVAL; ++ ++ spin_lock_irq(&rtc_lock); ++ ++ /* These limits and adjustments are independent of ++ * whether the chip is in binary mode or not. ++ */ ++ if (yrs > 169) { ++ spin_unlock_irq(&rtc_lock); ++ return -EINVAL; ++ } ++ if (yrs >= 100) ++ yrs -= 100; ++ ++ yrs += epoch; ++ BIN_TO_BCD(sec); ++ BIN_TO_BCD(min); ++ BIN_TO_BCD(hrs); ++ BIN_TO_BCD(day); ++ BIN_TO_BCD(mon); ++ yrs_low = yrs % 100; ++ yrs_high = yrs / 100; ++ BIN_TO_BCD(yrs_low); ++ BIN_TO_BCD(yrs_high); ++ ++ WRITE_YEAR_HIGH(yrs_high); ++ WRITE_YEAR_LOW(yrs_low); ++ WRITE_MONTH(mon); ++ WRITE_DAY(day); ++ WRITE_HOURS(hrs); ++ WRITE_MINUTES(min); ++ WRITE_SECONDS(sec); ++ ++ spin_unlock_irq(&rtc_lock); ++ return 0; ++ } ++#ifdef SH03_RTC_IRQ ++ case RTC_IRQP_READ: /* Read the periodic IRQ rate. */ ++ { ++ return put_user(rtc_freq, (unsigned long __user *)arg); ++ } ++ case RTC_IRQP_SET: /* Set periodic IRQ rate. */ ++ { ++ int tmp = 0; ++ ++ /* ++ * We don't really want Joe User generating more ++ * than 64Hz of interrupts on a multi-user machine. ++ */ ++ if (!kernel && (arg > rtc_max_user_freq) && (!capable(CAP_SYS_RESOURCE))) ++ return -EACCES; ++ ++ switch (arg) { ++ case 1: tmp = 2; break; ++ case 64: tmp = 1; break; ++ case 4096: tmp = 0; break; ++ default: return -EINVAL; ++ } ++ ++ spin_lock_irq(&rtc_lock); ++ rtc_freq = arg; ++ SELECT_BANK(RTC_BANK2); ++ WRITE_CLOCK((READ_CLOCK & ~3) | tmp); ++ SELECT_BANK(RTC_BANK0); ++ spin_unlock_irq(&rtc_lock); ++ return 0; ++ } ++#endif ++ case RTC_EPOCH_READ: /* Read the epoch. */ ++ { ++ return put_user (epoch, (unsigned long __user *)arg); ++ } ++ case RTC_EPOCH_SET: /* Set the epoch. */ ++ { ++ /* ++ * There were no RTC clocks before 1900. ++ */ ++ if (arg < 1900) ++ return -EINVAL; ++ ++ if (!capable(CAP_SYS_TIME)) ++ return -EACCES; ++ ++ epoch = arg; ++ return 0; ++ } ++ default: ++ return -ENOTTY; ++ } ++ return copy_to_user((void __user *)arg, &wtime, sizeof wtime) ? -EFAULT : 0; ++} ++ ++static int sh03_rtc_ioctl(struct inode *inode, struct file *file, unsigned int cmd, ++ unsigned long arg) ++{ ++ return sh03_rtc_do_ioctl(cmd, arg, 0); ++} ++ ++/* ++ * We enforce only one user at a time here with the open/close. ++ * Also clear the previous interrupt data on an open, and clean ++ * up things on a close. ++ */ ++ ++/* We use rtc_lock to protect against concurrent opens. So the BKL is not ++ * needed here. Or anywhere else in this driver. */ ++static int sh03_rtc_open(struct inode *inode, struct file *file) ++{ ++ spin_lock_irq (&rtc_lock); ++ ++ if(rtc_status & RTC_IS_OPEN) ++ goto out_busy; ++ ++ rtc_status |= RTC_IS_OPEN; ++ ++ rtc_irq_data = 0; ++ spin_unlock_irq (&rtc_lock); ++ return 0; ++ ++out_busy: ++ spin_unlock_irq (&rtc_lock); ++ return -EBUSY; ++} ++ ++static int sh03_rtc_fasync (int fd, struct file *filp, int on) ++ ++{ ++ return fasync_helper (fd, filp, on, &sh03_rtc_async_queue); ++} ++ ++static int sh03_rtc_release(struct inode *inode, struct file *file) ++{ ++#ifdef SH03_RTC_IRQ ++ if (sh03_rtc_has_irq == 0) ++ goto no_irq; ++ ++ /* ++ * Turn off all interrupts once the device is no longer ++ * in use, and clear the data. ++ */ ++ ++ spin_lock_irq(&rtc_lock); ++ SELECT_BANK(RTC_BANK1); ++ ctrl_outb(0, RTC_ATCTL); ++ SELECT_BANK(RTC_BANK2); ++ ctrl_outb(0, RTC_TMCTL); ++ SELECT_BANK(RTC_BANK0); ++ ++ if (rtc_status & RTC_TIMER_ON) { ++ rtc_status &= ~RTC_TIMER_ON; ++ del_timer(&sh03_rtc_irq_timer); ++ } ++ spin_unlock_irq(&rtc_lock); ++ ++ if (file->f_flags & FASYNC) { ++ sh03_rtc_fasync (-1, file, 0); ++ } ++no_irq: ++#endif ++ ++ spin_lock_irq (&rtc_lock); ++ rtc_irq_data = 0; ++ rtc_status &= ~RTC_IS_OPEN; ++ spin_unlock_irq (&rtc_lock); ++ return 0; ++} ++ ++#ifdef SH03_RTC_IRQ ++/* Called without the kernel lock - fine */ ++static unsigned int sh03_rtc_poll(struct file *file, poll_table *wait) ++{ ++ unsigned long l; ++ ++ if (sh03_rtc_has_irq == 0) ++ return 0; ++ ++ poll_wait(file, &sh03_rtc_wait, wait); ++ ++ spin_lock_irq (&rtc_lock); ++ l = rtc_irq_data; ++ spin_unlock_irq (&rtc_lock); ++ ++ if (l != 0) ++ return POLLIN | POLLRDNORM; ++ return 0; ++} ++#endif ++ ++int rtc_control(rtc_task_t *task, unsigned int cmd, unsigned long arg) ++{ ++#ifndef SH03_RTC_IRQ ++ return -EIO; ++#else ++ spin_lock_irq(&rtc_task_lock); ++ if (rtc_callback != task) { ++ spin_unlock_irq(&rtc_task_lock); ++ return -ENXIO; ++ } ++ spin_unlock_irq(&rtc_task_lock); ++ return sh03_rtc_do_ioctl(cmd, arg, 1); ++#endif ++} ++ ++ ++/* ++ * The various file operations we support. ++ */ ++ ++static struct file_operations sh03_rtc_fops = { ++ .owner = THIS_MODULE, ++ .llseek = no_llseek, ++ .read = sh03_rtc_read, ++#ifdef SH03_RTC_IRQ ++ .poll = sh03_rtc_poll, ++#endif ++ .ioctl = sh03_rtc_ioctl, ++ .open = sh03_rtc_open, ++ .release = sh03_rtc_release, ++ .fasync = sh03_rtc_fasync, ++}; ++ ++static struct miscdevice sh03_rtc_dev= ++{ ++ RTC_MINOR, ++ "sh03-rtc", ++ &sh03_rtc_fops ++}; ++ ++#ifdef SH03_RTC_IRQ ++static irqreturn_t (*rtc_int_handler_ptr)(int irq, void *dev_id, struct pt_regs *regs); ++#endif ++ ++static int __init sh03_rtc_init(void) ++{ ++ if (!request_region(SH03_RTC_PORT(0), SH03_RTC_IO_EXTENT, "sh03-rtc")) { ++ printk(KERN_ERR "sh03-rtc: I/O port %d is not free.\n", SH03_RTC_PORT (0)); ++ return -EIO; ++ } ++ ++#ifdef SH03_RTC_IRQ ++ rtc_int_handler_ptr = sh03_rtc_interrupt; ++ if(request_irq(SH03_RTC_IRQ, rtc_int_handler_ptr, SA_INTERRUPT, "sh03-rtc", NULL)) { ++ /* Yeah right, seeing as irq 8 doesn't even hit the bus. */ ++ printk(KERN_ERR "sh03-rtc: IRQ %d is not free.\n", RTC_IRQ); ++ release_region(SH03_RTC_PORT(0), SH03_RTC_IO_EXTENT); ++ return -EIO; ++ } ++#endif ++ ++ if (misc_register(&sh03_rtc_dev)) { ++#ifdef SH03_RTC_IRQ ++ free_irq(SH03_RTC_IRQ, NULL); ++#endif ++ release_region(SH03_RTC_PORT(0), SH03_RTC_IO_EXTENT); ++ return -ENODEV; ++ } ++ if (!create_proc_read_entry ("driver/sh03-rtc", 0, NULL, sh03_rtc_read_proc, NULL)) { ++#ifdef SH03_RTC_IRQ ++ free_irq(SH03_RTC_IRQ, NULL); ++#endif ++ release_region(SH03_RTC_PORT(0), SH03_RTC_IO_EXTENT); ++ misc_deregister(&sh03_rtc_dev); ++ return -ENOMEM; ++ } ++ ++#ifdef SH03_RTC_IRQ ++ if (sh03_rtc_has_irq == 0) ++ goto no_irq2; ++ ++ init_timer(&sh03_rtc_irq_timer); ++ sh03_rtc_irq_timer.function = sh03_rtc_dropped_irq; ++ spin_lock_irq(&rtc_lock); ++ SELECT_BANK(RTC_BANK2); ++ WRITE_CLOCK(2); ++ SELECT_BANK(RTC_BANK0); ++ rtc_freq = 1; ++ spin_unlock_irq(&rtc_lock); ++no_irq2: ++#endif ++ ++ (void) init_sysctl(); ++ ++ printk(KERN_INFO "CTP/PCI-SH03 Real Time Clock Driver v" SH03_RTC_VERSION "\n"); ++ ++ return 0; ++} ++ ++static void __exit sh03_rtc_exit (void) ++{ ++ cleanup_sysctl(); ++ remove_proc_entry ("driver/sh03-rtc", NULL); ++ misc_deregister(&sh03_rtc_dev); ++ release_region (SH03_RTC_PORT (0), SH03_RTC_IO_EXTENT); ++#ifdef SH03_RTC_IRQ ++ if (sh03_rtc_has_irq) ++ free_irq (SH03_RTC_IRQ, NULL); ++#endif ++} ++ ++module_init(sh03_rtc_init); ++module_exit(sh03_rtc_exit); ++ ++#ifdef SH03_RTC_IRQ ++/* ++ * At IRQ rates >= 4096Hz, an interrupt may get lost altogether. ++ * (usually during an IDE disk interrupt, with IRQ unmasking off) ++ * Since the interrupt handler doesn't get called, the IRQ status ++ * byte doesn't get read, and the RTC stops generating interrupts. ++ * A timer is set, and will call this function if/when that happens. ++ * To get it out of this stalled state, we just read the status. ++ * At least a jiffy of interrupts (rtc_freq/HZ) will have been lost. ++ * (You *really* shouldn't be trying to use a non-realtime system ++ * for something that requires a steady > 1KHz signal anyways.) ++ */ ++ ++static void sh03_rtc_dropped_irq(unsigned long data) ++{ ++ unsigned long freq; ++ ++ spin_lock_irq (&rtc_lock); ++ ++ /* Just in case someone disabled the timer from behind our back... */ ++ if (rtc_status & RTC_TIMER_ON) ++ mod_timer(&sh03_rtc_irq_timer, jiffies + HZ/rtc_freq + 2*HZ/100); ++ ++ rtc_irq_data += ((rtc_freq/HZ)<<8); ++ rtc_irq_data &= ~0xff; ++ SELECT_BANK(RTC_BANK1); ++ rtc_irq_data |= (READ_ATCTL & RTC_AF) >> 1; ++ SELECT_BANK(RTC_BANK2); ++ rtc_irq_data |= (READ_TMCTL & RTC_TF); ++ SELECT_BANK(RTC_BANK0); ++ ++ freq = rtc_freq; ++ ++ spin_unlock_irq(&rtc_lock); ++ ++ printk(KERN_WARNING "sh03-rtc: lost some interrupts at %ldHz.\n", freq); ++ ++ /* Now we have new data */ ++ wake_up_interruptible(&sh03_rtc_wait); ++ ++ kill_fasync (&sh03_rtc_async_queue, SIGIO, POLL_IN); ++} ++#endif ++ ++/* ++ * Info exported via "/proc/driver/sh03-rtc". ++ */ ++ ++static int sh03_rtc_proc_output (char *buf) ++{ ++#define YN(bit) ((bit) ? "yes" : "no") ++#define NY(bit) ((bit) ? "no" : "yes") ++ char *p; ++ struct rtc_time tm; ++ unsigned char aie, tie, af, tf; ++ unsigned long freq; ++ int sec_ae, min_ae, hour_ae, week_ae, day_ae; ++ ++ spin_lock_irq(&rtc_lock); ++ SELECT_BANK(RTC_BANK1); ++ aie = READ_ATCTL & RTC_AIE; ++ af = READ_ATCTL & 2; ++ sec_ae = ctrl_inb(RTC_SEC10) & 8; ++ min_ae = ctrl_inb(RTC_MIN10) & 8; ++ hour_ae = ctrl_inb(RTC_HOU10) & 8; ++ week_ae = ctrl_inb(RTC_WEE1 ) & 8; ++ day_ae = ctrl_inb(RTC_DAY10) & 8; ++ SELECT_BANK(RTC_BANK2); ++ tie = READ_TMCTL & RTC_TIE; ++ tf = READ_TMCTL & 2; ++ SELECT_BANK(RTC_BANK0); ++ freq = rtc_freq; ++ spin_unlock_irq(&rtc_lock); ++ ++ p = buf; ++ ++ sh03_rtc_get_rtc_time(&tm); ++ ++ /* ++ * There is no way to tell if the luser has the RTC set for local ++ * time or for Universal Standard Time (GMT). Probably local though. ++ */ ++ p += sprintf(p, ++ "rtc_time\t: %02d:%02d:%02d\n" ++ "rtc_date\t: %04d-%02d-%02d\n" ++ "rtc_epoch\t: %04lu\n", ++ tm.tm_hour, tm.tm_min, tm.tm_sec, ++ tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, epoch); ++ ++ sh03_get_rtc_alm_time(&tm); ++ ++ /* ++ * We implicitly assume 24hr mode here. Alarm values >= 0xc0 will ++ * match any value for that particular field. Values that are ++ * greater than a valid time, but less than 0xc0 shouldn't appear. ++ */ ++ p += sprintf(p, "alarm\t\t: "); ++ if (!day_ae) ++ p += sprintf(p, "%02d ", tm.tm_mday); ++ else ++ p += sprintf(p, "** "); ++ if (!week_ae) ++ p += sprintf(p, "%01d ", tm.tm_wday); ++ else ++ p += sprintf(p, "* "); ++ if (!hour_ae) ++ p += sprintf(p, "%02d:", tm.tm_hour); ++ else ++ p += sprintf(p, "**:"); ++ ++ if (!min_ae) ++ p += sprintf(p, "%02d:", tm.tm_min); ++ else ++ p += sprintf(p, "**:"); ++ ++ if (!sec_ae) ++ p += sprintf(p, "%02d\n", tm.tm_sec); ++ else ++ p += sprintf(p, "**\n"); ++ ++ p += sprintf(p, ++ "alarm_IRQ\t: %s-%s\n" ++ "periodic_IRQ\t: %s-%s\n" ++ "periodic_freq\t: %ld\n" ++ "FOS\t\t: %s\n" ++ "Control Reg\t: %x\n", ++ YN(aie),YN(af), ++ YN(tie),YN(tf), ++ freq, ++ ctrl_inb(RTC_SEC10) & 8 ? "on" : "off", ++ ctrl_inb(RTC_CTL) & 15); ++ ++ return p - buf; ++#undef YN ++#undef NY ++} ++ ++static int sh03_rtc_read_proc(char *page, char **start, off_t off, ++ int count, int *eof, void *data) ++{ ++ int len = sh03_rtc_proc_output (page); ++ if (len <= off+count) *eof = 1; ++ *start = page + off; ++ len -= off; ++ if (len>count) len = count; ++ if (len<0) len = 0; ++ return len; ++} ++ ++void sh03_rtc_get_rtc_time(struct rtc_time *rtc_tm) ++{ ++// @@@@@ 16.09.29 TODO unsigned long uip_watchdog = jiffies; ++ ++ /* ++ * read RTC once any update in progress is done. The update ++ * can take just over 2ms. We wait 10 to 20ms. There is no need to ++ * to poll-wait (up to 1s - eeccch) for the falling edge of RTC_UIP. ++ * If you need to know *exactly* when a second has started, enable ++ * periodic update complete interrupts, (via ioctl) and then ++ * immediately read /dev/rtc which will block until you get the IRQ. ++ * Once the read clears, read the RTC time (again via ioctl). Easy. ++ */ ++ ++#if 0 /* @@@@@ 16.09.29 TODO */ ++ if (rtc_is_updating() != 0) ++ while (jiffies - uip_watchdog < 2*HZ/100) { ++ barrier(); ++ cpu_relax(); ++ } ++#endif ++ /* ++ * Only the values that we read from the RTC are set. We leave ++ * tm_wday, tm_yday and tm_isdst untouched. Even though the ++ * RTC has RTC_DAY_OF_WEEK, we ignore it, as it is only updated ++ * by the RTC when initially set to a non-zero value. ++ */ ++ spin_lock_irq(&rtc_lock); ++ rtc_tm->tm_sec = READ_SECONDS; ++ rtc_tm->tm_min = READ_MINUTES; ++ rtc_tm->tm_hour = READ_HOURS; ++ rtc_tm->tm_wday = READ_WEEK; ++ rtc_tm->tm_mday = READ_DAY; ++ rtc_tm->tm_mon = READ_MONTH; ++ rtc_tm->tm_year = READ_YEAR - epoch; ++ spin_unlock_irq(&rtc_lock); ++ ++ /* ++ * Account for differences between how the RTC uses the values ++ * and how they are defined in a struct rtc_time; ++ */ ++ if ((rtc_tm->tm_year += (epoch - 1900)) <= 69) ++ rtc_tm->tm_year += 100; ++ ++ rtc_tm->tm_mon--; ++} ++ ++static void sh03_get_rtc_alm_time(struct rtc_time *alm_tm) ++{ ++ /* ++ * Only the values that we read from the RTC are set. That ++ * means only tm_hour, tm_min, and tm_sec. ++ */ ++ spin_lock_irq(&rtc_lock); ++ SELECT_BANK(RTC_BANK1); ++ alm_tm->tm_sec = READ_SECONDS; ++ alm_tm->tm_min = READ_MINUTES; ++ alm_tm->tm_hour = READ_HOURS; ++ alm_tm->tm_wday = READ_WEEK; ++ alm_tm->tm_mday = READ_DAY; ++ SELECT_BANK(RTC_BANK0); ++ spin_unlock_irq(&rtc_lock); ++} ++ ++#ifdef SH03_RTC_IRQ ++/* ++ * Used to disable/enable interrupts for any one of UIE, AIE, PIE. ++ * Rumour has it that if you frob the interrupt enable/disable ++ * bits in RTC_CONTROL, you should read RTC_INTR_FLAGS, to ++ * ensure you actually start getting interrupts. Probably for ++ * compatibility with older/broken chipset RTC implementations. ++ * We also clear out any old irq data after an ioctl() that ++ * meddles with the interrupt enable/disable bits. ++ */ ++ ++static void sh03_mask_rtc_irq_bit(unsigned int bit) ++{ ++ unsigned char val; ++ ++ spin_lock_irq(&rtc_lock); ++ switch(bit) { ++ case RTC_AIE_OFF: ++ SELECT_BANK(RTC_BANK1); ++ val = READ_ATCTL; ++ val &= ~RTC_AIE; ++ WRITE_ATCTL(val); ++ SELECT_BANK(RTC_BANK0); ++ break; ++ case RTC_PIE_OFF: ++ SELECT_BANK(RTC_BANK2); ++ val = READ_TMCTL; ++ val &= ~RTC_TIE; ++ WRITE_TMCTL(val); ++ SELECT_BANK(RTC_BANK0); ++ break; ++ } ++ ++ rtc_irq_data = 0; ++ spin_unlock_irq(&rtc_lock); ++} ++ ++static void sh03_set_rtc_irq_bit(unsigned int bit) ++{ ++ unsigned char val; ++ ++ spin_lock_irq(&rtc_lock); ++ switch(bit) { ++ case RTC_AIE_ON: ++ SELECT_BANK(RTC_BANK1); ++ val = READ_ATCTL; ++ val |= RTC_AIE; ++ WRITE_ATCTL(val); ++ SELECT_BANK(RTC_BANK0); ++ break; ++ case RTC_PIE_ON: ++ SELECT_BANK(RTC_BANK2); ++ val = READ_TMCTL; ++ val |= RTC_TIE; ++ WRITE_TMCTL(val); ++ SELECT_BANK(RTC_BANK0); ++ break; ++ } ++ ++ rtc_irq_data = 0; ++ spin_unlock_irq(&rtc_lock); ++} ++#endif ++ ++MODULE_AUTHOR("Saito.K Interface Corporation"); ++MODULE_LICENSE("GPL"); ++MODULE_ALIAS_MISCDEV(RTC_MINOR); ++ +diff -ruN linux-2.6.17-vanilla/drivers/char/sysrq.c linux-2.6.17/drivers/char/sysrq.c +--- linux-2.6.17-vanilla/drivers/char/sysrq.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/char/sysrq.c 2006-07-12 16:54:23.000000000 +0000 +@@ -38,6 +38,18 @@ + #include <linux/kexec.h> + + #include <asm/ptrace.h> ++#ifdef CONFIG_KGDB_SYSRQ ++#include <asm/kgdb.h> ++#define GDB_OP &kgdb_op ++static struct sysrq_key_op kgdb_op={ ++ .handler = (void *)breakpoint, ++ .help_msg = "kGdb ", ++ .action_msg = "Debug breakpoint\n", ++}; ++ ++#else ++#define GDB_OP NULL ++#endif + + /* Whether we react on sysrq keys or just ignore them */ + int sysrq_enabled = 1; +@@ -296,7 +308,7 @@ + &sysrq_showlocks_op, /* d */ + &sysrq_term_op, /* e */ + &sysrq_moom_op, /* f */ +- NULL, /* g */ ++ GDB_OP, /* g */ + NULL, /* h */ + &sysrq_kill_op, /* i */ + NULL, /* j */ +diff -ruN linux-2.6.17-vanilla/drivers/char/watchdog/CVS/Entries linux-2.6.17/drivers/char/watchdog/CVS/Entries +--- linux-2.6.17-vanilla/drivers/char/watchdog/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/char/watchdog/CVS/Entries 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,2 @@ ++/shwdt.c/1.12/Mon Aug 29 21:01:18 2005/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/char/watchdog/CVS/Repository linux-2.6.17/drivers/char/watchdog/CVS/Repository +--- linux-2.6.17-vanilla/drivers/char/watchdog/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/char/watchdog/CVS/Repository 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/char/watchdog +diff -ruN linux-2.6.17-vanilla/drivers/char/watchdog/CVS/Root linux-2.6.17/drivers/char/watchdog/CVS/Root +--- linux-2.6.17-vanilla/drivers/char/watchdog/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/char/watchdog/CVS/Root 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/i2c/CVS/Entries linux-2.6.17/drivers/i2c/CVS/Entries +--- linux-2.6.17-vanilla/drivers/i2c/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/CVS/Entries 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,2 @@ ++D/algos//// ++D/busses//// +diff -ruN linux-2.6.17-vanilla/drivers/i2c/CVS/Repository linux-2.6.17/drivers/i2c/CVS/Repository +--- linux-2.6.17-vanilla/drivers/i2c/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/CVS/Repository 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/i2c +diff -ruN linux-2.6.17-vanilla/drivers/i2c/CVS/Root linux-2.6.17/drivers/i2c/CVS/Root +--- linux-2.6.17-vanilla/drivers/i2c/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/CVS/Root 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/CVS/Entries linux-2.6.17/drivers/i2c/algos/CVS/Entries +--- linux-2.6.17-vanilla/drivers/i2c/algos/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/algos/CVS/Entries 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,5 @@ ++/Kconfig/1.3/Wed Mar 2 13:02:57 2005/-ko/ ++/Makefile/1.3/Wed Mar 2 13:02:57 2005/-ko/ ++/i2c-algo-voyager.c/1.1/Wed Apr 21 00:09:16 2004/-ko/ ++/i2c-algo-voyager.h/1.2/Wed Feb 8 22:08:10 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/CVS/Repository linux-2.6.17/drivers/i2c/algos/CVS/Repository +--- linux-2.6.17-vanilla/drivers/i2c/algos/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/algos/CVS/Repository 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/i2c/algos +diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/CVS/Root linux-2.6.17/drivers/i2c/algos/CVS/Root +--- linux-2.6.17-vanilla/drivers/i2c/algos/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/algos/CVS/Root 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/Kconfig linux-2.6.17/drivers/i2c/algos/Kconfig +--- linux-2.6.17-vanilla/drivers/i2c/algos/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/algos/Kconfig 2006-07-12 16:54:23.000000000 +0000 +@@ -53,6 +53,10 @@ + tristate "MPC8xx CPM I2C interface" + depends on 8xx && I2C + ++config I2C_ALGOVOYAGER ++ tristate "Silicon Motion Voyager GX Algorithm" ++ depends on SH_RTS7751R2D && I2C ++ + config I2C_ALGO_SIBYTE + tristate "SiByte SMBus interface" + depends on SIBYTE_SB1xxx_SOC && I2C +diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/Makefile linux-2.6.17/drivers/i2c/algos/Makefile +--- linux-2.6.17-vanilla/drivers/i2c/algos/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/algos/Makefile 2006-07-12 16:54:23.000000000 +0000 +@@ -6,6 +6,7 @@ + obj-$(CONFIG_I2C_ALGOPCF) += i2c-algo-pcf.o + obj-$(CONFIG_I2C_ALGOPCA) += i2c-algo-pca.o + obj-$(CONFIG_I2C_ALGOITE) += i2c-algo-ite.o ++obj-$(CONFIG_I2C_ALGOVOYAGER) += i2c-algo-voyager.o + obj-$(CONFIG_I2C_ALGO_SIBYTE) += i2c-algo-sibyte.o + obj-$(CONFIG_I2C_ALGO_SGI) += i2c-algo-sgi.o + +diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/i2c-algo-voyager.c linux-2.6.17/drivers/i2c/algos/i2c-algo-voyager.c +--- linux-2.6.17-vanilla/drivers/i2c/algos/i2c-algo-voyager.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/algos/i2c-algo-voyager.c 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,415 @@ ++/* -------------------------------------------------------------------- */ ++/* i2c-algo-voyagergx.c: */ ++/* -------------------------------------------------------------------- */ ++/* ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ Copyright 2003 (c) Lineo uSolutions,Inc. ++ Copyright 2004 (c) Paul Mundt ++*/ ++/* -------------------------------------------------------------------- */ ++ ++ ++#include <linux/kernel.h> ++#include <linux/module.h> ++#include <linux/delay.h> ++#include <linux/slab.h> ++#include <linux/version.h> ++#include <linux/init.h> ++#include <asm/uaccess.h> ++#include <linux/ioport.h> ++#include <linux/errno.h> ++#include <linux/sched.h> ++ ++#include <linux/i2c.h> ++#include "i2c-algo-voyager.h" ++ ++/* ----- global defines ----------------------------------------------- */ ++#define DEB(x) if (i2c_debug>=1) x ++#define DEB2(x) if (i2c_debug>=2) x ++#define DEB3(x) if (i2c_debug>=3) x /* print several statistical values*/ ++#define DEBPROTO(x) if (i2c_debug>=9) x; ++ /* debug the protocol by showing transferred bits */ ++#define DEF_TIMEOUT 16 ++ ++/* debugging - slow down transfer to have a look at the data .. */ ++/* I use this with two leds&resistors, each one connected to sda,scl */ ++/* respectively. This makes sure that the algorithm works. Some chips */ ++/* might not like this, as they have an internal timeout of some mils */ ++ ++ ++/* ----- global variables --------------------------------------------- */ ++ ++/* module parameters: ++ */ ++static int i2c_debug=0; ++ ++/* --- setting states on the bus with the right timing: --------------- */ ++ ++#define iic_outb(adap, reg, val) adap->setiic(adap->data, reg, val) ++#define iic_inb(adap, reg) adap->getiic(adap->data, reg) ++ ++/* --- other auxiliary functions -------------------------------------- */ ++ ++static void iic_start(struct i2c_algo_iic_data *adap) ++{ ++ unsigned char ctl; ++ ctl = iic_inb(adap, I2C_CONTROL); ++ ctl = (ctl | I2C_CONTROL_STATUS); ++ DEB(printk("iic_start I2C_CONTROL = 0x%x\n", ctl)); ++ iic_outb(adap,I2C_CONTROL,ctl); ++} ++ ++static void iic_stop(struct i2c_algo_iic_data *adap) ++{ ++ unsigned char ctl; ++ ctl = iic_inb(adap, I2C_CONTROL); ++ ctl = (ctl & ~I2C_CONTROL_STATUS); ++ DEB(printk("iic_stop I2C_CONTROL = 0x%x\n", ctl)); ++ iic_outb(adap,I2C_CONTROL,ctl); ++} ++ ++static void iic_reset(struct i2c_algo_iic_data *adap) ++{ ++ unsigned char ctl; ++ ctl = iic_inb(adap, I2C_RESET); ++ ctl = (ctl & ~I2C_RESET_ERROR); ++ DEB(printk("iic_reset I2C_CONTROL = 0x%x\n", ctl)); ++ iic_outb(adap,I2C_RESET,ctl); ++} ++ ++ ++static int wait_for_bb(struct i2c_algo_iic_data *adap) ++{ ++ int timeout = DEF_TIMEOUT; ++ char status; ++ ++ status = iic_inb(adap, I2C_STATUS); ++#ifndef STUB_I2C ++ while (timeout-- && (status & I2C_STATUS_BUSY)) { ++ udelay(1000); /* How much is this? */ ++ status = iic_inb(adap, I2C_STATUS); ++ } ++#endif ++ if (timeout<=0) { ++ printk(KERN_ERR "Timeout, host is busy (%d)\n",timeout); ++ iic_reset(adap); ++ } ++ return(timeout<=0); ++} ++ ++/* ++ * Puts this process to sleep for a period equal to timeout ++ */ ++static inline void iic_sleep(unsigned long timeout) ++{ ++ schedule_timeout( timeout * HZ); ++} ++ ++static int wait_for_pin(struct i2c_algo_iic_data *adap, char *status) ++{ ++ int timeout = DEF_TIMEOUT; ++ ++ timeout = wait_for_bb(adap); ++ if (timeout) { ++ DEB2(printk("Timeout waiting for host not busy\n");) ++ return -EIO; ++ } ++ ++ timeout = DEF_TIMEOUT; ++ ++ *status = iic_inb(adap, I2C_STATUS); ++ while (timeout-- && !(*status & I2C_STATUS_ACK)) { ++ adap->waitforpin(); ++ *status = iic_inb(adap, I2C_STATUS); ++ } ++ if (timeout <= 0) ++ return(-1); ++ else ++ return(0); ++} ++ ++/* Verify the device we want to talk to on the IIC bus really exists. */ ++static inline int try_address(struct i2c_algo_iic_data *adap, ++ unsigned int addr, int retries) ++{ ++ int i, ret = -1; ++ unsigned char status; ++ ++ for (i=0;i<retries;i++) { ++ iic_outb(adap, I2C_SADDRESS, addr); ++ iic_start(adap); ++ if (wait_for_pin(adap, &status) == 0) { ++ ret=1; ++ break; /* success! */ ++ } ++ iic_stop(adap); ++ udelay(adap->udelay); ++ } ++ DEB2(if (i) printk("try_address: needed %d retries for 0x%x\n",i, ++ addr)); ++ return ret; ++} ++ ++int iic_sendbytes(struct i2c_adapter *i2c_adap,const char *buf, ++ int count) ++{ ++ struct i2c_algo_iic_data *adap = i2c_adap->algo_data; ++ int wrcount,timeout,i; ++ unsigned char *addr,status; ++ ++ if (count != PACKET_SIZE) ++ return -EPROTO; ++ ++ iic_outb(adap,I2C_BYTECOUNT,(unsigned char)(count - 1)); ++ iic_outb(adap,I2C_SADDRESS,(unsigned char)SERIAL_WRITE_ADDR); ++ ++ timeout = wait_for_bb(adap); ++ if (timeout) ++ return -ETIMEDOUT; ++ ++ wrcount = 0; ++ addr = (unsigned char *)I2C_DATA; ++ ++ for (i = 0;i < count;i++){ ++ iic_outb(adap,(int)addr++,buf[wrcount++]); ++ } ++ ++ iic_start(adap); ++ ++ /* Wait for transmission to complete */ ++ timeout = wait_for_pin(adap,&status); ++ if (timeout){ ++ iic_stop(adap); ++ printk("iic_sendbytes: %s write timeout.\n", i2c_adap->name); ++ return -EREMOTEIO; /* got a better one ?? */ ++ } ++ ++ iic_stop(adap); ++ ++ return wrcount; ++} ++ ++static int iic_readbytes(struct i2c_adapter *i2c_adap, char *buf, int count, ++ int sread) ++{ ++ struct i2c_algo_iic_data *adap = i2c_adap->algo_data; ++ int rdcount,timeout,i; ++ unsigned char *addr,wk,status; ++ ++ iic_outb(adap,I2C_BYTECOUNT,(unsigned char)(PACKET_SIZE - 1)); ++ iic_outb(adap,I2C_SADDRESS,(unsigned char)SERIAL_READ_ADDR); ++ ++ rdcount = 0; ++ addr = (unsigned char *)I2C_DATA; ++ ++ iic_start(adap); ++ ++ timeout = wait_for_pin(adap,&status); ++ if (timeout){ ++ iic_stop(adap); ++ printk("iic_readbytes: %s read timeout.\n", i2c_adap->name); ++ return -EREMOTEIO; /* got a better one ?? */ ++ } ++ ++ for (i = 0;i < PACKET_SIZE;i++){ ++ wk = iic_inb(adap,(int)addr++); ++ buf[rdcount++] = wk; ++ } ++ ++ iic_stop(adap); ++ ++ return rdcount; ++} ++ ++/* Whenever we initiate a transaction, the first byte clocked ++ * onto the bus after the start condition is the address (7 bit) of the ++ * device we want to talk to. This function manipulates the address specified ++ * so that it makes sense to the hardware when written to the IIC peripheral. ++ * ++ * Note: 10 bit addresses are not supported in this driver, although they are ++ * supported by the hardware. This functionality needs to be implemented. ++ */ ++static inline int iic_doAddress(struct i2c_algo_iic_data *adap, ++ struct i2c_msg *msg, int retries) ++{ ++ unsigned int addr; ++ int ret; ++ ++ addr = ( msg->addr << 1 ); ++ ++ if (iic_inb(adap, I2C_SADDRESS) != addr) { ++ iic_outb(adap, I2C_SADDRESS, addr); ++ ret = try_address(adap, addr, retries); ++ if (ret!=1) { ++ printk("iic_doAddress: died at address code.\n"); ++ return -EREMOTEIO; ++ } ++ } ++ ++ return 0; ++} ++ ++ ++/* Description: Prepares the controller for a transaction (clearing status ++ * registers, data buffers, etc), and then calls either iic_readbytes or ++ * iic_sendbytes to do the actual transaction. ++ * ++ * still to be done: Before we issue a transaction, we should ++ * verify that the bus is not busy or in some unknown state. ++ */ ++static int iic_xfer(struct i2c_adapter *i2c_adap, ++ struct i2c_msg msgs[], ++ int num) ++{ ++ struct i2c_algo_iic_data *adap = i2c_adap->algo_data; ++ struct i2c_msg *pmsg; ++ int i = 0; ++ int ret, timeout; ++ ++ pmsg = &msgs[i]; ++ ++ if(!pmsg->len) { ++ DEB2(printk("iic_xfer: read/write length is 0\n");) ++ return -EIO; ++ } ++ ++ /* Wait for any pending transfers to complete */ ++ timeout = wait_for_bb(adap); ++ if (timeout) { ++ DEB2(printk("iic_xfer: Timeout waiting for host not busy\n");) ++ return -EIO; ++ } ++ ++ /* Load address */ ++ ret = iic_doAddress(adap, pmsg, i2c_adap->retries); ++ if (ret) ++ return -EIO; ++ ++ DEB3(printk("iic_xfer: Msg %d, addr=0x%x, flags=0x%x, len=%d\n", ++ i, msgs[i].addr, msgs[i].flags, msgs[i].len);) ++ ++ if (pmsg->flags & I2C_M_RD) { /* Read */ ++ ret = iic_readbytes(i2c_adap, pmsg->buf, pmsg->len, 0); ++ } else { /* Write */ ++ udelay(1000); ++ ret = iic_sendbytes(i2c_adap, pmsg->buf, pmsg->len); ++ } ++ ++ if (ret != pmsg->len) { ++ DEB3(printk("iic_xfer: error or fail on read/write %d bytes.\n",ret)); ++ } else { ++ DEB3(printk("iic_xfer: read/write %d bytes.\n",ret)); ++ } ++ ++ return ret; ++} ++ ++ ++/* Implements device specific ioctls. Higher level ioctls can ++ * be found in i2c-core.c and are typical of any i2c controller (specifying ++ * slave address, timeouts, etc). These ioctls take advantage of any hardware ++ * features built into the controller for which this algorithm-adapter set ++ * was written. These ioctls allow you to take control of the data and clock ++ * lines and set the either high or low, ++ * similar to a GPIO pin. ++ */ ++static int algo_control(struct i2c_adapter *adapter, ++ unsigned int cmd, unsigned long arg) ++{ ++ struct i2c_iic_msg s_msg; ++ char *buf; ++ int ret; ++ ++ if (cmd == I2C_SREAD) { ++ if(copy_from_user(&s_msg, (struct i2c_iic_msg *)arg, ++ sizeof(struct i2c_iic_msg))) ++ return -EFAULT; ++ buf = kmalloc(s_msg.len, GFP_KERNEL); ++ if (buf== NULL) ++ return -ENOMEM; ++ ++ ret = iic_readbytes(adapter, buf, s_msg.len, 1); ++ if (ret>=0) { ++ if(copy_to_user( s_msg.buf, buf, s_msg.len) ) ++ ret = -EFAULT; ++ } ++ kfree(buf); ++ } ++ return 0; ++} ++ ++ ++static u32 iic_func(struct i2c_adapter *adap) ++{ ++ return I2C_FUNC_SMBUS_EMUL | I2C_FUNC_10BIT_ADDR | ++ I2C_FUNC_PROTOCOL_MANGLING; ++} ++ ++/* -----exported algorithm data: ------------------------------------- */ ++ ++static struct i2c_algorithm iic_algo = { ++ .name = "VoyagerGX I2C algorithm", ++ .id = I2C_ALGO_VOYAGER, ++ .master_xfer = iic_xfer, ++ .algo_control = algo_control, ++ .functionality = iic_func, ++}; ++ ++ ++/* ++ * registering functions to load algorithms at runtime ++ */ ++int i2c_voyager_add_bus(struct i2c_adapter *adap) ++{ ++ DEB2(printk("i2c-algo-voyagergx: hw routines for %s registered.\n", ++ adap->name)); ++ ++ adap->id |= iic_algo.id; ++ adap->algo = &iic_algo; ++ ++ adap->timeout = 100; /* default values, should */ ++ adap->retries = 3; /* be replaced by defines */ ++ adap->flags = 0; ++ ++ return i2c_add_adapter(adap); ++} ++ ++ ++int i2c_voyager_del_bus(struct i2c_adapter *adap) ++{ ++ return i2c_del_adapter(adap); ++} ++ ++int __init i2c_algo_iic_init (void) ++{ ++ printk(KERN_INFO "VoyagerGX iic (i2c) algorithm module\n"); ++ return 0; ++} ++ ++void i2c_algo_iic_exit(void) ++{ ++} ++ ++MODULE_AUTHOR("Lineo uSolutions,Inc. <www.lineo.co.jp>"); ++MODULE_DESCRIPTION("VoyagerGX I2C algorithm"); ++MODULE_LICENSE("GPL"); ++ ++MODULE_PARM(i2c_debug,"i"); ++MODULE_PARM_DESC(i2c_debug, ++ "debug level - 0 off; 1 normal; 2,3 more verbose; 9 iic-protocol"); ++ ++module_init(i2c_algo_iic_init); ++module_exit(i2c_algo_iic_exit); +diff -ruN linux-2.6.17-vanilla/drivers/i2c/algos/i2c-algo-voyager.h linux-2.6.17/drivers/i2c/algos/i2c-algo-voyager.h +--- linux-2.6.17-vanilla/drivers/i2c/algos/i2c-algo-voyager.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/algos/i2c-algo-voyager.h 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,99 @@ ++/* ------------------------------------------------------------------------- */ ++/* i2c-algo-ite.h i2c driver algorithms for ITE IIC adapters */ ++/* ------------------------------------------------------------------------- */ ++/* Copyright (C) 1995-97 Simon G. Vogl ++ 1998-99 Hans Berglund ++ ++ This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ ++/* ------------------------------------------------------------------------- */ ++ ++/* With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even ++ Frodo Looijaard <frodol@dds.nl> */ ++ ++/* Modifications by MontaVista Software, 2001 ++ Changes made to support the ITE IIC peripheral */ ++ ++ ++#ifndef I2C_ALGO_ITE_H ++#define I2C_ALGO_ITE_H 1 ++ ++#include <linux/i2c.h> ++#include <asm/mach/voyagergx_reg.h> ++ ++/* Example of a sequential read request: ++ struct i2c_iic_msg s_msg; ++ ++ s_msg.addr=device_address; ++ s_msg.len=length; ++ s_msg.buf=buffer; ++ s_msg.waddr=word_address; ++ ioctl(file,I2C_SREAD, &s_msg); ++ */ ++#define I2C_SREAD 0x780 /* SREAD ioctl command */ ++ ++struct i2c_iic_msg { ++ __u16 addr; /* device address */ ++ __u16 waddr; /* word address */ ++ short len; /* msg length */ ++ char *buf; /* pointer to msg data */ ++}; ++ ++struct i2c_algo_iic_data { ++ void *data; /* private data for lolevel routines */ ++ void (*setiic) (void *data, int ctl, int val); ++ int (*getiic) (void *data, int ctl); ++ int (*getown) (void *data); ++ int (*getclock) (void *data); ++ void (*waitforpin) (void); ++ ++ /* local settings */ ++ int udelay; ++ int mdelay; ++ int timeout; ++}; ++ ++int i2c_voyager_add_bus(struct i2c_adapter *); ++int i2c_voyager_del_bus(struct i2c_adapter *); ++ ++//#define TC56XX ++#define OV7640 ++//#define OV7141 ++ ++#if defined(TC56XX) ++#define PACKET_SIZE 4 ++#define SERIAL_WRITE_ADDR ((0x56 << 1) + 0) //0xAC ++#define SERIAL_READ_ADDR ((0x56 << 1) + 1) //0xAD ++//#define SERIAL_WRITE_ADDR ((0x57 << 1) + 0) //0xAE ++//#define SERIAL_READ_ADDR ((0x57 << 1) + 0) //0xAF ++ ++#elif defined(OV7640) ++#define PACKET_SIZE 2 ++//#define SERIAL_WRITE_ADDR ((0x42 << 1) + 0) ++//#define SERIAL_READ_ADDR ((0x42 << 1) + 1) ++#define SERIAL_WRITE_ADDR (0x42) ++#define SERIAL_READ_ADDR (0x43) ++ ++#elif defined(OV7141) ++#define PACKET_SIZE 2 ++#define SERIAL_WRITE_ADDR ((0x42 << 1) + 0) ++#define SERIAL_READ_ADDR ((0x42 << 1) + 1) ++//#define SERIAL_WRITE_ADDR ((0x43 << 1) + 0) ++//#define SERIAL_READ_ADDR ((0x43 << 1) + 1) ++ ++#else ++#define PACKET_SIZE 16 ++#endif ++ ++#endif /* I2C_ALGO_ITE_H */ +diff -ruN linux-2.6.17-vanilla/drivers/i2c/busses/CVS/Entries linux-2.6.17/drivers/i2c/busses/CVS/Entries +--- linux-2.6.17-vanilla/drivers/i2c/busses/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/busses/CVS/Entries 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,4 @@ ++/Makefile/1.9/Mon Mar 27 21:06:14 2006/-ko/ ++/i2c-voyager.c/1.1/Wed Apr 21 00:09:16 2004/-ko/ ++/Kconfig/1.12/Wed Jul 5 14:51:03 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/i2c/busses/CVS/Repository linux-2.6.17/drivers/i2c/busses/CVS/Repository +--- linux-2.6.17-vanilla/drivers/i2c/busses/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/busses/CVS/Repository 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/i2c/busses +diff -ruN linux-2.6.17-vanilla/drivers/i2c/busses/CVS/Root linux-2.6.17/drivers/i2c/busses/CVS/Root +--- linux-2.6.17-vanilla/drivers/i2c/busses/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/busses/CVS/Root 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/i2c/busses/Kconfig linux-2.6.17/drivers/i2c/busses/Kconfig +--- linux-2.6.17-vanilla/drivers/i2c/busses/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/busses/Kconfig 2006-07-12 16:54:23.000000000 +0000 +@@ -496,6 +496,16 @@ + This driver can also be built as a module. If so, the module + will be called i2c-voodoo3. + ++config I2C_VOYAGER ++ tristate "Silicon Motion Voyager GX" ++ depends on I2C && SH_RTS7751R2D ++ help ++ If you say yes to this option, support will be included for the ++ Silicon Motion SM501 of mainboard I2C interfaces. ++ ++ This driver can also be built as a module. If so, the module ++ will be called i2c-voyager. ++ + config I2C_PCA_ISA + tristate "PCA9564 on an ISA bus" + depends on I2C +diff -ruN linux-2.6.17-vanilla/drivers/i2c/busses/Makefile linux-2.6.17/drivers/i2c/busses/Makefile +--- linux-2.6.17-vanilla/drivers/i2c/busses/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/busses/Makefile 2006-07-12 16:54:23.000000000 +0000 +@@ -40,6 +40,7 @@ + obj-$(CONFIG_I2C_VIA) += i2c-via.o + obj-$(CONFIG_I2C_VIAPRO) += i2c-viapro.o + obj-$(CONFIG_I2C_VOODOO3) += i2c-voodoo3.o ++obj-$(CONFIG_I2C_VOYAGER) += i2c-voyager.o + obj-$(CONFIG_SCx200_ACB) += scx200_acb.o + obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o + +diff -ruN linux-2.6.17-vanilla/drivers/i2c/busses/i2c-voyager.c linux-2.6.17/drivers/i2c/busses/i2c-voyager.c +--- linux-2.6.17-vanilla/drivers/i2c/busses/i2c-voyager.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/i2c/busses/i2c-voyager.c 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1,216 @@ ++/* -------------------------------------------------------------------- */ ++/* i2c-voyagergx.c: */ ++/* -------------------------------------------------------------------- */ ++/* This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ Copyright 2003 (c) Lineo uSolutions,Inc. ++ Copyright 2004 (c) Paul Mundt ++*/ ++/* -------------------------------------------------------------------- */ ++ ++#include <linux/kernel.h> ++#include <linux/ioport.h> ++#include <linux/module.h> ++#include <linux/delay.h> ++#include <linux/slab.h> ++#include <linux/version.h> ++#include <linux/init.h> ++#include <linux/interrupt.h> ++#include <asm/irq.h> ++#include <asm/io.h> ++ ++#include <linux/i2c.h> ++#include "../algos/i2c-algo-voyager.h" ++ ++//#define I2C_USE_INTR ++ ++#if defined(I2C_USE_INTR) ++#define DEFAULT_IRQ 10 ++#else ++#define DEFAULT_IRQ 0 ++#endif ++ ++struct iic_voyagergx { ++ unsigned long iic_base; ++ int iic_irq; ++}; ++static struct iic_voyagergx gpi; ++ ++static wait_queue_head_t iic_wait; ++static int iic_pending; ++ ++static void iic_voyagergx_setiic(void *data, int ctl, int val) ++{ ++ outw(val,ctl); ++} ++ ++static int iic_voyagergx_getiic(void *data, int ctl) ++{ ++ return inw(ctl); ++} ++ ++/* Put this process to sleep. We will wake up when the ++ * IIC controller interrupts. ++ */ ++static void iic_voyagergx_waitforpin(void) ++{ ++ int timeout = 2; ++ ++ /* If interrupts are enabled (which they are), then put the process to ++ * sleep. This process will be awakened by two events -- either the ++ * the IIC peripheral interrupts or the timeout expires. ++ * If interrupts are not enabled then delay for a reasonable amount ++ * of time and return. ++ */ ++ if (gpi.iic_irq > 0) { ++ local_irq_disable(); ++ ++ if (iic_pending == 0) { ++ interruptible_sleep_on_timeout(&iic_wait, timeout*HZ); ++ } else { ++ iic_pending = 0; ++ } ++ ++ local_irq_enable(); ++ } else { ++ udelay(100); ++ } ++} ++ ++#if defined(I2C_USE_INTR) ++static irqreturn_t iic_voyagergx_handler(int this_irq, void *dev_id, ++ struct pt_regs *regs) ++{ ++ iic_pending = 1; ++ ++ pr_debug("iic_voyagergx_handler: in interrupt handler\n"); ++ wake_up_interruptible(&iic_wait); ++ ++ return IRQ_HANDLED; ++} ++#endif ++ ++/* Lock the region of memory where I/O registers exist. Request our ++ * interrupt line and register its associated handler. ++ */ ++static int iic_hw_resrc_init(void) ++{ ++ unsigned char ctl; ++ unsigned long val; ++ ++ // Power Mode Gate ++ val = inl(POWER_MODE0_GATE); ++ val |= 0x00000040; ++ outl(val, POWER_MODE0_GATE); ++ val = inl(POWER_MODE1_GATE); ++ val |= 0x00000040; ++ outl(val, POWER_MODE1_GATE); ++ ++ // GPIO Control ++ val = inl( GPIO_MUX_HIGH); ++ val |= 0x0000c000; ++ outl(val, GPIO_MUX_HIGH); ++ ++#if defined(I2C_USE_INTR) ++ // Interrupt Mask ++ val = inl(VOYAGER_INT_MASK); ++ val |= 0x00800000; ++ outl(val, VOYAGER_INT_MASK); ++#endif ++ ++ // Enable I2c controller and select mode to high ++ ctl = inb(I2C_CONTROL); ++ outb((ctl | I2C_CONTROL_E | I2C_CONTROL_MODE), I2C_CONTROL); ++ ++#if defined(I2C_USE_INTR) ++ if (gpi.iic_irq > 0) { ++ if (request_irq(gpi.iic_irq, iic_voyagergx_handler, 0, ++ "VoyagerGX IIC", 0) < 0) { ++ gpi.iic_irq = 0; ++ } else { ++ pr_debug("Enabled IIC IRQ %d\n", gpi.iic_irq); ++ } ++ ++ enable_irq(gpi.iic_irq); ++ } ++#endif ++ ++ return 0; ++} ++ ++static struct i2c_algo_iic_data iic_voyagergx_data = { ++ .setiic = iic_voyagergx_setiic, ++ .getiic = iic_voyagergx_getiic, ++ .waitforpin = iic_voyagergx_waitforpin, ++ .udelay = 80, ++ .mdelay = 80, ++ .timeout = 100, ++}; ++ ++static struct i2c_adapter iic_voyagergx_ops = { ++ .owner = THIS_MODULE, ++ .name = "VoyagerGX I2C", ++ .id = I2C_HW_SMBUS_VOYAGER, ++ .class = I2C_ADAP_CLASS_SMBUS, ++ .algo_data = &iic_voyagergx_data, ++}; ++ ++static int __init iic_voyagergx_init(void) ++{ ++ struct iic_voyagergx *piic = &gpi; ++ ++ printk(KERN_INFO "Initialize VoyagerGX I2C module\n"); ++ ++ piic->iic_base = VOYAGER_BASE; ++ piic->iic_irq = DEFAULT_IRQ; ++ ++ iic_voyagergx_data.data = (void *)piic; ++ init_waitqueue_head(&iic_wait); ++ ++ if (iic_hw_resrc_init() == 0) { ++ if (i2c_voyager_add_bus(&iic_voyagergx_ops) < 0) ++ return -ENODEV; ++ } else { ++ return -ENODEV; ++ } ++ ++#if defined(I2C_USE_INTR) ++ printk(KERN_INFO " found device at %#lx irq %d.\n", ++ piic->iic_base, piic->iic_irq); ++#else ++ printk(KERN_INFO " found device at %#lx\n", piic->iic_base); ++#endif ++ ++ return 0; ++} ++ ++ ++static void iic_voyagergx_exit(void) ++{ ++ if (gpi.iic_irq > 0) { ++ disable_irq(gpi.iic_irq); ++ free_irq(gpi.iic_irq, 0); ++ } ++ ++ release_region(gpi.iic_base, 2); ++} ++ ++MODULE_AUTHOR("Lineo uSolutions,Inc. <www.lineo.co.jp>"); ++MODULE_DESCRIPTION("I2C-Bus adapter for VoyagerGX Silicon Motion, Inc."); ++MODULE_LICENSE("GPL"); ++ ++module_init(iic_voyagergx_init); ++module_exit(iic_voyagergx_exit); ++ +diff -ruN linux-2.6.17-vanilla/drivers/ide/CVS/Entries linux-2.6.17/drivers/ide/CVS/Entries +--- linux-2.6.17-vanilla/drivers/ide/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/ide/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,6 @@ ++/Kconfig/1.28/Mon Mar 27 21:06:14 2006/-ko/ ++/Makefile/1.7/Tue Jan 3 22:35:55 2006/-ko/ ++D/legacy//// ++D/pci//// ++D/sh//// ++/ide.c/1.11/Wed Jul 5 14:51:04 2006/-ko/ +diff -ruN linux-2.6.17-vanilla/drivers/ide/CVS/Repository linux-2.6.17/drivers/ide/CVS/Repository +--- linux-2.6.17-vanilla/drivers/ide/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/ide/CVS/Repository 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/ide +diff -ruN linux-2.6.17-vanilla/drivers/ide/CVS/Root linux-2.6.17/drivers/ide/CVS/Root +--- linux-2.6.17-vanilla/drivers/ide/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/ide/CVS/Root 2006-07-12 16:54:23.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/ide/Kconfig linux-2.6.17/drivers/ide/Kconfig +--- linux-2.6.17-vanilla/drivers/ide/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/ide/Kconfig 2006-07-12 16:54:24.000000000 +0000 +@@ -780,6 +780,9 @@ + This option enables the use of the sleep LED as a hard drive + activity LED. + ++config IDE_SH ++ def_bool SUPERH ++ + config BLK_DEV_IDE_SWARM + tristate "IDE for Sibyte evaluation boards" + depends on SIBYTE_SB1xxx_SOC +diff -ruN linux-2.6.17-vanilla/drivers/ide/Makefile linux-2.6.17/drivers/ide/Makefile +--- linux-2.6.17-vanilla/drivers/ide/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/ide/Makefile 2006-07-12 16:54:24.000000000 +0000 +@@ -37,6 +37,8 @@ + ide-core-$(CONFIG_BLK_DEV_MPC8xx_IDE) += ppc/mpc8xx.o + ide-core-$(CONFIG_BLK_DEV_IDE_PMAC) += ppc/pmac.o + ++# built-in only drivers from sh/ ++ide-core-$(CONFIG_IDE_SH) += sh/ide-sh.o + # built-in only drivers from h8300/ + ide-core-$(CONFIG_H8300) += h8300/ide-h8300.o + +diff -ruN linux-2.6.17-vanilla/drivers/ide/ide.c linux-2.6.17/drivers/ide/ide.c +--- linux-2.6.17-vanilla/drivers/ide/ide.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/ide/ide.c 2006-07-12 16:54:24.000000000 +0000 +@@ -1776,6 +1776,7 @@ + + extern void pnpide_init(void); + extern void h8300_ide_init(void); ++extern void ide_sh_init(void); + + /* + * probe_for_hwifs() finds/initializes "known" IDE interfaces +@@ -1840,6 +1841,9 @@ + #ifdef CONFIG_H8300 + h8300_ide_init(); + #endif ++#ifdef CONFIG_IDE_SH ++ ide_sh_init(); ++#endif + } + + void ide_register_subdriver(ide_drive_t *drive, ide_driver_t *driver) +diff -ruN linux-2.6.17-vanilla/drivers/ide/legacy/CVS/Entries linux-2.6.17/drivers/ide/legacy/CVS/Entries +--- linux-2.6.17-vanilla/drivers/ide/legacy/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/ide/legacy/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,2 @@ ++/ide-cs.c/1.13/Thu Jul 6 12:38:14 2006// ++D +diff -ruN linux-2.6.17-vanilla/drivers/ide/legacy/CVS/Repository linux-2.6.17/drivers/ide/legacy/CVS/Repository +--- linux-2.6.17-vanilla/drivers/ide/legacy/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/ide/legacy/CVS/Repository 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/ide/legacy +diff -ruN linux-2.6.17-vanilla/drivers/ide/legacy/CVS/Root linux-2.6.17/drivers/ide/legacy/CVS/Root +--- linux-2.6.17-vanilla/drivers/ide/legacy/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/ide/legacy/CVS/Root 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/ide/legacy/ide-cs.c linux-2.6.17/drivers/ide/legacy/ide-cs.c +--- linux-2.6.17-vanilla/drivers/ide/legacy/ide-cs.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/ide/legacy/ide-cs.c 2006-07-12 16:54:24.000000000 +0000 +@@ -73,6 +73,11 @@ + #define DEBUG(n, args...) + #endif + ++ ++#if defined(CONFIG_HD64461_PCMCIA) || defined(CONFIG_HD64461_PCMCIA_MODULE) ++#define USE_MEM 1 ++#endif ++ + /*====================================================================*/ + + static const char ide_major[] = { +@@ -117,13 +122,19 @@ + info->p_dev = link; + link->priv = info; + ++#ifndef USE_MEM + link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; + link->io.Attributes2 = IO_DATA_PATH_WIDTH_8; + link->io.IOAddrLines = 3; ++#endif + link->irq.Attributes = IRQ_TYPE_EXCLUSIVE; + link->irq.IRQInfo1 = IRQ_LEVEL_ID; + link->conf.Attributes = CONF_ENABLE_IRQ; ++#ifdef USE_MEM ++ link->conf.IntType = INT_MEMORY; ++#else + link->conf.IntType = INT_MEMORY_AND_IO; ++#endif + + return ide_config(link); + } /* ide_attach */ +@@ -229,6 +240,22 @@ + } + } + ++#ifdef USE_MEM ++ if ((cfg->mem.nwin > 0) || (stk->dflt.mem.nwin > 0)) { ++ win_req_t wr; ++ wr.Attributes = WIN_ENABLE|WIN_MEMORY_TYPE_CM; ++ wr.Base = 0; ++ wr.Size = 0; ++ wr.AccessSpeed = 0; ++ link->win = (window_handle_t)link; ++ link->conf.ConfigIndex = cfg->index; ++ if (pcmcia_request_window(&link, &wr, &link->win) != 0) ++ goto next_entry; ++ io_base = wr.Base; ++ ctl_base = io_base + 0x0e; ++ break; ++ } ++#else + if (cfg->vpp1.present & (1 << CISTPL_POWER_VNOM)) + link->conf.Vpp = + cfg->vpp1.param[CISTPL_POWER_VNOM] / 10000; +@@ -262,6 +289,7 @@ + /* If we've got this far, we're done */ + break; + } ++#endif + + next_entry: + if (cfg->flags & CISTPL_CFTABLE_DEFAULT) +@@ -278,12 +306,19 @@ + CS_CHECK(RequestIRQ, pcmcia_request_irq(link, &link->irq)); + CS_CHECK(RequestConfiguration, pcmcia_request_configuration(link, &link->conf)); + ++#ifndef USE_MEM ++ /* deal with brain dead IDE resource management */ ++ release_region(link->io.BasePort1, link->io.NumPorts1); ++ if (link->io.NumPorts2) ++ release_region(link->io.BasePort2, link->io.NumPorts2); ++ + /* disable drive interrupts during IDE probe */ + outb(0x02, ctl_base); + + /* special setup for KXLC005 card */ + if (is_kme) + outb(0x81, ctl_base+1); ++#endif + + /* retry registration in case device is still spinning up */ + for (hd = -1, i = 0; i < 10; i++) { +@@ -352,6 +387,13 @@ + -- need to investigate the required PCMCIA magic */ + ide_unregister(info->hd); + } ++ ++#ifndef USE_MEM ++ request_region(link->io.BasePort1, link->io.NumPorts1,"ide-cs"); ++ if (link->io.NumPorts2) ++ request_region(link->io.BasePort2, link->io.NumPorts2,"ide-cs"); ++#endif ++ + info->ndev = 0; + + pcmcia_disable_device(link); +diff -ruN linux-2.6.17-vanilla/drivers/ide/pci/CVS/Entries linux-2.6.17/drivers/ide/pci/CVS/Entries +--- linux-2.6.17-vanilla/drivers/ide/pci/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/ide/pci/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,2 @@ ++/alim15x3.c/1.16/Wed Jul 5 14:51:05 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/ide/pci/CVS/Repository linux-2.6.17/drivers/ide/pci/CVS/Repository +--- linux-2.6.17-vanilla/drivers/ide/pci/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/ide/pci/CVS/Repository 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/ide/pci +diff -ruN linux-2.6.17-vanilla/drivers/ide/pci/CVS/Root linux-2.6.17/drivers/ide/pci/CVS/Root +--- linux-2.6.17-vanilla/drivers/ide/pci/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/ide/pci/CVS/Root 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/ide/pci/alim15x3.c linux-2.6.17/drivers/ide/pci/alim15x3.c +--- linux-2.6.17-vanilla/drivers/ide/pci/alim15x3.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/ide/pci/alim15x3.c 2006-07-12 16:54:24.000000000 +0000 +@@ -65,6 +65,16 @@ + "PIO mode" }; + + static char *udmaT[8] = { ++#if defined(CONFIG_SH_MPC1211) ++ " 1T", ++ "1.5T", ++ " 2T", ++ " 3T", ++ " 4T", ++ "2.5T", ++ " 6T", ++ "3.5T" ++#else + "1.5T", + " 2T", + "2.5T", +@@ -73,6 +83,7 @@ + " 4T", + " 6T", + " 8T" ++#endif + }; + + static char *channel_status[8] = { +@@ -303,7 +314,11 @@ + u8 cd_dma_fifo = 0; + int unit = drive->select.b.unit & 1; + ++#if defined(CONFIG_SH_MPC1211) ++ pio = ide_get_best_pio_mode(drive, pio, 0, &d); ++#else + pio = ide_get_best_pio_mode(drive, pio, 5, &d); ++#endif + s_time = ide_pio_timings[pio].setup_time; + a_time = ide_pio_timings[pio].active_time; + if ((s_clc = (s_time * bus_speed + 999) / 1000) >= 8) +@@ -420,6 +435,10 @@ + return 0; + } + ++#ifdef CONFIG_SH_MPC1211 ++ mode = 1; ++#endif ++ + /* + * If the drive sees no suitable cable then UDMA 33 + * is the highest permitted mode +diff -ruN linux-2.6.17-vanilla/drivers/ide/sh/CVS/Entries linux-2.6.17/drivers/ide/sh/CVS/Entries +--- linux-2.6.17-vanilla/drivers/ide/sh/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/ide/sh/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,2 @@ ++/ide-sh.c/1.2/Thu Mar 17 10:26:58 2005/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/ide/sh/CVS/Repository linux-2.6.17/drivers/ide/sh/CVS/Repository +--- linux-2.6.17-vanilla/drivers/ide/sh/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/ide/sh/CVS/Repository 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/ide/sh +diff -ruN linux-2.6.17-vanilla/drivers/ide/sh/CVS/Root linux-2.6.17/drivers/ide/sh/CVS/Root +--- linux-2.6.17-vanilla/drivers/ide/sh/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/ide/sh/CVS/Root 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/ide/sh/ide-sh.c linux-2.6.17/drivers/ide/sh/ide-sh.c +--- linux-2.6.17-vanilla/drivers/ide/sh/ide-sh.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/ide/sh/ide-sh.c 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,95 @@ ++/* ++ * SuperH default IDE host driver ++ * ++ * Copyright (C) 2004, 2005 Paul Mundt ++ * ++ * Based on the old include/asm-sh/ide.h ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ ++#include <linux/kernel.h> ++#include <linux/init.h> ++#include <linux/ide.h> ++ ++#include <asm/irq.h> ++ ++enum { ++ IDE_SH_CFCARD_IO = 0x1f0, ++ IDE_SH_PCMCIA_IO = 0x170, ++}; ++ ++static struct sh_ide_hwif { ++ unsigned long base; ++ int irq; ++} sh_ide_hwifs[] __initdata = { ++ { IDE_SH_CFCARD_IO, IRQ_CFCARD }, ++ { IDE_SH_PCMCIA_IO, IRQ_PCMCIA }, ++ { 0, }, ++}; ++ ++static inline int __init hw_setup(hw_regs_t *hw, int idx) ++{ ++ unsigned long base = sh_ide_hwifs[idx].base; ++ ++ if (!request_region(base, 8, "ide-sh")) ++ return -EBUSY; ++ if (!request_region(base + 0x206, 1, "ide-sh")) { ++ release_region(base, 8); ++ return -EBUSY; ++ } ++ ++ memset(hw, 0, sizeof(hw_regs_t)); ++ ide_std_init_ports(hw, base, base + 0x206); ++ ++ hw->irq = sh_ide_hwifs[idx].irq; ++ hw->chipset = ide_generic; ++ ++ return 0; ++} ++ ++static inline void __init hwif_setup(ide_hwif_t *hwif) ++{ ++ hwif->mmio = 2; ++} ++ ++void __init ide_sh_init(void) ++{ ++ int i, idx; ++ ++ printk(KERN_INFO "ide: SuperH generic IDE interface\n"); ++ ++ for (i = 0; i < MAX_HWIFS; i++) { ++ ide_hwif_t *hwif; ++ hw_regs_t hw; ++ ++ if (!sh_ide_hwifs[i].base) { ++ printk(KERN_ERR "ide-sh: Attempting to register ide%d " ++ "when only %d interfaces are available.\n", ++ i, i - 1); ++ break; ++ } ++ ++ if (hw_setup(&hw, i) < 0) ++ goto region_cleanup; ++ ++ idx = ide_register_hw(&hw, &hwif); ++ if (idx == -1) { ++ printk(KERN_ERR "ide-sh: IDE interface registration failed\n"); ++ i++; /* release this interface too */ ++ goto region_cleanup; ++ } ++ ++ hwif_setup(hwif); ++ } ++ ++region_cleanup: ++ for (idx = 0; idx < i; idx++) { ++ unsigned long base = sh_ide_hwifs[idx].base; ++ ++ release_region(base + 0x206, 1); ++ release_region(base, 8); ++ } ++} ++ +diff -ruN linux-2.6.17-vanilla/drivers/input/CVS/Entries linux-2.6.17/drivers/input/CVS/Entries +--- linux-2.6.17-vanilla/drivers/input/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/input/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,2 @@ ++D/keyboard//// ++D/touchscreen//// +diff -ruN linux-2.6.17-vanilla/drivers/input/CVS/Repository linux-2.6.17/drivers/input/CVS/Repository +--- linux-2.6.17-vanilla/drivers/input/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/input/CVS/Repository 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/input +diff -ruN linux-2.6.17-vanilla/drivers/input/CVS/Root linux-2.6.17/drivers/input/CVS/Root +--- linux-2.6.17-vanilla/drivers/input/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/input/CVS/Root 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/CVS/Entries linux-2.6.17/drivers/input/keyboard/CVS/Entries +--- linux-2.6.17-vanilla/drivers/input/keyboard/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/input/keyboard/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,7 @@ ++/Makefile/1.6/Thu Nov 10 14:20:52 2005/-ko/ ++/hp620_keyb.c/1.2/Mon Jan 30 11:14:01 2006// ++/hp680_keyb.c/1.2/Mon Jan 30 11:14:01 2006// ++/scan_keyb.c/1.3/Mon Jan 30 11:14:01 2006/-ko/ ++/scan_keyb.h/1.2/Mon Jan 30 11:14:01 2006/-ko/ ++/Kconfig/1.14/Wed Jul 5 14:51:11 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/CVS/Repository linux-2.6.17/drivers/input/keyboard/CVS/Repository +--- linux-2.6.17-vanilla/drivers/input/keyboard/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/input/keyboard/CVS/Repository 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/input/keyboard +diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/CVS/Root linux-2.6.17/drivers/input/keyboard/CVS/Root +--- linux-2.6.17-vanilla/drivers/input/keyboard/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/input/keyboard/CVS/Root 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/Kconfig linux-2.6.17/drivers/input/keyboard/Kconfig +--- linux-2.6.17-vanilla/drivers/input/keyboard/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/input/keyboard/Kconfig 2006-07-12 16:54:24.000000000 +0000 +@@ -183,4 +183,21 @@ + This driver implements support for HIL-keyboards attached + to your machine, so normally you should say Y here. + ++choice ++ prompt "HP6XX keyboard" ++ depends on SH_HP6XX ++ default KEYBOARD_HP680 ++ ++config KEYBOARD_HP620 ++ tristate "HP620 keyboard" ++ help ++ Say Y here if you are running Linux on HP Jornada 620. ++ ++config KEYBOARD_HP680 ++ tristate "HP680 keyboard" ++ help ++ Say Y here if you are running Linux on HP Jornada 680. ++ ++endchoice ++ + endif +diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/Makefile linux-2.6.17/drivers/input/keyboard/Makefile +--- linux-2.6.17-vanilla/drivers/input/keyboard/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/input/keyboard/Makefile 2006-07-12 16:54:24.000000000 +0000 +@@ -11,8 +11,11 @@ + obj-$(CONFIG_KEYBOARD_AMIGA) += amikbd.o + obj-$(CONFIG_KEYBOARD_LOCOMO) += locomokbd.o + obj-$(CONFIG_KEYBOARD_NEWTON) += newtonkbd.o ++obj-$(CONFIG_KEYBOARD_98KBD) += 98kbd.o + obj-$(CONFIG_KEYBOARD_CORGI) += corgikbd.o + obj-$(CONFIG_KEYBOARD_SPITZ) += spitzkbd.o + obj-$(CONFIG_KEYBOARD_HIL) += hil_kbd.o + obj-$(CONFIG_KEYBOARD_HIL_OLD) += hilkbd.o ++obj-$(CONFIG_KEYBOARD_HP620) += scan_keyb.o hp620_keyb.o ++obj-$(CONFIG_KEYBOARD_HP680) += scan_keyb.o hp680_keyb.o + +diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/hp620_keyb.c linux-2.6.17/drivers/input/keyboard/hp620_keyb.c +--- linux-2.6.17-vanilla/drivers/input/keyboard/hp620_keyb.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/input/keyboard/hp620_keyb.c 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,169 @@ ++/* ++ * drivers/input/keyboard/hp680_keyb.c ++ * ++ * HP Jornada 620 scan keyboard ++ * ++ * Copyright (C) 2005 Andriy Skulysh ++ * Copyright (C) 2006 Paul Mundt ++ * ++ * Splited from drivers/input/keyboard/hp600_keyb.c ++ * ++ * Copyright (C) 2000 YAEGASHI Takeshi ++ * HP600 keyboard scan routine and translation table ++ * Copyright (C) 2000 Niibe Yutaka ++ * HP620 keyboard translation table ++ */ ++#include <linux/kernel.h> ++#include <linux/module.h> ++#include <linux/init.h> ++#include <asm/delay.h> ++#include <asm/io.h> ++#include "scan_keyb.h" ++ ++#define PCDR 0xa4000124 ++#define PDDR 0xa4000126 ++#define PEDR 0xa4000128 ++#define PFDR 0xa400012a ++#define PGDR 0xa400012c ++#define PHDR 0xa400012e ++#define PJDR 0xa4000130 ++#define PKDR 0xa4000132 ++#define PLDR 0xa4000134 ++ ++/**************************************************************** ++HP Jornada 620(Japanese version) keyboard scan matrix ++ ++ PTC7 PTC6 PTC5 PTC4 PTC3 PTC2 PTC1 PTC0 ++PTD1 EREC BS Ctrl on/off - 0 9 ++PTD5 EREC BS Ctrl on/off ^ P O ++PTD7 EREC BS Ctrl on/off ] @ L ++PTE0 EREC BS Ctrl on/off Han/Zen [ ; ++PTE1 EREC BS Ctrl on/off Enter : / ++PTE3 EREC BS Ctrl on/off Right Up ++PTE6 EREC BS Ctrl on/off Down Left ++PTE7 EREC BS Ctrl on/off F8 F7 ++ ++ PTF7 PTF6 PTF5 PTF4 PTF3 PTF2 PTF1 PTF0 ++PTD1 8 7 6 5 4 3 2 1 ++PTD5 I U Y T R E W Q ++PTD7 K J H G F D S A ++PTE0 ESC Tab Shift ++PTE1 . V Caps Hira ++PTE3 , M N B Muhen C X ++PTE6 _ \ Henkan Space Alt Z ++PTE7 F6 F5 F4 F3 F2 F1 REC ++ ++ PTH0 ++* on/off ++ ++ 7 6 5 4 3 2 1 0 ++C: 0xffff 0xff IP IP IP IP IP IP IP IP ++D: 0x4404 0xaf O F O F F F O F ++E: 0x5045 0xff O O F F O F O O ++F: 0xffff 0xff IP IP IP IP IP IP IP IP ++G: 0xd5ff 0x00 IP O O O IP IP IP IP ++H: 0x63ff 0xd1 O I F IP IP IP IP IP ++J: 0x0004 0x02 F F F F F F O F ++K: 0x0401 0xff F F O F F F F O ++L: 0x0c00 0x20 F F IP F F F F F ++ ++ADCSR: 0x08 ++ADCR: 0x3f ++ ++ ****************************************************************/ ++ ++/**************************************************************** ++Japanese 109 keyboard scan code layout ++ ++ E02A- E1- ++01 3B 3C 3D 3E 3F 40 41 42 43 44 57 58 E037 46 1045 ++ ++29 02 03 04 05 06 07 08 09 0A 0B 0C 0D 7D 0E E052 E047 E049 45 E035 37 4A ++0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C E053 E04F E051 47 48 49 4E ++3A 1E 1F 20 21 22 23 24 25 26 27 28 2B 4B 4C 4D ++2A 2C 2D 2E 2F 30 31 32 33 34 35 73 36 E048 4F 50 51 E0- ++1D DB 38 7B 39 79 70 E038 DC DD E01D E04B E050 E04D 52 53 1C ++ ++****************************************************************/ ++ ++static const unsigned char hp620_japanese_table[] = { ++ /* PTD1 */ ++ 0x0a, 0x0b, 0x0c, 0x00, 0x00, 0x0e, 0x00, 0x00, ++ 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, ++ /* PTD5 */ ++ 0x18, 0x19, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, ++ /* PTD7 */ ++ 0x26, 0x1a, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x1e, 0x1f, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, ++ /* PTE0 */ ++ 0x27, 0x1b, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x2a, 0x0f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, ++ /* PTE1 */ ++ 0x35, 0x28, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x70, 0x3a, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x34, ++ /* PTE3 */ ++ 0x48, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x2d, 0x2e, 0x7b, 0x30, 0x31, 0x32, 0x33, ++ /* PTE6 */ ++ 0x4b, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x2c, 0x38, 0x00, 0x39, 0x79, 0x7d, 0x73, ++ /* PTE7 */ ++ 0x41, 0x42, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f, 0x40, ++ /* **** */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++}; ++ ++static int hp620_japanese_scan_kbd(unsigned char *s) ++{ ++ int i; ++ unsigned char matrix_switch[] = { ++ 0xfd, 0xff, /* PTD1 */ ++ 0xdf, 0xff, /* PTD5 */ ++ 0x7f, 0xff, /* PTD7 */ ++ 0xff, 0xfe, /* PTE0 */ ++ 0xff, 0xfd, /* PTE1 */ ++ 0xff, 0xf7, /* PTE3 */ ++ 0xff, 0xbf, /* PTE6 */ ++ 0xff, 0x7f, /* PTE7 */ ++ }, *t=matrix_switch; ++ ++ for(i=0; i<8; i++) { ++ ctrl_outb(*t++, PDDR); ++ ctrl_outb(*t++, PEDR); ++ udelay(50); ++ *s++=ctrl_inb(PCDR); ++ *s++=ctrl_inb(PFDR); ++ } ++ ++ ctrl_outb(0xff, PDDR); ++ ctrl_outb(0xff, PEDR); ++ ++ *s++=ctrl_inb(PGDR); ++ *s++=ctrl_inb(PHDR); ++ ++ return 0; ++} ++ ++static struct scan_keyboard hp620_kbd = { ++ .scan = hp620_japanese_scan_kbd, ++ .table = hp620_japanese_table, ++ .length = 18, ++}; ++ ++static int __init hp620_kbd_init_hw(void) ++{ ++ printk(KERN_INFO "HP620 matrix scan keyboard registered\n"); ++ return register_scan_keyboard(&hp620_kbd); ++} ++ ++static void __exit hp620_kbd_exit_hw(void) ++{ ++ unregister_scan_keyboard(&hp620_kbd); ++} ++ ++module_init(hp620_kbd_init_hw); ++module_exit(hp620_kbd_exit_hw); ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/hp680_keyb.c linux-2.6.17/drivers/input/keyboard/hp680_keyb.c +--- linux-2.6.17-vanilla/drivers/input/keyboard/hp680_keyb.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/input/keyboard/hp680_keyb.c 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,152 @@ ++/* ++ * drivers/input/keyboard/hp680_keyb.c ++ * ++ * HP Jornada 680/690 scan keyboard ++ * ++ * Copyright (C) 2005 Andriy Skulysh ++ * Copyright (C) 2006 Paul Mundt ++ * ++ * Splited from drivers/input/keyboard/hp600_keyb.c ++ * ++ * Copyright (C) 2000 YAEGASHI Takeshi ++ * HP600 keyboard scan routine and translation table ++ * Copyright (C) 2000 Niibe Yutaka ++ * HP620 keyboard translation table ++ */ ++#include <linux/kernel.h> ++#include <linux/module.h> ++#include <linux/init.h> ++#include <asm/delay.h> ++#include <asm/io.h> ++#include "scan_keyb.h" ++ ++#define PCDR 0xa4000124 ++#define PDDR 0xa4000126 ++#define PEDR 0xa4000128 ++#define PFDR 0xa400012a ++#define PGDR 0xa400012c ++#define PHDR 0xa400012e ++#define PJDR 0xa4000130 ++#define PKDR 0xa4000132 ++#define PLDR 0xa4000134 ++ ++/**************************************************************** ++HP Jornada 690(Japanese version) keyboard scan matrix ++ ++ PTC7 PTC6 PTC5 PTC4 PTC3 PTC2 PTC1 PTC0 ++PTD1 REC Escape on/off Han/Zen Hira Eisu ++PTD5 REC Z on/off Enter : / ++PTD7 REC Right Down ++PTE0 REC Windows on/off ++PTE1 REC A on/off ] [ ; ++PTE3 REC Tab on/off ShirtR \ Up ++PTE6 REC Q on/off BS @ P ++PTE7 REC 1 on/off ^ - 0 ++ ++ PTF7 PTF6 PTF5 PTF4 PTF3 PTF2 PTF1 PTF0 ++PTD1 F5 F4 F6 F7 F8 F3 F2 F1 ++PTD5 N B M , . V C X ++PTD7 Muhen Alt Left ++PTE0 Henkan _ Del Space Ctrl ++PTE1 H G J K L F D S ++PTE3 ShiftL ++PTE6 Y T U I O R E W ++PTE7 6 5 7 8 9 4 3 2 ++ ++ PTG5 PTG4 PTG3 PTG0 PTH0 ++* REC REW FWW Cover on/off ++ ++ ++ 7 6 5 4 3 2 1 0 ++C: 0xffff 0xdf IP IP IP IP IP IP IP IP ++D: 0x6786 0x59 O I O IP I F O I ++E: 0x5045 0x00 O O F F O F O O ++F: 0xffff 0xff IP IP IP IP IP IP IP IP ++G: 0xaffe 0xfd I I IP IP IP IP IP I ++H: 0x70f2 0x49 O IP F F IP IP F I ++J: 0x0704 0x22 F F O IP F F O F ++K: 0x0100 0x10 F F F O F F F F ++L: 0x0c3c 0x26 F F IP F F IP IP F ++ ++****************************************************************/ ++ ++static const unsigned char hp680_japanese_table[] = { ++ /* PTD1 */ ++ 0x3a, 0x70, 0x29, 0x00, 0x01, 0x00, 0x00, 0x00, ++ 0x3b, 0x3c, 0x3d, 0x42, 0x41, 0x40, 0x3e, 0x3f, ++ /* PTD5 */ ++ 0x35, 0x28, 0x1c, 0x00, 0x2c, 0x00, 0x00, 0x00, ++ 0x2d, 0x2e, 0x2f, 0x34, 0x33, 0x32, 0x30, 0x31, ++ /* PTD7 */ ++ 0x50, 0x4d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x38, 0x7b, ++ /* PTE0 */ ++ 0x00, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, ++ 0x1d, 0x00, 0x39, 0x53, 0x73, 0xf9, 0x00, 0x00, ++ /* PTE1 */ ++ 0x27, 0x1b, 0x2b, 0x00, 0x1e, 0x00, 0x00, 0x00, ++ 0x1f, 0x20, 0x21, 0x26, 0x25, 0x24, 0x22, 0x23, ++ /* PTE3 */ ++ 0x48, 0x7d, 0x36, 0x00, 0x0f, 0x00, 0x00, 0x00, ++ 0x00, 0x2a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ /* PTE6 */ ++ 0x19, 0x1a, 0x0e, 0x00, 0x10, 0x00, 0x00, 0x00, ++ 0x11, 0x12, 0x13, 0x18, 0x17, 0x16, 0x14, 0x15, ++ /* PTE7 */ ++ 0x0b, 0x0c, 0x0d, 0x00, 0x02, 0x00, 0x00, 0x00, ++ 0x03, 0x04, 0x05, 0x0a, 0x09, 0x08, 0x06, 0x07, ++ /* **** */ ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, ++}; ++ ++static int hp680_japanese_scan_kbd(unsigned char *s) ++{ ++ int i; ++ unsigned char matrix_switch[] = { ++ 0xfd, 0xff, /* PTD1 */ ++ 0xdf, 0xff, /* PTD5 */ ++ 0x7f, 0xff, /* PTD7 */ ++ 0xff, 0xfe, /* PTE0 */ ++ 0xff, 0xfd, /* PTE1 */ ++ 0xff, 0xf7, /* PTE3 */ ++ 0xff, 0xbf, /* PTE6 */ ++ 0xff, 0x7f, /* PTE7 */ ++ }, *t=matrix_switch; ++ ++ for(i=0; i<8; i++) { ++ ctrl_outb(*t++, PDDR); ++ ctrl_outb(*t++, PEDR); ++ *s++=ctrl_inb(PCDR); ++ *s++=ctrl_inb(PFDR); ++ } ++ ++ ctrl_outb(0xff, PDDR); ++ ctrl_outb(0xff, PEDR); ++ ++ *s++=ctrl_inb(PGDR); ++ *s++=ctrl_inb(PHDR); ++ ++ return 0; ++} ++ ++static struct scan_keyboard hp680_kbd = { ++ .scan = hp680_japanese_scan_kbd, ++ .table = hp680_japanese_table, ++ .length = 18, ++}; ++ ++static int __init hp680_kbd_init_hw(void) ++{ ++ printk(KERN_INFO "HP680 matrix scan keyboard registered\n"); ++ return register_scan_keyboard(&hp680_kbd); ++} ++ ++static void __exit hp680_kbd_exit_hw(void) ++{ ++ unregister_scan_keyboard(&hp680_kbd); ++} ++ ++module_init(hp680_kbd_init_hw); ++module_exit(hp680_kbd_exit_hw); ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/scan_keyb.c linux-2.6.17/drivers/input/keyboard/scan_keyb.c +--- linux-2.6.17-vanilla/drivers/input/keyboard/scan_keyb.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/input/keyboard/scan_keyb.c 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,148 @@ ++/* ++ * Generic scan keyboard driver ++ * ++ * Copyright (C) 2000 YAEGASHI Takeshi ++ * Copyright (C) 2003 Andriy Skulysh ++ * Copyright (C) 2006 Paul Mundt ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ ++ ++#include <linux/kernel.h> ++#include <linux/module.h> ++#include <linux/sched.h> ++#include <linux/init.h> ++#include <linux/slab.h> ++#include <linux/interrupt.h> ++#include <linux/kbd_kern.h> ++#include <linux/input.h> ++#include <linux/timer.h> ++#include "scan_keyb.h" ++ ++#define SCANHZ (HZ/20) ++ ++static int scan_jiffies; ++static struct scan_keyboard *keyboards; ++struct timer_list scan_timer; ++static char *hpkbd_name = "Hitachi scankeyboard"; ++static char *hpkbd_phys = "input0"; ++ ++static void check_kbd(struct scan_keyboard *kbd, ++ unsigned char *new, unsigned char *old) ++{ ++ const unsigned char *table = kbd->table; ++ int length = kbd->length; ++ int need_tasklet_schedule = 0; ++ unsigned int xor, bit; ++ ++ while (length-- > 0) { ++ if ((xor = *new ^ *old) == 0) ++ table += 8; ++ else { ++ for (bit = 0x01; bit < 0x100; bit <<= 1) { ++ if (xor & bit) { ++ input_report_key(kbd->dev, *table, ++ !(*new & bit)); ++ need_tasklet_schedule = 1; ++ } ++ ++ table++; ++ } ++ } ++ ++ new++; ++ old++; ++ } ++ ++ if (need_tasklet_schedule) { ++ input_sync(kbd->dev); ++ tasklet_schedule(&keyboard_tasklet); ++ } ++} ++ ++static void scan_kbd(unsigned long dummy) ++{ ++ struct scan_keyboard *kbd; ++ ++ scan_jiffies++; ++ ++ for (kbd = keyboards; kbd != NULL; kbd = kbd->next) { ++ if (scan_jiffies & 1) { ++ if (!kbd->scan(kbd->s0)) ++ check_kbd(kbd, kbd->s0, kbd->s1); ++ else ++ memcpy(kbd->s0, kbd->s1, kbd->length); ++ } else { ++ if (!kbd->scan(kbd->s1)) ++ check_kbd(kbd, kbd->s1, kbd->s0); ++ else ++ memcpy(kbd->s1, kbd->s0, kbd->length); ++ } ++ } ++ ++ mod_timer(&scan_timer, jiffies + SCANHZ); ++} ++ ++int register_scan_keyboard(struct scan_keyboard *kbd) ++{ ++ int i; ++ ++ kbd->s0 = kmalloc(kbd->length, GFP_KERNEL); ++ if (kbd->s0 == NULL) ++ goto error; ++ ++ kbd->s1 = kmalloc(kbd->length, GFP_KERNEL); ++ if (kbd->s1 == NULL) ++ goto error; ++ ++ memset(kbd->s0, -1, kbd->length); ++ memset(kbd->s1, -1, kbd->length); ++ ++ kbd->dev = input_allocate_device(); ++ if (!kbd->dev) ++ goto error; ++ ++ kbd->dev->name = hpkbd_name; ++ kbd->dev->phys = hpkbd_phys; ++ kbd->dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP); ++ init_input_dev(kbd->dev); ++ kbd->dev->keycode = (unsigned char *)kbd->table; ++ kbd->dev->keycodesize = sizeof(unsigned char); ++ kbd->dev->keycodemax = ARRAY_SIZE(kbd->table); ++ ++ for (i = 0; i < 128; i++) ++ if (kbd->table[i]) ++ set_bit(kbd->table[i], kbd->dev->keybit); ++ ++ clear_bit(0, kbd->dev->keybit); ++ input_register_device(kbd->dev); ++ ++ kbd->next = keyboards; ++ keyboards = kbd; ++ ++ init_timer(&scan_timer); ++ scan_timer.expires = jiffies + SCANHZ; ++ scan_timer.data = 0; ++ scan_timer.function = scan_kbd; ++ add_timer(&scan_timer); ++ ++ return 0; ++ ++error: ++ kfree(kbd->s1); ++ kfree(kbd->s0); ++ ++ return -ENOMEM; ++} ++EXPORT_SYMBOL_GPL(register_scan_keyboard); ++ ++void unregister_scan_keyboard(struct scan_keyboard *kbd) ++{ ++ del_timer_sync(&scan_timer); ++ keyboards = kbd->next; ++ input_unregister_device(kbd->dev); ++ input_free_device(kbd->dev); ++} ++EXPORT_SYMBOL_GPL(unregister_scan_keyboard); +diff -ruN linux-2.6.17-vanilla/drivers/input/keyboard/scan_keyb.h linux-2.6.17/drivers/input/keyboard/scan_keyb.h +--- linux-2.6.17-vanilla/drivers/input/keyboard/scan_keyb.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/input/keyboard/scan_keyb.h 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,16 @@ ++#ifndef __DRIVER_CHAR_SCAN_KEYB_H ++#define __DRIVER_CHAR_SCAN_KEYB_H ++ ++struct scan_keyboard { ++ struct scan_keyboard *next; ++ int (*scan)(unsigned char *buffer); ++ const unsigned char *table; ++ unsigned char *s0, *s1; ++ int length; ++ struct input_dev *dev; ++}; ++ ++int register_scan_keyboard(struct scan_keyboard *); ++void unregister_scan_keyboard(struct scan_keyboard *); ++ ++#endif +diff -ruN linux-2.6.17-vanilla/drivers/input/touchscreen/CVS/Entries linux-2.6.17/drivers/input/touchscreen/CVS/Entries +--- linux-2.6.17-vanilla/drivers/input/touchscreen/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/input/touchscreen/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,2 @@ ++/hp680_ts_input.c/1.3/Sun Jan 29 22:13:39 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/input/touchscreen/CVS/Repository linux-2.6.17/drivers/input/touchscreen/CVS/Repository +--- linux-2.6.17-vanilla/drivers/input/touchscreen/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/input/touchscreen/CVS/Repository 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/input/touchscreen +diff -ruN linux-2.6.17-vanilla/drivers/input/touchscreen/CVS/Root linux-2.6.17/drivers/input/touchscreen/CVS/Root +--- linux-2.6.17-vanilla/drivers/input/touchscreen/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/input/touchscreen/CVS/Root 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/input/touchscreen/hp680_ts_input.c linux-2.6.17/drivers/input/touchscreen/hp680_ts_input.c +--- linux-2.6.17-vanilla/drivers/input/touchscreen/hp680_ts_input.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/input/touchscreen/hp680_ts_input.c 2006-07-12 16:54:24.000000000 +0000 +@@ -15,7 +15,6 @@ + #define HP680_TS_ABS_Y_MIN 80 + #define HP680_TS_ABS_Y_MAX 910 + +-#define SCPCR 0xa4000116 + #define PHDR 0xa400012e + #define SCPDR 0xa4000136 + +@@ -77,19 +76,6 @@ + + static int __init hp680_ts_init(void) + { +- u8 scpdr; +- u16 scpcr; +- +- scpdr = ctrl_inb(SCPDR); +- scpdr |= SCPDR_TS_SCAN_X | SCPDR_TS_SCAN_Y; +- scpdr &= ~SCPDR_TS_SCAN_ENABLE; +- ctrl_outb(scpdr, SCPDR); +- +- scpcr = ctrl_inw(SCPCR); +- scpcr &= ~SCPCR_TS_MASK; +- scpcr |= SCPCR_TS_ENABLE; +- ctrl_outw(scpcr, SCPCR); +- + hp680_ts_dev = input_allocate_device(); + if (!hp680_ts_dev) + return -ENOMEM; +diff -ruN linux-2.6.17-vanilla/drivers/mtd/CVS/Entries linux-2.6.17/drivers/mtd/CVS/Entries +--- linux-2.6.17-vanilla/drivers/mtd/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/mtd/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,2 @@ ++/mtdpart.c/1.11/Tue Jan 3 22:35:56 2006/-ko/ ++D/maps//// +diff -ruN linux-2.6.17-vanilla/drivers/mtd/CVS/Repository linux-2.6.17/drivers/mtd/CVS/Repository +--- linux-2.6.17-vanilla/drivers/mtd/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/mtd/CVS/Repository 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/mtd +diff -ruN linux-2.6.17-vanilla/drivers/mtd/CVS/Root linux-2.6.17/drivers/mtd/CVS/Root +--- linux-2.6.17-vanilla/drivers/mtd/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/mtd/CVS/Root 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/CVS/Entries linux-2.6.17/drivers/mtd/maps/CVS/Entries +--- linux-2.6.17-vanilla/drivers/mtd/maps/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/mtd/maps/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,5 @@ ++/Kconfig/1.18/Mon Mar 27 21:06:14 2006/-ko/ ++/Makefile/1.16/Mon Mar 27 21:06:14 2006/-ko/ ++/microdev-flash.c/1.1/Thu Mar 17 11:42:48 2005/-ko/ ++/rts7751r2d-flash.c/1.2/Thu Mar 17 11:42:48 2005/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/CVS/Repository linux-2.6.17/drivers/mtd/maps/CVS/Repository +--- linux-2.6.17-vanilla/drivers/mtd/maps/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/mtd/maps/CVS/Repository 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/mtd/maps +diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/CVS/Root linux-2.6.17/drivers/mtd/maps/CVS/Root +--- linux-2.6.17-vanilla/drivers/mtd/maps/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/mtd/maps/CVS/Root 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/Kconfig linux-2.6.17/drivers/mtd/maps/Kconfig +--- linux-2.6.17-vanilla/drivers/mtd/maps/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/mtd/maps/Kconfig 2006-07-12 16:54:24.000000000 +0000 +@@ -409,11 +409,37 @@ + + config MTD_SOLUTIONENGINE + tristate "CFI Flash device mapped on Hitachi SolutionEngine" +- depends on SUPERH && MTD_CFI && MTD_REDBOOT_PARTS ++ depends on SUPERH && MTD_CFI + help + This enables access to the flash chips on the Hitachi SolutionEngine and + similar boards. Say 'Y' if you are building a kernel for such a board. + ++config MTD_SUPERH_RESERVE ++ hex "Default reserved Flash size" ++ depends on MTD_SOLUTIONENGINE ++ default 300000 ++ help ++ The reserved memory is used by kernel and ram disk themselves. It's ++ starting from 0. ++ ++config MTD_MPC1211 ++ tristate "CFI Flash device mapped on Interface MPC-1211" ++ depends on SUPERH && SH_MPC1211 && MTD_CFI ++ help ++ This enables access to the flash chips on the Interface MPC-1211(CTP/PCI/MPC-SH02). ++ Say 'Y' if you are building a kernel for such a board. ++ ++config MTD_RTS7751R2D ++ tristate "CFI Flash device mapped on Renesas RTS7751R2D" ++ depends on SUPERH && SH_RTS7751R2D && MTD_CFI && MTD_PARTITIONS ++ help ++ This enables access to the flash chips on the Renesas Technology Sales RTS7751R2D. ++ Say 'Y' if you are building a kernel for such a board. ++ ++config MTD_MICRODEV ++ tristate "CFI Flash device mapped on SuperH SH4-202 MicroDev" ++ depends on SUPERH && SH_SH4202_MICRODEV && MTD_CFI && MTD_PARTITIONS ++ + config MTD_ARM_INTEGRATOR + tristate "CFI Flash device mapped on ARM Integrator/P720T" + depends on ARM && MTD_CFI +diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/Makefile linux-2.6.17/drivers/mtd/maps/Makefile +--- linux-2.6.17-vanilla/drivers/mtd/maps/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/mtd/maps/Makefile 2006-07-12 16:54:24.000000000 +0000 +@@ -62,6 +62,7 @@ + obj-$(CONFIG_MTD_SBC8240) += sbc8240.o + obj-$(CONFIG_MTD_NOR_TOTO) += omap-toto-flash.o + obj-$(CONFIG_MTD_MPC1211) += mpc1211.o ++obj-$(CONFIG_MTD_RTS7751R2D) += rts7751r2d-flash.o + obj-$(CONFIG_MTD_IXP4XX) += ixp4xx.o + obj-$(CONFIG_MTD_IXP2000) += ixp2000.o + obj-$(CONFIG_MTD_WRSBC8260) += wr_sbc82xx_flash.o +@@ -69,5 +70,6 @@ + obj-$(CONFIG_MTD_SHARP_SL) += sharpsl-flash.o + obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o + obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o ++obj-$(CONFIG_MTD_MICRODEV) += microdev-flash.o + obj-$(CONFIG_MTD_MTX1) += mtx-1_flash.o + obj-$(CONFIG_MTD_TQM834x) += tqm834x.o +diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/microdev-flash.c linux-2.6.17/drivers/mtd/maps/microdev-flash.c +--- linux-2.6.17-vanilla/drivers/mtd/maps/microdev-flash.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/mtd/maps/microdev-flash.c 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,165 @@ ++/* ++ * drivers/mtd/maps/microdev-flash.c ++ * ++ * Flash Mapping for the SuperH SH4-202 MicroDev. ++ * ++ * Copyright (C) 2004 SuperH, Inc. ++ * Copyright (C) 2004 Paul Mundt ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ ++#include <linux/module.h> ++#include <linux/init.h> ++#include <linux/kernel.h> ++#include <linux/types.h> ++#include <linux/mtd/mtd.h> ++#include <linux/mtd/map.h> ++#include <linux/mtd/partitions.h> ++#include <asm/io.h> ++ ++/* ++ * The SH4-202 MicroDev has 32M of Intel StrataFlash mapped into the ++ * beginning of the FEMI address space (mapped to P0). MicroDev flash ++ * consists of 2x16M chips, mapped contiguously, and accessed with a ++ * 32-bit buswidth. ++ * ++ * Additionally, the MicroDev also supports booting from an EEPROM. ++ * In the event that the EEPROM is configured, it is mapped in the ++ * same address space window as the StrataFlash. As such, we can only ++ * use one at a time. ++ * ++ * Since the EEPROM is only accessible with an 8-bit buswidth, flash ++ * is preferrable as far as performance is concerned. ++ */ ++struct map_info microdev_flash_map = { ++ .name = "MicroDev Flash", ++ .size = 0x02000000, ++ .bankwidth = 4, ++}; ++ ++struct map_info microdev_eeprom_map = { ++ .name = "MicroDev EEPROM", ++ .size = 0x00100000, ++ .bankwidth = 1, ++}; ++ ++static const char *probes[] = { "RedBoot", "cmdlinepart", NULL }; ++static struct mtd_partition *parsed_parts; ++ ++/* ++ * Default partition map. ++ */ ++static struct mtd_partition microdev_partitions[] = { ++#ifdef CONFIG_MTD_PARTITIONS ++ { ++ .name = "bootloader", ++ .size = 0x00080000, ++ .mask_flags = MTD_WRITEABLE, /* force read-only */ ++ }, { ++ .name = "User FS", ++ .offset = MTDPART_OFS_APPEND, ++ .size = MTDPART_SIZ_FULL, ++ }, ++#endif ++}; ++ ++static struct mtd_info *microdev_flash; ++static struct mtd_info *microdev_eeprom; ++static struct mtd_info *microdev_mtd; ++ ++static void show_map_info(struct map_info *info) ++{ ++ unsigned long addr; ++ ++ if (!info) ++ return; ++ ++ addr = info->phys & 0x1fffffff; ++ ++ printk(KERN_NOTICE "%s at 0x%08lx:0x%08lx, using a %d-bit bankwidth.\n", ++ info->name, addr, addr + info->size, info->bankwidth << 3); ++} ++ ++static int __init microdev_map_init(void) ++{ ++ struct mtd_partition *parts; ++ int nr_parts, parsed_nr_parts; ++ ++ /* Flash mapped at FEMI area 0 */ ++ microdev_flash_map.phys = 0; ++ microdev_flash_map.virt = (void __iomem *)P2SEGADDR(0); ++ ++ /* EEPROM mapped in the same place */ ++ microdev_eeprom_map.phys = 0; ++ microdev_eeprom_map.virt = (void __iomem *)P2SEGADDR(0); ++ ++ simple_map_init(µdev_flash_map); ++ simple_map_init(µdev_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", µdev_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", µdev_eeprom_map); ++ if (!microdev_eeprom) { ++ /* Nope.. */ ++ printk(KERN_ERR "nothing found\n"); ++ return -ENXIO; ++ } ++ } ++ ++ if (microdev_flash) { ++ microdev_mtd = microdev_flash; ++ show_map_info(µdev_flash_map); ++ } else { ++ microdev_mtd = microdev_eeprom; ++ show_map_info(µdev_eeprom_map); ++ } ++ ++ microdev_mtd->owner = THIS_MODULE; ++ ++ /* Start out with a static map.. */ ++ parts = microdev_partitions; ++ nr_parts = ARRAY_SIZE(microdev_partitions); ++ ++#ifdef CONFIG_MTD_PARTITIONS ++ /* Try to parse the partitions */ ++ parsed_nr_parts = parse_mtd_partitions(microdev_mtd, probes, &parsed_parts, 0); ++ if (parsed_nr_parts > 0) { ++ parts = parsed_parts; ++ nr_parts = parsed_nr_parts; ++ } ++#endif ++ ++ if (nr_parts > 0) { ++ add_mtd_partitions(microdev_mtd, parts, nr_parts); ++ } else { ++ add_mtd_device(microdev_mtd); ++ } ++ ++ return 0; ++} ++ ++static void __exit microdev_map_exit(void) ++{ ++ if (parsed_parts) { ++ del_mtd_partitions(microdev_mtd); ++ } else { ++ del_mtd_device(microdev_mtd); ++ } ++ ++ map_destroy(microdev_mtd); ++} ++ ++module_init(microdev_map_init); ++module_exit(microdev_map_exit); ++ ++MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>"); ++MODULE_DESCRIPTION("MTD map driver for SuperH SH4-202 MicroDev"); ++MODULE_LICENSE("GPL"); ++ +diff -ruN linux-2.6.17-vanilla/drivers/mtd/maps/rts7751r2d-flash.c linux-2.6.17/drivers/mtd/maps/rts7751r2d-flash.c +--- linux-2.6.17-vanilla/drivers/mtd/maps/rts7751r2d-flash.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/mtd/maps/rts7751r2d-flash.c 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,167 @@ ++/* -------------------------------------------------------------------- */ ++/* rts7751r2d-flash.c: */ ++/* -------------------------------------------------------------------- */ ++/* This program is free software; you can redistribute it and/or modify ++ it under the terms of the GNU General Public License as published by ++ the Free Software Foundation; either version 2 of the License, or ++ (at your option) any later version. ++ ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++ ++ You should have received a copy of the GNU General Public License ++ along with this program; if not, write to the Free Software ++ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ ++ Copyright 2003 (c) Lineo uSolutions,Inc. ++*/ ++/* -------------------------------------------------------------------- */ ++ ++#include <linux/config.h> ++#include <linux/module.h> ++#include <linux/types.h> ++#include <linux/kernel.h> ++#include <linux/init.h> ++ ++#include <linux/mtd/mtd.h> ++#include <linux/mtd/map.h> ++#include <linux/mtd/partitions.h> ++ ++#include <asm/io.h> ++ ++#undef FLASH4M_16BIT ++#define FLASH16M_16BIT ++ ++#if defined(FLASH4M_16BIT) ++#define RTS7751R2D_FLASH_SIZE 0x00100000 ++#else ++#define RTS7751R2D_FLASH_SIZE 0x01000000 ++#endif ++ ++static struct map_info rts7751r2d_map = { ++ .name = "SH-Graphic flash", ++ .bankwidth = 2, ++ .size = RTS7751R2D_FLASH_SIZE, ++}; ++ ++/* ++ * Here are partition information for all known SH-Graphic based devices. ++ * See include/linux/mtd/partitions.h for definition of the mtd_partition ++ * structure. ++ * ++ * The *_max_flash_size is the maximum possible mapped flash size which ++ * is not necessarily the actual flash size. It must correspond to the ++ * value specified in the mapping definition defined by the ++ * "struct map_desc *_io_desc" for the corresponding machine. ++ */ ++ ++#if defined(FLASH4M_16BIT) ++static struct mtd_partition rts7751r2d_partitions[] = { ++ { ++ .name = "bootloader", ++ .size = 0x00080000, ++ .offset = 0xa0000000, ++ .mask_flags = MTD_WRITEABLE, /* force read-only */ ++ },{ ++ .name = "SH-Graphic jffs", ++ .size = 0x00080000, ++ .offset = 0xa0080000, ++ } ++}; ++#else ++static struct mtd_partition rts7751r2d_partitions[] = { ++ { ++ .name = "bootloader", ++ .size = 0x00020000, ++ .offset = 0x00000000, ++ .mask_flags = MTD_WRITEABLE, /* force read-only */ ++ },{ ++ .name = "mtdblock1", ++ .size = 0x00300000, ++ .offset = 0x00020000, ++ },{ ++ .name = "mtdblock2", ++ .size = 0x004e0000, ++ .offset = 0x00320000, ++ },{ ++ .name = "mtdblock3", ++ .size = 0x00800000, ++ .offset = 0x00800000, ++ } ++}; ++#endif ++ ++static struct mtd_partition *parsed_parts; ++static struct mtd_info *mymtd; ++ ++int __init rts7751r2d_mtd_init(void) ++{ ++ struct mtd_partition *parts; ++ int nb_parts = 0; ++ int parsed_nr_parts = 0; ++ char *part_type; ++ ++ /* Default flash buswidth */ ++ ++ /* ++ * Static partition definition selection ++ */ ++ part_type = "static"; ++ parts = rts7751r2d_partitions; ++ ++ nb_parts = ARRAY_SIZE(rts7751r2d_partitions); ++ rts7751r2d_map.phys = 0; ++ rts7751r2d_map.virt = P2SEGADDR(0); ++ ++ /* ++ * Now let's probe for the actual flash. Do it here since ++ * specific machine settings might have been set above. ++ */ ++ printk(KERN_NOTICE "RTS7751R2D flash: probing %d-bit flash bus\n", ++ rts7751r2d_map.bankwidth*8); ++ simple_map_init(&rts7751r2d_map); ++ ++ mymtd = do_map_probe("cfi_probe", &rts7751r2d_map); ++ if (!mymtd) ++ return -ENXIO; ++ ++ mymtd->owner = THIS_MODULE; ++ mymtd->erasesize = 0x10000; ++ ++ /* ++ * Dynamic partition selection stuff (might override the static ones) ++ */ ++ ++ if (parsed_nr_parts > 0) { ++ parts = parsed_parts; ++ nb_parts = parsed_nr_parts; ++ } ++ ++ if (nb_parts == 0) { ++ printk(KERN_NOTICE "RTS7751R2D partition info available, registering whole flash at once\n"); ++ add_mtd_device(mymtd); ++ } else { ++ printk(KERN_NOTICE "Using %s partition definition\n", part_type); ++ add_mtd_partitions(mymtd, parts, nb_parts); ++ } ++ return 0; ++} ++ ++static void __exit rts7751r2d_mtd_cleanup(void) ++{ ++ if (mymtd) { ++ del_mtd_partitions(mymtd); ++ map_destroy(mymtd); ++ if (parsed_parts) ++ kfree(parsed_parts); ++ } ++} ++ ++module_init(rts7751r2d_mtd_init); ++module_exit(rts7751r2d_mtd_cleanup); ++ ++MODULE_LICENSE("GPL"); ++MODULE_AUTHOR("Lineo uSolutions,Inc."); ++MODULE_DESCRIPTION("MTD map driver for RTS7751R2D base board"); +diff -ruN linux-2.6.17-vanilla/drivers/mtd/mtdpart.c linux-2.6.17/drivers/mtd/mtdpart.c +--- linux-2.6.17-vanilla/drivers/mtd/mtdpart.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/mtd/mtdpart.c 2006-07-12 16:54:24.000000000 +0000 +@@ -481,6 +481,14 @@ + printk (KERN_NOTICE "0x%08x-0x%08x : \"%s\"\n", slave->offset, + slave->offset + slave->mtd.size, slave->mtd.name); + ++#ifdef CONFIG_SUPERH ++ /* ++ * slave->offset contains a P2 address, this confuses the rest ++ * of the sanity checks, so kick it back down to P0. ++ */ ++ slave->offset &= 0x1fffffff; ++#endif ++ + /* let's do some sanity checks */ + if (slave->offset >= master->size) { + /* let's register it anyway to preserve ordering */ +diff -ruN linux-2.6.17-vanilla/drivers/net/8139too.c linux-2.6.17/drivers/net/8139too.c +--- linux-2.6.17-vanilla/drivers/net/8139too.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/net/8139too.c 2006-07-12 16:54:24.000000000 +0000 +@@ -257,7 +257,7 @@ + {0x018a, 0x0106, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 }, + {0x126c, 0x1211, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 }, + {0x1743, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 }, +- {0x021b, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 }, ++ {0x021b, 0x8139, PCI_ANY_ID, PCI_ANY_ID, 0, 0, RTL8139 }, + + #ifdef CONFIG_SH_SECUREEDGE5410 + /* Bogus 8139 silicon reports 8129 without external PROM :-( */ +@@ -970,11 +970,17 @@ + ioaddr = tp->mmio_addr; + assert (ioaddr != NULL); + ++#ifdef CONFIG_SH_SECUREEDGE5410 ++ /* Don't rely on the eeprom, get MAC from chip. */ ++ for (i = 0; i < 6; i++) ++ dev->dev_addr[i] = readb(ioaddr + MAC0 + i); ++#else + addr_len = read_eeprom (ioaddr, 0, 8) == 0x8129 ? 8 : 6; + for (i = 0; i < 3; i++) + ((u16 *) (dev->dev_addr))[i] = + le16_to_cpu (read_eeprom (ioaddr, i + 7, addr_len)); + memcpy(dev->perm_addr, dev->dev_addr, dev->addr_len); ++#endif + + /* The Rtl8139-specific entries in the device structure. */ + dev->open = rtl8139_open; +diff -ruN linux-2.6.17-vanilla/drivers/net/8390.c linux-2.6.17/drivers/net/8390.c +--- linux-2.6.17-vanilla/drivers/net/8390.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/net/8390.c 2006-07-12 16:54:24.000000000 +0000 +@@ -108,6 +108,13 @@ + int ei_debug = 1; + #endif + ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++#ifdef ETH_ZLEN ++#undef ETH_ZLEN ++#define ETH_ZLEN 64 ++#endif ++#endif ++ + /* Index to functions. */ + static void ei_tx_intr(struct net_device *dev); + static void ei_tx_err(struct net_device *dev); +@@ -938,7 +945,11 @@ + */ + + if (netif_running(dev)) ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++ outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR); ++#else + outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR); ++#endif + outb_p(E8390_NODMA + E8390_PAGE1, e8390_base + E8390_CMD); + for(i = 0; i < 8; i++) + { +@@ -951,11 +962,23 @@ + outb_p(E8390_NODMA + E8390_PAGE0, e8390_base + E8390_CMD); + + if(dev->flags&IFF_PROMISC) ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++ outb_p(E8390_RXCONFIG | 0x40 | 0x18, e8390_base + EN0_RXCR); ++#else + outb_p(E8390_RXCONFIG | 0x18, e8390_base + EN0_RXCR); ++#endif + else if(dev->flags&IFF_ALLMULTI || dev->mc_list) ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++ outb_p(E8390_RXCONFIG | 0x40 | 0x08, e8390_base + EN0_RXCR); ++#else + outb_p(E8390_RXCONFIG | 0x08, e8390_base + EN0_RXCR); ++#endif + else ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++ outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR); ++#else + outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR); ++#endif + } + + /* +@@ -1029,8 +1052,13 @@ + struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev); + int i; + int endcfg = ei_local->word16 ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++ ? (0x00 | ENDCFG_WTS | (ei_local->bigendian ? ENDCFG_BOS : 0)) ++ : 0x00; ++#else + ? (0x48 | ENDCFG_WTS | (ei_local->bigendian ? ENDCFG_BOS : 0)) + : 0x48; ++#endif + + if(sizeof(struct e8390_pkt_hdr)!=4) + panic("8390.c: header struct mispacked\n"); +@@ -1041,7 +1069,11 @@ + outb_p(0x00, e8390_base + EN0_RCNTLO); + outb_p(0x00, e8390_base + EN0_RCNTHI); + /* Set to monitor and loopback mode -- this is vital!. */ ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++ outb_p(E8390_RXOFF | 0x40, e8390_base + EN0_RXCR); /* 0x20 */ ++#else + outb_p(E8390_RXOFF, e8390_base + EN0_RXCR); /* 0x20 */ ++#endif + outb_p(E8390_TXOFF, e8390_base + EN0_TXCR); /* 0x02 */ + /* Set the transmit page and receive ring. */ + outb_p(ei_local->tx_start_page, e8390_base + EN0_TPSR); +@@ -1078,7 +1110,11 @@ + outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, e8390_base+E8390_CMD); + outb_p(E8390_TXCONFIG, e8390_base + EN0_TXCR); /* xmit on. */ + /* 3c503 TechMan says rxconfig only after the NIC is started. */ ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++ outb_p(E8390_RXCONFIG | 0x40, e8390_base + EN0_RXCR); /* rx on, */ ++#else + outb_p(E8390_RXCONFIG, e8390_base + EN0_RXCR); /* rx on, */ ++#endif + do_set_multicast_list(dev); /* (re)load the mcast table */ + } + } +diff -ruN linux-2.6.17-vanilla/drivers/net/88796l.c linux-2.6.17/drivers/net/88796l.c +--- linux-2.6.17-vanilla/drivers/net/88796l.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/net/88796l.c 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,95 @@ ++#define NE_EEPROM 0x14 ++ ++static inline void delay(void); ++static unsigned char asix88796_eeprom_getbit(int ioaddr); ++static void asix88796_eeprom_send(int ioaddr, int value); ++static unsigned short asix88796_eeprom_get(int ioaddr); ++static void asix88796_eeprom_setaddr(int ioaddr, int addr); ++static void asix88796_eeprom_command(int ioaddr); ++static void asix88796_eeprom_read(int ioaddr, unsigned char *buff); ++ ++static inline void delay(void) ++{ ++ ctrl_inw(0xa0000000); ++} ++ ++static unsigned char asix88796_eeprom_getbit(int ioaddr) ++{ ++ unsigned char value; ++ ++ outb(inb(ioaddr + NE_EEPROM) & 0x7f, ioaddr + NE_EEPROM); ++ delay(); ++ value = (inb(ioaddr + NE_EEPROM) & 0x40) >> 6; ++ outb(inb(ioaddr + NE_EEPROM) | 0x80, ioaddr + NE_EEPROM); ++ delay(); ++ ++ return value; ++} ++ ++static void asix88796_eeprom_send(int ioaddr, int value) ++{ ++ if (value) ++ outb(inb(ioaddr + NE_EEPROM) | 0x20, ioaddr + NE_EEPROM); ++ else ++ outb(inb(ioaddr + NE_EEPROM) & 0xdf, ioaddr + NE_EEPROM); ++ outb(inb(ioaddr + NE_EEPROM) & 0x7f, ioaddr + NE_EEPROM); ++ delay(); ++ outb(inb(ioaddr + NE_EEPROM) | 0x80, ioaddr + NE_EEPROM); ++ delay(); ++ outb(inb(ioaddr + NE_EEPROM) & 0xdf, ioaddr + NE_EEPROM); ++} ++ ++static unsigned short asix88796_eeprom_get(int ioaddr) ++{ ++ unsigned short value = 0; ++ int i; ++ ++ asix88796_eeprom_getbit(ioaddr); ++ for (i=0; i<16; i++) { ++ value <<= 1; ++ value |= asix88796_eeprom_getbit(ioaddr); ++ } ++ ++ return value; ++} ++ ++static void asix88796_eeprom_setaddr(int ioaddr, int addr) ++{ ++ asix88796_eeprom_send(ioaddr, addr & 0x0080); ++ asix88796_eeprom_send(ioaddr, addr & 0x0040); ++ asix88796_eeprom_send(ioaddr, addr & 0x0020); ++ asix88796_eeprom_send(ioaddr, addr & 0x0010); ++ asix88796_eeprom_send(ioaddr, addr & 0x0008); ++ asix88796_eeprom_send(ioaddr, addr & 0x0004); ++ asix88796_eeprom_send(ioaddr, addr & 0x0002); ++ asix88796_eeprom_send(ioaddr, addr & 0x0001); ++} ++ ++static void asix88796_eeprom_command(int ioaddr) ++{ ++ asix88796_eeprom_send(ioaddr, 0); ++ asix88796_eeprom_send(ioaddr, 1); ++ asix88796_eeprom_send(ioaddr, 1); ++ asix88796_eeprom_send(ioaddr, 0); ++} ++ ++static void asix88796_eeprom_read(int ioaddr, unsigned char *buff) ++{ ++ int i; ++ int addr = 0; ++ unsigned short value; ++ ++ for (i=0; i<3; i++) { ++ outb(inb(ioaddr + NE_EEPROM) | 0x10, ioaddr + NE_EEPROM); ++ outb(inb(ioaddr + NE_EEPROM) & 0xdf, ioaddr + NE_EEPROM); ++ delay(); ++ asix88796_eeprom_command(ioaddr); ++ asix88796_eeprom_setaddr(ioaddr, addr++); ++ value = asix88796_eeprom_get(ioaddr); ++ *buff++ = (unsigned char)(value & 0xff); ++ *buff++ = (unsigned char)((value >> 8) & 0xff); ++ outb(inb(ioaddr + NE_EEPROM) & 0x7f, ioaddr + NE_EEPROM); ++ outb(inb(ioaddr + NE_EEPROM) & 0xdf, ioaddr + NE_EEPROM); ++ outb(inb(ioaddr + NE_EEPROM) & 0xef, ioaddr + NE_EEPROM); ++ } ++} +diff -ruN linux-2.6.17-vanilla/drivers/net/CVS/Entries linux-2.6.17/drivers/net/CVS/Entries +--- linux-2.6.17-vanilla/drivers/net/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/net/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,7 @@ ++/8390.c/1.9/Sat Jan 7 20:02:47 2006/-ko/ ++/88796l.c/1.1/Sat Jan 7 20:02:47 2006/-ko/ ++/stnic.c/1.7/Wed Jan 4 17:53:54 2006/-ko/ ++/8139too.c/1.51/Wed Jul 5 14:51:19 2006/-ko/ ++/Kconfig/1.27/Wed Jul 5 14:51:19 2006/-ko/ ++/ne.c/1.10/Wed Jul 5 14:51:19 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/net/CVS/Repository linux-2.6.17/drivers/net/CVS/Repository +--- linux-2.6.17-vanilla/drivers/net/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/net/CVS/Repository 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/net +diff -ruN linux-2.6.17-vanilla/drivers/net/CVS/Root linux-2.6.17/drivers/net/CVS/Root +--- linux-2.6.17-vanilla/drivers/net/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/net/CVS/Root 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/net/Kconfig linux-2.6.17/drivers/net/Kconfig +--- linux-2.6.17-vanilla/drivers/net/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/net/Kconfig 2006-07-12 16:54:24.000000000 +0000 +@@ -1078,7 +1078,7 @@ + + config NE2000 + tristate "NE2000/NE1000 support" +- depends on NET_ISA || (Q40 && m) || M32R ++ depends on NET_ISA || (Q40 && m) || M32R || SUPERH + select CRC32 + ---help--- + If you have a network (Ethernet) card of this type, say Y and read +diff -ruN linux-2.6.17-vanilla/drivers/net/ne.c linux-2.6.17/drivers/net/ne.c +--- linux-2.6.17-vanilla/drivers/net/ne.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/net/ne.c 2006-07-12 16:54:24.000000000 +0000 +@@ -142,6 +142,10 @@ + #elif defined(CONFIG_PLAT_OAKS32R) || \ + defined(CONFIG_TOSHIBA_RBTX4927) || defined(CONFIG_TOSHIBA_RBTX4938) + # define DCR_VAL 0x48 /* 8-bit mode */ ++#elif defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || \ ++ defined(CONFIG_SH_R7780RP) ++# include "88796l.c" ++# define DCR_VAL 0x01 + #else + # define DCR_VAL 0x49 + #endif +@@ -191,6 +195,11 @@ + + SET_MODULE_OWNER(dev); + ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++ base_addr = AX88796L_IO_BASE; ++ dev->irq = IRQ_ONETH; ++#endif ++ + /* First check any supplied i/o locations. User knows best. <cough> */ + if (base_addr > 0x1ff) /* Check a single specified location. */ + return ne_probe1(dev, base_addr); +@@ -324,7 +333,11 @@ + if (ei_debug && version_printed++ == 0) + printk(KERN_INFO "%s" KERN_INFO "%s", version1, version2); + ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++ printk(KERN_INFO "ASIX AX88796L ethercard probe at %#3x:", ioaddr); ++#else + printk(KERN_INFO "NE*000 ethercard probe at %#3x:", ioaddr); ++#endif + + /* A user with a poor card that fails to ack the reset, or that + does not have a valid 0x57,0x57 signature can still use this +@@ -365,12 +378,20 @@ + struct {unsigned char value, offset; } program_seq[] = + { + {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/ ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++ {0x00, EN0_DCFG}, /* Set byte-wide (0x00) access. */ ++#else + {0x48, EN0_DCFG}, /* Set byte-wide (0x48) access. */ ++#endif + {0x00, EN0_RCNTLO}, /* Clear the count regs. */ + {0x00, EN0_RCNTHI}, + {0x00, EN0_IMR}, /* Mask completion irq. */ + {0xFF, EN0_ISR}, ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++ {E8390_RXOFF|0x40, EN0_RXCR}, /* 0x60 Set to monitor */ ++#else + {E8390_RXOFF, EN0_RXCR}, /* 0x20 Set to monitor */ ++#endif + {E8390_TXOFF, EN0_TXCR}, /* 0x02 and loopback mode. */ + {32, EN0_RCNTLO}, + {0x00, EN0_RCNTHI}, +@@ -395,6 +416,9 @@ + for (i = 0; i < 16; i++) + SA_prom[i] = SA_prom[i+i]; + /* We must set the 8390 for word mode. */ ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++ asix88796_eeprom_read(ioaddr, SA_prom); ++#endif + outb_p(DCR_VAL, ioaddr + EN0_DCFG); + start_page = NESM_START_PG; + +@@ -426,7 +450,11 @@ + + /* Set up the rest of the parameters. */ + if (neX000 || bad_card || copam) { ++#if defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R77703DRP) || defined(CONFIG_SH_R7780RP) ++ name = (wordlength == 2) ? "AX88796L" : "NE1000"; ++#else + name = (wordlength == 2) ? "NE2000" : "NE1000"; ++#endif + } + else if (ctron) + { +diff -ruN linux-2.6.17-vanilla/drivers/net/stnic.c linux-2.6.17/drivers/net/stnic.c +--- linux-2.6.17-vanilla/drivers/net/stnic.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/net/stnic.c 2006-07-12 16:54:24.000000000 +0000 +@@ -20,7 +20,7 @@ + + #include <asm/system.h> + #include <asm/io.h> +-#include <asm/se/se.h> ++#include <asm/se.h> + #include <asm/machvec.h> + #ifdef CONFIG_SH_STANDARD_BIOS + #include <asm/sh_bios.h> +diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/CVS/Entries linux-2.6.17/drivers/pcmcia/CVS/Entries +--- linux-2.6.17-vanilla/drivers/pcmcia/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/pcmcia/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,5 @@ ++/hd64461_ss.c/1.16/Mon Mar 27 23:59:10 2006/-ko/ ++/yenta_socket.c/1.13/Mon Mar 27 21:06:14 2006/-ko/ ++/Kconfig/1.12/Wed Jul 5 14:51:21 2006/-ko/ ++/Makefile/1.11/Wed Jul 5 14:51:21 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/CVS/Repository linux-2.6.17/drivers/pcmcia/CVS/Repository +--- linux-2.6.17-vanilla/drivers/pcmcia/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/pcmcia/CVS/Repository 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/pcmcia +diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/CVS/Root linux-2.6.17/drivers/pcmcia/CVS/Root +--- linux-2.6.17-vanilla/drivers/pcmcia/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/pcmcia/CVS/Root 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/Kconfig linux-2.6.17/drivers/pcmcia/Kconfig +--- linux-2.6.17-vanilla/drivers/pcmcia/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/pcmcia/Kconfig 2006-07-12 16:54:24.000000000 +0000 +@@ -179,6 +179,19 @@ + "Bridge" is the name used for the hardware inside your computer that + PCMCIA cards are plugged into. If unsure, say N. + ++config HD64461_PCMCIA ++ tristate "HD64461 host bridge support" ++ depends on HD64461 && PCMCIA ++ ++config HD64461_PCMCIA_SOCKETS ++ int ' HD64461 PCMCIA sockets' ++ default 1 ++ depends on HD64461_PCMCIA ++ ++config HD64465_PCMCIA ++ tristate "HD64465 host bridge support" ++ depends on HD64465 && PCMCIA ++ + config PCMCIA_M8XX + tristate "MPC8xx PCMCIA support" + depends on PCMCIA && PPC && 8xx +@@ -189,10 +202,6 @@ + + This driver is also available as a module called m8xx_pcmcia. + +-config HD64465_PCMCIA +- tristate "HD64465 host bridge support" +- depends on HD64465 && PCMCIA +- + config PCMCIA_AU1X00 + tristate "Au1x00 pcmcia support" + depends on SOC_AU1X00 && PCMCIA +diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/Makefile linux-2.6.17/drivers/pcmcia/Makefile +--- linux-2.6.17-vanilla/drivers/pcmcia/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/pcmcia/Makefile 2006-07-12 16:54:24.000000000 +0000 +@@ -25,8 +25,9 @@ + obj-$(CONFIG_I82365) += i82365.o + obj-$(CONFIG_I82092) += i82092.o + obj-$(CONFIG_TCIC) += tcic.o +-obj-$(CONFIG_PCMCIA_M8XX) += m8xx_pcmcia.o ++obj-$(CONFIG_HD64461_PCMCIA) += hd64461_ss.o + obj-$(CONFIG_HD64465_PCMCIA) += hd64465_ss.o ++obj-$(CONFIG_PCMCIA_M8XX) += m8xx_pcmcia.o + obj-$(CONFIG_PCMCIA_SA1100) += sa11xx_core.o sa1100_cs.o + obj-$(CONFIG_PCMCIA_SA1111) += sa11xx_core.o sa1111_cs.o + obj-$(CONFIG_PCMCIA_PXA2XX) += pxa2xx_core.o pxa2xx_cs.o +diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/hd64461_ss.c linux-2.6.17/drivers/pcmcia/hd64461_ss.c +--- linux-2.6.17-vanilla/drivers/pcmcia/hd64461_ss.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/pcmcia/hd64461_ss.c 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,679 @@ ++/* ++ * drivers/pcmcia/hd64461_ss.c ++ * ++ * PCMCIA support for Hitachi HD64461 companion chip ++ * by Andriy Skulysh <askulysh@image.kiev.ua> 2002, 2003, 2004 ++ * ++ * based on hd64461_ss.c by Greg Banks <gbanks@pocketpenguins.com> ++ * ++ */ ++#include <linux/config.h> ++#include <linux/types.h> ++#include <linux/module.h> ++#include <linux/init.h> ++#include <linux/string.h> ++#include <linux/kernel.h> ++#include <linux/ioport.h> ++#include <linux/mm.h> ++#include <linux/vmalloc.h> ++#include <linux/irq.h> ++#include <linux/interrupt.h> ++#include <linux/platform_device.h> ++#include <pcmcia/cs_types.h> ++#include <pcmcia/cs.h> ++#include <pcmcia/ss.h> ++#include <pcmcia/bulkmem.h> ++#include <pcmcia/cistpl.h> ++#include "cs_internal.h" ++#include <asm/io.h> ++#include <asm/hd64461.h> ++#include <asm/hp6xx/hp6xx.h> ++ ++#define MODNAME "HD64461_ss" ++ ++#ifdef DEBUG ++static int hd64461_pc_debug = 2; ++ ++module_param_named(pc_debug, hd64461_pc_debug, int, 0644); ++ ++#define DPRINTK(n, args...) \ ++do { \ ++ if (hd64461_pc_debug >= (n)) \ ++ printk(args); \ ++} while (0) ++#else ++#define DPRINTK(n, args...) do { } while (0) ++#endif ++ ++#define HD64461_PCC(s,reg) \ ++ ( CONFIG_HD64461_IOBASE-HD64461_STBCR+ ( (s) ? HD64461_PCC1##reg : \ ++ HD64461_PCC0##reg ) ) ++ ++typedef struct hd64461_socket_t { ++ unsigned int irq; ++ unsigned long mem_base; ++ socket_state_t state; ++ pccard_mem_map mem_maps[MAX_WIN]; ++ unsigned char IC_memory; ++ struct pcmcia_socket socket; ++ u8 cscier; ++} hd64461_socket_t; ++ ++static hd64461_socket_t hd64461_sockets[CONFIG_HD64461_PCMCIA_SOCKETS]; ++ ++#define hd64461_sockno(sp) (sp - hd64461_sockets) ++ ++static void hd64461_enable_int(unsigned int irq) ++{ ++ u8 cscier; ++ u32 cscier_reg = HD64461_PCC(0, CSCIER); ++ ++ cscier = ctrl_inb(cscier_reg); ++ cscier &= ~HD64461_PCCCSCIER_IREQE_MASK; ++ cscier |= HD64461_PCCCSCIER_IREQE_LEVEL; ++ ctrl_outb(cscier, cscier_reg); ++} ++ ++static void hd64461_disable_int(unsigned int irq) ++{ ++ u8 cscier; ++ u32 cscier_reg = HD64461_PCC(0, CSCIER); ++ ++ cscier = ctrl_inb(cscier_reg); ++ cscier &= ~HD64461_PCCCSCIER_IREQE_MASK; ++ ctrl_outb(cscier, cscier_reg); ++} ++ ++static void hd64461_enable_irq(unsigned int irq) ++{ ++ DPRINTK(3, "hd64461_enable_irq(irq=%d)\n", irq); ++ hd64461_enable_int(irq); ++} ++ ++static void hd64461_disable_irq(unsigned int irq) ++{ ++ DPRINTK(3, "hd64461_disable_irq(irq=%d)\n", irq); ++ hd64461_disable_int(irq); ++} ++ ++static unsigned int hd64461_startup_irq(unsigned int irq) ++{ ++ DPRINTK(3, "hd64461_startup_irq(irq=%d)\n", irq); ++ hd64461_enable_irq(irq); ++ return 0; ++} ++ ++static void hd64461_shutdown_irq(unsigned int irq) ++{ ++ DPRINTK(3, "hd64461_shutdown_irq(irq=%d)\n", irq); ++ hd64461_disable_irq(irq); ++} ++ ++static void hd64461_mask_and_ack_irq(unsigned int irq) ++{ ++ DPRINTK(3, "hd64461_mask_and_ack_irq(irq=%d)\n", irq); ++ hd64461_disable_irq(irq); ++} ++ ++static void hd64461_end_irq(unsigned int irq) ++{ ++ DPRINTK(3, "hd64461_end_irq(irq=%d)\n", irq); ++ hd64461_enable_irq(irq); ++} ++ ++static struct hw_interrupt_type hd64461_ss_irq_type = { ++ .typename = "HD64461_SS-IRQ", ++ .startup = hd64461_startup_irq, ++ .shutdown = hd64461_shutdown_irq, ++ .enable = hd64461_enable_irq, ++ .disable = hd64461_disable_irq, ++ .ack = hd64461_mask_and_ack_irq, ++ .end = hd64461_end_irq ++}; ++ ++static int hd64461_set_voltage(int sock, int Vcc, int Vpp) ++{ ++ u8 gcr, scr; ++ u16 stbcr; ++ u32 gcr_reg = HD64461_PCC(sock, GCR); ++ u32 scr_reg = HD64461_PCC(sock, SCR); ++ DPRINTK(2, "hd64461_set_voltage(%d, %d, %d)\n", sock, Vcc, Vpp); ++ ++ gcr = ctrl_inb(gcr_reg); ++ scr = ctrl_inb(scr_reg); ++ ++ switch (Vcc) { ++ case 0: ++ gcr |= HD64461_PCCGCR_VCC0; ++ scr |= HD64461_PCCSCR_VCC1; ++ break; ++ case 33: ++ if (sock == 1) { ++ gcr &= ~HD64461_PCCGCR_VCC0; ++ scr &= ~HD64461_PCCSCR_VCC1; ++ } else { ++ gcr |= HD64461_PCCGCR_VCC0; ++ scr &= ~HD64461_PCCSCR_VCC1; ++ } ++ break; ++ case 50: ++ gcr &= ~HD64461_PCCGCR_VCC0; ++ scr &= ~HD64461_PCCSCR_VCC1; ++ break; ++ } ++ ++ ctrl_outb(gcr, gcr_reg); ++ ctrl_outb(scr, scr_reg); ++ ++ stbcr = inw(HD64461_STBCR); ++ ++ if (Vcc > 0) { ++ stbcr &= ~(sock == 0 ? HD64461_STBCR_SPC0ST : ++ HD64461_STBCR_SPC1ST); ++ } else { ++ stbcr |= (sock == 0 ? HD64461_STBCR_SPC0ST : ++ HD64461_STBCR_SPC1ST); ++ } ++ ++ outw(stbcr, HD64461_STBCR); ++ ++ return 1; ++} ++ ++static int hd64461_init(struct pcmcia_socket *s) ++{ ++ u16 gpadr; ++ hd64461_socket_t *sp = container_of(s, struct hd64461_socket_t, socket); ++ ++ DPRINTK(0, "hd64461_init(%d)\n", s->sock); ++ ++ sp->state.Vcc = 0; ++ sp->state.Vpp = 0; ++ hd64461_set_voltage(s->sock, 0, 0); ++ ++ if (mach_is_hp6xx() && s->sock == 0) { ++ gpadr = inw(HD64461_GPADR); ++ gpadr &= ~HD64461_GPADR_PCMCIA0; ++ outw(gpadr, HD64461_GPADR); ++ } ++ ++ return 0; ++} ++ ++static int hd64461_suspend(struct pcmcia_socket *s) ++{ ++ u16 gpadr; ++ u8 gcr; ++ u32 gcr_reg = HD64461_PCC(s->sock, GCR); ++ ++ DPRINTK(0, "hd64461_suspend(%d)\n", s->sock); ++ ++ gcr = ctrl_inb(gcr_reg); ++ gcr &= ~HD64461_PCCGCR_DRVE; ++ ctrl_outb(gcr, gcr_reg); ++ hd64461_set_voltage(s->sock, 0, 0); ++ ++ if ((mach_is_hp6xx())&&(s->sock == 0)) { ++ gpadr = inw(HD64461_GPADR); ++ gpadr |= HD64461_GPADR_PCMCIA0; ++ outw(gpadr, HD64461_GPADR); ++ } ++ ++ return 0; ++} ++ ++static int hd64461_get_status(struct pcmcia_socket *s, u32 * value) ++{ ++ u8 isr; ++ u32 status = 0; ++ hd64461_socket_t *sp = container_of(s, struct hd64461_socket_t, socket); ++ ++ isr = ctrl_inb(HD64461_PCC(s->sock, ISR)); ++ ++ if ((isr & HD64461_PCCISR_PCD_MASK) == 0) { ++ status |= SS_DETECT; ++ ++ if (sp->IC_memory) { ++ switch (isr & HD64461_PCCISR_BVD_MASK) { ++ case HD64461_PCCISR_BVD_BATGOOD: ++ break; ++ case HD64461_PCCISR_BVD_BATWARN: ++ status |= SS_BATWARN; ++ break; ++ default: ++ status |= SS_BATDEAD; ++ break; ++ } ++ ++ if (isr & HD64461_PCCISR_READY) ++ status |= SS_READY; ++ if (isr & HD64461_PCCISR_MWP) ++ status |= SS_WRPROT; ++ } else { ++ if (isr & HD64461_PCCISR_BVD1) ++ status |= SS_STSCHG; ++ } ++ ++ switch (isr & (HD64461_PCCISR_VS2 | HD64461_PCCISR_VS1)) { ++ case HD64461_PCCISR_VS1: ++ printk(KERN_NOTICE MODNAME ++ ": cannot handle X.XV card, ignored\n"); ++ status = 0; ++ break; ++ case 0: ++ case HD64461_PCCISR_VS2: ++ status |= SS_3VCARD; ++ break; ++ case HD64461_PCCISR_VS2 | HD64461_PCCISR_VS1: ++ break; ++ } ++ ++ if ((sp->state.Vcc != 0) || (sp->state.Vpp != 0)) ++ status |= SS_POWERON; ++ } ++ DPRINTK(0, "hd64461_get_status(%d) = %x\n", s->sock, status); ++ ++ *value = status; ++ return 0; ++} ++ ++static int hd64461_set_socket(struct pcmcia_socket *s, socket_state_t * state) ++{ ++ u32 flags; ++ u32 changed; ++ u8 gcr, cscier; ++ hd64461_socket_t *sp = container_of(s, struct hd64461_socket_t, socket); ++ u32 gcr_reg = HD64461_PCC(s->sock, GCR); ++ u32 cscier_reg = HD64461_PCC(s->sock, CSCIER); ++ ++ DPRINTK(0, "%s(sock=%d, flags=%x, csc_mask=%x, Vcc=%d, Vpp=%d, io_irq=%d)\n", ++ __FUNCTION__, s->sock, state->flags, state->csc_mask, state->Vcc, ++ state->Vpp, state->io_irq); ++ ++ local_irq_save(flags); ++ ++ if (state->Vpp != sp->state.Vpp || state->Vcc != sp->state.Vcc) { ++ if (!hd64461_set_voltage(s->sock, state->Vcc, state->Vpp)) { ++ local_irq_restore(flags); ++ return -EINVAL; ++ } ++ } ++ ++ changed = sp->state.csc_mask ^ state->csc_mask; ++ cscier = ctrl_inb(cscier_reg); ++ ++ if (changed & SS_DETECT) { ++ if (state->csc_mask & SS_DETECT) ++ cscier |= HD64461_PCCCSCIER_CDE; ++ else ++ cscier &= ~HD64461_PCCCSCIER_CDE; ++ } ++ ++ if (changed & SS_READY) { ++ if (state->csc_mask & SS_READY) ++ cscier |= HD64461_PCCCSCIER_RE; ++ else ++ cscier &= ~HD64461_PCCCSCIER_RE; ++ } ++ ++ if (changed & SS_BATDEAD) { ++ if (state->csc_mask & SS_BATDEAD) ++ cscier |= HD64461_PCCCSCIER_BDE; ++ else ++ cscier &= ~HD64461_PCCCSCIER_BDE; ++ } ++ ++ if (changed & SS_BATWARN) { ++ if (state->csc_mask & SS_BATWARN) ++ cscier |= HD64461_PCCCSCIER_BWE; ++ else ++ cscier &= ~HD64461_PCCCSCIER_BWE; ++ } ++ ++ if (changed & SS_STSCHG) { ++ if (state->csc_mask & SS_STSCHG) ++ cscier |= HD64461_PCCCSCIER_SCE; ++ else ++ cscier &= ~HD64461_PCCCSCIER_SCE; ++ } ++ ++ ctrl_outb(cscier, cscier_reg); ++ ++ changed = sp->state.flags ^ state->flags; ++ ++ gcr = ctrl_inb(gcr_reg); ++ ++ if (changed & SS_IOCARD) { ++ DPRINTK(0, "card type: %s\n", ++ (state->flags & SS_IOCARD ? "i/o" : "memory")); ++ if (state->flags & SS_IOCARD) { ++ if (s->sock == 1) { ++ printk(KERN_ERR ++ "socket 1 can be only IC Memory card\n"); ++ } else { ++ gcr |= HD64461_PCCGCR_PCCT; ++ sp->IC_memory = 0; ++ } ++ } else { ++ gcr &= ~HD64461_PCCGCR_PCCT; ++ sp->IC_memory = 1; ++ } ++ } ++ ++ if (changed & SS_RESET) { ++ DPRINTK(0, "%s reset card\n", ++ (state->flags & SS_RESET ? "start" : "stop")); ++ if (state->flags & SS_RESET) ++ gcr |= HD64461_PCCGCR_PCCR; ++ else ++ gcr &= ~HD64461_PCCGCR_PCCR; ++ } ++ ++ if (changed & SS_OUTPUT_ENA) { ++ DPRINTK(0, "%sabling card output\n", ++ (state->flags & SS_OUTPUT_ENA ? "en" : "dis")); ++ if (state->flags & SS_OUTPUT_ENA) ++ gcr |= HD64461_PCCGCR_DRVE; ++ else ++ gcr &= ~HD64461_PCCGCR_DRVE; ++ } ++ ++ DPRINTK(2, "cscier=%02x ", cscier); ++ DPRINTK(2, "gcr=%02x\n", gcr); ++ ctrl_outb(gcr, gcr_reg); ++ ++ sp->state = *state; ++ ++ local_irq_restore(flags); ++ ++ return 0; ++} ++ ++static int hd64461_set_io_map(struct pcmcia_socket *s, struct pccard_io_map *io) ++{ ++ /* this is not needed due to static mappings */ ++ DPRINTK(0, "hd64461_set_io_map(%d)\n", s->sock); ++ ++ return 0; ++} ++ ++static int hd64461_set_mem_map(struct pcmcia_socket *s, ++ struct pccard_mem_map *mem) ++{ ++ hd64461_socket_t *sp = container_of(s, struct hd64461_socket_t, socket); ++ struct pccard_mem_map *smem; ++ int map = mem->map; ++ unsigned long saddr; ++ ++ DPRINTK(0, "%s(sock=%d, map=%d, flags=0x%x,static_start=0x%08lx, card_start=0x%08x)\n", ++ __FUNCTION__, s->sock, map, mem->flags, mem->static_start, mem->card_start); ++ ++ if (map >= MAX_WIN) ++ return -EINVAL; ++ ++ smem = &sp->mem_maps[map]; ++ saddr = sp->mem_base + mem->card_start; ++ ++ if (!(mem->flags & MAP_ATTRIB)) ++ saddr += HD64461_PCC_WINDOW; ++ ++ mem->static_start = saddr; ++ *smem = *mem; ++ ++ return 0; ++} ++ ++static int hd64461_pcmcia_irq_demux(int irq, void *dev) ++{ ++ hd64461_socket_t *sp = (hd64461_socket_t *) dev; ++ unsigned char cscr; ++ unsigned cscr_reg = HD64461_PCC(0, CSCR); ++ ++ DPRINTK(3, "hd64461_pcmcia_irq_demux(irq= %d - ", irq); ++ ++ cscr = ctrl_inb(cscr_reg); ++ if (cscr & HD64461_PCCCSCR_IREQ) { ++ cscr &= ~HD64461_PCCCSCR_IREQ; ++ ctrl_outb(cscr, cscr_reg); ++ irq = sp->socket.pci_irq; ++ } ++ ++ DPRINTK(3, "%d)\n", irq); ++ ++ return irq; ++} ++ ++static irqreturn_t hd64461_interrupt(int irq, void *dev, struct pt_regs *regs) ++{ ++ hd64461_socket_t *sp = (hd64461_socket_t *) dev; ++ unsigned events = 0; ++ unsigned char cscr; ++ unsigned cscr_reg = HD64461_PCC(hd64461_sockno(sp), CSCR); ++ ++ cscr = ctrl_inb(cscr_reg); ++ ++ DPRINTK(3, "hd64461_interrupt: cscr=%04x irq=%d\n", cscr, irq); ++ ++ if (cscr & HD64461_PCCCSCR_CDC) { ++ cscr &= ~HD64461_PCCCSCR_CDC; ++ events |= SS_DETECT; ++ ++ if ((ctrl_inb(HD64461_PCC(hd64461_sockno(sp), ISR)) & ++ HD64461_PCCISR_PCD_MASK) != 0) { ++ cscr &= ~(HD64461_PCCCSCR_RC | HD64461_PCCCSCR_BW | ++ HD64461_PCCCSCR_BD | HD64461_PCCCSCR_SC); ++ } ++ } ++ ++ if (sp->IC_memory) { ++ if (cscr & HD64461_PCCCSCR_RC) { ++ cscr &= ~HD64461_PCCCSCR_RC; ++ events |= SS_READY; ++ } ++ ++ if (cscr & HD64461_PCCCSCR_BW) { ++ cscr &= ~HD64461_PCCCSCR_BW; ++ events |= SS_BATWARN; ++ } ++ ++ if (cscr & HD64461_PCCCSCR_BD) { ++ cscr &= ~HD64461_PCCCSCR_BD; ++ events |= SS_BATDEAD; ++ } ++ } else { ++ if (cscr & HD64461_PCCCSCR_SC) { ++ cscr &= ~HD64461_PCCCSCR_SC; ++ events |= SS_STSCHG; ++ } ++ } ++ ++ ctrl_outb(cscr, cscr_reg); ++ ++ if (events) ++ pcmcia_parse_events(&sp->socket, events); ++ ++ return IRQ_HANDLED; ++} ++ ++static struct pccard_operations hd64461_operations = { ++ .init = hd64461_init, ++ .suspend = hd64461_suspend, ++ .get_status = hd64461_get_status, ++ .set_socket = hd64461_set_socket, ++ .set_io_map = hd64461_set_io_map, ++ .set_mem_map = hd64461_set_mem_map, ++}; ++ ++int hd64461_init_socket(int sock, int irq, int io_irq, unsigned long mem_base, ++ unsigned short io_offset) ++{ ++ hd64461_socket_t *sp = &hd64461_sockets[sock]; ++ unsigned gcr_reg = HD64461_PCC(sock, GCR); ++ int irq_flags = (sock == 0) ? SA_INTERRUPT : SA_SHIRQ; ++ u8 gcr; ++ int i, err; ++ ++ ctrl_outb(0, HD64461_PCC(sock, CSCIER)); ++ ++ memset(sp, 0, sizeof(*sp)); ++ sp->IC_memory = 1; ++ sp->irq = irq; ++ sp->mem_base = mem_base; ++ sp->socket.features = ++ SS_CAP_PCCARD | SS_CAP_STATIC_MAP | SS_CAP_PAGE_REGS; ++ sp->socket.resource_ops = &pccard_static_ops; ++ sp->socket.map_size = HD64461_PCC_WINDOW; /* 16MB fixed window size */ ++ sp->socket.pci_irq = io_irq; ++ sp->socket.io_offset = io_offset; ++ sp->socket.owner = THIS_MODULE; ++ sp->socket.ops = &hd64461_operations; ++ ++ for (i = 0; i != MAX_WIN; i++) ++ sp->mem_maps[i].map = i; ++ ++ if ((err = ++ request_irq(irq, hd64461_interrupt, irq_flags, MODNAME, sp)) < 0) { ++ printk(KERN_ERR ++ "HD64461 PCMCIA socket %d: can't request irq %d\n", sock, ++ sp->irq); ++ return err; ++ } ++ ++ if (sock == 0) { ++ irq_desc[io_irq].handler = &hd64461_ss_irq_type; ++ hd64461_register_irq_demux(sp->irq, hd64461_pcmcia_irq_demux, ++ sp); ++ } ++ ++ gcr = ctrl_inb(gcr_reg); ++ gcr |= HD64461_PCCGCR_PMMOD; /* 16MB mapping mode */ ++ gcr &= ~(HD64461_PCCGCR_PA25 | HD64461_PCCGCR_PA24); /* lowest 16MB of Common */ ++ ctrl_outb(gcr, gcr_reg); ++ ++ return 0; ++} ++ ++void hd64461_exit_socket(int sock) ++{ ++ hd64461_socket_t *sp = &hd64461_sockets[sock]; ++ unsigned cscier_reg = HD64461_PCC(sock, CSCIER); ++ ++ ctrl_outb(0, cscier_reg); ++ hd64461_suspend(&sp->socket); ++ ++ if (sp->irq) { ++ if (sock == 0) ++ hd64461_unregister_irq_demux(sp->irq); ++ free_irq(sp->irq, sp); ++ if (sock == 0) ++ irq_desc[sp->socket.pci_irq].handler = &no_irq_type; ++ } ++} ++ ++static int __devexit hd64461_pcmcia_drv_remove(struct platform_device *dev) ++{ ++ int i; ++ ++ for (i = 0; i != CONFIG_HD64461_PCMCIA_SOCKETS; i++) { ++ pcmcia_unregister_socket(&hd64461_sockets[i].socket); ++ hd64461_exit_socket(i); ++ } ++ ++ return 0; ++} ++ ++#ifdef CONFIG_PM ++static int hd64461_pcmcia_drv_suspend(struct platform_device *dev, pm_message_t state) ++{ ++ int ret = 0; ++ int i; ++ ++ for (i = 0; i != CONFIG_HD64461_PCMCIA_SOCKETS; i++) { ++ u32 cscier_reg = HD64461_PCC(i, CSCIER); ++ hd64461_sockets[i].cscier = ctrl_inb(cscier_reg); ++ ctrl_outb(0, cscier_reg); ++ ret = pcmcia_socket_dev_suspend(&dev->dev, state); ++ } ++ return ret; ++ } ++ ++static int hd64461_pcmcia_drv_resume(struct platform_device *dev) ++{ ++ int ret = 0; ++ int i; ++ ++ for (i = 0; i != CONFIG_HD64461_PCMCIA_SOCKETS; i++) { ++ u32 cscier_reg = HD64461_PCC(i, CSCIER); ++ ctrl_outb(hd64461_sockets[i].cscier, cscier_reg); ++ ret = pcmcia_socket_dev_resume(&dev->dev); ++ } ++ ++ return ret; ++} ++#endif ++ ++static struct platform_driver hd64461_pcmcia_driver = { ++ .remove = __devexit_p(hd64461_pcmcia_drv_remove), ++#ifdef CONFIG_PM ++ .suspend = hd64461_pcmcia_drv_suspend, ++ .resume = hd64461_pcmcia_drv_resume, ++#endif ++ .driver = { ++ .name = "hd64461-pcmcia", ++ }, ++}; ++ ++static struct platform_device *hd64461_pcmcia_device; ++ ++static int __init init_hd64461_ss(void) ++{ ++ int i; ++ ++ printk(KERN_INFO "HD64461 PCMCIA bridge.\n"); ++ if (platform_driver_register(&hd64461_pcmcia_driver)) ++ return -EINVAL; ++ ++ i = hd64461_init_socket(0, HD64461_IRQ_PCC0, HD64461_IRQ_PCC0 + 1, ++ HD64461_PCC0_BASE, 0xf000); ++ if (i < 0) { ++ platform_driver_unregister(&hd64461_pcmcia_driver); ++ return i; ++ } ++#if CONFIG_HD64461_PCMCIA_SOCKETS==2 ++ i = hd64461_init_socket(1, HD64461_IRQ_PCC1, HD64461_IRQ_PCC1, ++ HD64461_PCC1_BASE, 0); ++ if (i < 0) { ++ platform_driver_unregister(&hd64461_pcmcia_driver); ++ return i; ++ } ++#endif ++ ++ hd64461_pcmcia_device = platform_device_register_simple("hd64461-pcmcia", -1, NULL, 0); ++ if (IS_ERR(hd64461_pcmcia_device)) { ++ platform_driver_unregister(&hd64461_pcmcia_driver); ++ return PTR_ERR(hd64461_pcmcia_device); ++ } ++ ++ for (i = 0; i != CONFIG_HD64461_PCMCIA_SOCKETS; i++) { ++ unsigned int ret; ++ hd64461_sockets[i].socket.dev.dev = &hd64461_pcmcia_device->dev; ++ ret = pcmcia_register_socket(&hd64461_sockets[i].socket); ++ if (ret && i) ++ pcmcia_unregister_socket(&hd64461_sockets[0].socket); ++ } ++ ++ return 0; ++} ++ ++static void __exit exit_hd64461_ss(void) ++{ ++ platform_device_unregister(hd64461_pcmcia_device); ++ platform_driver_unregister(&hd64461_pcmcia_driver); ++} ++ ++module_init(init_hd64461_ss); ++module_exit(exit_hd64461_ss); ++ ++MODULE_AUTHOR("Andriy Skulysh <askulysh@gmail.com>"); ++MODULE_DESCRIPTION("PCMCIA driver for Hitachi HD64461 companion chip"); ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/drivers/pcmcia/yenta_socket.c linux-2.6.17/drivers/pcmcia/yenta_socket.c +--- linux-2.6.17-vanilla/drivers/pcmcia/yenta_socket.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/pcmcia/yenta_socket.c 2006-07-12 16:54:24.000000000 +0000 +@@ -49,6 +49,15 @@ + #define to_cycles(ns) ((ns)/120) + #define to_ns(cycles) ((cycles)*120) + ++#if defined(CONFIG_SH_HS7751RVOIP) || defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R7780RP) ++#define PCI_CB_SYSTEM_CONTROL 0x80 /* System Control Register */ ++#define PCI_CB_MULTIFUNCTION 0x8c /* Multifunction Routing Register */ ++#define PCI_CB_RETRY_STATUS 0x90 /* Retry Status Register */ ++#define PCI_CB_CARD_CONTROL 0x91 /* Card Control Register */ ++#define PCI_CB_DEVICE_CONTROL 0x92 /* Device Control Register */ ++#define PCI_CB_DIAGNOSTIC 0x93 /* Diagnostic Register */ ++#endif ++ + /** + * yenta PCI irq probing. + * currently only used in the TI/EnE initialization code +@@ -511,7 +520,12 @@ + { + struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket); + ++#if defined(CONFIG_SH_HS7751RVOIP) || defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R7780RP) ++ exca_writeb(socket, I365_GBLCTL, I365_GBL_CSC_LEV | I365_GBL_IRQ_0_LEV); ++ exca_writeb(socket, I365_INTCTL, I365_INTR_ENA); ++#else + exca_writeb(socket, I365_GBLCTL, 0x00); ++#endif + exca_writeb(socket, I365_GENCTL, 0x00); + + /* Redo card voltage interrogation */ +@@ -996,6 +1010,38 @@ + bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN); + bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN; + config_writew(socket, CB_BRIDGE_CONTROL, bridge); ++#if defined(CONFIG_SH_HS7751RVOIP) || defined(CONFIG_SH_RTS7751R2D) || defined(CONFIG_SH_R7780RP) ++ /* System Contro Register ++ * SER_STEP=00, INTRTIE=1, RSVD=0, P2CCLK=1, ++ * SMIROUTE=0, SMISTATUS=0, SMIENB=0, RSVD=0, ++ * CBRSVD=0, VCCPROT=0, REDUCEZV=0, RSVD=0100, ++ * MRBURSTD=1, MRBURSTU=1, SOCACTIV=0, RSVD=1, ++ * PWRSTREAM=0, DELAYUP=0, DELAYCOWN=0, INTERROGATE=0, ++ * RSVD=0, PWRSAVINGS=1, SUBSYSRW=1, CB_DPAR=0, ++ * RSVD=0, EXCAPOWER=0, KEEPCLK=0, RIMUX=0 ++ */ ++ config_writel(socket, PCI_CB_SYSTEM_CONTROL, 0x28449060); ++ /* Retry Status Register ++ * PCIRETRY=0, CBRETRY=0, TEXP_CBB=0, RSVD=0, ++ * TEXP_CBA=0, RSVD=0, TEXP_PCI=0, RSVD=0 ++ */ ++ config_writeb(socket, PCI_CB_RETRY_STATUS, 0x00); ++ /* Device Control Register ++ * SKTPWR_LOCK=0, 3VCAPABLE=1, IO16V2=1, RSVD=0, ++ * TEST=0, INTMODE=01, RSVD=0 ++ */ ++ config_writeb(socket, PCI_CB_DEVICE_CONTROL, 0x62); ++ /* Siagnostic Register ++ * TRUE_VAL=0, RSVD=1, CSC=0, DIAG4=0, ++ * DIAG3=0, DIAG2=0, DIAG1=0, STDZVEN=0 ++ */ ++ config_writeb(socket, PCI_CB_DIAGNOSTIC, 0x40); ++ /* Multifucntion Routing Register ++ * RSVD=0000, MFUNC6=0000, MFUNC5=0000, MFUNC4=0000, ++ * MFUNC3=0001, MFUNC2=0000, MFUNC1=0000, MFUNC0=0010 ++ */ ++ config_writel(socket, PCI_CB_MULTIFUNCTION, 0x00001002); ++#endif + } + + /* +diff -ruN linux-2.6.17-vanilla/drivers/rtc/CVS/Entries linux-2.6.17/drivers/rtc/CVS/Entries +--- linux-2.6.17-vanilla/drivers/rtc/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/rtc/CVS/Entries 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,4 @@ ++/Kconfig/1.1/Tue Jul 11 07:54:45 2006/-ko/ ++/Makefile/1.1/Tue Jul 11 07:54:45 2006/-ko/ ++/rtc-sh.c/1.1/Tue Jul 11 07:54:45 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/rtc/CVS/Repository linux-2.6.17/drivers/rtc/CVS/Repository +--- linux-2.6.17-vanilla/drivers/rtc/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/rtc/CVS/Repository 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/rtc +diff -ruN linux-2.6.17-vanilla/drivers/rtc/CVS/Root linux-2.6.17/drivers/rtc/CVS/Root +--- linux-2.6.17-vanilla/drivers/rtc/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/rtc/CVS/Root 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/rtc/Kconfig linux-2.6.17/drivers/rtc/Kconfig +--- linux-2.6.17-vanilla/drivers/rtc/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/rtc/Kconfig 2006-07-12 16:54:25.000000000 +0000 +@@ -147,6 +147,16 @@ + To compile this driver as a module, choose M here: the + module will be called rtc-sa1100. + ++config RTC_DRV_SH ++ tristate "SuperH On-Chip RTC" ++ depends on RTC_CLASS && SUPERH ++ help ++ Say Y here to enable support for the on-chip RTC found in ++ most SuperH processors. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called rtc-sh. ++ + config RTC_DRV_VR41XX + tristate "NEC VR41XX" + depends on RTC_CLASS && CPU_VR41XX +diff -ruN linux-2.6.17-vanilla/drivers/rtc/Makefile linux-2.6.17/drivers/rtc/Makefile +--- linux-2.6.17-vanilla/drivers/rtc/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/rtc/Makefile 2006-07-12 16:54:25.000000000 +0000 +@@ -20,3 +20,4 @@ + obj-$(CONFIG_RTC_DRV_EP93XX) += rtc-ep93xx.o + obj-$(CONFIG_RTC_DRV_SA1100) += rtc-sa1100.o + obj-$(CONFIG_RTC_DRV_VR41XX) += rtc-vr41xx.o ++obj-$(CONFIG_RTC_DRV_SH) += rtc-sh.o +diff -ruN linux-2.6.17-vanilla/drivers/rtc/rtc-sh.c linux-2.6.17/drivers/rtc/rtc-sh.c +--- linux-2.6.17-vanilla/drivers/rtc/rtc-sh.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/rtc/rtc-sh.c 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,467 @@ ++/* ++ * SuperH On-Chip RTC Support ++ * ++ * Copyright (C) 2006 Paul Mundt ++ * ++ * Based on the old arch/sh/kernel/cpu/rtc.c by: ++ * ++ * Copyright (C) 2000 Philipp Rumpf <prumpf@tux.org> ++ * Copyright (C) 1999 Tetsuya Okada & Niibe Yutaka ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/bcd.h> ++#include <linux/rtc.h> ++#include <linux/init.h> ++#include <linux/platform_device.h> ++#include <linux/seq_file.h> ++#include <linux/interrupt.h> ++#include <linux/spinlock.h> ++#include <asm/io.h> ++ ++#ifdef CONFIG_CPU_SH3 ++#define rtc_reg_size sizeof(u16) ++#define RTC_BIT_INVERTED 0 /* No bug on SH7708, SH7709A */ ++#elif defined(CONFIG_CPU_SH4) ++#define rtc_reg_size sizeof(u32) ++#define RTC_BIT_INVERTED 0x40 /* bug on SH7750, SH7750S */ ++#endif ++ ++#define RTC_REG(r) ((r) * rtc_reg_size) ++ ++#define R64CNT RTC_REG(0) ++#define RSECCNT RTC_REG(1) ++#define RMINCNT RTC_REG(2) ++#define RHRCNT RTC_REG(3) ++#define RWKCNT RTC_REG(4) ++#define RDAYCNT RTC_REG(5) ++#define RMONCNT RTC_REG(6) ++#define RYRCNT RTC_REG(7) ++#define RSECAR RTC_REG(8) ++#define RMINAR RTC_REG(9) ++#define RHRAR RTC_REG(10) ++#define RWKAR RTC_REG(11) ++#define RDAYAR RTC_REG(12) ++#define RMONAR RTC_REG(13) ++#define RCR1 RTC_REG(14) ++#define RCR2 RTC_REG(15) ++ ++/* RCR1 Bits */ ++#define RCR1_CF 0x80 /* Carry Flag */ ++#define RCR1_CIE 0x10 /* Carry Interrupt Enable */ ++#define RCR1_AIE 0x08 /* Alarm Interrupt Enable */ ++#define RCR1_AF 0x01 /* Alarm Flag */ ++ ++/* RCR2 Bits */ ++#define RCR2_PEF 0x80 /* PEriodic interrupt Flag */ ++#define RCR2_PESMASK 0x70 /* Periodic interrupt Set */ ++#define RCR2_RTCEN 0x08 /* ENable RTC */ ++#define RCR2_ADJ 0x04 /* ADJustment (30-second) */ ++#define RCR2_RESET 0x02 /* Reset bit */ ++#define RCR2_START 0x01 /* Start bit */ ++ ++struct sh_rtc { ++ void __iomem *regbase; ++ unsigned long regsize; ++ struct resource *res; ++ unsigned int alarm_irq, periodic_irq, carry_irq; ++ struct rtc_device *rtc_dev; ++ spinlock_t lock; ++}; ++ ++static irqreturn_t sh_rtc_interrupt(int irq, void *id, struct pt_regs *regs) ++{ ++ struct platform_device *pdev = id; ++ struct sh_rtc *rtc = platform_get_drvdata(pdev); ++ unsigned int tmp, events = 0; ++ ++ spin_lock(&rtc->lock); ++ ++ tmp = readb(rtc->regbase + RCR1); ++ ++ if (tmp & RCR1_AF) ++ events |= RTC_AF | RTC_IRQF; ++ ++ tmp &= ~(RCR1_CF | RCR1_AF); ++ ++ writeb(tmp, rtc->regbase + RCR1); ++ ++ rtc_update_irq(&rtc->rtc_dev->class_dev, 1, events); ++ ++ spin_unlock(&rtc->lock); ++ ++ return IRQ_HANDLED; ++} ++ ++static irqreturn_t sh_rtc_periodic(int irq, void *id, struct pt_regs *regs) ++{ ++ struct sh_rtc *rtc = dev_get_drvdata(id); ++ ++ spin_lock(&rtc->lock); ++ ++ rtc_update_irq(&rtc->rtc_dev->class_dev, 1, RTC_PF | RTC_IRQF); ++ ++ spin_unlock(&rtc->lock); ++ ++ return IRQ_HANDLED; ++} ++ ++static inline void sh_rtc_setpie(struct device *dev, unsigned int enable) ++{ ++ struct sh_rtc *rtc = dev_get_drvdata(dev); ++ unsigned int tmp; ++ ++ spin_lock_irq(&rtc->lock); ++ ++ tmp = readb(rtc->regbase + RCR2); ++ ++ if (enable) { ++ tmp &= ~RCR2_PESMASK; ++ tmp |= RCR2_PEF | (2 << 4); ++ } else ++ tmp &= ~(RCR2_PESMASK | RCR2_PEF); ++ ++ writeb(tmp, rtc->regbase + RCR2); ++ ++ spin_unlock_irq(&rtc->lock); ++} ++ ++static inline void sh_rtc_setaie(struct device *dev, unsigned int enable) ++{ ++ struct sh_rtc *rtc = dev_get_drvdata(dev); ++ unsigned int tmp; ++ ++ spin_lock_irq(&rtc->lock); ++ ++ tmp = readb(rtc->regbase + RCR1); ++ ++ if (enable) ++ tmp |= RCR1_AIE; ++ else ++ tmp &= ~RCR1_AIE; ++ ++ writeb(tmp, rtc->regbase + RCR1); ++ ++ spin_unlock_irq(&rtc->lock); ++} ++ ++static int sh_rtc_open(struct device *dev) ++{ ++ struct sh_rtc *rtc = dev_get_drvdata(dev); ++ unsigned int tmp; ++ int ret; ++ ++ tmp = readb(rtc->regbase + RCR1); ++ tmp &= ~RCR1_CF; ++ tmp |= RCR1_CIE; ++ writeb(tmp, rtc->regbase + RCR1); ++ ++ ret = request_irq(rtc->periodic_irq, sh_rtc_periodic, SA_INTERRUPT, ++ "sh-rtc period", dev); ++ if (unlikely(ret)) { ++ dev_err(dev, "request period IRQ failed with %d, IRQ %d\n", ++ ret, rtc->periodic_irq); ++ return ret; ++ } ++ ++ ret = request_irq(rtc->carry_irq, sh_rtc_interrupt, SA_INTERRUPT, ++ "sh-rtc carry", dev); ++ if (unlikely(ret)) { ++ dev_err(dev, "request carry IRQ failed with %d, IRQ %d\n", ++ ret, rtc->carry_irq); ++ free_irq(rtc->periodic_irq, dev); ++ goto err_bad_carry; ++ } ++ ++ ret = request_irq(rtc->alarm_irq, sh_rtc_interrupt, SA_INTERRUPT, ++ "sh-rtc alarm", dev); ++ if (unlikely(ret)) { ++ dev_err(dev, "request alarm IRQ failed with %d, IRQ %d\n", ++ ret, rtc->alarm_irq); ++ goto err_bad_alarm; ++ } ++ ++ return 0; ++ ++err_bad_alarm: ++ free_irq(rtc->carry_irq, dev); ++err_bad_carry: ++ free_irq(rtc->periodic_irq, dev); ++ ++ return ret; ++} ++ ++static void sh_rtc_release(struct device *dev) ++{ ++ struct sh_rtc *rtc = dev_get_drvdata(dev); ++ ++ sh_rtc_setpie(dev, 0); ++ ++ free_irq(rtc->periodic_irq, dev); ++ free_irq(rtc->carry_irq, dev); ++ free_irq(rtc->alarm_irq, dev); ++} ++ ++static int sh_rtc_proc(struct device *dev, struct seq_file *seq) ++{ ++ struct sh_rtc *rtc = dev_get_drvdata(dev); ++ unsigned int tmp; ++ ++ tmp = readb(rtc->regbase + RCR1); ++ seq_printf(seq, "alarm_IRQ\t: %s\n", ++ (tmp & RCR1_AIE) ? "yes" : "no"); ++ seq_printf(seq, "carry_IRQ\t: %s\n", ++ (tmp & RCR1_CIE) ? "yes" : "no"); ++ ++ tmp = readb(rtc->regbase + RCR2); ++ seq_printf(seq, "periodic_IRQ\t: %s\n", ++ (tmp & RCR2_PEF) ? "yes" : "no"); ++ ++ return 0; ++} ++ ++static int sh_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) ++{ ++ unsigned int ret = -ENOIOCTLCMD; ++ ++ switch (cmd) { ++ case RTC_PIE_OFF: ++ case RTC_PIE_ON: ++ sh_rtc_setpie(dev, cmd == RTC_PIE_ON); ++ ret = 0; ++ break; ++ case RTC_AIE_OFF: ++ case RTC_AIE_ON: ++ sh_rtc_setaie(dev, cmd == RTC_AIE_ON); ++ ret = 0; ++ break; ++ } ++ ++ return ret; ++} ++ ++static int sh_rtc_read_time(struct device *dev, struct rtc_time *tm) ++{ ++ struct platform_device *pdev = to_platform_device(dev); ++ struct sh_rtc *rtc = platform_get_drvdata(pdev); ++ unsigned int sec128, sec2, yr, yr100, cf_bit; ++ ++ do { ++ unsigned int tmp; ++ ++ spin_lock_irq(&rtc->lock); ++ ++ tmp = readb(rtc->regbase + RCR1); ++ tmp &= ~RCR1_CF; /* Clear CF-bit */ ++ tmp |= RCR1_CIE; ++ writeb(tmp, rtc->regbase + RCR1); ++ ++ sec128 = readb(rtc->regbase + R64CNT); ++ ++ tm->tm_sec = BCD2BIN(readb(rtc->regbase + RSECCNT)); ++ tm->tm_min = BCD2BIN(readb(rtc->regbase + RMINCNT)); ++ tm->tm_hour = BCD2BIN(readb(rtc->regbase + RHRCNT)); ++ tm->tm_wday = BCD2BIN(readb(rtc->regbase + RWKCNT)); ++ tm->tm_mday = BCD2BIN(readb(rtc->regbase + RDAYCNT)); ++ tm->tm_mon = BCD2BIN(readb(rtc->regbase + RMONCNT)); ++ ++#if defined(CONFIG_CPU_SH4) ++ yr = readw(rtc->regbase + RYRCNT); ++ yr100 = BCD2BIN(yr >> 8); ++ yr &= 0xff; ++#else ++ yr = readb(rtc->regbase + RYRCNT); ++ yr100 = BCD2BIN((yr == 0x99) ? 0x19 : 0x20); ++#endif ++ ++ tm->tm_year = (yr100 * 100 + BCD2BIN(yr)) - 1900; ++ ++ sec2 = readb(rtc->regbase + R64CNT); ++ cf_bit = readb(rtc->regbase + RCR1) & RCR1_CF; ++ ++ spin_unlock_irq(&rtc->lock); ++ } while (cf_bit != 0 || ((sec128 ^ sec2) & RTC_BIT_INVERTED) != 0); ++ ++#if RTC_BIT_INVERTED != 0 ++ if ((sec128 & RTC_BIT_INVERTED)) ++ tm->tm_sec--; ++#endif ++ ++ dev_dbg(&dev, "%s: tm is secs=%d, mins=%d, hours=%d, " ++ "mday=%d, mon=%d, year=%d, wday=%d\n", ++ __FUNCTION__, ++ tm->tm_sec, tm->tm_min, tm->tm_hour, ++ tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday); ++ ++ if (rtc_valid_tm(tm) < 0) ++ dev_err(dev, "invalid date\n"); ++ ++ return 0; ++} ++ ++static int sh_rtc_set_time(struct device *dev, struct rtc_time *tm) ++{ ++ struct platform_device *pdev = to_platform_device(dev); ++ struct sh_rtc *rtc = platform_get_drvdata(pdev); ++ unsigned int tmp; ++ int year; ++ ++ spin_lock_irq(&rtc->lock); ++ ++ /* Reset pre-scaler & stop RTC */ ++ tmp = readb(rtc->regbase + RCR2); ++ tmp |= RCR2_RESET; ++ writeb(tmp, rtc->regbase + RCR2); ++ ++ writeb(BIN2BCD(tm->tm_sec), rtc->regbase + RSECCNT); ++ writeb(BIN2BCD(tm->tm_min), rtc->regbase + RMINCNT); ++ writeb(BIN2BCD(tm->tm_hour), rtc->regbase + RHRCNT); ++ writeb(BIN2BCD(tm->tm_wday), rtc->regbase + RWKCNT); ++ writeb(BIN2BCD(tm->tm_mday), rtc->regbase + RDAYCNT); ++ writeb(BIN2BCD(tm->tm_mon), rtc->regbase + RMONCNT); ++ ++#ifdef CONFIG_CPU_SH3 ++ year = tm->tm_year % 100; ++ writeb(BIN2BCD(year), rtc->regbase + RYRCNT); ++#else ++ year = (BIN2BCD((tm->tm_year + 1900) / 100) << 8) | ++ BIN2BCD(tm->tm_year % 100); ++ writew(year, rtc->regbase + RYRCNT); ++#endif ++ ++ /* Start RTC */ ++ tmp = readb(rtc->regbase + RCR2); ++ tmp &= ~RCR2_RESET; ++ tmp |= RCR2_RTCEN | RCR2_START; ++ writeb(tmp, rtc->regbase + RCR2); ++ ++ spin_unlock_irq(&rtc->lock); ++ ++ return 0; ++} ++ ++static struct rtc_class_ops sh_rtc_ops = { ++ .open = sh_rtc_open, ++ .release = sh_rtc_release, ++ .ioctl = sh_rtc_ioctl, ++ .read_time = sh_rtc_read_time, ++ .set_time = sh_rtc_set_time, ++ .proc = sh_rtc_proc, ++}; ++ ++static int __devinit sh_rtc_probe(struct platform_device *pdev) ++{ ++ struct sh_rtc *rtc; ++ struct resource *res; ++ int ret = -ENOENT; ++ ++ rtc = kzalloc(sizeof(struct sh_rtc), GFP_KERNEL); ++ if (unlikely(!rtc)) ++ return -ENOMEM; ++ ++ spin_lock_init(&rtc->lock); ++ ++ rtc->periodic_irq = platform_get_irq(pdev, 0); ++ if (unlikely(rtc->periodic_irq < 0)) { ++ dev_err(&pdev->dev, "No IRQ for period\n"); ++ goto err_badres; ++ } ++ ++ rtc->carry_irq = platform_get_irq(pdev, 1); ++ if (unlikely(rtc->carry_irq < 0)) { ++ dev_err(&pdev->dev, "No IRQ for carry\n"); ++ goto err_badres; ++ } ++ ++ rtc->alarm_irq = platform_get_irq(pdev, 2); ++ if (unlikely(rtc->alarm_irq < 0)) { ++ dev_err(&pdev->dev, "No IRQ for alarm\n"); ++ goto err_badres; ++ } ++ ++ res = platform_get_resource(pdev, IORESOURCE_IO, 0); ++ if (unlikely(res == NULL)) { ++ dev_err(&pdev->dev, "No IO resource\n"); ++ goto err_badres; ++ } ++ ++ rtc->regsize = res->end - res->start + 1; ++ ++ rtc->res = request_mem_region(res->start, rtc->regsize, pdev->name); ++ if (unlikely(!rtc->res)) { ++ ret = -EBUSY; ++ goto err_badres; ++ } ++ ++ rtc->regbase = (void __iomem *)rtc->res->start; ++ if (unlikely(!rtc->regbase)) { ++ ret = -EINVAL; ++ goto err_badmap; ++ } ++ ++ rtc->rtc_dev = rtc_device_register("sh", &pdev->dev, ++ &sh_rtc_ops, THIS_MODULE); ++ if (IS_ERR(rtc)) { ++ ret = PTR_ERR(rtc->rtc_dev); ++ goto err_badmap; ++ } ++ ++ platform_set_drvdata(pdev, rtc); ++ ++ return 0; ++ ++err_badmap: ++ release_resource(rtc->res); ++err_badres: ++ kfree(rtc); ++ ++ return ret; ++} ++ ++static int __devexit sh_rtc_remove(struct platform_device *pdev) ++{ ++ struct sh_rtc *rtc = platform_get_drvdata(pdev); ++ ++ if (likely(rtc->rtc_dev)) ++ rtc_device_unregister(rtc->rtc_dev); ++ ++ sh_rtc_setpie(&pdev->dev, 0); ++ sh_rtc_setaie(&pdev->dev, 0); ++ ++ release_resource(rtc->res); ++ ++ platform_set_drvdata(pdev, NULL); ++ ++ kfree(rtc); ++ ++ return 0; ++} ++static struct platform_driver sh_rtc_platform_driver = { ++ .driver = { ++ .name = "sh-rtc", ++ .owner = THIS_MODULE, ++ }, ++ .probe = sh_rtc_probe, ++ .remove = __devexit_p(sh_rtc_remove), ++}; ++ ++static int __init sh_rtc_init(void) ++{ ++ return platform_driver_register(&sh_rtc_platform_driver); ++} ++ ++static void __exit sh_rtc_exit(void) ++{ ++ platform_driver_unregister(&sh_rtc_platform_driver); ++} ++ ++module_init(sh_rtc_init); ++module_exit(sh_rtc_exit); ++ ++MODULE_DESCRIPTION("SuperH on-chip RTC driver"); ++MODULE_AUTHOR("Paul Mundt <lethal@linux-sh.org>"); ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/drivers/serial/8250.c linux-2.6.17/drivers/serial/8250.c +--- linux-2.6.17-vanilla/drivers/serial/8250.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/serial/8250.c 2006-07-12 16:54:24.000000000 +0000 +@@ -193,6 +193,9 @@ + .fifo_size = 32, + .tx_loadsz = 16, + .fcr = UART_FCR_ENABLE_FIFO | UART_FCR_R_TRIG_01 | ++#ifdef CONFIG_SH_RTS7751R2D ++ UART_FCR_TRIGGER_14 | ++#endif + UART_FCR_T_TRIG_00, + .flags = UART_CAP_FIFO | UART_CAP_EFR | UART_CAP_SLEEP, + }, +@@ -440,8 +443,13 @@ + { + if (p->capabilities & UART_CAP_SLEEP) { + if (p->capabilities & UART_CAP_EFR) { ++ int efr = UART_EFR_ECB; ++ + serial_outp(p, UART_LCR, 0xBF); +- serial_outp(p, UART_EFR, UART_EFR_ECB); ++#ifdef CONFIG_SH_RTS7751R2D ++ efr |= UART_EFR_CTS | UART_EFR_RTS; ++#endif ++ serial_outp(p, UART_EFR, efr); + serial_outp(p, UART_LCR, 0); + } + serial_outp(p, UART_IER, sleep ? UART_IERX_SLEEP : 0); +@@ -672,10 +680,16 @@ + * since that's the technique that was sent to me in the + * serial driver update, but I'm not convinced this works. + * I've had problems doing this in the past. -TYT ++ * ++ * No, this won't work for everyone. At least in the RTS7751R2D ++ * case we have a '650 with a 64 byte FIFO, so this ends up breaking ++ * there. -PFM + */ ++#ifndef CONFIG_SH_RTS7751R2D + if (size_fifo(up) == 64) + up->port.type = PORT_16654; + else ++#endif + up->port.type = PORT_16650V2; + } + +diff -ruN linux-2.6.17-vanilla/drivers/serial/CVS/Entries linux-2.6.17/drivers/serial/CVS/Entries +--- linux-2.6.17-vanilla/drivers/serial/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/serial/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,4 @@ ++/sh-sci.c/1.43/Mon Mar 27 21:06:14 2006/-ko/ ++/sh-sci.h/1.21/Wed Feb 8 12:24:41 2006/-ko/ ++/8250.c/1.14/Wed Jul 5 14:51:22 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/serial/CVS/Repository linux-2.6.17/drivers/serial/CVS/Repository +--- linux-2.6.17-vanilla/drivers/serial/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/serial/CVS/Repository 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/serial +diff -ruN linux-2.6.17-vanilla/drivers/serial/CVS/Root linux-2.6.17/drivers/serial/CVS/Root +--- linux-2.6.17-vanilla/drivers/serial/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/serial/CVS/Root 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/serial/sh-sci.c linux-2.6.17/drivers/serial/sh-sci.c +--- linux-2.6.17-vanilla/drivers/serial/sh-sci.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/serial/sh-sci.c 2006-07-12 16:54:24.000000000 +0000 +@@ -3,7 +3,7 @@ + * + * SuperH on-chip serial module support. (SCI with no FIFO / with FIFO) + * +- * Copyright (C) 2002, 2003, 2004 Paul Mundt ++ * Copyright (C) 2002 - 2006 Paul Mundt + * + * based off of the old drivers/char/sh-sci.c by: + * +@@ -56,10 +56,8 @@ + + #if defined(CONFIG_SUPERH) && !defined(CONFIG_SUPERH64) + #include <asm/clock.h> +-#endif +- +-#ifdef CONFIG_SH_STANDARD_BIOS + #include <asm/sh_bios.h> ++#include <asm/kgdb.h> + #endif + + #if defined(CONFIG_SERIAL_SH_SCI_CONSOLE) && defined(CONFIG_MAGIC_SYSRQ) +@@ -69,25 +67,15 @@ + #include "sh-sci.h" + + #ifdef CONFIG_SH_KGDB +-#include <asm/kgdb.h> +- +-static int kgdb_get_char(struct sci_port *port); +-static void kgdb_put_char(struct sci_port *port, char c); +-static void kgdb_handle_error(struct sci_port *port); + static struct sci_port *kgdb_sci_port; +-#endif /* CONFIG_SH_KGDB */ ++#endif + + #ifdef CONFIG_SERIAL_SH_SCI_CONSOLE +-static struct sci_port *serial_console_port = 0; +-#endif /* CONFIG_SERIAL_SH_SCI_CONSOLE */ ++static struct sci_port *serial_console_port; ++#endif + + /* Function prototypes */ + static void sci_stop_tx(struct uart_port *port); +-static void sci_start_tx(struct uart_port *port); +-static void sci_start_rx(struct uart_port *port, unsigned int tty_start); +-static void sci_stop_rx(struct uart_port *port); +-static int sci_request_irq(struct sci_port *port); +-static void sci_free_irq(struct sci_port *port); + + static struct sci_port sci_ports[]; + static struct uart_driver sci_uart_driver; +@@ -95,9 +83,9 @@ + #define SCI_NPORTS sci_uart_driver.nr + + #if defined(CONFIG_SH_STANDARD_BIOS) || defined(CONFIG_SH_KGDB) +- +-static void handle_error(struct uart_port *port) +-{ /* Clear error flags */ ++static inline void handle_error(struct uart_port *port) ++{ ++ /* Clear error flags */ + sci_out(port, SCxSR, SCxSR_ERROR_CLEAR(port)); + } + +@@ -122,28 +110,9 @@ + + return c; + } +- +-/* Taken from sh-stub.c of GDB 4.18 */ +-static const char hexchars[] = "0123456789abcdef"; +- +-static __inline__ char highhex(int x) +-{ +- return hexchars[(x >> 4) & 0xf]; +-} +- +-static __inline__ char lowhex(int x) +-{ +- return hexchars[x & 0xf]; +-} +- + #endif /* CONFIG_SH_STANDARD_BIOS || CONFIG_SH_KGDB */ + +-/* +- * Send the packet in buffer. The host gets one chance to read it. +- * This routine does not wait for a positive acknowledge. +- */ +- +-#ifdef CONFIG_SERIAL_SH_SCI_CONSOLE ++#if defined(CONFIG_SERIAL_SH_SCI_CONSOLE) || defined(CONFIG_SH_KGDB) + static void put_char(struct uart_port *port, char c) + { + unsigned long flags; +@@ -161,7 +130,9 @@ + + local_irq_restore(flags); + } ++#endif + ++#ifdef CONFIG_SERIAL_SH_SCI_CONSOLE + static void put_string(struct sci_port *sci_port, const char *buffer, int count) + { + struct uart_port *port = &sci_port->port; +@@ -214,96 +185,28 @@ + } + #endif /* CONFIG_SERIAL_SH_SCI_CONSOLE */ + +- + #ifdef CONFIG_SH_KGDB +- +-/* Is the SCI ready, ie is there a char waiting? */ +-static int kgdb_is_char_ready(struct sci_port *port) +-{ +- unsigned short status = sci_in(port, SCxSR); +- +- if (status & (SCxSR_ERRORS(port) | SCxSR_BRK(port))) +- kgdb_handle_error(port); +- +- return (status & SCxSR_RDxF(port)); +-} +- +-/* Write a char */ +-static void kgdb_put_char(struct sci_port *port, char c) +-{ +- unsigned short status; +- +- do +- status = sci_in(port, SCxSR); +- while (!(status & SCxSR_TDxE(port))); +- +- sci_out(port, SCxTDR, c); +- sci_in(port, SCxSR); /* Dummy read */ +- sci_out(port, SCxSR, SCxSR_TDxE_CLEAR(port)); +-} +- +-/* Get a char if there is one, else ret -1 */ +-static int kgdb_get_char(struct sci_port *port) +-{ +- int c; +- +- if (kgdb_is_char_ready(port) == 0) +- c = -1; +- else { +- c = sci_in(port, SCxRDR); +- sci_in(port, SCxSR); /* Dummy read */ +- sci_out(port, SCxSR, SCxSR_RDxF_CLEAR(port)); +- } +- +- return c; +-} +- +-/* Called from kgdbstub.c to get a character, i.e. is blocking */ + static int kgdb_sci_getchar(void) + { +- volatile int c; ++ int c; + + /* Keep trying to read a character, this could be neater */ +- while ((c = kgdb_get_char(kgdb_sci_port)) < 0); ++ while ((c = get_char(kgdb_sci_port)) < 0) ++ cpu_relax(); + + return c; + } + +-/* Called from kgdbstub.c to put a character, just a wrapper */ +-static void kgdb_sci_putchar(int c) ++static inline void kgdb_sci_putchar(int c) + { +- +- kgdb_put_char(kgdb_sci_port, c); ++ put_char(kgdb_sci_port, c); + } +- +-/* Clear any errors on the SCI */ +-static void kgdb_handle_error(struct sci_port *port) +-{ +- sci_out(port, SCxSR, SCxSR_ERROR_CLEAR(port)); /* Clear error flags */ +-} +- +-/* Breakpoint if there's a break sent on the serial port */ +-static void kgdb_break_interrupt(int irq, void *ptr, struct pt_regs *regs) +-{ +- struct sci_port *port = ptr; +- unsigned short status = sci_in(port, SCxSR); +- +- if (status & SCxSR_BRK(port)) { +- +- /* Break into the debugger if a break is detected */ +- BREAKPOINT(); +- +- /* Clear */ +- sci_out(port, SCxSR, SCxSR_BREAK_CLEAR(port)); +- } +-} +- + #endif /* CONFIG_SH_KGDB */ + + #if defined(__H8300S__) + enum { sci_disable, sci_enable }; + +-static void h8300_sci_enable(struct uart_port* port, unsigned int ctrl) ++static void h8300_sci_config(struct uart_port* port, unsigned int ctrl) + { + volatile unsigned char *mstpcrl=(volatile unsigned char *)MSTPCRL; + int ch = (port->mapbase - SMR0) >> 3; +@@ -315,6 +218,16 @@ + *mstpcrl &= ~mask; + } + } ++ ++static inline void h8300_sci_enable(struct uart_port *port) ++{ ++ h8300_sci_config(port, sci_enable); ++} ++ ++static inline void h8300_sci_disable(struct uart_port *port) ++{ ++ h8300_sci_config(port, sci_disable); ++} + #endif + + #if defined(SCI_ONLY) || defined(SCI_AND_SCIF) +@@ -324,8 +237,13 @@ + int ch = (port->mapbase - SMR0) >> 3; + + /* set DDR regs */ +- H8300_GPIO_DDR(h8300_sci_pins[ch].port,h8300_sci_pins[ch].rx,H8300_GPIO_INPUT); +- H8300_GPIO_DDR(h8300_sci_pins[ch].port,h8300_sci_pins[ch].tx,H8300_GPIO_OUTPUT); ++ H8300_GPIO_DDR(h8300_sci_pins[ch].port, ++ h8300_sci_pins[ch].rx, ++ H8300_GPIO_INPUT); ++ H8300_GPIO_DDR(h8300_sci_pins[ch].port, ++ h8300_sci_pins[ch].tx, ++ H8300_GPIO_OUTPUT); ++ + /* tx mark output*/ + H8300_SCI_DR(ch) |= h8300_sci_pins[ch].tx; + } +@@ -380,7 +298,6 @@ + } + #endif + #else +- + /* For SH7750 */ + static void sci_init_pins_scif(struct uart_port *port, unsigned int cflag) + { +@@ -397,10 +314,41 @@ + } + sci_out(port, SCFCR, fcr_val); + } ++#endif ++ ++#if defined(CONFIG_CPU_SUBTYPE_SH7760) || defined(CONFIG_CPU_SUBTYPE_SH7780) ++static inline int scif_txroom(struct uart_port *port) ++{ ++ return SCIF_TXROOM_MAX - (sci_in(port, SCTFDR) & 0x7f); ++} ++ ++static inline int scif_rxroom(struct uart_port *port) ++{ ++ return sci_in(port, SCRFDR) & 0x7f; ++} ++#else ++static inline int scif_txroom(struct uart_port *port) ++{ ++ return SCIF_TXROOM_MAX - (sci_in(port, SCFDR) >> 8); ++} + ++static inline int scif_rxroom(struct uart_port *port) ++{ ++ return sci_in(port, SCFDR) & SCIF_RFDC_MASK; ++} + #endif + #endif /* SCIF_ONLY || SCI_AND_SCIF */ + ++static inline int sci_txroom(struct uart_port *port) ++{ ++ return ((sci_in(port, SCxSR) & SCI_TDRE) != 0); ++} ++ ++static inline int sci_rxroom(struct uart_port *port) ++{ ++ return ((sci_in(port, SCxSR) & SCxSR_RDxF(port)) != 0); ++} ++ + /* ********************************************************************** * + * the interrupt related routines * + * ********************************************************************** */ +@@ -412,7 +360,7 @@ + unsigned long flags; + unsigned short status; + unsigned short ctrl; +- int count, txroom; ++ int count; + + status = sci_in(port, SCxSR); + if (!(status & SCxSR_TDxE(port))) { +@@ -428,21 +376,12 @@ + return; + } + +-#if !defined(SCI_ONLY) +- if (port->type == PORT_SCIF) { +-#if defined(CONFIG_CPU_SUBTYPE_SH7760) || defined(CONFIG_CPU_SUBTYPE_SH7780) +- txroom = SCIF_TXROOM_MAX - (sci_in(port, SCTFDR) & 0x7f); +-#else +- txroom = SCIF_TXROOM_MAX - (sci_in(port, SCFDR)>>8); +-#endif +- } else { +- txroom = (sci_in(port, SCxSR) & SCI_TDRE)?1:0; +- } +-#else +- txroom = (sci_in(port, SCxSR) & SCI_TDRE)?1:0; ++#ifndef SCI_ONLY ++ if (port->type == PORT_SCIF) ++ count = scif_txroom(port); ++ else + #endif +- +- count = txroom; ++ count = sci_txroom(port); + + do { + unsigned char c; +@@ -491,6 +430,7 @@ + static inline void sci_receive_chars(struct uart_port *port, + struct pt_regs *regs) + { ++ struct sci_port *sci_port = (struct sci_port *)port; + struct tty_struct *tty = port->info->tty; + int i, count, copied = 0; + unsigned short status; +@@ -502,18 +442,11 @@ + + while (1) { + #if !defined(SCI_ONLY) +- if (port->type == PORT_SCIF) { +-#if defined(CONFIG_CPU_SUBTYPE_SH7760) || defined(CONFIG_CPU_SUBTYPE_SH7780) +- count = sci_in(port, SCRFDR) & 0x7f; +-#else +- count = sci_in(port, SCFDR)&SCIF_RFDC_MASK ; +-#endif +- } else { +- count = (sci_in(port, SCxSR)&SCxSR_RDxF(port))?1:0; +- } +-#else +- count = (sci_in(port, SCxSR)&SCxSR_RDxF(port))?1:0; ++ if (port->type == PORT_SCIF) ++ count = scif_rxroom(port); ++ else + #endif ++ count = sci_rxroom(port); + + /* Don't copy more bytes than there is room for in the buffer */ + count = tty_buffer_request_room(tty, count); +@@ -524,11 +457,10 @@ + + if (port->type == PORT_SCI) { + char c = sci_in(port, SCxRDR); +- if(((struct sci_port *)port)->break_flag +- || uart_handle_sysrq_char(port, c, regs)) { ++ if (uart_handle_sysrq_char(port, c, regs) || sci_port->break_flag) + count = 0; +- } else { +- tty_insert_flip_char(tty, c, TTY_NORMAL); ++ else { ++ tty_insert_flip_char(tty, c, TTY_NORMAL); + } + } else { + for (i=0; i<count; i++) { +@@ -536,15 +468,17 @@ + status = sci_in(port, SCxSR); + #if defined(CONFIG_CPU_SH3) + /* Skip "chars" during break */ +- if (((struct sci_port *)port)->break_flag) { ++ if (sci_port->break_flag) { + if ((c == 0) && + (status & SCxSR_FER(port))) { + count--; i--; + continue; + } ++ + /* Nonzero => end-of-break */ + pr_debug("scif: debounce<%02x>\n", c); +- ((struct sci_port *)port)->break_flag = 0; ++ sci_port->break_flag = 0; ++ + if (STEPFN(c)) { + count--; i--; + continue; +@@ -601,15 +535,17 @@ + /* Ensure that two consecutive samples find the break over. */ + static void sci_break_timer(unsigned long data) + { +- struct sci_port * port = (struct sci_port *)data; +- if(sci_rxd_in(&port->port) == 0) { ++ struct sci_port *port = (struct sci_port *)data; ++ ++ if (sci_rxd_in(&port->port) == 0) { + port->break_flag = 1; +- sci_schedule_break_timer(port); +- } else if(port->break_flag == 1){ ++ sci_schedule_break_timer(port); ++ } else if (port->break_flag == 1) { + /* break is over. */ + port->break_flag = 2; +- sci_schedule_break_timer(port); +- } else port->break_flag = 0; ++ sci_schedule_break_timer(port); ++ } else ++ port->break_flag = 0; + } + + static inline int sci_handle_errors(struct uart_port *port) +@@ -618,40 +554,41 @@ + unsigned short status = sci_in(port, SCxSR); + struct tty_struct *tty = port->info->tty; + +- if (status&SCxSR_ORER(port)) { ++ if (status & SCxSR_ORER(port)) { + /* overrun error */ +- if(tty_insert_flip_char(tty, 0, TTY_OVERRUN)) ++ if (tty_insert_flip_char(tty, 0, TTY_OVERRUN)) + copied++; + pr_debug("sci: overrun error\n"); + } + +- if (status&SCxSR_FER(port)) { ++ if (status & SCxSR_FER(port)) { + if (sci_rxd_in(port) == 0) { + /* Notify of BREAK */ +- struct sci_port * sci_port = (struct sci_port *)port; +- if(!sci_port->break_flag) { +- sci_port->break_flag = 1; +- sci_schedule_break_timer((struct sci_port *)port); ++ struct sci_port *sci_port = (struct sci_port *)port; ++ ++ if (!sci_port->break_flag) { ++ sci_port->break_flag = 1; ++ sci_schedule_break_timer(sci_port); ++ + /* Do sysrq handling. */ +- if(uart_handle_break(port)) ++ if (uart_handle_break(port)) + return 0; + pr_debug("sci: BREAK detected\n"); +- if(tty_insert_flip_char(tty, 0, TTY_BREAK)) ++ if (tty_insert_flip_char(tty, 0, TTY_BREAK)) + copied++; + } +- } +- else { ++ } else { + /* frame error */ +- if(tty_insert_flip_char(tty, 0, TTY_FRAME)) ++ if (tty_insert_flip_char(tty, 0, TTY_FRAME)) + copied++; + pr_debug("sci: frame error\n"); + } + } + +- if (status&SCxSR_PER(port)) { +- if(tty_insert_flip_char(tty, 0, TTY_PARITY)) +- copied++; ++ if (status & SCxSR_PER(port)) { + /* parity error */ ++ if (tty_insert_flip_char(tty, 0, TTY_PARITY)) ++ copied++; + pr_debug("sci: parity error\n"); + } + +@@ -756,6 +693,12 @@ + + /* Handle BREAKs */ + sci_handle_breaks(port); ++ ++#ifdef CONFIG_SH_KGDB ++ /* Break into the debugger if a break is detected */ ++ BREAKPOINT(); ++#endif ++ + sci_out(port, SCxSR, SCxSR_BREAK_CLEAR(port)); + + return IRQ_HANDLED; +@@ -964,9 +907,8 @@ + { + struct sci_port *s = &sci_ports[port->line]; + +-#if defined(__H8300S__) +- h8300_sci_enable(port, sci_enable); +-#endif ++ if (s->enable) ++ s->enable(port); + + sci_request_irq(s); + sci_start_tx(port); +@@ -983,9 +925,8 @@ + sci_stop_tx(port); + sci_free_irq(s); + +-#if defined(__H8300S__) +- h8300_sci_enable(port, sci_disable); +-#endif ++ if (s->disable) ++ s->disable(port); + } + + static void sci_set_termios(struct uart_port *port, struct termios *termios, +@@ -1434,6 +1375,8 @@ + .type = PORT_SCI, + .irqs = H8S_SCI_IRQS0, + .init_pins = sci_init_pins_sci, ++ .enable = h8300_sci_enable, ++ .disable = h8300_sci_disable, + }, + { + .port = { +@@ -1448,6 +1391,8 @@ + .type = PORT_SCI, + .irqs = H8S_SCI_IRQS1, + .init_pins = sci_init_pins_sci, ++ .enable = h8300_sci_enable, ++ .disable = h8300_sci_disable, + }, + { + .port = { +@@ -1462,6 +1407,8 @@ + .type = PORT_SCI, + .irqs = H8S_SCI_IRQS2, + .init_pins = sci_init_pins_sci, ++ .enable = h8300_sci_enable, ++ .disable = h8300_sci_disable, + }, + #elif defined(CONFIG_CPU_SUBTYPE_SH7770) + { +@@ -1569,19 +1516,21 @@ + sci_config_port(port, 0); + #endif + ++ if (serial_console_port->enable) ++ serial_console_port->enable(port); ++ + /* + * We need to set the initial uartclk here, since otherwise it will + * only ever be setup at sci_init() time. + */ + #if defined(__H8300H__) || defined(__H8300S__) + port->uartclk = CONFIG_CPU_CLOCK; +- +-#if defined(__H8300S__) +- h8300_sci_enable(port, sci_enable); +-#endif + #elif defined(CONFIG_SUPERH64) + port->uartclk = current_cpu_info.module_clock * 16; + #else ++ /* ++ * XXX: Use a proper clock for SCI/SCIF ++ */ + { + struct clk *clk = clk_get("module_clk"); + port->uartclk = clk_get_rate(clk) * 16; +@@ -1726,6 +1675,7 @@ + #elif defined(CONFIG_SUPERH64) + sciport->port.uartclk = current_cpu_info.module_clock * 16; + #else ++ /* XXX: We should use a proper SCI/SCIF clock */ + struct clk *clk = clk_get("module_clk"); + sciport->port.uartclk = clk_get_rate(clk) * 16; + clk_put(clk); +@@ -1762,3 +1712,4 @@ + module_init(sci_init); + module_exit(sci_exit); + ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/drivers/serial/sh-sci.h linux-2.6.17/drivers/serial/sh-sci.h +--- linux-2.6.17-vanilla/drivers/serial/sh-sci.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/serial/sh-sci.h 2006-07-12 16:54:24.000000000 +0000 +@@ -279,6 +279,8 @@ + int type; + unsigned char irqs[4]; /* ERI, RXI, TXI, BRI */ + void (*init_pins)(struct uart_port *port, unsigned int cflag); ++ void (*enable)(struct uart_port *port); ++ void (*disable)(struct uart_port *port); + int break_flag; + struct timer_list break_timer; + }; +diff -ruN linux-2.6.17-vanilla/drivers/sh/CVS/Entries linux-2.6.17/drivers/sh/CVS/Entries +--- linux-2.6.17-vanilla/drivers/sh/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/sh/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,2 @@ ++/Makefile/1.3/Thu Nov 10 14:20:52 2005/-ko/ ++D/superhyway//// +diff -ruN linux-2.6.17-vanilla/drivers/sh/CVS/Repository linux-2.6.17/drivers/sh/CVS/Repository +--- linux-2.6.17-vanilla/drivers/sh/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/sh/CVS/Repository 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/sh +diff -ruN linux-2.6.17-vanilla/drivers/sh/CVS/Root linux-2.6.17/drivers/sh/CVS/Root +--- linux-2.6.17-vanilla/drivers/sh/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/sh/CVS/Root 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/sh/Makefile linux-2.6.17/drivers/sh/Makefile +--- linux-2.6.17-vanilla/drivers/sh/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/sh/Makefile 2006-07-12 16:54:24.000000000 +0000 +@@ -2,5 +2,5 @@ + # Makefile for the SuperH specific drivers. + # + +-obj-$(CONFIG_SUPERHYWAY) += superhyway/ ++obj-$(CONFIG_SUPERHYWAY) += superhyway/ + +diff -ruN linux-2.6.17-vanilla/drivers/sh/superhyway/CVS/Entries linux-2.6.17/drivers/sh/superhyway/CVS/Entries +--- linux-2.6.17-vanilla/drivers/sh/superhyway/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/sh/superhyway/CVS/Entries 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1,4 @@ ++/Makefile/1.1/Fri Mar 4 18:56:52 2005/-ko/ ++/superhyway-sysfs.c/1.3/Mon Aug 29 21:01:19 2005/-ko/ ++/superhyway.c/1.4/Mon Mar 27 21:06:14 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/sh/superhyway/CVS/Repository linux-2.6.17/drivers/sh/superhyway/CVS/Repository +--- linux-2.6.17-vanilla/drivers/sh/superhyway/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/sh/superhyway/CVS/Repository 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/sh/superhyway +diff -ruN linux-2.6.17-vanilla/drivers/sh/superhyway/CVS/Root linux-2.6.17/drivers/sh/superhyway/CVS/Root +--- linux-2.6.17-vanilla/drivers/sh/superhyway/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/sh/superhyway/CVS/Root 2006-07-12 16:54:24.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/usb/CVS/Entries linux-2.6.17/drivers/usb/CVS/Entries +--- linux-2.6.17-vanilla/drivers/usb/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/usb/CVS/Entries 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,2 @@ ++D/host//// ++/Kconfig/1.3/Wed Jul 5 14:51:25 2006/-ko/ +diff -ruN linux-2.6.17-vanilla/drivers/usb/CVS/Repository linux-2.6.17/drivers/usb/CVS/Repository +--- linux-2.6.17-vanilla/drivers/usb/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/usb/CVS/Repository 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/usb +diff -ruN linux-2.6.17-vanilla/drivers/usb/CVS/Root linux-2.6.17/drivers/usb/CVS/Root +--- linux-2.6.17-vanilla/drivers/usb/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/usb/CVS/Root 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/usb/Kconfig linux-2.6.17/drivers/usb/Kconfig +--- linux-2.6.17-vanilla/drivers/usb/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/usb/Kconfig 2006-07-12 16:54:25.000000000 +0000 +@@ -29,6 +29,8 @@ + default y if PPC_MPC52xx + # MIPS: + default y if SOC_AU1X00 ++ # SH: ++ default y if VOYAGERGX + # more: + default PCI + +diff -ruN linux-2.6.17-vanilla/drivers/usb/host/CVS/Entries linux-2.6.17/drivers/usb/host/CVS/Entries +--- linux-2.6.17-vanilla/drivers/usb/host/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/usb/host/CVS/Entries 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,4 @@ ++/ohci-voyagergx.c/1.4/Fri Jan 27 16:11:52 2006/-ko/ ++/Kconfig/1.12/Wed Jul 5 14:51:27 2006/-ko/ ++/ohci-hcd.c/1.14/Wed Jul 5 14:51:27 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/usb/host/CVS/Repository linux-2.6.17/drivers/usb/host/CVS/Repository +--- linux-2.6.17-vanilla/drivers/usb/host/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/usb/host/CVS/Repository 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/usb/host +diff -ruN linux-2.6.17-vanilla/drivers/usb/host/CVS/Root linux-2.6.17/drivers/usb/host/CVS/Root +--- linux-2.6.17-vanilla/drivers/usb/host/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/usb/host/CVS/Root 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/usb/host/Kconfig linux-2.6.17/drivers/usb/host/Kconfig +--- linux-2.6.17-vanilla/drivers/usb/host/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/usb/host/Kconfig 2006-07-12 16:54:25.000000000 +0000 +@@ -148,3 +148,13 @@ + To compile this driver as a module, choose M here: the + module will be called "sl811_cs". + ++config USB_SM501 ++ tristate "USB Host Controller in SM501 support" ++ depends on USB && VOYAGERGX ++ help ++ Say Y here if you have SM501 USB host controller your system. ++ ++ if you do not know what this is, please say N. ++ ++ To compile this driver as a module, choose M here: the ++ module will be called SM501. +diff -ruN linux-2.6.17-vanilla/drivers/usb/host/ohci-hcd.c linux-2.6.17/drivers/usb/host/ohci-hcd.c +--- linux-2.6.17-vanilla/drivers/usb/host/ohci-hcd.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/usb/host/ohci-hcd.c 2006-07-12 16:54:25.000000000 +0000 +@@ -878,7 +878,9 @@ + MODULE_DESCRIPTION (DRIVER_INFO); + MODULE_LICENSE ("GPL"); + +-#ifdef CONFIG_PCI ++#ifdef CONFIG_USB_SM501 ++#include "ohci-voyagergx.c" ++#elif defined(CONFIG_PCI) + #include "ohci-pci.c" + #endif + +@@ -923,6 +925,7 @@ + || defined (CONFIG_SOC_AU1X00) \ + || defined (CONFIG_USB_OHCI_HCD_PPC_SOC) \ + || defined (CONFIG_ARCH_AT91RM9200) \ ++ || defined (CONFIG_USB_SM501) \ + ) + #error "missing bus glue for ohci-hcd" + #endif +diff -ruN linux-2.6.17-vanilla/drivers/usb/host/ohci-voyagergx.c linux-2.6.17/drivers/usb/host/ohci-voyagergx.c +--- linux-2.6.17-vanilla/drivers/usb/host/ohci-voyagergx.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/usb/host/ohci-voyagergx.c 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,259 @@ ++/* ++ * SM501 USB HCD for Linux Version. ++ * ++ * This program is free software; you can redistribute it and/or modify ++ * it under the terms of the GNU General Public License as published by ++ * the Free Software Foundation; either version 2 of the License, or ++ * (at your option) any later version. ++ * ++ * This program is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ * GNU General Public License for more details. ++ * ++ * You should have received a copy of the GNU General Public License ++ * along with this program; if not, write to the Free Software ++ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ++ * ++ * Copyright 2003 (c) Lineo uSolutions,Inc. ++ * Copyright 2004 (c) Paul Mundt ++ */ ++ ++#include <linux/dma-mapping.h> ++#include <linux/init.h> ++#include <linux/module.h> ++#include <linux/platform_device.h> ++#include <asm/mach/voyagergx_reg.h> ++ ++extern int usb_disabled(void); ++ ++static void usb_hcd_voyager_remove(struct usb_hcd *hcd, struct platform_device *pdev); ++static int __devinit ohci_voyager_start(struct usb_hcd *hcd); ++static int __init voyagergx_ohci_init(void); ++static void __exit voyagergx_ohci_exit(void); ++ ++/* ++ * VoyagerGX USB, when not used as a PCI device. ++ */ ++#define VOYAGER_OHCI_NAME "voyager-ohci" ++ ++static void __init voyagergx_ohci_configure(void) ++{ ++ unsigned long val; ++ ++ // Power Mode 0 Gate ++ val = inl(POWER_MODE0_GATE); ++ outl((val | POWER_MODE0_GATE_UH), POWER_MODE0_GATE); ++ ++ val = inl(POWER_MODE1_GATE); ++ outl((val | POWER_MODE1_GATE_UH), POWER_MODE1_GATE); ++ ++ //Miscellaneous USB Clock Selsct ++ val = inl(MISC_CTRL); ++ val &= ~MISC_CTRL_USBCLK_48; ++ outl(val, MISC_CTRL); ++ ++ // Interrupt Mask ++ val = inl(VOYAGER_INT_MASK); ++ val |= 0x00000040; ++ outl(val, VOYAGER_INT_MASK); ++} ++ ++static int usb_hcd_voyager_probe(const struct hc_driver *driver, ++ struct platform_device *dev) ++{ ++ struct usb_hcd *hcd; ++ struct ohci_hcd *ohci; ++ struct resource *res; ++ int retval, irq; ++ ++ res = platform_get_resource(dev, IORESOURCE_MEM, 0); ++ if (!res) { ++ err("no IO resources defined"); ++ return -ENODEV; ++ } ++ irq = platform_get_irq(dev, 0); ++ ++ hcd = usb_create_hcd(driver, &dev->dev, "sm501"); ++ if (PTR_ERR(hcd) == 0) { ++ err("usb_create_hcd failed"); ++ return -ENOMEM; ++ } ++ ++ hcd->rsrc_start = res->start; ++ hcd->rsrc_len = res->end - res->start + 1; ++ hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len); ++ if (PTR_ERR(hcd->regs) == 0) { ++ err("ioremap failed"); ++ retval = -ENOMEM; ++ goto err1; ++ } ++ ++ ohci = hcd_to_ohci(hcd); ++ ohci_hcd_init(ohci); ++ ++ retval = hcd_buffer_create(hcd); ++ if (retval != 0) { ++ err("hcd_buffer_create failed, %d", retval); ++ goto err2; ++ } ++ ++ retval = usb_add_hcd(hcd, irq, SA_INTERRUPT); ++ if (!retval) ++ return retval; /* all done */ ++ ++ /* error path */ ++ hcd_buffer_destroy(hcd); ++err2: ++ iounmap(hcd->regs); ++err1: ++ usb_put_hcd(hcd); ++ ++ return retval; ++} ++ ++static void usb_hcd_voyager_remove(struct usb_hcd *hcd, struct platform_device *dev) ++{ ++ hcd_buffer_destroy(hcd); ++ usb_remove_hcd(hcd); ++ iounmap(hcd->regs); ++ usb_put_hcd(hcd); ++} ++ ++static int __devinit ohci_voyager_start(struct usb_hcd *hcd) ++{ ++ struct ohci_hcd *ohci = hcd_to_ohci(hcd); ++ int ret; ++ ++ if ((ret = ohci_init(ohci)) < 0) ++ return ret; ++ ++ if ((ret = ohci_run(ohci)) < 0) { ++ err("can't start %s", hcd->self.bus_name); ++ ohci_stop(hcd); ++ return ret; ++ } ++ ++ return 0; ++} ++ ++static const struct hc_driver voyager_hc_driver = { ++ .description = hcd_name, ++ .product_desc = "SM501 OHCI", ++ .hcd_priv_size = sizeof(struct ohci_hcd), ++ ++ /* ++ * generic hardware linkage ++ */ ++ .irq = ohci_irq, ++ .flags = HCD_USB11, ++ ++ /* ++ * basic lifecycle operations ++ */ ++ .start = ohci_voyager_start, ++ .stop = ohci_stop, ++ ++ /* ++ * managing i/o requests and associated device resources ++ */ ++ .urb_enqueue = ohci_urb_enqueue, ++ .urb_dequeue = ohci_urb_dequeue, ++ .endpoint_disable = ohci_endpoint_disable, ++ ++ /* ++ * scheduling support ++ */ ++ .get_frame_number = ohci_get_frame, ++ ++ /* ++ * root hub support ++ */ ++ .hub_status_data = ohci_hub_status_data, ++ .hub_control = ohci_hub_control, ++#ifdef CONFIG_PM ++ .bus_suspend = ohci_bus_suspend, ++ .bus_resume = ohci_bus_resume, ++#endif ++ .start_port_reset = ohci_start_port_reset, ++}; ++ ++static int usb_hcd_voyager_drv_probe(struct platform_device *pdev) ++{ ++ if (usb_disabled()) ++ return -ENODEV; ++ ++ return usb_hcd_voyager_probe(&voyager_hc_driver, pdev); ++} ++ ++static int usb_hcd_voyager_drv_remove(struct platform_device *pdev) ++{ ++ struct usb_hcd *hcd = platform_get_drvdata(pdev); ++ ++ usb_hcd_voyager_remove(hcd, pdev); ++ ++ return 0; ++} ++ ++/* ++ * Driver definitions to register with SH Bus ++ */ ++static struct platform_driver usb_hcd_voyager_driver = { ++ .driver = { ++ .owner = THIS_MODULE, ++ .name = VOYAGER_OHCI_NAME, ++ }, ++ .probe = usb_hcd_voyager_drv_probe, ++ .remove = usb_hcd_voyager_drv_remove, ++}; ++ ++static struct resource voyager_hcd_res[] = { ++ [0] = { ++ .start = VOYAGER_USBH_BASE, ++ .end = VOYAGER_USBH_BASE + 0xfff, ++ .flags = IORESOURCE_MEM, ++ }, ++ [1] = { ++ .start = VOYAGER_USBH_IRQ, ++ .end = VOYAGER_USBH_IRQ, ++ .flags = IORESOURCE_IRQ, ++ }, ++}; ++ ++static struct platform_device usb_hcd_voyager_dev = { ++ .name = VOYAGER_OHCI_NAME, ++ .id = 0, ++ .resource = voyager_hcd_res, ++ .num_resources = ARRAY_SIZE(voyager_hcd_res), ++}; ++ ++static int __init voyagergx_ohci_init(void) ++{ ++ int ret; ++ ++ if (usb_disabled()) ++ return -ENODEV; ++ ++ voyagergx_ohci_configure(); ++ ++ ret = platform_driver_register(&usb_hcd_voyager_driver); ++ if (ret) ++ return -ENODEV; ++ ++ ret = platform_device_register(&usb_hcd_voyager_dev); ++ if (ret) { ++ platform_driver_unregister(&usb_hcd_voyager_driver); ++ return -ENODEV; ++ } ++ ++ return ret; ++} ++ ++static void __exit voyagergx_ohci_exit(void) ++{ ++ platform_device_unregister(&usb_hcd_voyager_dev); ++ platform_driver_unregister(&usb_hcd_voyager_driver); ++} ++ ++module_init(voyagergx_ohci_init); ++module_exit(voyagergx_ohci_exit); +diff -ruN linux-2.6.17-vanilla/drivers/video/CVS/Entries linux-2.6.17/drivers/video/CVS/Entries +--- linux-2.6.17-vanilla/drivers/video/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/CVS/Entries 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,7 @@ ++/hitfb.c/1.22/Sun Jan 29 17:46:24 2006/-ko/ ++/pvr2fb.c/1.27/Sun Jan 8 13:56:39 2006// ++D/backlight//// ++D/console//// ++D/voyager//// ++/Kconfig/1.27/Wed Jul 5 14:51:28 2006/-ko/ ++/Makefile/1.22/Wed Jul 5 14:51:28 2006/-ko/ +diff -ruN linux-2.6.17-vanilla/drivers/video/CVS/Repository linux-2.6.17/drivers/video/CVS/Repository +--- linux-2.6.17-vanilla/drivers/video/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/CVS/Repository 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/video +diff -ruN linux-2.6.17-vanilla/drivers/video/CVS/Root linux-2.6.17/drivers/video/CVS/Root +--- linux-2.6.17-vanilla/drivers/video/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/CVS/Root 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/video/Kconfig linux-2.6.17/drivers/video/Kconfig +--- linux-2.6.17-vanilla/drivers/video/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/video/Kconfig 2006-07-12 16:54:25.000000000 +0000 +@@ -151,6 +151,21 @@ + help + Support the Permedia2 FIFO disconnect feature (see CONFIG_FB_PM2). + ++config FB_VOYAGER_GX ++ bool "Silicon Motion Voyager GX support" ++ depends on FB && VOYAGERGX ++ select FB_CFB_FILLRECT ++ select FB_CFB_COPYAREA ++ select FB_CFB_IMAGEBLIT ++ help ++ Say Y to enable support for the Silicon Motion VoyagerGX framebuffer. ++ ++config FB_VOYAGER_GX_MP ++ bool "Voyager multi plane support" ++ depends on FB_VOYAGER_GX ++ help ++ Say Y to enable support VoyagerGX multi plane. ++ + config FB_ARMCLCD + tristate "ARM PrimeCell PL110 support" + depends on FB && ARM && ARM_AMBA +diff -ruN linux-2.6.17-vanilla/drivers/video/Makefile linux-2.6.17/drivers/video/Makefile +--- linux-2.6.17-vanilla/drivers/video/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/video/Makefile 2006-07-12 16:54:25.000000000 +0000 +@@ -38,6 +38,8 @@ + obj-$(CONFIG_FB_KYRO) += kyro/ + obj-$(CONFIG_FB_SAVAGE) += savage/ + obj-$(CONFIG_FB_GEODE) += geode/ ++obj-$(CONFIG_FB_VOYAGER_GX) += voyager/ ++ + obj-$(CONFIG_FB_I810) += vgastate.o + obj-$(CONFIG_FB_NEOMAGIC) += neofb.o vgastate.o + obj-$(CONFIG_FB_VIRGE) += virgefb.o +diff -ruN linux-2.6.17-vanilla/drivers/video/backlight/CVS/Entries linux-2.6.17/drivers/video/backlight/CVS/Entries +--- linux-2.6.17-vanilla/drivers/video/backlight/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/backlight/CVS/Entries 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,3 @@ ++/Kconfig/1.2/Wed Jul 5 14:51:29 2006// ++/hp680_bl.c/1.6/Wed Jul 12 16:51:58 2006// ++D +diff -ruN linux-2.6.17-vanilla/drivers/video/backlight/CVS/Repository linux-2.6.17/drivers/video/backlight/CVS/Repository +--- linux-2.6.17-vanilla/drivers/video/backlight/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/backlight/CVS/Repository 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/video/backlight +diff -ruN linux-2.6.17-vanilla/drivers/video/backlight/CVS/Root linux-2.6.17/drivers/video/backlight/CVS/Root +--- linux-2.6.17-vanilla/drivers/video/backlight/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/backlight/CVS/Root 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/video/backlight/Kconfig linux-2.6.17/drivers/video/backlight/Kconfig +--- linux-2.6.17-vanilla/drivers/video/backlight/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/video/backlight/Kconfig 2006-07-12 16:54:25.000000000 +0000 +@@ -51,7 +51,7 @@ + backlight driver. + + config BACKLIGHT_HP680 +- tristate "HP Jornada 680 Backlight Driver" ++ tristate "HP Jornada 680 Backlight Driver " + depends on BACKLIGHT_DEVICE && SH_HP6XX + default y + help +diff -ruN linux-2.6.17-vanilla/drivers/video/backlight/hp680_bl.c linux-2.6.17/drivers/video/backlight/hp680_bl.c +--- linux-2.6.17-vanilla/drivers/video/backlight/hp680_bl.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/video/backlight/hp680_bl.c 2006-07-12 16:54:25.000000000 +0000 +@@ -1,7 +1,7 @@ + /* + * Backlight Driver for HP Jornada 680 + * +- * Copyright (c) 2005 Andriy Skulysh ++ * Copyright (c) 2005 Andriy Skulysh + * + * Based on Sharp's Corgi Backlight Driver + * +@@ -20,7 +20,7 @@ + + #include <asm/cpu/dac.h> + #include <asm/hp6xx/hp6xx.h> +-#include <asm/hd64461/hd64461.h> ++#include <asm/hd64461.h> + + #define HP680_MAX_INTENSITY 255 + #define HP680_DEFAULT_INTENSITY 10 +@@ -64,7 +64,6 @@ + current_intensity = intensity; + } + +- + #ifdef CONFIG_PM + static int hp680bl_suspend(struct platform_device *dev, pm_message_t state) + { +@@ -102,6 +101,8 @@ + .update_status = hp680bl_set_intensity, + }; + ++static struct backlight_device *hp680_backlight_device; ++ + static int __init hp680bl_probe(struct platform_device *dev) + { + hp680_backlight_device = backlight_device_register ("hp680-bl", +@@ -163,6 +164,6 @@ + module_init(hp680bl_init); + module_exit(hp680bl_exit); + +-MODULE_AUTHOR("Andriy Skulysh <askulysh@image.kiev.ua>"); ++MODULE_AUTHOR("Andriy Skulysh <askulysh@gmail.com>"); + MODULE_DESCRIPTION("HP Jornada 680 Backlight Driver"); + MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/drivers/video/console/CVS/Entries linux-2.6.17/drivers/video/console/CVS/Entries +--- linux-2.6.17-vanilla/drivers/video/console/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/console/CVS/Entries 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,2 @@ ++/Kconfig/1.7/Wed Jul 5 14:51:30 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/video/console/CVS/Repository linux-2.6.17/drivers/video/console/CVS/Repository +--- linux-2.6.17-vanilla/drivers/video/console/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/console/CVS/Repository 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/video/console +diff -ruN linux-2.6.17-vanilla/drivers/video/console/CVS/Root linux-2.6.17/drivers/video/console/CVS/Root +--- linux-2.6.17-vanilla/drivers/video/console/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/console/CVS/Root 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/video/console/Kconfig linux-2.6.17/drivers/video/console/Kconfig +--- linux-2.6.17-vanilla/drivers/video/console/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/video/console/Kconfig 2006-07-12 16:54:25.000000000 +0000 +@@ -6,7 +6,7 @@ + + config VGA_CONSOLE + bool "VGA text console" if EMBEDDED || !X86 +- depends on !ARCH_ACORN && !ARCH_EBSA110 && !4xx && !8xx && !SPARC && !M68K && !PARISC && !FRV && !ARCH_VERSATILE ++ depends on !ARCH_ACORN && !ARCH_EBSA110 && !4xx && !8xx && !SPARC && !M68K && !PARISC && !FRV && !ARCH_VERSATILE && !SUPERH + default y + help + Saying Y here will allow you to use Linux in text mode through a +diff -ruN linux-2.6.17-vanilla/drivers/video/hitfb.c linux-2.6.17/drivers/video/hitfb.c +--- linux-2.6.17-vanilla/drivers/video/hitfb.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/video/hitfb.c 2006-07-12 16:54:25.000000000 +0000 +@@ -4,7 +4,7 @@ + * (C) 1999 Mihai Spatar + * (C) 2000 YAEGASHI Takeshi + * (C) 2003, 2004 Paul Mundt +- * (C) 2003, 2004 Andriy Skulysh ++ * (C) 2003, 2004, 2006 Andriy Skulysh + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file COPYING in the main directory of this archive for +@@ -22,18 +22,16 @@ + #include <linux/slab.h> + #include <linux/delay.h> + #include <linux/init.h> ++#include <linux/platform_device.h> + #include <linux/fb.h> + + #include <asm/machvec.h> + #include <asm/uaccess.h> + #include <asm/pgtable.h> + #include <asm/io.h> +-#include <asm/hd64461/hd64461.h> +- +-#ifdef MACH_HP600 ++#include <asm/hd64461.h> + #include <asm/cpu/dac.h> + #include <asm/hp6xx/hp6xx.h> +-#endif + + #define WIDTH 640 + +@@ -47,7 +45,6 @@ + static struct fb_fix_screeninfo hitfb_fix __initdata = { + .id = "Hitachi HD64461", + .type = FB_TYPE_PACKED_PIXELS, +- .ypanstep = 8, + .accel = FB_ACCEL_NONE, + }; + +@@ -75,26 +72,14 @@ + if (truecolor) + saddr <<= 1; + +- fb_writew(width, HD64461_BBTDWR); +- fb_writew(height, HD64461_BBTDHR); ++ fb_writew(width-1, HD64461_BBTDWR); ++ fb_writew(height-1, HD64461_BBTDHR); + + fb_writew(saddr & 0xffff, HD64461_BBTDSARL); + fb_writew(saddr >> 16, HD64461_BBTDSARH); + + } + +-static inline void hitfb_accel_solidfill(int truecolor, u16 dx, u16 dy, +- u16 width, u16 height, u16 color) +-{ +- hitfb_accel_set_dest(truecolor, dx, dy, width, height); +- +- fb_writew(0x00f0, HD64461_BBTROPR); +- fb_writew(16, HD64461_BBTMDR); +- fb_writew(color, HD64461_GRSCR); +- +- hitfb_accel_start(truecolor); +-} +- + static inline void hitfb_accel_bitblt(int truecolor, u16 sx, u16 sy, u16 dx, + u16 dy, u16 width, u16 height, u16 rop, + u32 mask_addr) +@@ -102,6 +87,8 @@ + u32 saddr, daddr; + u32 maddr = 0; + ++ height--; ++ width--; + fb_writew(rop, HD64461_BBTROPR); + if ((sy < dy) || ((sy == dy) && (sx <= dx))) { + saddr = WIDTH * (sy + height) + sx + width; +@@ -148,6 +135,7 @@ + if (rect->rop != ROP_COPY) + cfb_fillrect(p, rect); + else { ++ hitfb_accel_wait(); + fb_writew(0x00f0, HD64461_BBTROPR); + fb_writew(16, HD64461_BBTMDR); + +@@ -163,16 +151,15 @@ + rect->height); + hitfb_accel_start(0); + } +- hitfb_accel_wait(); + } + } + + static void hitfb_copyarea(struct fb_info *p, const struct fb_copyarea *area) + { ++ hitfb_accel_wait(); + hitfb_accel_bitblt(p->var.bits_per_pixel == 16, area->sx, area->sy, + area->dx, area->dy, area->width, area->height, + 0x00cc, 0); +- hitfb_accel_wait(); + } + + static int hitfb_pan_display(struct fb_var_screeninfo *var, +@@ -184,7 +171,7 @@ + if (xoffset != 0) + return -EINVAL; + +- fb_writew(yoffset, HD64461_LCDCBAR); ++ fb_writew((yoffset*info->fix.line_length)>>10, HD64461_LCDCBAR); + + return 0; + } +@@ -194,12 +181,6 @@ + unsigned short v; + + if (blank_mode) { +-#ifdef MACH_HP600 +- sh_dac_disable(DAC_LCD_BRIGHTNESS); +- v = fb_readw(HD64461_GPBDR); +- v |= HD64461_GPBDR_LCDOFF; +- fb_writew(v, HD64461_GPBDR); +-#endif + v = fb_readw(HD64461_LDR1); + v &= ~HD64461_LDR1_DON; + fb_writew(v, HD64461_LDR1); +@@ -215,19 +196,18 @@ + v = fb_readw(HD64461_STBCR); + v &= ~HD64461_STBCR_SLCDST; + fb_writew(v, HD64461_STBCR); +-#ifdef MACH_HP600 +- sh_dac_enable(DAC_LCD_BRIGHTNESS); +- v = fb_readw(HD64461_GPBDR); +- v &= ~HD64461_GPBDR_LCDOFF; +- fb_writew(v, HD64461_GPBDR); +-#endif +- v = fb_readw(HD64461_LDR1); +- v |= HD64461_LDR1_DON; +- fb_writew(v, HD64461_LDR1); + + v = fb_readw(HD64461_LCDCCR); +- v &= ~HD64461_LCDCCR_MOFF; ++ v &= ~(HD64461_LCDCCR_MOFF | HD64461_LCDCCR_STREQ); + fb_writew(v, HD64461_LCDCCR); ++ ++ do { ++ v = fb_readw(HD64461_LCDCCR); ++ } while(v&HD64461_LCDCCR_STBACK); ++ ++ v = fb_readw(HD64461_LDR1); ++ v |= HD64461_LDR1_DON; ++ fb_writew(v, HD64461_LDR1); + } + return 0; + } +@@ -235,7 +215,7 @@ + static int hitfb_setcolreg(unsigned regno, unsigned red, unsigned green, + unsigned blue, unsigned transp, struct fb_info *info) + { +- if (regno >= info->cmap.len) ++ if (regno >= 256) + return 1; + + switch (info->var.bits_per_pixel) { +@@ -246,6 +226,8 @@ + fb_writew(blue >> 10, HD64461_CPTWDR); + break; + case 16: ++ if (regno >= 16) ++ return 1; + ((u32 *) (info->pseudo_palette))[regno] = + ((red & 0xf800)) | + ((green & 0xfc00) >> 5) | ((blue & 0xf800) >> 11); +@@ -254,26 +236,113 @@ + return 0; + } + ++static int hitfb_sync(struct fb_info *info) ++{ ++ hitfb_accel_wait(); ++ ++ return 0; ++} ++ ++static int hitfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) ++{ ++ int maxy; ++ ++ var->xres = info->var.xres; ++ var->xres_virtual = info->var.xres; ++ var->yres = info->var.yres; ++ ++ if ((var->bits_per_pixel != 8) && (var->bits_per_pixel != 16)) ++ var->bits_per_pixel = info->var.bits_per_pixel; ++ ++ if (var->yres_virtual < var->yres) ++ var->yres_virtual = var->yres; ++ ++ maxy = info->fix.smem_len / var->xres; ++ ++ if (var->bits_per_pixel == 16) ++ maxy /= 2; ++ ++ if (var->yres_virtual > maxy) ++ var->yres_virtual = maxy; ++ ++ var->xoffset = 0; ++ var->yoffset = 0; ++ ++ switch (var->bits_per_pixel) { ++ case 8: ++ var->red.offset = 0; ++ var->red.length = 8; ++ var->green.offset = 0; ++ var->green.length = 8; ++ var->blue.offset = 0; ++ var->blue.length = 8; ++ var->transp.offset = 0; ++ var->transp.length = 0; ++ break; ++ case 16: /* RGB 565 */ ++ var->red.offset = 11; ++ var->red.length = 5; ++ var->green.offset = 5; ++ var->green.length = 6; ++ var->blue.offset = 0; ++ var->blue.length = 5; ++ var->transp.offset = 0; ++ var->transp.length = 0; ++ break; ++ } ++ ++ return 0; ++} ++ ++static int hitfb_set_par(struct fb_info *info) ++{ ++ unsigned short ldr3; ++ ++ switch (info->var.bits_per_pixel) { ++ case 8: ++ info->fix.line_length = info->var.xres; ++ info->fix.visual = FB_VISUAL_PSEUDOCOLOR; ++ info->fix.ypanstep = 16; ++ break; ++ case 16: ++ info->fix.line_length = info->var.xres*2; ++ info->fix.visual = FB_VISUAL_TRUECOLOR; ++ info->fix.ypanstep = 8; ++ break; ++ } ++ ++ fb_writew(info->fix.line_length, HD64461_LCDCLOR); ++ ldr3 = fb_readw(HD64461_LDR3); ++ ldr3 &= ~15; ++ ldr3 |= (info->var.bits_per_pixel == 8) ? 4 : 8; ++ fb_writew(ldr3, HD64461_LDR3); ++ return 0; ++} ++ + static struct fb_ops hitfb_ops = { + .owner = THIS_MODULE, ++ .fb_check_var = hitfb_check_var, ++ .fb_set_par = hitfb_set_par, + .fb_setcolreg = hitfb_setcolreg, + .fb_blank = hitfb_blank, ++ .fb_sync = hitfb_sync, + .fb_pan_display = hitfb_pan_display, + .fb_fillrect = hitfb_fillrect, + .fb_copyarea = hitfb_copyarea, + .fb_imageblit = cfb_imageblit, + }; + +-int __init hitfb_init(void) ++static int __init hitfb_probe(struct platform_device *dev) + { + unsigned short lcdclor, ldr3, ldvndr; +- int size; + + if (fb_get_options("hitfb", NULL)) + return -ENODEV; + ++ hitfb_fix.mmio_start = CONFIG_HD64461_IOBASE+0x1000; ++ hitfb_fix.mmio_len = 0x1000; + hitfb_fix.smem_start = CONFIG_HD64461_IOBASE + 0x02000000; +- hitfb_fix.smem_len = (MACH_HP690) ? 1024 * 1024 : 512 * 1024; ++ hitfb_fix.smem_len = 512 * 1024; + + lcdclor = fb_readw(HD64461_LCDCLOR); + ldvndr = fb_readw(HD64461_LDVNDR); +@@ -323,12 +392,12 @@ + fb_info.var = hitfb_var; + fb_info.fix = hitfb_fix; + fb_info.pseudo_palette = pseudo_palette; +- fb_info.flags = FBINFO_DEFAULT; ++ fb_info.flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN | ++ FBINFO_HWACCEL_FILLRECT | FBINFO_HWACCEL_COPYAREA; + + fb_info.screen_base = (void *)hitfb_fix.smem_start; + +- size = (fb_info.var.bits_per_pixel == 8) ? 256 : 16; +- fb_alloc_cmap(&fb_info.cmap, size, 0); ++ fb_alloc_cmap(&fb_info.cmap, 256, 0); + + if (register_framebuffer(&fb_info) < 0) + return -EINVAL; +@@ -338,9 +407,75 @@ + return 0; + } + ++static int __devexit hitfb_remove(struct platform_device *dev) ++{ ++ return unregister_framebuffer(&fb_info); ++} ++ ++#ifdef CONFIG_PM ++static int hitfb_suspend(struct platform_device *dev, pm_message_t state) ++{ ++ u16 v; ++ ++ hitfb_blank(1,0); ++ v = fb_readw(HD64461_STBCR); ++ v |= HD64461_STBCR_SLCKE_IST; ++ fb_writew(v, HD64461_STBCR); ++ ++ return 0; ++} ++ ++static int hitfb_resume(struct platform_device *dev) ++{ ++ u16 v; ++ ++ v = fb_readw(HD64461_STBCR); ++ v &= ~HD64461_STBCR_SLCKE_OST; ++ msleep(100); ++ v = fb_readw(HD64461_STBCR); ++ v &= ~HD64461_STBCR_SLCKE_IST; ++ fb_writew(v, HD64461_STBCR); ++ hitfb_blank(0,0); ++ ++ return 0; ++} ++#endif ++ ++static struct platform_driver hitfb_driver = { ++ .probe = hitfb_probe, ++ .remove = __devexit_p(hitfb_remove), ++#ifdef CONFIG_PM ++ .suspend = hitfb_suspend, ++ .resume = hitfb_resume, ++#endif ++ .driver = { ++ .name = "hitfb", ++ }, ++}; ++ ++static struct platform_device hitfb_device = { ++ .name = "hitfb", ++ .id = -1, ++}; ++ ++static int __init hitfb_init(void) ++{ ++ int ret; ++ ++ ret = platform_driver_register(&hitfb_driver); ++ if (!ret) { ++ ret = platform_device_register(&hitfb_device); ++ if (ret) ++ platform_driver_unregister(&hitfb_driver); ++ } ++ return ret; ++} ++ ++ + static void __exit hitfb_exit(void) + { +- unregister_framebuffer(&fb_info); ++ platform_device_unregister(&hitfb_device); ++ platform_driver_unregister(&hitfb_driver); + } + + module_init(hitfb_init); +diff -ruN linux-2.6.17-vanilla/drivers/video/pvr2fb.c linux-2.6.17/drivers/video/pvr2fb.c +--- linux-2.6.17-vanilla/drivers/video/pvr2fb.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/drivers/video/pvr2fb.c 2006-07-12 16:54:25.000000000 +0000 +@@ -189,7 +189,7 @@ + static unsigned int is_blanked = 0; /* Is the screen blanked? */ + + #ifdef CONFIG_SH_STORE_QUEUES +-static struct sq_mapping *pvr2fb_map; ++static unsigned long pvr2fb_map; + #endif + + #ifdef CONFIG_SH_DMA +@@ -215,15 +215,17 @@ + static int pvr2_init_cable(void); + static int pvr2_get_param(const struct pvr2_params *p, const char *s, + int val, int size); ++#ifdef CONFIG_SH_DMA + static ssize_t pvr2fb_write(struct file *file, const char *buf, + size_t count, loff_t *ppos); ++#endif + + static struct fb_ops pvr2fb_ops = { +- .owner = THIS_MODULE, +- .fb_setcolreg = pvr2fb_setcolreg, +- .fb_blank = pvr2fb_blank, +- .fb_check_var = pvr2fb_check_var, +- .fb_set_par = pvr2fb_set_par, ++ .owner = THIS_MODULE, ++ .fb_setcolreg = pvr2fb_setcolreg, ++ .fb_blank = pvr2fb_blank, ++ .fb_check_var = pvr2fb_check_var, ++ .fb_set_par = pvr2fb_set_par, + #ifdef CONFIG_SH_DMA + .fb_write = pvr2fb_write, + #endif +@@ -785,7 +787,7 @@ + goto out_err; + } + +- fb_memset((unsigned long)fb_info->screen_base, 0, pvr2_fix.smem_len); ++ fb_memset(fb_info->screen_base, 0, pvr2_fix.smem_len); + + pvr2_fix.ypanstep = nopan ? 0 : 1; + pvr2_fix.ywrapstep = nowrap ? 0 : 1; +@@ -822,7 +824,7 @@ + modememused >> 10, (unsigned long)(fb_info->fix.smem_len >> 10)); + printk("fb%d: Mode %dx%d-%d pitch = %ld cable: %s video output: %s\n", + fb_info->node, fb_info->var.xres, fb_info->var.yres, +- fb_info->var.bits_per_pixel, ++ fb_info->var.bits_per_pixel, + get_line_length(fb_info->var.xres, fb_info->var.bits_per_pixel), + (char *)pvr2_get_param(cables, NULL, cable_type, 3), + (char *)pvr2_get_param(outputs, NULL, video_output, 3)); +@@ -831,10 +833,10 @@ + printk(KERN_NOTICE "fb%d: registering with SQ API\n", fb_info->node); + + pvr2fb_map = sq_remap(fb_info->fix.smem_start, fb_info->fix.smem_len, +- fb_info->fix.id); ++ fb_info->fix.id, pgprot_val(PAGE_SHARED)); + + printk(KERN_NOTICE "fb%d: Mapped video memory to SQ addr 0x%lx\n", +- fb_info->node, pvr2fb_map->sq_addr); ++ fb_info->node, pvr2fb_map); + #endif + + return 0; +diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/CVS/Entries linux-2.6.17/drivers/video/voyager/CVS/Entries +--- linux-2.6.17-vanilla/drivers/video/voyager/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/voyager/CVS/Entries 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,9 @@ ++/Makefile/1.2/Tue May 31 14:19:09 2005/-ko/ ++/voyager_alphafb.c/1.2/Wed Feb 8 22:08:10 2006/-ko/ ++/voyager_crtcsrfb.c/1.2/Wed Feb 8 22:08:10 2006/-ko/ ++/voyager_crtfb.c/1.2/Wed Feb 8 22:08:10 2006/-ko/ ++/voyager_gxfb.c/1.4/Wed Feb 8 22:08:10 2006/-ko/ ++/voyager_panelcsrfb.c/1.2/Wed Feb 8 22:08:10 2006/-ko/ ++/voyager_valphafb.c/1.2/Wed Feb 8 22:08:10 2006/-ko/ ++/voyager_videofb.c/1.2/Wed Feb 8 22:08:10 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/CVS/Repository linux-2.6.17/drivers/video/voyager/CVS/Repository +--- linux-2.6.17-vanilla/drivers/video/voyager/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/voyager/CVS/Repository 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++linux/drivers/video/voyager +diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/CVS/Root linux-2.6.17/drivers/video/voyager/CVS/Root +--- linux-2.6.17-vanilla/drivers/video/voyager/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/voyager/CVS/Root 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/Makefile linux-2.6.17/drivers/video/voyager/Makefile +--- linux-2.6.17-vanilla/drivers/video/voyager/Makefile 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/voyager/Makefile 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,13 @@ ++# ++# Makefile for the VoyagerGX framebuffer driver ++# ++ ++my-obj-$(CONFIG_FB_VOYAGER_GX_MP) += voyager_alphafb.o \ ++ voyager_crtcsrfb.o \ ++ voyager_crtfb.o \ ++ voyager_panelcsrfb.o \ ++ voyager_valphafb.o \ ++ voyager_videofb.o ++ ++obj-$(CONFIG_FB_VOYAGER_GX) += voyager_gxfb.o $(my-obj-y) ++ +diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_alphafb.c linux-2.6.17/drivers/video/voyager/voyager_alphafb.c +--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_alphafb.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/voyager/voyager_alphafb.c 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,282 @@ ++/* ++ * linux/drivers/video/voyager_alphafb.c -- voyager alpha frame buffer driver ++ * ++ * Copyright (C) 2003 Renesas Technology Sales Co.,Ltd. ++ * Copyright (C) 2003 Atom Create Engineering Co.,Ltd. ++ * Anthor : Atom Create Engineering Co.,Ltd. ++ * Kenichi Sakuma ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * 1.00 ++ * - initial version (ks) ++ * 1.01 ++ * - Kernel 2.6 correspondence ++ */ ++#include <linux/config.h> ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/errno.h> ++#include <linux/string.h> ++#include <linux/mm.h> ++#include <linux/tty.h> ++#include <linux/slab.h> ++#include <linux/vmalloc.h> ++#include <linux/delay.h> ++#include <linux/interrupt.h> ++#include <linux/fb.h> ++#include <linux/init.h> ++#include <asm/io.h> ++#include <asm/irq.h> ++#include <asm/mach/voyagergx_reg.h> ++#include <video/voyager.h> ++ ++static struct fb_info voyafb_info; ++ ++int voyafb_init4(void); ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info); ++static int voyafb_set_par(struct fb_info *info); ++static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, ++ u_int transp, struct fb_info *info); ++static int voyafb_blank(int blank, struct fb_info *info); ++static int voyafb_ioctl(struct inode*, struct file*, ++ unsigned int, unsigned long, struct fb_info*); ++static int change_mode(struct fb_var_screeninfo *var); ++ ++static unsigned int pseudo_palette[16]; ++ ++static struct fb_ops voyafb_ops = { ++ .owner = THIS_MODULE, ++ .fb_check_var = voyafb_check_var, ++ .fb_set_par = voyafb_set_par, ++ .fb_setcolreg = voyafb_setcolreg, ++ .fb_blank = voyafb_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++ .fb_ioctl = voyafb_ioctl, ++}; ++ ++static struct fb_var_screeninfo voyafb_var __initdata = { ++ .xres = XRES, ++ .yres = YRES, ++ .xres_virtual = XRES, ++ .yres_virtual = YRES, ++ .bits_per_pixel = BPP, ++ .red = { 11,5,0 }, ++ .green = { 5,6,0 }, ++ .blue = { 0,5,0 }, ++ .height = -1, ++ .width = -1, ++ .vmode = FB_VMODE_NONINTERLACED, ++ .pixclock = 10000, ++ .left_margin = 16, ++ .right_margin = 16, ++ .upper_margin = 16, ++ .lower_margin = 16, ++ .hsync_len = 8, ++ .vsync_len = 8, ++}; ++ ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info) ++{ ++ if (var->xres > XRES || var->yres > YRES ++ || var->xres_virtual > XRES || var->yres_virtual > YRES ++ || var->bits_per_pixel != BPP ++ || var->nonstd ++ || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED) ++ return -EINVAL; ++ ++ var->xres_virtual = XRES; ++ var->yres_virtual = YRES; ++ ++ if(change_mode(var) != 0) { ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++static int voyafb_set_par(struct fb_info *info) ++{ ++ info->fix.line_length = XRES*2; ++ info->fix.visual = FB_VISUAL_TRUECOLOR; ++ ++ info->var.red.offset = 11; ++ info->var.green.offset = 5; ++ info->var.blue.offset = 0; ++ info->var.red.length = info->var.blue.length = 5; ++ info->var.green.length = 6; ++ return 0; ++} ++ ++static int voyafb_blank(int blank, struct fb_info *info) ++{ ++ return 1; ++} ++ ++static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green, ++ unsigned blue, unsigned transp, ++ struct fb_info* info) ++{ ++ red >>= 11; ++ green >>= 11; ++ blue >>= 10; ++ ++ if (regno < 16) ++ ((u32 *)(info->pseudo_palette))[regno] = ((red & 31) << 6) | ++ ((green & 31) << 11) | ++ ((blue & 63)); ++ return 0; ++} ++ ++static int voyafb_ioctl(struct inode* inode, struct file* file, ++ unsigned int cmd, unsigned long arg, ++ struct fb_info* info) ++{ ++ if(cmd == VOYAGER_IOCTL_ENABLE) { ++ if(arg == 0) { ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xfffffffb; ++ } ++ else { ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) |= 0x04; ++ } ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_ENABLE_CK) { ++ if(arg == 0) { ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xfffffff7; ++ } ++ else { ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) |= 0x00000008; ++ } ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_ENABLE_AL) { ++ if(arg == 0) { ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xefffffff; ++ } ++ else { ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) |= 0x10000000; ++ } ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_CHKEY) { ++ *(volatile unsigned long *)(ALPHA_CHROMA_KEY) = arg; ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_TYPE) { ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xfffffffc; ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) |= (arg & 0x03); ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_ALPHA) { ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xf0ffffff; ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) |= (arg & 0x0f) << 24; ++ return 0; ++ } ++ return -EINVAL; ++} ++ ++ ++static void __init voya_hw_init(void) ++{ ++ *(volatile unsigned long *)(ALPHA_FB_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP4 & 0x00ffffff); ++ change_mode(&voyafb_var); ++ *(volatile unsigned long *)(ALPHA_CHROMA_KEY) = 0; ++ ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xfffffff0; ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) |= 0x01; ++ ++} ++ ++ ++ ++static struct fb_fix_screeninfo voyafb_fix __initdata = { ++ .id = "VOYAGER ALPHA", ++ .type = FB_TYPE_PACKED_PIXELS, ++ .visual = FB_VISUAL_TRUECOLOR, ++ .accel = FB_ACCEL_NONE, ++ .line_length = XRES*2, ++ .smem_len = MAX_FRAMEBUFFER_MEM_SIZE, ++}; ++ ++ ++static void __init init_voya(struct fb_info *p, unsigned long addr) ++{ ++ p->fix = voyafb_fix; ++ p->fix.smem_start = addr; ++ ++ p->var = voyafb_var; ++ ++ p->fbops = &voyafb_ops; ++ p->flags = FBINFO_FLAG_DEFAULT; ++ p->pseudo_palette = pseudo_palette; ++ ++ fb_alloc_cmap(&p->cmap, 16, 0); ++ ++ if (register_framebuffer(p) < 0) { ++ printk(KERN_ERR "VOYAGER GX ALPHA framebuffer failed to register\n"); ++ return; ++ } ++ ++ printk(KERN_INFO "fb%d: VOYAGER GX_ALPHA frame buffer (%dK RAM detected)\n", ++ p->node, p->fix.smem_len / 1024); ++ ++ voya_hw_init(); ++} ++ ++int __init voyafb_init4(void) ++{ ++ struct fb_info *p = &voyafb_info; ++ unsigned long addr, size; ++ ++ addr = VOY_VRAM_TOP4; ++ size = MAX_FRAMEBUFFER_MEM_SIZE; ++ p->screen_base = ioremap((u_long)addr, ++ ALLOCATED_FB_MEM_SIZE); ++ if (p->screen_base == NULL) { ++ return -ENOMEM; ++ } ++ init_voya(p, addr); ++ memset(p->screen_base, 0, MAX_FRAMEBUFFER_MEM_SIZE); ++ ++ return 0; ++} ++ ++static void __exit voyafb_exit(void) ++{ ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xfffffffb; ++} ++ ++ ++//------------------------------------------------------------------------------------ ++static int change_mode(struct fb_var_screeninfo *var) ++{ ++int x,ali; ++ ++ if((var->xres < 0)||(var->xres > XRES)|| ++ (var->yres < 0)||(var->yres > YRES)|| ++ (var->xres_virtual < 0)||(var->xres_virtual > XRES)|| ++ (var->yres_virtual < 0)||(var->yres_virtual > YRES)|| ++ (var->xoffset < 0)||(var->xoffset > XRES)|| ++ (var->yoffset < 0)||(var->yoffset > YRES)) ++ { ++ return(-1); ++ } ++ x = var->xres_virtual * 2; ++ ali = x + (x % 16); ++ *(volatile unsigned long *)(ALPHA_FB_WIDTH) = (ali << 16) | ali; ++ *(volatile unsigned long *)(ALPHA_PLANE_TL) = (var->yoffset << 16) | ++ var->xoffset; ++ *(volatile unsigned long *)(ALPHA_PLANE_BR) = ++ ((var->yoffset + var->yres - 1) << 16) | ++ (var->xoffset + var->xres - 1); ++ return(0); ++} ++ ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_crtcsrfb.c linux-2.6.17/drivers/video/voyager/voyager_crtcsrfb.c +--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_crtcsrfb.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/voyager/voyager_crtcsrfb.c 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,240 @@ ++/* ++ * linux/drivers/video/voyager_crtcsrfb.c -- voyager crt HWC frame buffer driver ++ * ++ * Copyright (C) 2003 Renesas Technology Sales Co.,Ltd. ++ * Copyright (C) 2003 Atom Create Engineering Co.,Ltd. ++ * Anthor : Atom Create Engineering Co.,Ltd. ++ * Kenichi Sakuma ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * 1.00 ++ * - initial version (ks) ++ * 1.01 ++ * - Kernel 2.6 correspondence ++ */ ++#include <linux/config.h> ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/errno.h> ++#include <linux/string.h> ++#include <linux/mm.h> ++#include <linux/tty.h> ++#include <linux/slab.h> ++#include <linux/vmalloc.h> ++#include <linux/delay.h> ++#include <linux/interrupt.h> ++#include <linux/fb.h> ++#include <linux/init.h> ++#include <asm/io.h> ++#include <asm/irq.h> ++#include <asm/mach/voyagergx_reg.h> ++#include <video/voyager.h> ++ ++static struct fb_info voyafb_info; ++ ++int voyafb_init7(void); ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info); ++static int voyafb_set_par(struct fb_info *info); ++static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, ++ u_int transp, struct fb_info *info); ++static int voyafb_blank(int blank, struct fb_info *info); ++static int voyafb_ioctl(struct inode*, struct file*, ++ unsigned int, unsigned long, struct fb_info*); ++static int change_mode(struct fb_var_screeninfo *var); ++ ++static unsigned int pseudo_palette[16]; ++ ++static struct fb_ops voyafb_ops = { ++ .owner = THIS_MODULE, ++ .fb_check_var = voyafb_check_var, ++ .fb_set_par = voyafb_set_par, ++ .fb_setcolreg = voyafb_setcolreg, ++ .fb_blank = voyafb_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++ .fb_ioctl = voyafb_ioctl, ++}; ++ ++static struct fb_var_screeninfo voyafb_var __initdata = { ++ .xres = CSR_XRES, ++ .yres = CSR_YRES, ++ .xres_virtual = CSR_XRES, ++ .yres_virtual = CSR_YRES, ++ .bits_per_pixel = CSR_BPP, ++ .red = { 11,5,0 }, ++ .green = { 5,6,0 }, ++ .blue = { 0,5,0 }, ++ .height = -1, ++ .width = -1, ++ .vmode = FB_VMODE_NONINTERLACED, ++ .pixclock = 10000, ++ .left_margin = 16, ++ .right_margin = 16, ++ .upper_margin = 16, ++ .lower_margin = 16, ++ .hsync_len = 8, ++ .vsync_len = 8, ++}; ++ ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info) ++{ ++ if (var->xres > CSR_XRES || var->yres > CSR_YRES ++ || var->xres_virtual > CSR_XRES || var->yres_virtual > CSR_YRES ++ || var->bits_per_pixel != CSR_BPP ++ || var->nonstd ++ || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED) ++ return -EINVAL; ++ ++ var->xres = var->xres_virtual = CSR_XRES; ++ var->yres = var->yres_virtual = CSR_YRES; ++ if(change_mode(var) != 0) { ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++static int voyafb_set_par(struct fb_info *info) ++{ ++ info->fix.line_length = CSR_XRES/2; ++ info->fix.visual = FB_VISUAL_TRUECOLOR; ++ ++ info->var.red.offset = 11; ++ info->var.green.offset = 5; ++ info->var.blue.offset = 0; ++ info->var.red.length = info->var.blue.length = 5; ++ info->var.green.length = 6; ++ return 0; ++} ++ ++static int voyafb_blank(int blank, struct fb_info *info) ++{ ++ return 1; ++} ++ ++static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green, ++ unsigned blue, unsigned transp, ++ struct fb_info* info) ++{ ++ red >>= 11; ++ green >>= 11; ++ blue >>= 10; ++ ++ if (regno < 16) ++ ((u32 *)(info->pseudo_palette))[regno] = ((red & 31) << 6) | ++ ((green & 31) << 11) | ++ ((blue & 63)); ++ return 0; ++} ++ ++static int voyafb_ioctl(struct inode* inode, struct file* file, ++ unsigned int cmd, unsigned long arg, ++ struct fb_info* info) ++{ ++ if(cmd == VOYAGER_IOCTL_ENABLE) { ++ if(arg == 0) { ++ *(volatile unsigned long *)(CRT_HWC_ADDRESS) &= 0x7fffffff; ++ } ++ else { ++ *(volatile unsigned long *)(CRT_HWC_ADDRESS) |= 0x80000000; ++ } ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_COLOR_1) { ++ *(volatile unsigned long *)(CRT_HWC_COLOR_12) = arg; ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_COLOR_2) { ++ *(volatile unsigned long *)(CRT_HWC_COLOR_3) = arg; ++ return 0; ++ } ++ return -EINVAL; ++} ++ ++ ++static void __init voya_hw_init(void) ++{ ++ *(volatile unsigned long *)(CRT_HWC_ADDRESS) = (VOY_VRAM_TOP5 & 0x00ffffff); ++ *(volatile unsigned long *)(CRT_HWC_COLOR_12) = 0x5555aaaa; ++ *(volatile unsigned long *)(CRT_HWC_COLOR_3) = 0x0000ffff; ++ change_mode(&voyafb_var); ++} ++ ++ ++ ++static struct fb_fix_screeninfo voyafb_fix __initdata = { ++ .id = "VOYAGER C_CSR", ++ .type = FB_TYPE_PACKED_PIXELS, ++ .visual = FB_VISUAL_TRUECOLOR, ++ .accel = FB_ACCEL_NONE, ++ .line_length = CSR_XRES/2, ++ .smem_len = MAX_HWC_MEM_SIZE, ++}; ++ ++ ++static void __init init_voya(struct fb_info *p, unsigned long addr) ++{ ++ p->fix = voyafb_fix; ++ p->fix.smem_start = addr; ++ ++ p->var = voyafb_var; ++ ++ p->fbops = &voyafb_ops; ++ p->flags = FBINFO_FLAG_DEFAULT; ++ p->pseudo_palette = pseudo_palette; ++ ++ fb_alloc_cmap(&p->cmap, 16, 0); ++ ++ if (register_framebuffer(p) < 0) { ++ printk(KERN_ERR "VOYAGER GX CRT CSR framebuffer failed to register\n"); ++ return; ++ } ++ ++ printk(KERN_INFO "fb%d: VOYAGER GX_CRT CSR frame buffer (%dK RAM detected)\n", ++ p->node, p->fix.smem_len / 1024); ++ ++ voya_hw_init(); ++} ++ ++int __init voyafb_init7(void) ++{ ++ struct fb_info *p = &voyafb_info; ++ unsigned long addr, size; ++ ++ addr = VOY_VRAM_TOP6; ++ size = MAX_HWC_MEM_SIZE; ++ p->screen_base = ioremap((u_long)addr, ++ ALLOCATED_FB_MEM_SIZE); ++ if (p->screen_base == NULL) { ++ return -ENOMEM; ++ } ++ init_voya(p, addr); ++ memset(p->screen_base, 0, MAX_HWC_MEM_SIZE); ++ ++ return 0; ++} ++ ++static void __exit voyafb_exit(void) ++{ ++ *(volatile unsigned long *)(CRT_HWC_ADDRESS) &= 0x7fffffff; ++} ++ ++static int change_mode(struct fb_var_screeninfo *var) ++{ ++ if((var->xoffset < 0)||(var->xoffset > XRES)|| ++ (var->yoffset < 0)||(var->yoffset > YRES)) ++ { ++ return(-1); ++ } ++ *(volatile unsigned long *)(CRT_HWC_LOCATION) = (var->yoffset << 16) | ++ var->xoffset; ++ return(0); ++} ++ ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_crtfb.c linux-2.6.17/drivers/video/voyager/voyager_crtfb.c +--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_crtfb.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/voyager/voyager_crtfb.c 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,240 @@ ++/* ++ * linux/drivers/video/voyager_crtfb.c -- voyager crt frame buffer driver ++ * ++ * Copyright (C) 2003 Renesas Technology Sales Co.,Ltd. ++ * Copyright (C) 2003 Atom Create Engineering Co.,Ltd. ++ * Anthor : Atom Create Engineering Co.,Ltd. ++ * Kenichi Sakuma ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * 1.00 ++ * - initial version (ks) ++ * 1.01 ++ * - Kernel 2.6 correspondence ++ */ ++#include <linux/config.h> ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/errno.h> ++#include <linux/string.h> ++#include <linux/mm.h> ++#include <linux/tty.h> ++#include <linux/slab.h> ++#include <linux/vmalloc.h> ++#include <linux/delay.h> ++#include <linux/interrupt.h> ++#include <linux/fb.h> ++#include <linux/init.h> ++#include <asm/io.h> ++#include <asm/irq.h> ++#include <asm/mach/voyagergx_reg.h> ++#include <video/voyager.h> ++ ++static struct fb_info voyafb_info; ++ ++int voyafb_init6(void); ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info); ++static int voyafb_set_par(struct fb_info *info); ++static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, ++ u_int transp, struct fb_info *info); ++static int voyafb_blank(int blank, struct fb_info *info); ++static int voyafb_ioctl(struct inode*, struct file*, ++ unsigned int, unsigned long, struct fb_info*); ++ ++static unsigned int pseudo_palette[16]; ++ ++static struct fb_ops voyafb_ops = { ++ .owner = THIS_MODULE, ++ .fb_check_var = voyafb_check_var, ++ .fb_set_par = voyafb_set_par, ++ .fb_setcolreg = voyafb_setcolreg, ++ .fb_blank = voyafb_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++ .fb_ioctl = voyafb_ioctl, ++}; ++ ++static struct fb_var_screeninfo voyafb_var __initdata = { ++ .xres = XRES, ++ .yres = YRES, ++ .xres_virtual = XRES, ++ .yres_virtual = YRES, ++ .bits_per_pixel = BPP, ++ .red = { 11,5,0 }, ++ .green = { 5,6,0 }, ++ .blue = { 0,5,0 }, ++ .height = -1, ++ .width = -1, ++ .vmode = FB_VMODE_NONINTERLACED, ++ .pixclock = 10000, ++ .left_margin = 16, ++ .right_margin = 16, ++ .upper_margin = 16, ++ .lower_margin = 16, ++ .hsync_len = 8, ++ .vsync_len = 8, ++}; ++ ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info) ++{ ++ if (var->xres > XRES || var->yres > YRES ++ || var->xres_virtual > XRES || var->yres_virtual > YRES ++ || var->bits_per_pixel != BPP ++ || var->nonstd ++ || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED) ++ return -EINVAL; ++ ++ var->xres = var->xres_virtual = XRES; ++ var->yres = var->yres_virtual = YRES; ++ ++ return 0; ++} ++ ++static int voyafb_set_par(struct fb_info *info) ++{ ++ info->fix.line_length = XRES*2; ++ info->fix.visual = FB_VISUAL_TRUECOLOR; ++ ++ info->var.red.offset = 11; ++ info->var.green.offset = 5; ++ info->var.blue.offset = 0; ++ info->var.red.length = info->var.blue.length = 5; ++ info->var.green.length = 6; ++ return 0; ++} ++ ++static int voyafb_blank(int blank, struct fb_info *info) ++{ ++ return 1; ++} ++ ++static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green, ++ unsigned blue, unsigned transp, ++ struct fb_info* info) ++{ ++ red >>= 11; ++ green >>= 11; ++ blue >>= 10; ++ ++ if (regno < 16) ++ ((u32 *)(info->pseudo_palette))[regno] = ((red & 31) << 6) | ++ ((green & 31) << 11) | ++ ((blue & 63)); ++ return 0; ++} ++ ++static int voyafb_ioctl(struct inode* inode, struct file* file, ++ unsigned int cmd, unsigned long arg, ++ struct fb_info* info) ++{ ++ if(cmd == VOYAGER_IOCTL_ENABLE) { ++ if(arg == 0) { ++ *(volatile unsigned long *)(CRT_DISPLAY_CTRL) &= 0xfffffffb; ++ } ++ else { ++ *(volatile unsigned long *)(CRT_DISPLAY_CTRL) |= 0x04; ++ } ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_TYPE) { ++ *(volatile unsigned long *)(CRT_DISPLAY_CTRL) &= 0xfffffffc; ++ *(volatile unsigned long *)(CRT_DISPLAY_CTRL) |= (arg & 0x03); ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_SELECT) { ++ if(arg == 0) { ++ *(volatile unsigned long *)(CRT_DISPLAY_CTRL) &= 0xfffffdff; ++ } ++ else { ++ *(volatile unsigned long *)(CRT_DISPLAY_CTRL) |= 0x00000200; ++ } ++ return 0; ++ } ++ return -EINVAL; ++} ++ ++ ++static void __init voya_hw_init(void) ++{ ++int i; ++ ++ *(volatile unsigned long *)(CRT_DISPLAY_CTRL) &= 0xfffffcf0; ++ *(volatile unsigned long *)(CRT_FB_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP6 & 0x00ffffff); ++ *(volatile unsigned long *)(CRT_FB_WIDTH) = 0x5000500; ++ *(volatile unsigned long *)(CRT_HORIZONTAL_TOTAL) = 0x033f027f; ++ *(volatile unsigned long *)(CRT_HORIZONTAL_SYNC) = 0x4a028b; ++ *(volatile unsigned long *)(CRT_VERTICAL_TOTAL) = 0x20c01df; ++ *(volatile unsigned long *)(CRT_VERTICAL_SYNC) = 0x201e9; ++ *(volatile unsigned long *)(CRT_DISPLAY_CTRL) |= 0x70000105; ++ //palet initialize ++ for(i=0;i<256;i++) { ++ *(volatile unsigned long *)(CRT_PALETTE_RAM+(i*4)) = (i << 16)+(i << 8)+i; ++ } ++} ++ ++ ++ ++static struct fb_fix_screeninfo voyafb_fix __initdata = { ++ .id = "VOYAGER CRT", ++ .type = FB_TYPE_PACKED_PIXELS, ++ .visual = FB_VISUAL_TRUECOLOR, ++ .accel = FB_ACCEL_NONE, ++ .line_length = XRES*2, ++ .smem_len = MAX_FRAMEBUFFER_MEM_SIZE, ++}; ++ ++ ++static void __init init_voya(struct fb_info *p, unsigned long addr) ++{ ++ p->fix = voyafb_fix; ++ p->fix.smem_start = addr; ++ ++ p->var = voyafb_var; ++ ++ p->fbops = &voyafb_ops; ++ p->flags = FBINFO_FLAG_DEFAULT; ++ p->pseudo_palette = pseudo_palette; ++ ++ fb_alloc_cmap(&p->cmap, 16, 0); ++ ++ if (register_framebuffer(p) < 0) { ++ printk(KERN_ERR "VOYAGER GX CRT framebuffer failed to register\n"); ++ return; ++ } ++ ++ printk(KERN_INFO "fb%d: VOYAGER GX_CRT frame buffer (%dK RAM detected)\n", ++ p->node, p->fix.smem_len / 1024); ++ ++ voya_hw_init(); ++} ++ ++int __init voyafb_init6(void) ++{ ++ struct fb_info *p = &voyafb_info; ++ unsigned long addr, size; ++ ++ addr = VOY_VRAM_TOP6; ++ size = MAX_FRAMEBUFFER_MEM_SIZE; ++ p->screen_base = ioremap((u_long)addr, ++ ALLOCATED_FB_MEM_SIZE); ++ if (p->screen_base == NULL) { ++ return -ENOMEM; ++ } ++ init_voya(p, addr); ++ memset(p->screen_base, 0, MAX_FRAMEBUFFER_MEM_SIZE); ++ ++ return 0; ++} ++ ++static void __exit voyafb_exit(void) ++{ ++ *(volatile unsigned long *)(CRT_DISPLAY_CTRL) &= 0xfffffffb; ++} ++ ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_gxfb.c linux-2.6.17/drivers/video/voyager/voyager_gxfb.c +--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_gxfb.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/voyager/voyager_gxfb.c 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,441 @@ ++/* ++ * linux/drivers/video/voyager_gxfb.c -- voyager panel frame buffer driver ++ * ++ * Copyright (C) 2003 Renesas Technology Sales Co.,Ltd. ++ * Copyright (C) 2003 Atom Create Engineering Co.,Ltd. ++ * Anthor : Atom Create Engineering Co.,Ltd. ++ * Kenichi Sakuma ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * 1.00 ++ * - initial version (ks) ++ * 1.01 ++ * - Kernel 2.6 correspondence ++ */ ++#include <linux/config.h> ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/errno.h> ++#include <linux/string.h> ++#include <linux/mm.h> ++#include <linux/tty.h> ++#include <linux/slab.h> ++#include <linux/vmalloc.h> ++#include <linux/delay.h> ++#include <linux/interrupt.h> ++#include <linux/fb.h> ++#include <linux/init.h> ++#include <asm/io.h> ++#include <asm/irq.h> ++#include <asm/mach/voyagergx_reg.h> ++#include <video/voyager.h> ++ ++#ifdef CONFIG_FB_VOYAGER_GX_MP ++#define MAX_VRAM MAX_FRAMEBUFFER_MEM_SIZE ++#else ++#define MAX_VRAM 1024*768*4 ++#endif ++ ++#ifdef CONFIG_FB_VOYAGER_GX_MP ++extern int voyafb_init2(void); ++extern int voyafb_init3(void); ++extern int voyafb_init4(void); ++extern int voyafb_init5(void); ++extern int voyafb_init6(void); ++extern int voyafb_init7(void); ++#endif ++ ++static struct fb_info voyafb_info; ++ ++static int voyafb_init(void); ++static int voyafbmem_init(void); ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info); ++static int voyafb_set_par(struct fb_info *info); ++static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, ++ u_int transp, struct fb_info *info); ++static int voyafb_blank(int blank, struct fb_info *info); ++static int voyafb_ioctl(struct inode*, struct file*, ++ unsigned int, unsigned long, struct fb_info*); ++static int voyafb_pan_display(struct fb_var_screeninfo *var, ++ struct fb_info *info); ++static void vsyncwait(int delay); ++static int change_mode(void); ++ ++typedef struct { ++ __u32 xres; ++ __u32 yres; ++ __u32 clock; ++ __u32 h_total; ++ __u32 h_sync; ++ __u32 v_total; ++ __u32 v_sync; ++} VOYA_CRT_DATA; ++ ++static VOYA_CRT_DATA clock_data[] = { ++ { 640, 480, 0x10021801, 0x33f027f, 0x4a028b, 0x20c01df, 0x201e9, }, ++ { 800, 600, 0x023a1801, 0x454031f, 0x9b0350, 0x2730257, 0x40258, }, ++ {1024, 768, 0x283a1801, 0x5460400, 0x800438, 0x3340300, 0x3031b, }, ++ {-1, -1, -1, -1, -1, -1, -1, }, ++}; ++static int clock_data_index = 0; ++static int clock_data_bpp = BPP; ++ ++static unsigned int pseudo_palette[17]; ++ ++static struct fb_ops voyafb_ops = { ++ .owner = THIS_MODULE, ++ .fb_check_var = voyafb_check_var, ++ .fb_set_par = voyafb_set_par, ++ .fb_setcolreg = voyafb_setcolreg, ++ .fb_blank = voyafb_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++ .fb_ioctl = voyafb_ioctl, ++ .fb_pan_display = voyafb_pan_display, ++}; ++ ++static struct fb_var_screeninfo voyafb_var __initdata = { ++ .xres = XRES, ++ .yres = YRES, ++ .xres_virtual = XRES, ++ .yres_virtual = YRES, ++ .bits_per_pixel = BPP, ++ .red = { 11,5,0 }, ++ .green = { 5,6,0 }, ++ .blue = { 0,5,0 }, ++ .height = -1, ++ .width = -1, ++ .vmode = FB_VMODE_NONINTERLACED, ++ .pixclock = 10000, ++ .left_margin = 0, ++ .right_margin = 0, ++ .upper_margin = 0, ++ .lower_margin = 0, ++ .hsync_len = 0, ++ .vsync_len = 0, ++}; ++ ++static int voyafb_pan_display(struct fb_var_screeninfo *var, ++ struct fb_info *info) ++{ ++ info->var.xoffset = 0; ++ info->var.yoffset = 0; ++ info->var.vmode &= ~FB_VMODE_YWRAP; ++ ++ return 0; ++} ++ ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info) ++{ ++#ifndef CONFIG_FB_VOYAGER_GX_MP ++ int i; ++#endif ++ ++#ifdef CONFIG_FB_VOYAGER_GX_MP ++ if (var->xres > XRES || var->yres > YRES ++ || var->xres_virtual > XRES || var->yres_virtual > YRES ++ || var->bits_per_pixel != BPP ++ || var->nonstd ++ || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED) ++ return -EINVAL; ++ ++ var->xres = var->xres_virtual = XRES; ++ var->yres = var->yres_virtual = YRES; ++#else ++ if ((var->bits_per_pixel != 8) && ++ (var->bits_per_pixel != 16) && ++ (var->bits_per_pixel != 32)) ++ return -EINVAL; ++ ++ for (i=0; clock_data[i].xres != -1; i++) ++ if ((clock_data[i].xres == var->xres) && ++ (clock_data[i].yres == var->yres)) ++ break; ++ ++ if (clock_data[i].xres == -1) ++ return -EINVAL; ++ ++ clock_data_index = i; ++ clock_data_bpp = var->bits_per_pixel; ++#endif ++ ++ return 0; ++} ++ ++static int voyafb_set_par(struct fb_info *info) ++{ ++#ifdef CONFIG_FB_VOYAGER_GX_MP ++ info->fix.line_length = XRES * 2; ++ info->fix.visual = FB_VISUAL_TRUECOLOR; ++ ++ info->var.bits_per_pixel = 16; ++ info->var.red.offset = 11; ++ info->var.green.offset = 5; ++ info->var.blue.offset = 0; ++ info->var.red.length = info->var.blue.length = 5; ++ info->var.green.length = 6; ++#else ++ if (clock_data_bpp == 8) { ++ info->fix.line_length = clock_data[clock_data_index].xres; ++ info->var.transp.offset = 0; ++ info->var.transp.length = 0; ++ info->var.red.length = info->var.blue.length = info->var.green.length = 8; ++ info->var.red.offset = info->var.blue.offset = info->var.green.offset = 0; ++ info->var.bits_per_pixel = 8; ++ info->fix.visual = FB_VISUAL_PSEUDOCOLOR; ++ } else if (clock_data_bpp == 16) { ++ info->fix.line_length = clock_data[clock_data_index].xres * 2; ++ info->var.transp.offset = 0; ++ info->var.transp.length = 0; ++ info->var.red.length = 5; ++ info->var.blue.length = 5; ++ info->var.green.length = 6; ++ info->var.red.offset = 11; ++ info->var.green.offset = 5; ++ info->var.blue.offset = 0; ++ info->var.bits_per_pixel = 16; ++ info->fix.visual = FB_VISUAL_TRUECOLOR; ++ } else { ++ info->fix.line_length = clock_data[clock_data_index].xres * 4; ++ info->var.transp.offset = 24; ++ info->var.transp.length = 8; ++ info->var.red.length = 8; ++ info->var.blue.length = 8; ++ info->var.green.length = 8; ++ info->var.red.offset = 16; ++ info->var.green.offset = 8; ++ info->var.blue.offset = 0; ++ info->var.bits_per_pixel = 32; ++ info->fix.visual = FB_VISUAL_TRUECOLOR; ++ } ++ change_mode(); ++#endif ++ ++ return 0; ++} ++ ++static int voyafb_blank(int blank, struct fb_info *info) ++{ ++ return 0; ++} ++ ++static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green, ++ unsigned blue, unsigned transp, ++ struct fb_info* info) ++{ ++ int *palette; ++ ++ if (regno > 256) ++ return 1; ++ ++ palette = (int *)PANEL_PALETTE_RAM; ++ palette[regno] = (red & 0xff) << 16 | (green & 0xff) << 8 | (blue & 0xff); ++ ((u32 *)(info->pseudo_palette))[regno] = (red & 0xff) << 16 | (green & 0xff) << 8 | (blue & 0xff); ++ ++ return 0; ++} ++ ++static int voyafb_ioctl(struct inode* inode, struct file* file, ++ unsigned int cmd, unsigned long arg, ++ struct fb_info* info) ++{ ++ static long *po; ++ int *wk; ++ ++ if (cmd == VOYAGER_IOCTL_DEBUG_ADD) { ++ po = (long *)arg; ++ return 0; ++ } else if (cmd == VOYAGER_IOCTL_DEBUG_GET) { ++ wk = (int *)arg; ++ *wk = *po; ++ return 0; ++ } else if (cmd == VOYAGER_IOCTL_DEBUG_PUT) { ++ *po = arg; ++ return 0; ++ } else if (cmd == VOYAGER_IOCTL_ENABLE) { ++ if (arg == 0) ++ *(volatile unsigned long *)(PANEL_DISPLAY_CTRL) &= 0xfffffffb; ++ else ++ *(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x04; ++ return 0; ++ } else if (cmd == VOYAGER_IOCTL_TYPE) { ++ *(volatile unsigned long *)(PANEL_DISPLAY_CTRL) &= 0xfffffffc; ++ *(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= (arg & 0x03); ++ return 0; ++ } ++ ++ return -EINVAL; ++} ++ ++static void __init voya_hw_init(void) ++{ ++ int i; ++ ++ //DAC enable ++ *(volatile unsigned long *)(MISC_CTRL) &= 0xffffefff; ++ ++ //Power Gate ++ *(volatile unsigned long *)(POWER_MODE0_GATE) |= 0x7f; ++ *(volatile unsigned long *)(POWER_MODE1_GATE) |= 0x7f; ++ ++ //Power Clock ++ *(volatile unsigned long *)(POWER_MODE0_CLOCK) = 0x10021801; ++ *(volatile unsigned long *)(POWER_MODE1_CLOCK) = 0x10021801; ++ ++ //Power Mode Control ++ *(volatile unsigned long *)(POWER_MODE_CTRL) = 0; ++ ++ //Miscellaneous Timing ++ *(volatile unsigned long *)(PANEL_DISPLAY_CTRL) &= 0xfffffffb; ++ *(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) &= 0xfffffffb; ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xfffffffb; ++ *(volatile unsigned long *)(ALPHA_DISPLAY_CTRL) &= 0xfffffffb; ++ *(volatile unsigned long *)(PANEL_HWC_ADDRESS) &= 0x7fffffff; ++ *(volatile unsigned long *)(CRT_DISPLAY_CTRL) &= 0xfffffffb; ++ *(volatile unsigned long *)(CRT_HWC_ADDRESS) &= 0x7fffffff; ++ ++ change_mode(); ++ ++ vsyncwait(4); ++ *(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x1000000; ++ vsyncwait(4); ++ *(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x3000000; ++ vsyncwait(4); ++ *(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x7000000; ++ ++ //palet initialize ++ for (i=0; i<256; i++) { ++ *(volatile unsigned long *)(PANEL_PALETTE_RAM+(i*4)) = (i << 16)+(i << 8)+i; ++ } ++} ++ ++static struct fb_fix_screeninfo voyafb_fix __initdata = { ++ .id = "VOYAGER PANEL", ++ .type = FB_TYPE_PACKED_PIXELS, ++ .visual = FB_VISUAL_TRUECOLOR, ++ .accel = FB_ACCEL_NONE, ++ .line_length = XRES * (BPP / 8), ++ .smem_len = MAX_VRAM, ++}; ++ ++ ++static void __init init_voya(struct fb_info *p, unsigned long addr) ++{ ++ p->fix = voyafb_fix; ++ p->fix.smem_start = addr; ++ ++ p->var = voyafb_var; ++ ++ p->fbops = &voyafb_ops; ++ p->flags = FBINFO_DEFAULT; ++ p->pseudo_palette = pseudo_palette; ++ ++ fb_alloc_cmap(&p->cmap, 16, 0); ++ ++ if (register_framebuffer(p) < 0) { ++ printk(KERN_ERR "VOYAGER GX PANEL framebuffer failed to register\n"); ++ return; ++ } ++ ++ printk(KERN_INFO "fb%d: VOYAGER GX_PANEL frame buffer (%dK RAM detected)\n", ++ p->node, p->fix.smem_len / 1024); ++ ++ voya_hw_init(); ++} ++ ++static int __init voyafb_init(void) ++{ ++ struct fb_info *p = &voyafb_info; ++ unsigned long addr; ++ ++ if (fb_get_options("voyager_panel_fb", NULL)) ++ return -ENODEV; ++ ++ addr = VOY_VRAM_TOP0; ++ p->screen_base = ioremap((u_long)addr, ALLOCATED_FB_MEM_SIZE); ++ if (p->screen_base == NULL) ++ return -ENOMEM; ++ ++ init_voya(p, addr); ++ ++ return 0; ++} ++ ++static void __exit voyafb_exit(void) ++{ ++ *(volatile unsigned long *)(PANEL_DISPLAY_CTRL) &= 0xfffffffb; ++} ++ ++static int __init voyafbmem_init(void) ++{ ++ voyafb_init(); ++#ifdef CONFIG_FB_VOYAGER_GX_MP ++ voyafb_init2(); ++ voyafb_init3(); ++ voyafb_init4(); ++ voyafb_init5(); ++ voyafb_init6(); ++ voyafb_init7(); ++#endif ++ ++ return 0; ++} ++ ++module_init(voyafbmem_init); ++ ++static void vsyncwait(int delay) ++{ ++ int reg; ++ ++ while(delay-- > 0) { ++ do { ++ reg = *(volatile unsigned long *)(CMD_INTPR_STATUS); ++ } while(reg & 0x1000); ++ do { ++ reg = *(volatile unsigned long *)(CMD_INTPR_STATUS); ++ } while(!reg & 0x1000); ++ } ++} ++ ++static int change_mode() ++{ ++ int size,xres,yres; ++ ++ xres = clock_data[clock_data_index].xres; ++ yres = clock_data[clock_data_index].yres; ++ size = clock_data_bpp / 8; ++ ++ //Power Clock ++ *(volatile unsigned long *)(POWER_MODE0_CLOCK) = clock_data[clock_data_index].clock; ++ *(volatile unsigned long *)(POWER_MODE1_CLOCK) = clock_data[clock_data_index].clock; ++ //PANEL register SET ++ *(volatile unsigned long *)(PANEL_FB_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP0 & 0x00ffffff); ++ *(volatile unsigned long *)(PANEL_FB_WIDTH) = (xres * size) << 16 | (xres * size); ++ *(volatile unsigned long *)(PANEL_WINDOW_WIDTH) = (xres << 16); ++ *(volatile unsigned long *)(PANEL_WINDOW_HEIGHT) = (yres << 16); ++ *(volatile unsigned long *)(PANEL_PLANE_TL) = 0; ++ *(volatile unsigned long *)(PANEL_PLANE_BR) = ((yres-1) << 16) | (xres-1); ++ *(volatile unsigned long *)(PANEL_HORIZONTAL_TOTAL) = clock_data[clock_data_index].h_total; ++ *(volatile unsigned long *)(PANEL_HORIZONTAL_SYNC) = clock_data[clock_data_index].h_sync; ++ *(volatile unsigned long *)(PANEL_VERTICAL_TOTAL) = clock_data[clock_data_index].v_total; ++ *(volatile unsigned long *)(PANEL_VERTICAL_SYNC) = clock_data[clock_data_index].v_sync; ++ ++ *(volatile unsigned long *)(PANEL_DISPLAY_CTRL) &= 0xffffcea8; ++ if (size == 1) ++ *(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x3104; ++ else if (size == 2) ++ *(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x3105; ++ else ++ *(volatile unsigned long *)(PANEL_DISPLAY_CTRL) |= 0x3106; ++ ++ return(0); ++} ++ ++MODULE_LICENSE("GPL"); ++ +diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_panelcsrfb.c linux-2.6.17/drivers/video/voyager/voyager_panelcsrfb.c +--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_panelcsrfb.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/voyager/voyager_panelcsrfb.c 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,240 @@ ++/* ++ * linux/drivers/video/voyager_panelcsrfb.c -- voyager panel HWC frame buffer driver ++ * ++ * Copyright (C) 2003 Renesas Technology Sales Co.,Ltd. ++ * Copyright (C) 2003 Atom Create Engineering Co.,Ltd. ++ * Anthor : Atom Create Engineering Co.,Ltd. ++ * Kenichi Sakuma ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * 1.00 ++ * - initial version (ks) ++ * 1.01 ++ * - Kernel 2.6 correspondence ++ */ ++#include <linux/config.h> ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/errno.h> ++#include <linux/string.h> ++#include <linux/mm.h> ++#include <linux/tty.h> ++#include <linux/slab.h> ++#include <linux/vmalloc.h> ++#include <linux/delay.h> ++#include <linux/interrupt.h> ++#include <linux/fb.h> ++#include <linux/init.h> ++#include <asm/io.h> ++#include <asm/irq.h> ++#include <asm/mach/voyagergx_reg.h> ++#include <video/voyager.h> ++ ++static struct fb_info voyafb_info; ++ ++int voyafb_init5(void); ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info); ++static int voyafb_set_par(struct fb_info *info); ++static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, ++ u_int transp, struct fb_info *info); ++static int voyafb_blank(int blank, struct fb_info *info); ++static int voyafb_ioctl(struct inode*, struct file*, ++ unsigned int, unsigned long, struct fb_info*); ++static int change_mode(struct fb_var_screeninfo *var); ++ ++static unsigned int pseudo_palette[16]; ++ ++static struct fb_ops voyafb_ops = { ++ .owner = THIS_MODULE, ++ .fb_check_var = voyafb_check_var, ++ .fb_set_par = voyafb_set_par, ++ .fb_setcolreg = voyafb_setcolreg, ++ .fb_blank = voyafb_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++ .fb_ioctl = voyafb_ioctl, ++}; ++ ++static struct fb_var_screeninfo voyafb_var __initdata = { ++ .xres = CSR_XRES, ++ .yres = CSR_YRES, ++ .xres_virtual = CSR_XRES, ++ .yres_virtual = CSR_YRES, ++ .bits_per_pixel = CSR_BPP, ++ .red = { 11,5,0 }, ++ .green = { 5,6,0 }, ++ .blue = { 0,5,0 }, ++ .height = -1, ++ .width = -1, ++ .vmode = FB_VMODE_NONINTERLACED, ++ .pixclock = 10000, ++ .left_margin = 16, ++ .right_margin = 16, ++ .upper_margin = 16, ++ .lower_margin = 16, ++ .hsync_len = 8, ++ .vsync_len = 8, ++}; ++ ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info) ++{ ++ if (var->xres > CSR_XRES || var->yres > CSR_YRES ++ || var->xres_virtual > CSR_XRES || var->yres_virtual > CSR_YRES ++ || var->bits_per_pixel != CSR_BPP ++ || var->nonstd ++ || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED) ++ return -EINVAL; ++ ++ var->xres = var->xres_virtual = CSR_XRES; ++ var->yres = var->yres_virtual = CSR_YRES; ++ if(change_mode(var) != 0) { ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++static int voyafb_set_par(struct fb_info *info) ++{ ++ info->fix.line_length = CSR_XRES/2; ++ info->fix.visual = FB_VISUAL_TRUECOLOR; ++ ++ info->var.red.offset = 11; ++ info->var.green.offset = 5; ++ info->var.blue.offset = 0; ++ info->var.red.length = info->var.blue.length = 5; ++ info->var.green.length = 6; ++ return 0; ++} ++ ++static int voyafb_blank(int blank, struct fb_info *info) ++{ ++ return 1; ++} ++ ++static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green, ++ unsigned blue, unsigned transp, ++ struct fb_info* info) ++{ ++ red >>= 11; ++ green >>= 11; ++ blue >>= 10; ++ ++ if (regno < 16) ++ ((u32 *)(info->pseudo_palette))[regno] = ((red & 31) << 6) | ++ ((green & 31) << 11) | ++ ((blue & 63)); ++ return 0; ++} ++ ++static int voyafb_ioctl(struct inode* inode, struct file* file, ++ unsigned int cmd, unsigned long arg, ++ struct fb_info* info) ++{ ++ if(cmd == VOYAGER_IOCTL_ENABLE) { ++ if(arg == 0) { ++ *(volatile unsigned long *)(PANEL_HWC_ADDRESS) &= 0x7fffffff; ++ } ++ else { ++ *(volatile unsigned long *)(PANEL_HWC_ADDRESS) |= 0x80000000; ++ } ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_COLOR_1) { ++ *(volatile unsigned long *)(PANEL_HWC_COLOR_12) = arg; ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_COLOR_2) { ++ *(volatile unsigned long *)(PANEL_HWC_COLOR_3) = arg; ++ return 0; ++ } ++ return -EINVAL; ++} ++ ++ ++static void __init voya_hw_init(void) ++{ ++ *(volatile unsigned long *)(PANEL_HWC_ADDRESS) = (VOY_VRAM_TOP5 & 0x00ffffff); ++ *(volatile unsigned long *)(PANEL_HWC_COLOR_12) = 0x5555aaaa; ++ *(volatile unsigned long *)(PANEL_HWC_COLOR_3) = 0x0000ffff; ++ change_mode(&voyafb_var); ++} ++ ++ ++ ++static struct fb_fix_screeninfo voyafb_fix __initdata = { ++ .id = "VOYAGER P_CSR", ++ .type = FB_TYPE_PACKED_PIXELS, ++ .visual = FB_VISUAL_TRUECOLOR, ++ .accel = FB_ACCEL_NONE, ++ .line_length = CSR_XRES/2, ++ .smem_len = MAX_HWC_MEM_SIZE, ++}; ++ ++ ++static void __init init_voya(struct fb_info *p, unsigned long addr) ++{ ++ p->fix = voyafb_fix; ++ p->fix.smem_start = addr; ++ ++ p->var = voyafb_var; ++ ++ p->fbops = &voyafb_ops; ++ p->flags = FBINFO_FLAG_DEFAULT; ++ p->pseudo_palette = pseudo_palette; ++ ++ fb_alloc_cmap(&p->cmap, 16, 0); ++ ++ if (register_framebuffer(p) < 0) { ++ printk(KERN_ERR "VOYAGER GX PANEL CSR framebuffer failed to register\n"); ++ return; ++ } ++ ++ printk(KERN_INFO "fb%d: VOYAGER GX_PANEL CSR frame buffer (%dK RAM detected)\n", ++ p->node, p->fix.smem_len / 1024); ++ ++ voya_hw_init(); ++} ++ ++int __init voyafb_init5(void) ++{ ++ struct fb_info *p = &voyafb_info; ++ unsigned long addr, size; ++ ++ addr = VOY_VRAM_TOP6; ++ size = MAX_HWC_MEM_SIZE; ++ p->screen_base = ioremap((u_long)addr, ++ ALLOCATED_FB_MEM_SIZE); ++ if (p->screen_base == NULL) { ++ return -ENOMEM; ++ } ++ init_voya(p, addr); ++ memset(p->screen_base, 0, MAX_HWC_MEM_SIZE); ++ ++ return 0; ++} ++ ++static void __exit voyafb_exit(void) ++{ ++ *(volatile unsigned long *)(PANEL_HWC_ADDRESS) &= 0x7fffffff; ++} ++ ++static int change_mode(struct fb_var_screeninfo *var) ++{ ++ if((var->xoffset < 0)||(var->xoffset > XRES)|| ++ (var->yoffset < 0)||(var->yoffset > YRES)) ++ { ++ return(-1); ++ } ++ *(volatile unsigned long *)(PANEL_HWC_LOCATION) = (var->yoffset << 16) | ++ var->xoffset; ++ return(0); ++} ++ ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_valphafb.c linux-2.6.17/drivers/video/voyager/voyager_valphafb.c +--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_valphafb.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/voyager/voyager_valphafb.c 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,286 @@ ++/* ++ * linux/drivers/video/voyager_valphafb.c -- voyager video alpha frame buffer driver ++ * ++ * Copyright (C) 2003 Renesas Technology Sales Co.,Ltd. ++ * Copyright (C) 2003 Atom Create Engineering Co.,Ltd. ++ * Anthor : Atom Create Engineering Co.,Ltd. ++ * Kenichi Sakuma ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * 1.00 ++ * - initial version (ks) ++ * 1.01 ++ * - Kernel 2.6 correspondence ++ */ ++#include <linux/config.h> ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/errno.h> ++#include <linux/string.h> ++#include <linux/mm.h> ++#include <linux/tty.h> ++#include <linux/slab.h> ++#include <linux/vmalloc.h> ++#include <linux/delay.h> ++#include <linux/interrupt.h> ++#include <linux/fb.h> ++#include <linux/init.h> ++#include <asm/io.h> ++#include <asm/irq.h> ++#include <asm/mach/voyagergx_reg.h> ++#include <video/voyager.h> ++ ++static struct fb_info voyafb_info; ++ ++int voyafb_init3(void); ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info); ++static int voyafb_set_par(struct fb_info *info); ++static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, ++ u_int transp, struct fb_info *info); ++static int voyafb_blank(int blank, struct fb_info *info); ++static int voyafb_ioctl(struct inode*, struct file*, ++ unsigned int, unsigned long, struct fb_info*); ++static int change_mode(struct fb_var_screeninfo *var); ++ ++static unsigned int pseudo_palette[16]; ++ ++static struct fb_ops voyafb_ops = { ++ .owner = THIS_MODULE, ++ .fb_check_var = voyafb_check_var, ++ .fb_set_par = voyafb_set_par, ++ .fb_setcolreg = voyafb_setcolreg, ++ .fb_blank = voyafb_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++ .fb_ioctl = voyafb_ioctl, ++}; ++ ++static struct fb_var_screeninfo voyafb_var __initdata = { ++ .xres = XRES, ++ .yres = YRES, ++ .xres_virtual = XRES, ++ .yres_virtual = YRES, ++ .bits_per_pixel = BPP, ++ .red = { 11,5,0 }, ++ .green = { 5,6,0 }, ++ .blue = { 0,5,0 }, ++ .height = -1, ++ .width = -1, ++ .vmode = FB_VMODE_NONINTERLACED, ++ .pixclock = 10000, ++ .left_margin = 16, ++ .right_margin = 16, ++ .upper_margin = 16, ++ .lower_margin = 16, ++ .hsync_len = 8, ++ .vsync_len = 8, ++}; ++ ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info) ++{ ++ if (var->xres > XRES || var->yres > YRES ++ || var->xres_virtual > XRES || var->yres_virtual > YRES ++ || var->bits_per_pixel != BPP ++ || var->nonstd ++ || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED) ++ return -EINVAL; ++ ++ var->xres_virtual = XRES; ++ var->yres_virtual = YRES; ++ ++ if(change_mode(var) != 0) { ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++static int voyafb_set_par(struct fb_info *info) ++{ ++ info->fix.line_length = XRES*2; ++ info->fix.visual = FB_VISUAL_TRUECOLOR; ++ ++ info->var.red.offset = 11; ++ info->var.green.offset = 5; ++ info->var.blue.offset = 0; ++ info->var.red.length = info->var.blue.length = 5; ++ info->var.green.length = 6; ++ return 0; ++} ++ ++static int voyafb_blank(int blank, struct fb_info *info) ++{ ++ return 1; ++} ++ ++static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green, ++ unsigned blue, unsigned transp, ++ struct fb_info* info) ++{ ++ red >>= 11; ++ green >>= 11; ++ blue >>= 10; ++ ++ if (regno < 16) ++ ((u32 *)(info->pseudo_palette))[regno] = ((red & 31) << 6) | ++ ((green & 31) << 11) | ++ ((blue & 63)); ++ return 0; ++} ++ ++static int voyafb_ioctl(struct inode* inode, struct file* file, ++ unsigned int cmd, unsigned long arg, ++ struct fb_info* info) ++{ ++ if(cmd == VOYAGER_IOCTL_ENABLE) { ++ if(arg == 0) { ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xfffffffb; ++ } ++ else { ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= 0x04; ++ } ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_ENABLE_CK) { ++ if(arg == 0) { ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xfffffff7; ++ } ++ else { ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= 0x08; ++ } ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_ENABLE_AL) { ++ if(arg == 0) { ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xefffffff; ++ } ++ else { ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= 0x10000000; ++ } ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_SCALE) { ++ *(volatile unsigned long *)(VIDEO_ALPHA_SCALE) = arg; ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_CHKEY) { ++ *(volatile unsigned long *)(VIDEO_ALPHA_CHROMA_KEY) = arg; ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_TYPE) { ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xfffffffc; ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= (arg & 0x03); ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_ALPHA) { ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xf0ffffff; ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= (arg & 0x0f) << 24; ++ return 0; ++ } ++ return -EINVAL; ++} ++ ++static void __init voya_hw_init(void) ++{ ++ *(volatile unsigned long *)(VIDEO_ALPHA_FB_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP3 & 0x00ffffff); ++ change_mode(&voyafb_var); ++ *(volatile unsigned long *)(VIDEO_ALPHA_SCALE) = 0; ++ *(volatile unsigned long *)(VIDEO_ALPHA_CHROMA_KEY) = 0; ++ ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xfffffff0; ++// *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= 0x05; ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) |= 0x01; ++} ++ ++static struct fb_fix_screeninfo voyafb_fix __initdata = { ++ .id = "VOYAGER VALPHA", ++ .type = FB_TYPE_PACKED_PIXELS, ++ .visual = FB_VISUAL_TRUECOLOR, ++ .accel = FB_ACCEL_NONE, ++ .line_length = XRES*2, ++ .smem_len = MAX_FRAMEBUFFER_MEM_SIZE, ++}; ++ ++ ++static void __init init_voya(struct fb_info *p, unsigned long addr) ++{ ++ p->fix = voyafb_fix; ++ p->fix.smem_start = addr; ++ ++ p->var = voyafb_var; ++ ++ p->fbops = &voyafb_ops; ++ p->flags = FBINFO_FLAG_DEFAULT; ++ p->pseudo_palette = pseudo_palette; ++ ++ fb_alloc_cmap(&p->cmap, 16, 0); ++ ++ if (register_framebuffer(p) < 0) { ++ printk(KERN_ERR "VOYAGER GX VIDEO ALPHA framebuffer failed to register\n"); ++ return; ++ } ++ ++ printk(KERN_INFO "fb%d: VOYAGER GX_VIDEO_ALPHA frame buffer (%dK RAM detected)\n", ++ p->node, p->fix.smem_len / 1024); ++ ++ voya_hw_init(); ++} ++ ++int __init voyafb_init3(void) ++{ ++ struct fb_info *p = &voyafb_info; ++ unsigned long addr, size; ++ ++ addr = VOY_VRAM_TOP3; ++ size = MAX_FRAMEBUFFER_MEM_SIZE; ++ p->screen_base = ioremap((u_long)addr, ++ ALLOCATED_FB_MEM_SIZE); ++ if (p->screen_base == NULL) { ++ return -ENOMEM; ++ } ++ init_voya(p, addr); ++ memset(p->screen_base, 0, MAX_FRAMEBUFFER_MEM_SIZE); ++ ++ return 0; ++} ++ ++static void __exit voyafb_exit(void) ++{ ++ *(volatile unsigned long *)(VIDEO_ALPHA_DISPLAY_CTRL) &= 0xfffffffb; ++} ++ ++ ++//------------------------------------------------------------------------------------ ++static int change_mode(struct fb_var_screeninfo *var) ++{ ++int x,ali,size; ++ ++ if((var->xres < 0)||(var->xres > XRES)|| ++ (var->yres < 0)||(var->yres > YRES)|| ++ (var->xres_virtual < 0)||(var->xres_virtual > XRES)|| ++ (var->yres_virtual < 0)||(var->yres_virtual > YRES)|| ++ (var->xoffset < 0)||(var->xoffset > XRES)|| ++ (var->yoffset < 0)||(var->yoffset > YRES)) ++ { ++ return(-1); ++ } ++ x = var->xres_virtual * 2; ++ ali = x + (x % 16); ++ *(volatile unsigned long *)(VIDEO_ALPHA_FB_WIDTH) = (ali << 16) | ali; ++ *(volatile unsigned long *)(VIDEO_ALPHA_PLANE_TL) = (var->yoffset << 16) | ++ var->xoffset; ++ *(volatile unsigned long *)(VIDEO_ALPHA_PLANE_BR) = ++ ((var->yoffset + var->yres - 1) << 16) | ++ (var->xoffset + var->xres - 1); ++ size = var->xres_virtual * var->yres_virtual * var->bits_per_pixel / 8; ++ *(volatile unsigned long *)(VIDEO_ALPHA_FB_LAST_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP3 & 0x00ffffff) + size; ++ return(0); ++} ++ ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/drivers/video/voyager/voyager_videofb.c linux-2.6.17/drivers/video/voyager/voyager_videofb.c +--- linux-2.6.17-vanilla/drivers/video/voyager/voyager_videofb.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/drivers/video/voyager/voyager_videofb.c 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,273 @@ ++/* ++ * linux/drivers/video/voyager_videofb.c -- voyager video frame buffer driver ++ * ++ * Copyright (C) 2003 Renesas Technology Sales Co.,Ltd. ++ * Copyright (C) 2003 Atom Create Engineering Co.,Ltd. ++ * Anthor : Atom Create Engineering Co.,Ltd. ++ * Kenichi Sakuma ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * 1.00 ++ * - initial version (ks) ++ * 1.01 ++ * - Kernel 2.6 correspondence ++ */ ++#include <linux/config.h> ++#include <linux/module.h> ++#include <linux/kernel.h> ++#include <linux/errno.h> ++#include <linux/string.h> ++#include <linux/mm.h> ++#include <linux/tty.h> ++#include <linux/slab.h> ++#include <linux/vmalloc.h> ++#include <linux/delay.h> ++#include <linux/interrupt.h> ++#include <linux/fb.h> ++#include <linux/init.h> ++#include <asm/io.h> ++#include <asm/irq.h> ++#include <asm/mach/voyagergx_reg.h> ++#include <video/voyager.h> ++ ++static struct fb_info voyafb_info; ++ ++int voyafb_init2(void); ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info); ++static int voyafb_set_par(struct fb_info *info); ++static int voyafb_setcolreg(u_int regno, u_int red, u_int green, u_int blue, ++ u_int transp, struct fb_info *info); ++static int voyafb_blank(int blank, struct fb_info *info); ++static int voyafb_ioctl(struct inode*, struct file*, ++ unsigned int, unsigned long, struct fb_info*); ++static int change_mode(struct fb_var_screeninfo *var); ++ ++static unsigned int pseudo_palette[16]; ++ ++static struct fb_ops voyafb_ops = { ++ .owner = THIS_MODULE, ++ .fb_check_var = voyafb_check_var, ++ .fb_set_par = voyafb_set_par, ++ .fb_setcolreg = voyafb_setcolreg, ++ .fb_blank = voyafb_blank, ++ .fb_fillrect = cfb_fillrect, ++ .fb_copyarea = cfb_copyarea, ++ .fb_imageblit = cfb_imageblit, ++ .fb_ioctl = voyafb_ioctl, ++}; ++ ++static struct fb_var_screeninfo voyafb_var __initdata = { ++ .xres = XRES, ++ .yres = YRES, ++ .xres_virtual = XRES, ++ .yres_virtual = YRES, ++ .bits_per_pixel = BPP, ++ .red = { 11,5,0 }, ++ .green = { 5,6,0 }, ++ .blue = { 0,5,0 }, ++ .height = -1, ++ .width = -1, ++ .vmode = FB_VMODE_NONINTERLACED, ++ .pixclock = 10000, ++ .left_margin = 16, ++ .right_margin = 16, ++ .upper_margin = 16, ++ .lower_margin = 16, ++ .hsync_len = 8, ++ .vsync_len = 8, ++}; ++ ++static int voyafb_check_var(struct fb_var_screeninfo *var, ++ struct fb_info *info) ++{ ++ if (var->xres > XRES || var->yres > YRES ++ || var->xres_virtual > XRES || var->yres_virtual > YRES ++ || var->bits_per_pixel != BPP ++ || var->nonstd ++ || (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED) ++ return -EINVAL; ++ ++ var->xres_virtual = XRES; ++ var->yres_virtual = YRES; ++ ++ if(change_mode(var) != 0) { ++ return -EINVAL; ++ } ++ ++ return 0; ++} ++ ++static int voyafb_set_par(struct fb_info *info) ++{ ++ info->fix.line_length = XRES*2; ++ info->fix.visual = FB_VISUAL_TRUECOLOR; ++ ++ info->var.red.offset = 11; ++ info->var.green.offset = 5; ++ info->var.blue.offset = 0; ++ info->var.red.length = info->var.blue.length = 5; ++ info->var.green.length = 6; ++ return 0; ++} ++ ++static int voyafb_blank(int blank, struct fb_info *info) ++{ ++ return 1; ++} ++ ++static int voyafb_setcolreg(unsigned regno, unsigned red, unsigned green, ++ unsigned blue, unsigned transp, ++ struct fb_info* info) ++{ ++ red >>= 11; ++ green >>= 11; ++ blue >>= 10; ++ ++ if (regno < 16) ++ ((u32 *)(info->pseudo_palette))[regno] = ((red & 31) << 6) | ++ ((green & 31) << 11) | ++ ((blue & 63)); ++ return 0; ++} ++ ++static int voyafb_ioctl(struct inode* inode, struct file* file, ++ unsigned int cmd, unsigned long arg, ++ struct fb_info* info) ++{ ++ if(cmd == VOYAGER_IOCTL_ENABLE) { ++ if(arg == 0) { ++ *(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) &= 0xfffffffb; ++ } ++ else { ++ *(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) |= 0x04; ++ } ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_ENABLE_CP) { ++ if(arg == 0) { ++ *(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) &= 0xffffbfff; ++ } ++ else { ++ *(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) |= 0x00004000; ++ } ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_SCALE) { ++ *(volatile unsigned long *)(VIDEO_SCALE) = arg; ++ return 0; ++ } ++ else if(cmd == VOYAGER_IOCTL_TYPE) { ++ *(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) &= 0xfffffffc; ++ *(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) |= (arg & 0x03); ++ return 0; ++ } ++ return -EINVAL; ++} ++ ++static void __init voya_hw_init(void) ++{ ++int i; ++ ++ *(volatile unsigned long *)(VIDEO_FB_0_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP1 & 0x00ffffff); ++ *(volatile unsigned long *)(VIDEO_FB_1_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP2 & 0x00ffffff); ++ change_mode(&voyafb_var); ++ *(volatile unsigned long *)(VIDEO_SCALE) = 0; ++ ++ *(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) &= 0xffffcea8; ++ *(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) |= 0x10003; ++ //palet initialize ++ for(i=0;i<256;i++) { ++ *(volatile unsigned long *)(VIDEO_PALETTE_RAM+(i*4)) = (i << 16)+(i << 8)+i; ++ } ++} ++ ++static struct fb_fix_screeninfo voyafb_fix __initdata = { ++ .id = "VOYAGER VIDEO", ++ .type = FB_TYPE_PACKED_PIXELS, ++ .visual = FB_VISUAL_TRUECOLOR, ++ .accel = FB_ACCEL_NONE, ++ .line_length = XRES*2, ++ .smem_len = MAX_FRAMEBUFFER_MEM_SIZE, ++}; ++ ++ ++static void __init init_voya(struct fb_info *p, unsigned long addr) ++{ ++ p->fix = voyafb_fix; ++ p->fix.smem_start = addr; ++ ++ p->var = voyafb_var; ++ ++ p->fbops = &voyafb_ops; ++ p->flags = FBINFO_FLAG_DEFAULT; ++ p->pseudo_palette = pseudo_palette; ++ ++ fb_alloc_cmap(&p->cmap, 16, 0); ++ ++ if (register_framebuffer(p) < 0) { ++ printk(KERN_ERR "VOYAGER GX VIDEO framebuffer failed to register\n"); ++ return; ++ } ++ ++ printk(KERN_INFO "fb%d: VOYAGER GX_VIDEO frame buffer (%dK RAM detected)\n", ++ p->node, p->fix.smem_len / 1024); ++ ++ voya_hw_init(); ++} ++ ++int __init voyafb_init2(void) ++{ ++ struct fb_info *p = &voyafb_info; ++ unsigned long addr, size; ++ ++ addr = VOY_VRAM_TOP1; ++ size = MAX_FRAMEBUFFER_MEM_SIZE; ++ p->screen_base = ioremap((u_long)addr, ++ ALLOCATED_FB_MEM_SIZE); ++ if (p->screen_base == NULL) { ++ return -ENOMEM; ++ } ++ init_voya(p, addr); ++ memset(p->screen_base, 0, MAX_FRAMEBUFFER_MEM_SIZE); ++ ++ return 0; ++} ++ ++static void __exit voyafb_exit(void) ++{ ++ *(volatile unsigned long *)(VIDEO_DISPLAY_CTRL) &= 0xfffffffb; ++} ++ ++ ++//------------------------------------------------------------------------------------ ++static int change_mode(struct fb_var_screeninfo *var) ++{ ++int x,ali,size; ++ ++ if((var->xres < 0)||(var->xres > XRES)|| ++ (var->yres < 0)||(var->yres > YRES)|| ++ (var->xres_virtual < 0)||(var->xres_virtual > XRES)|| ++ (var->yres_virtual < 0)||(var->yres_virtual > YRES)|| ++ (var->xoffset < 0)||(var->xoffset > XRES)|| ++ (var->yoffset < 0)||(var->yoffset > YRES)) ++ { ++ return(-1); ++ } ++ x = var->xres_virtual * 2; ++ ali = x + (x % 16); ++ *(volatile unsigned long *)(VIDEO_FB_WIDTH) = (ali << 16) | ali; ++ *(volatile unsigned long *)(VIDEO_PLANE_TL) = (var->yoffset << 16) | var->xoffset; ++ *(volatile unsigned long *)(VIDEO_PLANE_BR) = ++ ((var->yoffset + var->yres - 1) << 16) | ++ (var->xoffset + var->xres - 1); ++ size = var->xres_virtual * var->yres_virtual * var->bits_per_pixel / 8; ++ *(volatile unsigned long *)(VIDEO_FB_0_LAST_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP1 & 0x00ffffff) + size; ++ *(volatile unsigned long *)(VIDEO_FB_1_LAST_ADDRESS) = 0x80000000 + (VOY_VRAM_TOP2 & 0x00ffffff) + size; ++ return(0); ++} ++ ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/include/CVS/Entries linux-2.6.17/include/CVS/Entries +--- linux-2.6.17-vanilla/include/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/CVS/Entries 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,3 @@ ++D/asm-sh//// ++D/linux//// ++D/video//// +diff -ruN linux-2.6.17-vanilla/include/CVS/Repository linux-2.6.17/include/CVS/Repository +--- linux-2.6.17-vanilla/include/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/CVS/Repository 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include +diff -ruN linux-2.6.17-vanilla/include/CVS/Root linux-2.6.17/include/CVS/Root +--- linux-2.6.17-vanilla/include/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/CVS/Root 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/CVS/Entries linux-2.6.17/include/asm-sh/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/CVS/Entries 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,114 @@ ++/adc.h/1.2/Fri Sep 24 14:58:00 2004/-ko/ ++/apm.h/1.1/Sun Jan 29 17:46:24 2006// ++/atomic.h/1.6/Mon Mar 27 21:06:15 2006/-ko/ ++/bug.h/1.5/Tue Jun 21 04:15:52 2005// ++/bugs.h/1.8/Sun Aug 21 23:47:31 2005// ++/byteorder.h/1.4/Wed Feb 4 16:16:29 2004/-ko/ ++/cache.h/1.11/Mon Mar 27 21:06:15 2006/-ko/ ++/cacheflush.h/1.7/Sat Dec 31 11:30:47 2005// ++/checksum.h/1.9/Sat Jan 7 20:08:29 2006// ++/clock.h/1.2/Sun Nov 13 16:57:33 2005/-ko/ ++/current.h/1.3/Sun May 4 19:30:00 2003/-ko/ ++/delay.h/1.3/Tue May 6 23:33:19 2003/-ko/ ++/div64.h/1.5/Mon Jul 21 13:36:14 2003/-ko/ ++/dma-mapping.h/1.12/Wed Jan 4 13:24:06 2006// ++/dma.h/1.18/Sun Oct 16 18:27:54 2005// ++/elf.h/1.5/Tue Jan 3 22:35:58 2006/-ko/ ++/fixmap.h/1.1/Tue Mar 30 01:02:55 2004// ++/flat.h/1.2/Wed Jun 16 15:21:48 2004/-ko/ ++/floppy.h/1.3/Tue Jun 21 04:15:52 2005/-ko/ ++/freq.h/1.4/Sat Mar 26 20:25:36 2005/-ko/ ++/hardirq.h/1.10/Mon Jan 31 20:45:09 2005/-ko/ ++/hd64461.h/1.4/Sun Jan 29 17:46:24 2006/-ko/ ++/hw_irq.h/1.4/Sun May 4 19:30:01 2003// ++/ide.h/1.15/Tue Jan 3 22:35:58 2006/-ko/ ++/io_generic.h/1.4/Wed Nov 23 15:47:38 2005/-ko/ ++/ioctl.h/1.3/Mon Mar 27 21:06:15 2006/-ko/ ++/ioctls.h/1.5/Sun Jan 22 17:35:31 2006/-ko/ ++/ipc.h/1.5/Tue Jun 21 04:15:52 2005/-ko/ ++/irq-sh73180.h/1.2/Sun Jan 8 12:22:58 2006// ++/keyboard.h/1.3/Fri May 16 17:19:08 2003/-ko/ ++/kgdb.h/1.6/Sun Feb 5 12:27:59 2006// ++/kmap_types.h/1.3/Thu Mar 11 18:08:05 2004// ++/local.h/1.1/Sun Jul 27 20:21:41 2003// ++/machvec.h/1.13/Wed Jan 4 13:20:32 2006// ++/mc146818rtc.h/1.5/Wed Jan 4 18:42:42 2006// ++/microdev.h/1.1/Sat Dec 17 23:34:08 2005/-ko/ ++/mman.h/1.5/Mon Mar 27 21:06:15 2006// ++/mmu.h/1.4/Tue Jan 3 22:51:48 2006// ++/mmu_context.h/1.12/Thu Oct 20 22:48:05 2005// ++/module.h/1.4/Sun Oct 26 23:34:34 2003// ++/namei.h/1.2/Wed Apr 7 20:19:00 2004/-ko/ ++/param.h/1.4/Thu Mar 11 18:08:05 2004// ++/pci.h/1.19/Sun Feb 5 21:55:30 2006// ++/percpu.h/1.1/Sat Oct 19 07:31:03 2002// ++/pgalloc.h/1.20/Sat Dec 31 11:30:47 2005/-ko/ ++/pgtable.h/1.33/Sun Jan 22 17:26:20 2006// ++/pm.h/1.1/Sun Jan 29 17:46:24 2006// ++/posix_types.h/1.3/Thu Oct 9 14:59:21 2003// ++/ptrace.h/1.13/Mon Mar 27 21:06:15 2006// ++/rwsem.h/1.2/Tue Jan 3 22:35:58 2006/-ko/ ++/scatterlist.h/1.6/Sat Sep 3 20:05:39 2005/-ko/ ++/se.h/1.1/Wed Jan 4 17:53:54 2006/-ko/ ++/se7300.h/1.1/Wed Jan 4 17:25:52 2006/-ko/ ++/se73180.h/1.1/Wed Jan 4 17:33:14 2006/-ko/ ++/se7751.h/1.1/Wed Jan 4 18:13:24 2006/-ko/ ++/sections.h/1.1/Sun Jul 27 21:05:50 2003// ++/segment.h/1.4/Wed Jul 16 03:58:49 2003// ++/semaphore.h/1.7/Tue Jan 3 22:35:58 2006// ++/serial.h/1.4/Mon Aug 29 21:01:19 2005/-ko/ ++/shmparam.h/1.3/Fri Sep 24 14:58:00 2004// ++/sigcontext.h/1.4/Wed Apr 28 08:53:25 2004/-ko/ ++/signal.h/1.7/Tue Jun 21 04:15:52 2005// ++/smc37c93x.h/1.3/Tue May 31 14:08:54 2005/-ko/ ++/smp.h/1.6/Mon Aug 29 21:01:19 2005// ++/snapgear.h/1.1/Wed Jan 4 18:42:42 2006/-ko/ ++/spinlock.h/1.8/Fri Oct 28 13:12:50 2005/-ko/ ++/statfs.h/1.3/Sat Jun 28 15:44:06 2003// ++/system.h/1.24/Mon Mar 27 21:06:15 2006// ++/systemh7751.h/1.1/Wed Jan 4 18:52:50 2006/-ko/ ++/timer.h/1.2/Sun Jan 29 17:46:24 2006/-ko/ ++/timex.h/1.6/Tue Jun 21 04:15:52 2005// ++/titan.h/1.1/Tue Nov 29 04:01:49 2005// ++/tlb.h/1.5/Tue May 6 23:28:51 2003// ++/tlbflush.h/1.1/Fri Apr 12 04:26:29 2002// ++/ubc.h/1.4/Fri Sep 24 14:58:00 2004// ++/user.h/1.5/Fri Sep 24 14:58:00 2004/-ko/ ++/watchdog.h/1.4/Fri Sep 24 14:58:00 2004/-ko/ ++D/bigsur//// ++D/cat68701//// ++D/cpu-sh2//// ++D/cpu-sh3//// ++D/cpu-sh4//// ++D/cqreek//// ++D/dmida//// ++D/dreamcast//// ++D/ec3104//// ++D/edosk7705//// ++D/harp//// ++D/hd64465//// ++D/hp6xx//// ++D/hs7751rvoip//// ++D/landisk//// ++D/mpc1211//// ++D/overdrive//// ++D/r7780rp//// ++D/rts7751r2d//// ++D/saturn//// ++D/sh03//// ++D/sh2000//// ++/addrspace.h/1.4/Wed Jul 5 14:51:36 2006// ++/bitops.h/1.11/Wed Jul 5 14:51:36 2006/-ko/ ++/io.h/1.20/Wed Jul 5 14:51:36 2006// ++/kexec.h/1.2/Wed Jul 5 14:51:36 2006/-ko/ ++/page.h/1.15/Wed Jul 5 14:51:36 2006// ++/poll.h/1.3/Wed Jul 5 14:51:37 2006// ++/types.h/1.7/Wed Jul 5 14:51:37 2006/-ko/ ++/processor.h/1.36/Fri Jul 7 10:15:20 2006/-ko/ ++/thread_info.h/1.18/Fri Jul 7 10:15:20 2006/-ko/ ++/uaccess.h/1.17/Fri Jul 7 10:15:20 2006/-ko/ ++/unistd.h/1.29/Fri Jul 7 10:15:20 2006/-ko/ ++/rtc.h/1.6/Sat Jul 8 20:16:14 2006/-ko/ ++/irq-sh7780.h/1.3/Wed Jul 12 16:51:59 2006/-ko/ ++/irq.h/1.31/Wed Jul 12 16:51:59 2006/-ko/ ++/sfp-machine.h/1.1/Wed Jul 12 10:35:55 2006/-ko/ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/CVS/Repository linux-2.6.17/include/asm-sh/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/CVS/Repository 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/CVS/Root linux-2.6.17/include/asm-sh/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/CVS/Root 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/apm.h linux-2.6.17/include/asm-sh/apm.h +--- linux-2.6.17-vanilla/include/asm-sh/apm.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/apm.h 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,46 @@ ++/* ++ * Copyright 2006 (c) Andriy Skulysh <askulysh@gmail.com> ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ * ++ */ ++ ++#ifndef __ASM_SH_APM_H ++#define __ASM_SH_APM_H ++ ++#define APM_AC_OFFLINE 0 ++#define APM_AC_ONLINE 1 ++#define APM_AC_BACKUP 2 ++#define APM_AC_UNKNOWN 0xff ++ ++#define APM_BATTERY_STATUS_HIGH 0 ++#define APM_BATTERY_STATUS_LOW 1 ++#define APM_BATTERY_STATUS_CRITICAL 2 ++#define APM_BATTERY_STATUS_CHARGING 3 ++#define APM_BATTERY_STATUS_NOT_PRESENT 4 ++#define APM_BATTERY_STATUS_UNKNOWN 0xff ++ ++#define APM_BATTERY_LIFE_UNKNOWN 0xFFFF ++#define APM_BATTERY_LIFE_MINUTES 0x8000 ++#define APM_BATTERY_LIFE_VALUE_MASK 0x7FFF ++ ++#define APM_BATTERY_FLAG_HIGH (1 << 0) ++#define APM_BATTERY_FLAG_LOW (1 << 1) ++#define APM_BATTERY_FLAG_CRITICAL (1 << 2) ++#define APM_BATTERY_FLAG_CHARGING (1 << 3) ++#define APM_BATTERY_FLAG_NOT_PRESENT (1 << 7) ++#define APM_BATTERY_FLAG_UNKNOWN 0xff ++ ++#define APM_UNITS_MINS 0 ++#define APM_UNITS_SECS 1 ++#define APM_UNITS_UNKNOWN -1 ++ ++ ++extern int (*apm_get_info)(char *buf, char **start, off_t fpos, int length); ++extern int apm_suspended; ++ ++void apm_queue_event(apm_event_t event); ++ ++#endif +diff -ruN linux-2.6.17-vanilla/include/asm-sh/atomic.h linux-2.6.17/include/asm-sh/atomic.h +--- linux-2.6.17-vanilla/include/asm-sh/atomic.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/atomic.h 2006-07-12 16:54:25.000000000 +0000 +@@ -14,6 +14,7 @@ + #define atomic_read(v) ((v)->counter) + #define atomic_set(v,i) ((v)->counter = (i)) + ++#include <linux/compiler.h> + #include <asm/system.h> + + /* +diff -ruN linux-2.6.17-vanilla/include/asm-sh/bigsur/CVS/Entries linux-2.6.17/include/asm-sh/bigsur/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/bigsur/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/bigsur/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,4 @@ ++/bigsur.h/1.2/Fri Nov 1 17:19:28 2002// ++/io.h/1.4/Mon Aug 4 01:38:06 2003// ++/serial.h/1.4/Mon Aug 29 21:01:19 2005// ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/bigsur/CVS/Repository linux-2.6.17/include/asm-sh/bigsur/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/bigsur/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/bigsur/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/bigsur +diff -ruN linux-2.6.17-vanilla/include/asm-sh/bigsur/CVS/Root linux-2.6.17/include/asm-sh/bigsur/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/bigsur/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/bigsur/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/bitops.h linux-2.6.17/include/asm-sh/bitops.h +--- linux-2.6.17-vanilla/include/asm-sh/bitops.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/bitops.h 2006-07-12 16:54:25.000000000 +0000 +@@ -6,7 +6,7 @@ + /* For __swab32 */ + #include <asm/byteorder.h> + +-static __inline__ void set_bit(int nr, volatile void * addr) ++static inline void set_bit(int nr, volatile void * addr) + { + int mask; + volatile unsigned int *a = addr; +@@ -24,7 +24,7 @@ + */ + #define smp_mb__before_clear_bit() barrier() + #define smp_mb__after_clear_bit() barrier() +-static __inline__ void clear_bit(int nr, volatile void * addr) ++static inline void clear_bit(int nr, volatile void * addr) + { + int mask; + volatile unsigned int *a = addr; +@@ -37,7 +37,7 @@ + local_irq_restore(flags); + } + +-static __inline__ void change_bit(int nr, volatile void * addr) ++static inline void change_bit(int nr, volatile void * addr) + { + int mask; + volatile unsigned int *a = addr; +@@ -50,7 +50,7 @@ + local_irq_restore(flags); + } + +-static __inline__ int test_and_set_bit(int nr, volatile void * addr) ++static inline int test_and_set_bit(int nr, volatile void * addr) + { + int mask, retval; + volatile unsigned int *a = addr; +@@ -66,7 +66,7 @@ + return retval; + } + +-static __inline__ int test_and_clear_bit(int nr, volatile void * addr) ++static inline int test_and_clear_bit(int nr, volatile void * addr) + { + int mask, retval; + volatile unsigned int *a = addr; +@@ -82,7 +82,7 @@ + return retval; + } + +-static __inline__ int test_and_change_bit(int nr, volatile void * addr) ++static inline int test_and_change_bit(int nr, volatile void * addr) + { + int mask, retval; + volatile unsigned int *a = addr; +@@ -100,7 +100,7 @@ + + #include <asm-generic/bitops/non-atomic.h> + +-static __inline__ unsigned long ffz(unsigned long word) ++static inline unsigned long ffz(unsigned long word) + { + unsigned long result; + +@@ -120,7 +120,7 @@ + * + * Undefined if no bit exists, so code should check against 0 first. + */ +-static __inline__ unsigned long __ffs(unsigned long word) ++static inline unsigned long __ffs(unsigned long word) + { + unsigned long result; + +diff -ruN linux-2.6.17-vanilla/include/asm-sh/bugs.h linux-2.6.17/include/asm-sh/bugs.h +--- linux-2.6.17-vanilla/include/asm-sh/bugs.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/bugs.h 2006-07-12 16:54:25.000000000 +0000 +@@ -32,6 +32,10 @@ + case CPU_SH7750 ... CPU_SH4_501: + *p++ = '4'; + break; ++ case CPU_SH7770 ... CPU_SH7781: ++ *p++ = '4'; ++ *p++ = 'a'; ++ break; + default: + *p++ = '?'; + *p++ = '!'; +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cache.h linux-2.6.17/include/asm-sh/cache.h +--- linux-2.6.17-vanilla/include/asm-sh/cache.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cache.h 2006-07-12 16:54:25.000000000 +0000 +@@ -10,7 +10,6 @@ + #ifdef __KERNEL__ + + #include <asm/cpu/cache.h> +-#include <asm/cpu/cacheflush.h> + + #define SH_CACHE_VALID 1 + #define SH_CACHE_UPDATED 2 +@@ -23,24 +22,31 @@ + #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)) + + struct cache_info { +- unsigned int ways; +- unsigned int sets; +- unsigned int linesz; +- ++ unsigned int ways; /* Number of cache ways */ ++ unsigned int sets; /* Number of cache sets */ ++ unsigned int linesz; /* Cache line size (bytes) */ ++ ++ unsigned int way_size; /* sets * line size */ ++ ++ /* ++ * way_incr is the address offset for accessing the next way ++ * in memory mapped cache array ops. ++ */ + unsigned int way_incr; +- + unsigned int entry_shift; + unsigned int entry_mask; + ++ /* ++ * Compute a mask which selects the address bits which overlap between ++ * 1. those used to select the cache set during indexing ++ * 2. those in the physical page number. ++ */ ++ unsigned int alias_mask; ++ ++ unsigned int n_aliases; /* Number of aliases */ ++ + unsigned long flags; + }; + +-/* Flush (write-back only) a region (smaller than a page) */ +-extern void __flush_wback_region(void *start, int size); +-/* Flush (write-back & invalidate) a region (smaller than a page) */ +-extern void __flush_purge_region(void *start, int size); +-/* Flush (invalidate only) a region (smaller than a page) */ +-extern void __flush_invalidate_region(void *start, int size); +- + #endif /* __KERNEL__ */ + #endif /* __ASM_SH_CACHE_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cacheflush.h linux-2.6.17/include/asm-sh/cacheflush.h +--- linux-2.6.17-vanilla/include/asm-sh/cacheflush.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cacheflush.h 2006-07-12 16:54:25.000000000 +0000 +@@ -2,6 +2,7 @@ + #define __ASM_SH_CACHEFLUSH_H + #ifdef __KERNEL__ + ++#include <linux/mm.h> + #include <asm/cpu/cacheflush.h> + + /* Flush (write-back only) a region (smaller than a page) */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cat68701/CVS/Entries linux-2.6.17/include/asm-sh/cat68701/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/cat68701/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cat68701/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,2 @@ ++/io.h/1.4/Mon Aug 4 01:44:40 2003// ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cat68701/CVS/Repository linux-2.6.17/include/asm-sh/cat68701/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/cat68701/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cat68701/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/cat68701 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cat68701/CVS/Root linux-2.6.17/include/asm-sh/cat68701/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/cat68701/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cat68701/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/checksum.h linux-2.6.17/include/asm-sh/checksum.h +--- linux-2.6.17-vanilla/include/asm-sh/checksum.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/checksum.h 2006-07-12 16:54:25.000000000 +0000 +@@ -160,6 +160,7 @@ + } + + #define _HAVE_ARCH_IPV6_CSUM ++#ifdef CONFIG_IPV6 + static __inline__ unsigned short int csum_ipv6_magic(struct in6_addr *saddr, + struct in6_addr *daddr, + __u32 len, +@@ -195,6 +196,7 @@ + + return csum_fold(sum); + } ++#endif + + /* + * Copy and checksum to user +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh2/CVS/Entries linux-2.6.17/include/asm-sh/cpu-sh2/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh2/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh2/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,8 @@ ++/addrspace.h/1.1/Fri Jul 4 13:01:46 2003// ++/cache.h/1.3/Wed Jul 16 04:08:29 2003/-ko/ ++/cacheflush.h/1.4/Tue Jun 21 04:15:52 2005/-ko/ ++/dma.h/1.1/Fri Jul 4 13:01:46 2003// ++/shmparam.h/1.1/Fri Jul 4 13:01:46 2003// ++/ubc.h/1.1/Fri Jul 4 13:01:46 2003// ++/watchdog.h/1.1/Sat May 24 19:12:09 2003// ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh2/CVS/Repository linux-2.6.17/include/asm-sh/cpu-sh2/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh2/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh2/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/cpu-sh2 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh2/CVS/Root linux-2.6.17/include/asm-sh/cpu-sh2/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh2/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh2/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/CVS/Entries linux-2.6.17/include/asm-sh/cpu-sh3/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh3/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,14 @@ ++/adc.h/1.2/Sun Aug 15 16:59:32 2004/-ko/ ++/addrspace.h/1.2/Sun May 4 19:30:07 2003/-ko/ ++/cache.h/1.4/Mon Aug 30 12:55:32 2004/-ko/ ++/cacheflush.h/1.8/Tue Jan 3 23:01:25 2006/-ko/ ++/dac.h/1.2/Sat Jun 5 17:17:34 2004/-ko/ ++/dma.h/1.7/Wed Jan 4 14:59:08 2006/-ko/ ++/freq.h/1.4/Sun Jan 29 17:46:24 2006/-ko/ ++/mmu_context.h/1.4/Sat Jan 7 20:05:01 2006/-ko/ ++/rtc.h/1.2/Sun May 4 19:30:08 2003/-ko/ ++/shmparam.h/1.2/Sun May 4 19:30:08 2003/-ko/ ++/timer.h/1.3/Tue May 31 14:07:35 2005/-ko/ ++/ubc.h/1.2/Sun May 4 19:30:08 2003/-ko/ ++/watchdog.h/1.1/Sat May 24 19:12:09 2003// ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/CVS/Repository linux-2.6.17/include/asm-sh/cpu-sh3/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh3/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/cpu-sh3 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/CVS/Root linux-2.6.17/include/asm-sh/cpu-sh3/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh3/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/cache.h linux-2.6.17/include/asm-sh/cpu-sh3/cache.h +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/cache.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh3/cache.h 2006-07-12 16:54:26.000000000 +0000 +@@ -26,7 +26,7 @@ + #define CCR_CACHE_ENABLE CCR_CACHE_CE + #define CCR_CACHE_INVALIDATE CCR_CACHE_CF + +-#if defined(CONFIG_CPU_SUBTYPE_SH7705) ++#if defined(CONFIG_CPU_SUBTYPE_SH7705) + #define CCR3 0xa40000b4 + #define CCR_CACHE_16KB 0x00010000 + #define CCR_CACHE_32KB 0x00020000 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/cacheflush.h linux-2.6.17/include/asm-sh/cpu-sh3/cacheflush.h +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/cacheflush.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh3/cacheflush.h 2006-07-12 16:54:26.000000000 +0000 +@@ -10,7 +10,7 @@ + #ifndef __ASM_CPU_SH3_CACHEFLUSH_H + #define __ASM_CPU_SH3_CACHEFLUSH_H + +-/* ++/* + * Cache flushing: + * + * - flush_cache_all() flushes entire cache +@@ -35,53 +35,41 @@ + /* 32KB cache, 4kb PAGE sizes need to check bit 12 */ + #define CACHE_ALIAS 0x00001000 + +-struct page; +-struct mm_struct; +-struct vm_area_struct; +- +-extern void flush_cache_all(void); +-extern void flush_cache_mm(struct mm_struct *mm); +-extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start, +- unsigned long end); +-extern void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn); +-extern void flush_dcache_page(struct page *pg); +-extern void flush_icache_range(unsigned long start, unsigned long end); +-extern void flush_icache_page(struct vm_area_struct *vma, struct page *page); +- +-#define flush_dcache_mmap_lock(mapping) do { } while (0) +-#define flush_dcache_mmap_unlock(mapping) do { } while (0) +- +-/* SH3 has unified cache so no special action needed here */ +-#define flush_cache_sigtramp(vaddr) do { } while (0) +-#define flush_page_to_ram(page) do { } while (0) +-#define flush_icache_user_range(vma,pg,adr,len) do { } while (0) +- +-#define p3_cache_init() do { } while (0) +- + #define PG_mapped PG_arch_1 + +-/* We provide our own get_unmapped_area to avoid cache alias issue */ +-#define HAVE_ARCH_UNMAPPED_AREA +- ++void flush_cache_all(void); ++void flush_cache_mm(struct mm_struct *mm); ++void flush_cache_range(struct vm_area_struct *vma, unsigned long start, ++ unsigned long end); ++void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn); ++void flush_dcache_page(struct page *pg); ++void flush_icache_range(unsigned long start, unsigned long end); ++void flush_icache_page(struct vm_area_struct *vma, struct page *page); + #else +- + #define flush_cache_all() do { } while (0) + #define flush_cache_mm(mm) do { } while (0) + #define flush_cache_range(vma, start, end) do { } while (0) + #define flush_cache_page(vma, vmaddr, pfn) do { } while (0) + #define flush_dcache_page(page) do { } while (0) +-#define flush_dcache_mmap_lock(mapping) do { } while (0) +-#define flush_dcache_mmap_unlock(mapping) do { } while (0) + #define flush_icache_range(start, end) do { } while (0) + #define flush_icache_page(vma,pg) do { } while (0) +-#define flush_icache_user_range(vma,pg,adr,len) do { } while (0) ++#endif ++ ++#define flush_dcache_mmap_lock(mapping) do { } while (0) ++#define flush_dcache_mmap_unlock(mapping) do { } while (0) ++ ++/* SH3 has unified cache so no special action needed here */ + #define flush_cache_sigtramp(vaddr) do { } while (0) ++#define flush_icache_user_range(vma,pg,adr,len) do { } while (0) + + #define p3_cache_init() do { } while (0) + ++/* ++ * We provide our own get_unmapped_area to avoid cache aliasing issues ++ * on SH7705 with a 32KB cache, and to page align addresses in the ++ * non-aliasing case. ++ */ + #define HAVE_ARCH_UNMAPPED_AREA + +-#endif +- + #endif /* __ASM_CPU_SH3_CACHEFLUSH_H */ + +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/freq.h linux-2.6.17/include/asm-sh/cpu-sh3/freq.h +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/freq.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh3/freq.h 2006-07-12 16:54:26.000000000 +0000 +@@ -18,5 +18,9 @@ + #define MIN_DIVISOR_NR 0 + #define MAX_DIVISOR_NR 4 + ++#define FRQCR_CKOEN 0x0100 ++#define FRQCR_PLLEN 0x0080 ++#define FRQCR_PSTBY 0x0040 ++ + #endif /* __ASM_CPU_SH3_FREQ_H */ + +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/timer.h linux-2.6.17/include/asm-sh/cpu-sh3/timer.h +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh3/timer.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh3/timer.h 2006-07-12 16:54:26.000000000 +0000 +@@ -23,6 +23,10 @@ + * --------------------------------------------------------------------------- + */ + ++#if !defined(CONFIG_CPU_SUBTYPE_SH7727) ++#define TMU_TOCR 0xfffffe90 /* Byte access */ ++#endif ++ + #if defined(CONFIG_CPU_SUBTYPE_SH7300) || defined(CONFIG_CPU_SUBTYPE_SH7710) + #define TMU_TSTR 0xa412fe92 /* Byte access */ + +@@ -39,9 +43,6 @@ + #define TMU2_TCR 0xa412feb4 /* Word access */ + + #else +-#if !defined(CONFIG_CPU_SUBTYPE_SH7727) +-#define TMU_TOCR 0xfffffe90 /* Byte access */ +-#endif + #define TMU_TSTR 0xfffffe92 /* Byte access */ + + #define TMU0_TCOR 0xfffffe94 /* Long access */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/CVS/Entries linux-2.6.17/include/asm-sh/cpu-sh4/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh4/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,14 @@ ++/addrspace.h/1.3/Wed Jan 18 05:43:01 2006/-ko/ ++/cache.h/1.5/Sun Aug 21 23:47:31 2005/-ko/ ++/cacheflush.h/1.6/Sat Dec 31 11:30:49 2005/-ko/ ++/dma-sh7780.h/1.2/Sun Feb 5 15:29:22 2006/-ko/ ++/dma.h/1.10/Sun Feb 5 15:29:22 2006/-ko/ ++/freq.h/1.4/Sun Aug 21 23:47:31 2005/-ko/ ++/mmu_context.h/1.5/Sat Jan 7 20:05:01 2006/-ko/ ++/rtc.h/1.2/Sun May 4 19:30:12 2003/-ko/ ++/shmparam.h/1.2/Sun May 4 19:30:13 2003/-ko/ ++/sq.h/1.2/Sat Jan 7 13:14:44 2006// ++/timer.h/1.1/Thu Oct 14 12:22:25 2004/-ko/ ++/ubc.h/1.2/Sun May 4 19:30:13 2003/-ko/ ++/watchdog.h/1.1/Sat May 24 19:12:09 2003// ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/CVS/Repository linux-2.6.17/include/asm-sh/cpu-sh4/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh4/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/cpu-sh4 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/CVS/Root linux-2.6.17/include/asm-sh/cpu-sh4/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh4/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/addrspace.h linux-2.6.17/include/asm-sh/cpu-sh4/addrspace.h +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/addrspace.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh4/addrspace.h 2006-07-12 16:54:26.000000000 +0000 +@@ -22,5 +22,8 @@ + #define P4SEG_TLB_DATA 0xf7000000 + #define P4SEG_REG_BASE 0xff000000 + ++#define PA_AREA5_IO 0xb4000000 /* Area 5 IO Memory */ ++#define PA_AREA6_IO 0xb8000000 /* Area 6 IO Memory */ ++ + #endif /* __ASM_CPU_SH4_ADDRSPACE_H */ + +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/cache.h linux-2.6.17/include/asm-sh/cpu-sh4/cache.h +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/cache.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh4/cache.h 2006-07-12 16:54:26.000000000 +0000 +@@ -22,7 +22,9 @@ + #define CCR_CACHE_ICE 0x0100 /* Instruction Cache Enable */ + #define CCR_CACHE_ICI 0x0800 /* IC Invalidate */ + #define CCR_CACHE_IIX 0x8000 /* IC Index Enable */ ++#ifndef CONFIG_CPU_SUBTYPE_SH7780 + #define CCR_CACHE_EMODE 0x80000000 /* EMODE Enable */ ++#endif + + /* Default CCR setup: 8k+16k-byte cache,P1-wb,enable */ + #define CCR_CACHE_ENABLE (CCR_CACHE_OCE|CCR_CACHE_ICE) +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/cacheflush.h linux-2.6.17/include/asm-sh/cpu-sh4/cacheflush.h +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/cacheflush.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh4/cacheflush.h 2006-07-12 16:54:26.000000000 +0000 +@@ -16,34 +16,26 @@ + * caching; in which case they're only semi-broken), + * so we need them. + */ +- +-/* Page is 4K, OC size is 16K, there are four lines. */ +-#define CACHE_ALIAS 0x00003000 +- +-struct page; +-struct mm_struct; +-struct vm_area_struct; +- +-extern void flush_cache_all(void); +-extern void flush_cache_mm(struct mm_struct *mm); +-extern void flush_cache_range(struct vm_area_struct *vma, unsigned long start, +- unsigned long end); +-extern void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, unsigned long pfn); +-extern void flush_dcache_page(struct page *pg); ++void flush_cache_all(void); ++void flush_cache_mm(struct mm_struct *mm); ++void flush_cache_range(struct vm_area_struct *vma, unsigned long start, ++ unsigned long end); ++void flush_cache_page(struct vm_area_struct *vma, unsigned long addr, ++ unsigned long pfn); ++void flush_dcache_page(struct page *pg); + + #define flush_dcache_mmap_lock(mapping) do { } while (0) + #define flush_dcache_mmap_unlock(mapping) do { } while (0) + +-extern void flush_icache_range(unsigned long start, unsigned long end); +-extern void flush_cache_sigtramp(unsigned long addr); +-extern void flush_icache_user_range(struct vm_area_struct *vma, +- struct page *page, unsigned long addr, +- int len); ++void flush_icache_range(unsigned long start, unsigned long end); ++void flush_cache_sigtramp(unsigned long addr); ++void flush_icache_user_range(struct vm_area_struct *vma, struct page *page, ++ unsigned long addr, int len); + + #define flush_icache_page(vma,pg) do { } while (0) + + /* Initialization of P3 area for copy_user_page */ +-extern void p3_cache_init(void); ++void p3_cache_init(void); + + #define PG_mapped PG_arch_1 + +@@ -61,4 +53,3 @@ + } + #endif /* CONFIG_MMU */ + #endif /* __ASM_CPU_SH4_CACHEFLUSH_H */ +- +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/dma-sh7780.h linux-2.6.17/include/asm-sh/cpu-sh4/dma-sh7780.h +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/dma-sh7780.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh4/dma-sh7780.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,39 @@ ++#ifndef __ASM_SH_CPU_SH4_DMA_SH7780_H ++#define __ASM_SH_CPU_SH4_DMA_SH7780_H ++ ++#define REQ_HE 0x000000C0 ++#define REQ_H 0x00000080 ++#define REQ_LE 0x00000040 ++#define TM_BURST 0x0000020 ++#define TS_8 0x00000000 ++#define TS_16 0x00000008 ++#define TS_32 0x00000010 ++#define TS_16BLK 0x00000018 ++#define TS_32BLK 0x00100000 ++ ++/* ++ * The SuperH DMAC supports a number of transmit sizes, we list them here, ++ * with their respective values as they appear in the CHCR registers. ++ * ++ * Defaults to a 64-bit transfer size. ++ */ ++enum { ++ XMIT_SZ_8BIT, ++ XMIT_SZ_16BIT, ++ XMIT_SZ_32BIT, ++ XMIT_SZ_128BIT, ++ XMIT_SZ_256BIT, ++}; ++ ++/* ++ * The DMA count is defined as the number of bytes to transfer. ++ */ ++static unsigned int __attribute__ ((used)) ts_shift[] = { ++ [XMIT_SZ_8BIT] = 0, ++ [XMIT_SZ_16BIT] = 1, ++ [XMIT_SZ_32BIT] = 2, ++ [XMIT_SZ_128BIT] = 4, ++ [XMIT_SZ_256BIT] = 5, ++}; ++ ++#endif /* __ASM_SH_CPU_SH4_DMA_SH7780_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/dma.h linux-2.6.17/include/asm-sh/cpu-sh4/dma.h +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/dma.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh4/dma.h 2006-07-12 16:54:26.000000000 +0000 +@@ -1,11 +1,17 @@ + #ifndef __ASM_CPU_SH4_DMA_H + #define __ASM_CPU_SH4_DMA_H + ++#define DMAOR_INIT ( 0x8000 | DMAOR_DME ) ++ + #ifdef CONFIG_CPU_SH4A + #define SH_DMAC_BASE 0xfc808020 ++ ++#define CHCR_TS_MASK 0x18 ++#define CHCR_TS_SHIFT 3 ++ ++#include <asm/cpu/dma-sh7780.h> + #else + #define SH_DMAC_BASE 0xffa00000 +-#endif + + /* Definitions for the SuperH DMAC */ + #define TM_BURST 0x0000080 +@@ -19,8 +25,6 @@ + + #define DMAOR_COD 0x00000008 + +-#define DMAOR_INIT ( 0x8000 | DMAOR_DME ) +- + /* + * The SuperH DMAC supports a number of transmit sizes, we list them here, + * with their respective values as they appear in the CHCR registers. +@@ -45,5 +49,6 @@ + [XMIT_SZ_32BIT] = 2, + [XMIT_SZ_256BIT] = 5, + }; ++#endif + + #endif /* __ASM_CPU_SH4_DMA_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/sq.h linux-2.6.17/include/asm-sh/cpu-sh4/sq.h +--- linux-2.6.17-vanilla/include/asm-sh/cpu-sh4/sq.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cpu-sh4/sq.h 2006-07-12 16:54:26.000000000 +0000 +@@ -17,7 +17,7 @@ + * Store queues range from e0000000-e3fffffc, allowing approx. 64MB to be + * mapped to any physical address space. Since data is written (and aligned) + * to 32-byte boundaries, we need to be sure that all allocations are aligned. +- */ ++ */ + #define SQ_SIZE 32 + #define SQ_ALIGN_MASK (~(SQ_SIZE - 1)) + #define SQ_ALIGN(addr) (((addr)+SQ_SIZE-1) & SQ_ALIGN_MASK) +@@ -26,23 +26,10 @@ + #define SQ_QACR1 (P4SEG_REG_BASE + 0x3c) + #define SQ_ADDRMAX (P4SEG_STORE_QUE + 0x04000000) + +-struct sq_mapping { +- const char *name; +- +- unsigned long sq_addr; +- unsigned long addr; +- unsigned int size; +- +- struct list_head list; +-}; +- + /* arch/sh/kernel/cpu/sh4/sq.c */ +-extern struct sq_mapping *sq_remap(unsigned long phys, unsigned int size, const char *name); +-extern void sq_unmap(struct sq_mapping *map); +- +-extern void sq_clear(unsigned long addr, unsigned int len); +-extern void sq_flush(void *addr); +-extern void sq_flush_range(unsigned long start, unsigned int len); ++unsigned long sq_remap(unsigned long phys, unsigned int size, ++ const char *name, unsigned long flags); ++void sq_unmap(unsigned long vaddr); ++void sq_flush_range(unsigned long start, unsigned int len); + + #endif /* __ASM_CPU_SH4_SQ_H */ +- +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cqreek/CVS/Entries linux-2.6.17/include/asm-sh/cqreek/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/cqreek/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cqreek/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,2 @@ ++/cqreek.h/1.2/Fri Nov 1 17:19:28 2002// ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cqreek/CVS/Repository linux-2.6.17/include/asm-sh/cqreek/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/cqreek/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cqreek/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/cqreek +diff -ruN linux-2.6.17-vanilla/include/asm-sh/cqreek/CVS/Root linux-2.6.17/include/asm-sh/cqreek/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/cqreek/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/cqreek/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/dmida/CVS/Entries linux-2.6.17/include/asm-sh/dmida/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/dmida/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/dmida/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,2 @@ ++/io.h/1.2/Sun May 4 19:30:13 2003/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/dmida/CVS/Repository linux-2.6.17/include/asm-sh/dmida/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/dmida/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/dmida/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/dmida +diff -ruN linux-2.6.17-vanilla/include/asm-sh/dmida/CVS/Root linux-2.6.17/include/asm-sh/dmida/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/dmida/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/dmida/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/dreamcast/CVS/Entries linux-2.6.17/include/asm-sh/dreamcast/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/dreamcast/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/dreamcast/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,4 @@ ++/dma.h/1.2/Wed Aug 27 12:35:06 2003// ++/pci.h/1.1/Sun Aug 17 16:27:11 2003// ++/sysasic.h/1.4/Sat Aug 23 00:46:39 2003// ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/dreamcast/CVS/Repository linux-2.6.17/include/asm-sh/dreamcast/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/dreamcast/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/dreamcast/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/dreamcast +diff -ruN linux-2.6.17-vanilla/include/asm-sh/dreamcast/CVS/Root linux-2.6.17/include/asm-sh/dreamcast/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/dreamcast/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/dreamcast/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/ec3104/CVS/Entries linux-2.6.17/include/asm-sh/ec3104/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/ec3104/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/ec3104/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,5 @@ ++/ec3104.h/1.2/Fri Nov 1 17:19:29 2002// ++/io.h/1.3/Tue Jul 29 14:27:12 2003// ++/keyboard.h/1.2/Fri Nov 1 17:19:29 2002// ++/serial.h/1.4/Mon Aug 29 21:01:19 2005// ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/ec3104/CVS/Repository linux-2.6.17/include/asm-sh/ec3104/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/ec3104/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/ec3104/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/ec3104 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/ec3104/CVS/Root linux-2.6.17/include/asm-sh/ec3104/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/ec3104/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/ec3104/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/edosk7705/CVS/Entries linux-2.6.17/include/asm-sh/edosk7705/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/edosk7705/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/edosk7705/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,2 @@ ++/io.h/1.1/Mon Aug 30 12:55:33 2004/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/edosk7705/CVS/Repository linux-2.6.17/include/asm-sh/edosk7705/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/edosk7705/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/edosk7705/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/edosk7705 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/edosk7705/CVS/Root linux-2.6.17/include/asm-sh/edosk7705/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/edosk7705/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/edosk7705/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/harp/CVS/Entries linux-2.6.17/include/asm-sh/harp/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/harp/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/harp/CVS/Entries 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,3 @@ ++/harp.h/1.2/Fri Nov 1 17:19:29 2002// ++/io.h/1.2/Sun May 4 19:30:14 2003/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/harp/CVS/Repository linux-2.6.17/include/asm-sh/harp/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/harp/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/harp/CVS/Repository 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/harp +diff -ruN linux-2.6.17-vanilla/include/asm-sh/harp/CVS/Root linux-2.6.17/include/asm-sh/harp/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/harp/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/harp/CVS/Root 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/hd64461.h linux-2.6.17/include/asm-sh/hd64461.h +--- linux-2.6.17-vanilla/include/asm-sh/hd64461.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/hd64461.h 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,208 @@ ++#ifndef __ASM_SH_HD64461 ++#define __ASM_SH_HD64461 ++/* ++ * $Id: hd64461.h,v 1.5 2004/03/16 00:07:51 lethal Exp $ ++ * Copyright (C) 2000 YAEGASHI Takeshi ++ * Hitachi HD64461 companion chip support ++ */ ++ ++/* Constants for PCMCIA mappings */ ++#define HD64461_PCC_WINDOW 0x01000000 ++ ++#define HD64461_PCC0_BASE 0xb8000000 /* area 6 */ ++#define HD64461_PCC0_ATTR (HD64461_PCC0_BASE) ++#define HD64461_PCC0_COMM (HD64461_PCC0_BASE+HD64461_PCC_WINDOW) ++#define HD64461_PCC0_IO (HD64461_PCC0_BASE+2*HD64461_PCC_WINDOW) ++ ++#define HD64461_PCC1_BASE 0xb4000000 /* area 5 */ ++#define HD64461_PCC1_ATTR (HD64461_PCC1_BASE) ++#define HD64461_PCC1_COMM (HD64461_PCC1_BASE+HD64461_PCC_WINDOW) ++ ++#define HD64461_STBCR 0x10000 ++#define HD64461_STBCR_CKIO_STBY 0x2000 ++#define HD64461_STBCR_SAFECKE_IST 0x1000 ++#define HD64461_STBCR_SLCKE_IST 0x0800 ++#define HD64461_STBCR_SAFECKE_OST 0x0400 ++#define HD64461_STBCR_SLCKE_OST 0x0200 ++#define HD64461_STBCR_SMIAST 0x0100 ++#define HD64461_STBCR_SLCDST 0x0080 ++#define HD64461_STBCR_SPC0ST 0x0040 ++#define HD64461_STBCR_SPC1ST 0x0020 ++#define HD64461_STBCR_SAFEST 0x0010 ++#define HD64461_STBCR_STM0ST 0x0008 ++#define HD64461_STBCR_STM1ST 0x0004 ++#define HD64461_STBCR_SIRST 0x0002 ++#define HD64461_STBCR_SURTST 0x0001 ++ ++#define HD64461_SYSCR 0x10002 ++#define HD64461_SCPUCR 0x10004 ++ ++#define HD64461_LCDCBAR 0x11000 ++#define HD64461_LCDCLOR 0x11002 ++#define HD64461_LCDCCR 0x11004 ++#define HD64461_LCDCCR_STBACK 0x0400 ++#define HD64461_LCDCCR_STREQ 0x0100 ++#define HD64461_LCDCCR_MOFF 0x0080 ++#define HD64461_LCDCCR_REFSEL 0x0040 ++#define HD64461_LCDCCR_EPON 0x0020 ++#define HD64461_LCDCCR_SPON 0x0010 ++ ++#define HD64461_LDR1 0x11010 ++#define HD64461_LDR1_DON 0x01 ++#define HD64461_LDR1_DINV 0x80 ++ ++#define HD64461_LDR2 0x11012 ++#define HD64461_LDHNCR 0x11014 ++#define HD64461_LDHNSR 0x11016 ++#define HD64461_LDVNTR 0x11018 ++#define HD64461_LDVNDR 0x1101a ++#define HD64461_LDVSPR 0x1101c ++#define HD64461_LDR3 0x1101e ++ ++#define HD64461_CPTWAR 0x11030 ++#define HD64461_CPTWDR 0x11032 ++#define HD64461_CPTRAR 0x11034 ++#define HD64461_CPTRDR 0x11036 ++ ++#define HD64461_GRDOR 0x11040 ++#define HD64461_GRSCR 0x11042 ++#define HD64461_GRCFGR 0x11044 ++#define HD64461_GRCFGR_ACCSTATUS 0x10 ++#define HD64461_GRCFGR_ACCRESET 0x08 ++#define HD64461_GRCFGR_ACCSTART_BITBLT 0x06 ++#define HD64461_GRCFGR_ACCSTART_LINE 0x04 ++#define HD64461_GRCFGR_COLORDEPTH16 0x01 ++ ++#define HD64461_LNSARH 0x11046 ++#define HD64461_LNSARL 0x11048 ++#define HD64461_LNAXLR 0x1104a ++#define HD64461_LNDGR 0x1104c ++#define HD64461_LNAXR 0x1104e ++#define HD64461_LNERTR 0x11050 ++#define HD64461_LNMDR 0x11052 ++#define HD64461_BBTSSARH 0x11054 ++#define HD64461_BBTSSARL 0x11056 ++#define HD64461_BBTDSARH 0x11058 ++#define HD64461_BBTDSARL 0x1105a ++#define HD64461_BBTDWR 0x1105c ++#define HD64461_BBTDHR 0x1105e ++#define HD64461_BBTPARH 0x11060 ++#define HD64461_BBTPARL 0x11062 ++#define HD64461_BBTMARH 0x11064 ++#define HD64461_BBTMARL 0x11066 ++#define HD64461_BBTROPR 0x11068 ++#define HD64461_BBTMDR 0x1106a ++ ++/* PC Card Controller Registers */ ++#define HD64461_PCC0ISR 0x12000 /* socket 0 interface status */ ++#define HD64461_PCC0GCR 0x12002 /* socket 0 general control */ ++#define HD64461_PCC0CSCR 0x12004 /* socket 0 card status change */ ++#define HD64461_PCC0CSCIER 0x12006 /* socket 0 card status change interrupt enable */ ++#define HD64461_PCC0SCR 0x12008 /* socket 0 software control */ ++#define HD64461_PCC1ISR 0x12010 /* socket 1 interface status */ ++#define HD64461_PCC1GCR 0x12012 /* socket 1 general control */ ++#define HD64461_PCC1CSCR 0x12014 /* socket 1 card status change */ ++#define HD64461_PCC1CSCIER 0x12016 /* socket 1 card status change interrupt enable */ ++#define HD64461_PCC1SCR 0x12018 /* socket 1 software control */ ++ ++/* PCC Interface Status Register */ ++#define HD64461_PCCISR_READY 0x80 /* card ready */ ++#define HD64461_PCCISR_MWP 0x40 /* card write-protected */ ++#define HD64461_PCCISR_VS2 0x20 /* voltage select pin 2 */ ++#define HD64461_PCCISR_VS1 0x10 /* voltage select pin 1 */ ++#define HD64461_PCCISR_CD2 0x08 /* card detect 2 */ ++#define HD64461_PCCISR_CD1 0x04 /* card detect 1 */ ++#define HD64461_PCCISR_BVD2 0x02 /* battery 1 */ ++#define HD64461_PCCISR_BVD1 0x01 /* battery 1 */ ++ ++#define HD64461_PCCISR_PCD_MASK 0x0c /* card detect */ ++#define HD64461_PCCISR_BVD_MASK 0x03 /* battery voltage */ ++#define HD64461_PCCISR_BVD_BATGOOD 0x03 /* battery good */ ++#define HD64461_PCCISR_BVD_BATWARN 0x01 /* battery low warning */ ++#define HD64461_PCCISR_BVD_BATDEAD1 0x02 /* battery dead */ ++#define HD64461_PCCISR_BVD_BATDEAD2 0x00 /* battery dead */ ++ ++/* PCC General Control Register */ ++#define HD64461_PCCGCR_DRVE 0x80 /* output drive */ ++#define HD64461_PCCGCR_PCCR 0x40 /* PC card reset */ ++#define HD64461_PCCGCR_PCCT 0x20 /* PC card type, 1=IO&mem, 0=mem */ ++#define HD64461_PCCGCR_VCC0 0x10 /* voltage control pin VCC0SEL0 */ ++#define HD64461_PCCGCR_PMMOD 0x08 /* memory mode */ ++#define HD64461_PCCGCR_PA25 0x04 /* pin A25 */ ++#define HD64461_PCCGCR_PA24 0x02 /* pin A24 */ ++#define HD64461_PCCGCR_REG 0x01 /* pin PCC0REG# */ ++ ++/* PCC Card Status Change Register */ ++#define HD64461_PCCCSCR_SCDI 0x80 /* sw card detect intr */ ++#define HD64461_PCCCSCR_SRV1 0x40 /* reserved */ ++#define HD64461_PCCCSCR_IREQ 0x20 /* IREQ intr req */ ++#define HD64461_PCCCSCR_SC 0x10 /* STSCHG (status change) pin */ ++#define HD64461_PCCCSCR_CDC 0x08 /* CD (card detect) change */ ++#define HD64461_PCCCSCR_RC 0x04 /* READY change */ ++#define HD64461_PCCCSCR_BW 0x02 /* battery warning change */ ++#define HD64461_PCCCSCR_BD 0x01 /* battery dead change */ ++ ++/* PCC Card Status Change Interrupt Enable Register */ ++#define HD64461_PCCCSCIER_CRE 0x80 /* change reset enable */ ++#define HD64461_PCCCSCIER_IREQE_MASK 0x60 /* IREQ enable */ ++#define HD64461_PCCCSCIER_IREQE_DISABLED 0x00 /* IREQ disabled */ ++#define HD64461_PCCCSCIER_IREQE_LEVEL 0x20 /* IREQ level-triggered */ ++#define HD64461_PCCCSCIER_IREQE_FALLING 0x40 /* IREQ falling-edge-trig */ ++#define HD64461_PCCCSCIER_IREQE_RISING 0x60 /* IREQ rising-edge-trig */ ++ ++#define HD64461_PCCCSCIER_SCE 0x10 /* status change enable */ ++#define HD64461_PCCCSCIER_CDE 0x08 /* card detect change enable */ ++#define HD64461_PCCCSCIER_RE 0x04 /* ready change enable */ ++#define HD64461_PCCCSCIER_BWE 0x02 /* battery warn change enable */ ++#define HD64461_PCCCSCIER_BDE 0x01 /* battery dead change enable*/ ++ ++/* PCC Software Control Register */ ++#define HD64461_PCCSCR_VCC1 0x02 /* voltage control pin 1 */ ++#define HD64461_PCCSCR_SWP 0x01 /* write protect */ ++ ++#define HD64461_P0OCR 0x1202a ++#define HD64461_P1OCR 0x1202c ++#define HD64461_PGCR 0x1202e ++ ++#define HD64461_GPACR 0x14000 ++#define HD64461_GPBCR 0x14002 ++#define HD64461_GPCCR 0x14004 ++#define HD64461_GPDCR 0x14006 ++#define HD64461_GPADR 0x14010 ++#define HD64461_GPBDR 0x14012 ++#define HD64461_GPCDR 0x14014 ++#define HD64461_GPDDR 0x14016 ++#define HD64461_GPAICR 0x14020 ++#define HD64461_GPBICR 0x14022 ++#define HD64461_GPCICR 0x14024 ++#define HD64461_GPDICR 0x14026 ++#define HD64461_GPAISR 0x14040 ++#define HD64461_GPBISR 0x14042 ++#define HD64461_GPCISR 0x14044 ++#define HD64461_GPDISR 0x14046 ++ ++#define HD64461_NIRR 0x15000 ++#define HD64461_NIMR 0x15002 ++ ++#define HD64461_IRQBASE OFFCHIP_IRQ_BASE ++#define HD64461_IRQ_NUM 16 ++ ++#define HD64461_IRQ_UART (HD64461_IRQBASE+5) ++#define HD64461_IRQ_IRDA (HD64461_IRQBASE+6) ++#define HD64461_IRQ_TMU1 (HD64461_IRQBASE+9) ++#define HD64461_IRQ_TMU0 (HD64461_IRQBASE+10) ++#define HD64461_IRQ_GPIO (HD64461_IRQBASE+11) ++#define HD64461_IRQ_AFE (HD64461_IRQBASE+12) ++#define HD64461_IRQ_PCC1 (HD64461_IRQBASE+13) ++#define HD64461_IRQ_PCC0 (HD64461_IRQBASE+14) ++ ++#define __IO_PREFIX hd64461 ++#include <asm/io_generic.h> ++ ++/* arch/sh/cchips/hd6446x/hd64461/setup.c */ ++int hd64461_irq_demux(int irq); ++void hd64461_register_irq_demux(int irq, ++ int (*demux) (int irq, void *dev), void *dev); ++void hd64461_unregister_irq_demux(int irq); ++ ++#endif +diff -ruN linux-2.6.17-vanilla/include/asm-sh/hd64465/CVS/Entries linux-2.6.17/include/asm-sh/hd64465/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/hd64465/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/hd64465/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,4 @@ ++/gpio.h/1.3/Sun May 4 19:30:14 2003// ++/hd64465.h/1.3/Sun May 4 19:30:15 2003// ++/io.h/1.4/Sun Aug 3 03:05:11 2003// ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/hd64465/CVS/Repository linux-2.6.17/include/asm-sh/hd64465/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/hd64465/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/hd64465/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/hd64465 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/hd64465/CVS/Root linux-2.6.17/include/asm-sh/hd64465/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/hd64465/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/hd64465/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/hp6xx/CVS/Entries linux-2.6.17/include/asm-sh/hp6xx/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/hp6xx/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/hp6xx/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,4 @@ ++/hp6xx.h/1.3/Sun Jan 29 17:46:24 2006/-ko/ ++/ide.h/1.2/Sat Jun 5 17:17:34 2004/-ko/ ++/io.h/1.3/Wed Jan 4 14:53:17 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/hp6xx/CVS/Repository linux-2.6.17/include/asm-sh/hp6xx/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/hp6xx/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/hp6xx/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/hp6xx +diff -ruN linux-2.6.17-vanilla/include/asm-sh/hp6xx/CVS/Root linux-2.6.17/include/asm-sh/hp6xx/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/hp6xx/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/hp6xx/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/hp6xx/hp6xx.h linux-2.6.17/include/asm-sh/hp6xx/hp6xx.h +--- linux-2.6.17-vanilla/include/asm-sh/hp6xx/hp6xx.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/hp6xx/hp6xx.h 2006-07-12 16:54:26.000000000 +0000 +@@ -2,16 +2,33 @@ + #define __ASM_SH_HP6XX_H + + /* +- * Copyright (C) 2003 Andriy Skulysh ++ * Copyright (C) 2003, 2004, 2005 Andriy Skulysh ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ * + */ + +-#define HP680_TS_IRQ IRQ3_IRQ ++#define HP680_BTN_IRQ IRQ0_IRQ ++#define HP680_TS_IRQ IRQ3_IRQ ++#define HP680_HD64461_IRQ IRQ4_IRQ + + #define DAC_LCD_BRIGHTNESS 0 + #define DAC_SPEAKER_VOLUME 1 + ++#define PGDR_OPENED 0x01 ++#define PGDR_MAIN_BATTERY_OUT 0x04 ++#define PGDR_PLAY_BUTTON 0x08 ++#define PGDR_REWIND_BUTTON 0x10 ++#define PGDR_RECORD_BUTTON 0x20 ++ + #define PHDR_TS_PEN_DOWN 0x08 + ++#define PJDR_LED_BLINK 0x02 ++ ++#define PKDR_LED_GREEN 0x10 ++ + #define SCPDR_TS_SCAN_ENABLE 0x20 + #define SCPDR_TS_SCAN_Y 0x02 + #define SCPDR_TS_SCAN_X 0x01 +@@ -21,11 +38,43 @@ + + #define ADC_CHANNEL_TS_Y 1 + #define ADC_CHANNEL_TS_X 2 ++#define ADC_CHANNEL_BATTERY 3 ++#define ADC_CHANNEL_BACKUP 4 ++#define ADC_CHANNEL_CHARGE 5 + + #define HD64461_GPADR_SPEAKER 0x01 + #define HD64461_GPADR_PCMCIA0 (0x02|0x08) ++ + #define HD64461_GPBDR_LCDOFF 0x01 ++#define HD64461_GPBDR_LCD_CONTRAST_MASK 0x78 + #define HD64461_GPBDR_LED_RED 0x80 + ++#include <asm/hd64461.h> ++#include <asm/io.h> ++ ++#define PJDR 0xa4000130 ++#define PKDR 0xa4000132 ++ ++static inline void hp6xx_led_red(int on) ++{ ++ u16 v16; ++ v16 = ctrl_inw(CONFIG_HD64461_IOBASE + HD64461_GPBDR - 0x10000); ++ if (on) ++ ctrl_outw(v16 & (~HD64461_GPBDR_LED_RED), CONFIG_HD64461_IOBASE + HD64461_GPBDR - 0x10000); ++ else ++ ctrl_outw(v16 | HD64461_GPBDR_LED_RED, CONFIG_HD64461_IOBASE + HD64461_GPBDR - 0x10000); ++} ++ ++static inline void hp6xx_led_green(int on) ++{ ++ u8 v8; ++ ++ v8 = ctrl_inb(PKDR); ++ if (on) ++ ctrl_outb(v8 & (~PKDR_LED_GREEN), PKDR); ++ else ++ ctrl_outb(v8 | PKDR_LED_GREEN, PKDR); ++} ++ + + #endif /* __ASM_SH_HP6XX_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/hp6xx/io.h linux-2.6.17/include/asm-sh/hp6xx/io.h +--- linux-2.6.17-vanilla/include/asm-sh/hp6xx/io.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/hp6xx/io.h 2006-07-12 16:54:26.000000000 +0000 +@@ -4,7 +4,7 @@ + /* + * Nothing special here.. just use the generic cchip io routines. + */ +-#include <asm/hd64461/io.h> ++#include <asm/hd64461.h> + + #endif /* __ASM_SH_HP6XX_IO_H */ + +diff -ruN linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/CVS/Entries linux-2.6.17/include/asm-sh/hs7751rvoip/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/hs7751rvoip/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,3 @@ ++/hs7751rvoip.h/1.4/Wed Jan 18 05:43:01 2006/-ko/ ++/ide.h/1.1/Wed Apr 21 00:09:19 2004/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/CVS/Repository linux-2.6.17/include/asm-sh/hs7751rvoip/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/hs7751rvoip/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/hs7751rvoip +diff -ruN linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/CVS/Root linux-2.6.17/include/asm-sh/hs7751rvoip/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/hs7751rvoip/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/hs7751rvoip.h linux-2.6.17/include/asm-sh/hs7751rvoip/hs7751rvoip.h +--- linux-2.6.17-vanilla/include/asm-sh/hs7751rvoip/hs7751rvoip.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/hs7751rvoip/hs7751rvoip.h 2006-07-12 16:54:26.000000000 +0000 +@@ -19,8 +19,6 @@ + #define PA_OUTPORTR 0xa400000e /* Output Port Reguster */ + #define PA_VERREG 0xa4000014 /* FPGA Version Register */ + +-#define PA_AREA5_IO 0xb4000000 /* Area 5 IO Memory */ +-#define PA_AREA6_IO 0xb8000000 /* Area 6 IO Memory */ + #define PA_IDE_OFFSET 0x1f0 /* CF IDE Offset */ + + #define IRLCNTR1 (PA_BCR + 0) /* Interrupt Control Register1 */ +@@ -44,4 +42,13 @@ + #define IRQ_RINGING 4 /* Ringing IRQ */ + #define IRQ_CODEC 5 /* CODEC IRQ */ + ++#define __IO_PREFIX hs7751rvoip ++#include <asm/io_generic.h> ++ ++/* arch/sh/boards/renesas/hs7751rvoip/irq.c */ ++void init_hs7751rvoip_IRQ(void); ++ ++/* arch/sh/boards/renesas/hs7751rvoip/io.c */ ++void *hs7751rvoip_ioremap(unsigned long, unsigned long); ++ + #endif /* __ASM_SH_RENESAS_HS7751RVOIP */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/io.h linux-2.6.17/include/asm-sh/io.h +--- linux-2.6.17-vanilla/include/asm-sh/io.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/io.h 2006-07-12 16:54:25.000000000 +0000 +@@ -210,6 +210,11 @@ + *(volatile unsigned long*)addr = b; + } + ++static inline void ctrl_delay(void) ++{ ++ ctrl_inw(P2SEG); ++} ++ + #define IO_SPACE_LIMIT 0xffffffff + + /* +diff -ruN linux-2.6.17-vanilla/include/asm-sh/irq-sh73180.h linux-2.6.17/include/asm-sh/irq-sh73180.h +--- linux-2.6.17-vanilla/include/asm-sh/irq-sh73180.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/irq-sh73180.h 2006-07-12 16:54:25.000000000 +0000 +@@ -12,14 +12,14 @@ + #undef INTC_IPRC + #undef INTC_IPRD + +-#undef DMTE0_IRQ +-#undef DMTE1_IRQ +-#undef DMTE2_IRQ +-#undef DMTE3_IRQ +-#undef DMTE4_IRQ +-#undef DMTE5_IRQ +-#undef DMTE6_IRQ +-#undef DMTE7_IRQ ++#undef DMTE0_IRQ ++#undef DMTE1_IRQ ++#undef DMTE2_IRQ ++#undef DMTE3_IRQ ++#undef DMTE4_IRQ ++#undef DMTE5_IRQ ++#undef DMTE6_IRQ ++#undef DMTE7_IRQ + #undef DMAE_IRQ + #undef DMA_IPR_ADDR + #undef DMA_IPR_POS +@@ -180,7 +180,7 @@ + #define FLSTE_IRQ 92 + #define FLTEND_IRQ 93 + #define FLTRQ0_IRQ 94 +-#define FLTRQ1_IRQ 95 ++#define FLTRQ1_IRQ 95 + #define FLCTL_IPR_ADDR INTC_IPRH + #define FLCTL_IPR_POS 1 + #define FLCTL_PRIORITY 3 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/irq-sh7780.h linux-2.6.17/include/asm-sh/irq-sh7780.h +--- linux-2.6.17-vanilla/include/asm-sh/irq-sh7780.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/irq-sh7780.h 2006-07-12 16:54:25.000000000 +0000 +@@ -145,11 +145,6 @@ + #define TMU_CH5_IPR_POS 1 + #define TMU_CH5_PRIORITY 2 + +-#define RTC_IRQ 22 +-#define RTC_IPR_ADDR INTC_INT2PRI1 +-#define RTC_IPR_POS 0 +-#define RTC_PRIORITY TIMER_PRIORITY +- + /* SCIF0 */ + #define SCIF0_ERI_IRQ 40 + #define SCIF0_RXI_IRQ 41 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/irq.h linux-2.6.17/include/asm-sh/irq.h +--- linux-2.6.17-vanilla/include/asm-sh/irq.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/irq.h 2006-07-12 16:54:25.000000000 +0000 +@@ -336,6 +336,11 @@ + extern unsigned short *irq_mask_register; + + /* ++ * PINT IRQs ++ */ ++void init_IRQ_pint(void); ++ ++/* + * Function for "on chip support modules". + */ + extern void make_ipr_irq(unsigned int irq, unsigned int addr, +@@ -578,7 +583,7 @@ + #define NR_INTC2_IRQS 64 + #elif defined(CONFIG_CPU_SUBTYPE_SH7780) + #define INTC2_BASE 0xffd40000 +-#define INTC2_FIRST_IRQ 22 ++#define INTC2_FIRST_IRQ 21 + #define INTC2_INTMSK_OFFSET (0x38) + #define INTC2_INTMSKCLR_OFFSET (0x3c) + #define NR_INTC2_IRQS 60 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/kexec.h linux-2.6.17/include/asm-sh/kexec.h +--- linux-2.6.17-vanilla/include/asm-sh/kexec.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/kexec.h 2006-07-12 16:54:25.000000000 +0000 +@@ -23,6 +23,8 @@ + /* The native architecture */ + #define KEXEC_ARCH KEXEC_ARCH_SH + ++#define MAX_NOTE_BYTES 1024 ++ + #ifndef __ASSEMBLY__ + + extern void machine_shutdown(void); +diff -ruN linux-2.6.17-vanilla/include/asm-sh/kgdb.h linux-2.6.17/include/asm-sh/kgdb.h +--- linux-2.6.17-vanilla/include/asm-sh/kgdb.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/kgdb.h 2006-07-12 16:54:25.000000000 +0000 +@@ -128,4 +128,19 @@ + #define KGDB_ASSERT(condition, message) + #endif + ++/* Taken from sh-stub.c of GDB 4.18 */ ++static const char hexchars[] = "0123456789abcdef"; ++ ++/* Get high hex bits */ ++static inline char highhex(const int x) ++{ ++ return hexchars[(x >> 4) & 0xf]; ++} ++ ++/* Get low hex bits */ ++static inline char lowhex(const int x) ++{ ++ return hexchars[x & 0xf]; ++} ++ + #endif +diff -ruN linux-2.6.17-vanilla/include/asm-sh/landisk/CVS/Entries linux-2.6.17/include/asm-sh/landisk/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/landisk/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/landisk/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,4 @@ ++/gio.h/1.1/Thu Sep 29 07:23:18 2005/-ko/ ++/ide.h/1.1/Thu Sep 29 07:23:18 2005/-ko/ ++/iodata_landisk.h/1.3/Wed Jan 18 05:43:01 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/landisk/CVS/Repository linux-2.6.17/include/asm-sh/landisk/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/landisk/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/landisk/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/landisk +diff -ruN linux-2.6.17-vanilla/include/asm-sh/landisk/CVS/Root linux-2.6.17/include/asm-sh/landisk/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/landisk/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/landisk/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/landisk/gio.h linux-2.6.17/include/asm-sh/landisk/gio.h +--- linux-2.6.17-vanilla/include/asm-sh/landisk/gio.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/landisk/gio.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,45 @@ ++#ifndef __ASM_SH_LANDISK_GIO_H ++#define __ASM_SH_LANDISK_GIO_H ++ ++#include <linux/ioctl.h> ++ ++/* version */ ++#define VERSION_STR "1.00" ++ ++/* Driver name */ ++#define GIO_DRIVER_NAME "/dev/giodrv" ++ ++/* Use 'k' as magic number */ ++#define GIODRV_IOC_MAGIC 'k' ++ ++#define GIODRV_IOCRESET _IO(GIODRV_IOC_MAGIC, 0) ++/* ++ * S means "Set" through a ptr, ++ * T means "Tell" directly ++ * G means "Get" (to a pointed var) ++ * Q means "Query", response is on the return value ++ * X means "eXchange": G and S atomically ++ * H means "sHift": T and Q atomically ++ */ ++#define GIODRV_IOCSGIODATA1 _IOW(GIODRV_IOC_MAGIC, 1, unsigned char *) ++#define GIODRV_IOCGGIODATA1 _IOR(GIODRV_IOC_MAGIC, 2, unsigned char *) ++#define GIODRV_IOCSGIODATA2 _IOW(GIODRV_IOC_MAGIC, 3, unsigned short *) ++#define GIODRV_IOCGGIODATA2 _IOR(GIODRV_IOC_MAGIC, 4, unsigned short *) ++#define GIODRV_IOCSGIODATA4 _IOW(GIODRV_IOC_MAGIC, 5, unsigned long *) ++#define GIODRV_IOCGGIODATA4 _IOR(GIODRV_IOC_MAGIC, 6, unsigned long *) ++#define GIODRV_IOCSGIOSETADDR _IOW(GIODRV_IOC_MAGIC, 7, unsigned long *) ++#define GIODRV_IOCHARDRESET _IO(GIODRV_IOC_MAGIC, 8) /* debugging tool */ ++ ++#define GIODRV_IOCSGIO_LED _IOW(GIODRV_IOC_MAGIC, 9, unsigned long *) ++#define GIODRV_IOCGGIO_LED _IOR(GIODRV_IOC_MAGIC, 10, unsigned long *) ++#define GIODRV_IOCSGIO_BUZZER _IOW(GIODRV_IOC_MAGIC, 11, unsigned long *) ++#define GIODRV_IOCGGIO_LANDISK _IOR(GIODRV_IOC_MAGIC, 14, unsigned long *) ++#define GIODRV_IOCGGIO_BTN _IOR(GIODRV_IOC_MAGIC, 22, unsigned long *) ++#define GIODRV_IOCSGIO_BTNPID _IOW(GIODRV_IOC_MAGIC, 23, unsigned long *) ++#define GIODRV_IOCGGIO_BTNPID _IOR(GIODRV_IOC_MAGIC, 24, unsigned long *) ++ ++#define GIODRV_IOC_MAXNR 8 ++#define GIO_READ 0x00000000 ++#define GIO_WRITE 0x00000001 ++ ++#endif /* __ASM_SH_LANDISK_GIO_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/landisk/ide.h linux-2.6.17/include/asm-sh/landisk/ide.h +--- linux-2.6.17-vanilla/include/asm-sh/landisk/ide.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/landisk/ide.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,14 @@ ++/* ++ * modifed by kogiidena ++ * 2005.03.03 ++ */ ++ ++#ifndef __ASM_SH_LANDISK_IDE_H ++#define __ASM_SH_LANDISK_IDE_H ++ ++/* Nothing to see here.. */ ++#include <asm/landisk/iodata_landisk.h> ++#define IRQ_CFCARD IRQ_FATA /* CF Card IRQ */ ++#define IRQ_PCMCIA IRQ_ATA /* PCMCIA IRQ */ ++ ++#endif /* __ASM_SH_LANDISK_IDE_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/landisk/iodata_landisk.h linux-2.6.17/include/asm-sh/landisk/iodata_landisk.h +--- linux-2.6.17-vanilla/include/asm-sh/landisk/iodata_landisk.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/landisk/iodata_landisk.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,79 @@ ++#ifndef __ASM_SH_IODATA_LANDISK_H ++#define __ASM_SH_IODATA_LANDISK_H ++ ++/* ++ * linux/include/asm-sh/landisk/iodata_landisk.h ++ * ++ * Copyright (C) 2000 Atom Create Engineering Co., Ltd. ++ * ++ * IO-DATA LANDISK support ++ */ ++ ++/* Box specific addresses. */ ++ ++#define PA_USB 0xa4000000 /* USB Controller M66590 */ ++ ++#define PA_ATARST 0xb0000000 /* ATA/FATA Access Control Register */ ++#define PA_LED 0xb0000001 /* LED Control Register */ ++#define PA_STATUS 0xb0000002 /* Switch Status Register */ ++#define PA_SHUTDOWN 0xb0000003 /* Shutdown Control Register */ ++#define PA_PCIPME 0xb0000004 /* PCI PME Status Register */ ++#define PA_IMASK 0xb0000005 /* Interrupt Mask Register */ ++/* 2003.10.31 I-O DATA NSD NWG add. for shutdown port clear */ ++#define PA_PWRINT_CLR 0xb0000006 /* Shutdown Interrupt clear Register */ ++ ++#define PA_LCD_CLRDSP 0x00 /* LCD Clear Display Offset */ ++#define PA_LCD_RTNHOME 0x00 /* LCD Return Home Offset */ ++#define PA_LCD_ENTMODE 0x00 /* LCD Entry Mode Offset */ ++#define PA_LCD_DSPCTL 0x00 /* LCD Display ON/OFF Control Offset */ ++#define PA_LCD_FUNC 0x00 /* LCD Function Set Offset */ ++#define PA_LCD_CGRAM 0x00 /* LCD Set CGRAM Address Offset */ ++#define PA_LCD_DDRAM 0x00 /* LCD Set DDRAM Address Offset */ ++#define PA_LCD_RDFLAG 0x01 /* LCD Read Busy Flag Offset */ ++#define PA_LCD_WTDATA 0x02 /* LCD Write Datat to RAM Offset */ ++#define PA_LCD_RDDATA 0x03 /* LCD Read Data from RAM Offset */ ++#define PA_PIDE_OFFSET 0x40 /* CF IDE Offset */ ++#define PA_SIDE_OFFSET 0x40 /* HDD IDE Offset */ ++ ++#define IRQ_PCIINTA 5 /* PCI INTA IRQ */ ++#define IRQ_PCIINTB 6 /* PCI INTB IRQ */ ++#define IRQ_PCIINDC 7 /* PCI INTC IRQ */ ++#define IRQ_PCIINTD 8 /* PCI INTD IRQ */ ++#define IRQ_ATA 9 /* ATA IRQ */ ++#define IRQ_FATA 10 /* FATA IRQ */ ++#define IRQ_POWER 11 /* Power Switch IRQ */ ++#define IRQ_BUTTON 12 /* USL-5P Button IRQ */ ++#define IRQ_FAULT 13 /* USL-5P Fault IRQ */ ++ ++#define SHUTDOWN_BTN_MAJOR 99 /* Shutdown button device major no. */ ++ ++#define SHUTDOWN_LOOP_CNT 5 /* Shutdown button Detection loop */ ++#define SHUTDOWN_DELAY 200 /* Shutdown button delay value(ms) */ ++ ++ ++/* added by kogiidena */ ++/* ++ * landisk_ledparam ++ * ++ * led ------10 -6543210 -6543210 -6543210 ++ * |000000..|0.......|0.......|U.......| ++ * | HARD |fastblik| blink | on | ++ * ++ * led0: power U:update flag ++ * led1: error ++ * led2: usb1 ++ * led3: usb2 ++ * led4: usb3 ++ * led5: usb4 ++ * led6: usb5 ++ * ++ */ ++extern int landisk_ledparam; /* from setup.c */ ++extern int landisk_buzzerparam; /* from setup.c */ ++extern int landisk_arch; /* from setup.c */ ++ ++#define __IO_PREFIX landisk ++#include <asm/io_generic.h> ++ ++#endif /* __ASM_SH_IODATA_LANDISK_H */ ++ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/mc146818rtc.h linux-2.6.17/include/asm-sh/mc146818rtc.h +--- linux-2.6.17-vanilla/include/asm-sh/mc146818rtc.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/mc146818rtc.h 2006-07-12 16:54:25.000000000 +0000 +@@ -24,7 +24,7 @@ + #define CMOS_WRITE(val,addr) __CMOS_WRITE(val,addr,b) + + #elif defined(CONFIG_SH_SECUREEDGE5410) +-#include <asm/snapgear/io.h> ++#include <asm/snapgear.h> + + #define RTC_PORT(n) SECUREEDGE_IOPORT_ADDR + #define CMOS_READ(addr) secureedge5410_cmos_read(addr) +diff -ruN linux-2.6.17-vanilla/include/asm-sh/mmu.h linux-2.6.17/include/asm-sh/mmu.h +--- linux-2.6.17-vanilla/include/asm-sh/mmu.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/mmu.h 2006-07-12 16:54:25.000000000 +0000 +@@ -25,5 +25,60 @@ + typedef unsigned long mm_context_t; + + #endif /* CONFIG_MMU */ +-#endif /* __MMH_H */ ++ ++/* ++ * Privileged Space Mapping Buffer (PMB) definitions ++ */ ++#define PMB_PASCR 0xff000070 ++#define PMB_IRMCR 0xff000078 ++ ++#define PMB_ADDR 0xf6100000 ++#define PMB_DATA 0xf7100000 ++#define PMB_ENTRY_MAX 16 ++#define PMB_E_MASK 0x0000000f ++#define PMB_E_SHIFT 8 ++ ++#define PMB_SZ_16M 0x00000000 ++#define PMB_SZ_64M 0x00000010 ++#define PMB_SZ_128M 0x00000080 ++#define PMB_SZ_512M 0x00000090 ++#define PMB_SZ_MASK PMB_SZ_512M ++#define PMB_C 0x00000008 ++#define PMB_WT 0x00000001 ++#define PMB_UB 0x00000200 ++#define PMB_V 0x00000100 ++ ++#define PMB_NO_ENTRY (-1) ++ ++struct pmb_entry; ++ ++struct pmb_entry { ++ unsigned long vpn; ++ unsigned long ppn; ++ unsigned long flags; ++ ++ /* ++ * 0 .. NR_PMB_ENTRIES for specific entry selection, or ++ * PMB_NO_ENTRY to search for a free one ++ */ ++ int entry; ++ ++ struct pmb_entry *next; ++ /* Adjacent entry link for contiguous multi-entry mappings */ ++ struct pmb_entry *link; ++}; ++ ++/* arch/sh/mm/pmb.c */ ++int __set_pmb_entry(unsigned long vpn, unsigned long ppn, ++ unsigned long flags, int *entry); ++int set_pmb_entry(struct pmb_entry *pmbe); ++void clear_pmb_entry(struct pmb_entry *pmbe); ++struct pmb_entry *pmb_alloc(unsigned long vpn, unsigned long ppn, ++ unsigned long flags); ++void pmb_free(struct pmb_entry *pmbe); ++long pmb_remap(unsigned long virt, unsigned long phys, ++ unsigned long size, unsigned long flags); ++void pmb_unmap(unsigned long addr); ++ ++#endif /* __MMU_H */ + +diff -ruN linux-2.6.17-vanilla/include/asm-sh/mmu_context.h linux-2.6.17/include/asm-sh/mmu_context.h +--- linux-2.6.17-vanilla/include/asm-sh/mmu_context.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/mmu_context.h 2006-07-12 16:54:25.000000000 +0000 +@@ -174,9 +174,7 @@ + { + /* Enable MMU */ + ctrl_outl(MMU_CONTROL_INIT, MMUCR); +- +- /* The manual suggests doing some nops after turning on the MMU */ +- __asm__ __volatile__ ("nop;nop;nop;nop;nop;nop;nop;nop\n\t"); ++ ctrl_barrier(); + + if (mmu_context_cache == NO_CONTEXT) + mmu_context_cache = MMU_CONTEXT_FIRST_VERSION; +@@ -191,7 +189,8 @@ + cr = ctrl_inl(MMUCR); + cr &= ~MMU_CONTROL_INIT; + ctrl_outl(cr, MMUCR); +- __asm__ __volatile__ ("nop;nop;nop;nop;nop;nop;nop;nop\n\t"); ++ ++ ctrl_barrier(); + } + #else + /* +diff -ruN linux-2.6.17-vanilla/include/asm-sh/mpc1211/CVS/Entries linux-2.6.17/include/asm-sh/mpc1211/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/mpc1211/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/mpc1211/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,8 @@ ++/dma.h/1.1/Fri May 16 17:19:08 2003/-ko/ ++/io.h/1.3/Mon Aug 4 01:51:58 2003/-ko/ ++/keyboard.h/1.2/Wed Mar 2 13:03:01 2005/-ko/ ++/m1543c.h/1.1/Fri May 16 17:19:08 2003/-ko/ ++/mc146818rtc.h/1.1/Fri May 16 17:19:08 2003/-ko/ ++/mpc1211.h/1.1/Fri May 16 17:19:08 2003/-ko/ ++/pci.h/1.1/Fri May 16 17:19:08 2003/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/mpc1211/CVS/Repository linux-2.6.17/include/asm-sh/mpc1211/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/mpc1211/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/mpc1211/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/mpc1211 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/mpc1211/CVS/Root linux-2.6.17/include/asm-sh/mpc1211/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/mpc1211/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/mpc1211/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/namei.h linux-2.6.17/include/asm-sh/namei.h +--- linux-2.6.17-vanilla/include/asm-sh/namei.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/namei.h 2006-07-12 16:54:25.000000000 +0000 +@@ -1,4 +1,4 @@ +-/* $Id: namei.h,v 1.3 2000/07/04 06:24:49 gniibe Exp $ ++/* $Id: namei.h,v 1.2 2000/04/14 19:14:01 mjd Exp $ + * linux/include/asm-sh/namei.h + * + * Included from linux/fs/namei.c +diff -ruN linux-2.6.17-vanilla/include/asm-sh/overdrive/CVS/Entries linux-2.6.17/include/asm-sh/overdrive/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/overdrive/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/overdrive/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,5 @@ ++/fpga.h/1.2/Fri Nov 1 17:19:31 2002// ++/gt64111.h/1.2/Fri Nov 1 17:19:31 2002// ++/io.h/1.3/Tue Jul 29 14:27:12 2003// ++/overdrive.h/1.2/Fri Nov 1 17:19:31 2002// ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/overdrive/CVS/Repository linux-2.6.17/include/asm-sh/overdrive/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/overdrive/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/overdrive/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/overdrive +diff -ruN linux-2.6.17-vanilla/include/asm-sh/overdrive/CVS/Root linux-2.6.17/include/asm-sh/overdrive/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/overdrive/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/overdrive/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/page.h linux-2.6.17/include/asm-sh/page.h +--- linux-2.6.17-vanilla/include/asm-sh/page.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/page.h 2006-07-12 16:54:25.000000000 +0000 +@@ -31,7 +31,6 @@ + #define HPAGE_SIZE (1UL << HPAGE_SHIFT) + #define HPAGE_MASK (~(HPAGE_SIZE-1)) + #define HUGETLB_PAGE_ORDER (HPAGE_SHIFT-PAGE_SHIFT) +-#define ARCH_HAS_SETCLEAR_HUGE_PTE + #endif + + #ifdef __KERNEL__ +@@ -43,38 +42,30 @@ + extern void clear_page_slow(void *to); + extern void copy_page_slow(void *to, void *from); + +-#if defined(CONFIG_SH7705_CACHE_32KB) && defined(CONFIG_MMU) ++#if defined(CONFIG_MMU) && (defined(CONFIG_CPU_SH4) || \ ++ defined(CONFIG_SH7705_CACHE_32KB)) + struct page; + extern void clear_user_page(void *to, unsigned long address, struct page *pg); + extern void copy_user_page(void *to, void *from, unsigned long address, struct page *pg); + extern void __clear_user_page(void *to, void *orig_to); + extern void __copy_user_page(void *to, void *from, void *orig_to); +-#elif defined(CONFIG_CPU_SH2) || defined(CONFIG_CPU_SH3) || !defined(CONFIG_MMU) ++#elif defined(CONFIG_CPU_SH3) || !defined(CONFIG_MMU) + #define clear_user_page(page, vaddr, pg) clear_page(page) + #define copy_user_page(to, from, vaddr, pg) copy_page(to, from) +-#elif defined(CONFIG_CPU_SH4) +-struct page; +-extern void clear_user_page(void *to, unsigned long address, struct page *pg); +-extern void copy_user_page(void *to, void *from, unsigned long address, struct page *pg); +-extern void __clear_user_page(void *to, void *orig_to); +-extern void __copy_user_page(void *to, void *from, void *orig_to); + #endif + + /* + * These are used to make use of C type-checking.. + */ + typedef struct { unsigned long pte; } pte_t; +-typedef struct { unsigned long pmd; } pmd_t; + typedef struct { unsigned long pgd; } pgd_t; + typedef struct { unsigned long pgprot; } pgprot_t; + + #define pte_val(x) ((x).pte) +-#define pmd_val(x) ((x).pmd) + #define pgd_val(x) ((x).pgd) + #define pgprot_val(x) ((x).pgprot) + + #define __pte(x) ((pte_t) { (x) } ) +-#define __pmd(x) ((pmd_t) { (x) } ) + #define __pgd(x) ((pgd_t) { (x) } ) + #define __pgprot(x) ((pgprot_t) { (x) } ) + +@@ -105,7 +96,7 @@ + + /* PFN start number, because of __MEMORY_START */ + #define PFN_START (__MEMORY_START >> PAGE_SHIFT) +-#define ARCH_PFN_OFFSET (FPN_START) ++#define ARCH_PFN_OFFSET (PFN_START) + #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) + #define pfn_valid(pfn) (((pfn) - PFN_START) < max_mapnr) + #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) +diff -ruN linux-2.6.17-vanilla/include/asm-sh/pci.h linux-2.6.17/include/asm-sh/pci.h +--- linux-2.6.17-vanilla/include/asm-sh/pci.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/pci.h 2006-07-12 16:54:25.000000000 +0000 +@@ -32,6 +32,34 @@ + #define PCIBIOS_MIN_IO board_pci_channels->io_resource->start + #define PCIBIOS_MIN_MEM board_pci_channels->mem_resource->start + ++/* ++ * I/O routine helpers ++ */ ++#ifdef CONFIG_CPU_SUBTYPE_SH7780 ++#define PCI_IO_AREA 0xFE400000 ++#define PCI_IO_SIZE 0x00400000 ++#else ++#define PCI_IO_AREA 0xFE240000 ++#define PCI_IO_SIZE 0X00040000 ++#endif ++ ++#define PCI_MEM_SIZE 0x01000000 ++ ++#define SH4_PCIIOBR_MASK 0xFFFC0000 ++#define pci_ioaddr(addr) (PCI_IO_AREA + (addr & ~SH4_PCIIOBR_MASK)) ++ ++#if defined(CONFIG_PCI) ++#define is_pci_ioaddr(port) \ ++ (((port) >= PCIBIOS_MIN_IO) && \ ++ ((port) < (PCIBIOS_MIN_IO + PCI_IO_SIZE))) ++#define is_pci_memaddr(port) \ ++ (((port) >= PCIBIOS_MIN_MEM) && \ ++ ((port) < (PCIBIOS_MIN_MEM + PCI_MEM_SIZE))) ++#else ++#define is_pci_ioaddr(port) (0) ++#define is_pci_memaddr(port) (0) ++#endif ++ + struct pci_dev; + + extern void pcibios_set_master(struct pci_dev *dev); +@@ -87,15 +115,6 @@ + */ + #define pci_dac_dma_supported(pci_dev, mask) (0) + +-/* These macros should be used after a pci_map_sg call has been done +- * to get bus addresses of each of the SG entries and their lengths. +- * You should only work with the number of sg entries pci_map_sg +- * returns, or alternatively stop on the first sg_dma_len(sg) which +- * is 0. +- */ +-#define sg_dma_address(sg) (virt_to_bus((sg)->dma_address)) +-#define sg_dma_len(sg) ((sg)->length) +- + #ifdef CONFIG_PCI + static inline void pci_dma_burst_advice(struct pci_dev *pdev, + enum pci_dma_burst_strategy *strat, +@@ -107,11 +126,12 @@ + #endif + + /* Board-specific fixup routines. */ +-extern void pcibios_fixup(void); +-extern void pcibios_fixup_irqs(void); ++void pcibios_fixup(void); ++int pcibios_init_platform(void); ++int pcibios_map_platform_irq(struct pci_dev *dev, u8 slot, u8 pin); + + #ifdef CONFIG_PCI_AUTO +-extern int pciauto_assign_resources(int busno, struct pci_channel *hose); ++int pciauto_assign_resources(int busno, struct pci_channel *hose); + #endif + + static inline void pcibios_add_platform_entries(struct pci_dev *dev) +diff -ruN linux-2.6.17-vanilla/include/asm-sh/pgalloc.h linux-2.6.17/include/asm-sh/pgalloc.h +--- linux-2.6.17-vanilla/include/asm-sh/pgalloc.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/pgalloc.h 2006-07-12 16:54:25.000000000 +0000 +@@ -1,15 +1,6 @@ + #ifndef __ASM_SH_PGALLOC_H + #define __ASM_SH_PGALLOC_H + +-#include <linux/threads.h> +-#include <linux/slab.h> +-#include <linux/mm.h> +- +-#define pgd_quicklist ((unsigned long *)0) +-#define pmd_quicklist ((unsigned long *)0) +-#define pte_quicklist ((unsigned long *)0) +-#define pgtable_cache_size 0L +- + #define pmd_populate_kernel(mm, pmd, pte) \ + set_pmd(pmd, __pmd(_PAGE_TABLE + __pa(pte))) + +@@ -24,38 +15,24 @@ + */ + static inline pgd_t *pgd_alloc(struct mm_struct *mm) + { +- unsigned int pgd_size = (USER_PTRS_PER_PGD * sizeof(pgd_t)); +- pgd_t *pgd = (pgd_t *)kmalloc(pgd_size, GFP_KERNEL); +- +- if (pgd) +- memset(pgd, 0, pgd_size); +- +- return pgd; ++ return (pgd_t *)__get_free_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); + } + + static inline void pgd_free(pgd_t *pgd) + { +- kfree(pgd); ++ free_page((unsigned long)pgd); + } + + static inline pte_t *pte_alloc_one_kernel(struct mm_struct *mm, + unsigned long address) + { +- pte_t *pte; +- +- pte = (pte_t *) __get_free_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); +- +- return pte; ++ return (pte_t *)__get_free_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); + } + + static inline struct page *pte_alloc_one(struct mm_struct *mm, + unsigned long address) + { +- struct page *pte; +- +- pte = alloc_pages(GFP_KERNEL|__GFP_REPEAT|__GFP_ZERO, 0); +- +- return pte; ++ return alloc_page(GFP_KERNEL | __GFP_REPEAT | __GFP_ZERO); + } + + static inline void pte_free_kernel(pte_t *pte) +@@ -75,14 +52,8 @@ + * inside the pgd, so has no extra memory associated with it. + */ + +-#define pmd_alloc_one(mm, addr) ({ BUG(); ((pmd_t *)2); }) + #define pmd_free(x) do { } while (0) + #define __pmd_free_tlb(tlb,x) do { } while (0) +-#define pgd_populate(mm, pmd, pte) BUG() + #define check_pgt_cache() do { } while (0) + +-#ifdef CONFIG_CPU_SH4 +-#define PG_mapped PG_arch_1 +-#endif +- + #endif /* __ASM_SH_PGALLOC_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/pgtable.h linux-2.6.17/include/asm-sh/pgtable.h +--- linux-2.6.17-vanilla/include/asm-sh/pgtable.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/pgtable.h 2006-07-12 16:54:25.000000000 +0000 +@@ -1,43 +1,43 @@ +-#ifndef __ASM_SH_PGTABLE_H +-#define __ASM_SH_PGTABLE_H +- +-#include <asm-generic/4level-fixup.h> +- + /* ++ * This file contains the functions and defines necessary to modify and ++ * use the SuperH page table tree. ++ * + * Copyright (C) 1999 Niibe Yutaka +- * Copyright (C) 2002, 2003, 2004 Paul Mundt ++ * Copyright (C) 2002 - 2005 Paul Mundt ++ * ++ * This file is subject to the terms and conditions of the GNU General ++ * Public License. See the file "COPYING" in the main directory of this ++ * archive for more details. + */ ++#ifndef __ASM_SH_PGTABLE_H ++#define __ASM_SH_PGTABLE_H + + #include <linux/config.h> +-#include <asm/pgtable-2level.h> ++#include <asm-generic/pgtable-nopmd.h> ++#include <asm/page.h> ++ ++#define PTRS_PER_PGD 1024 + +-/* +- * This file contains the functions and defines necessary to modify and use +- * the SuperH page table tree. +- */ + #ifndef __ASSEMBLY__ +-#include <asm/processor.h> + #include <asm/addrspace.h> + #include <asm/fixmap.h> +-#include <linux/threads.h> + + extern pgd_t swapper_pg_dir[PTRS_PER_PGD]; + extern void paging_init(void); + + /* +- * Basically we have the same two-level (which is the logical three level +- * Linux page table layout folded) page tables as the i386. +- */ +- +-/* + * ZERO_PAGE is a global shared page that is always zero: used + * for zero-mapped memory areas etc.. + */ +-extern unsigned long empty_zero_page[1024]; ++extern unsigned long empty_zero_page[PAGE_SIZE / sizeof(unsigned long)]; + #define ZERO_PAGE(vaddr) (virt_to_page(empty_zero_page)) + + #endif /* !__ASSEMBLY__ */ + ++/* traditional two-level paging structure */ ++#define PGDIR_SHIFT 22 ++#define PTRS_PER_PMD 1 ++#define PTRS_PER_PTE 1024 + #define PMD_SIZE (1UL << PMD_SHIFT) + #define PMD_MASK (~(PMD_SIZE-1)) + #define PGDIR_SIZE (1UL << PGDIR_SHIFT) +@@ -48,7 +48,6 @@ + + #define PTE_PHYS_MASK 0x1ffff000 + +-#ifndef __ASSEMBLY__ + /* + * First 1MB map is used by fixed purpose. + * Currently only 4-enty (16kB) is used (see arch/sh/mm/cache.c) +@@ -56,20 +55,41 @@ + #define VMALLOC_START (P3SEG+0x00100000) + #define VMALLOC_END (FIXADDR_START-2*PAGE_SIZE) + +-#define _PAGE_WT 0x001 /* WT-bit on SH-4, 0 on SH-3 */ +-#define _PAGE_HW_SHARED 0x002 /* SH-bit : page is shared among processes */ +-#define _PAGE_DIRTY 0x004 /* D-bit : page changed */ +-#define _PAGE_CACHABLE 0x008 /* C-bit : cachable */ +-#define _PAGE_SZ0 0x010 /* SZ0-bit : Size of page */ +-#define _PAGE_RW 0x020 /* PR0-bit : write access allowed */ +-#define _PAGE_USER 0x040 /* PR1-bit : user space access allowed */ +-#define _PAGE_SZ1 0x080 /* SZ1-bit : Size of page (on SH-4) */ +-#define _PAGE_PRESENT 0x100 /* V-bit : page is valid */ +-#define _PAGE_PROTNONE 0x200 /* software: if not present */ +-#define _PAGE_ACCESSED 0x400 /* software: page referenced */ +-#define _PAGE_U0_SHARED 0x800 /* software: page is shared in user space */ +- +-#define _PAGE_FILE _PAGE_WT /* software: pagecache or swap? */ ++/* ++ * Linux PTEL encoding. ++ * ++ * Hardware and software bit definitions for the PTEL value: ++ * ++ * - Bits 0 and 7 are reserved on SH-3 (_PAGE_WT and _PAGE_SZ1 on SH-4). ++ * ++ * - Bit 1 is the SH-bit, but is unused on SH-3 due to an MMU bug (the ++ * hardware PTEL value can't have the SH-bit set when MMUCR.IX is set, ++ * which is the default in cpu-sh3/mmu_context.h:MMU_CONTROL_INIT). ++ * ++ * In order to keep this relatively clean, do not use these for defining ++ * SH-3 specific flags until all of the other unused bits have been ++ * exhausted. ++ * ++ * - Bit 9 is reserved by everyone and used by _PAGE_PROTNONE. ++ * ++ * - Bits 10 and 11 are low bits of the PPN that are reserved on >= 4K pages. ++ * Bit 10 is used for _PAGE_ACCESSED, bit 11 remains unused. ++ * ++ * - Bits 31, 30, and 29 remain unused by everyone and can be used for future ++ * software flags, although care must be taken to update _PAGE_CLEAR_FLAGS. ++ */ ++#define _PAGE_WT 0x001 /* WT-bit on SH-4, 0 on SH-3 */ ++#define _PAGE_HW_SHARED 0x002 /* SH-bit : shared among processes */ ++#define _PAGE_DIRTY 0x004 /* D-bit : page changed */ ++#define _PAGE_CACHABLE 0x008 /* C-bit : cachable */ ++#define _PAGE_SZ0 0x010 /* SZ0-bit : Size of page */ ++#define _PAGE_RW 0x020 /* PR0-bit : write access allowed */ ++#define _PAGE_USER 0x040 /* PR1-bit : user space access allowed */ ++#define _PAGE_SZ1 0x080 /* SZ1-bit : Size of page (on SH-4) */ ++#define _PAGE_PRESENT 0x100 /* V-bit : page is valid */ ++#define _PAGE_PROTNONE 0x200 /* software: if not present */ ++#define _PAGE_ACCESSED 0x400 /* software: page referenced */ ++#define _PAGE_FILE _PAGE_WT /* software: pagecache or swap? */ + + /* software: moves to PTEA.TC (Timing Control) */ + #define _PAGE_PCC_AREA5 0x00000000 /* use BSC registers for area5 */ +@@ -84,23 +104,17 @@ + #define _PAGE_PCC_ATR8 0x60000000 /* Attribute Memory space, 8 bit bus */ + #define _PAGE_PCC_ATR16 0x60000001 /* Attribute Memory space, 6 bit bus */ + +- +-/* Mask which drop software flags +- * We also drop WT bit since it is used for _PAGE_FILE +- * bit in this implementation. +- */ +-#define _PAGE_CLEAR_FLAGS (_PAGE_WT | _PAGE_PROTNONE | _PAGE_ACCESSED | _PAGE_U0_SHARED) +- +-#if defined(CONFIG_CPU_SH3) +-/* +- * MMU on SH-3 has bug on SH-bit: We can't use it if MMUCR.IX=1. +- * Work around: Just drop SH-bit. +- */ +-#define _PAGE_FLAGS_HARDWARE_MASK (0x1fffffff & ~(_PAGE_CLEAR_FLAGS | _PAGE_HW_SHARED)) ++/* Mask which drops unused bits from the PTEL value */ ++#ifdef CONFIG_CPU_SH3 ++#define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED| \ ++ _PAGE_FILE | _PAGE_SZ1 | \ ++ _PAGE_HW_SHARED) + #else +-#define _PAGE_FLAGS_HARDWARE_MASK (0x1fffffff & ~(_PAGE_CLEAR_FLAGS)) ++#define _PAGE_CLEAR_FLAGS (_PAGE_PROTNONE | _PAGE_ACCESSED | _PAGE_FILE) + #endif + ++#define _PAGE_FLAGS_HARDWARE_MASK (0x1fffffff & ~(_PAGE_CLEAR_FLAGS)) ++ + /* Hardware flags: SZ0=1 (4k-byte) */ + #define _PAGE_FLAGS_HARD _PAGE_SZ0 + +@@ -110,15 +124,15 @@ + #define _PAGE_SZHUGE (_PAGE_SZ0 | _PAGE_SZ1) + #endif + +-#define _PAGE_SHARED _PAGE_U0_SHARED +- + #define _PAGE_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_ACCESSED | _PAGE_DIRTY) + #define _KERNPG_TABLE (_PAGE_PRESENT | _PAGE_RW | _PAGE_ACCESSED | _PAGE_DIRTY) +-#define _PAGE_CHG_MASK (PTE_MASK | _PAGE_ACCESSED | _PAGE_CACHABLE | _PAGE_DIRTY | _PAGE_SHARED) ++#define _PAGE_CHG_MASK (PTE_MASK | _PAGE_ACCESSED | _PAGE_CACHABLE | _PAGE_DIRTY) ++ ++#ifndef __ASSEMBLY__ + + #ifdef CONFIG_MMU + #define PAGE_NONE __pgprot(_PAGE_PROTNONE | _PAGE_CACHABLE |_PAGE_ACCESSED | _PAGE_FLAGS_HARD) +-#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_CACHABLE |_PAGE_ACCESSED | _PAGE_SHARED | _PAGE_FLAGS_HARD) ++#define PAGE_SHARED __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_USER | _PAGE_CACHABLE |_PAGE_ACCESSED | _PAGE_FLAGS_HARD) + #define PAGE_COPY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_CACHABLE | _PAGE_ACCESSED | _PAGE_FLAGS_HARD) + #define PAGE_READONLY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_CACHABLE | _PAGE_ACCESSED | _PAGE_FLAGS_HARD) + #define PAGE_KERNEL __pgprot(_PAGE_PRESENT | _PAGE_RW | _PAGE_CACHABLE | _PAGE_DIRTY | _PAGE_ACCESSED | _PAGE_HW_SHARED | _PAGE_FLAGS_HARD) +@@ -138,12 +152,13 @@ + #define PAGE_KERNEL_PCC __pgprot(0) + #endif + ++#endif /* __ASSEMBLY__ */ ++ + /* + * As i386 and MIPS, SuperH can't do page protection for execute, and + * considers that the same as a read. Also, write permissions imply +- * read permissions. This is the closest we can get.. ++ * read permissions. This is the closest we can get.. + */ +- + #define __P000 PAGE_NONE + #define __P001 PAGE_READONLY + #define __P010 PAGE_COPY +@@ -162,6 +177,26 @@ + #define __S110 PAGE_SHARED + #define __S111 PAGE_SHARED + ++#ifndef __ASSEMBLY__ ++ ++/* ++ * Certain architectures need to do special things when PTEs ++ * within a page table are directly modified. Thus, the following ++ * hook is made available. ++ */ ++#define set_pte(pteptr, pteval) (*(pteptr) = pteval) ++#define set_pte_at(mm,addr,ptep,pteval) set_pte(ptep,pteval) ++ ++/* ++ * (pmds are folded into pgds so this doesn't get actually called, ++ * but the define is needed for a generic inline function.) ++ */ ++#define set_pmd(pmdptr, pmdval) (*(pmdptr) = pmdval) ++ ++#define pte_pfn(x) ((unsigned long)(((x).pte >> PAGE_SHIFT))) ++#define pfn_pte(pfn, prot) __pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) ++#define pfn_pmd(pfn, prot) __pmd(((pfn) << PAGE_SHIFT) | pgprot_val(prot)) ++ + #define pte_none(x) (!pte_val(x)) + #define pte_present(x) (pte_val(x) & (_PAGE_PRESENT | _PAGE_PROTNONE)) + #define pte_clear(mm,addr,xp) do { set_pte_at(mm, addr, xp, __pte(0)); } while (0) +@@ -172,7 +207,7 @@ + #define pmd_bad(x) ((pmd_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE) + + #define pages_to_mb(x) ((x) >> (20-PAGE_SHIFT)) +-#define pte_page(x) phys_to_page(pte_val(x)&PTE_PHYS_MASK) ++#define pte_page(x) phys_to_page(pte_val(x)&PTE_PHYS_MASK) + + /* + * The following only work if pte_present() is true. +@@ -249,6 +284,11 @@ + #define pte_unmap(pte) do { } while (0) + #define pte_unmap_nested(pte) do { } while (0) + ++#define pte_ERROR(e) \ ++ printk("%s:%d: bad pte %08lx.\n", __FILE__, __LINE__, pte_val(e)) ++#define pgd_ERROR(e) \ ++ printk("%s:%d: bad pgd %08lx.\n", __FILE__, __LINE__, pgd_val(e)) ++ + struct vm_area_struct; + extern void update_mmu_cache(struct vm_area_struct * vma, + unsigned long address, pte_t pte); +@@ -273,8 +313,6 @@ + + typedef pte_t *pte_addr_t; + +-#endif /* !__ASSEMBLY__ */ +- + #define kern_addr_valid(addr) (1) + + #define io_remap_pfn_range(vma, vaddr, pfn, size, prot) \ +@@ -302,5 +340,7 @@ + + #include <asm-generic/pgtable.h> + ++#endif /* !__ASSEMBLY__ */ ++ + #endif /* __ASM_SH_PAGE_H */ + +diff -ruN linux-2.6.17-vanilla/include/asm-sh/pm.h linux-2.6.17/include/asm-sh/pm.h +--- linux-2.6.17-vanilla/include/asm-sh/pm.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/pm.h 2006-07-12 16:54:25.000000000 +0000 +@@ -0,0 +1,17 @@ ++/* ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ * ++ * Copyright 2006 (c) Andriy Skulysh <askulysh@gmail.com> ++ * ++ */ ++#ifndef __ASM_SH_PM_H ++#define __ASM_SH_PM_H ++ ++extern u8 wakeup_start; ++extern u8 wakeup_end; ++ ++void pm_enter(void); ++ ++#endif +diff -ruN linux-2.6.17-vanilla/include/asm-sh/processor.h linux-2.6.17/include/asm-sh/processor.h +--- linux-2.6.17-vanilla/include/asm-sh/processor.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/processor.h 2006-07-12 16:54:26.000000000 +0000 +@@ -148,6 +148,10 @@ + union sh_fpu_union fpu; + }; + ++typedef struct { ++ unsigned long seg; ++} mm_segment_t; ++ + /* Count of active tasks with UBC settings */ + extern int ubc_usercnt; + +@@ -265,5 +269,18 @@ + #define cpu_sleep() __asm__ __volatile__ ("sleep" : : : "memory") + #define cpu_relax() do { } while (0) + ++#if defined(CONFIG_CPU_SH2A) || defined(CONFIG_CPU_SH3) || \ ++ defined(CONFIG_CPU_SH4) ++#define PREFETCH_STRIDE L1_CACHE_BYTES ++#define ARCH_HAS_PREFETCH ++#define ARCH_HAS_PREFETCHW ++static inline void prefetch(void *x) ++{ ++ __asm__ __volatile__ ("pref @%0\n\t" : : "r" (x) : "memory"); ++} ++ ++#define prefetchw(x) prefetch(x) ++#endif ++ + #endif /* __KERNEL__ */ + #endif /* __ASM_SH_PROCESSOR_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/r7780rp/CVS/Entries linux-2.6.17/include/asm-sh/r7780rp/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/r7780rp/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/r7780rp/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,3 @@ ++/ide.h/1.1/Sat Jan 7 19:55:57 2006/-ko/ ++/r7780rp.h/1.3/Thu Jul 6 12:38:31 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/r7780rp/CVS/Repository linux-2.6.17/include/asm-sh/r7780rp/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/r7780rp/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/r7780rp/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/r7780rp +diff -ruN linux-2.6.17-vanilla/include/asm-sh/r7780rp/CVS/Root linux-2.6.17/include/asm-sh/r7780rp/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/r7780rp/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/r7780rp/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/r7780rp/ide.h linux-2.6.17/include/asm-sh/r7780rp/ide.h +--- linux-2.6.17-vanilla/include/asm-sh/r7780rp/ide.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/r7780rp/ide.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,8 @@ ++#ifndef __ASM_SH_R7780RP_IDE_H ++#define __ASM_SH_R7780RP_IDE_H ++ ++/* Nothing to see here.. */ ++#include <asm/mach/r7780rp.h> ++ ++#endif /* __ASM_SH_R7780RP_IDE_H */ ++ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/r7780rp/r7780rp.h linux-2.6.17/include/asm-sh/r7780rp/r7780rp.h +--- linux-2.6.17-vanilla/include/asm-sh/r7780rp/r7780rp.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/r7780rp/r7780rp.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,177 @@ ++#ifndef __ASM_SH_RENESAS_R7780RP_H ++#define __ASM_SH_RENESAS_R7780RP_H ++ ++/* ++ * linux/include/asm-sh/r7780rp.h ++ * ++ * Copyright (C) 2000 Atom Create Engineering Co., Ltd. ++ * ++ * Renesas Solutions Highlander R7780RP support ++ */ ++ ++/* Box specific addresses. */ ++#if defined(CONFIG_SH_R7780MP) ++#define PA_BCR 0xa4000000 /* FPGA */ ++#define PA_IRLMSK (PA_BCR+0x0000) /* Interrupt Mask control */ ++#define PA_IRLMON (PA_BCR+0x0002) /* Interrupt Status control */ ++#define PA_IRLPRI1 (PA_BCR+0x0004) /* Interrupt Priorty 1 */ ++#define PA_IRLPRI2 (PA_BCR+0x0006) /* Interrupt Priorty 2 */ ++#define PA_IRLPRI3 (PA_BCR+0x0008) /* Interrupt Priorty 3 */ ++#define PA_IRLPRI4 (PA_BCR+0x000a) /* Interrupt Priorty 4 */ ++#define PA_RSTCTL (PA_BCR+0x000c) /* Reset Control */ ++#define PA_PCIBD (PA_BCR+0x000e) /* PCI Board detect control */ ++#define PA_PCICD (PA_BCR+0x0010) /* PCI Conector detect control */ ++#define PA_EXTGIO (PA_BCR+0x0016) /* Extension GPIO Control */ ++#define PA_IVDRMON (PA_BCR+0x0018) /* iVDR Moniter control */ ++#define PA_IVDRCTL (PA_BCR+0x001a) /* iVDR control */ ++#define PA_OBLED (PA_BCR+0x001c) /* On Board LED control */ ++#define PA_OBSW (PA_BCR+0x001e) /* On Board Switch control */ ++#define PA_AUDIOSEL (PA_BCR+0x0020) /* Sound Interface Select control */ ++#define PA_EXTPLR (PA_BCR+0x001e) /* Extention Pin Polarity control */ ++#define PA_TPCTL (PA_BCR+0x0100) /* Touch Panel Access control */ ++#define PA_TPDCKCTL (PA_BCR+0x0102) /* Touch Panel Access data control */ ++#define PA_TPCTLCLR (PA_BCR+0x0104) /* Touch Panel Access control */ ++#define PA_TPXPOS (PA_BCR+0x0106) /* Touch Panel X position control */ ++#define PA_TPYPOS (PA_BCR+0x0108) /* Touch Panel Y position control */ ++#define PA_DBSW (PA_BCR+0x0200) /* Debug Board Switch control */ ++#define PA_CFCTL (PA_BCR+0x0300) /* CF Timing control */ ++#define PA_CFPOW (PA_BCR+0x0302) /* CF Power control */ ++#define PA_CFCDINTCLR (PA_BCR+0x0304) /* CF Insert Interrupt clear */ ++#define PA_SCSMR0 (PA_BCR+0x0400) /* SCIF0 Serial mode control */ ++#define PA_SCBRR0 (PA_BCR+0x0404) /* SCIF0 Bit rate control */ ++#define PA_SCSCR0 (PA_BCR+0x0408) /* SCIF0 Serial control */ ++#define PA_SCFTDR0 (PA_BCR+0x040c) /* SCIF0 Send FIFO control */ ++#define PA_SCFSR0 (PA_BCR+0x0410) /* SCIF0 Serial status control */ ++#define PA_SCFRDR0 (PA_BCR+0x0414) /* SCIF0 Receive FIFO control */ ++#define PA_SCFCR0 (PA_BCR+0x0418) /* SCIF0 FIFO control */ ++#define PA_SCTFDR0 (PA_BCR+0x041c) /* SCIF0 Send FIFO data control */ ++#define PA_SCRFDR0 (PA_BCR+0x0420) /* SCIF0 Receive FIFO data control */ ++#define PA_SCSPTR0 (PA_BCR+0x0424) /* SCIF0 Serial Port control */ ++#define PA_SCLSR0 (PA_BCR+0x0428) /* SCIF0 Line Status control */ ++#define PA_SCRER0 (PA_BCR+0x042c) /* SCIF0 Serial Error control */ ++#define PA_SCSMR1 (PA_BCR+0x0500) /* SCIF1 Serial mode control */ ++#define PA_SCBRR1 (PA_BCR+0x0504) /* SCIF1 Bit rate control */ ++#define PA_SCSCR1 (PA_BCR+0x0508) /* SCIF1 Serial control */ ++#define PA_SCFTDR1 (PA_BCR+0x050c) /* SCIF1 Send FIFO control */ ++#define PA_SCFSR1 (PA_BCR+0x0510) /* SCIF1 Serial status control */ ++#define PA_SCFRDR1 (PA_BCR+0x0514) /* SCIF1 Receive FIFO control */ ++#define PA_SCFCR1 (PA_BCR+0x0518) /* SCIF1 FIFO control */ ++#define PA_SCTFDR1 (PA_BCR+0x051c) /* SCIF1 Send FIFO data control */ ++#define PA_SCRFDR1 (PA_BCR+0x0520) /* SCIF1 Receive FIFO data control */ ++#define PA_SCSPTR1 (PA_BCR+0x0524) /* SCIF1 Serial Port control */ ++#define PA_SCLSR1 (PA_BCR+0x0528) /* SCIF1 Line Status control */ ++#define PA_SCRER1 (PA_BCR+0x052c) /* SCIF1 Serial Error control */ ++#define PA_ICCR (PA_BCR+0x0600) /* Serial control */ ++#define PA_SAR (PA_BCR+0x0602) /* Serial Slave control */ ++#define PA_MDR (PA_BCR+0x0604) /* Serial Mode control */ ++#define PA_ADR1 (PA_BCR+0x0606) /* Serial Address1 control */ ++#define PA_DAR1 (PA_BCR+0x0646) /* Serial Data1 control */ ++#define PA_VERREG (PA_BCR+0x0700) /* FPGA Version Register */ ++#define PA_POFF (PA_BCR+0x0800) /* System Power Off control */ ++#define PA_PMR (PA_BCR+0x0900) /* */ ++ ++#define PA_AX88796L 0xa4100400 /* AX88796L Area */ ++#define PA_SC1602BSLB 0xa6000000 /* SC1602BSLB Area */ ++#define PA_AREA5_IO 0xb4000000 /* Area 5 IO Memory */ ++#define PA_AREA6_IO 0xb8000000 /* Area 6 IO Memory */ ++#define PA_IDE_OFFSET 0x1f0 /* CF IDE Offset */ ++#define AX88796L_IO_BASE 0x1000 /* AX88796L IO Base Address */ ++ ++#define IRLCNTR1 (PA_BCR + 0) /* Interrupt Control Register1 */ ++ ++#define IRQ_PCISLOT1 65 /* PCI Slot #1 IRQ */ ++#define IRQ_PCISLOT2 66 /* PCI Slot #2 IRQ */ ++#define IRQ_PCISLOT3 67 /* PCI Slot #3 IRQ */ ++#define IRQ_PCISLOT4 68 /* PCI Slot #4 IRQ */ ++#define IRQ_CFCARD 1 /* CF Card IRQ */ ++// #define IRQ_CFINST 0 /* CF Card Insert IRQ */ ++#define IRQ_TP 2 /* Touch Panel IRQ */ ++#define IRQ_SCI1 3 /* SCI1 IRQ */ ++#define IRQ_SCI0 4 /* SCI0 IRQ */ ++#define IRQ_2SERIAL 5 /* Serial IRQ */ ++#define IRQ_RTC 6 /* RTC A / B IRQ */ ++#define IRQ_EXTENTION6 7 /* EXT6n IRQ */ ++#define IRQ_EXTENTION5 8 /* EXT5n IRQ */ ++#define IRQ_EXTENTION4 9 /* EXT4n IRQ */ ++#define IRQ_EXTENTION2 10 /* EXT2n IRQ */ ++#define IRQ_EXTENTION1 11 /* EXT1n IRQ */ ++#define IRQ_ONETH 13 /* On board Ethernet IRQ */ ++#define IRQ_PSW 14 /* Push Switch IRQ */ ++ ++#else /* R7780RP */ ++ ++#define PA_BCR 0xa5000000 /* FPGA */ ++#define PA_IRLMSK (PA_BCR+0x0000) /* Interrupt Mask control */ ++#define PA_IRLMON (PA_BCR+0x0002) /* Interrupt Status control */ ++#define PA_SDPOW (PA_BCR+0x0004) /* SD Power control */ ++#define PA_RSTCTL (PA_BCR+0x0006) /* Device Reset control */ ++#define PA_PCIBD (PA_BCR+0x0008) /* PCI Board detect control */ ++#define PA_PCICD (PA_BCR+0x000a) /* PCI Conector detect control */ ++#define PA_ZIGIO1 (PA_BCR+0x000c) /* Zigbee IO control 1 */ ++#define PA_ZIGIO2 (PA_BCR+0x000e) /* Zigbee IO control 2 */ ++#define PA_ZIGIO3 (PA_BCR+0x0010) /* Zigbee IO control 3 */ ++#define PA_ZIGIO4 (PA_BCR+0x0012) /* Zigbee IO control 4 */ ++#define PA_IVDRMON (PA_BCR+0x0014) /* iVDR Moniter control */ ++#define PA_IVDRCTL (PA_BCR+0x0016) /* iVDR control */ ++#define PA_OBLED (PA_BCR+0x0018) /* On Board LED control */ ++#define PA_OBSW (PA_BCR+0x001a) /* On Board Switch control */ ++#define PA_AUDIOSEL (PA_BCR+0x001c) /* Sound Interface Select control */ ++#define PA_EXTPLR (PA_BCR+0x001e) /* Extention Pin Polarity control */ ++#define PA_TPCTL (PA_BCR+0x0100) /* Touch Panel Access control */ ++#define PA_TPDCKCTL (PA_BCR+0x0102) /* Touch Panel Access data control */ ++#define PA_TPCTLCLR (PA_BCR+0x0104) /* Touch Panel Access control */ ++#define PA_TPXPOS (PA_BCR+0x0106) /* Touch Panel X position control */ ++#define PA_TPYPOS (PA_BCR+0x0108) /* Touch Panel Y position control */ ++#define PA_DBDET (PA_BCR+0x0200) /* Debug Board detect control */ ++#define PA_DBDISPCTL (PA_BCR+0x0202) /* Debug Board Dot timing control */ ++#define PA_DBSW (PA_BCR+0x0204) /* Debug Board Switch control */ ++#define PA_CFCTL (PA_BCR+0x0300) /* CF Timing control */ ++#define PA_CFPOW (PA_BCR+0x0302) /* CF Power control */ ++#define PA_CFCDINTCLR (PA_BCR+0x0304) /* CF Insert Interrupt clear */ ++#define PA_SCSMR (PA_BCR+0x0400) /* SCIF Serial mode control */ ++#define PA_SCBRR (PA_BCR+0x0402) /* SCIF Bit rate control */ ++#define PA_SCSCR (PA_BCR+0x0404) /* SCIF Serial control */ ++#define PA_SCFDTR (PA_BCR+0x0406) /* SCIF Send FIFO control */ ++#define PA_SCFSR (PA_BCR+0x0408) /* SCIF Serial status control */ ++#define PA_SCFRDR (PA_BCR+0x040a) /* SCIF Receive FIFO control */ ++#define PA_SCFCR (PA_BCR+0x040c) /* SCIF FIFO control */ ++#define PA_SCFDR (PA_BCR+0x040e) /* SCIF FIFO data control */ ++#define PA_SCLSR (PA_BCR+0x0412) /* SCIF Line Status control */ ++#define PA_ICCR (PA_BCR+0x0500) /* Serial control */ ++#define PA_SAR (PA_BCR+0x0502) /* Serial Slave control */ ++#define PA_MDR (PA_BCR+0x0504) /* Serial Mode control */ ++#define PA_ADR1 (PA_BCR+0x0506) /* Serial Address1 control */ ++#define PA_DAR1 (PA_BCR+0x0546) /* Serial Data1 control */ ++#define PA_VERREG (PA_BCR+0x0600) /* FPGA Version Register */ ++ ++#define PA_AX88796L 0xa5800400 /* AX88796L Area */ ++#define PA_SC1602BSLB 0xa6000000 /* SC1602BSLB Area */ ++#define PA_AREA5_IO 0xb4000000 /* Area 5 IO Memory */ ++#define PA_AREA6_IO 0xb8000000 /* Area 6 IO Memory */ ++#define PA_IDE_OFFSET 0x1f0 /* CF IDE Offset */ ++#define AX88796L_IO_BASE 0x1000 /* AX88796L IO Base Address */ ++ ++#define IRLCNTR1 (PA_BCR + 0) /* Interrupt Control Register1 */ ++ ++#define IRQ_PCISLOT1 0 /* PCI Slot #1 IRQ */ ++#define IRQ_PCISLOT2 1 /* PCI Slot #2 IRQ */ ++#define IRQ_PCISLOT3 2 /* PCI Slot #3 IRQ */ ++#define IRQ_PCISLOT4 3 /* PCI Slot #4 IRQ */ ++#define IRQ_CFCARD 4 /* CF Card IRQ */ ++#define IRQ_CFINST 5 /* CF Card Insert IRQ */ ++#define IRQ_M66596 6 /* M66596 IRQ */ ++#define IRQ_SDCARD 7 /* SD Card IRQ */ ++#define IRQ_TUCHPANEL 8 /* Touch Panel IRQ */ ++#define IRQ_SCI 9 /* SCI IRQ */ ++#define IRQ_2SERIAL 10 /* Serial IRQ */ ++#define IRQ_EXTENTION 11 /* EXTn IRQ */ ++#define IRQ_ONETH 12 /* On board Ethernet IRQ */ ++#define IRQ_PSW 13 /* Push Switch IRQ */ ++#define IRQ_ZIGBEE 14 /* Ziggbee IO IRQ */ ++ ++#endif /* CONFIG_SH_R7780MP */ ++ ++#define __IO_PREFIX r7780rp ++#include <asm/io_generic.h> ++ ++#endif /* __ASM_SH_RENESAS_R7780RP */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/rtc.h linux-2.6.17/include/asm-sh/rtc.h +--- linux-2.6.17-vanilla/include/asm-sh/rtc.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/rtc.h 2006-07-12 16:54:26.000000000 +0000 +@@ -8,8 +8,8 @@ + extern void sh_rtc_gettimeofday(struct timespec *ts); + extern int sh_rtc_settimeofday(const time_t secs); + extern void (*board_time_init)(void); +-extern void (*rtc_get_time)(struct timespec *); +-extern int (*rtc_set_time)(const time_t); ++extern void (*rtc_sh_get_time)(struct timespec *); ++extern int (*rtc_sh_set_time)(const time_t); + + /* RCR1 Bits */ + #define RCR1_CF 0x80 /* Carry Flag */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/CVS/Entries linux-2.6.17/include/asm-sh/rts7751r2d/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/rts7751r2d/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,4 @@ ++/ide.h/1.1/Wed Apr 21 00:09:19 2004/-ko/ ++/rts7751r2d.h/1.3/Wed Jan 18 05:43:02 2006/-ko/ ++/voyagergx_reg.h/1.2/Sun Aug 15 16:59:32 2004/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/CVS/Repository linux-2.6.17/include/asm-sh/rts7751r2d/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/rts7751r2d/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/rts7751r2d +diff -ruN linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/CVS/Root linux-2.6.17/include/asm-sh/rts7751r2d/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/rts7751r2d/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/rts7751r2d.h linux-2.6.17/include/asm-sh/rts7751r2d/rts7751r2d.h +--- linux-2.6.17-vanilla/include/asm-sh/rts7751r2d/rts7751r2d.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/rts7751r2d/rts7751r2d.h 2006-07-12 16:54:26.000000000 +0000 +@@ -41,8 +41,6 @@ + + #define PA_AX88796L 0xaa000400 /* AX88796L Area */ + #define PA_VOYAGER 0xab000000 /* VOYAGER GX Area */ +-#define PA_AREA5_IO 0xb4000000 /* Area 5 IO Memory */ +-#define PA_AREA6_IO 0xb8000000 /* Area 6 IO Memory */ + #define PA_IDE_OFFSET 0x1f0 /* CF IDE Offset */ + #define AX88796L_IO_BASE 0x1000 /* AX88796L IO Base Address */ + +@@ -70,4 +68,7 @@ + #define IRQ_PCISLOT2 10 /* PCI Slot #2 IRQ */ + #define IRQ_EXTENTION 11 /* EXTn IRQ */ + ++#define __IO_PREFIX rts7751r2d ++#include <asm/io_generic.h> ++ + #endif /* __ASM_SH_RENESAS_RTS7751R2D */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/saturn/CVS/Entries linux-2.6.17/include/asm-sh/saturn/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/saturn/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/saturn/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,3 @@ ++/io.h/1.3/Tue Jul 29 14:27:12 2003/-ko/ ++/smpc.h/1.2/Sun May 4 19:30:16 2003/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/saturn/CVS/Repository linux-2.6.17/include/asm-sh/saturn/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/saturn/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/saturn/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/saturn +diff -ruN linux-2.6.17-vanilla/include/asm-sh/saturn/CVS/Root linux-2.6.17/include/asm-sh/saturn/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/saturn/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/saturn/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/scatterlist.h linux-2.6.17/include/asm-sh/scatterlist.h +--- linux-2.6.17-vanilla/include/asm-sh/scatterlist.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/scatterlist.h 2006-07-12 16:54:26.000000000 +0000 +@@ -10,4 +10,13 @@ + + #define ISA_DMA_THRESHOLD (0x1fffffff) + ++/* These macros should be used after a pci_map_sg call has been done ++ * to get bus addresses of each of the SG entries and their lengths. ++ * You should only work with the number of sg entries pci_map_sg ++ * returns, or alternatively stop on the first sg_dma_len(sg) which ++ * is 0. ++ */ ++#define sg_dma_address(sg) ((sg)->dma_address) ++#define sg_dma_len(sg) ((sg)->length) ++ + #endif /* !(__ASM_SH_SCATTERLIST_H) */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/se.h linux-2.6.17/include/asm-sh/se.h +--- linux-2.6.17-vanilla/include/asm-sh/se.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/se.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,80 @@ ++#ifndef __ASM_SH_HITACHI_SE_H ++#define __ASM_SH_HITACHI_SE_H ++ ++/* ++ * linux/include/asm-sh/hitachi_se.h ++ * ++ * Copyright (C) 2000 Kazumoto Kojima ++ * ++ * Hitachi SolutionEngine support ++ */ ++ ++/* Box specific addresses. */ ++ ++#define PA_ROM 0x00000000 /* EPROM */ ++#define PA_ROM_SIZE 0x00400000 /* EPROM size 4M byte */ ++#define PA_FROM 0x01000000 /* EPROM */ ++#define PA_FROM_SIZE 0x00400000 /* EPROM size 4M byte */ ++#define PA_EXT1 0x04000000 ++#define PA_EXT1_SIZE 0x04000000 ++#define PA_EXT2 0x08000000 ++#define PA_EXT2_SIZE 0x04000000 ++#define PA_SDRAM 0x0c000000 ++#define PA_SDRAM_SIZE 0x04000000 ++ ++#define PA_EXT4 0x12000000 ++#define PA_EXT4_SIZE 0x02000000 ++#define PA_EXT5 0x14000000 ++#define PA_EXT5_SIZE 0x04000000 ++#define PA_PCIC 0x18000000 /* MR-SHPC-01 PCMCIA */ ++ ++#define PA_83902 0xb0000000 /* DP83902A */ ++#define PA_83902_IF 0xb0040000 /* DP83902A remote io port */ ++#define PA_83902_RST 0xb0080000 /* DP83902A reset port */ ++ ++#define PA_SUPERIO 0xb0400000 /* SMC37C935A super io chip */ ++#define PA_DIPSW0 0xb0800000 /* Dip switch 5,6 */ ++#define PA_DIPSW1 0xb0800002 /* Dip switch 7,8 */ ++#define PA_LED 0xb0c00000 /* LED */ ++#if defined(CONFIG_CPU_SUBTYPE_SH7705) ++#define PA_BCR 0xb0e00000 ++#else ++#define PA_BCR 0xb1400000 /* FPGA */ ++#endif ++ ++#define PA_MRSHPC 0xb83fffe0 /* MR-SHPC-01 PCMCIA controller */ ++#define PA_MRSHPC_MW1 0xb8400000 /* MR-SHPC-01 memory window base */ ++#define PA_MRSHPC_MW2 0xb8500000 /* MR-SHPC-01 attribute window base */ ++#define PA_MRSHPC_IO 0xb8600000 /* MR-SHPC-01 I/O window base */ ++#define MRSHPC_OPTION (PA_MRSHPC + 6) ++#define MRSHPC_CSR (PA_MRSHPC + 8) ++#define MRSHPC_ISR (PA_MRSHPC + 10) ++#define MRSHPC_ICR (PA_MRSHPC + 12) ++#define MRSHPC_CPWCR (PA_MRSHPC + 14) ++#define MRSHPC_MW0CR1 (PA_MRSHPC + 16) ++#define MRSHPC_MW1CR1 (PA_MRSHPC + 18) ++#define MRSHPC_IOWCR1 (PA_MRSHPC + 20) ++#define MRSHPC_MW0CR2 (PA_MRSHPC + 22) ++#define MRSHPC_MW1CR2 (PA_MRSHPC + 24) ++#define MRSHPC_IOWCR2 (PA_MRSHPC + 26) ++#define MRSHPC_CDCR (PA_MRSHPC + 28) ++#define MRSHPC_PCIC_INFO (PA_MRSHPC + 30) ++ ++#define BCR_ILCRA (PA_BCR + 0) ++#define BCR_ILCRB (PA_BCR + 2) ++#define BCR_ILCRC (PA_BCR + 4) ++#define BCR_ILCRD (PA_BCR + 6) ++#define BCR_ILCRE (PA_BCR + 8) ++#define BCR_ILCRF (PA_BCR + 10) ++#define BCR_ILCRG (PA_BCR + 12) ++ ++#if defined(CONFIG_CPU_SUBTYPE_SH7705) ++#define IRQ_STNIC 12 ++#else ++#define IRQ_STNIC 10 ++#endif ++ ++#define __IO_PREFIX se ++#include <asm/io_generic.h> ++ ++#endif /* __ASM_SH_HITACHI_SE_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/se7300.h linux-2.6.17/include/asm-sh/se7300.h +--- linux-2.6.17-vanilla/include/asm-sh/se7300.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/se7300.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,64 @@ ++#ifndef __ASM_SH_HITACHI_SE7300_H ++#define __ASM_SH_HITACHI_SE7300_H ++ ++/* ++ * linux/include/asm-sh/se/se7300.h ++ * ++ * Copyright (C) 2003 Takashi Kusuda <kusuda-takashi@hitachi-ul.co.jp> ++ * ++ * SH-Mobile SolutionEngine 7300 support ++ */ ++ ++/* Box specific addresses. */ ++ ++/* Area 0 */ ++#define PA_ROM 0x00000000 /* EPROM */ ++#define PA_ROM_SIZE 0x00400000 /* EPROM size 4M byte(Actually 2MB) */ ++#define PA_FROM 0x00400000 /* Flash ROM */ ++#define PA_FROM_SIZE 0x00400000 /* Flash size 4M byte */ ++#define PA_SRAM 0x00800000 /* SRAM */ ++#define PA_FROM_SIZE 0x00400000 /* SRAM size 4M byte */ ++/* Area 1 */ ++#define PA_EXT1 0x04000000 ++#define PA_EXT1_SIZE 0x04000000 ++/* Area 2 */ ++#define PA_EXT2 0x08000000 ++#define PA_EXT2_SIZE 0x04000000 ++/* Area 3 */ ++#define PA_SDRAM 0x0c000000 ++#define PA_SDRAM_SIZE 0x04000000 ++/* Area 4 */ ++#define PA_PCIC 0x10000000 /* MR-SHPC-01 PCMCIA */ ++#define PA_MRSHPC 0xb03fffe0 /* MR-SHPC-01 PCMCIA controller */ ++#define PA_MRSHPC_MW1 0xb0400000 /* MR-SHPC-01 memory window base */ ++#define PA_MRSHPC_MW2 0xb0500000 /* MR-SHPC-01 attribute window base */ ++#define PA_MRSHPC_IO 0xb0600000 /* MR-SHPC-01 I/O window base */ ++#define MRSHPC_OPTION (PA_MRSHPC + 6) ++#define MRSHPC_CSR (PA_MRSHPC + 8) ++#define MRSHPC_ISR (PA_MRSHPC + 10) ++#define MRSHPC_ICR (PA_MRSHPC + 12) ++#define MRSHPC_CPWCR (PA_MRSHPC + 14) ++#define MRSHPC_MW0CR1 (PA_MRSHPC + 16) ++#define MRSHPC_MW1CR1 (PA_MRSHPC + 18) ++#define MRSHPC_IOWCR1 (PA_MRSHPC + 20) ++#define MRSHPC_MW0CR2 (PA_MRSHPC + 22) ++#define MRSHPC_MW1CR2 (PA_MRSHPC + 24) ++#define MRSHPC_IOWCR2 (PA_MRSHPC + 26) ++#define MRSHPC_CDCR (PA_MRSHPC + 28) ++#define MRSHPC_PCIC_INFO (PA_MRSHPC + 30) ++#define PA_LED 0xb0800000 /* LED */ ++#define PA_DIPSW 0xb0900000 /* Dip switch 31 */ ++#define PA_EPLD_MODESET 0xb0a00000 /* FPGA Mode set register */ ++#define PA_EPLD_ST1 0xb0a80000 /* FPGA Interrupt status register1 */ ++#define PA_EPLD_ST2 0xb0ac0000 /* FPGA Interrupt status register2 */ ++/* Area 5 */ ++#define PA_EXT5 0x14000000 ++#define PA_EXT5_SIZE 0x04000000 ++/* Area 6 */ ++#define PA_LCD1 0xb8000000 ++#define PA_LCD2 0xb8800000 ++ ++#define __IO_PREFIX sh7300se ++#include <asm/io_generic.h> ++ ++#endif /* __ASM_SH_HITACHI_SE7300_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/se73180.h linux-2.6.17/include/asm-sh/se73180.h +--- linux-2.6.17-vanilla/include/asm-sh/se73180.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/se73180.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,65 @@ ++#ifndef __ASM_SH_HITACHI_SE73180_H ++#define __ASM_SH_HITACHI_SE73180_H ++ ++/* ++ * include/asm-sh/se/se73180.h ++ * ++ * Copyright (C) 2003 Takashi Kusuda <kusuda-takashi@hitachi-ul.co.jp> ++ * ++ * SH-Mobile SolutionEngine 73180 support ++ */ ++ ++/* Box specific addresses. */ ++ ++/* Area 0 */ ++#define PA_ROM 0x00000000 /* EPROM */ ++#define PA_ROM_SIZE 0x00400000 /* EPROM size 4M byte(Actually 2MB) */ ++#define PA_FROM 0x00400000 /* Flash ROM */ ++#define PA_FROM_SIZE 0x00400000 /* Flash size 4M byte */ ++#define PA_SRAM 0x00800000 /* SRAM */ ++#define PA_FROM_SIZE 0x00400000 /* SRAM size 4M byte */ ++/* Area 1 */ ++#define PA_EXT1 0x04000000 ++#define PA_EXT1_SIZE 0x04000000 ++/* Area 2 */ ++#define PA_EXT2 0x08000000 ++#define PA_EXT2_SIZE 0x04000000 ++/* Area 3 */ ++#define PA_SDRAM 0x0c000000 ++#define PA_SDRAM_SIZE 0x04000000 ++/* Area 4 */ ++#define PA_PCIC 0x10000000 /* MR-SHPC-01 PCMCIA */ ++#define PA_MRSHPC 0xb03fffe0 /* MR-SHPC-01 PCMCIA controller */ ++#define PA_MRSHPC_MW1 0xb0400000 /* MR-SHPC-01 memory window base */ ++#define PA_MRSHPC_MW2 0xb0500000 /* MR-SHPC-01 attribute window base */ ++#define PA_MRSHPC_IO 0xb0600000 /* MR-SHPC-01 I/O window base */ ++#define MRSHPC_OPTION (PA_MRSHPC + 6) ++#define MRSHPC_CSR (PA_MRSHPC + 8) ++#define MRSHPC_ISR (PA_MRSHPC + 10) ++#define MRSHPC_ICR (PA_MRSHPC + 12) ++#define MRSHPC_CPWCR (PA_MRSHPC + 14) ++#define MRSHPC_MW0CR1 (PA_MRSHPC + 16) ++#define MRSHPC_MW1CR1 (PA_MRSHPC + 18) ++#define MRSHPC_IOWCR1 (PA_MRSHPC + 20) ++#define MRSHPC_MW0CR2 (PA_MRSHPC + 22) ++#define MRSHPC_MW1CR2 (PA_MRSHPC + 24) ++#define MRSHPC_IOWCR2 (PA_MRSHPC + 26) ++#define MRSHPC_CDCR (PA_MRSHPC + 28) ++#define MRSHPC_PCIC_INFO (PA_MRSHPC + 30) ++#define PA_LED 0xb0C00000 /* LED */ ++#define LED_SHIFT 0 ++#define PA_DIPSW 0xb0900000 /* Dip switch 31 */ ++#define PA_EPLD_MODESET 0xb0a00000 /* FPGA Mode set register */ ++#define PA_EPLD_ST1 0xb0a80000 /* FPGA Interrupt status register1 */ ++#define PA_EPLD_ST2 0xb0ac0000 /* FPGA Interrupt status register2 */ ++/* Area 5 */ ++#define PA_EXT5 0x14000000 ++#define PA_EXT5_SIZE 0x04000000 ++/* Area 6 */ ++#define PA_LCD1 0xb8000000 ++#define PA_LCD2 0xb8800000 ++ ++#define __IO_PREFIX sh73180se ++#include <asm/io_generic.h> ++ ++#endif /* __ASM_SH_HITACHI_SE73180_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/se7751.h linux-2.6.17/include/asm-sh/se7751.h +--- linux-2.6.17-vanilla/include/asm-sh/se7751.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/se7751.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,71 @@ ++#ifndef __ASM_SH_HITACHI_7751SE_H ++#define __ASM_SH_HITACHI_7751SE_H ++ ++/* ++ * linux/include/asm-sh/hitachi_7751se.h ++ * ++ * Copyright (C) 2000 Kazumoto Kojima ++ * ++ * Hitachi SolutionEngine support ++ ++ * Modified for 7751 Solution Engine by ++ * Ian da Silva and Jeremy Siegel, 2001. ++ */ ++ ++/* Box specific addresses. */ ++ ++#define PA_ROM 0x00000000 /* EPROM */ ++#define PA_ROM_SIZE 0x00400000 /* EPROM size 4M byte */ ++#define PA_FROM 0x01000000 /* EPROM */ ++#define PA_FROM_SIZE 0x00400000 /* EPROM size 4M byte */ ++#define PA_EXT1 0x04000000 ++#define PA_EXT1_SIZE 0x04000000 ++#define PA_EXT2 0x08000000 ++#define PA_EXT2_SIZE 0x04000000 ++#define PA_SDRAM 0x0c000000 ++#define PA_SDRAM_SIZE 0x04000000 ++ ++#define PA_EXT4 0x12000000 ++#define PA_EXT4_SIZE 0x02000000 ++#define PA_EXT5 0x14000000 ++#define PA_EXT5_SIZE 0x04000000 ++#define PA_PCIC 0x18000000 /* MR-SHPC-01 PCMCIA */ ++ ++#define PA_DIPSW0 0xb9000000 /* Dip switch 5,6 */ ++#define PA_DIPSW1 0xb9000002 /* Dip switch 7,8 */ ++#define PA_LED 0xba000000 /* LED */ ++#define PA_BCR 0xbb000000 /* FPGA on the MS7751SE01 */ ++ ++#define PA_MRSHPC 0xb83fffe0 /* MR-SHPC-01 PCMCIA controler */ ++#define PA_MRSHPC_MW1 0xb8400000 /* MR-SHPC-01 memory window base */ ++#define PA_MRSHPC_MW2 0xb8500000 /* MR-SHPC-01 attribute window base */ ++#define PA_MRSHPC_IO 0xb8600000 /* MR-SHPC-01 I/O window base */ ++#define MRSHPC_MODE (PA_MRSHPC + 4) ++#define MRSHPC_OPTION (PA_MRSHPC + 6) ++#define MRSHPC_CSR (PA_MRSHPC + 8) ++#define MRSHPC_ISR (PA_MRSHPC + 10) ++#define MRSHPC_ICR (PA_MRSHPC + 12) ++#define MRSHPC_CPWCR (PA_MRSHPC + 14) ++#define MRSHPC_MW0CR1 (PA_MRSHPC + 16) ++#define MRSHPC_MW1CR1 (PA_MRSHPC + 18) ++#define MRSHPC_IOWCR1 (PA_MRSHPC + 20) ++#define MRSHPC_MW0CR2 (PA_MRSHPC + 22) ++#define MRSHPC_MW1CR2 (PA_MRSHPC + 24) ++#define MRSHPC_IOWCR2 (PA_MRSHPC + 26) ++#define MRSHPC_CDCR (PA_MRSHPC + 28) ++#define MRSHPC_PCIC_INFO (PA_MRSHPC + 30) ++ ++#define BCR_ILCRA (PA_BCR + 0) ++#define BCR_ILCRB (PA_BCR + 2) ++#define BCR_ILCRC (PA_BCR + 4) ++#define BCR_ILCRD (PA_BCR + 6) ++#define BCR_ILCRE (PA_BCR + 8) ++#define BCR_ILCRF (PA_BCR + 10) ++#define BCR_ILCRG (PA_BCR + 12) ++ ++#define IRQ_79C973 13 ++ ++#define __IO_PREFIX sh7751se ++#include <asm/io_generic.h> ++ ++#endif /* __ASM_SH_HITACHI_7751SE_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/sfp-machine.h linux-2.6.17/include/asm-sh/sfp-machine.h +--- linux-2.6.17-vanilla/include/asm-sh/sfp-machine.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/sfp-machine.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,86 @@ ++/* Machine-dependent software floating-point definitions. ++ SuperH kernel version. ++ Copyright (C) 1997,1998,1999 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ Contributed by Richard Henderson (rth@cygnus.com), ++ Jakub Jelinek (jj@ultra.linux.cz), ++ David S. Miller (davem@redhat.com) and ++ Peter Maydell (pmaydell@chiark.greenend.org.uk). ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Library General Public License as ++ published by the Free Software Foundation; either version 2 of the ++ License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Library General Public License for more details. ++ ++ You should have received a copy of the GNU Library General Public ++ License along with the GNU C Library; see the file COPYING.LIB. If ++ not, write to the Free Software Foundation, Inc., ++ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ++ ++#ifndef _SFP_MACHINE_H ++#define _SFP_MACHINE_H ++ ++#include <linux/config.h> ++ ++#define _FP_W_TYPE_SIZE 32 ++#define _FP_W_TYPE unsigned long ++#define _FP_WS_TYPE signed long ++#define _FP_I_TYPE long ++ ++#define _FP_MUL_MEAT_S(R,X,Y) \ ++ _FP_MUL_MEAT_1_wide(_FP_WFRACBITS_S,R,X,Y,umul_ppmm) ++#define _FP_MUL_MEAT_D(R,X,Y) \ ++ _FP_MUL_MEAT_2_wide(_FP_WFRACBITS_D,R,X,Y,umul_ppmm) ++#define _FP_MUL_MEAT_Q(R,X,Y) \ ++ _FP_MUL_MEAT_4_wide(_FP_WFRACBITS_Q,R,X,Y,umul_ppmm) ++ ++#define _FP_DIV_MEAT_S(R,X,Y) _FP_DIV_MEAT_1_udiv(S,R,X,Y) ++#define _FP_DIV_MEAT_D(R,X,Y) _FP_DIV_MEAT_2_udiv(D,R,X,Y) ++#define _FP_DIV_MEAT_Q(R,X,Y) _FP_DIV_MEAT_4_udiv(Q,R,X,Y) ++ ++#define _FP_NANFRAC_S ((_FP_QNANBIT_S << 1) - 1) ++#define _FP_NANFRAC_D ((_FP_QNANBIT_D << 1) - 1), -1 ++#define _FP_NANFRAC_Q ((_FP_QNANBIT_Q << 1) - 1), -1, -1, -1 ++#define _FP_NANSIGN_S 0 ++#define _FP_NANSIGN_D 0 ++#define _FP_NANSIGN_Q 0 ++ ++#define _FP_KEEPNANFRACP 1 ++ ++/* ++ * If one NaN is signaling and the other is not, ++ * we choose that one, otherwise we choose X. ++ */ ++#define _FP_CHOOSENAN(fs, wc, R, X, Y, OP) \ ++ do { \ ++ if ((_FP_FRAC_HIGH_RAW_##fs(X) & _FP_QNANBIT_##fs) \ ++ && !(_FP_FRAC_HIGH_RAW_##fs(Y) & _FP_QNANBIT_##fs)) \ ++ { \ ++ R##_s = Y##_s; \ ++ _FP_FRAC_COPY_##wc(R,Y); \ ++ } \ ++ else \ ++ { \ ++ R##_s = X##_s; \ ++ _FP_FRAC_COPY_##wc(R,X); \ ++ } \ ++ R##_c = FP_CLS_NAN; \ ++ } while (0) ++ ++//#define FP_ROUNDMODE FPSCR_RM ++#define FP_DENORM_ZERO 1/*FPSCR_DN*/ ++ ++/* Exception flags. */ ++#define FP_EX_INVALID (1<<4) ++#define FP_EX_DIVZERO (1<<3) ++#define FP_EX_OVERFLOW (1<<2) ++#define FP_EX_UNDERFLOW (1<<1) ++#define FP_EX_INEXACT (1<<0) ++ ++#endif ++ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh03/CVS/Entries linux-2.6.17/include/asm-sh/sh03/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/sh03/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/sh03/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,4 @@ ++/ide.h/1.1/Fri Dec 3 01:43:33 2004/-ko/ ++/io.h/1.2/Wed Jan 4 18:27:49 2006/-ko/ ++/sh03.h/1.2/Sat Aug 13 14:34:12 2005/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh03/CVS/Repository linux-2.6.17/include/asm-sh/sh03/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/sh03/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/sh03/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/sh03 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh03/CVS/Root linux-2.6.17/include/asm-sh/sh03/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/sh03/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/sh03/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh03/io.h linux-2.6.17/include/asm-sh/sh03/io.h +--- linux-2.6.17-vanilla/include/asm-sh/sh03/io.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/sh03/io.h 2006-07-12 16:54:26.000000000 +0000 +@@ -33,14 +33,6 @@ + #define IRL3_IPR_POS 0 + #define IRL3_PRIORITY 4 + +- +-extern unsigned long sh03_isa_port2addr(unsigned long offset); +- +-extern void setup_sh03(void); +-extern void init_sh03_IRQ(void); +-extern void heartbeat_sh03(void); +- +-extern void sh03_rtc_gettimeofday(struct timeval *tv); +-extern int sh03_rtc_settimeofday(const struct timeval *tv); ++void heartbeat_sh03(void); + + #endif /* _ASM_SH_IO_SH03_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh2000/CVS/Entries linux-2.6.17/include/asm-sh/sh2000/CVS/Entries +--- linux-2.6.17-vanilla/include/asm-sh/sh2000/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/sh2000/CVS/Entries 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,2 @@ ++/sh2000.h/1.2/Fri Nov 1 17:19:31 2002// ++D +diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh2000/CVS/Repository linux-2.6.17/include/asm-sh/sh2000/CVS/Repository +--- linux-2.6.17-vanilla/include/asm-sh/sh2000/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/sh2000/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/asm-sh/sh2000 +diff -ruN linux-2.6.17-vanilla/include/asm-sh/sh2000/CVS/Root linux-2.6.17/include/asm-sh/sh2000/CVS/Root +--- linux-2.6.17-vanilla/include/asm-sh/sh2000/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/sh2000/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/asm-sh/smc37c93x.h linux-2.6.17/include/asm-sh/smc37c93x.h +--- linux-2.6.17-vanilla/include/asm-sh/smc37c93x.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/smc37c93x.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,190 @@ ++#ifndef __ASM_SH_SMC37C93X_H ++#define __ASM_SH_SMC37C93X_H ++ ++/* ++ * linux/include/asm-sh/smc37c93x.h ++ * ++ * Copyright (C) 2000 Kazumoto Kojima ++ * ++ * SMSC 37C93x Super IO Chip support ++ */ ++ ++/* Default base I/O address */ ++#define FDC_PRIMARY_BASE 0x3f0 ++#define IDE1_PRIMARY_BASE 0x1f0 ++#define IDE1_SECONDARY_BASE 0x170 ++#define PARPORT_PRIMARY_BASE 0x378 ++#define COM1_PRIMARY_BASE 0x2f8 ++#define COM2_PRIMARY_BASE 0x3f8 ++#define RTC_PRIMARY_BASE 0x070 ++#define KBC_PRIMARY_BASE 0x060 ++#define AUXIO_PRIMARY_BASE 0x000 /* XXX */ ++ ++/* Logical device number */ ++#define LDN_FDC 0 ++#define LDN_IDE1 1 ++#define LDN_IDE2 2 ++#define LDN_PARPORT 3 ++#define LDN_COM1 4 ++#define LDN_COM2 5 ++#define LDN_RTC 6 ++#define LDN_KBC 7 ++#define LDN_AUXIO 8 ++ ++/* Configuration port and key */ ++#define CONFIG_PORT 0x3f0 ++#define INDEX_PORT CONFIG_PORT ++#define DATA_PORT 0x3f1 ++#define CONFIG_ENTER 0x55 ++#define CONFIG_EXIT 0xaa ++ ++/* Configuration index */ ++#define CURRENT_LDN_INDEX 0x07 ++#define POWER_CONTROL_INDEX 0x22 ++#define ACTIVATE_INDEX 0x30 ++#define IO_BASE_HI_INDEX 0x60 ++#define IO_BASE_LO_INDEX 0x61 ++#define IRQ_SELECT_INDEX 0x70 ++#define DMA_SELECT_INDEX 0x74 ++ ++#define GPIO46_INDEX 0xc6 ++#define GPIO47_INDEX 0xc7 ++ ++/* UART stuff. Only for debugging. */ ++/* UART Register */ ++ ++#define UART_RBR 0x0 /* Receiver Buffer Register (Read Only) */ ++#define UART_THR 0x0 /* Transmitter Holding Register (Write Only) */ ++#define UART_IER 0x2 /* Interrupt Enable Register */ ++#define UART_IIR 0x4 /* Interrupt Ident Register (Read Only) */ ++#define UART_FCR 0x4 /* FIFO Control Register (Write Only) */ ++#define UART_LCR 0x6 /* Line Control Register */ ++#define UART_MCR 0x8 /* MODEM Control Register */ ++#define UART_LSR 0xa /* Line Status Register */ ++#define UART_MSR 0xc /* MODEM Status Register */ ++#define UART_SCR 0xe /* Scratch Register */ ++#define UART_DLL 0x0 /* Divisor Latch (LS) */ ++#define UART_DLM 0x2 /* Divisor Latch (MS) */ ++ ++#ifndef __ASSEMBLY__ ++typedef struct uart_reg { ++ volatile __u16 rbr; ++ volatile __u16 ier; ++ volatile __u16 iir; ++ volatile __u16 lcr; ++ volatile __u16 mcr; ++ volatile __u16 lsr; ++ volatile __u16 msr; ++ volatile __u16 scr; ++} uart_reg; ++#endif /* ! __ASSEMBLY__ */ ++ ++/* Alias for Write Only Register */ ++ ++#define thr rbr ++#define tcr iir ++ ++/* Alias for Divisor Latch Register */ ++ ++#define dll rbr ++#define dlm ier ++#define fcr iir ++ ++/* Interrupt Enable Register */ ++ ++#define IER_ERDAI 0x0100 /* Enable Received Data Available Interrupt */ ++#define IER_ETHREI 0x0200 /* Enable Transmitter Holding Register Empty Interrupt */ ++#define IER_ELSI 0x0400 /* Enable Receiver Line Status Interrupt */ ++#define IER_EMSI 0x0800 /* Enable MODEM Status Interrupt */ ++ ++/* Interrupt Ident Register */ ++ ++#define IIR_IP 0x0100 /* "0" if Interrupt Pending */ ++#define IIR_IIB0 0x0200 /* Interrupt ID Bit 0 */ ++#define IIR_IIB1 0x0400 /* Interrupt ID Bit 1 */ ++#define IIR_IIB2 0x0800 /* Interrupt ID Bit 2 */ ++#define IIR_FIFO 0xc000 /* FIFOs enabled */ ++ ++/* FIFO Control Register */ ++ ++#define FCR_FEN 0x0100 /* FIFO enable */ ++#define FCR_RFRES 0x0200 /* Receiver FIFO reset */ ++#define FCR_TFRES 0x0400 /* Transmitter FIFO reset */ ++#define FCR_DMA 0x0800 /* DMA mode select */ ++#define FCR_RTL 0x4000 /* Receiver triger (LSB) */ ++#define FCR_RTM 0x8000 /* Receiver triger (MSB) */ ++ ++/* Line Control Register */ ++ ++#define LCR_WLS0 0x0100 /* Word Length Select Bit 0 */ ++#define LCR_WLS1 0x0200 /* Word Length Select Bit 1 */ ++#define LCR_STB 0x0400 /* Number of Stop Bits */ ++#define LCR_PEN 0x0800 /* Parity Enable */ ++#define LCR_EPS 0x1000 /* Even Parity Select */ ++#define LCR_SP 0x2000 /* Stick Parity */ ++#define LCR_SB 0x4000 /* Set Break */ ++#define LCR_DLAB 0x8000 /* Divisor Latch Access Bit */ ++ ++/* MODEM Control Register */ ++ ++#define MCR_DTR 0x0100 /* Data Terminal Ready */ ++#define MCR_RTS 0x0200 /* Request to Send */ ++#define MCR_OUT1 0x0400 /* Out 1 */ ++#define MCR_IRQEN 0x0800 /* IRQ Enable */ ++#define MCR_LOOP 0x1000 /* Loop */ ++ ++/* Line Status Register */ ++ ++#define LSR_DR 0x0100 /* Data Ready */ ++#define LSR_OE 0x0200 /* Overrun Error */ ++#define LSR_PE 0x0400 /* Parity Error */ ++#define LSR_FE 0x0800 /* Framing Error */ ++#define LSR_BI 0x1000 /* Break Interrupt */ ++#define LSR_THRE 0x2000 /* Transmitter Holding Register Empty */ ++#define LSR_TEMT 0x4000 /* Transmitter Empty */ ++#define LSR_FIFOE 0x8000 /* Receiver FIFO error */ ++ ++/* MODEM Status Register */ ++ ++#define MSR_DCTS 0x0100 /* Delta Clear to Send */ ++#define MSR_DDSR 0x0200 /* Delta Data Set Ready */ ++#define MSR_TERI 0x0400 /* Trailing Edge Ring Indicator */ ++#define MSR_DDCD 0x0800 /* Delta Data Carrier Detect */ ++#define MSR_CTS 0x1000 /* Clear to Send */ ++#define MSR_DSR 0x2000 /* Data Set Ready */ ++#define MSR_RI 0x4000 /* Ring Indicator */ ++#define MSR_DCD 0x8000 /* Data Carrier Detect */ ++ ++/* Baud Rate Divisor */ ++ ++#define UART_CLK (1843200) /* 1.8432 MHz */ ++#define UART_BAUD(x) (UART_CLK / (16 * (x))) ++ ++/* RTC register definition */ ++#define RTC_SECONDS 0 ++#define RTC_SECONDS_ALARM 1 ++#define RTC_MINUTES 2 ++#define RTC_MINUTES_ALARM 3 ++#define RTC_HOURS 4 ++#define RTC_HOURS_ALARM 5 ++#define RTC_DAY_OF_WEEK 6 ++#define RTC_DAY_OF_MONTH 7 ++#define RTC_MONTH 8 ++#define RTC_YEAR 9 ++#define RTC_FREQ_SELECT 10 ++# define RTC_UIP 0x80 ++# define RTC_DIV_CTL 0x70 ++/* This RTC can work under 32.768KHz clock only. */ ++# define RTC_OSC_ENABLE 0x20 ++# define RTC_OSC_DISABLE 0x00 ++#define RTC_CONTROL 11 ++# define RTC_SET 0x80 ++# define RTC_PIE 0x40 ++# define RTC_AIE 0x20 ++# define RTC_UIE 0x10 ++# define RTC_SQWE 0x08 ++# define RTC_DM_BINARY 0x04 ++# define RTC_24H 0x02 ++# define RTC_DST_EN 0x01 ++ ++#endif /* __ASM_SH_SMC37C93X_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/smp.h linux-2.6.17/include/asm-sh/smp.h +--- linux-2.6.17-vanilla/include/asm-sh/smp.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/smp.h 2006-07-12 16:54:26.000000000 +0000 +@@ -20,11 +20,6 @@ + #include <asm/atomic.h> + #include <asm/current.h> + +-extern cpumask_t cpu_online_map; +-extern cpumask_t cpu_possible_map; +- +-#define cpu_online(cpu) cpu_isset(cpu, cpu_online_map) +- + #define raw_smp_processor_id() (current_thread_info()->cpu) + + /* I've no idea what the real meaning of this is */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/snapgear.h linux-2.6.17/include/asm-sh/snapgear.h +--- linux-2.6.17-vanilla/include/asm-sh/snapgear.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/snapgear.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,79 @@ ++/* ++ * include/asm-sh/snapgear/io.h ++ * ++ * Modified version of io_se.h for the snapgear-specific functions. ++ * ++ * May be copied or modified under the terms of the GNU General Public ++ * License. See linux/COPYING for more information. ++ * ++ * IO functions for a SnapGear ++ */ ++ ++#ifndef _ASM_SH_IO_SNAPGEAR_H ++#define _ASM_SH_IO_SNAPGEAR_H ++ ++#if defined(CONFIG_CPU_SH4) ++/* ++ * The external interrupt lines, these take up ints 0 - 15 inclusive ++ * depending on the priority for the interrupt. In fact the priority ++ * is the interrupt :-) ++ */ ++ ++#define IRL0_IRQ 2 ++#define IRL0_IPR_ADDR INTC_IPRD ++#define IRL0_IPR_POS 3 ++#define IRL0_PRIORITY 13 ++ ++#define IRL1_IRQ 5 ++#define IRL1_IPR_ADDR INTC_IPRD ++#define IRL1_IPR_POS 2 ++#define IRL1_PRIORITY 10 ++ ++#define IRL2_IRQ 8 ++#define IRL2_IPR_ADDR INTC_IPRD ++#define IRL2_IPR_POS 1 ++#define IRL2_PRIORITY 7 ++ ++#define IRL3_IRQ 11 ++#define IRL3_IPR_ADDR INTC_IPRD ++#define IRL3_IPR_POS 0 ++#define IRL3_PRIORITY 4 ++#endif ++ ++#define __IO_PREFIX snapgear ++#include <asm/io_generic.h> ++ ++#ifdef CONFIG_SH_SECUREEDGE5410 ++/* ++ * We need to remember what was written to the ioport as some bits ++ * are shared with other functions and you cannot read back what was ++ * written :-| ++ * ++ * Bit Read Write ++ * ----------------------------------------------- ++ * D0 DCD on ttySC1 power ++ * D1 Reset Switch heatbeat ++ * D2 ttySC0 CTS (7100) LAN ++ * D3 - WAN ++ * D4 ttySC0 DCD (7100) CONSOLE ++ * D5 - ONLINE ++ * D6 - VPN ++ * D7 - DTR on ttySC1 ++ * D8 - ttySC0 RTS (7100) ++ * D9 - ttySC0 DTR (7100) ++ * D10 - RTC SCLK ++ * D11 RTC DATA RTC DATA ++ * D12 - RTS RESET ++ */ ++ ++#define SECUREEDGE_IOPORT_ADDR ((volatile short *) 0xb0000000) ++extern unsigned short secureedge5410_ioport; ++ ++#define SECUREEDGE_WRITE_IOPORT(val, mask) (*SECUREEDGE_IOPORT_ADDR = \ ++ (secureedge5410_ioport = \ ++ ((secureedge5410_ioport & ~(mask)) | ((val) & (mask))))) ++#define SECUREEDGE_READ_IOPORT() \ ++ ((*SECUREEDGE_IOPORT_ADDR&0x0817) | (secureedge5410_ioport&~0x0817)) ++#endif ++ ++#endif /* _ASM_SH_IO_SNAPGEAR_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/system.h linux-2.6.17/include/asm-sh/system.h +--- linux-2.6.17-vanilla/include/asm-sh/system.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/system.h 2006-07-12 16:54:26.000000000 +0000 +@@ -7,6 +7,7 @@ + */ + + #include <linux/config.h> ++#include <asm/types.h> + + /* + * switch_to() should switch tasks to task nr n, first +@@ -67,13 +68,20 @@ + { + } + +-#define nop() __asm__ __volatile__ ("nop") +- +- +-#define xchg(ptr,x) ((__typeof__(*(ptr)))__xchg((unsigned long)(x),(ptr),sizeof(*(ptr)))) ++#ifdef CONFIG_CPU_SH4A ++#define __icbi() \ ++{ \ ++ unsigned long __addr; \ ++ __addr = 0xa8000000; \ ++ __asm__ __volatile__( \ ++ "icbi %0\n\t" \ ++ : /* no output */ \ ++ : "m" (__m(__addr))); \ ++} ++#endif + + static __inline__ unsigned long tas(volatile int *m) +-{ /* #define tas(ptr) (xchg((ptr),1)) */ ++{ + unsigned long retval; + + __asm__ __volatile__ ("tas.b @%1\n\t" +@@ -82,12 +90,33 @@ + return retval; + } + +-extern void __xchg_called_with_bad_pointer(void); +- +-#define mb() __asm__ __volatile__ ("": : :"memory") +-#define rmb() mb() +-#define wmb() __asm__ __volatile__ ("": : :"memory") ++/* ++ * A brief note on ctrl_barrier(), the control register write barrier. ++ * ++ * Legacy SH cores typically require a sequence of 8 nops after ++ * modification of a control register in order for the changes to take ++ * effect. On newer cores (like the sh4a and sh5) this is accomplished ++ * with icbi. ++ * ++ * Also note that on sh4a in the icbi case we can forego a synco for the ++ * write barrier, as it's not necessary for control registers. ++ * ++ * Historically we have only done this type of barrier for the MMUCR, but ++ * it's also necessary for the CCR, so we make it generic here instead. ++ */ ++#ifdef CONFIG_CPU_SH4A ++#define mb() __asm__ __volatile__ ("synco": : :"memory") ++#define rmb() mb() ++#define wmb() __asm__ __volatile__ ("synco": : :"memory") ++#define ctrl_barrier() __icbi() + #define read_barrier_depends() do { } while(0) ++#else ++#define mb() __asm__ __volatile__ ("": : :"memory") ++#define rmb() mb() ++#define wmb() __asm__ __volatile__ ("": : :"memory") ++#define ctrl_barrier() __asm__ __volatile__ ("nop;nop;nop;nop;nop;nop;nop;nop") ++#define read_barrier_depends() do { } while(0) ++#endif + + #ifdef CONFIG_SMP + #define smp_mb() mb() +@@ -105,7 +134,8 @@ + #define set_wmb(var, value) do { var = value; wmb(); } while (0) + + /* Interrupt Control */ +-static __inline__ void local_irq_enable(void) ++#ifdef CONFIG_CPU_HAS_SR_RB ++static inline void local_irq_enable(void) + { + unsigned long __dummy0, __dummy1; + +@@ -118,6 +148,20 @@ + : "1" (~0x000000f0) + : "memory"); + } ++#else ++static inline void local_irq_enable(void) ++{ ++ unsigned long __dummy0, __dummy1; ++ ++ __asm__ __volatile__ ( ++ "stc sr, %0\n\t" ++ "and %1, %0\n\t" ++ "ldc %0, sr\n\t" ++ : "=&r" (__dummy0), "=r" (__dummy1) ++ : "1" (~0x000000f0) ++ : "memory"); ++} ++#endif + + static __inline__ void local_irq_disable(void) + { +@@ -130,6 +174,31 @@ + : "memory"); + } + ++static __inline__ void set_bl_bit(void) ++{ ++ unsigned long __dummy0, __dummy1; ++ ++ __asm__ __volatile__ ("stc sr, %0\n\t" ++ "or %2, %0\n\t" ++ "and %3, %0\n\t" ++ "ldc %0, sr" ++ : "=&r" (__dummy0), "=r" (__dummy1) ++ : "r" (0x10000000), "r" (0xffffff0f) ++ : "memory"); ++} ++ ++static __inline__ void clear_bl_bit(void) ++{ ++ unsigned long __dummy0, __dummy1; ++ ++ __asm__ __volatile__ ("stc sr, %0\n\t" ++ "and %2, %0\n\t" ++ "ldc %0, sr" ++ : "=&r" (__dummy0), "=r" (__dummy1) ++ : "1" (~0x10000000) ++ : "memory"); ++} ++ + #define local_save_flags(x) \ + __asm__("stc sr, %0; and #0xf0, %0" : "=&z" (x) :/**/: "memory" ) + +@@ -174,17 +243,17 @@ + } + } + #else +-#define local_irq_restore(x) do { \ ++#define local_irq_restore(x) do { \ + if ((x & 0x000000f0) != 0x000000f0) \ +- local_irq_enable(); \ ++ local_irq_enable(); \ + } while (0) + #endif + +-#define really_restore_flags(x) do { \ ++#define really_restore_flags(x) do { \ + if ((x & 0x000000f0) != 0x000000f0) \ +- local_irq_enable(); \ ++ local_irq_enable(); \ + else \ +- local_irq_disable(); \ ++ local_irq_disable(); \ + } while (0) + + /* +@@ -212,8 +281,8 @@ + #define back_to_P1() \ + do { \ + unsigned long __dummy; \ ++ ctrl_barrier(); \ + __asm__ __volatile__( \ +- "nop;nop;nop;nop;nop;nop;nop\n\t" \ + "mov.l 1f, %0\n\t" \ + "jmp @%0\n\t" \ + " nop\n\t" \ +@@ -226,7 +295,7 @@ + /* For spinlocks etc */ + #define local_irq_save(x) x = local_irq_save() + +-static __inline__ unsigned long xchg_u32(volatile int * m, unsigned long val) ++static inline unsigned long xchg_u32(volatile u32 *m, unsigned long val) + { + unsigned long flags, retval; + +@@ -237,7 +306,7 @@ + return retval; + } + +-static __inline__ unsigned long xchg_u8(volatile unsigned char * m, unsigned long val) ++static inline unsigned long xchg_u8(volatile u8 *m, unsigned long val) + { + unsigned long flags, retval; + +@@ -248,20 +317,70 @@ + return retval; + } + +-static __inline__ unsigned long __xchg(unsigned long x, volatile void * ptr, int size) ++extern void __xchg_called_with_bad_pointer(void); ++ ++#define __xchg(ptr, x, size) \ ++({ \ ++ unsigned long __xchg__res; \ ++ volatile void *__xchg_ptr = (ptr); \ ++ switch (size) { \ ++ case 4: \ ++ __xchg__res = xchg_u32(__xchg_ptr, x); \ ++ break; \ ++ case 1: \ ++ __xchg__res = xchg_u8(__xchg_ptr, x); \ ++ break; \ ++ default: \ ++ __xchg_called_with_bad_pointer(); \ ++ __xchg__res = x; \ ++ break; \ ++ } \ ++ \ ++ __xchg__res; \ ++}) ++ ++#define xchg(ptr,x) \ ++ ((__typeof__(*(ptr)))__xchg((ptr),(unsigned long)(x), sizeof(*(ptr)))) ++ ++static inline unsigned long __cmpxchg_u32(volatile int * m, unsigned long old, ++ unsigned long new) ++{ ++ __u32 retval; ++ unsigned long flags; ++ ++ local_irq_save(flags); ++ retval = *m; ++ if (retval == old) ++ *m = new; ++ local_irq_restore(flags); /* implies memory barrier */ ++ return retval; ++} ++ ++/* This function doesn't exist, so you'll get a linker error ++ * if something tries to do an invalid cmpxchg(). */ ++extern void __cmpxchg_called_with_bad_pointer(void); ++ ++#define __HAVE_ARCH_CMPXCHG 1 ++ ++static inline unsigned long __cmpxchg(volatile void * ptr, unsigned long old, ++ unsigned long new, int size) + { + switch (size) { + case 4: +- return xchg_u32(ptr, x); +- break; +- case 1: +- return xchg_u8(ptr, x); +- break; ++ return __cmpxchg_u32(ptr, old, new); + } +- __xchg_called_with_bad_pointer(); +- return x; ++ __cmpxchg_called_with_bad_pointer(); ++ return old; + } + ++#define cmpxchg(ptr,o,n) \ ++ ({ \ ++ __typeof__(*(ptr)) _o_ = (o); \ ++ __typeof__(*(ptr)) _n_ = (n); \ ++ (__typeof__(*(ptr))) __cmpxchg((ptr), (unsigned long)_o_, \ ++ (unsigned long)_n_, sizeof(*(ptr))); \ ++ }) ++ + /* XXX + * disable hlt during certain critical i/o operations + */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/systemh7751.h linux-2.6.17/include/asm-sh/systemh7751.h +--- linux-2.6.17-vanilla/include/asm-sh/systemh7751.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/systemh7751.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,71 @@ ++#ifndef __ASM_SH_SYSTEMH_7751SYSTEMH_H ++#define __ASM_SH_SYSTEMH_7751SYSTEMH_H ++ ++/* ++ * linux/include/asm-sh/systemh/7751systemh.h ++ * ++ * Copyright (C) 2000 Kazumoto Kojima ++ * ++ * Hitachi SystemH support ++ ++ * Modified for 7751 SystemH by ++ * Jonathan Short, 2002. ++ */ ++ ++/* Box specific addresses. */ ++ ++#define PA_ROM 0x00000000 /* EPROM */ ++#define PA_ROM_SIZE 0x00400000 /* EPROM size 4M byte */ ++#define PA_FROM 0x01000000 /* EPROM */ ++#define PA_FROM_SIZE 0x00400000 /* EPROM size 4M byte */ ++#define PA_EXT1 0x04000000 ++#define PA_EXT1_SIZE 0x04000000 ++#define PA_EXT2 0x08000000 ++#define PA_EXT2_SIZE 0x04000000 ++#define PA_SDRAM 0x0c000000 ++#define PA_SDRAM_SIZE 0x04000000 ++ ++#define PA_EXT4 0x12000000 ++#define PA_EXT4_SIZE 0x02000000 ++#define PA_EXT5 0x14000000 ++#define PA_EXT5_SIZE 0x04000000 ++#define PA_PCIC 0x18000000 /* MR-SHPC-01 PCMCIA */ ++ ++#define PA_DIPSW0 0xb9000000 /* Dip switch 5,6 */ ++#define PA_DIPSW1 0xb9000002 /* Dip switch 7,8 */ ++#define PA_LED 0xba000000 /* LED */ ++#define PA_BCR 0xbb000000 /* FPGA on the MS7751SE01 */ ++ ++#define PA_MRSHPC 0xb83fffe0 /* MR-SHPC-01 PCMCIA controler */ ++#define PA_MRSHPC_MW1 0xb8400000 /* MR-SHPC-01 memory window base */ ++#define PA_MRSHPC_MW2 0xb8500000 /* MR-SHPC-01 attribute window base */ ++#define PA_MRSHPC_IO 0xb8600000 /* MR-SHPC-01 I/O window base */ ++#define MRSHPC_MODE (PA_MRSHPC + 4) ++#define MRSHPC_OPTION (PA_MRSHPC + 6) ++#define MRSHPC_CSR (PA_MRSHPC + 8) ++#define MRSHPC_ISR (PA_MRSHPC + 10) ++#define MRSHPC_ICR (PA_MRSHPC + 12) ++#define MRSHPC_CPWCR (PA_MRSHPC + 14) ++#define MRSHPC_MW0CR1 (PA_MRSHPC + 16) ++#define MRSHPC_MW1CR1 (PA_MRSHPC + 18) ++#define MRSHPC_IOWCR1 (PA_MRSHPC + 20) ++#define MRSHPC_MW0CR2 (PA_MRSHPC + 22) ++#define MRSHPC_MW1CR2 (PA_MRSHPC + 24) ++#define MRSHPC_IOWCR2 (PA_MRSHPC + 26) ++#define MRSHPC_CDCR (PA_MRSHPC + 28) ++#define MRSHPC_PCIC_INFO (PA_MRSHPC + 30) ++ ++#define BCR_ILCRA (PA_BCR + 0) ++#define BCR_ILCRB (PA_BCR + 2) ++#define BCR_ILCRC (PA_BCR + 4) ++#define BCR_ILCRD (PA_BCR + 6) ++#define BCR_ILCRE (PA_BCR + 8) ++#define BCR_ILCRF (PA_BCR + 10) ++#define BCR_ILCRG (PA_BCR + 12) ++ ++#define IRQ_79C973 13 ++ ++#define __IO_PREFIX sh7751systemh ++#include <asm/io_generic.h> ++ ++#endif /* __ASM_SH_SYSTEMH_7751SYSTEMH_H */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/thread_info.h linux-2.6.17/include/asm-sh/thread_info.h +--- linux-2.6.17-vanilla/include/asm-sh/thread_info.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/thread_info.h 2006-07-12 16:54:26.000000000 +0000 +@@ -20,7 +20,8 @@ + struct exec_domain *exec_domain; /* execution domain */ + unsigned long flags; /* low level flags */ + __u32 cpu; +- int preempt_count; /* 0 => preemptable, <0 => BUG */ ++ int preempt_count; /* 0 => preemptable, <0 => BUG */ ++ mm_segment_t addr_limit; /* thread address space */ + struct restart_block restart_block; + __u8 supervisor_stack[0]; + }; +@@ -40,6 +41,7 @@ + .flags = 0, \ + .cpu = 0, \ + .preempt_count = 1, \ ++ .addr_limit = KERNEL_DS, \ + .restart_block = { \ + .fn = do_no_restart_syscall, \ + }, \ +@@ -48,16 +50,29 @@ + #define init_thread_info (init_thread_union.thread_info) + #define init_stack (init_thread_union.stack) + ++#define THREAD_SIZE (2*PAGE_SIZE) ++ + /* how to get the thread information struct from C */ + static inline struct thread_info *current_thread_info(void) + { + struct thread_info *ti; ++#ifdef CONFIG_CPU_HAS_SR_RB + __asm__("stc r7_bank, %0" : "=r" (ti)); ++#else ++ unsigned long __dummy; ++ ++ __asm__ __volatile__ ( ++ "mov r15, %0\n\t" ++ "and %1, %0\n\t" ++ : "=&r" (ti), "=r" (__dummy) ++ : "1" (~(THREAD_SIZE - 1)) ++ : "memory"); ++#endif ++ + return ti; + } + + /* thread information allocation */ +-#define THREAD_SIZE (2*PAGE_SIZE) + #define alloc_thread_info(ti) ((struct thread_info *) __get_free_pages(GFP_KERNEL,1)) + #define free_thread_info(ti) free_pages((unsigned long) (ti), 1) + +@@ -65,7 +80,7 @@ + + /* how to get the thread information struct from ASM */ + #define GET_THREAD_INFO(reg) \ +- stc r7_bank, reg ++ stc r7_bank, reg + + #endif + +@@ -82,7 +97,6 @@ + #define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */ + #define TIF_POLLING_NRFLAG 17 /* true if poll_idle() is polling TIF_NEED_RESCHED */ + #define TIF_MEMDIE 18 +-#define TIF_USERSPACE 31 /* true if FS sets userspace */ + + #define _TIF_SYSCALL_TRACE (1<<TIF_SYSCALL_TRACE) + #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) +@@ -90,7 +104,6 @@ + #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) + #define _TIF_USEDFPU (1<<TIF_USEDFPU) + #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) +-#define _TIF_USERSPACE (1<<TIF_USERSPACE) + + #define _TIF_WORK_MASK 0x000000FE /* work to do on interrupt/exception return */ + #define _TIF_ALLWORK_MASK 0x000000FF /* work to do on any return to u-space */ +diff -ruN linux-2.6.17-vanilla/include/asm-sh/timer.h linux-2.6.17/include/asm-sh/timer.h +--- linux-2.6.17-vanilla/include/asm-sh/timer.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/timer.h 2006-07-12 16:54:26.000000000 +0000 +@@ -6,6 +6,8 @@ + + struct sys_timer_ops { + int (*init)(void); ++ int (*start)(void); ++ int (*stop)(void); + unsigned long (*get_offset)(void); + unsigned long (*get_frequency)(void); + }; +diff -ruN linux-2.6.17-vanilla/include/asm-sh/timex.h linux-2.6.17/include/asm-sh/timex.h +--- linux-2.6.17-vanilla/include/asm-sh/timex.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/timex.h 2006-07-12 16:54:26.000000000 +0000 +@@ -6,7 +6,7 @@ + #ifndef __ASM_SH_TIMEX_H + #define __ASM_SH_TIMEX_H + +-#define CLOCK_TICK_RATE (CONFIG_SH_PCLK_FREQ / 4) /* Underlying HZ */ ++#define CLOCK_TICK_RATE (HZ * 100000UL) + + typedef unsigned long long cycles_t; + +diff -ruN linux-2.6.17-vanilla/include/asm-sh/titan.h linux-2.6.17/include/asm-sh/titan.h +--- linux-2.6.17-vanilla/include/asm-sh/titan.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/titan.h 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1,43 @@ ++/* ++ * Platform defintions for Titan ++ */ ++ ++#ifndef _ASM_SH_TITAN_TITAN_H ++#define _ASM_SH_TITAN_TITAN_H ++ ++#define __IO_PREFIX titan ++#include <asm/io_generic.h> ++ ++/* IRQ assignments */ ++#define TITAN_IRQ_WAN 2 /* eth0 (WAN) */ ++#define TITAN_IRQ_LAN 5 /* eth1 (LAN) */ ++#define TITAN_IRQ_MPCIA 8 /* mPCI A */ ++#define TITAN_IRQ_MPCIB 11 /* mPCI B */ ++#define TITAN_IRQ_USB 11 /* USB */ ++ ++/* ++ * The external interrupt lines, these take up ints 0 - 15 inclusive ++ * depending on the priority for the interrupt. In fact the priority ++ * is the interrupt :-) ++ */ ++#define IRL0_IRQ 0 ++#define IRL0_IPR_ADDR INTC_IPRD ++#define IRL0_IPR_POS 3 ++#define IRL0_PRIORITY 8 ++ ++#define IRL1_IRQ 1 ++#define IRL1_IPR_ADDR INTC_IPRD ++#define IRL1_IPR_POS 2 ++#define IRL1_PRIORITY 8 ++ ++#define IRL2_IRQ 2 ++#define IRL2_IPR_ADDR INTC_IPRD ++#define IRL2_IPR_POS 1 ++#define IRL2_PRIORITY 8 ++ ++#define IRL3_IRQ 3 ++#define IRL3_IPR_ADDR INTC_IPRD ++#define IRL3_IPR_POS 0 ++#define IRL3_PRIORITY 8 ++ ++#endif +diff -ruN linux-2.6.17-vanilla/include/asm-sh/uaccess.h linux-2.6.17/include/asm-sh/uaccess.h +--- linux-2.6.17-vanilla/include/asm-sh/uaccess.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/uaccess.h 2006-07-12 16:54:26.000000000 +0000 +@@ -1,5 +1,4 @@ +-/* $Id: uaccess.h,v 1.11 2003/10/13 07:21:20 lethal Exp $ +- * ++/* + * User space memory access functions + * + * Copyright (C) 1999, 2002 Niibe Yutaka +@@ -16,21 +15,9 @@ + #include <linux/errno.h> + #include <linux/sched.h> + +-/* +- * NOTE: Macro/functions in this file depends on threads_info.h implementation. +- * Assumes: +- * TI_FLAGS == 8 +- * TIF_USERSPACE == 31 +- * USER_ADDR_LIMIT == 0x80000000 +- */ +- + #define VERIFY_READ 0 + #define VERIFY_WRITE 1 + +-typedef struct { +- unsigned int is_user_space; +-} mm_segment_t; +- + /* + * The fs value determines whether argument validity checking should be + * performed or not. If get_fs() == USER_DS, checking is performed, with +@@ -40,12 +27,14 @@ + */ + + #define MAKE_MM_SEG(s) ((mm_segment_t) { (s) }) +-#define segment_eq(a,b) ((a).is_user_space == (b).is_user_space) + +-#define USER_ADDR_LIMIT 0x80000000 ++#define KERNEL_DS MAKE_MM_SEG(0xFFFFFFFFUL) ++#define USER_DS MAKE_MM_SEG(PAGE_OFFSET) + +-#define KERNEL_DS MAKE_MM_SEG(0) +-#define USER_DS MAKE_MM_SEG(1) ++#define segment_eq(a,b) ((a).seg == (b).seg) ++ ++#define __addr_ok(addr) \ ++ ((unsigned long)(addr) < (current_thread_info()->addr_limit.seg)) + + #define get_ds() (KERNEL_DS) + +@@ -76,31 +65,8 @@ + return ((addr >= memory_start) && ((addr + size) < memory_end)); + } + #else /* CONFIG_MMU */ +-static inline mm_segment_t get_fs(void) +-{ +- return MAKE_MM_SEG(test_thread_flag(TIF_USERSPACE)); +-} +- +-static inline void set_fs(mm_segment_t s) +-{ +- unsigned long ti, flag; +- __asm__ __volatile__( +- "stc r7_bank, %0\n\t" +- "mov.l @(8,%0), %1\n\t" +- "shal %1\n\t" +- "cmp/pl %2\n\t" +- "rotcr %1\n\t" +- "mov.l %1, @(8,%0)" +- : "=&r" (ti), "=&r" (flag) +- : "r" (s.is_user_space) +- : "t"); +-/**** +- if (s.is_user_space) +- set_thread_flag(TIF_USERSPACE); +- else +- clear_thread_flag(TIF_USERSPACE); +-****/ +-} ++#define get_fs() (current_thread_info()->addr_limit) ++#define set_fs(x) (current_thread_info()->addr_limit = (x)) + + /* + * __access_ok: Check if address with size is OK or not. +@@ -108,7 +74,7 @@ + * We do three checks: + * (1) is it user space? + * (2) addr + size --> carry? +- * (3) addr + size >= 0x80000000 (USER_ADDR_LIMIT) ++ * (3) addr + size >= 0x80000000 (PAGE_OFFSET) + * + * (1) (2) (3) | RESULT + * 0 0 0 | ok +@@ -541,7 +507,7 @@ + "3:\n\t" + "mov.l 4f, %1\n\t" + "jmp @%1\n\t" +- " mov %5, %0\n" ++ " mov #0, %0\n" + ".balign 4\n" + "4: .long 2b\n" + ".previous\n" +@@ -550,26 +516,20 @@ + " .long 1b,3b\n" + ".previous" + : "=z" (res), "=&r" (__dummy) +- : "0" (0), "r" (__s), "r" (__n), "i" (-EFAULT) ++ : "0" (0), "r" (__s), "r" (__n) + : "t"); + return res; + } + + static __inline__ long strnlen_user(const char __user *s, long n) + { +- if (!access_ok(VERIFY_READ, s, n)) ++ if (!__addr_ok(s)) + return 0; + else + return __strnlen_user(s, n); + } + +-static __inline__ long strlen_user(const char __user *s) +-{ +- if (!access_ok(VERIFY_READ, s, 0)) +- return 0; +- else +- return __strnlen_user(s, ~0UL >> 1); +-} ++#define strlen_user(str) strnlen_user(str, ~0UL >> 1) + + /* + * The exception table consists of pairs of addresses: the first is the +diff -ruN linux-2.6.17-vanilla/include/asm-sh/unistd.h linux-2.6.17/include/asm-sh/unistd.h +--- linux-2.6.17-vanilla/include/asm-sh/unistd.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/asm-sh/unistd.h 2006-07-12 16:54:26.000000000 +0000 +@@ -300,9 +300,31 @@ + #define __NR_inotify_init 290 + #define __NR_inotify_add_watch 291 + #define __NR_inotify_rm_watch 292 ++#define __NR_migrate_pages 293 ++#define __NR_openat 294 ++#define __NR_mkdirat 295 ++#define __NR_mknodat 296 ++#define __NR_fchownat 297 ++#define __NR_futimesat 298 ++#define __NR_fstatat64 299 ++#define __NR_unlinkat 300 ++#define __NR_renameat 301 ++#define __NR_linkat 302 ++#define __NR_symlinkat 303 ++#define __NR_readlinkat 304 ++#define __NR_fchmodat 305 ++#define __NR_faccessat 305 ++#define __NR_pselect6 307 ++#define __NR_ppoll 308 ++#define __NR_unshare 309 ++#define __NR_set_robust_list 310 ++#define __NR_get_robust_list 311 ++#define __NR_splice 312 ++#define __NR_sync_file_range 313 ++#define __NR_tee 314 ++#define __NR_vmsplice 315 + +- +-#define NR_syscalls 293 ++#define NR_syscalls 316 + + /* user-visible error numbers are in the range -1 - -124: see <asm-sh/errno.h> */ + +diff -ruN linux-2.6.17-vanilla/include/linux/CVS/Entries linux-2.6.17/include/linux/CVS/Entries +--- linux-2.6.17-vanilla/include/linux/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/linux/CVS/Entries 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,3 @@ ++/superhyway.h/1.2/Thu Mar 17 07:43:07 2005/-ko/ ++/i2c-id.h/1.11/Wed Jul 5 14:51:55 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/include/linux/CVS/Repository linux-2.6.17/include/linux/CVS/Repository +--- linux-2.6.17-vanilla/include/linux/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/linux/CVS/Repository 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/linux +diff -ruN linux-2.6.17-vanilla/include/linux/CVS/Root linux-2.6.17/include/linux/CVS/Root +--- linux-2.6.17-vanilla/include/linux/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/linux/CVS/Root 2006-07-12 16:54:26.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/linux/i2c-id.h linux-2.6.17/include/linux/i2c-id.h +--- linux-2.6.17-vanilla/include/linux/i2c-id.h 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/include/linux/i2c-id.h 2006-07-12 16:54:27.000000000 +0000 +@@ -245,6 +245,7 @@ + #define I2C_HW_SMBUS_OV518 0x04000f /* OV518(+) USB 1.1 webcam ICs */ + #define I2C_HW_SMBUS_OV519 0x040010 /* OV519 USB 1.1 webcam IC */ + #define I2C_HW_SMBUS_OVFX2 0x040011 /* Cypress/OmniVision FX2 webcam */ ++#define I2C_HW_SMBUS_VOYAGER 0x040012 + + /* --- ISA pseudo-adapter */ + #define I2C_HW_ISA 0x050000 +diff -ruN linux-2.6.17-vanilla/include/video/CVS/Entries linux-2.6.17/include/video/CVS/Entries +--- linux-2.6.17-vanilla/include/video/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/video/CVS/Entries 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,2 @@ ++/voyager.h/1.1/Wed Apr 21 00:09:20 2004/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/include/video/CVS/Repository linux-2.6.17/include/video/CVS/Repository +--- linux-2.6.17-vanilla/include/video/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/video/CVS/Repository 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++linux/include/video +diff -ruN linux-2.6.17-vanilla/include/video/CVS/Root linux-2.6.17/include/video/CVS/Root +--- linux-2.6.17-vanilla/include/video/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/video/CVS/Root 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/include/video/voyager.h linux-2.6.17/include/video/voyager.h +--- linux-2.6.17-vanilla/include/video/voyager.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/include/video/voyager.h 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,39 @@ ++#define VOY_REG_TOP 0xb3e00000 //voyager register ++#define VOY_VRAM_TOP0 0xb0400000 //PANEL PLANE ++#define VOY_VRAM_TOP1 0xb04a0000 //VIDEO PLANE 0 ++#define VOY_VRAM_TOP2 0xb0540000 //VIDEO PLANE 1 ++#define VOY_VRAM_TOP3 0xb05e0000 //VIDEO ALPHA PLANE ++#define VOY_VRAM_TOP4 0xb0680000 //ALPHA PLANE ++#define VOY_VRAM_TOP5 0xb0720000 //PANEL CURSOR PLANE ++#define VOY_VRAM_TOP6 0xb0730000 //CRT PLANE ++#define VOY_VRAM_TOP7 0xb07d0000 //CRT CURSOR PLANE ++ ++#define XRES 640 ++#define YRES 480 ++#define BPP 16 ++ ++#define CSR_XRES 64 ++#define CSR_YRES 64 ++#define CSR_BPP 2 ++ ++#define MAX_PIXEL_MEM_SIZE ((XRES * YRES * BPP) / 8) ++#define LINE_LENGTH ((XRES * BPP) / 8) ++#define MAX_FRAMEBUFFER_MEM_SIZE (MAX_PIXEL_MEM_SIZE) ++#define MAX_HWC_MEM_SIZE ((CSR_XRES * CSR_YRES * CSR_BPP) / 8) ++#define ALLOCATED_FB_MEM_SIZE \ ++ (PAGE_ALIGN(MAX_FRAMEBUFFER_MEM_SIZE + PAGE_SIZE)) ++ ++#define VOYAGER_IOCTL_DEBUG_ADD 0x00 ++#define VOYAGER_IOCTL_DEBUG_GET 0x01 ++#define VOYAGER_IOCTL_DEBUG_PUT 0x02 ++#define VOYAGER_IOCTL_ENABLE 0x10 ++#define VOYAGER_IOCTL_ENABLE_CK 0x11 ++#define VOYAGER_IOCTL_ENABLE_CP 0x12 ++#define VOYAGER_IOCTL_ENABLE_AL 0x13 ++#define VOYAGER_IOCTL_SCALE 0x20 ++#define VOYAGER_IOCTL_CHKEY 0x30 ++#define VOYAGER_IOCTL_COLOR_1 0x40 ++#define VOYAGER_IOCTL_COLOR_2 0x41 ++#define VOYAGER_IOCTL_TYPE 0x50 ++#define VOYAGER_IOCTL_SELECT 0x51 ++#define VOYAGER_IOCTL_ALPHA 0x60 +diff -ruN linux-2.6.17-vanilla/lib/CVS/Entries linux-2.6.17/lib/CVS/Entries +--- linux-2.6.17-vanilla/lib/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/lib/CVS/Entries 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,3 @@ ++/Kconfig.debug/1.4/Wed Jul 5 14:51:56 2006/-ko/ ++/bitmap.c/1.5/Wed Jul 5 14:51:56 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/lib/CVS/Repository linux-2.6.17/lib/CVS/Repository +--- linux-2.6.17-vanilla/lib/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/lib/CVS/Repository 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++linux/lib +diff -ruN linux-2.6.17-vanilla/lib/CVS/Root linux-2.6.17/lib/CVS/Root +--- linux-2.6.17-vanilla/lib/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/lib/CVS/Root 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/lib/Kconfig.debug linux-2.6.17/lib/Kconfig.debug +--- linux-2.6.17-vanilla/lib/Kconfig.debug 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/lib/Kconfig.debug 2006-07-12 16:54:27.000000000 +0000 +@@ -178,7 +178,7 @@ + + config FRAME_POINTER + bool "Compile the kernel with frame pointers" +- depends on DEBUG_KERNEL && (X86 || CRIS || M68K || M68KNOMMU || FRV || UML) ++ depends on DEBUG_KERNEL && (X86 || CRIS || M68K || M68KNOMMU || FRV || UML || SUPERH) + default y if DEBUG_INFO && UML + help + If you say Y here the resulting kernel image will be slightly larger +diff -ruN linux-2.6.17-vanilla/lib/bitmap.c linux-2.6.17/lib/bitmap.c +--- linux-2.6.17-vanilla/lib/bitmap.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/lib/bitmap.c 2006-07-12 16:54:27.000000000 +0000 +@@ -525,7 +525,7 @@ + ord = 0; + while (i < pos) { + i = find_next_bit(buf, bits, i + 1); +- ord++; ++ ord++; + } + BUG_ON(i != pos); + +@@ -748,6 +748,11 @@ + * a power (@order) of two, aligned to that power of two, which + * makes the search algorithm much faster. + * ++ * Find a region of free (zero) bits in a @bitmap of @bits bits and ++ * allocate them (set them to one). Only consider regions of length ++ * a power (@order) of two, aligned to that power of two, which ++ * makes the search algorithm much faster. ++ * + * Return the bit offset in bitmap of the allocated region, + * or -errno on failure. + */ +diff -ruN linux-2.6.17-vanilla/mm/CVS/Entries linux-2.6.17/mm/CVS/Entries +--- linux-2.6.17-vanilla/mm/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/mm/CVS/Entries 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,2 @@ ++/memory.c/1.66/Wed Jul 5 14:51:57 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/mm/CVS/Repository linux-2.6.17/mm/CVS/Repository +--- linux-2.6.17-vanilla/mm/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/mm/CVS/Repository 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++linux/mm +diff -ruN linux-2.6.17-vanilla/mm/CVS/Root linux-2.6.17/mm/CVS/Root +--- linux-2.6.17-vanilla/mm/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/mm/CVS/Root 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/mm/memory.c linux-2.6.17/mm/memory.c +--- linux-2.6.17-vanilla/mm/memory.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/mm/memory.c 2006-07-12 16:54:27.000000000 +0000 +@@ -1455,7 +1455,9 @@ + int reuse = can_share_swap_page(old_page); + unlock_page(old_page); + if (reuse) { ++#ifdef CONFIG_ARM + flush_cache_page(vma, address, pte_pfn(orig_pte)); ++#endif + entry = pte_mkyoung(orig_pte); + entry = maybe_mkwrite(pte_mkdirty(entry), vma); + ptep_set_access_flags(vma, address, page_table, entry, 1); +diff -ruN linux-2.6.17-vanilla/net/CVS/Entries linux-2.6.17/net/CVS/Entries +--- linux-2.6.17-vanilla/net/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/net/CVS/Entries 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++D/ipv4//// +diff -ruN linux-2.6.17-vanilla/net/CVS/Repository linux-2.6.17/net/CVS/Repository +--- linux-2.6.17-vanilla/net/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/net/CVS/Repository 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++linux/net +diff -ruN linux-2.6.17-vanilla/net/CVS/Root linux-2.6.17/net/CVS/Root +--- linux-2.6.17-vanilla/net/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/net/CVS/Root 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/net/ipv4/CVS/Entries linux-2.6.17/net/ipv4/CVS/Entries +--- linux-2.6.17-vanilla/net/ipv4/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/net/ipv4/CVS/Entries 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,2 @@ ++/ipconfig.c/1.12/Wed Jul 5 14:51:59 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/net/ipv4/CVS/Repository linux-2.6.17/net/ipv4/CVS/Repository +--- linux-2.6.17-vanilla/net/ipv4/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/net/ipv4/CVS/Repository 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++linux/net/ipv4 +diff -ruN linux-2.6.17-vanilla/net/ipv4/CVS/Root linux-2.6.17/net/ipv4/CVS/Root +--- linux-2.6.17-vanilla/net/ipv4/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/net/ipv4/CVS/Root 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/net/ipv4/ipconfig.c linux-2.6.17/net/ipv4/ipconfig.c +--- linux-2.6.17-vanilla/net/ipv4/ipconfig.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/net/ipv4/ipconfig.c 2006-07-12 16:54:27.000000000 +0000 +@@ -113,7 +113,7 @@ + */ + int ic_set_manually __initdata = 0; /* IPconfig parameters set manually */ + +-static int ic_enable __initdata = 0; /* IP config enabled? */ ++static int ic_enable __initdata = 1; /* IP config enabled? */ + + /* Protocol choice */ + int ic_proto_enabled __initdata = 0 +diff -ruN linux-2.6.17-vanilla/scripts/CVS/Entries linux-2.6.17/scripts/CVS/Entries +--- linux-2.6.17-vanilla/scripts/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/scripts/CVS/Entries 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,3 @@ ++/treelink.sh/1.3/Sun Jan 4 18:30:15 2004// ++/treeunlink.sh/1.3/Sun Jan 4 18:30:15 2004// ++D +diff -ruN linux-2.6.17-vanilla/scripts/CVS/Repository linux-2.6.17/scripts/CVS/Repository +--- linux-2.6.17-vanilla/scripts/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/scripts/CVS/Repository 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++linux/scripts +diff -ruN linux-2.6.17-vanilla/scripts/CVS/Root linux-2.6.17/scripts/CVS/Root +--- linux-2.6.17-vanilla/scripts/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/scripts/CVS/Root 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/scripts/treelink.sh linux-2.6.17/scripts/treelink.sh +--- linux-2.6.17-vanilla/scripts/treelink.sh 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/scripts/treelink.sh 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,49 @@ ++#!/bin/sh ++# ++# treelink.sh - Tree Linking Script ++# ++# Copyright (C) 2001, 2004 Paul Mundt <lethal@linux-sh.org> ++# ++# Modified by M. R. Brown <mrbrown@0xd6.org> ++# ++# A simple shell script for linking a drop in tree into a stock ++# kernel tree. Usable for drop in trees such as the linux-mips ++# and linuxconsole trees. ++# ++# Released under the terms of the GNU GPL v2 ++# ++[ "$#" -ne "2" ] && echo "Usage: $0 <drop in tree> <kernel tree>" && exit 1 ++ ++ODIR=${PWD} ++cd $1 || exit 1 ++LDIR=${PWD} ++echo -n "Building file list ... " ++LIST=`find * \( -type d -name CVS -prune \) -o \ ++ \( -type d -name {arch} -prune \) -o \ ++ \( -type d -name .arch-ids -prune \) -o \ ++ \( -type d -name SCCS -prune \) -o \ ++ \( -type d -name BitKeeper -prune \) -o -type f -print` ++echo -e "done." ++cd ${ODIR} ++ ++cd $2 || exit 1 ++ ++# Make this a seperate step so that the user can cancel the operation ++echo -n "Saving originals ..... " ++for file in $LIST; do ++ if [ -e $file -a ! -h $file ]; then ++ DIR=`dirname $file` ++ ofile=`basename $file` ++ [ ! -d ${DIR}/.orig ] && mkdir -p ${DIR}/.orig ++ cp $file ${DIR}/.orig/$ofile ++ fi ++done ++echo -e "done." ++ ++echo -n "Linking files ........ " ++for file in $LIST; do ++ DIR=`dirname $file` ++ [ ! -d $DIR ] && mkdir -p $DIR ++ ln -sf $LDIR/$file $file ++done ++echo -e "done." +diff -ruN linux-2.6.17-vanilla/scripts/treeunlink.sh linux-2.6.17/scripts/treeunlink.sh +--- linux-2.6.17-vanilla/scripts/treeunlink.sh 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/scripts/treeunlink.sh 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,37 @@ ++#!/bin/sh ++# ++# treeunlink.sh - Tree Unlinking Script ++# ++# Copyright (c) 2001 M. R. Brown <mrbrown@0xd6.org> ++# ++# Modified by Paul Mundt <lethal@linux-sh.org> ++# ++# This script attempts to restore a previously tree-linked tree. ++# It's the anti-thesis of (and based on) treelink.sh by Paul Mundt. ++# ++# Released under the terms of the GNU GPL v2 ++ ++[ "$#" -ne "1" ] && echo "Usage: $0 <kernel tree>" && exit 1 ++ ++cd $1 || exit 1 ++echo -n "Building file list ... " ++LIST=`find * \( -type d -name CVS -prune \) -o \ ++ \( -type d -name {arch} -prune \) -o \ ++ \( -type d -name .arch-ids -prune \) -o \ ++ \( -type d -name SCCS -prune \) -o \ ++ \( -type d -name BitKeeper -prune \) -o -type l -print` ++echo -e "done." ++ ++[ -z "$LIST" ] && echo "No linked files to unlink." && exit 1 ++ ++echo -n "Restoring originals .. " ++for file in $LIST; do ++ DIR=`dirname $file` ++ ofile=`basename $file` ++ rm -f $file ++ if [ -d ${DIR}/.orig -a -e ${DIR}/.orig/$ofile ]; then ++ mv ${DIR}/.orig/$ofile $file ++ [ -z "`ls ${DIR}/.orig`" ] && rmdir ${DIR}/.orig ++ fi ++done ++echo -e "done." +diff -ruN linux-2.6.17-vanilla/sound/CVS/Entries linux-2.6.17/sound/CVS/Entries +--- linux-2.6.17-vanilla/sound/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/CVS/Entries 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,4 @@ ++/Kconfig/1.1/Sun Jun 4 12:13:04 2006// ++/Makefile/1.1/Sun Jun 4 12:13:04 2006// ++D/oss//// ++D/sh//// +diff -ruN linux-2.6.17-vanilla/sound/CVS/Repository linux-2.6.17/sound/CVS/Repository +--- linux-2.6.17-vanilla/sound/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/CVS/Repository 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++linux/sound +diff -ruN linux-2.6.17-vanilla/sound/CVS/Root linux-2.6.17/sound/CVS/Root +--- linux-2.6.17-vanilla/sound/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/CVS/Root 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/sound/Kconfig linux-2.6.17/sound/Kconfig +--- linux-2.6.17-vanilla/sound/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/sound/Kconfig 2006-07-12 16:54:27.000000000 +0000 +@@ -62,6 +62,8 @@ + + source "sound/mips/Kconfig" + ++source "sound/sh/Kconfig" ++ + # the following will depenend on the order of config. + # here assuming USB is defined before ALSA + source "sound/usb/Kconfig" +diff -ruN linux-2.6.17-vanilla/sound/Makefile linux-2.6.17/sound/Makefile +--- linux-2.6.17-vanilla/sound/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/sound/Makefile 2006-07-12 16:54:27.000000000 +0000 +@@ -4,7 +4,7 @@ + obj-$(CONFIG_SOUND) += soundcore.o + obj-$(CONFIG_SOUND_PRIME) += oss/ + obj-$(CONFIG_DMASOUND) += oss/ +-obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ synth/ usb/ sparc/ parisc/ pcmcia/ mips/ ++obj-$(CONFIG_SND) += core/ i2c/ drivers/ isa/ pci/ ppc/ arm/ synth/ usb/ sparc/ parisc/ pcmcia/ mips/ sh/ + + ifeq ($(CONFIG_SND),y) + obj-y += last.o +diff -ruN linux-2.6.17-vanilla/sound/oss/CVS/Entries linux-2.6.17/sound/oss/CVS/Entries +--- linux-2.6.17-vanilla/sound/oss/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/oss/CVS/Entries 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,7 @@ ++/Makefile/1.7/Mon Aug 29 21:01:20 2005/-ko/ ++/voyagergx_8051.c/1.2/Sat Jun 26 15:29:38 2004/-ko/ ++/voyagergx_sound.c/1.4/Fri Dec 23 08:25:06 2005/-ko/ ++/voyagergx_sound.h/1.1/Wed Apr 21 00:09:21 2004/-ko/ ++/Kconfig/1.11/Wed Jul 5 14:52:00 2006/-ko/ ++/sh_dac_audio.c/1.7/Wed Jul 5 14:52:00 2006/-ko/ ++D +diff -ruN linux-2.6.17-vanilla/sound/oss/CVS/Repository linux-2.6.17/sound/oss/CVS/Repository +--- linux-2.6.17-vanilla/sound/oss/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/oss/CVS/Repository 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++linux/sound/oss +diff -ruN linux-2.6.17-vanilla/sound/oss/CVS/Root linux-2.6.17/sound/oss/CVS/Root +--- linux-2.6.17-vanilla/sound/oss/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/oss/CVS/Root 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/sound/oss/Kconfig linux-2.6.17/sound/oss/Kconfig +--- linux-2.6.17-vanilla/sound/oss/Kconfig 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/sound/oss/Kconfig 2006-07-12 16:54:27.000000000 +0000 +@@ -833,6 +833,12 @@ + tristate "XpressAudio Sound Blaster emulation" + depends on SOUND_SB + ++config SOUND_VOYAGERGX ++ tristate "VoyagerGX/SH4 AC97 support" ++ depends on SOUND_PRIME!=n && SOUND && SH_RTS7751R2D ++ help ++ Say Y or M if you have a VoyagerGX sound audio. ++ + config SOUND_SH_DAC_AUDIO + tristate "SuperH DAC audio support" + depends on SOUND_PRIME && CPU_SH3 +diff -ruN linux-2.6.17-vanilla/sound/oss/Makefile linux-2.6.17/sound/oss/Makefile +--- linux-2.6.17-vanilla/sound/oss/Makefile 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/sound/oss/Makefile 2006-07-12 16:54:27.000000000 +0000 +@@ -82,6 +82,7 @@ + + obj-$(CONFIG_SOUND_AD1980) += ac97_plugin_ad1980.o ac97_codec.o + obj-$(CONFIG_SOUND_WM97XX) += ac97_plugin_wm97xx.o ++obj-$(CONFIG_SOUND_VOYAGERGX) += voyagergx_sound.o voyagergx_8051.o ac97_codec.o + + ifeq ($(CONFIG_MIDI_EMU10K1),y) + obj-$(CONFIG_SOUND_EMU10K1) += sound.o +diff -ruN linux-2.6.17-vanilla/sound/oss/sh_dac_audio.c linux-2.6.17/sound/oss/sh_dac_audio.c +--- linux-2.6.17-vanilla/sound/oss/sh_dac_audio.c 2006-06-18 01:49:35.000000000 +0000 ++++ linux-2.6.17/sound/oss/sh_dac_audio.c 2006-07-12 16:54:27.000000000 +0000 +@@ -1,3 +1,14 @@ ++/* ++ * sound/oss/sh_dac_audio.c ++ * ++ * SH DAC based sound :( ++ * ++ * Copyright (C) 2004,2005 Andriy Skulysh ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file "COPYING" in the main directory of this archive ++ * for more details. ++ */ + #include <linux/config.h> + #include <linux/module.h> + #include <linux/init.h> +@@ -7,18 +18,17 @@ + #include <linux/fs.h> + #include <linux/sound.h> + #include <linux/soundcard.h> ++#include <linux/interrupt.h> + #include <asm/io.h> + #include <asm/uaccess.h> + #include <asm/irq.h> + #include <asm/delay.h> +-#include <linux/interrupt.h> +- ++#include <asm/clock.h> + #include <asm/cpu/dac.h> +- +-#ifdef MACH_HP600 ++#include <asm/cpu/timer.h> ++#include <asm/machvec.h> + #include <asm/hp6xx/hp6xx.h> +-#include <asm/hd64461/hd64461.h> +-#endif ++#include <asm/hd64461.h> + + #define MODNAME "sh_dac_audio" + +@@ -27,11 +37,6 @@ + #define TMU1_TCR_INIT 0x0020 /* Clock/4, rising edge; interrupt on */ + #define TMU1_TSTR_INIT 0x02 /* Bit to turn on TMU1 */ + +-#define TMU_TSTR 0xfffffe92 +-#define TMU1_TCOR 0xfffffea0 +-#define TMU1_TCNT 0xfffffea4 +-#define TMU1_TCR 0xfffffea8 +- + #define BUFFER_SIZE 48000 + + static int rate; +@@ -72,34 +77,37 @@ + + static void dac_audio_start(void) + { +-#ifdef MACH_HP600 +- u16 v; +- v = inw(HD64461_GPADR); +- v &= ~HD64461_GPADR_SPEAKER; +- outw(v, HD64461_GPADR); +-#endif ++ if (mach_is_hp6xx()) { ++ u16 v = inw(HD64461_GPADR); ++ v &= ~HD64461_GPADR_SPEAKER; ++ outw(v, HD64461_GPADR); ++ } ++ + sh_dac_enable(CONFIG_SOUND_SH_DAC_AUDIO_CHANNEL); + ctrl_outw(TMU1_TCR_INIT, TMU1_TCR); + } + static void dac_audio_stop(void) + { +-#ifdef MACH_HP600 +- u16 v; +-#endif + dac_audio_stop_timer(); +-#ifdef MACH_HP600 +- v = inw(HD64461_GPADR); +- v |= HD64461_GPADR_SPEAKER; +- outw(v, HD64461_GPADR); +-#endif ++ ++ if (mach_is_hp6xx()) { ++ u16 v = inw(HD64461_GPADR); ++ v |= HD64461_GPADR_SPEAKER; ++ outw(v, HD64461_GPADR); ++ } ++ ++ sh_dac_output(0, CONFIG_SOUND_SH_DAC_AUDIO_CHANNEL); + sh_dac_disable(CONFIG_SOUND_SH_DAC_AUDIO_CHANNEL); + } + + static void dac_audio_set_rate(void) + { + unsigned long interval; ++ struct clk *clk; + +- interval = (current_cpu_data.module_clock / 4) / rate; ++ clk = clk_get("module_clk"); ++ interval = (clk_get_rate(clk) / 4) / rate; ++ clk_put(clk); + ctrl_outl(interval, TMU1_TCOR); + ctrl_outl(interval, TMU1_TCNT); + } +diff -ruN linux-2.6.17-vanilla/sound/oss/voyagergx_8051.c linux-2.6.17/sound/oss/voyagergx_8051.c +--- linux-2.6.17-vanilla/sound/oss/voyagergx_8051.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/oss/voyagergx_8051.c 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,204 @@ ++#include <linux/module.h> ++#include <linux/delay.h> ++#include <asm/rts7751r2d/voyagergx_reg.h> ++#include "voyagergx_sound.h" ++ ++#define DELAY_8051 300000 ++ ++ ++static unsigned char code_8051[] = { ++ 0x02,0x01,0x00,0x02,0x07,0x73,0x90,0x08,0xae,0xe0,0xfa,0xa3,0xe0,0x8a,0x82,0xf5, ++ 0x83,0xe0,0x60,0x13,0x90,0x08,0xa2,0xe4,0xf0,0xa3,0x74,0x30,0xf0,0x78,0x19,0x76, ++ 0x01,0x78,0x1e,0x76,0x01,0x80,0x04,0x78,0x19,0x76,0x00,0x90,0x3f,0xf2,0x74,0x01, ++ 0xf0,0xa3,0xe4,0xf0,0x22,0xff,0xff,0xff,0xff,0xff,0xff,0x02,0x06,0x83,0xff,0xff, ++ 0xff,0xff,0xff,0x02,0x04,0xe3,0x90,0x3f,0xf2,0xe4,0xf0,0xa3,0xf0,0x90,0x3f,0xf0, ++ 0xe0,0x70,0x02,0xa3,0xe0,0x70,0x06,0x12,0x08,0x8d,0x02,0x00,0xd4,0x90,0x3f,0xf0, ++ 0xc3,0xe0,0x94,0x01,0x70,0x04,0xa3,0xe0,0x94,0x00,0x70,0x06,0x12,0x00,0xd9,0x02, ++ 0x00,0xd4,0x90,0x3f,0xf0,0xc3,0xe0,0x94,0x02,0x70,0x04,0xa3,0xe0,0x94,0x00,0x70, ++ 0x05,0x12,0x07,0xf3,0x80,0x4e,0x90,0x3f,0xf0,0xc3,0xe0,0x94,0x03,0x70,0x04,0xa3, ++ 0xe0,0x94,0x00,0x70,0x05,0x12,0x08,0x1a,0x80,0x3a,0x90,0x3f,0xf0,0xc3,0xe0,0x94, ++ 0x04,0x70,0x04,0xa3,0xe0,0x94,0x00,0x70,0x05,0x12,0x08,0x41,0x80,0x26,0x90,0x3f, ++ 0xf0,0xc3,0xe0,0x94,0x05,0x70,0x04,0xa3,0xe0,0x94,0x00,0x70,0x05,0x12,0x08,0x7c, ++ 0x80,0x12,0x90,0x3f,0xf0,0xc3,0xe0,0x94,0x07,0x70,0x04,0xa3,0xe0,0x94,0x00,0x70, ++ 0x03,0x12,0x00,0x06,0x78,0x1b,0x76,0x00,0x22,0x90,0x3f,0xf4,0x7a,0x04,0x78,0x08, ++ 0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90,0x91,0x04,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3, ++ 0x08,0xda,0xfa,0x12,0x06,0xd6,0x90,0x3f,0xf2,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x22, ++ 0x75,0x81,0x2b,0x75,0x0c,0xc0,0x75,0x0d,0x08,0x75,0x0e,0xff,0x75,0x0f,0x2f,0xc2, ++ 0xd3,0xc2,0xd4,0x12,0x03,0x4a,0x12,0x03,0xb6,0x12,0x03,0x2c,0x12,0x03,0x0e,0x12, ++ 0x02,0xac,0x12,0x07,0xcb,0x12,0x01,0x2a,0x01,0x00,0x90,0x08,0xc1,0x85,0x82,0x0a, ++ 0x85,0x83,0x0b,0x74,0x98,0xf5,0x82,0xf5,0x08,0x74,0x02,0xf5,0x83,0xf5,0x09,0x7a, ++ 0x14,0xe4,0x93,0xa3,0x85,0x82,0x08,0x85,0x83,0x09,0x85,0x0a,0x82,0x85,0x0b,0x83, ++ 0xf0,0xa3,0x85,0x83,0x0b,0x85,0x82,0x0a,0x85,0x09,0x83,0x85,0x08,0x82,0xda,0xe1, ++ 0x90,0x08,0xd5,0xe4,0xf0,0xa3,0xf0,0x90,0x08,0xd7,0xe4,0xf0,0xa3,0xf0,0x90,0x08, ++ 0xd9,0xe4,0xf0,0xa3,0xf0,0x90,0x08,0xdb,0xe4,0xf0,0xa3,0xf0,0x78,0x18,0x76,0x00, ++ 0x78,0x1f,0x76,0x00,0x90,0x91,0x80,0x74,0x03,0xf0,0x90,0x08,0xc1,0x7a,0x04,0x78, ++ 0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90,0x91,0x00,0x7a,0x04,0x78,0x08,0xe6,0xf0, ++ 0xa3,0x08,0xda,0xfa,0x90,0x08,0xc5,0x7a,0x04,0x78,0x08,0xe0,0xf6,0xa3,0x08,0xda, ++ 0xfa,0x90,0x91,0x04,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x90,0x08, ++ 0xc9,0x7a,0x04,0x78,0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90,0x91,0x08,0x7a,0x04, ++ 0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x90,0x08,0xcd,0x7a,0x04,0x78,0x08,0xe0, ++ 0xf6,0xa3,0x08,0xda,0xfa,0x90,0x91,0x0c,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08, ++ 0xda,0xfa,0x90,0x08,0xd1,0x7a,0x04,0x78,0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90, ++ 0x91,0x10,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x90,0x91,0x40,0xe4, ++ 0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x90,0x91,0x44,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0, ++ 0xa3,0xf0,0x90,0x91,0x48,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x43,0xa0,0x01, ++ 0x90,0x08,0xdd,0xe4,0xf0,0xa3,0xf0,0x12,0x06,0x2f,0x90,0x08,0xdd,0x74,0xc8,0xf0, ++ 0xa3,0xe4,0xf0,0x12,0x05,0xd0,0x90,0x91,0x80,0x74,0x01,0xf0,0x90,0x08,0xdd,0x74, ++ 0xff,0xf0,0xa3,0xe4,0xf0,0x12,0x06,0x2f,0x90,0x08,0xdd,0x74,0x64,0xf0,0xa3,0xe4, ++ 0xf0,0x12,0x05,0xd0,0x12,0x07,0xa1,0x90,0x08,0xdd,0x74,0xff,0xf0,0xa3,0xe4,0xf0, ++ 0x12,0x06,0x2f,0x12,0x07,0xa1,0x12,0x07,0x28,0x12,0x07,0x28,0x78,0x1b,0xe6,0x60, ++ 0x03,0x12,0x00,0x46,0x78,0x1e,0xe6,0x60,0x07,0x78,0x1e,0x76,0x00,0x12,0x08,0x9b, ++ 0x80,0xea,0x90,0x91,0x80,0xe4,0xf0,0x22,0x00,0xf8,0x00,0x00,0x00,0x00,0x00,0x00, ++ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x74,0x14,0x70,0x04, ++ 0x74,0x00,0x60,0x1e,0x90,0x08,0x68,0xa8,0x83,0xa9,0x82,0x90,0x08,0xa2,0xaa,0x83, ++ 0xab,0x82,0x90,0x08,0xb6,0xac,0x83,0xad,0x82,0xc3,0xed,0x9b,0x70,0x28,0xec,0x9a, ++ 0x70,0x24,0x74,0x0a,0x70,0x04,0x74,0x00,0x60,0x1b,0x90,0x08,0xc0,0xac,0x83,0xad, ++ 0x82,0x90,0x08,0xb6,0xc3,0xed,0x95,0x82,0x70,0x05,0xec,0x95,0x83,0x60,0x06,0xe4, ++ 0xf0,0xa3,0x02,0x02,0xe4,0x22,0x88,0x83,0x89,0x82,0xe4,0x93,0xa3,0xa8,0x83,0xa9, ++ 0x82,0x8a,0x83,0x8b,0x82,0xf0,0xa3,0xaa,0x83,0xab,0x82,0x02,0x02,0xc9,0x74,0x00, ++ 0x60,0x0d,0x90,0x00,0x00,0x79,0x00,0xfa,0xe4,0x93,0xf7,0xa3,0x09,0xda,0xf9,0x74, ++ 0x13,0x60,0x08,0x78,0x18,0xfa,0xe4,0xf6,0x08,0xda,0xfc,0x22,0x74,0x00,0x60,0x0d, ++ 0x90,0x00,0x00,0x79,0x00,0xfa,0xe4,0x93,0xf7,0xa3,0x09,0xda,0xf9,0x74,0x00,0x60, ++ 0x08,0x78,0x00,0xfa,0xe4,0xf6,0x08,0xda,0xfc,0x22,0x74,0x00,0x60,0x35,0xfb,0x90, ++ 0x00,0x00,0x74,0x00,0x75,0xf0,0x08,0x84,0x24,0x20,0xf8,0x7a,0x08,0xe5,0xf0,0x60, ++ 0x07,0xe6,0x03,0x1a,0xd5,0xf0,0xfb,0xf6,0xeb,0x60,0x0d,0x1b,0xe4,0x93,0xa3,0xa2, ++ 0xe0,0xe6,0x13,0xf6,0xda,0xf2,0x80,0x05,0xe6,0x03,0xda,0xfd,0xf6,0x08,0x7a,0x08, ++ 0xeb,0x70,0xe5,0x74,0x00,0x60,0x2e,0xfb,0x74,0x00,0x75,0xf0,0x08,0x84,0x24,0x20, ++ 0xf8,0x7a,0x08,0xe5,0xf0,0x60,0x07,0xe6,0x03,0x1a,0xd5,0xf0,0xfb,0xf6,0xeb,0x60, ++ 0x09,0x1b,0xc3,0xe6,0x13,0xf6,0xda,0xf6,0x80,0x05,0xe6,0x03,0xda,0xfd,0xf6,0x08, ++ 0x7a,0x08,0xeb,0x70,0xe9,0x22,0x74,0x00,0x60,0x0d,0x90,0x00,0x00,0x79,0x00,0xfa, ++ 0xe4,0x93,0xf7,0xa3,0x09,0xda,0xf9,0x74,0x00,0x60,0x08,0x78,0x00,0xfa,0xe4,0xf6, ++ 0x08,0xda,0xfc,0x22,0x90,0x08,0xdd,0xe4,0xf0,0xa3,0xf0,0x90,0x08,0xdd,0xc3,0xe0, ++ 0x94,0x40,0xa3,0xe0,0x94,0x00,0x30,0xd2,0x04,0xb2,0xe7,0xd2,0xe0,0x20,0xe7,0x03, ++ 0x02,0x04,0xdf,0x90,0x08,0xdd,0xe0,0xf5,0x08,0xa3,0xe0,0xf5,0x09,0x7a,0x0c,0xe5, ++ 0x08,0xc3,0x33,0xf5,0x08,0xe5,0x09,0x33,0xf5,0x09,0xda,0xf3,0xe5,0x09,0x33,0xe4, ++ 0x50,0x01,0x14,0xf5,0x0a,0xf5,0x0b,0xe5,0x08,0x44,0x00,0xf5,0x08,0xe5,0x09,0x44, ++ 0x00,0xf5,0x09,0xe5,0x0a,0x44,0x08,0xf5,0x0a,0xe5,0x0b,0x44,0x00,0xf5,0x0b,0x90, ++ 0x08,0xe1,0xe5,0x08,0xf0,0xa3,0xe5,0x09,0xf0,0x90,0x08,0xe1,0xe0,0xf5,0x08,0xa3, ++ 0xe0,0xf5,0x09,0x33,0xe4,0x50,0x01,0x14,0xf5,0x0a,0xf5,0x0b,0x90,0x91,0x04,0x7a, ++ 0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x90,0x08,0xdf,0xe4,0xf0,0xa3,0xf0, ++ 0x90,0x08,0xdf,0xc3,0xe0,0x94,0x80,0xa3,0xe0,0x94,0x38,0x30,0xd2,0x04,0xb2,0xe7, ++ 0xd2,0xe0,0x30,0xe7,0x5b,0x90,0x91,0x40,0xe0,0x54,0x00,0xf5,0x08,0xa3,0xe0,0x54, ++ 0xa0,0xf5,0x09,0xa3,0xe0,0x54,0x00,0xf5,0x0a,0xa3,0xe0,0x54,0x00,0xf5,0x0b,0x78, ++ 0x08,0xc3,0xe6,0x94,0x00,0x70,0x10,0x08,0xe6,0x94,0xa0,0x70,0x0a,0x08,0xe6,0x94, ++ 0x00,0x70,0x04,0x08,0xe6,0x94,0x00,0x70,0x19,0x90,0x91,0x48,0x7a,0x04,0x78,0x08, ++ 0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90,0x08,0xe1,0xe5,0x08,0xf0,0xa3,0xe5,0x09,0xf0, ++ 0x80,0x0e,0x90,0x08,0xdf,0xe0,0x24,0x01,0xf0,0xa3,0xe0,0x34,0x00,0xf0,0x80,0x90, ++ 0x90,0x08,0xdd,0xe0,0x24,0x01,0xf0,0xa3,0xe0,0x34,0x00,0xf0,0x02,0x03,0xdb,0x12, ++ 0x06,0xd6,0x22,0xc0,0xe0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0xc0,0x08,0xc0,0x09,0xc0, ++ 0x0a,0xc0,0x0b,0xc2,0xd3,0xd2,0xd4,0xc2,0xaf,0x53,0xa8,0xfe,0x53,0xe8,0xf9,0x78, ++ 0x19,0xe6,0x70,0x03,0x02,0x05,0xac,0x90,0x08,0xbe,0xc3,0xe0,0x94,0x01,0x70,0x04, ++ 0xa3,0xe0,0x94,0x00,0x60,0x03,0x02,0x05,0xac,0x78,0x1f,0xe6,0x70,0x37,0x90,0x08, ++ 0xa4,0xe0,0xfa,0xa3,0xe0,0x8a,0x82,0xf5,0x83,0xe0,0xf5,0x08,0xa3,0xe0,0xf5,0x09, ++ 0x33,0xe4,0x50,0x01,0x14,0xf5,0x0a,0xf5,0x0b,0x90,0x91,0x10,0x7a,0x04,0x78,0x08, ++ 0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x90,0x91,0x0c,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3, ++ 0x08,0xda,0xfa,0x80,0x54,0x90,0x08,0xa4,0xe0,0xfa,0xa3,0xe0,0x8a,0x82,0xf5,0x83, ++ 0xe0,0xf5,0x08,0xa3,0xe0,0xf5,0x09,0x33,0xe4,0x50,0x01,0x14,0xf5,0x0a,0xf5,0x0b, ++ 0x90,0x91,0x0c,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x90,0x08,0xa4, ++ 0xe0,0x24,0x02,0xfa,0xa3,0xe0,0x34,0x00,0xf5,0x83,0x8a,0x82,0xe0,0xf5,0x08,0xa3, ++ 0xe0,0xf5,0x09,0x33,0xe4,0x50,0x01,0x14,0xf5,0x0a,0xf5,0x0b,0x90,0x91,0x10,0x7a, ++ 0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x12,0x08,0x9b,0x90,0x91,0x81,0xe0, ++ 0x90,0x00,0x39,0xf0,0x43,0xe8,0x06,0x43,0xf8,0x04,0x43,0xa8,0x01,0xd2,0xaf,0xd0, ++ 0x0b,0xd0,0x0a,0xd0,0x09,0xd0,0x08,0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xe0,0x32, ++ 0x90,0x08,0xdf,0xe4,0xf0,0xa3,0xf0,0x90,0x08,0xdf,0xc3,0xe0,0x94,0xe8,0xa3,0xe0, ++ 0x94,0x03,0x30,0xd2,0x04,0xb2,0xe7,0xd2,0xe0,0x30,0xe7,0x42,0x90,0x08,0xe1,0xe4, ++ 0xf0,0xa3,0xf0,0x90,0x08,0xdd,0xe0,0xf5,0x08,0xa3,0xe0,0xf5,0x09,0x90,0x08,0xe1, ++ 0xc3,0xe0,0x95,0x08,0xa3,0xe0,0x95,0x09,0x30,0xd2,0x04,0xb2,0xe7,0xd2,0xe0,0x30, ++ 0xe7,0x0e,0x90,0x08,0xe1,0xe0,0x24,0x01,0xf0,0xa3,0xe0,0x34,0x00,0xf0,0x80,0xd3, ++ 0x90,0x08,0xdf,0xe0,0x24,0x01,0xf0,0xa3,0xe0,0x34,0x00,0xf0,0x80,0xa9,0x22,0x90, ++ 0x08,0xe1,0xe4,0xf0,0xa3,0x74,0x30,0xf0,0x90,0x08,0xdf,0xe4,0xf0,0xa3,0xf0,0x90, ++ 0x08,0xdf,0xc3,0xe0,0x94,0x00,0xa3,0xe0,0x94,0x06,0x30,0xd2,0x04,0xb2,0xe7,0xd2, ++ 0xe0,0x30,0xe7,0x2e,0x90,0x08,0xdd,0xe0,0x90,0x08,0xe1,0xc0,0xe0,0xe0,0xfa,0xa3, ++ 0xe0,0x8a,0x82,0xf5,0x83,0xd0,0xe0,0xf0,0x90,0x08,0xe1,0xe0,0x24,0x01,0xf0,0xa3, ++ 0xe0,0x34,0x00,0xf0,0x90,0x08,0xdf,0xe0,0x24,0x01,0xf0,0xa3,0xe0,0x34,0x00,0xf0, ++ 0x80,0xbd,0x22,0xc0,0xe0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0xc0,0x08,0xc0,0x09,0xc0, ++ 0x0a,0xc0,0x0b,0xc2,0xd3,0xd2,0xd4,0xc2,0xaf,0x53,0xa8,0xfe,0x53,0xe8,0xf9,0x78, ++ 0x1b,0x76,0x01,0x90,0x90,0x0c,0x7a,0x04,0x78,0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa, ++ 0x90,0x00,0x35,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x43,0xe8,0x06, ++ 0x43,0xa8,0x01,0xd2,0xaf,0xd0,0x0b,0xd0,0x0a,0xd0,0x09,0xd0,0x08,0xd0,0xd0,0xd0, ++ 0x83,0xd0,0x82,0xd0,0xe0,0x32,0x90,0x00,0x3e,0xe4,0xf0,0xa3,0xf0,0x90,0x00,0x3e, ++ 0xc3,0xe0,0x94,0x80,0xa3,0xe0,0x94,0x38,0x30,0xd2,0x04,0xb2,0xe7,0xd2,0xe0,0x30, ++ 0xe7,0x35,0x90,0x91,0x40,0xe0,0x54,0x00,0xf5,0x08,0xa3,0xe0,0x54,0x60,0xf5,0x09, ++ 0xa3,0xe0,0x54,0x00,0xf5,0x0a,0xa3,0xe0,0x54,0x00,0xf5,0x0b,0x78,0x08,0x7a,0x04, ++ 0xe6,0x70,0x03,0x08,0xda,0xfa,0x70,0x01,0x22,0x90,0x00,0x3e,0xe0,0x24,0x01,0xf0, ++ 0xa3,0xe0,0x34,0x00,0xf0,0x80,0xb6,0x22,0x90,0x3f,0xf0,0x74,0x0f,0xf0,0xa3,0xe4, ++ 0xf0,0x90,0x3f,0xf4,0xe4,0xf0,0xa3,0x74,0x60,0xf0,0xa3,0x74,0x0a,0xf0,0xa3,0xe4, ++ 0xf0,0x90,0x3f,0xf8,0xe4,0xf0,0xa3,0xf0,0xa3,0xf0,0xa3,0xf0,0x12,0x00,0x46,0x90, ++ 0x3f,0xf8,0xe0,0x54,0xf0,0xf5,0x08,0x7a,0x03,0x78,0x08,0xa3,0x08,0xe0,0x54,0x00, ++ 0xf6,0xda,0xf8,0x78,0x08,0x7a,0x04,0xe6,0x70,0x03,0x08,0xda,0xfa,0x60,0x01,0x22, ++ 0x80,0xb6,0x22,0xc0,0xe0,0xc0,0x82,0xc0,0x83,0xc0,0xd0,0xc2,0xd3,0xd2,0xd4,0xc2, ++ 0xaf,0x53,0xa8,0xfe,0x53,0xe8,0xf9,0x90,0x08,0xbe,0x74,0x01,0xf0,0xa3,0xe4,0xf0, ++ 0x43,0xe8,0x06,0x43,0xa8,0x01,0xd2,0xaf,0xd0,0xd0,0xd0,0x83,0xd0,0x82,0xd0,0xe0, ++ 0x32,0x90,0x91,0x40,0xe0,0x54,0x00,0xf5,0x08,0xa3,0xe0,0x54,0x80,0xf5,0x09,0xa3, ++ 0xe0,0x54,0x00,0xf5,0x0a,0xa3,0xe0,0x54,0x00,0xf5,0x0b,0x78,0x08,0x7a,0x04,0xe6, ++ 0x70,0x03,0x08,0xda,0xfa,0x60,0x01,0x22,0x80,0xd7,0x22,0x90,0x08,0xbe,0xe4,0xf0, ++ 0xa3,0xf0,0x90,0x08,0xb8,0xe4,0xf0,0xa3,0xf0,0x90,0x08,0xb6,0xe4,0xf0,0xa3,0xf0, ++ 0x78,0x1e,0x76,0x00,0x75,0xa8,0x81,0x75,0xb8,0x01,0x75,0xe8,0x06,0x75,0xf8,0x04, ++ 0xd2,0xaf,0x22,0x90,0x91,0x44,0x7a,0x04,0x78,0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa, ++ 0x90,0x3f,0xf4,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x12,0x06,0xd6, ++ 0x90,0x3f,0xf2,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x22,0x90,0x3f,0xf4,0x7a,0x04,0x78, ++ 0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90,0x91,0x08,0x7a,0x04,0x78,0x08,0xe6,0xf0, ++ 0xa3,0x08,0xda,0xfa,0x12,0x06,0xd6,0x90,0x3f,0xf2,0x74,0x01,0xf0,0xa3,0xe4,0xf0, ++ 0x22,0x90,0x91,0x48,0x7a,0x04,0x78,0x08,0xe0,0xf6,0xa3,0x08,0xda,0xfa,0x90,0x3f, ++ 0xf4,0x7a,0x04,0x78,0x08,0xe6,0xf0,0xa3,0x08,0xda,0xfa,0x12,0x06,0xd6,0x90,0x3f, ++ 0xf2,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x22,0x00,0x30,0x00,0x36,0x41,0x91,0x45,0x91, ++ 0xf4,0x3f,0xf6,0x3f,0xf4,0x3f,0xf5,0x3f,0xf6,0x3f,0xf7,0x3f,0x90,0x3f,0xf4,0x78, ++ 0x1f,0xe0,0xf6,0x90,0x3f,0xf2,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x22,0x78,0x1e,0x76, ++ 0x01,0x90,0x3f,0xf2,0x74,0x01,0xf0,0xa3,0xe4,0xf0,0x22,0x53,0xa0,0xfe,0x43,0xa0, ++ 0x01,0x22,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++ 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, ++ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ++}; ++ ++ ++void init_8051(void) ++{ ++ int i,j; ++ ++ *(volatile unsigned long *)(VOYAGER_8051_RESET) = 0x0000; ++ *(volatile unsigned long *)(VOYAGER_8051_SELECT) = 0x0011; ++ //8051 program write ++ for(i=0;i<sizeof(code_8051);i++) { ++ *(volatile unsigned char *)(VOYAGER_8051_BASE+i) = code_8051[i]; ++ } ++ *(volatile unsigned long *)(VOYAGER_8051_RESET) = 0x0001; ++ for(i=0;i<DELAY_8051;i++) { ++ for(j=0;j<200;j++); ++ } ++} ++ ++ ++int command_8051(int com,int *data,int *data2) ++{ ++ int ret,i,j; ++ ++ j = 0; ++ do { ++ *(volatile unsigned short *)(VOYAGER_8051_COMMAND) = com; ++ *(volatile unsigned short *)(VOYAGER_8051_STATUS) = 0; ++ *(volatile unsigned long *)(VOYAGER_8051_DATA) = *data; ++ *(volatile unsigned long *)(VOYAGER_8051_DATA+4) = *data2; ++ *(volatile unsigned long *)(VOYAGER_8051_CPU_INT) = 0xff; ++ for(i=0;i<DELAY_8051;i++) { ++ ret = *(volatile unsigned short *)(VOYAGER_8051_STATUS); ++ if(ret != 0) { ++ break; ++ } ++ } ++ j++; ++ if(j > 100) { ++ *data = 0; ++ *data2 = 0; ++ printk("8051 command process error\n"); ++ return(-1); ++ } ++ } while(ret == 0); ++ *data = *(volatile unsigned long *)(VOYAGER_8051_DATA); ++ *data2 = *(volatile unsigned long *)(VOYAGER_8051_DATA+4); ++ ++ return(ret); ++} ++ ++EXPORT_SYMBOL(init_8051); ++EXPORT_SYMBOL(command_8051); ++ +diff -ruN linux-2.6.17-vanilla/sound/oss/voyagergx_sound.c linux-2.6.17/sound/oss/voyagergx_sound.c +--- linux-2.6.17-vanilla/sound/oss/voyagergx_sound.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/oss/voyagergx_sound.c 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,1122 @@ ++/* ++ * linux/drivers/sound/voyagergx_sound.c -- voyager sound driver ++ * ++ * Copyright (C) 2003 Renesas Technology Sales Co.,Ltd. ++ * Copyright (C) 2003 Atom Create Engineering Co.,Ltd. ++ * Anthor : Atom Create Engineering Co.,Ltd. ++ * Kenichi Sakuma ++ * ++ * This file is subject to the terms and conditions of the GNU General Public ++ * License. See the file COPYING in the main directory of this archive for ++ * more details. ++ * ++ * 1.00 ++ * - initial version (ks) ++ * 1.01 ++ * - Kernel 2.6 correspondence ++ */ ++#include <linux/version.h> ++#include <linux/module.h> ++#include <linux/string.h> ++#include <linux/ioport.h> ++#include <linux/sched.h> ++#include <linux/delay.h> ++#include <linux/sound.h> ++#include <linux/slab.h> ++#include <linux/soundcard.h> ++#include <linux/init.h> ++#include <linux/poll.h> ++#include <linux/pci.h> ++#include <linux/bitops.h> ++#include <linux/proc_fs.h> ++#include <linux/spinlock.h> ++#include <linux/smp_lock.h> ++#include <linux/ac97_codec.h> ++#include <linux/interrupt.h> ++#include <asm/io.h> ++#include <asm/uaccess.h> ++#include <asm/hardirq.h> ++#include <asm/rts7751r2d/voyagergx_reg.h> ++#include <asm/irq.h> ++#include "voyagergx_sound.h" ++ ++static DEFINE_SPINLOCK(voyagergx_sound_lock); ++ ++/* --------------------------------------------------------------------- */ ++#undef OSS_DOCUMENTED_MIXER_SEMANTICS ++ ++#define VOYAGERGX_MODULE_NAME "Voyagergx audio" ++#define PFX VOYAGERGX_MODULE_NAME ++ ++#define err(format, arg...) printk(KERN_ERR PFX ": " format "\n" , ## arg) ++#define info(format, arg...) printk(KERN_INFO PFX ": " format "\n" , ## arg) ++//#define info(format, arg...) printk(": " format "\n" , ## arg) ++//#define warn(format, arg...) printk(KERN_WARNING PFX ": " format "\n" , ## arg) ++ ++// buffer size ++#define VOYAGER_SOUND_SIZE 0x100000 ++// data buffer 1 - vram upper ++#define VOYAGER_SOUND_BUF1 0xb0200000 ++// data buffer 2 - vram upper ++#define VOYAGER_SOUND_BUF2 VOYAGER_SOUND_BUF1+VOYAGER_SOUND_SIZE ++//WAIT TIME OUT ++//#define WAIT_TIMEOUT ((VOYAGER_SOUND_SIZE / 48000) * HZ + 10) ++#define WAIT_TIMEOUT 1100 ++ ++DECLARE_WAIT_QUEUE_HEAD(int_wq); ++ ++/* Boot options */ ++static int vra = 0; // 0 = no VRA, 1 = use VRA if codec supports it ++MODULE_PARM(vra, "i"); ++MODULE_PARM_DESC(vra, "if 1 use VRA if codec supports it"); ++ ++struct voyager_setting { ++ int ch; ++ int fmt; ++ int rate; ++} setting; ++ ++int init_8051(void); ++int command_8051(int com,int *data,int *data2); ++ ++// DMA used channel - set DMA used channel(fixed at 0) ++static int sh7751_dmasound_play_irq = 0; ++// buffer 1 used flag - transfersize is set when used ++static int buff_flg1 = 0; ++// buffer 2 used flag - transfersize is set when used ++static int buff_flg2 = 0; ++// buffer judgement flag - which buffer is used by DMA ++static int proc_flg = 0; ++// first judgement flag - data transfer is first time? ++static int first_flg = 0; ++// last judgement flag - data transfer is last? ++static int last_flg = 0; ++// interrupt flag - 0 cleard if interrupt occured ++static int wari_flg; ++// break flag - to cancel or done of sound play ++static int break_flg; ++// play cancel flag - performance problem or end of play ++static int abnml_flg; ++// number of write buffer - which buffer will be used ++static int next_write; ++// remained buffer size ++static int next_size; ++// DMA transfer size ++static int dma_req[2]; ++// DMA address table - address per channel ++static int dma_tbl[] = { ++ 0xffa00000, 0xffa00010, 0xffa00020, 0xffa00030, ++ 0xffa00040, 0xffa00050, 0xffa00060, 0xffa00070 ++}; ++ ++/* --------------------------------------------------------------------- */ ++// DMA start ++// enable selected dma channel ++void dma2_start(int irq) ++{ ++int base; ++ ++ base = dma_tbl[irq]; ++ *(volatile unsigned long *)(base + 0xc) |= 0x00000001; ++} ++ ++ ++// DMA stop ++// disable selected dma channel ++void dma2_stop(int irq) ++{ ++int base; ++ ++ base = dma_tbl[irq]; ++ *(volatile unsigned long *)(base + 0xc) &= 0xfffffffc; ++} ++ ++ ++// prepare DMA transfer ++// set transfer src address and transfer size ++void dma2_queue_buffer(int irq,int src, int cnt) ++{ ++int base; ++ ++ base = dma_tbl[irq]; ++ *(volatile unsigned long *)(base + 0x0) = src & 0x1fffffff; ++ // change transfer unit for mono or stereo ++ if(setting.ch == 1) { ++ // 4 byte for stereo ++ *(volatile unsigned long *)(base + 0x8) = cnt; ++ } ++ else { ++ // 2 byte for mono ++ *(volatile unsigned long *)(base + 0x8) = cnt * 2; ++ } ++} ++ ++ ++// DMA registration ++// register DMA interrupt ++int request_dma2(int irq,char *str,irqreturn_t (*callback)(int, void *, struct pt_regs *)) ++{ ++int ret; ++ ++ make_ipr_irq(DMTE0_IRQ+irq, DMA_IPR_ADDR, DMA_IPR_POS,DMA_PRIORITY); ++ ret = request_irq(DMTE0_IRQ+irq,callback,SA_INTERRUPT,str,0); ++ return(ret); ++} ++ ++ ++// preparation for DMA use ++// set transfer dst address and transfer unit, transfer condition, etc ++void dma2_set_device(int irq) ++{ ++int base; ++ ++ //DMA initialize ++ base = dma_tbl[irq]; ++ *(volatile unsigned long *)(base + 0x0) = 0; ++ *(volatile unsigned long *)(base + 0x4) = VOYAGER_8051_FIFO & 0x1fffffff; ++ *(volatile unsigned long *)(base + 0x8) = 0; ++ // change transfer unit for mono or stereo ++ if(setting.ch == 1) { ++ // 4 byte for stereo ++ *(volatile unsigned long *)(base + 0xc) = 0xb1034; ++ } ++ else { ++ // 2 byte for mono ++ *(volatile unsigned long *)(base + 0xc) = 0xb1024; ++ } ++ *(volatile unsigned long *)(base + 0x40) = 0x01; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++ ++// cancel sound play(done) ++// ++static void voy_break(void) ++{ ++int data,data2; ++ ++ // cancel for 8051 ++ data = 0x00; ++ command_8051(0x07,&data,&data2); ++ // stop DMA ++ dma2_stop(sh7751_dmasound_play_irq); ++ break_flg = 1; ++} ++/* --------------------------------------------------------------------- */ ++// ISR for DMA ++// called after DMA transfer is done ++// next request is issued here in the case of sequential transfer ++static irqreturn_t do_irq(int irq, void *dev_id, struct pt_regs *regs) ++{ ++ spin_lock_irq(&voyagergx_sound_lock); ++ ++ // stop DMA ++ dma2_stop(sh7751_dmasound_play_irq); ++ // clear interrupt flag ++ wari_flg = 0; ++ // play of buffer 1 is done? ++ if((proc_flg == 1)&&(buff_flg1 == 1)) { ++ // buffer 1 is free ++ buff_flg1 = 0; ++ // buffer 2 is being played ++ proc_flg = 2; ++ // next data is ready? ++ if(buff_flg2 == 1) { ++ // request DMA ++ dma2_queue_buffer(sh7751_dmasound_play_irq,VOYAGER_SOUND_BUF2,dma_req[1]); ++ dma2_start(sh7751_dmasound_play_irq); ++ } ++ else { ++ // set stop flag if no data ++ abnml_flg = 1; ++ } ++ } ++ // play of buffer 2 is done? ++ else if((proc_flg == 2)&&(buff_flg2 == 1)) { ++ // buffer 2 is free ++ buff_flg2 = 0; ++ // buffer 1 is being played ++ proc_flg = 1; ++ // next data is ready? ++ if(buff_flg1 == 1) { ++ // request DMA ++ dma2_queue_buffer(sh7751_dmasound_play_irq,VOYAGER_SOUND_BUF1,dma_req[0]); ++ dma2_start(sh7751_dmasound_play_irq); ++ } ++ else { ++ // set stop flag if no data ++ abnml_flg = 1; ++ } ++ } ++ // play remained data(last data or small one) ++ else { ++ //last transfer is done ++ last_flg = 0; ++ } ++ //wake up sleeping write routine ++ wake_up_interruptible(&int_wq); ++ spin_unlock_irq(&voyagergx_sound_lock); ++ ++ return IRQ_HANDLED; ++} ++ ++/* --------------------------------------------------------------------- */ ++// 32 bit memory read ++static inline u32 voyager_readl(u32 addr) ++{ ++ return *(volatile unsigned long *)(addr); ++} ++ ++// 32 bit memory write ++static inline void voyager_writel(u32 val,u32 addr) ++{ ++ *(volatile unsigned long *)(addr) = val; ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++struct voyagergx_state { ++ /* soundcore stuff */ ++ int dev_audio; ++ ++ struct ac97_codec codec; ++ unsigned codec_base_caps; // AC'97 reg 00h, "Reset Register" ++ unsigned codec_ext_caps; // AC'97 reg 28h, "Extended Audio ID" ++ int no_vra; // do not use VRA ++ ++ spinlock_t lock; ++ struct semaphore open_sem; ++ mode_t open_mode; ++ ++} voyagergx_state; ++ ++ ++/* --------------------------------------------------------------------- */ ++// read codec ++static u16 rdcodec(struct ac97_codec *codec, u8 addr) ++{ ++ u32 cmd,ret; ++ u16 data; ++ ++ ++ // set register address for reading ++ cmd = (u32) (addr & AC97C_INDEX_MASK) << 12; ++ cmd |= AC97C_READ; // read command ++ command_8051(1,&cmd,&ret); ++ mdelay(1); ++ // read register ++ command_8051(4,&cmd,&ret); ++ mdelay(1); ++ // convert it as it was shifted ++ data = (cmd >> 4) & 0xffff; ++ return data; ++} ++ ++ ++// write codec ++static void wrcodec(struct ac97_codec *codec, u8 addr, u16 data) ++{ ++ u32 cmd,ret; ++ int i; ++ ++ // reset? ++ if(addr == 0) { ++ // try again if failed ++ for(i=0;i<10;i++) { ++ // set write data ++ cmd = (u32) data << AC97C_WD_BIT; // OR in the data word ++ command_8051(3,&cmd,&ret); ++ // set write address ++ cmd = (u32) (addr & AC97C_INDEX_MASK) << 12; ++ cmd &= ~AC97C_READ; // write command ++ command_8051(1,&cmd,&ret); ++ // check whether reset succeed ++ ret = rdcodec(codec,0); ++ if((ret & 0x8000) == 0) { ++ break; ++ } ++ } ++ } ++ // instead of reset ++ else { ++ // set write data ++ cmd = (u32) data << AC97C_WD_BIT; // OR in the data word ++ command_8051(3,&cmd,&ret); ++ // set write address ++ cmd = (u32) (addr & AC97C_INDEX_MASK) << 12; ++ cmd &= ~AC97C_READ; // write command ++ command_8051(1,&cmd,&ret); ++ mdelay(1); ++ // read variables of volume for preservation ++ rdcodec(codec,2); ++ rdcodec(codec,24); ++ rdcodec(codec,22); ++ rdcodec(codec,0x2c); ++ } ++} ++ ++/* --------------------------------------------------------------------- */ ++ ++static loff_t voyagergx_llseek(struct file *file, loff_t offset, int origin) ++{ ++ return -ESPIPE; ++} ++ ++ ++static int voyagergx_open_mixdev(struct inode *inode, struct file *file) ++{ ++ file->private_data = &voyagergx_state; ++ return 0; ++} ++ ++static int voyagergx_release_mixdev(struct inode *inode, struct file *file) ++{ ++ return 0; ++} ++ ++static int mixdev_ioctl(struct ac97_codec *codec, unsigned int cmd, ++ unsigned long arg) ++{ ++ return codec->mixer_ioctl(codec, cmd, arg); ++} ++ ++static int voyagergx_ioctl_mixdev(struct inode *inode, struct file *file, ++ unsigned int cmd, unsigned long arg) ++{ ++ struct voyagergx_state *s = (struct voyagergx_state *)file->private_data; ++ struct ac97_codec *codec = &s->codec; ++ ++ return mixdev_ioctl(codec, cmd, arg); ++} ++ ++static /*const */ struct file_operations voyagergx_mixer_fops = { ++ owner:THIS_MODULE, ++ llseek:voyagergx_llseek, ++ ioctl:voyagergx_ioctl_mixdev, ++ open:voyagergx_open_mixdev, ++ release:voyagergx_release_mixdev, ++}; ++ ++/* --------------------------------------------------------------------- */ ++// read routine ++// record(sampling) should be used originally ++// do nothing without record(sampling) now ++static ssize_t voyagergx_read(struct file *file, char *buffer, ++ size_t count, loff_t *ppos) ++{ ++ if (ppos != &file->f_pos) ++ return -ESPIPE; ++ if (!access_ok(VERIFY_WRITE, buffer, count)) ++ return -EFAULT; ++ return 0; ++} ++ ++// write routine ++// used for sound play ++// sound play is being done by 8051 and data itsself is transfered by DMA ++// the preparation for the above is done here ++static ssize_t voyagergx_write(struct file *file, const char *buffer, ++ size_t count, loff_t * ppos) ++{ ++int i,data,data2,data_size; ++int ret; ++ ++ ++ if (ppos != &file->f_pos) ++ return -ESPIPE; ++ if (!access_ok(VERIFY_READ, buffer, count)) ++ return -EFAULT; ++ // exit if break flag is set ++ if(break_flg) { ++ return count; ++ } ++ // wait until buffers are not free ++ if((buff_flg1 == 1)&&(buff_flg2 == 1)) { ++ wari_flg = 1; ++ i = 0; ++ while(wari_flg) { ++ // sound play already done? ++ if(abnml_flg) { ++ break; ++ } ++ // sleep until buffer is not full ++ ret = interruptible_sleep_on_timeout(&int_wq,WAIT_TIMEOUT); ++ if(ret == 0) { ++ break; ++ } ++ // check Ctrl-C ++ if (signal_pending(current)) { ++ voy_break(); ++ return -ERESTARTSYS; ++ } ++ i++; ++ if(i > 10000000) { ++ printk("DMA endcheck-1 error\n"); ++ voy_break(); ++ return -EFAULT; ++ } ++ } ++ } ++ data_size = count; ++ // multiple transfer ++ if(data_size >= next_size) { ++ // until play data is larger than buffer ++ while(data_size >= next_size) { ++ // buffer 1 is free ++ if((next_write == 1)&&(buff_flg1 == 0)) { ++ // copy data to VRAM ++ copy_from_user((long *)(VOYAGER_SOUND_BUF1+VOYAGER_SOUND_SIZE-next_size), ++ (long *)buffer,next_size); ++ // buffer1 used ++ buff_flg1 = 1; ++ next_write = 2; ++ // update pointer ++ buffer += next_size; ++ // decrease remained play data ++ data_size -= next_size; ++ // set remained buffer size ++ next_size = VOYAGER_SOUND_SIZE; ++ // kick DMA again when data is not enough ++ if(abnml_flg == 1) { ++ dma2_queue_buffer(sh7751_dmasound_play_irq, ++ VOYAGER_SOUND_BUF1,dma_req[0]); ++ dma2_start(sh7751_dmasound_play_irq); ++ abnml_flg = 0; ++ } ++ } ++ // buffer 2 is free ++ else if((next_write == 2)&&(buff_flg2 == 0)) { ++ // copy data to VRAM ++ copy_from_user((long *)(VOYAGER_SOUND_BUF2+VOYAGER_SOUND_SIZE-next_size), ++ (long *)buffer,next_size); ++ //buffer 2 used ++ buff_flg2 = 1; ++ next_write = 1; ++ // update pointer ++ buffer += next_size; ++ // decrease remained play data ++ data_size -= next_size; ++ // set remained buffer size ++ next_size = VOYAGER_SOUND_SIZE; ++ // kick DMA again when data is not enough ++ if(abnml_flg == 1) { ++ dma2_queue_buffer(sh7751_dmasound_play_irq, ++ VOYAGER_SOUND_BUF2,dma_req[1]); ++ dma2_start(sh7751_dmasound_play_irq); ++ abnml_flg = 0; ++ } ++ } ++ // first time? ++ if(first_flg == 0) { ++ //buffer 1 is full?(buffer 1 is used at first) ++ if(buff_flg1 == 1) { ++ // request DMA ++ dma2_queue_buffer(sh7751_dmasound_play_irq, ++ VOYAGER_SOUND_BUF1, ++ VOYAGER_SOUND_SIZE/4); ++ // start play on 8051 ++ data = 0x01; ++ command_8051(0x07,&data,&data2); ++ // start DMA transfer ++ dma2_start(sh7751_dmasound_play_irq); ++ // set first flag ++ first_flg = 1; ++ } ++ } ++ // wait until 2 buffer are full ++ if((buff_flg1 == 1)&&(buff_flg2 == 1)) { ++ wari_flg = 1; ++ i = 0; ++ while(wari_flg) { ++ // sound play already done? ++ if(abnml_flg) { ++ break; ++ } ++ // sleep until buffer is not full ++ ret = interruptible_sleep_on_timeout(&int_wq,WAIT_TIMEOUT); ++ if(ret == 0) { ++ break; ++ } ++ // check Ctrl-C ++ if (signal_pending(current)) { ++ voy_break(); ++ return -ERESTARTSYS; ++ } ++ i++; ++ if(i > 10000000) { ++ printk("DMA endcheck-2 error\n"); ++ voy_break(); ++ return -EFAULT; ++ } ++ } ++ } ++ } ++ } ++ // play data size is less than remained buffer size ++ if((data_size != 0)&&(data_size < next_size)) { ++ // buffer 1 is free ++ if((next_write == 1)&&(buff_flg1 == 0)) { ++ // copy data to VRAM ++ copy_from_user((long *)(VOYAGER_SOUND_BUF1+VOYAGER_SOUND_SIZE-next_size), ++ (void *)buffer,data_size); ++ // reset buffer remain size ++ next_size -= data_size; ++ // buffer is full? ++ if(next_size == 0) { ++ //buffer1 used ++ buff_flg1 = 1; ++ next_write = 2; ++ // reset buffer remain size ++ next_size = VOYAGER_SOUND_SIZE; ++ // kick DMA again when data is not enough ++ if(abnml_flg == 1) { ++ dma2_queue_buffer(sh7751_dmasound_play_irq, ++ VOYAGER_SOUND_BUF1,dma_req[0]); ++ dma2_start(sh7751_dmasound_play_irq); ++ abnml_flg = 0; ++ } ++ } ++ } ++ //buffer 2 is free ++ else if((next_write == 2)&&(buff_flg2 == 0)) { ++ // copy data to VRAM ++ copy_from_user((long *)(VOYAGER_SOUND_BUF2+VOYAGER_SOUND_SIZE-next_size), ++ (void *)buffer,data_size); ++ // reset buffer remained size ++ next_size -= data_size; ++ // buffer is full? ++ if(next_size == 0) { ++ //buffer2 used ++ buff_flg2 = 1; ++ next_write = 1; ++ // reset buffer remained size ++ next_size = VOYAGER_SOUND_SIZE; ++ // kick DMA again when data is not enough ++ if(abnml_flg == 1) { ++ dma2_queue_buffer(sh7751_dmasound_play_irq, ++ VOYAGER_SOUND_BUF2,dma_req[1]); ++ dma2_start(sh7751_dmasound_play_irq); ++ abnml_flg = 0; ++ } ++ } ++ } ++ } ++ // is it first time? ++ if(first_flg == 0) { ++ // buffer 1 is full(buffer1 is used first at first time) ++ if(buff_flg1 == 1) { ++ // DMA request ++ dma2_queue_buffer(sh7751_dmasound_play_irq, ++ VOYAGER_SOUND_BUF1, ++ VOYAGER_SOUND_SIZE/4); ++ // start play on 8051 ++ data = 0x01; ++ command_8051(0x07,&data,&data2); ++ dma2_start(sh7751_dmasound_play_irq); ++ // set first flag ++ first_flg = 1; ++ } ++ } ++ return(count); ++} ++ ++// polling - not used ++static unsigned int voyagergx_poll(struct file *file, ++ struct poll_table_struct *wait) ++{ ++ return 0; ++} ++ ++// mmap - not used ++static int voyagergx_mmap(struct file *file, struct vm_area_struct *vma) ++{ ++ return 0; ++} ++ ++// I/O control ++// operation for change data type and volume ++static int voyagergx_ioctl(struct inode *inode, struct file *file, ++ unsigned int cmd, unsigned long arg) ++{ ++ struct voyagergx_state *s = (struct voyagergx_state *)file->private_data; ++ int data,data2,rate; ++ ++ ++ switch (cmd) { ++//Sound Stop control ++ case -1: ++ voy_break(); ++ return 0; ++ case OSS_GETVERSION: ++ return put_user(SOUND_VERSION, (int *) arg); ++ ++ case SNDCTL_DSP_SYNC: ++ return 0; ++ ++ case SNDCTL_DSP_SETDUPLEX: ++ return 0; ++ ++ case SNDCTL_DSP_GETCAPS: ++ return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | ++ DSP_CAP_TRIGGER | DSP_CAP_MMAP, (int *)arg); ++ ++ case SNDCTL_DSP_RESET: ++ return 0; ++ ++ case SNDCTL_DSP_SPEED: // set sampling rate ++ if((*(int *)arg <= 0xbb80)&&(*(int *)arg >= 0x1b80)) { ++ setting.rate = *(int *)arg; ++ } ++ if(setting.ch == 0) { ++ rate = setting.rate / 2; ++ } ++ else { ++ rate = setting.rate; ++ } ++ return setting.rate; ++ ++ case SNDCTL_DSP_STEREO: //set # of play channel(stereo or mono) ++ setting.ch = *(int *)arg; ++ // set # of channel for 8051 ++ data = setting.ch; ++ command_8051(0x05,&data,&data2); ++ dma2_set_device(sh7751_dmasound_play_irq); ++ return(setting.ch); ++ ++ case SNDCTL_DSP_CHANNELS: ++ return 0; ++ ++ case SNDCTL_DSP_GETFMTS: // set play data format(8bit or 16bit) ++ if(setting.fmt == 16) { ++ arg = (unsigned long)AFMT_S16_LE; ++ } ++ else { ++ arg = (unsigned long)AFMT_U8; ++ } ++ return 0; ++ ++ case SNDCTL_DSP_SETFMT: // set play data format(8bit or 16bit) ++ if(*(int *)arg == AFMT_S16_LE) { ++ setting.fmt = 16; ++ } ++ else { ++ setting.fmt = 8; ++ } ++ return 0; ++ ++ case SNDCTL_DSP_POST: ++ return 0; ++ ++ case SNDCTL_DSP_GETTRIGGER: ++ return 0; ++ ++ case SNDCTL_DSP_SETTRIGGER: ++ return 0; ++ ++ case SNDCTL_DSP_GETOSPACE: ++ return 0; ++ ++ case SNDCTL_DSP_GETISPACE: ++ return 0; ++ ++ case SNDCTL_DSP_NONBLOCK: ++ return 0; ++ ++ case SNDCTL_DSP_GETODELAY: ++ return 0; ++ ++ case SNDCTL_DSP_GETIPTR: ++ return 0; ++ ++ case SNDCTL_DSP_GETOPTR: ++ return 0; ++ ++ case SNDCTL_DSP_GETBLKSIZE: ++ return 0; ++ ++ case SNDCTL_DSP_SETFRAGMENT: ++ return 0; ++ ++ case SNDCTL_DSP_SUBDIVIDE: ++ return 0; ++ ++ case SOUND_PCM_READ_RATE: ++ return 0; ++ ++ case SOUND_PCM_READ_CHANNELS: ++ return 0; ++ ++ case SOUND_PCM_READ_BITS: ++ return 0; ++ ++ case SOUND_PCM_WRITE_FILTER: ++ case SNDCTL_DSP_SETSYNCRO: ++ case SOUND_PCM_READ_FILTER: ++ return -EINVAL; ++ } ++ ++ return mixdev_ioctl(&s->codec, cmd, arg); ++} ++ ++// open ++// flag initialization ++// stop 8051 to play(it will be started by first write) ++static int voyagergx_open(struct inode *inode, struct file *file) ++{ ++struct voyagergx_state *s = &voyagergx_state; ++int data,data2; ++ ++ file->private_data = s; ++ ++ s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE); ++ //head transferflag clear ++ first_flg = 0; ++ //last transfer flag clear ++ last_flg = 0; ++ //buffer flag clear ++ buff_flg1 = buff_flg2 = 0; ++ // buffer 1 is first ++ proc_flg = 1; ++ // reset buffer remained size ++ next_size = VOYAGER_SOUND_SIZE; ++ // initialize DMA transfer size ++ dma_req[0] = VOYAGER_SOUND_SIZE/4; ++ dma_req[1] = VOYAGER_SOUND_SIZE/4; ++ // clear break flag ++ break_flg = 0; ++ // clear cancel play flag ++ abnml_flg = 0; ++ // initialize # of write buffer ++ next_write = 1; ++ // start play on 8051 ++ data = 0x00; ++ command_8051(0x07,&data,&data2); ++ ++ return 0; ++} ++ ++// release(close) ++// play again if data remains in buffer ++// stop DMA ++// stop 8051 ++static int voyagergx_release(struct inode *inode, struct file *file) ++{ ++int data,data2,i; ++int ret; ++ ++ // stop if break flag is set ++ if(break_flg) { ++ return 0; ++ } ++ // wait until buffer is not full ++ if((buff_flg1 == 1)&&(buff_flg2 == 1)) { ++ wari_flg = 1; ++ i = 0; ++ while(wari_flg) { ++ // sound play already done? ++ if(abnml_flg) { ++ break; ++ } ++ // sleep until buffer is not full ++ ret = interruptible_sleep_on_timeout(&int_wq,WAIT_TIMEOUT); ++ if(ret == 0) { ++ break; ++ } ++ // check Ctrl-C ++ if (signal_pending(current)) { ++ voy_break(); ++ return -ERESTARTSYS; ++ } ++ i++; ++ if(i > 10000000) { ++ printk("DMA endcheck-3 error\n"); ++ voy_break(); ++ return -EFAULT; ++ } ++ } ++ } ++ // exit if size is less than 4 ++ if((VOYAGER_SOUND_SIZE - next_size) < 4) { ++ voy_break(); ++ return 0; ++ } ++ // buffer is not full? ++ if(next_size != 0) { ++ ++ // first time? ++ if(first_flg == 0) { ++ // no data ++ if(next_size == VOYAGER_SOUND_SIZE) { ++ // exit ++ voy_break(); ++ return 0; ++ } ++ // buffer 1 used? ++ if(proc_flg == 1) { ++ dma2_queue_buffer(sh7751_dmasound_play_irq, ++ VOYAGER_SOUND_BUF1, ++ (VOYAGER_SOUND_SIZE-next_size)/4); ++ // set last judgement flag ++ last_flg = 1; ++ } ++ // start play on 8051 ++ data = 0x01; ++ command_8051(0x07,&data,&data2); ++ dma2_start(sh7751_dmasound_play_irq); ++ } ++ // sound play in case that data is less than a buffer ++ else { ++ if(proc_flg == 2) { ++ dma_req[0] = (VOYAGER_SOUND_SIZE-next_size)/4; ++ buff_flg1 = 1; ++ // set last judgement flag ++ last_flg = 1; ++ // kick dma again if data is not enough ++ if(abnml_flg == 1) { ++ dma2_queue_buffer(sh7751_dmasound_play_irq, ++ VOYAGER_SOUND_BUF1,dma_req[0]); ++ dma2_start(sh7751_dmasound_play_irq); ++ abnml_flg = 0; ++ } ++ } ++ else { ++ // DMA request ++ dma_req[1] = (VOYAGER_SOUND_SIZE-next_size)/4; ++ buff_flg2 = 1; ++ // set last judgement flag ++ last_flg = 1; ++ // kick dma again if data is not enough ++ if(abnml_flg == 1) { ++ dma2_queue_buffer(sh7751_dmasound_play_irq, ++ VOYAGER_SOUND_BUF2,dma_req[1]); ++ dma2_start(sh7751_dmasound_play_irq); ++ abnml_flg = 0; ++ } ++ } ++ } ++ } ++ // wait for all sound play(transfer) ++ while(1) { ++ if(abnml_flg) { ++ break; ++ } ++ // exit if last judgement flag is 0 ++ if(last_flg == 0) { ++ break; ++ } ++ wari_flg = 1; ++ i = 0; ++ while(wari_flg) { ++ // sound play already done? ++ if(abnml_flg) { ++ break; ++ } ++ // exit if last judgement flag is 0 ++ if(last_flg == 0) { ++ break; ++ } ++ // sleep until buffer is not full ++ ret = interruptible_sleep_on_timeout(&int_wq,WAIT_TIMEOUT); ++ if(ret == 0) { ++ voy_break(); ++ return -EFAULT; ++ } ++ // check Ctrl-C ++ if (signal_pending(current)) { ++ voy_break(); ++ return -ERESTARTSYS; ++ } ++ i++; ++ if(i > 10000000) { ++ printk("DMA endcheck-last error\n"); ++ voy_break(); ++ return -EFAULT; ++ } ++ } ++ } ++ // end ++ voy_break(); ++ ++ return 0; ++} ++ ++static /*const */ struct file_operations voyagergx_audio_fops = { ++ owner: THIS_MODULE, ++ llseek: voyagergx_llseek, ++ read: voyagergx_read, ++ write: voyagergx_write, ++ poll: voyagergx_poll, ++ ioctl: voyagergx_ioctl, ++ mmap: voyagergx_mmap, ++ open: voyagergx_open, ++ release: voyagergx_release, ++}; ++ ++ ++/* --------------------------------------------------------------------- */ ++MODULE_AUTHOR("Atom Create Engineering Co.,Ltd."); ++MODULE_DESCRIPTION("DSP audio and mixer driver for Silicon Motion VoyagerGX audio device"); ++ ++/* --------------------------------------------------------------------- */ ++ ++// probe ++// driver initialization ++// codec initialization ++// check ac97 chip# ++static int __devinit voyagergx_probe(void) ++{ ++struct voyagergx_state *s = &voyagergx_state; ++int val; ++ ++ memset(s, 0, sizeof(struct voyagergx_state)); ++ ++ init_MUTEX(&s->open_sem); ++ s->codec.private_data = s; ++ s->codec.id = 0; ++ s->codec.codec_read = rdcodec; ++ s->codec.codec_write = wrcodec; ++ s->codec.codec_wait = NULL; ++ ++ /* register devices */ ++ ++ if ((s->dev_audio = register_sound_dsp(&voyagergx_audio_fops, -1)) < 0) ++ goto err_dev1; ++ if ((s->codec.dev_mixer = ++ register_sound_mixer(&voyagergx_mixer_fops, -1)) < 0) ++ goto err_dev2; ++ ++ ++ /* codec init */ ++ if (!ac97_probe_codec(&s->codec)) ++ goto err_dev3; ++ ++ s->codec_base_caps = rdcodec(&s->codec, AC97_RESET); ++ s->codec_ext_caps = rdcodec(&s->codec, AC97_EXTENDED_ID); ++ info("AC'97 Base/Extended ID = %04x/%04x", ++ s->codec_base_caps, s->codec_ext_caps); ++ ++ s->codec.supported_mixers |= SOUND_MASK_ALTPCM; ++ val = 0x4343; ++ mixdev_ioctl(&s->codec, SOUND_MIXER_WRITE_ALTPCM, ++ (unsigned long) &val); ++ ++ if (!(s->codec_ext_caps & AC97_EXTID_VRA)) { ++ // codec does not support VRA ++ s->no_vra = 1; ++ } else if (!vra) { ++ // Boot option says disable VRA ++ u16 ac97_extstat = rdcodec(&s->codec, AC97_EXTENDED_STATUS); ++ wrcodec(&s->codec, AC97_EXTENDED_STATUS, ++ ac97_extstat & ~AC97_EXTSTAT_VRA); ++ s->no_vra = 1; ++ } ++ if (s->no_vra) ++ info("no VRA, interpolating and decimating"); ++ ++ // set 48k for sampling rate ++ setting.rate = 48000; ++ wrcodec(&s->codec, 0x2a, 1); ++ wrcodec(&s->codec, 0x2c, setting.rate); ++ //volume set ++ wrcodec(&s->codec, 2, 0); ++ wrcodec(&s->codec, 24, 0); ++ wrcodec(&s->codec, 22, 0); ++ ++ return 0; ++ ++ err_dev3: ++ unregister_sound_mixer(s->codec.dev_mixer); ++ err_dev2: ++ unregister_sound_dsp(s->dev_audio); ++ err_dev1: ++ return -1; ++} ++ ++// remove procedure ++static void __devinit voyagergx_remove(void) ++{ ++ struct voyagergx_state *s = &voyagergx_state; ++ ++ if (!s) ++ return; ++ unregister_sound_dsp(s->dev_audio); ++ unregister_sound_mixer(s->codec.dev_mixer); ++} ++ ++// initilization ++static int __init init_voyagergx(void) ++{ ++unsigned long value; ++int err; ++ ++ info("sakuma@ace-jp.com, built " __TIME__ " on " __DATE__); ++ ++ // set GPIO for ac97 & 8051 ++ value = *(volatile unsigned long *)(GPIO_MUX_LOW); ++ value |= GPIO_MUX_LOW_AC97 | GPIO_MUX_LOW_8051; ++ *(volatile unsigned long *)(GPIO_MUX_LOW) = value; ++ ++ // stop DMA ++ dma2_stop(sh7751_dmasound_play_irq); ++ ++ //DMA interrupt request ++ err = request_dma2(sh7751_dmasound_play_irq, "voyager DMA",do_irq); ++ if (err) { ++ return 0; ++ } ++ ++ // enalbe ac97 interrupt ++ value = *(volatile unsigned long *)(VOYAGER_INT_MASK); ++ value |= VOYAGER_INT_MASK_AC; ++ *(volatile unsigned long *)(VOYAGER_INT_MASK) = value; ++ ++ // power on ac97 ++ value = *(volatile unsigned long *)(POWER_MODE0_GATE); ++ value |= POWER_MODE0_GATE_AC; ++ *(volatile unsigned long *)(POWER_MODE0_GATE) = value; ++ ++ // power on ac97 ++ value = *(volatile unsigned long *)(POWER_MODE1_GATE); ++ value |= POWER_MODE1_GATE_AC; ++ *(volatile unsigned long *)(POWER_MODE1_GATE) = value; ++ ++ // enable ac97 ++ value = *(volatile unsigned long *)(AC97_CONTROL_STATUS); ++ value |= 0x0000000F; ++ *(volatile unsigned long *)(AC97_CONTROL_STATUS) = value; ++ // wait for a while ++ mdelay(2); ++ // exit reset ++ value &= 0xFFFFFFF9; ++ *(volatile unsigned long *)(AC97_CONTROL_STATUS) = value; ++ ++ // tag initialization(enable stot1-4) ++ value = *(volatile unsigned long *)(AC97_TX_SLOT0); ++ value |= 0x0000F800; ++ *(volatile unsigned long *)(AC97_TX_SLOT0) = value; ++ ++ // mono 16bit 48k ++ setting.ch = 0; ++ setting.fmt = 16; ++ setting.rate = 48000; ++ ++ // DMA initialization ++ dma2_set_device(sh7751_dmasound_play_irq); ++ ++ // 8051 initialization ++ init_8051(); ++ ++ return voyagergx_probe(); ++} ++ ++// unload ++static void __exit cleanup_voyagergx(void) ++{ ++ info("unloading"); ++ voyagergx_remove(); ++} ++ ++module_init(init_voyagergx); ++module_exit(cleanup_voyagergx); ++MODULE_LICENSE("GPL"); +diff -ruN linux-2.6.17-vanilla/sound/oss/voyagergx_sound.h linux-2.6.17/sound/oss/voyagergx_sound.h +--- linux-2.6.17-vanilla/sound/oss/voyagergx_sound.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/oss/voyagergx_sound.h 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,4 @@ ++#define VOYAGER_8051_COMMAND (VOYAGER_BASE + 0x000c3ff0) ++#define VOYAGER_8051_STATUS (VOYAGER_BASE + 0x000c3ff2) ++#define VOYAGER_8051_DATA (VOYAGER_BASE + 0x000c3ff4) ++#define VOYAGER_8051_FIFO (VOYAGER_BASE + 0x000c3600) +diff -ruN linux-2.6.17-vanilla/sound/sh/CVS/Entries linux-2.6.17/sound/sh/CVS/Entries +--- linux-2.6.17-vanilla/sound/sh/CVS/Entries 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/sh/CVS/Entries 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,5 @@ ++/Kconfig/1.2/Mon Jun 5 15:29:08 2006// ++/Makefile/1.1/Sun Jun 4 12:13:05 2006// ++/aica.c/1.5/Wed Jul 12 16:52:06 2006// ++/aica.h/1.4/Wed Jul 12 16:52:06 2006// ++D +diff -ruN linux-2.6.17-vanilla/sound/sh/CVS/Repository linux-2.6.17/sound/sh/CVS/Repository +--- linux-2.6.17-vanilla/sound/sh/CVS/Repository 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/sh/CVS/Repository 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++linux/sound/sh +diff -ruN linux-2.6.17-vanilla/sound/sh/CVS/Root linux-2.6.17/sound/sh/CVS/Root +--- linux-2.6.17-vanilla/sound/sh/CVS/Root 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/sh/CVS/Root 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1 @@ ++:pserver:anonymous@linuxsh.cvs.sourceforge.net:/cvsroot/linuxsh +diff -ruN linux-2.6.17-vanilla/sound/sh/Kconfig linux-2.6.17/sound/sh/Kconfig +--- linux-2.6.17-vanilla/sound/sh/Kconfig 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/sh/Kconfig 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,15 @@ ++menu "SuperH devices" ++ depends on SND!=n && SUPERH ++ ++config SND_AICA ++ tristate "Yamaha AICA sound for SEGA Dreamcast" ++ depends on SND ++ depends on SH_DREAMCAST ++ select SND_PCM ++ help ++ Say Y here to include support for sound on your SEGA Dreamcast ++ ++ To compile this driver as a module, choose M here: the module ++ will be called snd-aica. ++ ++endmenu +diff -ruN linux-2.6.17-vanilla/sound/sh/Makefile linux-2.6.17/sound/sh/Makefile +--- linux-2.6.17-vanilla/sound/sh/Makefile 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/sh/Makefile 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,4 @@ ++ ++snd-aica-objs := aica.o ++obj-$(CONFIG_SND_AICA) += snd-aica.o ++ +diff -ruN linux-2.6.17-vanilla/sound/sh/aica.c linux-2.6.17/sound/sh/aica.c +--- linux-2.6.17-vanilla/sound/sh/aica.c 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/sh/aica.c 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,711 @@ ++/* ++* This code is licenced under ++* the General Public Licence ++* version 2 ++* ++* Copyright Adrian McMenamin 2005, 2006 ++* <adrian@mcmen.demon.co.uk> ++* See also http://newgolddream.dyndns.info/cgi-bin/cvsweb ++* ++* ++* This program is free software; you can redistribute it and/or modify ++* it under the terms of version 2 of the GNU General Public License as published by ++* the Free Software Foundation. ++* ++* This program is distributed in the hope that it will be useful, ++* but WITHOUT ANY WARRANTY; without even the implied warranty of ++* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++* GNU General Public License for more details. ++* ++* You should have received a copy of the GNU General Public License ++* along with this program; if not, write to the Free Software ++* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++* ++*/ ++ ++#include <linux/init.h> ++#include <linux/jiffies.h> ++#include <linux/slab.h> ++#include <linux/time.h> ++#include <linux/wait.h> ++#include <linux/moduleparam.h> ++#include <linux/platform_device.h> ++#include <linux/firmware.h> ++#include <linux/timer.h> ++#include <linux/delay.h> ++#include <linux/workqueue.h> ++#include <sound/driver.h> ++#include <sound/core.h> ++#include <sound/control.h> ++#include <sound/pcm.h> ++#include <sound/initval.h> ++#include <sound/info.h> ++#include <asm/io.h> ++#include <asm/dma.h> ++#include "aica.h" ++ ++MODULE_AUTHOR("Adrian McMenamin <adrian@mcmen.demon.co.uk>"); ++MODULE_DESCRIPTION("Dreamcast AICA sound (pcm) driver"); ++MODULE_LICENSE("GPL"); ++MODULE_SUPPORTED_DEVICE("{{Yamaha/SEGA, AICA}}"); ++ ++/* Command values */ ++#define AICA_CMD_KICK 0x80000000 ++#define AICA_CMD_NONE 0 ++#define AICA_CMD_START 1 ++#define AICA_CMD_STOP 2 ++#define AICA_CMD_VOL 3 ++ ++/* Sound modes */ ++#define SM_8BIT 1 ++#define SM_16BIT 0 ++#define SM_ADPCM 2 ++ ++/* Buffer and period size */ ++#define AICA_BUFFER_SIZE 0x8000 ++#define AICA_PERIOD_SIZE 0x800 ++#define AICA_PERIOD_NUMBER 16 ++ ++#define AICA_CHANNEL0_OFFSET 0x11000 ++#define AICA_CHANNEL1_OFFSET 0x21000 ++#define CHANNEL_OFFSET 0x10000 ++ ++#define AICA_DMA_CHANNEL 0 ++#define AICA_DMA_MODE 5 ++ ++#define SND_AICA_DRIVER "AICA" ++ ++struct aica_channel { ++ uint32_t cmd; /* Command ID */ ++ uint32_t pos; /* Sample position */ ++ uint32_t length; /* Sample length */ ++ uint32_t freq; /* Frequency */ ++ uint32_t vol; /* Volume 0-255 */ ++ uint32_t pan; /* Pan 0-255 */ ++ uint32_t sfmt; /* Sound format */ ++ uint32_t flags; /* Bit flags */ ++}; ++ ++struct snd_card_aica { ++ struct snd_card *card; ++ struct aica_channel *channel; ++ snd_pcm_substream_t *substream; ++ int clicks; ++ int current_period; ++ struct timer_list timer; ++ int master_volume; ++ int dma_started; ++}; ++ ++/* module parameters */ ++#define CARD_NAME "AICA" ++static int index = -1; ++static char *id; ++static int enable = 1; ++module_param(index, int, 0444); ++MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard."); ++module_param(id, charp, 0444); ++MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard."); ++module_param(enable, bool, 0644); ++MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard."); ++ ++/* Use workqueue */ ++static struct work_struct spu_dma_work; ++static struct workqueue_struct *aica_queue; ++ ++/* Simple platform device */ ++static struct platform_device *pd; ++static struct resource aica_memory_space[2] = { ++ { ++ .name = "AICA ARM CONTROL", ++ .start = ARM_RESET_REGISTER, ++ .flags = IORESOURCE_MEM, ++ .end = ARM_RESET_REGISTER + 3, ++ }, ++ { ++ .name = "AICA Sound RAM", ++ .start = AICA_MEMORY_BASE, ++ .flags = IORESOURCE_MEM, ++ .end = AICA_MEMORY_BASE + AICA_MEMORY_SIZE - 1, ++ }, ++}; ++ ++/* SPU specific functions */ ++/* spu_write_wait - wait for G2-SH FIFO to clear */ ++static inline void spu_write_wait(void) ++{ ++ int time_count; ++ time_count = 0; ++ while (1) { ++ if (!(readl(G2_FIFO) & 0x11)) ++ break; ++ /* To ensure hardware failure doesn't wedge kernel */ ++ time_count++; ++ if (time_count > 0x10000) ++ break; ++ } ++} ++ ++/* spu_memset - write to memory in SPU address space */ ++static void spu_memset(uint32_t toi, uint32_t what, int length) ++{ ++ int i; ++ snd_assert(length % 4 == 0, return); ++ spu_write_wait(); ++ for (i = 0; i < length; i++) { ++ writel(what, toi + AICA_MEMORY_BASE); ++ toi++; ++ if (i && !(i % 8)) ++ spu_write_wait(); ++ } ++} ++ ++/* spu_memload - write to SPU address space */ ++static void spu_memload(uint32_t toi, void __iomem * from, int length) ++{ ++ uint32_t __iomem *froml = from; ++ uint32_t __iomem *to = (uint32_t __iomem *) (AICA_MEMORY_BASE + toi); ++ int i, val; ++ if (length % 4) ++ length = (length / 4) + 1; ++ else ++ length = length / 4; ++ spu_write_wait(); ++ for (i = 0; i < length; i++) { ++ val = *froml; ++ writel(val, to); ++ froml++; ++ to++; ++ if (i && !(i % 8)) ++ spu_write_wait(); ++ } ++} ++ ++/* spu_disable - set spu registers to stop sound output */ ++static void spu_disable(void) ++{ ++ int i; ++ uint32_t regval; ++ spu_write_wait(); ++ regval = readl(ARM_RESET_REGISTER); ++ regval |= 1; ++ spu_write_wait(); ++ writel(regval, ARM_RESET_REGISTER); ++ for (i = 0; i < 64; i++) { ++ spu_write_wait(); ++ regval = readl(AICA_REGISTER_BASE + (i * 0x80)); ++ regval = (regval & ~0x4000) | 0x8000; ++ spu_write_wait(); ++ writel(regval, AICA_REGISTER_BASE + (i * 0x80)); ++ } ++} ++ ++/* spu_enable - set spu registers to enable sound output */ ++static void spu_enable(void) ++{ ++ uint32_t regval = readl(ARM_RESET_REGISTER); ++ regval &= ~1; ++ spu_write_wait(); ++ writel(regval, ARM_RESET_REGISTER); ++} ++ ++/* ++ * Halt the sound processor, clear the memory, ++ * load some default ARM7 code, and then restart ARM7 ++*/ ++static void spu_reset(void) ++{ ++ spu_disable(); ++ spu_memset(0, 0, 0x200000 / 4); ++ /* Put ARM7 in endless loop */ ++ ctrl_outl(0xea000002, AICA_MEMORY_BASE); ++ spu_enable(); ++} ++ ++/* aica_chn_start - write to spu to start playback */ ++static void aica_chn_start(void) ++{ ++ spu_write_wait(); ++ writel(AICA_CMD_KICK | AICA_CMD_START, (uint32_t *) AICA_CONTROL_POINT); ++} ++ ++/* aica_chn_halt - write to spu to halt playback */ ++static void aica_chn_halt(void) ++{ ++ spu_write_wait(); ++ writel(AICA_CMD_KICK | AICA_CMD_STOP, (uint32_t *) AICA_CONTROL_POINT); ++} ++ ++/* ALSA code below */ ++static struct snd_pcm_hardware snd_pcm_aica_playback_hw = { ++ .info = (SNDRV_PCM_INFO_NONINTERLEAVED), ++ .formats = ++ (SNDRV_PCM_FMTBIT_S8 | SNDRV_PCM_FMTBIT_S16_LE | ++ SNDRV_PCM_FMTBIT_IMA_ADPCM), ++ .rates = SNDRV_PCM_RATE_8000_48000, ++ .rate_min = 8000, ++ .rate_max = 48000, ++ .channels_min = 1, ++ .channels_max = 2, ++ .buffer_bytes_max = AICA_BUFFER_SIZE, ++ .period_bytes_min = AICA_PERIOD_SIZE, ++ .period_bytes_max = AICA_PERIOD_SIZE, ++ .periods_min = AICA_PERIOD_NUMBER, ++ .periods_max = AICA_PERIOD_NUMBER, ++}; ++ ++static int aica_dma_transfer(int channels, int buffer_size, ++ struct snd_pcm_substream *substream) ++{ ++ int q, err, period_offset; ++ struct snd_card_aica *dreamcastcard; ++ struct snd_pcm_runtime *runtime; ++ err = 0; ++ dreamcastcard = substream->pcm->private_data; ++ period_offset = dreamcastcard->clicks; ++ period_offset %= (AICA_PERIOD_NUMBER / channels); ++ runtime = substream->runtime; ++ for (q = 0; q < channels; q++) { ++ err = dma_xfer(AICA_DMA_CHANNEL, ++ (unsigned long)(runtime->dma_area + ++ (AICA_BUFFER_SIZE * q) / ++ channels + ++ AICA_PERIOD_SIZE * ++ period_offset), ++ AICA_CHANNEL0_OFFSET + q * CHANNEL_OFFSET + ++ AICA_PERIOD_SIZE * period_offset, ++ buffer_size / channels, AICA_DMA_MODE); ++ if (unlikely(err < 0)) ++ break; ++ dma_wait_for_completion(AICA_DMA_CHANNEL); ++ } ++ return err; ++} ++ ++static void startup_aica(struct snd_card_aica *dreamcastcard) ++{ ++ spu_memload(AICA_CHANNEL0_CONTROL_OFFSET, ++ (uint8_t *) dreamcastcard->channel, ++ sizeof(struct aica_channel)); ++ aica_chn_start(); ++} ++ ++ ++static void execute_spu_dma(void *sstream) ++{ ++ int buffer_size; ++ struct snd_pcm_substream *substream; ++ struct snd_pcm_runtime *runtime; ++ struct snd_card_aica *dreamcastcard; ++ substream = sstream; ++ dreamcastcard = substream->pcm->private_data; ++ runtime = substream->runtime; ++ if (unlikely(dreamcastcard->dma_started == 0)) ++ { ++ buffer_size = frames_to_bytes(runtime, runtime->buffer_size); ++ if (runtime->channels > 1) ++ dreamcastcard->channel->flags |= 0x01; ++ aica_dma_transfer(runtime->channels, buffer_size, substream); ++ startup_aica(dreamcastcard); ++ dreamcastcard->clicks = ++ buffer_size / (AICA_PERIOD_SIZE * runtime->channels); ++ dreamcastcard->dma_started = 1; ++ } ++ else ++ { ++ aica_dma_transfer(runtime->channels, ++ AICA_PERIOD_SIZE * runtime->channels, substream); ++ snd_pcm_period_elapsed(dreamcastcard->substream); ++ dreamcastcard->clicks++; ++ dreamcastcard->clicks %= AICA_PERIOD_NUMBER; ++ mod_timer(&dreamcastcard->timer, jiffies+1); ++ } ++ ++} ++ ++static void aica_period_elapsed(unsigned long timer_var) ++{ ++ /*timer fuction - so cannot sleep */ ++ int play_period; ++ struct snd_pcm_runtime *runtime; ++ struct snd_pcm_substream *substream; ++ struct snd_card_aica *dreamcastcard; ++ substream = (struct snd_pcm_substream *)timer_var; ++ runtime = substream->runtime; ++ dreamcastcard = substream->pcm->private_data; ++ /* Have we played out an additional period? */ ++ play_period = ++ frames_to_bytes(runtime, ++ readl ++ (AICA_CONTROL_CHANNEL_SAMPLE_NUMBER)) / ++ AICA_PERIOD_SIZE; ++ if (play_period == dreamcastcard->current_period) { ++ /* reschedule the timer */ ++ mod_timer(&dreamcastcard->timer, jiffies+1); ++ return; ++ } ++ if (runtime->channels > 1) ++ dreamcastcard->current_period = play_period; ++ queue_work(aica_queue, &spu_dma_work); ++} ++ ++static int snd_aicapcm_pcm_open(struct snd_pcm_substream ++ *substream) ++{ ++ struct snd_pcm_runtime *runtime; ++ struct aica_channel *channel; ++ struct snd_card_aica *dreamcastcard; ++ if (!enable) ++ return -ENOENT; ++ dreamcastcard = substream->pcm->private_data; ++ channel = kmalloc(sizeof(struct aica_channel), GFP_KERNEL); ++ if (!channel) ++ return -ENOMEM; ++ /* set defaults for channel */ ++ channel->sfmt = SM_8BIT; ++ channel->cmd = AICA_CMD_START; ++ channel->vol = dreamcastcard->master_volume; ++ channel->pan = 0x80; ++ channel->pos = 0; ++ channel->flags = 0; /* default to mono */ ++ dreamcastcard->channel = channel; ++ runtime = substream->runtime; ++ runtime->hw = snd_pcm_aica_playback_hw; ++ spu_enable(); ++ dreamcastcard->clicks = 0; ++ dreamcastcard->current_period = 0; ++ dreamcastcard->dma_started = 0; ++ return 0; ++} ++ ++static int snd_aicapcm_pcm_close(struct snd_pcm_substream ++ *substream) ++{ ++ struct snd_card_aica *dreamcastcard = substream->pcm->private_data; ++ del_timer(&dreamcastcard->timer); ++ kfree(dreamcastcard->channel); ++ spu_disable(); ++ return 0; ++} ++ ++static int snd_aicapcm_pcm_hw_free(struct snd_pcm_substream ++ *substream) ++{ ++ /* Free the DMA buffer */ ++ return snd_pcm_lib_free_pages(substream); ++} ++ ++static int snd_aicapcm_pcm_hw_params(struct snd_pcm_substream ++ *substream, struct snd_pcm_hw_params ++ *hw_params) ++{ ++ /* Allocate a DMA buffer using ALSA built-ins */ ++ return ++ snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params)); ++} ++ ++static int snd_aicapcm_pcm_prepare(struct snd_pcm_substream ++ *substream) ++{ ++ struct snd_card_aica *dreamcastcard = substream->pcm->private_data; ++ if ((substream->runtime)->format == SNDRV_PCM_FORMAT_S16_LE) ++ dreamcastcard->channel->sfmt = SM_16BIT; ++ dreamcastcard->channel->freq = substream->runtime->rate; ++ dreamcastcard->substream = substream; ++ return 0; ++} ++ ++ ++ ++static void spu_begin_dma(struct snd_pcm_substream *substream) ++{ ++ /* Must be atomic */ ++ struct snd_card_aica *dreamcastcard; ++ struct snd_pcm_runtime *runtime; ++ runtime = substream->runtime; ++ dreamcastcard = substream->pcm->private_data; ++ /* Use queue to do the heavy lifting */ ++ INIT_WORK(&spu_dma_work, execute_spu_dma, substream); ++ queue_work(aica_queue, &spu_dma_work); ++ init_timer(&(dreamcastcard->timer)); ++ dreamcastcard->timer.data = (unsigned long)substream; ++ dreamcastcard->timer.function = aica_period_elapsed; ++ dreamcastcard->timer.expires = jiffies + 4; ++ add_timer(&(dreamcastcard->timer)); ++} ++ ++static int snd_aicapcm_pcm_trigger(struct snd_pcm_substream ++ *substream, int cmd) ++{ ++ struct snd_card_aica *dreamcastcard; ++ switch (cmd) { ++ case SNDRV_PCM_TRIGGER_START: ++ spu_begin_dma(substream); ++ break; ++ case SNDRV_PCM_TRIGGER_STOP: ++ dreamcastcard = substream->pcm->private_data; ++ if (dreamcastcard->timer.data) ++ del_timer(&dreamcastcard->timer); ++ aica_chn_halt(); ++ break; ++ default: ++ return -EINVAL; ++ } ++ return 0; ++} ++ ++static unsigned long snd_aicapcm_pcm_pointer(struct snd_pcm_substream ++ *substream) ++{ ++ return readl(AICA_CONTROL_CHANNEL_SAMPLE_NUMBER); ++} ++ ++static struct snd_pcm_ops snd_aicapcm_playback_ops = { ++ .open = snd_aicapcm_pcm_open, ++ .close = snd_aicapcm_pcm_close, ++ .ioctl = snd_pcm_lib_ioctl, ++ .hw_params = snd_aicapcm_pcm_hw_params, ++ .hw_free = snd_aicapcm_pcm_hw_free, ++ .prepare = snd_aicapcm_pcm_prepare, ++ .trigger = snd_aicapcm_pcm_trigger, ++ .pointer = snd_aicapcm_pcm_pointer, ++}; ++ ++/* TO DO: set up to handle more than one pcm instance */ ++static int __init snd_aicapcmchip(struct snd_card_aica ++ *dreamcastcard, int pcm_index) ++{ ++ struct snd_pcm *pcm; ++ int err; ++ /* AICA has no capture ability */ ++ err = ++ snd_pcm_new(dreamcastcard->card, "AICA PCM", pcm_index, 1, 0, &pcm); ++ if (unlikely(err < 0)) ++ return err; ++ pcm->private_data = dreamcastcard; ++ strcpy(pcm->name, "AICA PCM"); ++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, ++ &snd_aicapcm_playback_ops); ++ /* Allocate the DMA buffers */ ++ err = ++ snd_pcm_lib_preallocate_pages_for_all(pcm, ++ SNDRV_DMA_TYPE_CONTINUOUS, ++ snd_dma_continuous_data ++ (GFP_KERNEL), ++ AICA_BUFFER_SIZE, ++ AICA_BUFFER_SIZE); ++ return err; ++} ++ ++/* Mixer controls */ ++static int aica_pcmswitch_info(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_info *uinfo) ++{ ++ uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN; ++ uinfo->count = 1; ++ uinfo->value.integer.min = 0; ++ uinfo->value.integer.max = 1; ++ return 0; ++} ++ ++static int aica_pcmswitch_get(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ ucontrol->value.integer.value[0] = 1; /* TO DO: Fix me */ ++ return 0; ++} ++ ++static int aica_pcmswitch_put(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ if (ucontrol->value.integer.value[0] == 1) ++ return 0; /* TO DO: Fix me */ ++ else ++ aica_chn_halt(); ++ return 0; ++} ++ ++static int aica_pcmvolume_info(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_info *uinfo) ++{ ++ uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; ++ uinfo->count = 1; ++ uinfo->value.integer.min = 0; ++ uinfo->value.integer.max = 0xFF; ++ return 0; ++} ++ ++static int aica_pcmvolume_get(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_card_aica *dreamcastcard; ++ dreamcastcard = kcontrol->private_data; ++ if (unlikely(!dreamcastcard->channel)) ++ return -ETXTBSY; /* we've not yet been set up */ ++ ucontrol->value.integer.value[0] = dreamcastcard->channel->vol; ++ return 0; ++} ++ ++static int aica_pcmvolume_put(struct snd_kcontrol *kcontrol, ++ struct snd_ctl_elem_value *ucontrol) ++{ ++ struct snd_card_aica *dreamcastcard; ++ dreamcastcard = kcontrol->private_data; ++ if (unlikely(!dreamcastcard->channel)) ++ return -ETXTBSY; ++ if (unlikely(dreamcastcard->channel->vol == ++ ucontrol->value.integer.value[0])) ++ return 0; ++ dreamcastcard->channel->vol = ucontrol->value.integer.value[0]; ++ dreamcastcard->master_volume = ucontrol->value.integer.value[0]; ++ spu_memload(AICA_CHANNEL0_CONTROL_OFFSET, ++ (uint8_t *) dreamcastcard->channel, ++ sizeof(struct aica_channel)); ++ ++ return 1; ++} ++ ++static struct snd_kcontrol_new snd_aica_pcmswitch_control __devinitdata = { ++ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, ++ .name = "PCM Playback Switch", ++ .index = 0, ++ .info = aica_pcmswitch_info, ++ .get = aica_pcmswitch_get, ++ .put = aica_pcmswitch_put ++}; ++ ++static struct snd_kcontrol_new snd_aica_pcmvolume_control __devinitdata = { ++ .iface = SNDRV_CTL_ELEM_IFACE_MIXER, ++ .name = "PCM Playback Volume", ++ .index = 0, ++ .info = aica_pcmvolume_info, ++ .get = aica_pcmvolume_get, ++ .put = aica_pcmvolume_put ++}; ++ ++static int load_aica_firmware(void) ++{ ++ int err; ++ const struct firmware *fw_entry; ++ err = 0; ++ spu_reset(); ++ err = request_firmware(&fw_entry, "aica_firmware.bin", &pd->dev); ++ if (unlikely(err)) ++ return err; ++ /* write firware into memory */ ++ spu_disable(); ++ spu_memload(0, fw_entry->data, fw_entry->size); ++ spu_enable(); ++ release_firmware(fw_entry); ++ return err; ++} ++ ++static int __devinit add_aicamixer_controls(struct snd_card_aica ++ *dreamcastcard) ++{ ++ int err; ++ err = snd_ctl_add ++ (dreamcastcard->card, ++ snd_ctl_new1(&snd_aica_pcmvolume_control, dreamcastcard)); ++ if (unlikely(err < 0)) ++ return err; ++ err = snd_ctl_add ++ (dreamcastcard->card, ++ snd_ctl_new1(&snd_aica_pcmswitch_control, dreamcastcard)); ++ if (unlikely(err < 0)) ++ return err; ++ return 0; ++} ++ ++static int snd_aica_remove(struct platform_device *devptr) ++{ ++ snd_card_free(platform_get_drvdata(devptr)); ++ platform_set_drvdata(devptr, NULL); ++ return 0; ++} ++ ++static int __init snd_aica_probe(struct platform_device *devptr) ++{ ++ int err; ++ struct snd_card_aica *dreamcastcard; ++ ++ dreamcastcard = kmalloc(sizeof(struct snd_card_aica), GFP_KERNEL); ++ if (unlikely(!dreamcastcard)) ++ return -ENOMEM; ++ dreamcastcard->card = ++ snd_card_new(index, SND_AICA_DRIVER, THIS_MODULE, 0); ++ if (unlikely(!dreamcastcard->card)) { ++ kfree(dreamcastcard); ++ return -ENODEV; ++ } ++ strcpy(dreamcastcard->card->driver, "snd_aica"); ++ strcpy(dreamcastcard->card->shortname, SND_AICA_DRIVER); ++ strcpy(dreamcastcard->card->longname, ++ "Yamaha AICA Super Intelligent Sound Processor for SEGA Dreamcast"); ++ /* Load the PCM 'chip' */ ++ err = snd_aicapcmchip(dreamcastcard, 0); ++ if (unlikely(err < 0)) ++ goto freedreamcast; ++ snd_card_set_dev(dreamcastcard->card, &devptr->dev); ++ dreamcastcard->channel = NULL; ++ /* Add basic controls */ ++ err = add_aicamixer_controls(dreamcastcard); ++ if (unlikely(err < 0)) ++ goto freedreamcast; ++ /* Register the card with ALSA subsystem */ ++ err = snd_card_register(dreamcastcard->card); ++ if (unlikely(err < 0)) ++ goto freedreamcast; ++ platform_set_drvdata(devptr, dreamcastcard->card); ++ aica_queue = create_workqueue("aica"); ++ if (unlikely(!aica_queue)) ++ goto freedreamcast; ++ snd_printk ++ ("ALSA Driver for Yamaha AICA Super Intelligent Sound Processor\n"); ++ return 0; ++ freedreamcast: ++ snd_card_free(dreamcastcard->card); ++ kfree(dreamcastcard); ++ return err; ++} ++ ++static struct platform_driver snd_aica_driver = { ++ .probe = snd_aica_probe, ++ .remove = snd_aica_remove, ++ .driver = { ++ .name = SND_AICA_DRIVER ++ }, ++}; ++ ++static int __init aica_init(void) { ++ int err; ++ err = platform_driver_register(&snd_aica_driver); ++ if (unlikely(err < 0)) return err; ++ pd = platform_device_register_simple(SND_AICA_DRIVER, -1, ++ aica_memory_space, 2); ++ if (unlikely(IS_ERR(pd))) { ++ platform_driver_unregister(&snd_aica_driver); ++ return PTR_ERR(pd); ++ } ++ err = load_aica_firmware(); ++ if (unlikely(err < 0)) { ++ platform_driver_unregister(&snd_aica_driver); ++ platform_device_unregister(pd); ++ return err; ++ } ++ return 0; ++} ++ ++static void __exit aica_exit(void) ++{ ++ /* Flush and destroy the aica kernel thread */ ++ destroy_workqueue(aica_queue); ++ platform_device_unregister(pd); ++ platform_driver_unregister(&snd_aica_driver); ++ /* Kill any sound still playing and reset ARM7 to safe state */ ++ spu_reset(); ++} ++ ++module_init(aica_init); ++module_exit(aica_exit); ++ +diff -ruN linux-2.6.17-vanilla/sound/sh/aica.h linux-2.6.17/sound/sh/aica.h +--- linux-2.6.17-vanilla/sound/sh/aica.h 1970-01-01 00:00:00.000000000 +0000 ++++ linux-2.6.17/sound/sh/aica.h 2006-07-12 16:54:27.000000000 +0000 +@@ -0,0 +1,44 @@ ++/* ++* This code is licenced under ++* the General Public Licence ++* version 2 ++* ++* Copyright Adrian McMenamin 2006 ++* <adrian@mcmen.demon.co.uk> ++* See also http://newgolddream.dyndns.info/cgi-bin/cvsweb ++* ++* ++* This program is free software; you can redistribute it and/or modify ++* it under the terms of version 2 of the GNU General Public License as published by ++* the Free Software Foundation. ++* ++* This program is distributed in the hope that it will be useful, ++* but WITHOUT ANY WARRANTY; without even the implied warranty of ++* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++* GNU General Public License for more details. ++* ++* You should have received a copy of the GNU General Public License ++* along with this program; if not, write to the Free Software ++* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ++* ++*/ ++ ++#ifndef _ASM_DREAMCAST_AICA ++#define _ASM_DREAMCAST_AICA ++ ++#ifdef MACH_DREAMCAST ++/* SPU memory and register constants etc */ ++#define G2_FIFO 0xa05f688c ++#define AICA_MEMORY_BASE 0xA0800000 ++#define ARM_RESET_REGISTER 0xA0702C00 ++#define AICA_REGISTER_BASE 0xA0700000 ++ ++/* AICA channels stuff */ ++#define AICA_CONTROL_POINT 0xA0810000 ++#define AICA_CONTROL_CHANNEL_SAMPLE_NUMBER 0xA0810008 ++#define AICA_MEMORY_SIZE 0x200000 ++#define AICA_CHANNEL0_CONTROL_OFFSET 0x10004 ++#endif ++ ++#endif ++ |