diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-20 17:38:14 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-20 17:40:31 -0400 |
commit | e3d2f927f788adcdabc42f8a1616f6cc56c53bbe (patch) | |
tree | ff051e33cff49e23f4c4ef84360f22cf7a1998c9 | |
parent | a9b6148d25f15ddfe9d7a7f3e526fdb64e7cf7da (diff) | |
parent | 81e192d6ce303b6792aa38ff35f41a1a7357f23a (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/kyle/parisc-2.6:
parisc: convert to generic compat_sys_ptrace
parisc: add rtc platform driver
parisc: initialize unwinder much earlier
parisc: add new syscalls
parisc: hijack jump to start_kernel
parisc: add pdc_coproc_cfg_unlocked and set_firmware_width_unlocked
parisc: move include/asm-parisc to arch/parisc/include/asm
parisc: move pdc_result to real2.S
parisc: unify CCIO_COLLECT_STATS implementation
parisc: add arch/parisc/kernel/.gitignore
parisc: ropes.h - fix <asm-parisc/*> -> <asm/*>
parisc: parisc-agp - fix <asm-parisc/*> -> <asm/*>
Resolve remove/rename conflict: include/asm-parisc/a.out.h is no longer
relevant.
-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 2bd1f6ef5db0..644a70b1b04e 100644 --- a/arch/parisc/Kconfig +++ b/arch/parisc/Kconfig | |||
@@ -9,6 +9,8 @@ config PARISC | |||
9 | def_bool y | 9 | def_bool y |
10 | select HAVE_IDE | 10 | select HAVE_IDE |
11 | select HAVE_OPROFILE | 11 | select HAVE_OPROFILE |
12 | select RTC_CLASS | ||
13 | select RTC_DRV_PARISC | ||
12 | help | 14 | help |
13 | The PA-RISC microprocessor is designed by Hewlett-Packard and used | 15 | The PA-RISC microprocessor is designed by Hewlett-Packard and used |
14 | in many of their workstations & servers (HP9000 700 and 800 series, | 16 | 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 f88b252e419c..f88b252e419c 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 9651660da639..9651660da639 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 d93c646e1887..d93c646e1887 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 ffb208840ecc..ffb208840ecc 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 57fcc4a5ebb4..57fcc4a5ebb4 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 9c3ac4b89dc9..9c3ac4b89dc9 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 7a6ea10bd231..7a6ea10bd231 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 8cfc553fc837..8cfc553fc837 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 9e6284342a5f..9e6284342a5f 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 db148313de5d..db148313de5d 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 32c2cca74345..32c2cca74345 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 b7ca6dc7fddc..b7ca6dc7fddc 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 e9639ccc3fce..e9639ccc3fce 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 7f32611a7a5e..7f32611a7a5e 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 81bec28bdc48..81bec28bdc48 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 6ad02c360b21..6ad02c360b21 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 2f7292afde3c..2f7292afde3c 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 dcdf2fbd7e72..dcdf2fbd7e72 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 0fb9338e3bf2..0fb9338e3bf2 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 7a75e984674b..7a75e984674b 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 d8f9872b0e2d..d8f9872b0e2d 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 6cd978cefb28..6cd978cefb28 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 53af696f23d2..53af696f23d2 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 31ad0f05af3d..31ad0f05af3d 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 201085f83dd5..201085f83dd5 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 9c9da980402a..9c9da980402a 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 7fa675799e6d..7fa675799e6d 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 108d8c48e42e..108d8c48e42e 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 e2f3ddc796be..e2f3ddc796be 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 4d503a023ab2..4d503a023ab2 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 1e1c824764ee..1e1c824764ee 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 de3fe3a18229..de3fe3a18229 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 4ca69f558fae..4ca69f558fae 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 0c705c3a55ef..0c705c3a55ef 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 671e06042b40..671e06042b40 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 ce93133d5112..ce93133d5112 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 4e9626836bab..4e9626836bab 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 6707f7df3921..6707f7df3921 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 81700a2321cf..81700a2321cf 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 55ddb1842107..55ddb1842107 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 ec8efa02beda..ec8efa02beda 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 6747fad07a3e..6747fad07a3e 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 bd956c425785..bd956c425785 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 399c81981ed5..399c81981ed5 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 3dd9c0b70270..3dd9c0b70270 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 6ece1b037665..6ece1b037665 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 806aae3c5338..806aae3c5338 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 c3405ab9d60a..c3405ab9d60a 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 0b19a7242d0c..0b19a7242d0c 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 c11c530f74d0..c11c530f74d0 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 a231c97d703e..a231c97d703e 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 adf41631449f..adf41631449f 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 d1ea6f12915e..d1ea6f12915e 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 defe752cc996..defe752cc996 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 6a310cf8b734..6a310cf8b734 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 85856c74ad1d..85856c74ad1d 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 9608d2cf214a..9608d2cf214a 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 c2cb49e934c1..c2cb49e934c1 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 fe88f2649418..fe88f2649418 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 458c1f7fbc18..458c1f7fbc18 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 c3941f09a878..c3941f09a878 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 32e03d877858..32e03d877858 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 7aa13f2add7a..7aa13f2add7a 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 00d9cc3e7b97..00d9cc3e7b97 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 4ba868f44a5e..4ba868f44a5e 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 9eaa794c3e4a..c584b00c6074 100644 --- a/include/asm-parisc/pdc.h +++ b/arch/parisc/include/asm/pdc.h | |||
@@ -332,6 +332,9 @@ | |||
332 | #define BOOT_CONSOLE_SPA_OFFSET 0x3c4 | 332 | #define BOOT_CONSOLE_SPA_OFFSET 0x3c4 |
333 | #define BOOT_CONSOLE_PATH_OFFSET 0x3a8 | 333 | #define BOOT_CONSOLE_PATH_OFFSET 0x3a8 |
334 | 334 | ||
335 | /* size of the pdc_result buffer for firmware.c */ | ||
336 | #define NUM_PDC_RESULT 32 | ||
337 | |||
335 | #if !defined(__ASSEMBLY__) | 338 | #if !defined(__ASSEMBLY__) |
336 | #ifdef __KERNEL__ | 339 | #ifdef __KERNEL__ |
337 | 340 | ||
@@ -600,6 +603,7 @@ int pdc_chassis_info(struct pdc_chassis_info *chassis_info, void *led_info, unsi | |||
600 | int pdc_chassis_disp(unsigned long disp); | 603 | int pdc_chassis_disp(unsigned long disp); |
601 | int pdc_chassis_warn(unsigned long *warn); | 604 | int pdc_chassis_warn(unsigned long *warn); |
602 | int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info); | 605 | int pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info); |
606 | int pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info); | ||
603 | int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index, | 607 | int pdc_iodc_read(unsigned long *actcnt, unsigned long hpa, unsigned int index, |
604 | void *iodc_data, unsigned int iodc_data_size); | 608 | void *iodc_data, unsigned int iodc_data_size); |
605 | int pdc_system_map_find_mods(struct pdc_system_map_mod_info *pdc_mod_info, | 609 | 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, | |||
638 | #endif | 642 | #endif |
639 | 643 | ||
640 | void set_firmware_width(void); | 644 | void set_firmware_width(void); |
645 | void set_firmware_width_unlocked(void); | ||
641 | int pdc_do_firm_test_reset(unsigned long ftc_bitmap); | 646 | int pdc_do_firm_test_reset(unsigned long ftc_bitmap); |
642 | int pdc_do_reset(void); | 647 | int pdc_do_reset(void); |
643 | int pdc_soft_power_info(unsigned long *power_reg); | 648 | 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 a609273dc6bf..a609273dc6bf 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 47539f117958..47539f117958 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 a0dcd1970128..a0dcd1970128 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 a18e11972c09..a18e11972c09 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 fc987a1c12a8..fc987a1c12a8 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 470a4b88124d..470a4b88124d 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 c98509d3149e..c98509d3149e 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 bb725a6630bb..bb725a6630bb 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 c5edc60c059f..c5edc60c059f 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 3c9d34844c83..3c9d34844c83 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 5a3e23c9ce63..5a3e23c9ce63 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 3e94c5d85ff5..afa5333187b4 100644 --- a/include/asm-parisc/ptrace.h +++ b/arch/parisc/include/asm/ptrace.h | |||
@@ -47,6 +47,16 @@ struct pt_regs { | |||
47 | 47 | ||
48 | #define task_regs(task) ((struct pt_regs *) ((char *)(task) + TASK_REGS)) | 48 | #define task_regs(task) ((struct pt_regs *) ((char *)(task) + TASK_REGS)) |
49 | 49 | ||
50 | #define __ARCH_WANT_COMPAT_SYS_PTRACE | ||
51 | |||
52 | struct task_struct; | ||
53 | #define arch_has_single_step() 1 | ||
54 | void user_disable_single_step(struct task_struct *task); | ||
55 | void user_enable_single_step(struct task_struct *task); | ||
56 | |||
57 | #define arch_has_block_step() 1 | ||
58 | void user_enable_block_step(struct task_struct *task); | ||
59 | |||
50 | /* XXX should we use iaoq[1] or iaoq[0] ? */ | 60 | /* XXX should we use iaoq[1] or iaoq[0] ? */ |
51 | #define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0) | 61 | #define user_mode(regs) (((regs)->iaoq[0] & 3) ? 1 : 0) |
52 | #define user_space(regs) (((regs)->iasq[1] != 0) ? 1 : 0) | 62 | #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 82acb25db395..82acb25db395 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 8b06343b62ed..8b06343b62ed 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 007a880615eb..09f51d5ab57c 100644 --- a/include/asm-parisc/ropes.h +++ b/arch/parisc/include/asm/ropes.h | |||
@@ -1,7 +1,7 @@ | |||
1 | #ifndef _ASM_PARISC_ROPES_H_ | 1 | #ifndef _ASM_PARISC_ROPES_H_ |
2 | #define _ASM_PARISC_ROPES_H_ | 2 | #define _ASM_PARISC_ROPES_H_ |
3 | 3 | ||
4 | #include <asm-parisc/parisc-device.h> | 4 | #include <asm/parisc-device.h> |
5 | 5 | ||
6 | #ifdef CONFIG_64BIT | 6 | #ifdef CONFIG_64BIT |
7 | /* "low end" PA8800 machines use ZX1 chipset: PAT PDC and only run 64-bit */ | 7 | /* "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 f0dd3b30f6c4..f0dd3b30f6c4 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 099d641a42c2..099d641a42c2 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 5bea02da7e22..5bea02da7e22 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 62269b31ebf4..62269b31ebf4 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 9d13c3507ad6..9d13c3507ad6 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 26794ddb6524..26794ddb6524 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 1e59ffd3bd1e..1e59ffd3bd1e 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 d7e3cc60dbc3..d7e3cc60dbc3 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 7da2e5b8747e..7da2e5b8747e 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 0a3eada1863b..0a3eada1863b 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 628ddc22faa8..628ddc22faa8 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 27ef31bb3b6e..27ef31bb3b6e 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 d7034728f377..d7034728f377 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 c20356375d1d..c20356375d1d 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 398cdbaf4e54..398cdbaf4e54 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 fba402c95ac2..fba402c95ac2 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 dabfbc7483f6..dabfbc7483f6 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 f3d2090a18dc..f3d2090a18dc 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 3f72f47cf4b2..3f72f47cf4b2 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 9d5fbbc5c31f..9d5fbbc5c31f 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 324bea905dc6..324bea905dc6 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 eda01be65e35..eda01be65e35 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 6598acb4d46d..6598acb4d46d 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 ee80c920b464..ee80c920b464 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 d8bbc73b16b7..d8bbc73b16b7 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 a2a57a4548af..a2a57a4548af 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 0407959da489..0407959da489 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 3b68d77273d9..3b68d77273d9 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 383b1db310ee..383b1db310ee 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 b72ec66db699..b72ec66db699 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 d8133eb0b1e7..d8133eb0b1e7 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 1945f995f2df..1945f995f2df 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 7f5a39bfb4ce..7f5a39bfb4ce 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 4878b9501f24..4878b9501f24 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 6c8883e4b0bd..6c8883e4b0bd 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 dfc5d3321a54..dfc5d3321a54 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 a7d857f0e4f4..ef26b009dc5d 100644 --- a/include/asm-parisc/unistd.h +++ b/arch/parisc/include/asm/unistd.h | |||
@@ -801,8 +801,14 @@ | |||
801 | #define __NR_timerfd_create (__NR_Linux + 306) | 801 | #define __NR_timerfd_create (__NR_Linux + 306) |
802 | #define __NR_timerfd_settime (__NR_Linux + 307) | 802 | #define __NR_timerfd_settime (__NR_Linux + 307) |
803 | #define __NR_timerfd_gettime (__NR_Linux + 308) | 803 | #define __NR_timerfd_gettime (__NR_Linux + 308) |
804 | 804 | #define __NR_signalfd4 (__NR_Linux + 309) | |
805 | #define __NR_Linux_syscalls (__NR_timerfd_gettime + 1) | 805 | #define __NR_eventfd2 (__NR_Linux + 310) |
806 | #define __NR_epoll_create1 (__NR_Linux + 311) | ||
807 | #define __NR_dup3 (__NR_Linux + 312) | ||
808 | #define __NR_pipe2 (__NR_Linux + 313) | ||
809 | #define __NR_inotify_init1 (__NR_Linux + 314) | ||
810 | |||
811 | #define __NR_Linux_syscalls (__NR_inotify_init1 + 1) | ||
806 | 812 | ||
807 | 813 | ||
808 | #define __IGNORE_select /* newselect */ | 814 | #define __IGNORE_select /* newselect */ |
diff --git a/include/asm-parisc/unwind.h b/arch/parisc/include/asm/unwind.h index 2f7e6e50a158..52482e4fc20d 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 | |||
74 | int unwind_once(struct unwind_frame_info *info); | 74 | int unwind_once(struct unwind_frame_info *info); |
75 | int unwind_to_user(struct unwind_frame_info *info); | 75 | int unwind_to_user(struct unwind_frame_info *info); |
76 | 76 | ||
77 | int unwind_init(void); | ||
78 | |||
77 | #endif | 79 | #endif |
diff --git a/include/asm-parisc/user.h b/arch/parisc/include/asm/user.h index 80224753e508..80224753e508 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 171399a88ca6..171399a88ca6 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 c82eb12a5b18..c82eb12a5b18 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 000000000000..c5f676c3c224 --- /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 3efc0b73e4ff..699cf8ef2118 100644 --- a/arch/parisc/kernel/asm-offsets.c +++ b/arch/parisc/kernel/asm-offsets.c | |||
@@ -290,5 +290,8 @@ int main(void) | |||
290 | DEFINE(EXCDATA_IP, offsetof(struct exception_data, fault_ip)); | 290 | DEFINE(EXCDATA_IP, offsetof(struct exception_data, fault_ip)); |
291 | DEFINE(EXCDATA_SPACE, offsetof(struct exception_data, fault_space)); | 291 | DEFINE(EXCDATA_SPACE, offsetof(struct exception_data, fault_space)); |
292 | DEFINE(EXCDATA_ADDR, offsetof(struct exception_data, fault_addr)); | 292 | DEFINE(EXCDATA_ADDR, offsetof(struct exception_data, fault_addr)); |
293 | BLANK(); | ||
294 | DEFINE(ASM_PDC_RESULT_SIZE, NUM_PDC_RESULT * sizeof(unsigned long)); | ||
295 | BLANK(); | ||
293 | return 0; | 296 | return 0; |
294 | } | 297 | } |
diff --git a/arch/parisc/kernel/firmware.c b/arch/parisc/kernel/firmware.c index 7177a6cd1b7f..03f26bd75bd8 100644 --- a/arch/parisc/kernel/firmware.c +++ b/arch/parisc/kernel/firmware.c | |||
@@ -71,8 +71,8 @@ | |||
71 | #include <asm/processor.h> /* for boot_cpu_data */ | 71 | #include <asm/processor.h> /* for boot_cpu_data */ |
72 | 72 | ||
73 | static DEFINE_SPINLOCK(pdc_lock); | 73 | static DEFINE_SPINLOCK(pdc_lock); |
74 | static unsigned long pdc_result[32] __attribute__ ((aligned (8))); | 74 | extern unsigned long pdc_result[NUM_PDC_RESULT]; |
75 | static unsigned long pdc_result2[32] __attribute__ ((aligned (8))); | 75 | extern unsigned long pdc_result2[NUM_PDC_RESULT]; |
76 | 76 | ||
77 | #ifdef CONFIG_64BIT | 77 | #ifdef CONFIG_64BIT |
78 | #define WIDE_FIRMWARE 0x1 | 78 | #define WIDE_FIRMWARE 0x1 |
@@ -150,26 +150,40 @@ static void convert_to_wide(unsigned long *addr) | |||
150 | #endif | 150 | #endif |
151 | } | 151 | } |
152 | 152 | ||
153 | #ifdef CONFIG_64BIT | ||
154 | void __init set_firmware_width_unlocked(void) | ||
155 | { | ||
156 | int ret; | ||
157 | |||
158 | ret = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, | ||
159 | __pa(pdc_result), 0); | ||
160 | convert_to_wide(pdc_result); | ||
161 | if (pdc_result[0] != NARROW_FIRMWARE) | ||
162 | parisc_narrow_firmware = 0; | ||
163 | } | ||
164 | |||
153 | /** | 165 | /** |
154 | * set_firmware_width - Determine if the firmware is wide or narrow. | 166 | * set_firmware_width - Determine if the firmware is wide or narrow. |
155 | * | 167 | * |
156 | * This function must be called before any pdc_* function that uses the convert_to_wide | 168 | * This function must be called before any pdc_* function that uses the |
157 | * function. | 169 | * convert_to_wide function. |
158 | */ | 170 | */ |
159 | void __init set_firmware_width(void) | 171 | void __init set_firmware_width(void) |
160 | { | 172 | { |
161 | #ifdef CONFIG_64BIT | ||
162 | int retval; | ||
163 | unsigned long flags; | 173 | unsigned long flags; |
174 | spin_lock_irqsave(&pdc_lock, flags); | ||
175 | set_firmware_width_unlocked(); | ||
176 | spin_unlock_irqrestore(&pdc_lock, flags); | ||
177 | } | ||
178 | #else | ||
179 | void __init set_firmware_width_unlocked(void) { | ||
180 | return; | ||
181 | } | ||
164 | 182 | ||
165 | spin_lock_irqsave(&pdc_lock, flags); | 183 | void __init set_firmware_width(void) { |
166 | retval = mem_pdc_call(PDC_MODEL, PDC_MODEL_CAPABILITIES, __pa(pdc_result), 0); | 184 | return; |
167 | convert_to_wide(pdc_result); | ||
168 | if(pdc_result[0] != NARROW_FIRMWARE) | ||
169 | parisc_narrow_firmware = 0; | ||
170 | spin_unlock_irqrestore(&pdc_lock, flags); | ||
171 | #endif | ||
172 | } | 185 | } |
186 | #endif /*CONFIG_64BIT*/ | ||
173 | 187 | ||
174 | /** | 188 | /** |
175 | * pdc_emergency_unlock - Unlock the linux pdc lock | 189 | * pdc_emergency_unlock - Unlock the linux pdc lock |
@@ -288,6 +302,20 @@ int pdc_chassis_warn(unsigned long *warn) | |||
288 | return retval; | 302 | return retval; |
289 | } | 303 | } |
290 | 304 | ||
305 | int __init pdc_coproc_cfg_unlocked(struct pdc_coproc_cfg *pdc_coproc_info) | ||
306 | { | ||
307 | int ret; | ||
308 | |||
309 | ret = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result)); | ||
310 | convert_to_wide(pdc_result); | ||
311 | pdc_coproc_info->ccr_functional = pdc_result[0]; | ||
312 | pdc_coproc_info->ccr_present = pdc_result[1]; | ||
313 | pdc_coproc_info->revision = pdc_result[17]; | ||
314 | pdc_coproc_info->model = pdc_result[18]; | ||
315 | |||
316 | return ret; | ||
317 | } | ||
318 | |||
291 | /** | 319 | /** |
292 | * pdc_coproc_cfg - To identify coprocessors attached to the processor. | 320 | * pdc_coproc_cfg - To identify coprocessors attached to the processor. |
293 | * @pdc_coproc_info: Return buffer address. | 321 | * @pdc_coproc_info: Return buffer address. |
@@ -297,19 +325,14 @@ int pdc_chassis_warn(unsigned long *warn) | |||
297 | */ | 325 | */ |
298 | int __init pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info) | 326 | int __init pdc_coproc_cfg(struct pdc_coproc_cfg *pdc_coproc_info) |
299 | { | 327 | { |
300 | int retval; | 328 | int ret; |
301 | unsigned long flags; | 329 | unsigned long flags; |
302 | 330 | ||
303 | spin_lock_irqsave(&pdc_lock, flags); | 331 | spin_lock_irqsave(&pdc_lock, flags); |
304 | retval = mem_pdc_call(PDC_COPROC, PDC_COPROC_CFG, __pa(pdc_result)); | 332 | ret = pdc_coproc_cfg_unlocked(pdc_coproc_info); |
305 | convert_to_wide(pdc_result); | 333 | spin_unlock_irqrestore(&pdc_lock, flags); |
306 | pdc_coproc_info->ccr_functional = pdc_result[0]; | ||
307 | pdc_coproc_info->ccr_present = pdc_result[1]; | ||
308 | pdc_coproc_info->revision = pdc_result[17]; | ||
309 | pdc_coproc_info->model = pdc_result[18]; | ||
310 | spin_unlock_irqrestore(&pdc_lock, flags); | ||
311 | 334 | ||
312 | return retval; | 335 | return ret; |
313 | } | 336 | } |
314 | 337 | ||
315 | /** | 338 | /** |
diff --git a/arch/parisc/kernel/head.S b/arch/parisc/kernel/head.S index a84e31e82876..0e3d9f9b9e33 100644 --- a/arch/parisc/kernel/head.S +++ b/arch/parisc/kernel/head.S | |||
@@ -121,7 +121,7 @@ $pgt_fill_loop: | |||
121 | copy %r0,%r2 | 121 | copy %r0,%r2 |
122 | 122 | ||
123 | /* And the RFI Target address too */ | 123 | /* And the RFI Target address too */ |
124 | load32 start_kernel,%r11 | 124 | load32 start_parisc,%r11 |
125 | 125 | ||
126 | /* And the initial task pointer */ | 126 | /* And the initial task pointer */ |
127 | load32 init_thread_union,%r6 | 127 | load32 init_thread_union,%r6 |
diff --git a/arch/parisc/kernel/ptrace.c b/arch/parisc/kernel/ptrace.c index 49c637970789..90904f9dfc50 100644 --- a/arch/parisc/kernel/ptrace.c +++ b/arch/parisc/kernel/ptrace.c | |||
@@ -4,6 +4,7 @@ | |||
4 | * Copyright (C) 2000 Hewlett-Packard Co, Linuxcare Inc. | 4 | * Copyright (C) 2000 Hewlett-Packard Co, Linuxcare Inc. |
5 | * Copyright (C) 2000 Matthew Wilcox <matthew@wil.cx> | 5 | * Copyright (C) 2000 Matthew Wilcox <matthew@wil.cx> |
6 | * Copyright (C) 2000 David Huggins-Daines <dhd@debian.org> | 6 | * Copyright (C) 2000 David Huggins-Daines <dhd@debian.org> |
7 | * Copyright (C) 2008 Helge Deller <deller@gmx.de> | ||
7 | */ | 8 | */ |
8 | 9 | ||
9 | #include <linux/kernel.h> | 10 | #include <linux/kernel.h> |
@@ -27,15 +28,149 @@ | |||
27 | /* PSW bits we allow the debugger to modify */ | 28 | /* PSW bits we allow the debugger to modify */ |
28 | #define USER_PSW_BITS (PSW_N | PSW_V | PSW_CB) | 29 | #define USER_PSW_BITS (PSW_N | PSW_V | PSW_CB) |
29 | 30 | ||
30 | #undef DEBUG_PTRACE | 31 | /* |
32 | * Called by kernel/ptrace.c when detaching.. | ||
33 | * | ||
34 | * Make sure single step bits etc are not set. | ||
35 | */ | ||
36 | void ptrace_disable(struct task_struct *task) | ||
37 | { | ||
38 | task->ptrace &= ~(PT_SINGLESTEP|PT_BLOCKSTEP); | ||
31 | 39 | ||
32 | #ifdef DEBUG_PTRACE | 40 | /* make sure the trap bits are not set */ |
33 | #define DBG(x...) printk(x) | 41 | pa_psw(task)->r = 0; |
34 | #else | 42 | pa_psw(task)->t = 0; |
35 | #define DBG(x...) | 43 | pa_psw(task)->h = 0; |
36 | #endif | 44 | pa_psw(task)->l = 0; |
45 | } | ||
46 | |||
47 | /* | ||
48 | * The following functions are called by ptrace_resume() when | ||
49 | * enabling or disabling single/block tracing. | ||
50 | */ | ||
51 | void user_disable_single_step(struct task_struct *task) | ||
52 | { | ||
53 | ptrace_disable(task); | ||
54 | } | ||
55 | |||
56 | void user_enable_single_step(struct task_struct *task) | ||
57 | { | ||
58 | task->ptrace &= ~PT_BLOCKSTEP; | ||
59 | task->ptrace |= PT_SINGLESTEP; | ||
60 | |||
61 | if (pa_psw(task)->n) { | ||
62 | struct siginfo si; | ||
63 | |||
64 | /* Nullified, just crank over the queue. */ | ||
65 | task_regs(task)->iaoq[0] = task_regs(task)->iaoq[1]; | ||
66 | task_regs(task)->iasq[0] = task_regs(task)->iasq[1]; | ||
67 | task_regs(task)->iaoq[1] = task_regs(task)->iaoq[0] + 4; | ||
68 | pa_psw(task)->n = 0; | ||
69 | pa_psw(task)->x = 0; | ||
70 | pa_psw(task)->y = 0; | ||
71 | pa_psw(task)->z = 0; | ||
72 | pa_psw(task)->b = 0; | ||
73 | ptrace_disable(task); | ||
74 | /* Don't wake up the task, but let the | ||
75 | parent know something happened. */ | ||
76 | si.si_code = TRAP_TRACE; | ||
77 | si.si_addr = (void __user *) (task_regs(task)->iaoq[0] & ~3); | ||
78 | si.si_signo = SIGTRAP; | ||
79 | si.si_errno = 0; | ||
80 | force_sig_info(SIGTRAP, &si, task); | ||
81 | /* notify_parent(task, SIGCHLD); */ | ||
82 | return; | ||
83 | } | ||
84 | |||
85 | /* Enable recovery counter traps. The recovery counter | ||
86 | * itself will be set to zero on a task switch. If the | ||
87 | * task is suspended on a syscall then the syscall return | ||
88 | * path will overwrite the recovery counter with a suitable | ||
89 | * value such that it traps once back in user space. We | ||
90 | * disable interrupts in the tasks PSW here also, to avoid | ||
91 | * interrupts while the recovery counter is decrementing. | ||
92 | */ | ||
93 | pa_psw(task)->r = 1; | ||
94 | pa_psw(task)->t = 0; | ||
95 | pa_psw(task)->h = 0; | ||
96 | pa_psw(task)->l = 0; | ||
97 | } | ||
98 | |||
99 | void user_enable_block_step(struct task_struct *task) | ||
100 | { | ||
101 | task->ptrace &= ~PT_SINGLESTEP; | ||
102 | task->ptrace |= PT_BLOCKSTEP; | ||
103 | |||
104 | /* Enable taken branch trap. */ | ||
105 | pa_psw(task)->r = 0; | ||
106 | pa_psw(task)->t = 1; | ||
107 | pa_psw(task)->h = 0; | ||
108 | pa_psw(task)->l = 0; | ||
109 | } | ||
110 | |||
111 | long arch_ptrace(struct task_struct *child, long request, long addr, long data) | ||
112 | { | ||
113 | unsigned long tmp; | ||
114 | long ret = -EIO; | ||
37 | 115 | ||
38 | #ifdef CONFIG_64BIT | 116 | switch (request) { |
117 | |||
118 | /* Read the word at location addr in the USER area. For ptraced | ||
119 | processes, the kernel saves all regs on a syscall. */ | ||
120 | case PTRACE_PEEKUSR: | ||
121 | if ((addr & (sizeof(long)-1)) || | ||
122 | (unsigned long) addr >= sizeof(struct pt_regs)) | ||
123 | break; | ||
124 | tmp = *(unsigned long *) ((char *) task_regs(child) + addr); | ||
125 | ret = put_user(tmp, (unsigned long *) data); | ||
126 | break; | ||
127 | |||
128 | /* Write the word at location addr in the USER area. This will need | ||
129 | to change when the kernel no longer saves all regs on a syscall. | ||
130 | FIXME. There is a problem at the moment in that r3-r18 are only | ||
131 | saved if the process is ptraced on syscall entry, and even then | ||
132 | those values are overwritten by actual register values on syscall | ||
133 | exit. */ | ||
134 | case PTRACE_POKEUSR: | ||
135 | /* Some register values written here may be ignored in | ||
136 | * entry.S:syscall_restore_rfi; e.g. iaoq is written with | ||
137 | * r31/r31+4, and not with the values in pt_regs. | ||
138 | */ | ||
139 | if (addr == PT_PSW) { | ||
140 | /* Allow writing to Nullify, Divide-step-correction, | ||
141 | * and carry/borrow bits. | ||
142 | * BEWARE, if you set N, and then single step, it won't | ||
143 | * stop on the nullified instruction. | ||
144 | */ | ||
145 | data &= USER_PSW_BITS; | ||
146 | task_regs(child)->gr[0] &= ~USER_PSW_BITS; | ||
147 | task_regs(child)->gr[0] |= data; | ||
148 | ret = 0; | ||
149 | break; | ||
150 | } | ||
151 | |||
152 | if ((addr & (sizeof(long)-1)) || | ||
153 | (unsigned long) addr >= sizeof(struct pt_regs)) | ||
154 | break; | ||
155 | if ((addr >= PT_GR1 && addr <= PT_GR31) || | ||
156 | addr == PT_IAOQ0 || addr == PT_IAOQ1 || | ||
157 | (addr >= PT_FR0 && addr <= PT_FR31 + 4) || | ||
158 | addr == PT_SAR) { | ||
159 | *(unsigned long *) ((char *) task_regs(child) + addr) = data; | ||
160 | ret = 0; | ||
161 | } | ||
162 | break; | ||
163 | |||
164 | default: | ||
165 | ret = ptrace_request(child, request, addr, data); | ||
166 | break; | ||
167 | } | ||
168 | |||
169 | return ret; | ||
170 | } | ||
171 | |||
172 | |||
173 | #ifdef CONFIG_COMPAT | ||
39 | 174 | ||
40 | /* This function is needed to translate 32 bit pt_regs offsets in to | 175 | /* This function is needed to translate 32 bit pt_regs offsets in to |
41 | * 64 bit pt_regs offsets. For example, a 32 bit gdb under a 64 bit kernel | 176 | * 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) | |||
61 | else | 196 | else |
62 | return -1; | 197 | return -1; |
63 | } | 198 | } |
64 | #endif | ||
65 | 199 | ||
66 | /* | 200 | long compat_arch_ptrace(struct task_struct *child, compat_long_t request, |
67 | * Called by kernel/ptrace.c when detaching.. | 201 | compat_ulong_t addr, compat_ulong_t data) |
68 | * | ||
69 | * Make sure single step bits etc are not set. | ||
70 | */ | ||
71 | void ptrace_disable(struct task_struct *child) | ||
72 | { | 202 | { |
73 | /* make sure the trap bits are not set */ | 203 | compat_uint_t tmp; |
74 | pa_psw(child)->r = 0; | 204 | long ret = -EIO; |
75 | pa_psw(child)->t = 0; | ||
76 | pa_psw(child)->h = 0; | ||
77 | pa_psw(child)->l = 0; | ||
78 | } | ||
79 | |||
80 | long arch_ptrace(struct task_struct *child, long request, long addr, long data) | ||
81 | { | ||
82 | long ret; | ||
83 | #ifdef DEBUG_PTRACE | ||
84 | long oaddr=addr, odata=data; | ||
85 | #endif | ||
86 | 205 | ||
87 | switch (request) { | 206 | switch (request) { |
88 | case PTRACE_PEEKTEXT: /* read word at location addr. */ | ||
89 | case PTRACE_PEEKDATA: { | ||
90 | #ifdef CONFIG_64BIT | ||
91 | if (__is_compat_task(child)) { | ||
92 | int copied; | ||
93 | unsigned int tmp; | ||
94 | |||
95 | addr &= 0xffffffffL; | ||
96 | copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0); | ||
97 | ret = -EIO; | ||
98 | if (copied != sizeof(tmp)) | ||
99 | goto out_tsk; | ||
100 | ret = put_user(tmp,(unsigned int *) data); | ||
101 | DBG("sys_ptrace(PEEK%s, %d, %lx, %lx) returning %ld, data %x\n", | ||
102 | request == PTRACE_PEEKTEXT ? "TEXT" : "DATA", | ||
103 | pid, oaddr, odata, ret, tmp); | ||
104 | } | ||
105 | else | ||
106 | #endif | ||
107 | ret = generic_ptrace_peekdata(child, addr, data); | ||
108 | goto out_tsk; | ||
109 | } | ||
110 | 207 | ||
111 | /* when I and D space are separate, this will have to be fixed. */ | 208 | case PTRACE_PEEKUSR: |
112 | case PTRACE_POKETEXT: /* write the word at location addr. */ | 209 | if (addr & (sizeof(compat_uint_t)-1)) |
113 | case PTRACE_POKEDATA: | 210 | break; |
114 | ret = 0; | 211 | addr = translate_usr_offset(addr); |
115 | #ifdef CONFIG_64BIT | 212 | if (addr < 0) |
116 | if (__is_compat_task(child)) { | 213 | break; |
117 | unsigned int tmp = (unsigned int)data; | ||
118 | DBG("sys_ptrace(POKE%s, %d, %lx, %lx)\n", | ||
119 | request == PTRACE_POKETEXT ? "TEXT" : "DATA", | ||
120 | pid, oaddr, odata); | ||
121 | addr &= 0xffffffffL; | ||
122 | if (access_process_vm(child, addr, &tmp, sizeof(tmp), 1) == sizeof(tmp)) | ||
123 | goto out_tsk; | ||
124 | } | ||
125 | else | ||
126 | #endif | ||
127 | { | ||
128 | if (access_process_vm(child, addr, &data, sizeof(data), 1) == sizeof(data)) | ||
129 | goto out_tsk; | ||
130 | } | ||
131 | ret = -EIO; | ||
132 | goto out_tsk; | ||
133 | |||
134 | /* Read the word at location addr in the USER area. For ptraced | ||
135 | processes, the kernel saves all regs on a syscall. */ | ||
136 | case PTRACE_PEEKUSR: { | ||
137 | ret = -EIO; | ||
138 | #ifdef CONFIG_64BIT | ||
139 | if (__is_compat_task(child)) { | ||
140 | unsigned int tmp; | ||
141 | |||
142 | if (addr & (sizeof(int)-1)) | ||
143 | goto out_tsk; | ||
144 | if ((addr = translate_usr_offset(addr)) < 0) | ||
145 | goto out_tsk; | ||
146 | |||
147 | tmp = *(unsigned int *) ((char *) task_regs(child) + addr); | ||
148 | ret = put_user(tmp, (unsigned int *) data); | ||
149 | DBG("sys_ptrace(PEEKUSR, %d, %lx, %lx) returning %ld, addr %lx, data %x\n", | ||
150 | pid, oaddr, odata, ret, addr, tmp); | ||
151 | } | ||
152 | else | ||
153 | #endif | ||
154 | { | ||
155 | unsigned long tmp; | ||
156 | 214 | ||
157 | if ((addr & (sizeof(long)-1)) || (unsigned long) addr >= sizeof(struct pt_regs)) | 215 | tmp = *(compat_uint_t *) ((char *) task_regs(child) + addr); |
158 | goto out_tsk; | 216 | ret = put_user(tmp, (compat_uint_t *) (unsigned long) data); |
159 | tmp = *(unsigned long *) ((char *) task_regs(child) + addr); | 217 | break; |
160 | ret = put_user(tmp, (unsigned long *) data); | ||
161 | } | ||
162 | goto out_tsk; | ||
163 | } | ||
164 | 218 | ||
165 | /* Write the word at location addr in the USER area. This will need | 219 | /* Write the word at location addr in the USER area. This will need |
166 | to change when the kernel no longer saves all regs on a syscall. | 220 | 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) | |||
169 | those values are overwritten by actual register values on syscall | 223 | those values are overwritten by actual register values on syscall |
170 | exit. */ | 224 | exit. */ |
171 | case PTRACE_POKEUSR: | 225 | case PTRACE_POKEUSR: |
172 | ret = -EIO; | ||
173 | /* Some register values written here may be ignored in | 226 | /* Some register values written here may be ignored in |
174 | * entry.S:syscall_restore_rfi; e.g. iaoq is written with | 227 | * entry.S:syscall_restore_rfi; e.g. iaoq is written with |
175 | * r31/r31+4, and not with the values in pt_regs. | 228 | * r31/r31+4, and not with the values in pt_regs. |
176 | */ | 229 | */ |
177 | /* PT_PSW=0, so this is valid for 32 bit processes under 64 | ||
178 | * bit kernels. | ||
179 | */ | ||
180 | if (addr == PT_PSW) { | 230 | if (addr == PT_PSW) { |
181 | /* PT_PSW=0, so this is valid for 32 bit processes | 231 | /* Since PT_PSW==0, it is valid for 32 bit processes |
182 | * under 64 bit kernels. | 232 | * under 64 bit kernels as well. |
183 | * | ||
184 | * Allow writing to Nullify, Divide-step-correction, | ||
185 | * and carry/borrow bits. | ||
186 | * BEWARE, if you set N, and then single step, it won't | ||
187 | * stop on the nullified instruction. | ||
188 | */ | 233 | */ |
189 | DBG("sys_ptrace(POKEUSR, %d, %lx, %lx)\n", | 234 | ret = arch_ptrace(child, request, addr, data); |
190 | pid, oaddr, odata); | 235 | } else { |
191 | data &= USER_PSW_BITS; | 236 | if (addr & (sizeof(compat_uint_t)-1)) |
192 | task_regs(child)->gr[0] &= ~USER_PSW_BITS; | 237 | break; |
193 | task_regs(child)->gr[0] |= data; | 238 | addr = translate_usr_offset(addr); |
194 | ret = 0; | 239 | if (addr < 0) |
195 | goto out_tsk; | 240 | break; |
196 | } | ||
197 | #ifdef CONFIG_64BIT | ||
198 | if (__is_compat_task(child)) { | ||
199 | if (addr & (sizeof(int)-1)) | ||
200 | goto out_tsk; | ||
201 | if ((addr = translate_usr_offset(addr)) < 0) | ||
202 | goto out_tsk; | ||
203 | DBG("sys_ptrace(POKEUSR, %d, %lx, %lx) addr %lx\n", | ||
204 | pid, oaddr, odata, addr); | ||
205 | if (addr >= PT_FR0 && addr <= PT_FR31 + 4) { | 241 | if (addr >= PT_FR0 && addr <= PT_FR31 + 4) { |
206 | /* Special case, fp regs are 64 bits anyway */ | 242 | /* Special case, fp regs are 64 bits anyway */ |
207 | *(unsigned int *) ((char *) task_regs(child) + addr) = data; | 243 | *(__u64 *) ((char *) task_regs(child) + addr) = data; |
208 | ret = 0; | 244 | ret = 0; |
209 | } | 245 | } |
210 | else if ((addr >= PT_GR1+4 && addr <= PT_GR31+4) || | 246 | else if ((addr >= PT_GR1+4 && addr <= PT_GR31+4) || |
211 | addr == PT_IAOQ0+4 || addr == PT_IAOQ1+4 || | 247 | addr == PT_IAOQ0+4 || addr == PT_IAOQ1+4 || |
212 | addr == PT_SAR+4) { | 248 | addr == PT_SAR+4) { |
213 | /* Zero the top 32 bits */ | 249 | /* Zero the top 32 bits */ |
214 | *(unsigned int *) ((char *) task_regs(child) + addr - 4) = 0; | 250 | *(__u32 *) ((char *) task_regs(child) + addr - 4) = 0; |
215 | *(unsigned int *) ((char *) task_regs(child) + addr) = data; | 251 | *(__u32 *) ((char *) task_regs(child) + addr) = data; |
216 | ret = 0; | 252 | ret = 0; |
217 | } | 253 | } |
218 | goto out_tsk; | ||
219 | } | 254 | } |
220 | else | 255 | break; |
221 | #endif | ||
222 | { | ||
223 | if ((addr & (sizeof(long)-1)) || (unsigned long) addr >= sizeof(struct pt_regs)) | ||
224 | goto out_tsk; | ||
225 | if ((addr >= PT_GR1 && addr <= PT_GR31) || | ||
226 | addr == PT_IAOQ0 || addr == PT_IAOQ1 || | ||
227 | (addr >= PT_FR0 && addr <= PT_FR31 + 4) || | ||
228 | addr == PT_SAR) { | ||
229 | *(unsigned long *) ((char *) task_regs(child) + addr) = data; | ||
230 | ret = 0; | ||
231 | } | ||
232 | goto out_tsk; | ||
233 | } | ||
234 | |||
235 | case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ | ||
236 | case PTRACE_CONT: | ||
237 | ret = -EIO; | ||
238 | DBG("sys_ptrace(%s)\n", | ||
239 | request == PTRACE_SYSCALL ? "SYSCALL" : "CONT"); | ||
240 | if (!valid_signal(data)) | ||
241 | goto out_tsk; | ||
242 | child->ptrace &= ~(PT_SINGLESTEP|PT_BLOCKSTEP); | ||
243 | if (request == PTRACE_SYSCALL) { | ||
244 | set_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
245 | } else { | ||
246 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
247 | } | ||
248 | child->exit_code = data; | ||
249 | goto out_wake_notrap; | ||
250 | |||
251 | case PTRACE_KILL: | ||
252 | /* | ||
253 | * make the child exit. Best I can do is send it a | ||
254 | * sigkill. perhaps it should be put in the status | ||
255 | * that it wants to exit. | ||
256 | */ | ||
257 | ret = 0; | ||
258 | DBG("sys_ptrace(KILL)\n"); | ||
259 | if (child->exit_state == EXIT_ZOMBIE) /* already dead */ | ||
260 | goto out_tsk; | ||
261 | child->exit_code = SIGKILL; | ||
262 | goto out_wake_notrap; | ||
263 | |||
264 | case PTRACE_SINGLEBLOCK: | ||
265 | DBG("sys_ptrace(SINGLEBLOCK)\n"); | ||
266 | ret = -EIO; | ||
267 | if (!valid_signal(data)) | ||
268 | goto out_tsk; | ||
269 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
270 | child->ptrace &= ~PT_SINGLESTEP; | ||
271 | child->ptrace |= PT_BLOCKSTEP; | ||
272 | child->exit_code = data; | ||
273 | |||
274 | /* Enable taken branch trap. */ | ||
275 | pa_psw(child)->r = 0; | ||
276 | pa_psw(child)->t = 1; | ||
277 | pa_psw(child)->h = 0; | ||
278 | pa_psw(child)->l = 0; | ||
279 | goto out_wake; | ||
280 | |||
281 | case PTRACE_SINGLESTEP: | ||
282 | DBG("sys_ptrace(SINGLESTEP)\n"); | ||
283 | ret = -EIO; | ||
284 | if (!valid_signal(data)) | ||
285 | goto out_tsk; | ||
286 | |||
287 | clear_tsk_thread_flag(child, TIF_SYSCALL_TRACE); | ||
288 | child->ptrace &= ~PT_BLOCKSTEP; | ||
289 | child->ptrace |= PT_SINGLESTEP; | ||
290 | child->exit_code = data; | ||
291 | |||
292 | if (pa_psw(child)->n) { | ||
293 | struct siginfo si; | ||
294 | |||
295 | /* Nullified, just crank over the queue. */ | ||
296 | task_regs(child)->iaoq[0] = task_regs(child)->iaoq[1]; | ||
297 | task_regs(child)->iasq[0] = task_regs(child)->iasq[1]; | ||
298 | task_regs(child)->iaoq[1] = task_regs(child)->iaoq[0] + 4; | ||
299 | pa_psw(child)->n = 0; | ||
300 | pa_psw(child)->x = 0; | ||
301 | pa_psw(child)->y = 0; | ||
302 | pa_psw(child)->z = 0; | ||
303 | pa_psw(child)->b = 0; | ||
304 | ptrace_disable(child); | ||
305 | /* Don't wake up the child, but let the | ||
306 | parent know something happened. */ | ||
307 | si.si_code = TRAP_TRACE; | ||
308 | si.si_addr = (void __user *) (task_regs(child)->iaoq[0] & ~3); | ||
309 | si.si_signo = SIGTRAP; | ||
310 | si.si_errno = 0; | ||
311 | force_sig_info(SIGTRAP, &si, child); | ||
312 | //notify_parent(child, SIGCHLD); | ||
313 | //ret = 0; | ||
314 | goto out_wake; | ||
315 | } | ||
316 | |||
317 | /* Enable recovery counter traps. The recovery counter | ||
318 | * itself will be set to zero on a task switch. If the | ||
319 | * task is suspended on a syscall then the syscall return | ||
320 | * path will overwrite the recovery counter with a suitable | ||
321 | * value such that it traps once back in user space. We | ||
322 | * disable interrupts in the childs PSW here also, to avoid | ||
323 | * interrupts while the recovery counter is decrementing. | ||
324 | */ | ||
325 | pa_psw(child)->r = 1; | ||
326 | pa_psw(child)->t = 0; | ||
327 | pa_psw(child)->h = 0; | ||
328 | pa_psw(child)->l = 0; | ||
329 | /* give it a chance to run. */ | ||
330 | goto out_wake; | ||
331 | |||
332 | case PTRACE_GETEVENTMSG: | ||
333 | ret = put_user(child->ptrace_message, (unsigned int __user *) data); | ||
334 | goto out_tsk; | ||
335 | 256 | ||
336 | default: | 257 | default: |
337 | ret = ptrace_request(child, request, addr, data); | 258 | ret = compat_ptrace_request(child, request, addr, data); |
338 | goto out_tsk; | 259 | break; |
339 | } | 260 | } |
340 | 261 | ||
341 | out_wake_notrap: | ||
342 | ptrace_disable(child); | ||
343 | out_wake: | ||
344 | wake_up_process(child); | ||
345 | ret = 0; | ||
346 | out_tsk: | ||
347 | DBG("arch_ptrace(%ld, %d, %lx, %lx) returning %ld\n", | ||
348 | request, pid, oaddr, odata, ret); | ||
349 | return ret; | 262 | return ret; |
350 | } | 263 | } |
264 | #endif | ||
265 | |||
351 | 266 | ||
352 | void syscall_trace(void) | 267 | void syscall_trace(void) |
353 | { | 268 | { |
diff --git a/arch/parisc/kernel/real2.S b/arch/parisc/kernel/real2.S index 7a92695d95a6..5f3d3a1f9037 100644 --- a/arch/parisc/kernel/real2.S +++ b/arch/parisc/kernel/real2.S | |||
@@ -8,12 +8,24 @@ | |||
8 | * | 8 | * |
9 | */ | 9 | */ |
10 | 10 | ||
11 | #include <asm/pdc.h> | ||
11 | #include <asm/psw.h> | 12 | #include <asm/psw.h> |
12 | #include <asm/assembly.h> | 13 | #include <asm/assembly.h> |
14 | #include <asm/asm-offsets.h> | ||
13 | 15 | ||
14 | #include <linux/linkage.h> | 16 | #include <linux/linkage.h> |
15 | 17 | ||
18 | |||
16 | .section .bss | 19 | .section .bss |
20 | |||
21 | .export pdc_result | ||
22 | .export pdc_result2 | ||
23 | .align 8 | ||
24 | pdc_result: | ||
25 | .block ASM_PDC_RESULT_SIZE | ||
26 | pdc_result2: | ||
27 | .block ASM_PDC_RESULT_SIZE | ||
28 | |||
17 | .export real_stack | 29 | .export real_stack |
18 | .export real32_stack | 30 | .export real32_stack |
19 | .export real64_stack | 31 | .export real64_stack |
diff --git a/arch/parisc/kernel/setup.c b/arch/parisc/kernel/setup.c index 39e7c5a5946a..7d27853ff8c8 100644 --- a/arch/parisc/kernel/setup.c +++ b/arch/parisc/kernel/setup.c | |||
@@ -44,6 +44,7 @@ | |||
44 | #include <asm/pdc_chassis.h> | 44 | #include <asm/pdc_chassis.h> |
45 | #include <asm/io.h> | 45 | #include <asm/io.h> |
46 | #include <asm/setup.h> | 46 | #include <asm/setup.h> |
47 | #include <asm/unwind.h> | ||
47 | 48 | ||
48 | static char __initdata command_line[COMMAND_LINE_SIZE]; | 49 | static char __initdata command_line[COMMAND_LINE_SIZE]; |
49 | 50 | ||
@@ -123,6 +124,7 @@ void __init setup_arch(char **cmdline_p) | |||
123 | #ifdef CONFIG_64BIT | 124 | #ifdef CONFIG_64BIT |
124 | extern int parisc_narrow_firmware; | 125 | extern int parisc_narrow_firmware; |
125 | #endif | 126 | #endif |
127 | unwind_init(); | ||
126 | 128 | ||
127 | init_per_cpu(smp_processor_id()); /* Set Modes & Enable FP */ | 129 | init_per_cpu(smp_processor_id()); /* Set Modes & Enable FP */ |
128 | 130 | ||
@@ -368,6 +370,31 @@ static int __init parisc_init(void) | |||
368 | 370 | ||
369 | return 0; | 371 | return 0; |
370 | } | 372 | } |
371 | |||
372 | arch_initcall(parisc_init); | 373 | arch_initcall(parisc_init); |
373 | 374 | ||
375 | void start_parisc(void) | ||
376 | { | ||
377 | extern void start_kernel(void); | ||
378 | |||
379 | int ret, cpunum; | ||
380 | struct pdc_coproc_cfg coproc_cfg; | ||
381 | |||
382 | cpunum = smp_processor_id(); | ||
383 | |||
384 | set_firmware_width_unlocked(); | ||
385 | |||
386 | ret = pdc_coproc_cfg_unlocked(&coproc_cfg); | ||
387 | if (ret >= 0 && coproc_cfg.ccr_functional) { | ||
388 | mtctl(coproc_cfg.ccr_functional, 10); | ||
389 | |||
390 | cpu_data[cpunum].fp_rev = coproc_cfg.revision; | ||
391 | cpu_data[cpunum].fp_model = coproc_cfg.model; | ||
392 | |||
393 | asm volatile ("fstd %fr0,8(%sp)"); | ||
394 | } else { | ||
395 | panic("must have an fpu to boot linux"); | ||
396 | } | ||
397 | |||
398 | start_kernel(); | ||
399 | // not reached | ||
400 | } | ||
diff --git a/arch/parisc/kernel/syscall_table.S b/arch/parisc/kernel/syscall_table.S index c7e59f548817..303d2b647e41 100644 --- a/arch/parisc/kernel/syscall_table.S +++ b/arch/parisc/kernel/syscall_table.S | |||
@@ -87,7 +87,7 @@ | |||
87 | ENTRY_SAME(setuid) | 87 | ENTRY_SAME(setuid) |
88 | ENTRY_SAME(getuid) | 88 | ENTRY_SAME(getuid) |
89 | ENTRY_COMP(stime) /* 25 */ | 89 | ENTRY_COMP(stime) /* 25 */ |
90 | ENTRY_SAME(ptrace) | 90 | ENTRY_COMP(ptrace) |
91 | ENTRY_SAME(alarm) | 91 | ENTRY_SAME(alarm) |
92 | /* see stat comment */ | 92 | /* see stat comment */ |
93 | ENTRY_COMP(newfstat) | 93 | ENTRY_COMP(newfstat) |
@@ -407,6 +407,12 @@ | |||
407 | ENTRY_SAME(timerfd_create) | 407 | ENTRY_SAME(timerfd_create) |
408 | ENTRY_COMP(timerfd_settime) | 408 | ENTRY_COMP(timerfd_settime) |
409 | ENTRY_COMP(timerfd_gettime) | 409 | ENTRY_COMP(timerfd_gettime) |
410 | ENTRY_COMP(signalfd4) | ||
411 | ENTRY_SAME(eventfd2) /* 310 */ | ||
412 | ENTRY_SAME(epoll_create1) | ||
413 | ENTRY_SAME(dup3) | ||
414 | ENTRY_SAME(pipe2) | ||
415 | ENTRY_SAME(inotify_init1) | ||
410 | 416 | ||
411 | /* Nothing yet */ | 417 | /* Nothing yet */ |
412 | 418 | ||
diff --git a/arch/parisc/kernel/time.c b/arch/parisc/kernel/time.c index 24be86bba94d..4d09203bc693 100644 --- a/arch/parisc/kernel/time.c +++ b/arch/parisc/kernel/time.c | |||
@@ -23,6 +23,7 @@ | |||
23 | #include <linux/smp.h> | 23 | #include <linux/smp.h> |
24 | #include <linux/profile.h> | 24 | #include <linux/profile.h> |
25 | #include <linux/clocksource.h> | 25 | #include <linux/clocksource.h> |
26 | #include <linux/platform_device.h> | ||
26 | 27 | ||
27 | #include <asm/uaccess.h> | 28 | #include <asm/uaccess.h> |
28 | #include <asm/io.h> | 29 | #include <asm/io.h> |
@@ -215,6 +216,24 @@ void __init start_cpu_itimer(void) | |||
215 | cpu_data[cpu].it_value = next_tick; | 216 | cpu_data[cpu].it_value = next_tick; |
216 | } | 217 | } |
217 | 218 | ||
219 | struct platform_device rtc_parisc_dev = { | ||
220 | .name = "rtc-parisc", | ||
221 | .id = -1, | ||
222 | }; | ||
223 | |||
224 | static int __init rtc_init(void) | ||
225 | { | ||
226 | int ret; | ||
227 | |||
228 | ret = platform_device_register(&rtc_parisc_dev); | ||
229 | if (ret < 0) | ||
230 | printk(KERN_ERR "unable to register rtc device...\n"); | ||
231 | |||
232 | /* not necessarily an error */ | ||
233 | return 0; | ||
234 | } | ||
235 | module_init(rtc_init); | ||
236 | |||
218 | void __init time_init(void) | 237 | void __init time_init(void) |
219 | { | 238 | { |
220 | static struct pdc_tod tod_data; | 239 | static struct pdc_tod tod_data; |
@@ -245,4 +264,3 @@ void __init time_init(void) | |||
245 | xtime.tv_nsec = 0; | 264 | xtime.tv_nsec = 0; |
246 | } | 265 | } |
247 | } | 266 | } |
248 | |||
diff --git a/arch/parisc/kernel/unwind.c b/arch/parisc/kernel/unwind.c index 701b2d2d8882..6773c582e457 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) | |||
170 | } | 170 | } |
171 | 171 | ||
172 | /* Called from setup_arch to import the kernel unwind info */ | 172 | /* Called from setup_arch to import the kernel unwind info */ |
173 | static int unwind_init(void) | 173 | int unwind_init(void) |
174 | { | 174 | { |
175 | long start, stop; | 175 | long start, stop; |
176 | register unsigned long gp __asm__ ("r27"); | 176 | register unsigned long gp __asm__ ("r27"); |
@@ -417,5 +417,3 @@ int unwind_to_user(struct unwind_frame_info *info) | |||
417 | 417 | ||
418 | return ret; | 418 | return ret; |
419 | } | 419 | } |
420 | |||
421 | module_init(unwind_init); | ||
diff --git a/drivers/char/agp/parisc-agp.c b/drivers/char/agp/parisc-agp.c index f2492ecf0824..db60539bf67a 100644 --- a/drivers/char/agp/parisc-agp.c +++ b/drivers/char/agp/parisc-agp.c | |||
@@ -20,8 +20,8 @@ | |||
20 | #include <linux/agp_backend.h> | 20 | #include <linux/agp_backend.h> |
21 | #include <linux/log2.h> | 21 | #include <linux/log2.h> |
22 | 22 | ||
23 | #include <asm-parisc/parisc-device.h> | 23 | #include <asm/parisc-device.h> |
24 | #include <asm-parisc/ropes.h> | 24 | #include <asm/ropes.h> |
25 | 25 | ||
26 | #include "agp.h" | 26 | #include "agp.h" |
27 | 27 | ||
diff --git a/drivers/parisc/ccio-dma.c b/drivers/parisc/ccio-dma.c index b30e38f3a50d..dcc1e9958d2f 100644 --- a/drivers/parisc/ccio-dma.c +++ b/drivers/parisc/ccio-dma.c | |||
@@ -66,15 +66,8 @@ | |||
66 | #undef DEBUG_CCIO_RUN_SG | 66 | #undef DEBUG_CCIO_RUN_SG |
67 | 67 | ||
68 | #ifdef CONFIG_PROC_FS | 68 | #ifdef CONFIG_PROC_FS |
69 | /* | 69 | /* depends on proc fs support. But costs CPU performance. */ |
70 | * CCIO_SEARCH_TIME can help measure how fast the bitmap search is. | 70 | #undef CCIO_COLLECT_STATS |
71 | * impacts performance though - ditch it if you don't use it. | ||
72 | */ | ||
73 | #define CCIO_SEARCH_TIME | ||
74 | #undef CCIO_MAP_STATS | ||
75 | #else | ||
76 | #undef CCIO_SEARCH_TIME | ||
77 | #undef CCIO_MAP_STATS | ||
78 | #endif | 71 | #endif |
79 | 72 | ||
80 | #include <linux/proc_fs.h> | 73 | #include <linux/proc_fs.h> |
@@ -239,12 +232,10 @@ struct ioc { | |||
239 | u32 res_size; /* size of resource map in bytes */ | 232 | u32 res_size; /* size of resource map in bytes */ |
240 | spinlock_t res_lock; | 233 | spinlock_t res_lock; |
241 | 234 | ||
242 | #ifdef CCIO_SEARCH_TIME | 235 | #ifdef CCIO_COLLECT_STATS |
243 | #define CCIO_SEARCH_SAMPLE 0x100 | 236 | #define CCIO_SEARCH_SAMPLE 0x100 |
244 | unsigned long avg_search[CCIO_SEARCH_SAMPLE]; | 237 | unsigned long avg_search[CCIO_SEARCH_SAMPLE]; |
245 | unsigned long avg_idx; /* current index into avg_search */ | 238 | unsigned long avg_idx; /* current index into avg_search */ |
246 | #endif | ||
247 | #ifdef CCIO_MAP_STATS | ||
248 | unsigned long used_pages; | 239 | unsigned long used_pages; |
249 | unsigned long msingle_calls; | 240 | unsigned long msingle_calls; |
250 | unsigned long msingle_pages; | 241 | unsigned long msingle_pages; |
@@ -351,7 +342,7 @@ ccio_alloc_range(struct ioc *ioc, struct device *dev, size_t size) | |||
351 | unsigned int pages_needed = size >> IOVP_SHIFT; | 342 | unsigned int pages_needed = size >> IOVP_SHIFT; |
352 | unsigned int res_idx; | 343 | unsigned int res_idx; |
353 | unsigned long boundary_size; | 344 | unsigned long boundary_size; |
354 | #ifdef CCIO_SEARCH_TIME | 345 | #ifdef CCIO_COLLECT_STATS |
355 | unsigned long cr_start = mfctl(16); | 346 | unsigned long cr_start = mfctl(16); |
356 | #endif | 347 | #endif |
357 | 348 | ||
@@ -406,7 +397,7 @@ resource_found: | |||
406 | DBG_RES("%s() res_idx %d res_hint: %d\n", | 397 | DBG_RES("%s() res_idx %d res_hint: %d\n", |
407 | __func__, res_idx, ioc->res_hint); | 398 | __func__, res_idx, ioc->res_hint); |
408 | 399 | ||
409 | #ifdef CCIO_SEARCH_TIME | 400 | #ifdef CCIO_COLLECT_STATS |
410 | { | 401 | { |
411 | unsigned long cr_end = mfctl(16); | 402 | unsigned long cr_end = mfctl(16); |
412 | unsigned long tmp = cr_end - cr_start; | 403 | unsigned long tmp = cr_end - cr_start; |
@@ -416,7 +407,7 @@ resource_found: | |||
416 | ioc->avg_search[ioc->avg_idx++] = cr_start; | 407 | ioc->avg_search[ioc->avg_idx++] = cr_start; |
417 | ioc->avg_idx &= CCIO_SEARCH_SAMPLE - 1; | 408 | ioc->avg_idx &= CCIO_SEARCH_SAMPLE - 1; |
418 | #endif | 409 | #endif |
419 | #ifdef CCIO_MAP_STATS | 410 | #ifdef CCIO_COLLECT_STATS |
420 | ioc->used_pages += pages_needed; | 411 | ioc->used_pages += pages_needed; |
421 | #endif | 412 | #endif |
422 | /* | 413 | /* |
@@ -452,7 +443,7 @@ ccio_free_range(struct ioc *ioc, dma_addr_t iova, unsigned long pages_mapped) | |||
452 | DBG_RES("%s(): res_idx: %d pages_mapped %d\n", | 443 | DBG_RES("%s(): res_idx: %d pages_mapped %d\n", |
453 | __func__, res_idx, pages_mapped); | 444 | __func__, res_idx, pages_mapped); |
454 | 445 | ||
455 | #ifdef CCIO_MAP_STATS | 446 | #ifdef CCIO_COLLECT_STATS |
456 | ioc->used_pages -= pages_mapped; | 447 | ioc->used_pages -= pages_mapped; |
457 | #endif | 448 | #endif |
458 | 449 | ||
@@ -764,7 +755,7 @@ ccio_map_single(struct device *dev, void *addr, size_t size, | |||
764 | size = ALIGN(size + offset, IOVP_SIZE); | 755 | size = ALIGN(size + offset, IOVP_SIZE); |
765 | spin_lock_irqsave(&ioc->res_lock, flags); | 756 | spin_lock_irqsave(&ioc->res_lock, flags); |
766 | 757 | ||
767 | #ifdef CCIO_MAP_STATS | 758 | #ifdef CCIO_COLLECT_STATS |
768 | ioc->msingle_calls++; | 759 | ioc->msingle_calls++; |
769 | ioc->msingle_pages += size >> IOVP_SHIFT; | 760 | ioc->msingle_pages += size >> IOVP_SHIFT; |
770 | #endif | 761 | #endif |
@@ -828,7 +819,7 @@ ccio_unmap_single(struct device *dev, dma_addr_t iova, size_t size, | |||
828 | 819 | ||
829 | spin_lock_irqsave(&ioc->res_lock, flags); | 820 | spin_lock_irqsave(&ioc->res_lock, flags); |
830 | 821 | ||
831 | #ifdef CCIO_MAP_STATS | 822 | #ifdef CCIO_COLLECT_STATS |
832 | ioc->usingle_calls++; | 823 | ioc->usingle_calls++; |
833 | ioc->usingle_pages += size >> IOVP_SHIFT; | 824 | ioc->usingle_pages += size >> IOVP_SHIFT; |
834 | #endif | 825 | #endif |
@@ -894,7 +885,7 @@ ccio_free_consistent(struct device *dev, size_t size, void *cpu_addr, | |||
894 | */ | 885 | */ |
895 | #define PIDE_FLAG 0x80000000UL | 886 | #define PIDE_FLAG 0x80000000UL |
896 | 887 | ||
897 | #ifdef CCIO_MAP_STATS | 888 | #ifdef CCIO_COLLECT_STATS |
898 | #define IOMMU_MAP_STATS | 889 | #define IOMMU_MAP_STATS |
899 | #endif | 890 | #endif |
900 | #include "iommu-helpers.h" | 891 | #include "iommu-helpers.h" |
@@ -938,7 +929,7 @@ ccio_map_sg(struct device *dev, struct scatterlist *sglist, int nents, | |||
938 | 929 | ||
939 | spin_lock_irqsave(&ioc->res_lock, flags); | 930 | spin_lock_irqsave(&ioc->res_lock, flags); |
940 | 931 | ||
941 | #ifdef CCIO_MAP_STATS | 932 | #ifdef CCIO_COLLECT_STATS |
942 | ioc->msg_calls++; | 933 | ioc->msg_calls++; |
943 | #endif | 934 | #endif |
944 | 935 | ||
@@ -997,13 +988,13 @@ ccio_unmap_sg(struct device *dev, struct scatterlist *sglist, int nents, | |||
997 | DBG_RUN_SG("%s() START %d entries, %08lx,%x\n", | 988 | DBG_RUN_SG("%s() START %d entries, %08lx,%x\n", |
998 | __func__, nents, sg_virt_addr(sglist), sglist->length); | 989 | __func__, nents, sg_virt_addr(sglist), sglist->length); |
999 | 990 | ||
1000 | #ifdef CCIO_MAP_STATS | 991 | #ifdef CCIO_COLLECT_STATS |
1001 | ioc->usg_calls++; | 992 | ioc->usg_calls++; |
1002 | #endif | 993 | #endif |
1003 | 994 | ||
1004 | while(sg_dma_len(sglist) && nents--) { | 995 | while(sg_dma_len(sglist) && nents--) { |
1005 | 996 | ||
1006 | #ifdef CCIO_MAP_STATS | 997 | #ifdef CCIO_COLLECT_STATS |
1007 | ioc->usg_pages += sg_dma_len(sglist) >> PAGE_SHIFT; | 998 | ioc->usg_pages += sg_dma_len(sglist) >> PAGE_SHIFT; |
1008 | #endif | 999 | #endif |
1009 | ccio_unmap_single(dev, sg_dma_address(sglist), | 1000 | ccio_unmap_single(dev, sg_dma_address(sglist), |
@@ -1048,7 +1039,7 @@ static int ccio_proc_info(struct seq_file *m, void *p) | |||
1048 | len += seq_printf(m, "IO PDIR size : %d bytes (%d entries)\n", | 1039 | len += seq_printf(m, "IO PDIR size : %d bytes (%d entries)\n", |
1049 | total_pages * 8, total_pages); | 1040 | total_pages * 8, total_pages); |
1050 | 1041 | ||
1051 | #ifdef CCIO_MAP_STATS | 1042 | #ifdef CCIO_COLLECT_STATS |
1052 | len += seq_printf(m, "IO PDIR entries : %ld free %ld used (%d%%)\n", | 1043 | len += seq_printf(m, "IO PDIR entries : %ld free %ld used (%d%%)\n", |
1053 | total_pages - ioc->used_pages, ioc->used_pages, | 1044 | total_pages - ioc->used_pages, ioc->used_pages, |
1054 | (int)(ioc->used_pages * 100 / total_pages)); | 1045 | (int)(ioc->used_pages * 100 / total_pages)); |
@@ -1057,7 +1048,7 @@ static int ccio_proc_info(struct seq_file *m, void *p) | |||
1057 | len += seq_printf(m, "Resource bitmap : %d bytes (%d pages)\n", | 1048 | len += seq_printf(m, "Resource bitmap : %d bytes (%d pages)\n", |
1058 | ioc->res_size, total_pages); | 1049 | ioc->res_size, total_pages); |
1059 | 1050 | ||
1060 | #ifdef CCIO_SEARCH_TIME | 1051 | #ifdef CCIO_COLLECT_STATS |
1061 | min = max = ioc->avg_search[0]; | 1052 | min = max = ioc->avg_search[0]; |
1062 | for(j = 0; j < CCIO_SEARCH_SAMPLE; ++j) { | 1053 | for(j = 0; j < CCIO_SEARCH_SAMPLE; ++j) { |
1063 | avg += ioc->avg_search[j]; | 1054 | avg += ioc->avg_search[j]; |
@@ -1070,7 +1061,7 @@ static int ccio_proc_info(struct seq_file *m, void *p) | |||
1070 | len += seq_printf(m, " Bitmap search : %ld/%ld/%ld (min/avg/max CPU Cycles)\n", | 1061 | len += seq_printf(m, " Bitmap search : %ld/%ld/%ld (min/avg/max CPU Cycles)\n", |
1071 | min, avg, max); | 1062 | min, avg, max); |
1072 | #endif | 1063 | #endif |
1073 | #ifdef CCIO_MAP_STATS | 1064 | #ifdef CCIO_COLLECT_STATS |
1074 | len += seq_printf(m, "pci_map_single(): %8ld calls %8ld pages (avg %d/1000)\n", | 1065 | len += seq_printf(m, "pci_map_single(): %8ld calls %8ld pages (avg %d/1000)\n", |
1075 | ioc->msingle_calls, ioc->msingle_pages, | 1066 | ioc->msingle_calls, ioc->msingle_pages, |
1076 | (int)((ioc->msingle_pages * 1000)/ioc->msingle_calls)); | 1067 | (int)((ioc->msingle_pages * 1000)/ioc->msingle_calls)); |
@@ -1088,7 +1079,7 @@ static int ccio_proc_info(struct seq_file *m, void *p) | |||
1088 | len += seq_printf(m, "pci_unmap_sg() : %8ld calls %8ld pages (avg %d/1000)\n\n\n", | 1079 | len += seq_printf(m, "pci_unmap_sg() : %8ld calls %8ld pages (avg %d/1000)\n\n\n", |
1089 | ioc->usg_calls, ioc->usg_pages, | 1080 | ioc->usg_calls, ioc->usg_pages, |
1090 | (int)((ioc->usg_pages * 1000)/ioc->usg_calls)); | 1081 | (int)((ioc->usg_pages * 1000)/ioc->usg_calls)); |
1091 | #endif /* CCIO_MAP_STATS */ | 1082 | #endif /* CCIO_COLLECT_STATS */ |
1092 | 1083 | ||
1093 | ioc = ioc->next; | 1084 | ioc = ioc->next; |
1094 | } | 1085 | } |
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index f660ef3e5b29..814f49fde530 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig | |||
@@ -610,6 +610,14 @@ config RTC_DRV_RS5C313 | |||
610 | help | 610 | help |
611 | If you say yes here you get support for the Ricoh RS5C313 RTC chips. | 611 | If you say yes here you get support for the Ricoh RS5C313 RTC chips. |
612 | 612 | ||
613 | config RTC_DRV_PARISC | ||
614 | tristate "PA-RISC firmware RTC support" | ||
615 | depends on PARISC | ||
616 | help | ||
617 | Say Y or M here to enable RTC support on PA-RISC systems using | ||
618 | firmware calls. If you do not know what you are doing, you should | ||
619 | just say Y. | ||
620 | |||
613 | config RTC_DRV_PPC | 621 | config RTC_DRV_PPC |
614 | tristate "PowerPC machine dependent RTC support" | 622 | tristate "PowerPC machine dependent RTC support" |
615 | depends on PPC | 623 | depends on PPC |
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile index d05928b3ca94..d6a9ac7176ea 100644 --- a/drivers/rtc/Makefile +++ b/drivers/rtc/Makefile | |||
@@ -51,6 +51,7 @@ obj-$(CONFIG_RTC_DRV_PCF8563) += rtc-pcf8563.o | |||
51 | obj-$(CONFIG_RTC_DRV_PCF8583) += rtc-pcf8583.o | 51 | obj-$(CONFIG_RTC_DRV_PCF8583) += rtc-pcf8583.o |
52 | obj-$(CONFIG_RTC_DRV_PL030) += rtc-pl030.o | 52 | obj-$(CONFIG_RTC_DRV_PL030) += rtc-pl030.o |
53 | obj-$(CONFIG_RTC_DRV_PL031) += rtc-pl031.o | 53 | obj-$(CONFIG_RTC_DRV_PL031) += rtc-pl031.o |
54 | obj-$(CONFIG_RTC_DRV_PARISC) += rtc-parisc.o | ||
54 | obj-$(CONFIG_RTC_DRV_PPC) += rtc-ppc.o | 55 | obj-$(CONFIG_RTC_DRV_PPC) += rtc-ppc.o |
55 | obj-$(CONFIG_RTC_DRV_R9701) += rtc-r9701.o | 56 | obj-$(CONFIG_RTC_DRV_R9701) += rtc-r9701.o |
56 | obj-$(CONFIG_RTC_DRV_RS5C313) += rtc-rs5c313.o | 57 | 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 000000000000..346d633655e7 --- /dev/null +++ b/drivers/rtc/rtc-parisc.c | |||
@@ -0,0 +1,111 @@ | |||
1 | /* rtc-parisc: RTC for HP PA-RISC firmware | ||
2 | * | ||
3 | * Copyright (C) 2008 Kyle McMartin <kyle@mcmartin.ca> | ||
4 | */ | ||
5 | |||
6 | #include <linux/kernel.h> | ||
7 | #include <linux/module.h> | ||
8 | #include <linux/time.h> | ||
9 | #include <linux/platform_device.h> | ||
10 | |||
11 | #include <asm/rtc.h> | ||
12 | |||
13 | /* as simple as can be, and no simpler. */ | ||
14 | struct parisc_rtc { | ||
15 | struct rtc_device *rtc; | ||
16 | spinlock_t lock; | ||
17 | }; | ||
18 | |||
19 | static int parisc_get_time(struct device *dev, struct rtc_time *tm) | ||
20 | { | ||
21 | struct parisc_rtc *p = dev_get_drvdata(dev); | ||
22 | unsigned long flags, ret; | ||
23 | |||
24 | spin_lock_irqsave(&p->lock, flags); | ||
25 | ret = get_rtc_time(tm); | ||
26 | spin_unlock_irqrestore(&p->lock, flags); | ||
27 | |||
28 | if (ret & RTC_BATT_BAD) | ||
29 | return -EOPNOTSUPP; | ||
30 | |||
31 | return 0; | ||
32 | } | ||
33 | |||
34 | static int parisc_set_time(struct device *dev, struct rtc_time *tm) | ||
35 | { | ||
36 | struct parisc_rtc *p = dev_get_drvdata(dev); | ||
37 | unsigned long flags, ret; | ||
38 | |||
39 | spin_lock_irqsave(&p->lock, flags); | ||
40 | ret = set_rtc_time(tm); | ||
41 | spin_unlock_irqrestore(&p->lock, flags); | ||
42 | |||
43 | if (ret < 0) | ||
44 | return -EOPNOTSUPP; | ||
45 | |||
46 | return 0; | ||
47 | } | ||
48 | |||
49 | static const struct rtc_class_ops parisc_rtc_ops = { | ||
50 | .read_time = parisc_get_time, | ||
51 | .set_time = parisc_set_time, | ||
52 | }; | ||
53 | |||
54 | static int __devinit parisc_rtc_probe(struct platform_device *dev) | ||
55 | { | ||
56 | struct parisc_rtc *p; | ||
57 | |||
58 | p = kzalloc(sizeof (*p), GFP_KERNEL); | ||
59 | if (!p) | ||
60 | return -ENOMEM; | ||
61 | |||
62 | spin_lock_init(&p->lock); | ||
63 | |||
64 | p->rtc = rtc_device_register("rtc-parisc", &dev->dev, &parisc_rtc_ops, | ||
65 | THIS_MODULE); | ||
66 | if (IS_ERR(p->rtc)) { | ||
67 | int err = PTR_ERR(p->rtc); | ||
68 | kfree(p); | ||
69 | return err; | ||
70 | } | ||
71 | |||
72 | platform_set_drvdata(dev, p); | ||
73 | |||
74 | return 0; | ||
75 | } | ||
76 | |||
77 | static int __devexit parisc_rtc_remove(struct platform_device *dev) | ||
78 | { | ||
79 | struct parisc_rtc *p = platform_get_drvdata(dev); | ||
80 | |||
81 | rtc_device_unregister(p->rtc); | ||
82 | kfree(p); | ||
83 | |||
84 | return 0; | ||
85 | } | ||
86 | |||
87 | static struct platform_driver parisc_rtc_driver = { | ||
88 | .driver = { | ||
89 | .name = "rtc-parisc", | ||
90 | .owner = THIS_MODULE, | ||
91 | }, | ||
92 | .probe = parisc_rtc_probe, | ||
93 | .remove = __devexit_p(parisc_rtc_remove), | ||
94 | }; | ||
95 | |||
96 | static int __init parisc_rtc_init(void) | ||
97 | { | ||
98 | return platform_driver_register(&parisc_rtc_driver); | ||
99 | } | ||
100 | |||
101 | static void __exit parisc_rtc_fini(void) | ||
102 | { | ||
103 | platform_driver_unregister(&parisc_rtc_driver); | ||
104 | } | ||
105 | |||
106 | module_init(parisc_rtc_init); | ||
107 | module_exit(parisc_rtc_fini); | ||
108 | |||
109 | MODULE_AUTHOR("Kyle McMartin <kyle@mcmartin.ca>"); | ||
110 | MODULE_LICENSE("GPL"); | ||
111 | MODULE_DESCRIPTION("HP PA-RISC RTC driver"); | ||