1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * arch/parisc/include/asm/kprobes.h
4 *
5 * PA-RISC kprobes implementation
6 *
7 * Copyright (c) 2019 Sven Schnelle <svens@stackframe.org>
8 */
9
10#ifndef _PARISC_KPROBES_H
11#define _PARISC_KPROBES_H
12
13#include <asm-generic/kprobes.h>
14
15#ifdef CONFIG_KPROBES
16
17#include <linux/types.h>
18#include <linux/ptrace.h>
19#include <linux/notifier.h>
20
21#define PARISC_KPROBES_BREAK_INSN	0x3ff801f
22#define PARISC_KPROBES_BREAK_INSN2	0x3ff801e
23#define  __ARCH_WANT_KPROBES_INSN_SLOT
24#define MAX_INSN_SIZE 2
25
26typedef u32 kprobe_opcode_t;
27struct kprobe;
28
29void arch_remove_kprobe(struct kprobe *p);
30
31#define flush_insn_slot(p) \
32	flush_icache_range((unsigned long)&(p)->ainsn.insn[0], \
33			   (unsigned long)&(p)->ainsn.insn[0] + \
34			   MAX_INSN_SIZE*sizeof(kprobe_opcode_t))
35
36#define kretprobe_blacklist_size    0
37
38struct arch_specific_insn {
39	kprobe_opcode_t *insn;
40};
41
42struct prev_kprobe {
43	struct kprobe *kp;
44	unsigned long status;
45};
46
47struct kprobe_ctlblk {
48	unsigned int kprobe_status;
49	struct prev_kprobe prev_kprobe;
50	unsigned long iaoq[2];
51};
52
53int __kprobes parisc_kprobe_break_handler(struct pt_regs *regs);
54int __kprobes parisc_kprobe_ss_handler(struct pt_regs *regs);
55static inline int kprobe_fault_handler(struct pt_regs *regs, int trapnr)
56{
57	return 0;
58}
59
60#endif /* CONFIG_KPROBES */
61#endif /* _PARISC_KPROBES_H */
62