1daac95e7SMao Han // SPDX-License-Identifier: GPL-2.0 2daac95e7SMao Han // Copyright (C) 2019 Hangzhou C-SKY Microsystems co.,ltd. 3daac95e7SMao Han 4daac95e7SMao Han #include <linux/errno.h> 5daac95e7SMao Han #include <linux/kernel.h> 6daac95e7SMao Han #include <linux/perf_event.h> 7daac95e7SMao Han #include <linux/bug.h> 8daac95e7SMao Han #include <asm/perf_regs.h> 9daac95e7SMao Han #include <asm/ptrace.h> 10daac95e7SMao Han perf_reg_value(struct pt_regs * regs,int idx)11daac95e7SMao Hanu64 perf_reg_value(struct pt_regs *regs, int idx) 12daac95e7SMao Han { 13daac95e7SMao Han if (WARN_ON_ONCE((u32)idx >= PERF_REG_CSKY_MAX)) 14daac95e7SMao Han return 0; 15daac95e7SMao Han 16daac95e7SMao Han return (u64)*((u32 *)regs + idx); 17daac95e7SMao Han } 18daac95e7SMao Han 19daac95e7SMao Han #define REG_RESERVED (~((1ULL << PERF_REG_CSKY_MAX) - 1)) 20daac95e7SMao Han perf_reg_validate(u64 mask)21daac95e7SMao Hanint perf_reg_validate(u64 mask) 22daac95e7SMao Han { 23daac95e7SMao Han if (!mask || mask & REG_RESERVED) 24daac95e7SMao Han return -EINVAL; 25daac95e7SMao Han 26daac95e7SMao Han return 0; 27daac95e7SMao Han } 28daac95e7SMao Han perf_reg_abi(struct task_struct * task)29daac95e7SMao Hanu64 perf_reg_abi(struct task_struct *task) 30daac95e7SMao Han { 31daac95e7SMao Han return PERF_SAMPLE_REGS_ABI_32; 32daac95e7SMao Han } 33daac95e7SMao Han perf_get_regs_user(struct perf_regs * regs_user,struct pt_regs * regs)34daac95e7SMao Hanvoid perf_get_regs_user(struct perf_regs *regs_user, 35*76a4efa8SPeter Zijlstra struct pt_regs *regs) 36daac95e7SMao Han { 37daac95e7SMao Han regs_user->regs = task_pt_regs(current); 38daac95e7SMao Han regs_user->abi = perf_reg_abi(current); 39daac95e7SMao Han } 40