149863894db3ed7bd41541b1c17733273966cea71Will Deacon
249863894db3ed7bd41541b1c17733273966cea71Will Deacon#include <linux/errno.h>
349863894db3ed7bd41541b1c17733273966cea71Will Deacon#include <linux/kernel.h>
449863894db3ed7bd41541b1c17733273966cea71Will Deacon#include <linux/perf_event.h>
549863894db3ed7bd41541b1c17733273966cea71Will Deacon#include <linux/bug.h>
649863894db3ed7bd41541b1c17733273966cea71Will Deacon#include <asm/perf_regs.h>
749863894db3ed7bd41541b1c17733273966cea71Will Deacon#include <asm/ptrace.h>
849863894db3ed7bd41541b1c17733273966cea71Will Deacon
949863894db3ed7bd41541b1c17733273966cea71Will Deaconu64 perf_reg_value(struct pt_regs *regs, int idx)
1049863894db3ed7bd41541b1c17733273966cea71Will Deacon{
1149863894db3ed7bd41541b1c17733273966cea71Will Deacon	if (WARN_ON_ONCE((u32)idx >= PERF_REG_ARM_MAX))
1249863894db3ed7bd41541b1c17733273966cea71Will Deacon		return 0;
1349863894db3ed7bd41541b1c17733273966cea71Will Deacon
1449863894db3ed7bd41541b1c17733273966cea71Will Deacon	return regs->uregs[idx];
1549863894db3ed7bd41541b1c17733273966cea71Will Deacon}
1649863894db3ed7bd41541b1c17733273966cea71Will Deacon
1749863894db3ed7bd41541b1c17733273966cea71Will Deacon#define REG_RESERVED (~((1ULL << PERF_REG_ARM_MAX) - 1))
1849863894db3ed7bd41541b1c17733273966cea71Will Deacon
1949863894db3ed7bd41541b1c17733273966cea71Will Deaconint perf_reg_validate(u64 mask)
2049863894db3ed7bd41541b1c17733273966cea71Will Deacon{
2149863894db3ed7bd41541b1c17733273966cea71Will Deacon	if (!mask || mask & REG_RESERVED)
2249863894db3ed7bd41541b1c17733273966cea71Will Deacon		return -EINVAL;
2349863894db3ed7bd41541b1c17733273966cea71Will Deacon
2449863894db3ed7bd41541b1c17733273966cea71Will Deacon	return 0;
2549863894db3ed7bd41541b1c17733273966cea71Will Deacon}
2649863894db3ed7bd41541b1c17733273966cea71Will Deacon
2749863894db3ed7bd41541b1c17733273966cea71Will Deaconu64 perf_reg_abi(struct task_struct *task)
2849863894db3ed7bd41541b1c17733273966cea71Will Deacon{
2949863894db3ed7bd41541b1c17733273966cea71Will Deacon	return PERF_SAMPLE_REGS_ABI_32;
3049863894db3ed7bd41541b1c17733273966cea71Will Deacon}
31