162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef _LINUX_PERF_REGS_H 362306a36Sopenharmony_ci#define _LINUX_PERF_REGS_H 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <linux/sched/task_stack.h> 662306a36Sopenharmony_ci 762306a36Sopenharmony_cistruct perf_regs { 862306a36Sopenharmony_ci __u64 abi; 962306a36Sopenharmony_ci struct pt_regs *regs; 1062306a36Sopenharmony_ci}; 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#ifdef CONFIG_HAVE_PERF_REGS 1362306a36Sopenharmony_ci#include <asm/perf_regs.h> 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#ifndef PERF_REG_EXTENDED_MASK 1662306a36Sopenharmony_ci#define PERF_REG_EXTENDED_MASK 0 1762306a36Sopenharmony_ci#endif 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ciu64 perf_reg_value(struct pt_regs *regs, int idx); 2062306a36Sopenharmony_ciint perf_reg_validate(u64 mask); 2162306a36Sopenharmony_ciu64 perf_reg_abi(struct task_struct *task); 2262306a36Sopenharmony_civoid perf_get_regs_user(struct perf_regs *regs_user, 2362306a36Sopenharmony_ci struct pt_regs *regs); 2462306a36Sopenharmony_ci#else 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci#define PERF_REG_EXTENDED_MASK 0 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistatic inline u64 perf_reg_value(struct pt_regs *regs, int idx) 2962306a36Sopenharmony_ci{ 3062306a36Sopenharmony_ci return 0; 3162306a36Sopenharmony_ci} 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cistatic inline int perf_reg_validate(u64 mask) 3462306a36Sopenharmony_ci{ 3562306a36Sopenharmony_ci return mask ? -ENOSYS : 0; 3662306a36Sopenharmony_ci} 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_cistatic inline u64 perf_reg_abi(struct task_struct *task) 3962306a36Sopenharmony_ci{ 4062306a36Sopenharmony_ci return PERF_SAMPLE_REGS_ABI_NONE; 4162306a36Sopenharmony_ci} 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_cistatic inline void perf_get_regs_user(struct perf_regs *regs_user, 4462306a36Sopenharmony_ci struct pt_regs *regs) 4562306a36Sopenharmony_ci{ 4662306a36Sopenharmony_ci regs_user->regs = task_pt_regs(current); 4762306a36Sopenharmony_ci regs_user->abi = perf_reg_abi(current); 4862306a36Sopenharmony_ci} 4962306a36Sopenharmony_ci#endif /* CONFIG_HAVE_PERF_REGS */ 5062306a36Sopenharmony_ci#endif /* _LINUX_PERF_REGS_H */ 51