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 + + Dreamcast AICA driver tidy + + * sound/sh/aica.c: code tidying of whitespace and returns + * sound/sh/Kconfig: tidying + + +2006-06-04 Adrian McMenamin + + 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 + + * 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 + + * arch/sh/kernel/irq_onchip.c (init_IRQ): Initialize the interrupt + controller. + +1999-12-19 NIIBE Yutaka + + * 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 + + * 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 + + * arch/sh/config.in: Added PCI support configuration. + * arch/sh/kernel/time.c (get_cpu_mhz): New function. + +1999-12-11 NIIBE Yutaka + + * include/asm-sh/cache.h: Follow the change of 2.3.30. + +1999-12-09 NIIBE Yutaka + + * include/asm-sh/irq.h (TIMER_IPR_OFFSET): Spell fixed. + +1999-12-07 NIIBE Yutaka + + * 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 + + * arch/sh/kernel/time.c (time_init): Implement better mesurement + using RTC interrupt. + +1999-11-28 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * arch/sh/kernel/time.c (time_init): Implement getting clock + (system clock and module clock) information. + +1999-11-18 NIIBE Yutaka + + * 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 + + * 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 + + * include/asm-sh/io.h (ctrl_in, ctrl_out): New macro. + +1999-11-15 Sugioka Toshinobu + + * arch/sh/kernel/entry.S (system_call): Bug fix. Change + cmp/ge --> cmp/hs. + +1999-11-14 NIIBE Yutaka + + * arch/sh/kernel/irq_onchip.c: Include . + + * include/asm-sh/dma.h: Include . + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/kernel/sys_sh.c (sys_mmap): Bug fix for arguments. + +1999-11-03 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/lib/checksum.S: Bug fix. Change bf/s --> bt/s. + +1999-10-28 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * include/asm-sh/spinlock.h: This file is used only for SMP. + Reported by Manfred Spraul. + +1999-10-24 NIIBE Yutaka + + * 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 + + * include/asm-sh/pgtable.h (pte_pagenr): substract the offset + __MEMORY_START. + (mk_pte): add the offset __MEMORY_START. + +1999-10-22 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/config.in, arch/sh/kernel/time.c (set_rtc_time): + Implemented. + +1999-10-14 NIIBE Yutaka + + * arch/sh/kernel/entry.S (system_call): Bug fix of the case + with arguments on the stack. + +1999-10-12 NIIBE Yutaka + + * 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 + + * 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 + and Tetsuya Okada + +1999-10-10 Tetsuya Okada + + * arch/sh/kernel/time.c (get_rtc_time): Implemented for on chip + RTC. + +1999-10-09 NIIBE Yutaka + + * 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 + + * 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 + + * arch/sh/mm/init.c: Initialized to MMU_CONTEXT_FIRST_VERSION. + +1999-10-05 NIIBE Yutaka + + * 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 + + * 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 + + * arch/sh/kernel/irq_onchip.c + (enable_onChip_irq,disable_onChip_irq): Fixed the address + calculation. + +1999-10-02 NIIBE Yutaka + + * 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 + + * drivers/char/sh-scif.c: Conditionalize with + CONFIG_DEBUG_KERNEL_WITH_GDB_STUB. + +1999-09-28 NIIBE Yutaka + + * 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 + + * 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 . + +1999-09-23 NIIBE Yutaka + + * 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 + + * 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 + + * 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 , 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 + + * include/asm-sh/{atomic.h,bitops.h}: Use save_and_cli. + +1999-09-19 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 . + +1999-09-13 NIIBE Yutaka + + * 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 . + +1999-09-12 NIIBE Yutaka + + * arch/sh/kernel/entry.S: Add SH-4 Support. + +1999-09-09 NIIBE Yutaka + + * include/asm-sh/hardirq.h (synchronize_irq): barrier. + +1999-09-08 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 . + * 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 + + * include/asm-sh/unistd.h (_syscall0,1,2,3,4): Add "memory" clobber. + +1999-09-04 NIIBE Yutaka + + * include/asm-sh/system.h (switch_to): Save/restore GBR, so that + driver can use GBR. Suggested by Toshi Morita . + + * 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 + + * 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 + + * arch/sh/kernel/head.S (CACHE_INIT): Fix to appropriate value 0xd. + +1999-09-02 NIIBE Yutaka + + * arch/sh/Makefile (archmrproper): Delete vmlinux.lds on "mrproper". + +1999-09-01 NIIBE Yutaka + + * 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 + + * include/asm-sh/processor.h (thread_saved_pc): Implemented. + + * arch/sh/kernel/entry.S (interrupt_table): Fill `do_IRQ'. + +1999-08-28 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 . + +1999-08-23 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 + + * Changelog, arch/sh/kernel/Makefile, + arch/sh/kernel/mach_foobar.c: Replaced FOOBAR with DMIDA. + +2000-12-26 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/boot/compressed/head.S (fake_headers_as_bzImage): Added. + +2000-11-23 David Howells + + * 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 + + * 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 + + 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/Makefile (arch/sh/vmlinux.lds): Add -traditional. + (O_OBJS): Add io_generic.o unconditionally. + +2000-11-11 Jesper Skov + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + 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 + + * 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 + + * 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 + + * arch/sh/kernel/time.c (get_cpu_mhz): Add .align 2 for speed + detection. + +2000-10-27 NIIBE Yutaka + + * 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 + + * 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 + + * arch/sh/kernel/sh_ksyms.c (memcpy, memset, memmove, memcmp, + flush_dcache_page): Added. + +2000-09-29 NIIBE Yutaka + + * include/asm-sh/unistd.h (setup): Removed. + +2000-09-28 NIIBE Yutaka + + * include/asm-sh/system.h (switch_to): Add T-flag to the clobber + list of asm statements. + +2000-09-28 Jesper Skov + + * 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 + + * arch/sh/kernel/entry.S (sys_fcntl64): Added. + * include/asm/unistd.h (__NR_fcntl64): Added. + +2000-09-27 NIIBE Yutaka + + * 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 + + * include/asm-sh/system.h (smp_mb, smp_rmb, smp_wmb): Use CONFIG_SMP + instead of __SMP__. + +2000-09-25 NIIBE Yutaka + + * 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 + + 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 + + * 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 + + * 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 + + 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 + + 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 + + * include/asm-sh/pgtable.h (flush_cache_page): Do nothing. + * arch/sh/mm/cache.c (flush_cache_page): Removed. + +2000-09-08 NIIBE Yutaka + + * 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 + + 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 + + * arch/sh/kernel/irq_ipr.c (make_ipr_irq): Initialize status, action + and depth field. + +2000-09-04 SUGIOKA Toshinobu + + * 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 + + 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/kernel/head.S: Move the alignment expression before .text + directive. + +2000-08-28 NIIBE Yutaka + + * Updated to 2.4.0-test7. + +2000-08-25 Jesper Skov + + * arch/sh/vmlinux.lds.S: Discard .exitcalls from modules. + + * Documentation/Configure.help: Fixed CPU selection description. + +2000-08-24 Bryan Rittmeyer + + * drivers/char/sh-sci.h (BPS_57600): Added. + * drivers/char/sh-sci.c (sci_set_baud): Support 57600 baud. + +2000-08-24 Toshinobu Sugioka + + * net/ipv4/ip_sockglue.c: Include + . + +2000-08-24 NIIBE Yutaka + + * 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 + + (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 + + 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 . + * 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 . + * arch/sh/kernel/io.c: Ditto. + * arch/sh/kernel/io_generic.c: Likewise. + +2000-08-20 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/mm/cache.c (check_cache_page): Renamed from + check_dcache_page. + +2000-08-10 NIIBE Yutaka + + * 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 + + * 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 . + + * 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 + + 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 + + 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 + + * 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 + + * 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 + + 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 + + (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 + + * arch/sh/overdrive/io.c: Include . + + * 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 . + + * 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 + + * 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 + + * 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 + + (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 + + * include/asm-sh/bugs.h (check_bugs): Distinguish CPU type. + +2000-07-30 NIIBE Yutaka + + Updated to 2.4.0-test5. + +2000-07-27 NIIBE Yutaka + + Updated to 2.4.0-test5-pre6. + + * include/asm-sh/sh_bios.h: Don't include + . + +2000-07-26 NIIBE Yutaka + + 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 instead of + . + + * arch/sh/kernel/setup.c: We (already) include , + don't need including for CONFIG_SH_EARLY_PRINTK again. + + * include/asm-sh/checksum.h: Include . + + * include/asm-sh/serial.h: Not include . + + * mm/mmap.c (exit_mmap): Flushing TLB is not needed. + +2000-07-24 NIIBE Yutaka + + Updated to 2.4.0-test5-pre4. + + * drivers/char/sh-sci.c: IRDA is for SH7709 only. + +2000-07-22 NIIBE Yutaka + + * 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 + + * 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 + + Follow the changes of 2.4.0-test5-pre3. + * arch/sh/defconfig: Updated. + +2000-07-20 YAEGASHI Takeshi + + * 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 + + * 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 + + * arch/sh/mm/fault.c (update_mmu_cache): Bug fix. Avoid aliases + for shared page. + Reported by Stuart Menefy 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 + + * 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 + + * arch/sh/kernel/io_generic.c (insw, insl, outsw, outsl): Work + around implemented. + +2000-07-11 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + 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 + + 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 + + * arch/sh/kernel/cf-enabler.c (cf_init): Use ctrl_outw instead + of outw. + +2000-06-25 NIIBE Yutaka + + Follow the change of 2.4.0-test2. + * arch/sh/kernel/time.c: Include . + * include/asm-sh/keyboard.h: Likewise. + * arch/sh/defconfig: Updated. + +2000-06-22 Stuart Menefy + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 . + + * 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 + + * arch/sh/Makefile (CFLAGS, AFLAGS, LDFLAGS): Support big endian. + +2000-06-08 NIIBE Yutaka + + * 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 + + * include/asm-sh/pgtable.h (mk_pte_phys): Don't add + __MEMORY_START. + 2000-05-18 change is wrong. + +2000-06-07 Toshiharu Nozawa + + 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 + + * 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 + + * 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 , 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 + + 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 + + * 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 . + +2000-05-18 NIIBE Yutaka + + * 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 + + * 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 + + * arch/sh/boot/compressed/Makefile (head.o): Remove dependency + to $(TOPDIR)/include/linux/tasks.h. + + * arch/sh/boot/compressed/head.S: Removed #include . + +2000-05-16 NIIBE Yutaka + + 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 + + * 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 + + * 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 . + + * include/asm-sh/unistd.h (_syscall5): Bug fix. + + * arch/sh/kernel/irq.c (init_irq_proc): Added. + +2000-05-09 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + 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 + + * 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 + + 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 + + * 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 + + * 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 + + 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 + + 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 + + * Updated to 2.3.99-pre6-5. + +2000-04-22 NIIBE Yutaka + + * 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 + + * 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 + + 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * include/asm-sh/ptrace.h (UBC_*): Fix the values. + +2000-04-01 NIIBE Yutaka + + * include/asm-sh/hardirq.h (in_interrupt): Bug fix. + (local_bh_count): Moved from softirq.h. + +2000-03-25 NIIBE Yutaka + + * 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 + + 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 + + * include/asm-sh/uaccess.h (__clear_user): Bug fix. + (__strncpy_from_user): Bug fix. + +2000-03-20 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * include/asm-sh/sigcontext.h: Added members for FPU registers. + (Originally done by Kaz Kojima) + +2000-03-07 Terumitsu Kohama + + * drivers/char/sh-sci.h (SCBRR_VALUE): Fix the expression. + +2000-03-07 Sugioka Toshinobu + + * 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 + + * 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 + + Use IMASK for cli/sti (instead of BL). + Suggested by Sugioka Toshinobu . + (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 + + * 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 + + * drivers/char/sh-sci.c (sci_set_baud), drivers/char/sh-sci.h + (BPS_*): Support more BPSs. + +2000-03-05 NIIBE Yutaka + + 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 + + * arch/sh/lib/div.S: New file. + * arch/sh/kernel/fpu.c (enable_fpu_in_danger): New function. + +2000-03-03 NIIBE Yutaka + + * include/asm-sh/system.h (__restore_flags): Inherit IMASK and SR. + +2000-03-02 NIIBE Yutaka + + * include/asm-sh/processor.h (clear_fpu): Don't release_fpu(). + +2000-03-01 Sugioka Toshinobu + + * arch/sh/mm/fault.c (__flush_tlb_page): Bug fix. The mask value + was wrong (was: 0x30). + +2000-02-29 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + Follow the changes of 2.3.45-47. + * include/asm-sh/page.h (get_order): Added. + +2000-02-14 NIIBE Yutaka + + 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 + + * 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 + + 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 + + * 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 + + * 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 + + 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 + + * arch/sh/mm/fault.c (update_mmu_cache): Set PTEH register. + +2000-01-30 NIIBE Yutaka + + 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 + + * 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 + + * include/asm-sh/dma.h (MAX_DMA_ADDRESS): All area (512MB) can + be used with DMA. + +2000-01-25 Toshiharu Nozawa + + * arch/sh/mm/init.c (paging_init): Bug fix for + zones_size[ZONE_NORMAL]. + +2000-01-23 NIIBE Yutaka + + * 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 + + * arch/sh/kernel/sys_sh.c (sys_pipe): Follow the ABI of Kaz' + Implementation. + +2000-01-21 NIIBE Yutaka + + * 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 + + * drivers/char/sh-sci.c (sci_er_interrupt): Kick transmission. + +2000-01-15 NIIBE Yutaka + + * include/asm-sh/unistd.h (__NR_getrlimit, __NR_umount): Compatibility + change for libc. + +2000-01-13 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * include/asm-sh/pgtable.h (pgprot_noncached): Defined and + implemented. + +2001-12-16 Paul Mundt + + * 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 + + * 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 + + * 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 + + * arch/sh/kernel/sys_sh.c-1.7: Removed. + +2001-12-10 NIIBE Yutaka + + * mm/memory.c (do_wp_page): Re-introduce ifdef-out-ing + flush_cache_page. + +2001-12-06 M. R. Brown + + * 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 + * Include gdrom compile patch from Robert M. Love + * drivers/net/gdrom.c: as per patch + * include/asm-sh/segment.h: new file as per patch + +2001-12-03 Jeremy Siegel + * init/main.c: Robert Love's 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 + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * Updated to 2.4.13-pre2. + +2001-10-12 David Woodhouse + + * arch/sh/config.in: Set default memory sizes for Solution Engines + +2001-10-11 NIIBE Yutaka + + * Updated to 2.4.12. + * Updated to 2.4.11. + +2001-10-04 Paul Mundt + + * arch/sh/mm/fault.c (do_page_fault): Don't kill init when out + of memory. + +2001-10-01 M. R. Brown + + * drivers/video/pvr2fb.c (pvr2fb_init): Make fb_find_mode() default + to 16bpp instead of 32bpp. + +2001-09-26 NIIBE Yutaka + + * include/asm-sh/uaccess.h (__put_user_u64): New macro. + * arch/sh/kernel/signal.c: Include . + * drivers/char/sh-sci.c (banner): Fix __initdata. + + * Updated to 2.4.10. + +2001-09-15 Paul Mundt + + * arch/sh/Makefile: Remove usage of $(tool_prefix) and needless + redefinition of CROSS_COMPILE. Obey toplevel CROSS_COMPILE + instead. + +2001-09-13 NIIBE Yutaka + + * 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 + + * 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 + + * include/asm-sh/softirq.h (__cpu_raise_softirq): Removed. + * Updated to 2.4.10-pre6. + +2001-09-10 David Woodhouse + + * 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 + + * include/asm-sh/keyboard.h (kbd_rate): Removed. + * Updated to 2.4.10-pre4. + +2001-08-31 M. R. Brown + + * 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 + + * include/asm-sh/system.h: make __cli_and_save() volatile again + +2001-08-24 David Woodhouse + + * 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 + + * 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 + + * 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 + + * include/asm-sh/elf.h: Removed inclusion of . + +2001-08-17 NIIBE Yutaka + + * drivers/net/8139too.c: Include . + * 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 + + * 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 + + * 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 + + * Updated to 2.4.8. + +2001-08-10 Jeremy Siegel + 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * include/asm-sh/linux_logo.h: New logo. + +2001-08-08 NIIBE Yutaka + + * 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 + + * drivers/net/8139too.c (rtl8139_hw_start): Added tp->rx_config = 0. + +2001-08-07 NIIBE Yutaka + + * 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 ). + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * include/asm-sh/pgtable.h (__flush_wback_region): Defined for SH3. + +2001-07-29 NIIBE Yutaka + + * 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 + + * 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 + + * arch/sh/Makefile (arch/sh/vmlinux.lds): Revert the change of + 2001-07-27. GCC complains (misunderstand) it. + +2001-07-27 NIIBE Yutaka + + * arch/sh/vmlinux.lds.in (.data.cacheline_aligned): Align 16 for SH3. + Reported by Masahiro ABE . + * 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 . + +2001-07-26 Takashi YOSHII + + * 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 + + * 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 + + * 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 + + * arch/sh/kernel/setup.c (setup_arch): #ifdef mv_unknown to eliminate + warning. + +2001-07-24 NIIBE Yutaka + + * include/asm-sh/segment.h: Removed. + * arch/sh/kernel/pci-sh7751.c: Remove inclusion of . + +2001-07-23 NIIBE Yutaka + + * arch/sh/kernel/time.c (do_timer_interrupt): Remove #if 0 for + sh_do_profile. + +2001-07-23 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * Updated to 2.4.7. + +2001-07-20 Masahiro ABE + + * Documentation/Configure.help (CONFIG_CF_AREA5): Edit text. + +2001-07-19 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + 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 + + * 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 + + * 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 + + * arch/sh/mm/fault.c (__do_page_fault): Bug fix. Don't allow + PGD overrun. + + * arch/sh/kernel/dma.c: Remove inclusion of . + * 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 + + * 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 + + * include/asm-sh/pgalloc.h (__flush_tlb_page): Declared. + * arch/sh/mm/cache.c : Add inclusion , + + (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 + + * 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 + + 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 + + * include/asm-sh/mmzone.h: Remove inclusion of bootmem.h. + +2001-07-12 NIIBE Yutaka + + IRQ handling bug fix. Reported by Masahiro Abe + * 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 + + * 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 + + * 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 + + * include/asm-sh/machvec.h: Bug fix. Move #endif. + +2001-07-11 NIIBE Yutaka + + * 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 + + * 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 + + 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 + + * arch/sh/mm/init.c (paging_init): Use __MEMORY_SIZE_2ND. + +2001-07-08 NIIBE Yutaka + + * arch/sh/config.in (CONFIG_DISCONTIGMEM): Bug fix. Added "then". + By ISHIKAWA Mutsumi . + + * include/asm-sh/page.h (phys_to_page): Bug fixed for paren. + By YAEGASHI Takeshi . + + 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 + + * 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 + + 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 + + * 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 + + * arch/sh/lib/checksum.S: Bug fix. Update R1's value. + +2001-07-04 SUGIOKA Toshinobu + + * 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 + + * arch/sh/kernel/setup.c: Bug fix. 0 for pte_quick. + +2001-07-02 NIIBE Yutaka + + * 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 + + * drivers/net/stnic.c (stnic_probe): Set endian. + Reported by . + +2001-06-30 NIIBE Yutaka + + * 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 + + * arch/sh/kernel/io_se.c (se_outb_p): Bug fix. Remove duplicated + `if' clause. + +2001-06-28 NIIBE Yutaka + + * 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 + + * arch/sh/lib/checksum.S (csum_partial_copy_generic): Performance + tweak. Use @(,RN) addressing mode. Consider pipeline + of SH-3. Perhaps we need different implementation for SH-4. + +2001-06-26 NIIBE Yutaka + + 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 + + * 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 + + * Updated to 2.4.6-pre5. + +2001-06-25 NIIBE Yutaka + + * include/asm-sh/pgtable.h (_PAGE_FLAGS_HARDWARE_MASK): Drop SH-bit + on SH-3. + +2001-06-24 NIIBE Yutaka + + * 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 + + 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 + + * arch/sh/kernel/irq.c (do_IRQ): Bug fix. Clear IRQ_INPROGRESS bit. + + * include/asm-sh/pgtable.h: Include 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * Updated to 2.4.5. + * arch/sh/kernel/rtc.c (set_rtc_time): Removed declaration + of the function abs. + +2001-05-24 Stuart Menefy + + * 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 + + * 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 + + 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 + + * 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 + + * 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 + + 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 + + * Updated to 2.4.5-pre4. + +2001-05-17 YAEGASHI Takeshi + + * 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 + + * 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 + + * 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 + + * include/asm-sh/machvec.h: Bug fix. Don't overwrite the + definition of MACH_SE. + +2001-05-09 NIIBE Yutaka + + 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 + + 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 and . + (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 + + 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 + + * 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 + + * 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 + + * Updated to 2.4.4. + +2001-04-26 NIIBE Yutaka + + * Updated to 2.4.4-pre8. + +2001-04-26 NIIBE Yutaka + + * Updated to 2.4.4-pre7. + +2001-04-24 SUGIOKA Toshinobu + + * 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 + + * lib/rwsem.c: Remove inclusion of linux/bitops.h. + + * Updated to 2.4.4-pre6. + +2001-04-20 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 + + * Updated to 2.4.4-pre4. + +2001-04-14 NIIBE Yutaka + + * Updated to 2.4.4-pre3. + +2001-04-12 NIIBE Yutaka + + * Updated to 2.4.4-pre2. + +2001-04-09 NIIBE Yutaka + + * Updated to 2.4.4-pre1. + +2001-04-01 YAEGASHI Takeshi + + 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 + + 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 + + * include/asm-sh/sigcontext.h (struct sigcontext): Make it + compatible with glibc-2.2.2. + +2001-03-08 SUGIOKA Toshinobu + + * drivers/ide/ide-geometry.c: Added '#ifdef __i386__' + for i386 specific include file. + +2001-03-04 NIIBE Yutaka + + * 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 + + * 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 + + * arch/sh/kernel/sh_ksyms.c (strncat): Added. + +2001-02-24 NIIBE Yutaka + + * 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 + + * arch/sh/kernel/setup_cqreek.c (mv_ioremap, mv_iounmap, + mv_rtc_gettimeofday, mv_rtc_settimeofday): Define. + +2001-02-07 Stuart Menefy + + 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 + + * Updated to 2.4.1. + * arch/sh/kernel/traps.c: Include linux/config.h. + +2001-01-31 Philipp Rumpf + + * 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 + + * Updated to 2.4.1-pre12. + +2001-01-29 NIIBE Yutaka + + * Updated to 2.4.1-pre11. + * arch/sh/kernel/signal.c: Remove the decl. of sys_wait4. + +2001-01-27 Yutaro Ebihara + + * arch/sh/config.in (CONFIG_CF_ENABLER): Valid when + CONFIG_SH_CAT68701. + +2001-01-26 Yutaro Ebihara + + 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 + + * Updated to 2.4.1-pre10. + +2001-01-23 NIIBE Yutaka + + * 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 + + * Updated to 2.4.1-pre3. + +2001-01-10 NIIBE Yutaka + + * arch/sh/kernel/sh_ksyms.c (__udivsi3_i4, __sdivsi3_i4): Removed. + +2001-01-10 Bryan Rittmeyer + + * arch/sh/kernel/entry.S: Fixed typo for SR and added "OFF_" for SP. + +2001-01-10 Denis Dowling + + * arch/sh/kernel/entry.S: Change RX-->OFF_RX. + +2001-01-08 NIIBE Yutaka + + * 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 + + * Updated to 2.4.0. + * arch/sh/kernel/rtc.c: Remove the inclusion of . + +2001-01-04 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * Makefile: Bump up the inline-limit to 5000. + +2002-12-16 Paul Mundt + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * drivers/video/pvr2fb.c (pvr2fb_init): Move ID assignment down a bit, + so we don't inadvertently dereference NULL.. + +2002-11-13 Paul Mundt + + * 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 + + 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * include/asm-sh/bugs.h (check_bugs): Added a CPU_SH7751R check. + +2002-10-21 Paul Mundt + + * 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 + + * 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 + + * 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 + + * 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 + + * drivers/char/sh-sci.c (sci_receive_chars): Add dummy read + when copied==0 to clear interrupt. + +2002-06-26 NIIBE Yutaka + + * 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 and . + + * 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 . + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * include/asm-sh/bitops.h (fls): Added. + * arch/sh/kernel/signal.c: Include . + (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 + + * 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 + + * drivers/char/shwdt.c: SH-5 support. Various other cleanups. + +2002-05-23 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/mm/clear_page.S (__clear_user): Bug fix. + +2002-04-12 NIIBE Yutaka + + 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 + + Follow up to 2.5.8-pre2. + * arch/sh/kernel/process.c: Include . + (default_idle): New function. + (cpu_idle): Call default_idle. + + * arch/sh/kernel/signal.c: Include . + + * 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 + + * 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 + + * arch/sh/kernel/traps.c (show_task): Don't use __get_user, + it's kernel space. Assume 80-columns. + +2002-04-06 NIIBE Yutaka + + * arch/sh/kernel/semaphore.c: Inlcude . + +2002-04-05 NIIBE Yutaka + + 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 + + * fs/nfs/inode.c: Added. + (nfs_find_actor): Return 0 when the type of file is not same. + +2002-04-05 NIIBE Yutaka + + * 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 + + 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 + + * 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 + + * 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 + + * arch/sh/kernel/entry.S (work_notifysig): One cycle optimization. + +2002-03-28 NIIBE Yutaka + + * 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 + + * 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 + + * arch/sh/mm/cache-sh4.c (flush_dcache_page): Merged with + __flush_dcache_page. + +2002-03-28 NIIBE Yutaka + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + 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 + + * 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 + + 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 + + * 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 + + * 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 + + * 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 + + * 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 + + 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 + + * 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 . + + * 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 + + * 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 + + * 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 + + * Makefile: Added -sh to EXTRAVERSION. + +2002-02-27 Paul Mundt + + * 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 + + 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 + + * 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 + + 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 + + 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 + + * arch/sh/kernel/io_se.c (delay): More delay needed for + SolutionEngine SH7709A. + +2002-01-25 NIIBE Yutaka + + * 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 + + * 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 + + 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 + + * arch/sh/kernel/process.c: Include . + * arch/sh/kernel/signal.c: . + * 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 + + 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 + + * kernel/ptrace.c (access_process_vm): Added flush_dcache_page + lost in 2.5.2 merge. + +2002-01-19 Paul Mundt + + * 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 + + * include/asm-sh/pci.h (PCI_DMA_BUS_IS_PHYS): Added. + +2002-01-15 NIIBE Yutaka + + Updated to 2.5.2. + * init/main.c (rest_init): Remove call of init_idle(). + * drivers/net/8139too.c: Include , 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 + + 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 . + * arch/sh/kernel/process.c: Include . + (cpu_idle): Don't call init_idle here. Remove setting of ->nice. + +2002-01-05 NIIBE Yutaka + + 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 + + * mm/mmap.c, Makefile: Merge 2.6.0. + +2003-11-28 Kaz Kojima + + * 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 + + * 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 + + * Makefile: Merge 2.6.0-test11. + +2003-11-25 Kaz Kojima + + * include/asm-sh/ptrace.h (struct pt_regs): Add expevt field. + +2003-11-23 Paul Mundt + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/kernel/cpu/sh4/sq.c (__sq_remap, sq_unmap): Build fixes + for MMUless. + +2003-10-31 Kaz Kojima + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + Kaz Kojima + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/boards/snapgear/pci/pci.c: fixup the memory and IO regions + to get PCI working. + +2003-09-17 Paul Mundt + + * arch/sh/drivers/pci/pci-sh7751.c (sh7751_pci_write): Fixup error + path where interrupts weren't getting reenabled. + +2003-09-16 Paul Mundt + + * 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 + + * 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 + + * arch/sh/Kconfig: Reorder CPU family / subtype selection. + +2003-09-06 SUGIOKA Toshinobu + + * arch/sh/lib/div64-generic.c (__div64_32): Bug fix. + +2003-09-03 TAKANO Nobuyuki + Kaz Kojima + + * 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 + + * arch/sh/kernel/signal.c (setup_frame): Set additional arguments + for the signal handler correctly. + (setup_rt_frame): Likewise. + +2003-09-01 Paul Mundt + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/Kconfig: Rename BOOT_LINK_ADDR to BOOT_LINK_OFFSET. + * arch/sh/boot/compressed/Makefile: Likewise. + +2003-08-14 SUGIOKA Toshinobu + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/kernel/ptrace.c: Fix single step. + +2003-07-26 Paul van Gool + + * 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 + + * Documentation/sh/new-machine.txt: Added documentation on how to + work with the new tree. + +2003-07-22 Paul Mundt + + * 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 + + * 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 + + * 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 + + * 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 + + Merge with 2.5.74 ... 2.6.0-test1. + +2003-07-16 Paul Mundt + + * 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 + + * 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 + + * 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 + + * include/asm-sh/system.h (switch_to): Set LAST properly. + +2003-07-06 Dominik Brodowski + Paul Mundt + + * drivers/pcmcia/hd64465_ss.c: Update for new PCMCIA API. + +2003-06-29 Paul Mundt + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/boards/Makefile: New file. + +2003-05-10 SUGIOKA Toshinobu + + * 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 + + * arch/sh/lib/udivdi3.c: New file. + * arch/sh/lib/Makefile (obj-y): Add udivdi3.o. + +2003-05-07 Paul Mundt + + * 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 + Paul Mundt + + * 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 + + * 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 + + * 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 + + Merge with 2.5.67 and 2.5.68. + +2003-04-18 SUGIOKA Toshinobu + + * arch/sh/mm/clear_page.S (__flush_cache_4096): Revert previous change + and modified for efficiency. + +2003-04-17 SUGIOKA Toshinobu + + * arch/sh/mm/clear_page.S (__flush_cache_4096): Don't change associated + data that is to be flushed. + +2003-04-01 Paul Mundt + + * 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 + + * 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 + + Merge with 2.5.47 ... 2.5.61. + +2003-03-29 Paul Mundt + + Merge with 2.5.46. + +2003-03-24 Daniel Jacobowitz + Kaz Kojima + + * arch/sh/kernel/ptrace.c (ubc_set_tracing): Break before executing + instruction. + +2003-03-24 SUGIOKA Toshinobu + + * 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 + + * 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 + + * 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 + + * 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 + + * include/asm-sh/uaccess.h (__access_ok, set_fs, get_fs): Added for + CONFIG_MMU=n. + +2003-01-10 Paul Mundt + + * 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 + + * 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 + + * arch/sh/Makefile: Do a bit of cleaning, and lay the groundwork + for include/asm-sh/cpu/ + +2003-01-01 Paul Mundt + + * 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 + + * 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 + + * include/asm-sh/irq.h: Add CTP/PCI-SH03 IDE. + * include/asm-sh/sh03/ide.h: New file. + +2004-10-25 Paul Mundt + + * 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 + + * arch/sh/kernel/signal.c (get_sigframe): Fix sigaltstack behavior. + +2004-10-15 Tom Rini + + * arch/sh/ramdisk/Makefile: Fix for usage with O= + +2004-10-15 Tom Rini + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/Makefile: Test for machdir-y not being empty before + adding to core-y. + +2004-09-24 Tom Rini + + * drivers/net/8139too.c: Revert changes that moved asserts() around. + +2004-09-24 Tom Rini + + * 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 + + * 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 + + * 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 and + from the #include list. + * The net result is that glibc can now compile with these headers. + +2004-08-19 Alex Bennee + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + More fixups by Hosokawa-san + + * 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 + + * 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 + + * arch/sh/kernel/time.c (time_init): RTS7751R2D and HS7751RVoIP don't + need special handling for the interval value.. + +2004-06-28 Paul Mundt + + * 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 + + * 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 + + * 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 ). + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/kernel/setup.c (show_cpuflags): Fix off-by-1 index + for flag names. + +2004-05-28 Paul Mundt + + * 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 + + * arch/sh/kernel/time.c: Fixed clock detection for ST40 + +2004-05-07 SUGIOKA Toshinobu + + * arch/sh/kernel/ptrace.c (sys_ptrace): Handle PTRACE_SETOPTIONS in + default case. + +2004-05-05 Paul Mundt + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/boot/compressed/misc.c: New file. Fix for gcc-3.4. + +2004-04-21 SUGIOKA Toshinobu + + * include/asm-sh/user.h: New file. Don't include linux/types.h. + +2004-04-15 SUGIOKA Toshinobu + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/mm/consistent.c (consistent_alloc): Fix page freeing logic. + +2004-03-26 Paul Mundt + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + Kaz Kojima + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * drivers/char/sh-sci.c (sci_request_irq): Don't reference + sci_br_interrupt on SCI_ONLY systems. + +2004-02-20 Yutaro Ebihara + + * arch/sh/mm/init.c (mem_init): Set max_mapnr and num_physpages + correctly. + +2004-02-19 Paul Mundt + + * 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 + + * drivers/serial/sh-sci.c, drivers/serial/sh-sci.h: Fix rx interrupt + and sysrq handling. + +2004-02-19 Paul Mundt + Richard Curnow + + * 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 + + * 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 + + * 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 + + * drivers/char/sh-sci.c, drivers/char/sh-sci.h: Add H8/300 support. + +2004-02-06 Kaz Kojima + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * 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 + + * arch/sh/mm/fault.c (update_mmu_cache): Protect __flush_tlb_page + from interrupt. + +2004-01-09 Paul Mundt + + * 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 + + * 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 + + * 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 + + * 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 + + 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 + + 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 + + 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 + + * arch/sh/lib/memset.S (memset): Correct 2nd argument handling. + +2005-06-15 Andriy Skulysh + + 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 + + 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 + + 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 + + Patches from Hosokawa-san : + + * 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 + + * 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 + + * drivers/pcmcia/hd64461_ss.c (hd64461_init_soket): Update + for 2.6.11. + +2005-03-06 Paul Mundt + + * 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 + + 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 + + * 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 + + * drivers/pcmcia/hd64461_ss.c (hd64461_set_mem_map): Fix build problem + with start address. + +2005-01-31 Paul Mundt + + * arch/sh/kernel/cpufreq.c (sh_cpufreq_setstate): Update for cpumask + changes. + +2005-01-31 Paul Mundt + Christoph Hellwig + + * 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 +#include /* 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 + + 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 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 - +#include #include -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 #include +#include #include -#include #include 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 + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SH7709_PGDR 0xa400012c + +#define APM_CRITICAL 10 +#define APM_LOW 30 + +#define HP680_BATTERY_MAX 896 +#define HP680_BATTERY_MIN 628 +#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 + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License. + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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 + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + */ + +#include +#include + +#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 #include +#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 +#include +#include +#include +#include +#include + +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 +#include +#include +#include +#include +#include + +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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include + +#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 + +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 + * Copyright (C) 1999 Tetsuya Okada & Niibe Yutaka + */ +/* + * modifed by kogiidena + * 2005.09.16 + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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 +#include +#include +#include +#include +#include +#include +#include + +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 #include #include +#include #include #include #include -#include -#include -#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 #include #include - +#include +#include #include #include +#include #include #include +#include +#include +#include -#include -#include +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 +#include +#include +#include +#include +#include + +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 +#include +#include +#include +#include +#include + +#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 +#include +#include +#include + +/* 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< +#include +#include +#include +#include +#include + +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 #include -#include +#include #include +#include #include -#include -#include -#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 #include -extern unsigned int debug_counter; - #ifdef CONFIG_HEARTBEAT #include @@ -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 #include #include -#include +#include 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 +#include +#include +#include #include -#include +#include +#include + +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 #include -#include +#include +#include #include #include -#include -#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 #include #include -#include +#include #include /* 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 -#include -#include #include +#include 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 #include -#include #include +#include #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 #include #include -#include +#include /* * 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 #include -#include - -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 /* 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 #include #include -#include -#include +#include 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 * - * */ #include @@ -18,14 +17,6 @@ #include 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 #include -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 #include #include -#include -#include +#include +#include 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 #include #include -#include +#include /* 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 #include #include -#include +#include /* * 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 -#include - -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 +#include /* 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 #include -#include - -#include +#include 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 #include #include -#include -#include +#include +#include /* * 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 #include +#include #include -#include +#include #include -#include -#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 #include #include -#include +#include /* * 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 -#include - -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 +#include /* 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 #include - #include -#include -#include - -#include +#include 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 #include #include - -#include #include #include -#include +#include #ifdef CONFIG_SH_KGDB #include 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 #include #include -#include #include #include +#include +#include #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 #include #include -#include -#include #include +#include #include #include #include -#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 * 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 #include #include #include #include -#include -#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 #include #include - #include -#include -#include /****************************************************************************/ @@ -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 @@ -12,8 +11,6 @@ * Modified for 7751 Solution Engine by * Ian da Silva and Jeremy Siegel, 2001. */ -/****************************************************************************/ - #include #include #include @@ -22,14 +19,13 @@ #include #include #include - #include -#include +#include #include #include +#include #include -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 +#include +#include +#include +#include + +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 +#include +#include +#include + +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 #include -#include +#include #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 #include - -#include +#include 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 #include -#include -#include +#include 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 #include #include -#include +#include 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 #include #include - +#include #include #include #include @@ -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 "); 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 #include -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 "); 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 #include -#include #include #include #include -#include -#include #include #include #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 +#include "pci-sh4.h" +#include + +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 +#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 #include -/* - * 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 #include #include #include -#include #include - #include -#include "pci-sh7751.h" +#include "pci-sh4.h" #include #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 +#include +#include +#include +#include +#include +#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 +#include +#include +#include +#include +#include +#include +#include +#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 #include #include - -#include -#include "pci-sh7751.h" #include +#include +#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 +#include +#include +#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 - * + * * Ported to new API by Paul Mundt * * Highly leveraged from pci-bigsur.c, written by Dustin McIntire. @@ -12,16 +12,12 @@ * * PCI initialization for the SnapGear boards */ - #include #include #include #include -#include #include - -#include -#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 + * + * 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 +#include +#include +#include +#include +#include +#include +#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 #include -#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> 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 + +/* 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 -#include -#include #include #include -#include -#include +#include #include -#include #include - -#include +#include "pci-sh4.h" +#include #include -#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 - -/* 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 + * + * Ported to the new API by Paul Mundt + * With cleanup by Paul van Gool + * + * May be copied or modified under the terms of the GNU General Public + * License. See linux/COPYING for more information. + * + */ + +#undef DEBUG + +#include +#include +#include +#include +#include +#include +#include +#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 - * - * + * Copyright (c) 2004 - 2006 Paul Mundt + * * 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 #include #include +#include + +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 + * + * based on ARM APM driver by + * Jamey Hicks + * + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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 #include - +#include +#include #include #include @@ -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 -#include #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 +#include /* * 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 +#include + +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 +#include +#include +#include #include #include #include #include -#include -#include -#include #include - +#include #include #include -#include +#include #include -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 , M. R. Brown "); 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 +#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 #include -#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 +#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 #include +#ifdef CONFIG_SH_KGDB_CONSOLE +#include +#endif + #include #include #include #include #include #include - -#ifdef CONFIG_SH_KGDB_CONSOLE -#include -#endif +#include /* 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 + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License. + */ +#include +#include +#include +#include +#include +#include +#include + +#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 #define PAGE_SIZE 4096 /* must be same value as in */ - - + + .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 #include -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 #include #include - +#include #include #include 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 +#include +#include + +#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 -#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 + * + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + */ +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "sfp-util.h" +#include +#include +#include + +#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 #include -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 #include +#include +#include #include 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 -#include #include -#include -#include -#include -#include -#include #include -#include -#include -#include -#include - +#include #include -#include -#include -#include #include -#include #include 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 #include #include +#include #include #include #include @@ -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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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 +#include +#include + +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 + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef CONFIG_PROC_FS +#include +#endif + +#include +#include + +#include + +/* 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 +#include +#include +#include +#include +#include +#include +#include + +// @@@@@ 16.09.29 #include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +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 #include +#ifdef CONFIG_KGDB_SYSRQ +#include +#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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#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;iudelay); + } + 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. "); +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 and even + Frodo Looijaard */ + +/* 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 +#include + +/* 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#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. "); +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 +#include +#include + +#include + +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 +#include +#include +#include +#include +#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 +#include +#include +#include +#include +#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 +#include +#include +#include +#include +#include +#include +#include +#include +#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 +#include +#include +#include +#include +#include +#include +#include + +/* + * 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 "); +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 +#include +#include +#include +#include + +#include +#include +#include + +#include + +#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. */ 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 #include -#include +#include #include #ifdef CONFIG_SH_STANDARD_BIOS #include 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 2002, 2003, 2004 + * + * based on hd64461_ss.c by Greg Banks + * + */ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "cs_internal.h" +#include +#include +#include + +#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 "); +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 + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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 "); +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 -#endif - -#ifdef CONFIG_SH_STANDARD_BIOS #include +#include #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 - -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; ibreak_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 +#include +#include +#include +#include + +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 #include -#include +#include #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 "); +MODULE_AUTHOR("Andriy Skulysh "); 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 #include #include +#include #include #include #include #include #include -#include - -#ifdef MACH_HP600 +#include #include #include -#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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include