xref: /openbmc/linux/include/linux/perf_regs.h (revision 76a4efa8)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
2c5e63197SJiri Olsa #ifndef _LINUX_PERF_REGS_H
3c5e63197SJiri Olsa #define _LINUX_PERF_REGS_H
4c5e63197SJiri Olsa 
568db0cf1SIngo Molnar #include <linux/sched/task_stack.h>
668db0cf1SIngo Molnar 
788a7c26aSAndy Lutomirski struct perf_regs {
888a7c26aSAndy Lutomirski 	__u64		abi;
988a7c26aSAndy Lutomirski 	struct pt_regs	*regs;
1088a7c26aSAndy Lutomirski };
1188a7c26aSAndy Lutomirski 
12c5e63197SJiri Olsa #ifdef CONFIG_HAVE_PERF_REGS
13c5e63197SJiri Olsa #include <asm/perf_regs.h>
14e321d02dSKan Liang 
15e321d02dSKan Liang #ifndef PERF_REG_EXTENDED_MASK
16e321d02dSKan Liang #define PERF_REG_EXTENDED_MASK	0
17e321d02dSKan Liang #endif
18e321d02dSKan Liang 
19c5e63197SJiri Olsa u64 perf_reg_value(struct pt_regs *regs, int idx);
20c5e63197SJiri Olsa int perf_reg_validate(u64 mask);
214018994fSJiri Olsa u64 perf_reg_abi(struct task_struct *task);
2288a7c26aSAndy Lutomirski void perf_get_regs_user(struct perf_regs *regs_user,
2376a4efa8SPeter Zijlstra 			struct pt_regs *regs);
24c5e63197SJiri Olsa #else
25e321d02dSKan Liang 
26e321d02dSKan Liang #define PERF_REG_EXTENDED_MASK	0
27e321d02dSKan Liang 
perf_reg_value(struct pt_regs * regs,int idx)28c5e63197SJiri Olsa static inline u64 perf_reg_value(struct pt_regs *regs, int idx)
29c5e63197SJiri Olsa {
30c5e63197SJiri Olsa 	return 0;
31c5e63197SJiri Olsa }
32c5e63197SJiri Olsa 
perf_reg_validate(u64 mask)33c5e63197SJiri Olsa static inline int perf_reg_validate(u64 mask)
34c5e63197SJiri Olsa {
35c5e63197SJiri Olsa 	return mask ? -ENOSYS : 0;
36c5e63197SJiri Olsa }
374018994fSJiri Olsa 
perf_reg_abi(struct task_struct * task)384018994fSJiri Olsa static inline u64 perf_reg_abi(struct task_struct *task)
394018994fSJiri Olsa {
404018994fSJiri Olsa 	return PERF_SAMPLE_REGS_ABI_NONE;
414018994fSJiri Olsa }
4288a7c26aSAndy Lutomirski 
perf_get_regs_user(struct perf_regs * regs_user,struct pt_regs * regs)4388a7c26aSAndy Lutomirski static inline void perf_get_regs_user(struct perf_regs *regs_user,
4476a4efa8SPeter Zijlstra 				      struct pt_regs *regs)
4588a7c26aSAndy Lutomirski {
4688a7c26aSAndy Lutomirski 	regs_user->regs = task_pt_regs(current);
4788a7c26aSAndy Lutomirski 	regs_user->abi = perf_reg_abi(current);
4888a7c26aSAndy Lutomirski }
49c5e63197SJiri Olsa #endif /* CONFIG_HAVE_PERF_REGS */
50c5e63197SJiri Olsa #endif /* _LINUX_PERF_REGS_H */
51