diff options
-rw-r--r-- | arch/parisc/Kconfig | 2 | ||||
-rw-r--r-- | arch/parisc/include/asm/Kbuild (renamed from include/asm-parisc/Kbuild) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/agp.h (renamed from include/asm-parisc/agp.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/asmregs.h (renamed from include/asm-parisc/asmregs.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/assembly.h (renamed from include/asm-parisc/assembly.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/atomic.h (renamed from include/asm-parisc/atomic.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/auxvec.h (renamed from include/asm-parisc/auxvec.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/bitops.h (renamed from include/asm-parisc/bitops.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/bug.h (renamed from include/asm-parisc/bug.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/bugs.h (renamed from include/asm-parisc/bugs.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/byteorder.h (renamed from include/asm-parisc/byteorder.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/cache.h (renamed from include/asm-parisc/cache.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/cacheflush.h (renamed from include/asm-parisc/cacheflush.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/checksum.h (renamed from include/asm-parisc/checksum.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/compat.h (renamed from include/asm-parisc/compat.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/compat_rt_sigframe.h (renamed from include/asm-parisc/compat_rt_sigframe.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/compat_signal.h (renamed from include/asm-parisc/compat_signal.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/compat_ucontext.h (renamed from include/asm-parisc/compat_ucontext.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/cputime.h (renamed from include/asm-parisc/cputime.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/current.h (renamed from include/asm-parisc/current.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/delay.h (renamed from include/asm-parisc/delay.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/device.h (renamed from include/asm-parisc/device.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/div64.h (renamed from include/asm-parisc/div64.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/dma-mapping.h (renamed from include/asm-parisc/dma-mapping.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/dma.h (renamed from include/asm-parisc/dma.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/eisa_bus.h (renamed from include/asm-parisc/eisa_bus.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/eisa_eeprom.h (renamed from include/asm-parisc/eisa_eeprom.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/elf.h (renamed from include/asm-parisc/elf.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/emergency-restart.h (renamed from include/asm-parisc/emergency-restart.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/errno.h (renamed from include/asm-parisc/errno.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/fb.h (renamed from include/asm-parisc/fb.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/fcntl.h (renamed from include/asm-parisc/fcntl.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/fixmap.h (renamed from include/asm-parisc/fixmap.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/floppy.h (renamed from include/asm-parisc/floppy.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/futex.h (renamed from include/asm-parisc/futex.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/grfioctl.h (renamed from include/asm-parisc/grfioctl.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/hardirq.h (renamed from include/asm-parisc/hardirq.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/hardware.h (renamed from include/asm-parisc/hardware.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/hw_irq.h (renamed from include/asm-parisc/hw_irq.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/ide.h (renamed from include/asm-parisc/ide.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/io.h (renamed from include/asm-parisc/io.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/ioctl.h (renamed from include/asm-parisc/ioctl.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/ioctls.h (renamed from include/asm-parisc/ioctls.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/ipcbuf.h (renamed from include/asm-parisc/ipcbuf.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/irq.h (renamed from include/asm-parisc/irq.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/irq_regs.h (renamed from include/asm-parisc/irq_regs.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/kdebug.h (renamed from include/asm-parisc/kdebug.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/kmap_types.h (renamed from include/asm-parisc/kmap_types.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/led.h (renamed from include/asm-parisc/led.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/linkage.h (renamed from include/asm-parisc/linkage.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/local.h (renamed from include/asm-parisc/local.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/machdep.h (renamed from include/asm-parisc/machdep.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/mc146818rtc.h (renamed from include/asm-parisc/mc146818rtc.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/mckinley.h (renamed from include/asm-parisc/mckinley.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/mman.h (renamed from include/asm-parisc/mman.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/mmu.h (renamed from include/asm-parisc/mmu.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/mmu_context.h (renamed from include/asm-parisc/mmu_context.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/mmzone.h (renamed from include/asm-parisc/mmzone.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/module.h (renamed from include/asm-parisc/module.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/msgbuf.h (renamed from include/asm-parisc/msgbuf.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/mutex.h (renamed from include/asm-parisc/mutex.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/page.h (renamed from include/asm-parisc/page.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/param.h (renamed from include/asm-parisc/param.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/parisc-device.h (renamed from include/asm-parisc/parisc-device.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/parport.h (renamed from include/asm-parisc/parport.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/pci.h (renamed from include/asm-parisc/pci.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/pdc.h (renamed from include/asm-parisc/pdc.h) | 5 | ||||
-rw-r--r-- | arch/parisc/include/asm/pdc_chassis.h (renamed from include/asm-parisc/pdc_chassis.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/pdcpat.h (renamed from include/asm-parisc/pdcpat.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/percpu.h (renamed from include/asm-parisc/percpu.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/perf.h (renamed from include/asm-parisc/perf.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/pgalloc.h (renamed from include/asm-parisc/pgalloc.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/pgtable.h (renamed from include/asm-parisc/pgtable.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/poll.h (renamed from include/asm-parisc/poll.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/posix_types.h (renamed from include/asm-parisc/posix_types.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/prefetch.h (renamed from include/asm-parisc/prefetch.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/processor.h (renamed from include/asm-parisc/processor.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/psw.h (renamed from include/asm-parisc/psw.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/ptrace.h (renamed from include/asm-parisc/ptrace.h) | 10 | ||||
-rw-r--r-- | arch/parisc/include/asm/real.h (renamed from include/asm-parisc/real.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/resource.h (renamed from include/asm-parisc/resource.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/ropes.h (renamed from include/asm-parisc/ropes.h) | 2 | ||||
-rw-r--r-- | arch/parisc/include/asm/rt_sigframe.h (renamed from include/asm-parisc/rt_sigframe.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/rtc.h (renamed from include/asm-parisc/rtc.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/runway.h (renamed from include/asm-parisc/runway.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/scatterlist.h (renamed from include/asm-parisc/scatterlist.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/sections.h (renamed from include/asm-parisc/sections.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/segment.h (renamed from include/asm-parisc/segment.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/sembuf.h (renamed from include/asm-parisc/sembuf.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/serial.h (renamed from include/asm-parisc/serial.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/setup.h (renamed from include/asm-parisc/setup.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/shmbuf.h (renamed from include/asm-parisc/shmbuf.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/shmparam.h (renamed from include/asm-parisc/shmparam.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/sigcontext.h (renamed from include/asm-parisc/sigcontext.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/siginfo.h (renamed from include/asm-parisc/siginfo.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/signal.h (renamed from include/asm-parisc/signal.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/smp.h (renamed from include/asm-parisc/smp.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/socket.h (renamed from include/asm-parisc/socket.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/sockios.h (renamed from include/asm-parisc/sockios.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/spinlock.h (renamed from include/asm-parisc/spinlock.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/spinlock_types.h (renamed from include/asm-parisc/spinlock_types.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/stat.h (renamed from include/asm-parisc/stat.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/statfs.h (renamed from include/asm-parisc/statfs.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/string.h (renamed from include/asm-parisc/string.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/superio.h (renamed from include/asm-parisc/superio.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/system.h (renamed from include/asm-parisc/system.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/termbits.h (renamed from include/asm-parisc/termbits.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/termios.h (renamed from include/asm-parisc/termios.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/thread_info.h (renamed from include/asm-parisc/thread_info.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/timex.h (renamed from include/asm-parisc/timex.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/tlb.h (renamed from include/asm-parisc/tlb.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/tlbflush.h (renamed from include/asm-parisc/tlbflush.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/topology.h (renamed from include/asm-parisc/topology.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/traps.h (renamed from include/asm-parisc/traps.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/types.h (renamed from include/asm-parisc/types.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/uaccess.h (renamed from include/asm-parisc/uaccess.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/ucontext.h (renamed from include/asm-parisc/ucontext.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/unaligned.h (renamed from include/asm-parisc/unaligned.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/unistd.h (renamed from include/asm-parisc/unistd.h) | 10 | ||||
-rw-r--r-- | arch/parisc/include/asm/unwind.h (renamed from include/asm-parisc/unwind.h) | 2 | ||||
-rw-r--r-- | arch/parisc/include/asm/user.h (renamed from include/asm-parisc/user.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/vga.h (renamed from include/asm-parisc/vga.h) | 0 | ||||
-rw-r--r-- | arch/parisc/include/asm/xor.h (renamed from include/asm-parisc/xor.h) | 0 | ||||
-rw-r--r-- | arch/parisc/kernel/.gitignore | 1 | ||||
-rw-r--r-- | arch/parisc/kernel/asm-offsets.c | 3 | ||||
-rw-r--r-- | arch/parisc/kernel/firmware.c | 69 | ||||
-rw-r--r-- | arch/parisc/kernel/head.S | 2 | ||||
-rw-r--r-- | arch/parisc/kernel/ptrace.c | 429 | ||||
-rw-r--r-- | arch/parisc/kernel/real2.S | 12 | ||||
-rw-r--r-- | arch/parisc/kernel/setup.c | 29 | ||||
-rw-r--r-- | arch/parisc/kernel/syscall_table.S | 8 | ||||
-rw-r--r-- | arch/parisc/kernel/time.c | 20 | ||||
-rw-r--r-- | arch/parisc/kernel/unwind.c | 4 | ||||
-rw-r--r-- | drivers/char/agp/parisc-agp.c | 4 | ||||
-rw-r--r-- | drivers/parisc/ccio-dma.c | 43 | ||||
-rw-r--r-- | drivers/rtc/Kconfig | 8 | ||||
-rw-r--r-- | drivers/rtc/Makefile | 1 | ||||
-rw-r--r-- | drivers/rtc/rtc-parisc.c | 111 |
138 files changed, 457 insertions, 318 deletions
diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig index 2bd1f6e..644a70b 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig @@ -9,6 +9,8 @@ config PARISC def_bool y select HAVE_IDE select HAVE_OPROFILE + select RTC_CLASS + select RTC_DRV_PARISC help The PA-RISC microprocessor is designed by Hewlett-Packard and used in many of their workstations & servers (HP9000 700 and 800 series, diff --git a/include/asm-parisc/Kbuild b/arch/parisc/include/asm/Kbuild index f88b252..f88b252 100644 --- a/include/asm-parisc/Kbuild +++ b/arch/parisc/include/asm/Kbuild diff --git a/include/asm-parisc/agp.h b/arch/parisc/include/asm/agp.h index 9651660..9651660 100644 --- a/include/asm-parisc/agp.h +++ b/arch/parisc/include/asm/agp.h diff --git a/include/asm-parisc/asmregs.h b/arch/parisc/include/asm/asmregs.h index d93c646..d93c646 100644 --- a/include/asm-parisc/asmregs.h +++ b/arch/parisc/include/asm/asmregs.h diff --git a/include/asm-parisc/assembly.h b/arch/parisc/include/asm/assembly.h index ffb2088..ffb2088 100644 --- a/include/asm-parisc/assembly.h +++ b/arch/parisc/include/asm/assembly.h diff --git a/include/asm-parisc/atomic.h b/arch/parisc/include/asm/atomic.h index 57fcc4a..57fcc4a 100644 --- a/include/asm-parisc/atomic.h +++ b/arch/parisc/include/asm/atomic.h diff --git a/include/asm-parisc/auxvec.h b/arch/parisc/include/asm/auxvec.h index 9c3ac4b..9c3ac4b 100644 --- a/include/asm-parisc/auxvec.h +++ b/arch/parisc/include/asm/auxvec.h diff --git a/include/asm-parisc/bitops.h b/arch/parisc/include/asm/bitops.h index 7a6ea10..7a6ea10 100644 --- a/include/asm-parisc/bitops.h +++ b/arch/parisc/include/asm/bitops.h diff --git a/include/asm-parisc/bug.h b/arch/parisc/include/asm/bug.h index 8cfc553..8cfc553 100644 --- a/include/asm-parisc/bug.h +++ b/arch/parisc/include/asm/bug.h diff --git a/include/asm-parisc/bugs.h b/arch/parisc/include/asm/bugs.h index 9e62843..9e62843 100644 --- a/include/asm-parisc/bugs.h +++ b/arch/parisc/include/asm/bugs.h diff --git a/include/asm-parisc/byteorder.h b/arch/parisc/include/asm/byteorder.h index db14831..db14831 100644 --- a/include/asm-parisc/byteorder.h +++ b/arch/parisc/include/asm/byteorder.h diff --git a/include/asm-parisc/cache.h b/arch/parisc/include/asm/cache.h index 32c2cca..32c2cca 100644 --- a/include/asm-parisc/cache.h +++ b/arch/parisc/include/asm/cache.h diff --git a/include/asm-parisc/cacheflush.h b/arch/parisc/include/asm/cacheflush.h index b7ca6dc..b7ca6dc 100644 --- a/include/asm-parisc/cacheflush.h +++ b/arch/parisc/include/asm/cacheflush.h diff --git a/include/asm-parisc/checksum.h b/arch/parisc/include/asm/checksum.h index e9639cc..e9639cc 100644 --- a/include/asm-parisc/checksum.h +++ b/arch/parisc/include/asm/checksum.h diff --git a/include/asm-parisc/compat.h b/arch/parisc/include/asm/compat.h index 7f32611..7f32611 100644 --- a/include/asm-parisc/compat.h +++ b/arch/parisc/include/asm/compat.h diff --git a/include/asm-parisc/compat_rt_sigframe.h b/arch/parisc/include/asm/compat_rt_sigframe.h index 81bec28..81bec28 100644 --- a/include/asm-parisc/compat_rt_sigframe.h +++ b/arch/parisc/include/asm/compat_rt_sigframe.h diff --git a/include/asm-parisc/compat_signal.h b/arch/parisc/include/asm/compat_signal.h index 6ad02c3..6ad02c3 100644 --- a/include/asm-parisc/compat_signal.h +++ b/arch/parisc/include/asm/compat_signal.h diff --git a/include/asm-parisc/compat_ucontext.h b/arch/parisc/include/asm/compat_ucontext.h index 2f7292a..2f7292a 100644 --- a/include/asm-parisc/compat_ucontext.h +++ b/arch/parisc/include/asm/compat_ucontext.h diff --git a/include/asm-parisc/cputime.h b/arch/parisc/include/asm/cputime.h index dcdf2fb..dcdf2fb 100644 --- a/include/asm-parisc/cputime.h +++ b/arch/parisc/include/asm/cputime.h diff --git a/include/asm-parisc/current.h b/arch/parisc/include/asm/current.h index 0fb9338..0fb9338 100644 --- a/include/asm-parisc/current.h +++ b/arch/parisc/include/asm/current.h diff --git a/include/asm-parisc/delay.h b/arch/parisc/include/asm/delay.h index 7a75e98..7a75e98 100644 --- a/include/asm-parisc/delay.h +++ b/arch/parisc/include/asm/delay.h diff --git a/include/asm-parisc/device.h b/arch/parisc/include/asm/device.h index d8f9872..d8f9872 100644 --- a/include/asm-parisc/device.h +++ b/arch/parisc/include/asm/device.h diff --git a/include/asm-parisc/div64.h b/arch/parisc/include/asm/div64.h index 6cd978c..6cd978c 100644 --- a/include/asm-parisc/div64.h +++ b/arch/parisc/include/asm/div64.h diff --git a/include/asm-parisc/dma-mapping.h b/arch/parisc/include/asm/dma-mapping.h index 53af696..53af696 100644 --- a/include/asm-parisc/dma-mapping.h +++ b/arch/parisc/include/asm/dma-mapping.h diff --git a/include/asm-parisc/dma.h b/arch/parisc/include/asm/dma.h index 31ad0f0..31ad0f0 100644 --- a/include/asm-parisc/dma.h +++ b/arch/parisc/include/asm/dma.h diff --git a/include/asm-parisc/eisa_bus.h b/arch/parisc/include/asm/eisa_bus.h index 201085f..201085f 100644 --- a/include/asm-parisc/eisa_bus.h +++ b/arch/parisc/include/asm/eisa_bus.h diff --git a/include/asm-parisc/eisa_eeprom.h b/arch/parisc/include/asm/eisa_eeprom.h index 9c9da98..9c9da98 100644 --- a/include/asm-parisc/eisa_eeprom.h +++ b/arch/parisc/include/asm/eisa_eeprom.h diff --git a/include/asm-parisc/elf.h b/arch/parisc/include/asm/elf.h index 7fa6757..7fa6757 100644 --- a/include/asm-parisc/elf.h +++ b/arch/parisc/include/asm/elf.h diff --git a/include/asm-parisc/emergency-restart.h b/arch/parisc/include/asm/emergency-restart.h index 108d8c4..108d8c4 100644 --- a/include/asm-parisc/emergency-restart.h +++ b/arch/parisc/include/asm/emergency-restart.h diff --git a/include/asm-parisc/errno.h b/arch/parisc/include/asm/errno.h index e2f3ddc..e2f3ddc 100644 --- a/include/asm-parisc/errno.h +++ b/arch/parisc/include/asm/errno.h diff --git a/include/asm-parisc/fb.h b/arch/parisc/include/asm/fb.h index 4d503a0..4d503a0 100644 --- a/include/asm-parisc/fb.h +++ b/arch/parisc/include/asm/fb.h diff --git a/include/asm-parisc/fcntl.h b/arch/parisc/include/asm/fcntl.h index 1e1c824..1e1c824 100644 --- a/include/asm-parisc/fcntl.h +++ b/arch/parisc/include/asm/fcntl.h diff --git a/include/asm-parisc/fixmap.h b/arch/parisc/include/asm/fixmap.h index de3fe3a..de3fe3a 100644 --- a/include/asm-parisc/fixmap.h +++ b/arch/parisc/include/asm/fixmap.h diff --git a/include/asm-parisc/floppy.h b/arch/parisc/include/asm/floppy.h index 4ca69f5..4ca69f5 100644 --- a/include/asm-parisc/floppy.h +++ b/arch/parisc/include/asm/floppy.h diff --git a/include/asm-parisc/futex.h b/arch/parisc/include/asm/futex.h index 0c705c3..0c705c3 100644 --- a/include/asm-parisc/futex.h +++ b/arch/parisc/include/asm/futex.h diff --git a/include/asm-parisc/grfioctl.h b/arch/parisc/include/asm/grfioctl.h index 671e060..671e060 100644 --- a/include/asm-parisc/grfioctl.h +++ b/arch/parisc/include/asm/grfioctl.h diff --git a/include/asm-parisc/hardirq.h b/arch/parisc/include/asm/hardirq.h index ce93133..ce93133 100644 --- a/include/asm-parisc/hardirq.h +++ b/arch/parisc/include/asm/hardirq.h diff --git a/include/asm-parisc/hardware.h b/arch/parisc/include/asm/hardware.h index 4e96268..4e96268 100644 --- a/include/asm-parisc/hardware.h +++ b/arch/parisc/include/asm/hardware.h diff --git a/include/asm-parisc/hw_irq.h b/arch/parisc/include/asm/hw_irq.h index 6707f7d..6707f7d 100644 --- a/include/asm-parisc/hw_irq.h +++ b/arch/parisc/include/asm/hw_irq.h diff --git a/include/asm-parisc/ide.h b/arch/parisc/include/asm/ide.h index 81700a2..81700a2 100644 --- a/include/asm-parisc/ide.h +++ b/arch/parisc/include/asm/ide.h diff --git a/include/asm-parisc/io.h b/arch/parisc/include/asm/io.h index 55ddb18..55ddb18 100644 --- a/include/asm-parisc/io.h +++ b/arch/parisc/include/asm/io.h diff --git a/include/asm-parisc/ioctl.h b/arch/parisc/include/asm/ioctl.h index ec8efa0..ec8efa0 100644 --- a/include/asm-parisc/ioctl.h +++ b/arch/parisc/include/asm/ioctl.h diff --git a/include/asm-parisc/ioctls.h b/arch/parisc/include/asm/ioctls.h index 6747fad..6747fad 100644 --- a/include/asm-parisc/ioctls.h +++ b/arch/parisc/include/asm/ioctls.h diff --git a/include/asm-parisc/ipcbuf.h b/arch/parisc/include/asm/ipcbuf.h index bd956c4..bd956c4 100644 --- a/include/asm-parisc/ipcbuf.h +++ b/arch/parisc/include/asm/ipcbuf.h diff --git a/include/asm-parisc/irq.h b/arch/parisc/include/asm/irq.h index 399c819..399c819 100644 --- a/include/asm-parisc/irq.h +++ b/arch/parisc/include/asm/irq.h diff --git a/include/asm-parisc/irq_regs.h b/arch/parisc/include/asm/irq_regs.h index 3dd9c0b..3dd9c0b 100644 --- a/include/asm-parisc/irq_regs.h +++ b/arch/parisc/include/asm/irq_regs.h diff --git a/include/asm-parisc/kdebug.h b/arch/parisc/include/asm/kdebug.h index 6ece1b0..6ece1b0 100644 --- a/include/asm-parisc/kdebug.h +++ b/arch/parisc/include/asm/kdebug.h diff --git a/include/asm-parisc/kmap_types.h b/arch/parisc/include/asm/kmap_types.h index 806aae3..806aae3 100644 --- a/include/asm-parisc/kmap_types.h +++ b/arch/parisc/include/asm/kmap_types.h diff --git a/include/asm-parisc/led.h b/arch/parisc/include/asm/led.h index c3405ab..c3405ab 100644 --- a/include/asm-parisc/led.h +++ b/arch/parisc/include/asm/led.h diff --git a/include/asm-parisc/linkage.h b/arch/parisc/include/asm/linkage.h index 0b19a72..0b19a72 100644 --- a/include/asm-parisc/linkage.h +++ b/arch/parisc/include/asm/linkage.h diff --git a/include/asm-parisc/local.h b/arch/parisc/include/asm/local.h index c11c530..c11c530 100644 --- a/include/asm-parisc/local.h +++ b/arch/parisc/include/asm/local.h diff --git a/include/asm-parisc/machdep.h b/arch/parisc/include/asm/machdep.h index a231c97..a231c97 100644 --- a/include/asm-parisc/machdep.h +++ b/arch/parisc/include/asm/machdep.h diff --git a/include/asm-parisc/mc146818rtc.h b/arch/parisc/include/asm/mc146818rtc.h index adf4163..adf4163 100644 --- a/include/asm-parisc/mc146818rtc.h +++ b/arch/parisc/include/asm/mc146818rtc.h diff --git a/include/asm-parisc/mckinley.h b/arch/parisc/include/asm/mckinley.h index d1ea6f1..d1ea6f1 100644 --- a/include/asm-parisc/mckinley.h +++ b/arch/parisc/include/asm/mckinley.h diff --git a/include/asm-parisc/mman.h b/arch/parisc/include/asm/mman.h index defe752..defe752 100644 --- a/include/asm-parisc/mman.h +++ b/arch/parisc/include/asm/mman.h diff --git a/include/asm-parisc/mmu.h b/arch/parisc/include/asm/mmu.h index 6a310cf..6a310cf 100644 --- a/include/asm-parisc/mmu.h +++ b/arch/parisc/include/asm/mmu.h diff --git a/include/asm-parisc/mmu_context.h b/arch/parisc/include/asm/mmu_context.h index 85856c7..85856c7 100644 --- a/include/asm-parisc/mmu_context.h +++ b/arch/parisc/include/asm/mmu_context.h diff --git a/include/asm-parisc/mmzone.h b/arch/parisc/include/asm/mmzone.h index 9608d2c..9608d2c 100644 --- a/include/asm-parisc/mmzone.h +++ b/arch/parisc/include/asm/mmzone.h diff --git a/include/asm-parisc/module.h b/arch/parisc/include/asm/module.h index c2cb49e..c2cb49e 100644 --- a/include/asm-parisc/module.h +++ b/arch/parisc/include/asm/module.h diff --git a/include/asm-parisc/msgbuf.h b/arch/parisc/include/asm/msgbuf.h index fe88f26..fe88f26 100644 --- a/include/asm-parisc/msgbuf.h +++ b/arch/parisc/include/asm/msgbuf.h diff --git a/include/asm-parisc/mutex.h b/arch/parisc/include/asm/mutex.h index 458c1f7..458c1f7 100644 --- a/include/asm-parisc/mutex.h +++ b/arch/parisc/include/asm/mutex.h diff --git a/include/asm-parisc/page.h b/arch/parisc/include/asm/page.h index c3941f0..c3941f0 100644 --- a/include/asm-parisc/page.h +++ b/arch/parisc/include/asm/page.h diff --git a/include/asm-parisc/param.h b/arch/parisc/include/asm/param.h index 32e03d8..32e03d8 100644 --- a/include/asm-parisc/param.h +++ b/arch/parisc/include/asm/param.h diff --git a/include/asm-parisc/parisc-device.h b/arch/parisc/include/asm/parisc-device.h index 7aa13f2..7aa13f2 100644 --- a/include/asm-parisc/parisc-device.h +++ b/arch/parisc/include/asm/parisc-device.h diff --git a/include/asm-parisc/parport.h b/arch/parisc/include/asm/parport.h index 00d9cc3..00d9cc3 100644 --- a/include/asm-parisc/parport.h +++ b/arch/parisc/include/asm/parport.h diff --git a/include/asm-parisc/pci.h b/arch/parisc/include/asm/pci.h index 4ba868f..4ba868f 100644 --- a/include/asm-parisc/pci.h +++ b/arch/parisc/include/asm/pci.h diff --git a/include/asm-parisc/pdc.h b/arch/parisc/include/asm/pdc.h index 9eaa794..c584b00 100644 --- a/include/asm-parisc/pdc.h +++ b/arch/parisc/include/asm/pdc.h @@ -332,6 +332,9 @@ #define BOOT_CONSOLE_SPA_OFFSET 0x3c4 #define BOOT_CONSOLE_PATH_OFFSET 0x3a8 +/* size of the pdc_result buffer for firmware.c */ +#define NUM_PDC_RESULT 32 + #if !defined(__ASSEMBLY__) #ifdef __KERNEL__ @@ -600,6 +603,7 @@ int pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsi int pdc_chassis_disp(unsigned long disp); int pdc_chassis_warn(unsigned long *warn); int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info); +int pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info); int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index, void *iodc_data, unsigned int iodc_data_size); int pdc_system_map_find_mods(struct pdc_system_map_mod_info *pdc_mod_info, @@ -638,6 +642,7 @@ int pdc_mem_mem_table(struct pdc_memory_table_raddr *r_addr, #endif void set_firmware_width(void); +void set_firmware_width_unlocked(void); int pdc_do_firm_test_reset(unsigned long ftc_bitmap); int pdc_do_reset(void); int pdc_soft_power_info(unsigned long *power_reg); diff --git a/include/asm-parisc/pdc_chassis.h b/arch/parisc/include/asm/pdc_chassis.h index a609273..a609273 100644 --- a/include/asm-parisc/pdc_chassis.h +++ b/arch/parisc/include/asm/pdc_chassis.h diff --git a/include/asm-parisc/pdcpat.h b/arch/parisc/include/asm/pdcpat.h index 47539f1..47539f1 100644 --- a/include/asm-parisc/pdcpat.h +++ b/arch/parisc/include/asm/pdcpat.h diff --git a/include/asm-parisc/percpu.h b/arch/parisc/include/asm/percpu.h index a0dcd19..a0dcd19 100644 --- a/include/asm-parisc/percpu.h +++ b/arch/parisc/include/asm/percpu.h diff --git a/include/asm-parisc/perf.h b/arch/parisc/include/asm/perf.h index a18e119..a18e119 100644 --- a/include/asm-parisc/perf.h +++ b/arch/parisc/include/asm/perf.h diff --git a/include/asm-parisc/pgalloc.h b/arch/parisc/include/asm/pgalloc.h index fc987a1..fc987a1 100644 --- a/include/asm-parisc/pgalloc.h +++ b/arch/parisc/include/asm/pgalloc.h diff --git a/include/asm-parisc/pgtable.h b/arch/parisc/include/asm/pgtable.h index 470a4b8..470a4b8 100644 --- a/include/asm-parisc/pgtable.h +++ b/arch/parisc/include/asm/pgtable.h diff --git a/include/asm-parisc/poll.h b/arch/parisc/include/asm/poll.h index c98509d..c98509d 100644 --- a/include/asm-parisc/poll.h +++ b/arch/parisc/include/asm/poll.h diff --git a/include/asm-parisc/posix_types.h b/arch/parisc/include/asm/posix_types.h index bb725a6..bb725a6 100644 --- a/include/asm-parisc/posix_types.h +++ b/arch/parisc/include/asm/posix_types.h diff --git a/include/asm-parisc/prefetch.h b/arch/parisc/include/asm/prefetch.h index c5edc60..c5edc60 100644 --- a/include/asm-parisc/prefetch.h +++ b/arch/parisc/include/asm/prefetch.h diff --git a/include/asm-parisc/processor.h b/arch/parisc/include/asm/processor.h index 3c9d348..3c9d348 100644 --- a/include/asm-parisc/processor.h +++ b/arch/parisc/include/asm/processor.h diff --git a/include/asm-parisc/psw.h b/arch/parisc/include/asm/psw.h index 5a3e23c..5a3e23c 100644 --- a/include/asm-parisc/psw.h +++ b/arch/parisc/include/asm/psw.h diff --git a/include/asm-parisc/ptrace.h b/arch/parisc/include/asm/ptrace.h index 3e94c5d..afa5333 100644 --- a/include/asm-parisc/ptrace.h +++ b/arch/parisc/include/asm/ptrace.h @@ -47,6 +47,16 @@ struct pt_regs { #define task_regs(task) ((struct pt_regs *) ((char *)(task) + TASK_REGS)) +#define __ARCH_WANT_COMPAT_SYS_PTRACE + +struct task_struct; +#define arch_has_single_step() 1 +void user_disable_single_step(struct task_struct *task); +void user_enable_single_step(struct task_struct *task); + +#define arch_has_block_step() 1 +void user_enable_block_step(struct task_struct *task); + /* XXX should we use iaoq[1] or iaoq[0] ? */ #define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0) #define user_space(regs) (((regs)->iasq[1] != 0) ? 1 : 0) diff --git a/include/asm-parisc/real.h b/arch/parisc/include/asm/real.h index 82acb25..82acb25 100644 --- a/include/asm-parisc/real.h +++ b/arch/parisc/include/asm/real.h diff --git a/include/asm-parisc/resource.h b/arch/parisc/include/asm/resource.h index 8b06343..8b06343 100644 --- a/include/asm-parisc/resource.h +++ b/arch/parisc/include/asm/resource.h diff --git a/include/asm-parisc/ropes.h b/arch/parisc/include/asm/ropes.h index 007a8806..09f51d5 100644 --- a/include/asm-parisc/ropes.h +++ b/arch/parisc/include/asm/ropes.h @@ -1,7 +1,7 @@ #ifndef _ASM_PARISC_ROPES_H_ #define _ASM_PARISC_ROPES_H_ -#include <asm-parisc/parisc-device.h> +#include <asm/parisc-device.h> #ifdef CONFIG_64BIT /* "low end" PA8800 machines use ZX1 chipset: PAT PDC and only run 64-bit */ diff --git a/include/asm-parisc/rt_sigframe.h b/arch/parisc/include/asm/rt_sigframe.h index f0dd3b3..f0dd3b3 100644 --- a/include/asm-parisc/rt_sigframe.h +++ b/arch/parisc/include/asm/rt_sigframe.h diff --git a/include/asm-parisc/rtc.h b/arch/parisc/include/asm/rtc.h index 099d641..099d641 100644 --- a/include/asm-parisc/rtc.h +++ b/arch/parisc/include/asm/rtc.h diff --git a/include/asm-parisc/runway.h b/arch/parisc/include/asm/runway.h index 5bea02d..5bea02d 100644 --- a/include/asm-parisc/runway.h +++ b/arch/parisc/include/asm/runway.h diff --git a/include/asm-parisc/scatterlist.h b/arch/parisc/include/asm/scatterlist.h index 62269b3..62269b3 100644 --- a/include/asm-parisc/scatterlist.h +++ b/arch/parisc/include/asm/scatterlist.h diff --git a/include/asm-parisc/sections.h b/arch/parisc/include/asm/sections.h index 9d13c35..9d13c35 100644 --- a/include/asm-parisc/sections.h +++ b/arch/parisc/include/asm/sections.h diff --git a/include/asm-parisc/segment.h b/arch/parisc/include/asm/segment.h index 26794dd..26794dd 100644 --- a/include/asm-parisc/segment.h +++ b/arch/parisc/include/asm/segment.h diff --git a/include/asm-parisc/sembuf.h b/arch/parisc/include/asm/sembuf.h index 1e59ffd..1e59ffd 100644 --- a/include/asm-parisc/sembuf.h +++ b/arch/parisc/include/asm/sembuf.h diff --git a/include/asm-parisc/serial.h b/arch/parisc/include/asm/serial.h index d7e3cc6..d7e3cc6 100644 --- a/include/asm-parisc/serial.h +++ b/arch/parisc/include/asm/serial.h diff --git a/include/asm-parisc/setup.h b/arch/parisc/include/asm/setup.h index 7da2e5b..7da2e5b 100644 --- a/include/asm-parisc/setup.h +++ b/arch/parisc/include/asm/setup.h diff --git a/include/asm-parisc/shmbuf.h b/arch/parisc/include/asm/shmbuf.h index 0a3eada..0a3eada 100644 --- a/include/asm-parisc/shmbuf.h +++ b/arch/parisc/include/asm/shmbuf.h diff --git a/include/asm-parisc/shmparam.h b/arch/parisc/include/asm/shmparam.h index 628ddc2..628ddc2 100644 --- a/include/asm-parisc/shmparam.h +++ b/arch/parisc/include/asm/shmparam.h diff --git a/include/asm-parisc/sigcontext.h b/arch/parisc/include/asm/sigcontext.h index 27ef31b..27ef31b 100644 --- a/include/asm-parisc/sigcontext.h +++ b/arch/parisc/include/asm/sigcontext.h diff --git a/include/asm-parisc/siginfo.h b/arch/parisc/include/asm/siginfo.h index d703472..d703472 100644 --- a/include/asm-parisc/siginfo.h +++ b/arch/parisc/include/asm/siginfo.h diff --git a/include/asm-parisc/signal.h b/arch/parisc/include/asm/signal.h index c203563..c203563 100644 --- a/include/asm-parisc/signal.h +++ b/arch/parisc/include/asm/signal.h diff --git a/include/asm-parisc/smp.h b/arch/parisc/include/asm/smp.h index 398cdba..398cdba 100644 --- a/include/asm-parisc/smp.h +++ b/arch/parisc/include/asm/smp.h diff --git a/include/asm-parisc/socket.h b/arch/parisc/include/asm/socket.h index fba402c..fba402c 100644 --- a/include/asm-parisc/socket.h +++ b/arch/parisc/include/asm/socket.h diff --git a/include/asm-parisc/sockios.h b/arch/parisc/include/asm/sockios.h index dabfbc7..dabfbc7 100644 --- a/include/asm-parisc/sockios.h +++ b/arch/parisc/include/asm/sockios.h diff --git a/include/asm-parisc/spinlock.h b/arch/parisc/include/asm/spinlock.h index f3d2090..f3d2090 100644 --- a/include/asm-parisc/spinlock.h +++ b/arch/parisc/include/asm/spinlock.h diff --git a/include/asm-parisc/spinlock_types.h b/arch/parisc/include/asm/spinlock_types.h index 3f72f47..3f72f47 100644 --- a/include/asm-parisc/spinlock_types.h +++ b/arch/parisc/include/asm/spinlock_types.h diff --git a/include/asm-parisc/stat.h b/arch/parisc/include/asm/stat.h index 9d5fbbc..9d5fbbc 100644 --- a/include/asm-parisc/stat.h +++ b/arch/parisc/include/asm/stat.h diff --git a/include/asm-parisc/statfs.h b/arch/parisc/include/asm/statfs.h index 324bea9..324bea9 100644 --- a/include/asm-parisc/statfs.h +++ b/arch/parisc/include/asm/statfs.h diff --git a/include/asm-parisc/string.h b/arch/parisc/include/asm/string.h index eda01be..eda01be 100644 --- a/include/asm-parisc/string.h +++ b/arch/parisc/include/asm/string.h diff --git a/include/asm-parisc/superio.h b/arch/parisc/include/asm/superio.h index 6598acb..6598acb 100644 --- a/include/asm-parisc/superio.h +++ b/arch/parisc/include/asm/superio.h diff --git a/include/asm-parisc/system.h b/arch/parisc/include/asm/system.h index ee80c92..ee80c92 100644 --- a/include/asm-parisc/system.h +++ b/arch/parisc/include/asm/system.h diff --git a/include/asm-parisc/termbits.h b/arch/parisc/include/asm/termbits.h index d8bbc73..d8bbc73 100644 --- a/include/asm-parisc/termbits.h +++ b/arch/parisc/include/asm/termbits.h diff --git a/include/asm-parisc/termios.h b/arch/parisc/include/asm/termios.h index a2a57a4..a2a57a4 100644 --- a/include/asm-parisc/termios.h +++ b/arch/parisc/include/asm/termios.h diff --git a/include/asm-parisc/thread_info.h b/arch/parisc/include/asm/thread_info.h index 0407959..0407959 100644 --- a/include/asm-parisc/thread_info.h +++ b/arch/parisc/include/asm/thread_info.h diff --git a/include/asm-parisc/timex.h b/arch/parisc/include/asm/timex.h index 3b68d77..3b68d77 100644 --- a/include/asm-parisc/timex.h +++ b/arch/parisc/include/asm/timex.h diff --git a/include/asm-parisc/tlb.h b/arch/parisc/include/asm/tlb.h index 383b1db..383b1db 100644 --- a/include/asm-parisc/tlb.h +++ b/arch/parisc/include/asm/tlb.h diff --git a/include/asm-parisc/tlbflush.h b/arch/parisc/include/asm/tlbflush.h index b72ec66..b72ec66 100644 --- a/include/asm-parisc/tlbflush.h +++ b/arch/parisc/include/asm/tlbflush.h diff --git a/include/asm-parisc/topology.h b/arch/parisc/include/asm/topology.h index d8133eb..d8133eb 100644 --- a/include/asm-parisc/topology.h +++ b/arch/parisc/include/asm/topology.h diff --git a/include/asm-parisc/traps.h b/arch/parisc/include/asm/traps.h index 1945f99..1945f99 100644 --- a/include/asm-parisc/traps.h +++ b/arch/parisc/include/asm/traps.h diff --git a/include/asm-parisc/types.h b/arch/parisc/include/asm/types.h index 7f5a39b..7f5a39b 100644 --- a/include/asm-parisc/types.h +++ b/arch/parisc/include/asm/types.h diff --git a/include/asm-parisc/uaccess.h b/arch/parisc/include/asm/uaccess.h index 4878b95..4878b95 100644 --- a/include/asm-parisc/uaccess.h +++ b/arch/parisc/include/asm/uaccess.h diff --git a/include/asm-parisc/ucontext.h b/arch/parisc/include/asm/ucontext.h index 6c8883e..6c8883e 100644 --- a/include/asm-parisc/ucontext.h +++ b/arch/parisc/include/asm/ucontext.h diff --git a/include/asm-parisc/unaligned.h b/arch/parisc/include/asm/unaligned.h index dfc5d33..dfc5d33 100644 --- a/include/asm-parisc/unaligned.h +++ b/arch/parisc/include/asm/unaligned.h diff --git a/include/asm-parisc/unistd.h b/arch/parisc/include/asm/unistd.h index a7d857f..ef26b00 100644 --- a/include/asm-parisc/unistd.h +++ b/arch/parisc/include/asm/unistd.h @@ -801,8 +801,14 @@ #define __NR_timerfd_create (__NR_Linux + 306) #define __NR_timerfd_settime (__NR_Linux + 307) #define __NR_timerfd_gettime (__NR_Linux + 308) - -#define __NR_Linux_syscalls (__NR_timerfd_gettime + 1) +#define __NR_signalfd4 (__NR_Linux + 309) +#define __NR_eventfd2 (__NR_Linux + 310) +#define __NR_epoll_create1 (__NR_Linux + 311) +#define __NR_dup3 (__NR_Linux + 312) +#define __NR_pipe2 (__NR_Linux + 313) +#define __NR_inotify_init1 (__NR_Linux + 314) + +#define __NR_Linux_syscalls (__NR_inotify_init1 + 1) #define __IGNORE_select /* newselect */ diff --git a/include/asm-parisc/unwind.h b/arch/parisc/include/asm/unwind.h index 2f7e6e5..52482e4 100644 --- a/include/asm-parisc/unwind.h +++ b/arch/parisc/include/asm/unwind.h @@ -74,4 +74,6 @@ void unwind_frame_init_running(struct unwind_frame_info *info, struct pt_regs *r int unwind_once(struct unwind_frame_info *info); int unwind_to_user(struct unwind_frame_info *info); +int unwind_init(void); + #endif diff --git a/include/asm-parisc/user.h b/arch/parisc/include/asm/user.h index 8022475..8022475 100644 --- a/include/asm-parisc/user.h +++ b/arch/parisc/include/asm/user.h diff --git a/include/asm-parisc/vga.h b/arch/parisc/include/asm/vga.h index 171399a..171399a 100644 --- a/include/asm-parisc/vga.h +++ b/arch/parisc/include/asm/vga.h diff --git a/include/asm-parisc/xor.h b/arch/parisc/include/asm/xor.h index c82eb12..c82eb12 100644 --- a/include/asm-parisc/xor.h +++ b/arch/parisc/include/asm/xor.h diff --git a/arch/parisc/kernel/.gitignore b/arch/parisc/kernel/.gitignore new file mode 100644 index 0000000..c5f676c --- /dev/null +++ b/arch/parisc/kernel/.gitignore @@ -0,0 +1 @@ +vmlinux.lds diff --git a/arch/parisc/kernel/asm-offsets.c b/arch/parisc/kernel/asm-offsets.c index 3efc0b7..699cf8e 100644 --- a/arch/parisc/kernel/asm-offsets.c +++ b/arch/parisc/kernel/asm-offsets.c @@ -290,5 +290,8 @@ int main(void) DEFINE(EXCDATA_IP, offsetof(struct exception_data, fault_ip)); DEFINE(EXCDATA_SPACE, offsetof(struct exception_data, fault_space)); DEFINE(EXCDATA_ADDR, offsetof(struct exception_data, fault_addr)); + BLANK(); + DEFINE(ASM_PDC_RESULT_SIZE, NUM_PDC_RESULT * sizeof(unsigned long)); + BLANK(); return 0; } diff --git a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c index 7177a6c..03f26bd 100644 --- a/arch/parisc/kernel/firmware.c +++ b/arch/parisc/kernel/firmware.c @@ -71,8 +71,8 @@ #include <asm/processor.h> /* for boot_cpu_data */ static DEFINE_SPINLOCK(pdc_lock); -static unsigned long pdc_result[32] __attribute__ ((aligned (8))); -static unsigned long pdc_result2[32] __attribute__ ((aligned (8))); +extern unsigned long pdc_result[NUM_PDC_RESULT]; +extern unsigned long pdc_result2[NUM_PDC_RESULT]; #ifdef CONFIG_64BIT #define WIDE_FIRMWARE 0x1 @@ -150,26 +150,40 @@ static void convert_to_wide(unsigned long *addr) #endif } +#ifdef CONFIG_64BIT +void __init set_firmware_width_unlocked(void) +{ + int ret; + + ret = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, + __pa(pdc_result), 0); + convert_to_wide(pdc_result); + if (pdc_result[0] != NARROW_FIRMWARE) + parisc_narrow_firmware = 0; +} + /** * set_firmware_width - Determine if the firmware is wide or narrow. * - * This function must be called before any pdc_* function that uses the convert_to_wide - * function. + * This function must be called before any pdc_* function that uses the + * convert_to_wide function. */ void __init set_firmware_width(void) { -#ifdef CONFIG_64BIT - int retval; unsigned long flags; + spin_lock_irqsave(&pdc_lock, flags); + set_firmware_width_unlocked(); + spin_unlock_irqrestore(&pdc_lock, flags); +} +#else +void __init set_firmware_width_unlocked(void) { + return; +} - spin_lock_irqsave(&pdc_lock, flags); - retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, __pa(pdc_result), 0); - convert_to_wide(pdc_result); - if(pdc_result[0] != NARROW_FIRMWARE) - parisc_narrow_firmware = 0; - spin_unlock_irqrestore(&pdc_lock, flags); -#endif +void __init set_firmware_width(void) { + return; } +#endif /*CONFIG_64BIT*/ /** * pdc_emergency_unlock - Unlock the linux pdc lock @@ -288,6 +302,20 @@ int pdc_chassis_warn(unsigned long *warn) return retval; } +int __init pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info) +{ + int ret; + + ret = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result)); + convert_to_wide(pdc_result); + pdc_coproc_info->ccr_functional = pdc_result[0]; + pdc_coproc_info->ccr_present = pdc_result[1]; + pdc_coproc_info->revision = pdc_result[17]; + pdc_coproc_info->model = pdc_result[18]; + + return ret; +} + /** * pdc_coproc_cfg - To identify coprocessors attached to the processor. * @pdc_coproc_info: Return buffer address. @@ -297,19 +325,14 @@ int pdc_chassis_warn(unsigned long *warn) */ int __init pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info) { - int retval; + int ret; unsigned long flags; - spin_lock_irqsave(&pdc_lock, flags); - retval = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result)); - convert_to_wide(pdc_result); - pdc_coproc_info->ccr_functional = pdc_result[0]; - pdc_coproc_info->ccr_present = pdc_result[1]; - pdc_coproc_info->revision = pdc_result[17]; - pdc_coproc_info->model = pdc_result[18]; - spin_unlock_irqrestore(&pdc_lock, flags); + spin_lock_irqsave(&pdc_lock, flags); + ret = pdc_coproc_cfg_unlocked(pdc_coproc_info); + spin_unlock_irqrestore(&pdc_lock, flags); - return retval; + return ret; } /** diff --git a/arch/parisc/kernel/head.S b/arch/parisc/kernel/head.S index a84e31e..0e3d9f9 100644 --- a/arch/parisc/kernel/head.S +++ b/arch/parisc/kernel/head.S @@ -121,7 +121,7 @@ $pgt_fill_loop: copy %r0,%r2 /* And the RFI Target address too */ - load32 start_kernel,%r11 + load32 start_parisc,%r11 /* And the initial task pointer */ load32 init_thread_union,%r6 diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c index 49c6379..90904f9 100644 --- a/arch/parisc/kernel/ptrace.c +++ b/arch/parisc/kernel/ptrace.c @@ -4,6 +4,7 @@ * Copyright (C) 2000 Hewlett-Packard Co, Linuxcare Inc. * Copyright (C) 2000 Matthew Wilcox <matthew@wil.cx> * Copyright (C) 2000 David Huggins-Daines <dhd@debian.org> + * Copyright (C) 2008 Helge Deller <deller@gmx.de> */ #include <linux/kernel.h> @@ -27,15 +28,149 @@ /* PSW bits we allow the debugger to modify */ #define USER_PSW_BITS (PSW_N | PSW_V | PSW_CB) -#undef DEBUG_PTRACE +/* + * Called by kernel/ptrace.c when detaching.. + * + * Make sure single step bits etc are not set. + */ +void ptrace_disable(struct task_struct *task) +{ + task->ptrace &= ~(PT_SINGLESTEP|PT_BLOCKSTEP); -#ifdef DEBUG_PTRACE -#define DBG(x...) printk(x) -#else -#define DBG(x...) -#endif + /* make sure the trap bits are not set */ + pa_psw(task)->r = 0; + pa_psw(task)->t = 0; + pa_psw(task)->h = 0; + pa_psw(task)->l = 0; +} + +/* + * The following functions are called by ptrace_resume() when + * enabling or disabling single/block tracing. + */ +void user_disable_single_step(struct task_struct *task) +{ + ptrace_disable(task); +} + +void user_enable_single_step(struct task_struct *task) +{ + task->ptrace &= ~PT_BLOCKSTEP; + task->ptrace |= PT_SINGLESTEP; + + if (pa_psw(task)->n) { + struct siginfo si; + + /* Nullified, just crank over the queue. */ + task_regs(task)->iaoq[0] = task_regs(task)->iaoq[1]; + task_regs(task)->iasq[0] = task_regs(task)->iasq[1]; + task_regs(task)->iaoq[1] = task_regs(task)->iaoq[0] + 4; + pa_psw(task)->n = 0; + pa_psw(task)->x = 0; + pa_psw(task)->y = 0; + pa_psw(task)->z = 0; + pa_psw(task)->b = 0; + ptrace_disable(task); + /* Don't wake up the task, but let the + parent know something happened. */ + si.si_code = TRAP_TRACE; + si.si_addr = (void __user *) (task_regs(task)->iaoq[0] & ~3); + si.si_signo = SIGTRAP; + si.si_errno = 0; + force_sig_info(SIGTRAP, &si, task); + /* notify_parent(task, SIGCHLD); */ + return; + } + + /* Enable recovery counter traps. The recovery counter + * itself will be set to zero on a task switch. If the + * task is suspended on a syscall then the syscall return + * path will overwrite the recovery counter with a suitable + * value such that it traps once back in user space. We + * disable interrupts in the tasks PSW here also, to avoid + * interrupts while the recovery counter is decrementing. + */ + pa_psw(task)->r = 1; + pa_psw(task)->t = 0; + pa_psw(task)->h = 0; + pa_psw(task)->l = 0; +} + +void user_enable_block_step(struct task_struct *task) +{ + task->ptrace &= ~PT_SINGLESTEP; + task->ptrace |= PT_BLOCKSTEP; + + /* Enable taken branch trap. */ + pa_psw(task)->r = 0; + pa_psw(task)->t = 1; + pa_psw(task)->h = 0; + pa_psw(task)->l = 0; +} + +long arch_ptrace(struct task_struct *child, long request, long addr, long data) +{ + unsigned long tmp; + long ret = -EIO; -#ifdef CONFIG_64BIT + switch (request) { + + /* Read the word at location addr in the USER area. For ptraced + processes, the kernel saves all regs on a syscall. */ + case PTRACE_PEEKUSR: + if ((addr & (sizeof(long)-1)) || + (unsigned long) addr >= sizeof(struct pt_regs)) + break; + tmp = *(unsigned long *) ((char *) task_regs(child) + addr); + ret = put_user(tmp, (unsigned long *) data); + break; + + /* Write the word at location addr in the USER area. This will need + to change when the kernel no longer saves all regs on a syscall. + FIXME. There is a problem at the moment in that r3-r18 are only + saved if the process is ptraced on syscall entry, and even then + those values are overwritten by actual register values on syscall + exit. */ + case PTRACE_POKEUSR: + /* Some register values written here may be ignored in + * entry.S:syscall_restore_rfi; e.g. iaoq is written with + * r31/r31+4, and not with the values in pt_regs. + */ + if (addr == PT_PSW) { + /* Allow writing to Nullify, Divide-step-correction, + * and carry/borrow bits. + * BEWARE, if you set N, and then single step, it won't + * stop on the nullified instruction. + */ + data &= USER_PSW_BITS; + task_regs(child)->gr[0] &= ~USER_PSW_BITS; + task_regs(child)->gr[0] |= data; + ret = 0; + break; + } + + if ((addr & (sizeof(long)-1)) || + (unsigned long) addr >= sizeof(struct pt_regs)) + break; + if ((addr >= PT_GR1 && addr <= PT_GR31) || + addr == PT_IAOQ0 || addr == PT_IAOQ1 || + (addr >= PT_FR0 && addr <= PT_FR31 + 4) || + addr == PT_SAR) { + *(unsigned long *) ((char *) task_regs(child) + addr) = data; + ret = 0; + } + break; + + default: + ret = ptrace_request(child, request, addr, data); + break; + } + + return ret; +} + + +#ifdef CONFIG_COMPAT /* This function is needed to translate 32 bit pt_regs offsets in to * 64 bit pt_regs offsets. For example, a 32 bit gdb under a 64 bit kernel @@ -61,106 +196,25 @@ static long translate_usr_offset(long offset) else return -1; } -#endif -/* - * Called by kernel/ptrace.c when detaching.. - * - * Make sure single step bits etc are not set. - */ -void ptrace_disable(struct task_struct *child) +long compat_arch_ptrace(struct task_struct *child, compat_long_t request, + compat_ulong_t addr, compat_ulong_t data) { - /* make sure the trap bits are not set */ - pa_psw(child)->r = 0; - pa_psw(child)->t = 0; - pa_psw(child)->h = 0; - pa_psw(child)->l = 0; -} - -long arch_ptrace(struct task_struct *child, long request, long addr, long data) -{ - long ret; -#ifdef DEBUG_PTRACE - long oaddr=addr, odata=data; -#endif + compat_uint_t tmp; + long ret = -EIO; switch (request) { - case PTRACE_PEEKTEXT: /* read word at location addr. */ - case PTRACE_PEEKDATA: { -#ifdef CONFIG_64BIT - if (__is_compat_task(child)) { - int copied; - unsigned int tmp; - - addr &= 0xffffffffL; - copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0); - ret = -EIO; - if (copied != sizeof(tmp)) - goto out_tsk; - ret = put_user(tmp,(unsigned int *) data); - DBG("sys_ptrace(PEEK%s, %d, %lx, %lx) returning %ld, data %x\n", - request == PTRACE_PEEKTEXT ? "TEXT" : "DATA", - pid, oaddr, odata, ret, tmp); - } - else -#endif - ret = generic_ptrace_peekdata(child, addr, data); - goto out_tsk; - } - /* when I and D space are separate, this will have to be fixed. */ - case PTRACE_POKETEXT: /* write the word at location addr. */ - case PTRACE_POKEDATA: - ret = 0; -#ifdef CONFIG_64BIT - if (__is_compat_task(child)) { - unsigned int tmp = (unsigned int)data; - DBG("sys_ptrace(POKE%s, %d, %lx, %lx)\n", - request == PTRACE_POKETEXT ? "TEXT" : "DATA", - pid, oaddr, odata); - addr &= 0xffffffffL; - if (access_process_vm(child, addr, &tmp, sizeof(tmp), 1) == sizeof(tmp)) - goto out_tsk; - } - else -#endif - { - if (access_process_vm(child, addr, &data, sizeof(data), 1) == sizeof(data)) - goto out_tsk; - } - ret = -EIO; - goto out_tsk; - - /* Read the word at location addr in the USER area. For ptraced - processes, the kernel saves all regs on a syscall. */ - case PTRACE_PEEKUSR: { - ret = -EIO; -#ifdef CONFIG_64BIT - if (__is_compat_task(child)) { - unsigned int tmp; - - if (addr & (sizeof(int)-1)) - goto out_tsk; - if ((addr = translate_usr_offset(addr)) < 0) - goto out_tsk; - - tmp = *(unsigned int *) ((char *) task_regs(child) + addr); - ret = put_user(tmp, (unsigned int *) data); - DBG("sys_ptrace(PEEKUSR, %d, %lx, %lx) returning %ld, addr %lx, data %x\n", - pid, oaddr, odata, ret, addr, tmp); - } - else -#endif - { - unsigned long tmp; + case PTRACE_PEEKUSR: + if (addr & (sizeof(compat_uint_t)-1)) + break; + addr = translate_usr_offset(addr); + if (addr < 0) + break; - if ((addr & (sizeof(long)-1)) || (unsigned long) addr >= sizeof(struct pt_regs)) - goto out_tsk; - tmp = *(unsigned long *) ((char *) task_regs(child) + addr); - ret = put_user(tmp, (unsigned long *) data); - } - goto out_tsk; - } + tmp = *(compat_uint_t *) ((char *) task_regs(child) + addr); + ret = put_user(tmp, (compat_uint_t *) (unsigned long) data); + break; /* Write the word at location addr in the USER area. This will need to change when the kernel no longer saves all regs on a syscall. @@ -169,185 +223,46 @@ long arch_ptrace(struct task_struct *child, long request, long addr, long data) those values are overwritten by actual register values on syscall exit. */ case PTRACE_POKEUSR: - ret = -EIO; /* Some register values written here may be ignored in * entry.S:syscall_restore_rfi; e.g. iaoq is written with * r31/r31+4, and not with the values in pt_regs. */ - /* PT_PSW=0, so this is valid for 32 bit processes under 64 - * bit kernels. - */ if (addr == PT_PSW) { - /* PT_PSW=0, so this is valid for 32 bit processes - * under 64 bit kernels. - * - * Allow writing to Nullify, Divide-step-correction, - * and carry/borrow bits. - * BEWARE, if you set N, and then single step, it won't - * stop on the nullified instruction. + /* Since PT_PSW==0, it is valid for 32 bit processes + * under 64 bit kernels as well. */ - DBG("sys_ptrace(POKEUSR, %d, %lx, %lx)\n", - pid, oaddr, odata); - data &= USER_PSW_BITS; - task_regs(child)->gr[0] &= ~USER_PSW_BITS; - task_regs(child)->gr[0] |= data; - ret = 0; - goto out_tsk; - } -#ifdef CONFIG_64BIT - if (__is_compat_task(child)) { - if (addr & (sizeof(int)-1)) - goto out_tsk; - if ((addr = translate_usr_offset(addr)) < 0) - goto out_tsk; - DBG("sys_ptrace(POKEUSR, %d, %lx, %lx) addr %lx\n", - pid, oaddr, odata, addr); + ret = arch_ptrace(child, request, addr, data); + } else { + if (addr & (sizeof(compat_uint_t)-1)) + break; + addr = translate_usr_offset(addr); + if (addr < 0) + break; if (addr >= PT_FR0 && addr <= PT_FR31 + 4) { /* Special case, fp regs are 64 bits anyway */ - *(unsigned int *) ((char *) task_regs(child) + addr) = data; + *(__u64 *) ((char *) task_regs(child) + addr) = data; ret = 0; } else if ((addr >= PT_GR1+4 && addr <= PT_GR31+4) || addr == PT_IAOQ0+4 || addr == PT_IAOQ1+4 || addr == PT_SAR+4) { /* Zero the top 32 bits */ - *(unsigned int *) ((char *) task_regs(child) + addr - 4) = 0; - *(unsigned int *) ((char *) task_regs(child) + addr) = data; + *(__u32 *) ((char *) task_regs(child) + addr - 4) = 0; + *(__u32 *) ((char *) task_regs(child) + addr) = data; ret = 0; } - goto out_tsk; } - else -#endif - { - if ((addr & (sizeof(long)-1)) || (unsigned long) addr >= sizeof(struct pt_regs)) - goto out_tsk; - if ((addr >= PT_GR1 && addr <= PT_GR31) || - addr == PT_IAOQ0 || addr == PT_IAOQ1 || - (addr >= PT_FR0 && addr <= PT_FR31 + 4) || - addr == PT_SAR) { - *(unsigned long *) ((char *) task_regs(child) + addr) = data; - ret = 0; - } - goto out_tsk; - } - - case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ - case PTRACE_CONT: - ret = -EIO; - DBG("sys_ptrace(%s)\n", - request == PTRACE_SYSCALL ? "SYSCALL" : "CONT"); - if (!valid_signal(data)) - goto out_tsk; - child->ptrace &= ~(PT_SINGLESTEP|PT_BLOCKSTEP); - if (request == PTRACE_SYSCALL) { - set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); - } else { - clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); - } - child->exit_code = data; - goto out_wake_notrap; - - case PTRACE_KILL: - /* - * make the child exit. Best I can do is send it a - * sigkill. perhaps it should be put in the status - * that it wants to exit. - */ - ret = 0; - DBG("sys_ptrace(KILL)\n"); - if (child->exit_state == EXIT_ZOMBIE) /* already dead */ - goto out_tsk; - child->exit_code = SIGKILL; - goto out_wake_notrap; - - case PTRACE_SINGLEBLOCK: - DBG("sys_ptrace(SINGLEBLOCK)\n"); - ret = -EIO; - if (!valid_signal(data)) - goto out_tsk; - clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); - child->ptrace &= ~PT_SINGLESTEP; - child->ptrace |= PT_BLOCKSTEP; - child->exit_code = data; - - /* Enable taken branch trap. */ - pa_psw(child)->r = 0; - pa_psw(child)->t = 1; - pa_psw(child)->h = 0; - pa_psw(child)->l = 0; - goto out_wake; - - case PTRACE_SINGLESTEP: - DBG("sys_ptrace(SINGLESTEP)\n"); - ret = -EIO; - if (!valid_signal(data)) - goto out_tsk; - - clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); - child->ptrace &= ~PT_BLOCKSTEP; - child->ptrace |= PT_SINGLESTEP; - child->exit_code = data; - - if (pa_psw(child)->n) { - struct siginfo si; - - /* Nullified, just crank over the queue. */ - task_regs(child)->iaoq[0] = task_regs(child)->iaoq[1]; - task_regs(child)->iasq[0] = task_regs(child)->iasq[1]; - task_regs(child)->iaoq[1] = task_regs(child)->iaoq[0] + 4; - pa_psw(child)->n = 0; - pa_psw(child)->x = 0; - pa_psw(child)->y = 0; - pa_psw(child)->z = 0; - pa_psw(child)->b = 0; - ptrace_disable(child); - /* Don't wake up the child, but let the - parent know something happened. */ - si.si_code = TRAP_TRACE; - si.si_addr = (void __user *) (task_regs(child)->iaoq[0] & ~3); - si.si_signo = SIGTRAP; - si.si_errno = 0; - force_sig_info(SIGTRAP, &si, child); - //notify_parent(child, SIGCHLD); - //ret = 0; - goto out_wake; - } - - /* Enable recovery counter traps. The recovery counter - * itself will be set to zero on a task switch. If the - * task is suspended on a syscall then the syscall return - * path will overwrite the recovery counter with a suitable - * value such that it traps once back in user space. We - * disable interrupts in the childs PSW here also, to avoid - * interrupts while the recovery counter is decrementing. - */ - pa_psw(child)->r = 1; - pa_psw(child)->t = 0; - pa_psw(child)->h = 0; - pa_psw(child)->l = 0; - /* give it a chance to run. */ - goto out_wake; - - case PTRACE_GETEVENTMSG: - ret = put_user(child->ptrace_message, (unsigned int __user *) data); - goto out_tsk; + break; default: - ret = ptrace_request(child, request, addr, data); - goto out_tsk; + ret = compat_ptrace_request(child, request, addr, data); + break; } -out_wake_notrap: - ptrace_disable(child); -out_wake: - wake_up_process(child); - ret = 0; -out_tsk: - DBG("arch_ptrace(%ld, %d, %lx, %lx) returning %ld\n", - request, pid, oaddr, odata, ret); return ret; } +#endif + void syscall_trace(void) { diff --git a/arch/parisc/kernel/real2.S b/arch/parisc/kernel/real2.S index 7a92695..5f3d3a1 100644 --- a/arch/parisc/kernel/real2.S +++ b/arch/parisc/kernel/real2.S @@ -8,12 +8,24 @@ * */ +#include <asm/pdc.h> #include <asm/psw.h> #include <asm/assembly.h> +#include <asm/asm-offsets.h> #include <linux/linkage.h> + .section .bss + + .export pdc_result + .export pdc_result2 + .align 8 +pdc_result: + .block ASM_PDC_RESULT_SIZE +pdc_result2: + .block ASM_PDC_RESULT_SIZE + .export real_stack .export real32_stack .export real64_stack diff --git a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c index 39e7c5a..7d27853 100644 --- a/arch/parisc/kernel/setup.c +++ b/arch/parisc/kernel/setup.c @@ -44,6 +44,7 @@ #include <asm/pdc_chassis.h> #include <asm/io.h> #include <asm/setup.h> +#include <asm/unwind.h> static char __initdata command_line[COMMAND_LINE_SIZE]; @@ -123,6 +124,7 @@ void __init setup_arch(char **cmdline_p) #ifdef CONFIG_64BIT extern int parisc_narrow_firmware; #endif + unwind_init(); init_per_cpu(smp_processor_id()); /* Set Modes & Enable FP */ @@ -368,6 +370,31 @@ static int __init parisc_init(void) return 0; } - arch_initcall(parisc_init); +void start_parisc(void) +{ + extern void start_kernel(void); + + int ret, cpunum; + struct pdc_coproc_cfg coproc_cfg; + + cpunum = smp_processor_id(); + + set_firmware_width_unlocked(); + + ret = pdc_coproc_cfg_unlocked(&coproc_cfg); + if (ret >= 0 && coproc_cfg.ccr_functional) { + mtctl(coproc_cfg.ccr_functional, 10); + + cpu_data[cpunum].fp_rev = coproc_cfg.revision; + cpu_data[cpunum].fp_model = coproc_cfg.model; + + asm volatile ("fstd %fr0,8(%sp)"); + } else { + panic("must have an fpu to boot linux"); + } + + start_kernel(); + // not reached +} diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S index c7e59f5..303d2b6 100644 --- a/arch/parisc/kernel/syscall_table.S +++ b/arch/parisc/kernel/syscall_table.S @@ -87,7 +87,7 @@ ENTRY_SAME(setuid) ENTRY_SAME(getuid) ENTRY_COMP(stime) /* 25 */ - ENTRY_SAME(ptrace) + ENTRY_COMP(ptrace) ENTRY_SAME(alarm) /* see stat comment */ ENTRY_COMP(newfstat) @@ -407,6 +407,12 @@ ENTRY_SAME(timerfd_create) ENTRY_COMP(timerfd_settime) ENTRY_COMP(timerfd_gettime) + ENTRY_COMP(signalfd4) + ENTRY_SAME(eventfd2) /* 310 */ + ENTRY_SAME(epoll_create1) + ENTRY_SAME(dup3) + ENTRY_SAME(pipe2) + ENTRY_SAME(inotify_init1) /* Nothing yet */ diff --git a/arch/parisc/kernel/time.c b/arch/parisc/kernel/time.c index 24be86b..4d09203 100644 --- a/arch/parisc/kernel/time.c +++ b/arch/parisc/kernel/time.c @@ -23,6 +23,7 @@ #include <linux/smp.h> #include <linux/profile.h> #include <linux/clocksource.h> +#include <linux/platform_device.h> #include <asm/uaccess.h> #include <asm/io.h> @@ -215,6 +216,24 @@ void __init start_cpu_itimer(void) cpu_data[cpu].it_value = next_tick; } +struct platform_device rtc_parisc_dev = { + .name = "rtc-parisc", + .id = -1, +}; + +static int __init rtc_init(void) +{ + int ret; + + ret = platform_device_register(&rtc_parisc_dev); + if (ret < 0) + printk(KERN_ERR "unable to register rtc device...\n"); + + /* not necessarily an error */ + return 0; +} +module_init(rtc_init); + void __init time_init(void) { static struct pdc_tod tod_data; @@ -245,4 +264,3 @@ void __init time_init(void) xtime.tv_nsec = 0; } } - diff --git a/arch/parisc/kernel/unwind.c b/arch/parisc/kernel/unwind.c index 701b2d2..6773c58 100644 --- a/arch/parisc/kernel/unwind.c +++ b/arch/parisc/kernel/unwind.c @@ -170,7 +170,7 @@ void unwind_table_remove(struct unwind_table *table) } /* Called from setup_arch to import the kernel unwind info */ -static int unwind_init(void) +int unwind_init(void) { long start, stop; register unsigned long gp __asm__ ("r27"); @@ -417,5 +417,3 @@ int unwind_to_user(struct unwind_frame_info *info) return ret; } - -module_init(unwind_init); diff --git a/drivers/char/agp/parisc-agp.c b/drivers/char/agp/parisc-agp.c index f2492ec..db60539 100644 --- a/drivers/char/agp/parisc-agp.c +++ b/drivers/char/agp/parisc-agp.c @@ -20,8 +20,8 @@ #include <linux/agp_backend.h> #include <linux/log2.h> -#include <asm-parisc/parisc-device.h> -#include <asm-parisc/ropes.h> +#include <asm/parisc-device.h> +#include <asm/ropes.h> #include "agp.h" diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c index b30e38f..dcc1e99 100644 --- a/drivers/parisc/ccio-dma.c +++ b/drivers/parisc/ccio-dma.c @@ -66,15 +66,8 @@ #undef DEBUG_CCIO_RUN_SG #ifdef CONFIG_PROC_FS -/* - * CCIO_SEARCH_TIME can help measure how fast the bitmap search is. - * impacts performance though - ditch it if you don't use it. - */ -#define CCIO_SEARCH_TIME -#undef CCIO_MAP_STATS -#else -#undef CCIO_SEARCH_TIME -#undef CCIO_MAP_STATS +/* depends on proc fs support. But costs CPU performance. */ +#undef CCIO_COLLECT_STATS #endif #include <linux/proc_fs.h> @@ -239,12 +232,10 @@ struct ioc { u32 res_size; /* size of resource map in bytes */ spinlock_t res_lock; -#ifdef CCIO_SEARCH_TIME +#ifdef CCIO_COLLECT_STATS #define CCIO_SEARCH_SAMPLE 0x100 unsigned long avg_search[CCIO_SEARCH_SAMPLE]; unsigned long avg_idx; /* current index into avg_search */ -#endif -#ifdef CCIO_MAP_STATS unsigned long used_pages; unsigned long msingle_calls; unsigned long msingle_pages; @@ -351,7 +342,7 @@ ccio_alloc_range(struct ioc *ioc, struct device *dev, size_t size) unsigned int pages_needed = size >> IOVP_SHIFT; unsigned int res_idx; unsigned long boundary_size; -#ifdef CCIO_SEARCH_TIME +#ifdef CCIO_COLLECT_STATS unsigned long cr_start = mfctl(16); #endif @@ -406,7 +397,7 @@ resource_found: DBG_RES("%s() res_idx %d res_hint: %d\n", __func__, res_idx, ioc->res_hint); -#ifdef CCIO_SEARCH_TIME +#ifdef CCIO_COLLECT_STATS { unsigned long cr_end = mfctl(16); unsigned long tmp = cr_end - cr_start; @@ -416,7 +407,7 @@ resource_found: ioc->avg_search[ioc->avg_idx++] = cr_start; ioc->avg_idx &= CCIO_SEARCH_SAMPLE - 1; #endif -#ifdef CCIO_MAP_STATS +#ifdef CCIO_COLLECT_STATS ioc->used_pages += pages_needed; #endif /* @@ -452,7 +443,7 @@ ccio_free_range(struct ioc *ioc, dma_addr_t iova, unsigned long pages_mapped) DBG_RES("%s(): res_idx: %d pages_mapped %d\n", __func__, res_idx, pages_mapped); -#ifdef CCIO_MAP_STATS +#ifdef CCIO_COLLECT_STATS ioc->used_pages -= pages_mapped; #endif @@ -764,7 +755,7 @@ ccio_map_single(struct device *dev, void *addr, size_t size, size = ALIGN(size + offset, IOVP_SIZE); spin_lock_irqsave(&ioc->res_lock, flags); -#ifdef CCIO_MAP_STATS +#ifdef CCIO_COLLECT_STATS ioc->msingle_calls++; ioc->msingle_pages += size >> IOVP_SHIFT; #endif @@ -828,7 +819,7 @@ ccio_unmap_single(struct device *dev, dma_addr_t iova, size_t size, spin_lock_irqsave(&ioc->res_lock, flags); -#ifdef CCIO_MAP_STATS +#ifdef CCIO_COLLECT_STATS ioc->usingle_calls++; ioc->usingle_pages += size >> IOVP_SHIFT; #endif @@ -894,7 +885,7 @@ ccio_free_consistent(struct device *dev, size_t size, void *cpu_addr, */ #define PIDE_FLAG 0x80000000UL -#ifdef CCIO_MAP_STATS +#ifdef CCIO_COLLECT_STATS #define IOMMU_MAP_STATS #endif #include "iommu-helpers.h" @@ -938,7 +929,7 @@ ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents, spin_lock_irqsave(&ioc->res_lock, flags); -#ifdef CCIO_MAP_STATS +#ifdef CCIO_COLLECT_STATS ioc->msg_calls++; #endif @@ -997,13 +988,13 @@ ccio_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, DBG_RUN_SG("%s() START %d entries, %08lx,%x\n", __func__, nents, sg_virt_addr(sglist), sglist->length); -#ifdef CCIO_MAP_STATS +#ifdef CCIO_COLLECT_STATS ioc->usg_calls++; #endif while(sg_dma_len(sglist) && nents--) { -#ifdef CCIO_MAP_STATS +#ifdef CCIO_COLLECT_STATS ioc->usg_pages += sg_dma_len(sglist) >> PAGE_SHIFT; #endif ccio_unmap_single(dev, sg_dma_address(sglist), @@ -1048,7 +1039,7 @@ static int ccio_proc_info(struct seq_file *m, void *p) len += seq_printf(m, "IO PDIR size : %d bytes (%d entries)\n", total_pages * 8, total_pages); -#ifdef CCIO_MAP_STATS +#ifdef CCIO_COLLECT_STATS len += seq_printf(m, "IO PDIR entries : %ld free %ld used (%d%%)\n", total_pages - ioc->used_pages, ioc->used_pages, (int)(ioc->used_pages * 100 / total_pages)); @@ -1057,7 +1048,7 @@ static int ccio_proc_info(struct seq_file *m, void *p) len += seq_printf(m, "Resource bitmap : %d bytes (%d pages)\n", ioc->res_size, total_pages); -#ifdef CCIO_SEARCH_TIME +#ifdef CCIO_COLLECT_STATS min = max = ioc->avg_search[0]; for(j = 0; j < CCIO_SEARCH_SAMPLE; ++j) { avg += ioc->avg_search[j]; @@ -1070,7 +1061,7 @@ static int ccio_proc_info(struct seq_file *m, void *p) len += seq_printf(m, " Bitmap search : %ld/%ld/%ld (min/avg/max CPU Cycles)\n", min, avg, max); #endif -#ifdef CCIO_MAP_STATS +#ifdef CCIO_COLLECT_STATS len += seq_printf(m, "pci_map_single(): %8ld calls %8ld pages (avg %d/1000)\n", ioc->msingle_calls, ioc->msingle_pages, (int)((ioc->msingle_pages * 1000)/ioc->msingle_calls)); @@ -1088,7 +1079,7 @@ static int ccio_proc_info(struct seq_file *m, void *p) len += seq_printf(m, "pci_unmap_sg() : %8ld calls %8ld pages (avg %d/1000)\n\n\n", ioc->usg_calls, ioc->usg_pages, (int)((ioc->usg_pages * 1000)/ioc->usg_calls)); -#endif /* CCIO_MAP_STATS */ +#endif /* CCIO_COLLECT_STATS */ ioc = ioc->next; } diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index f660ef3..814f49f 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -610,6 +610,14 @@ config RTC_DRV_RS5C313 help If you say yes here you get support for the Ricoh RS5C313 RTC chips. +config RTC_DRV_PARISC + tristate "PA-RISC firmware RTC support" + depends on PARISC + help + Say Y or M here to enable RTC support on PA-RISC systems using + firmware calls. If you do not know what you are doing, you should + just say Y. + config RTC_DRV_PPC tristate "PowerPC machine dependent RTC support" depends on PPC diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile index d05928b..d6a9ac7 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile @@ -51,6 +51,7 @@ obj-$(CONFIG_RTC_DRV_PCF8563) += rtc-pcf8563.o obj-$(CONFIG_RTC_DRV_PCF8583) += rtc-pcf8583.o obj-$(CONFIG_RTC_DRV_PL030) += rtc-pl030.o obj-$(CONFIG_RTC_DRV_PL031) += rtc-pl031.o +obj-$(CONFIG_RTC_DRV_PARISC) += rtc-parisc.o obj-$(CONFIG_RTC_DRV_PPC) += rtc-ppc.o obj-$(CONFIG_RTC_DRV_R9701) += rtc-r9701.o obj-$(CONFIG_RTC_DRV_RS5C313) += rtc-rs5c313.o diff --git a/drivers/rtc/rtc-parisc.c b/drivers/rtc/rtc-parisc.c new file mode 100644 index 0000000..346d633 --- /dev/null +++ b/drivers/rtc/rtc-parisc.c @@ -0,0 +1,111 @@ +/* rtc-parisc: RTC for HP PA-RISC firmware + * + * Copyright (C) 2008 Kyle McMartin <kyle@mcmartin.ca> + */ + +#include <linux/kernel.h> +#include <linux/module.h> +#include <linux/time.h> +#include <linux/platform_device.h> + +#include <asm/rtc.h> + +/* as simple as can be, and no simpler. */ +struct parisc_rtc { + struct rtc_device *rtc; + spinlock_t lock; +}; + +static int parisc_get_time(struct device *dev, struct rtc_time *tm) +{ + struct parisc_rtc *p = dev_get_drvdata(dev); + unsigned long flags, ret; + + spin_lock_irqsave(&p->lock, flags); + ret = get_rtc_time(tm); + spin_unlock_irqrestore(&p->lock, flags); + + if (ret & RTC_BATT_BAD) + return -EOPNOTSUPP; + + return 0; +} + +static int parisc_set_time(struct device *dev, struct rtc_time *tm) +{ + struct parisc_rtc *p = dev_get_drvdata(dev); + unsigned long flags, ret; + + spin_lock_irqsave(&p->lock, flags); + ret = set_rtc_time(tm); + spin_unlock_irqrestore(&p->lock, flags); + + if (ret < 0) + return -EOPNOTSUPP; + + return 0; +} + +static const struct rtc_class_ops parisc_rtc_ops = { + .read_time = parisc_get_time, + .set_time = parisc_set_time, +}; + +static int __devinit parisc_rtc_probe(struct platform_device *dev) +{ + struct parisc_rtc *p; + + p = kzalloc(sizeof (*p), GFP_KERNEL); + if (!p) + return -ENOMEM; + + spin_lock_init(&p->lock); + + p->rtc = rtc_device_register("rtc-parisc", &dev->dev, &parisc_rtc_ops, + THIS_MODULE); + if (IS_ERR(p->rtc)) { + int err = PTR_ERR(p->rtc); + kfree(p); + return err; + } + + platform_set_drvdata(dev, p); + + return 0; +} + +static int __devexit parisc_rtc_remove(struct platform_device *dev) +{ + struct parisc_rtc *p = platform_get_drvdata(dev); + + rtc_device_unregister(p->rtc); + kfree(p); + + return 0; +} + +static struct platform_driver parisc_rtc_driver = { + .driver = { + .name = "rtc-parisc", + .owner = THIS_MODULE, + }, + .probe = parisc_rtc_probe, + .remove = __devexit_p(parisc_rtc_remove), +}; + +static int __init parisc_rtc_init(void) +{ + return platform_driver_register(&parisc_rtc_driver); +} + +static void __exit parisc_rtc_fini(void) +{ + platform_driver_unregister(&parisc_rtc_driver); +} + +module_init(parisc_rtc_init); +module_exit(parisc_rtc_fini); + +MODULE_AUTHOR("Kyle McMartin <kyle@mcmartin.ca>"); +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("HP PA-RISC RTC driver"); |