162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2012 ARM Ltd.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef __ASM_PERF_EVENT_H
762306a36Sopenharmony_ci#define __ASM_PERF_EVENT_H
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <asm/stack_pointer.h>
1062306a36Sopenharmony_ci#include <asm/ptrace.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#ifdef CONFIG_PERF_EVENTS
1362306a36Sopenharmony_cistruct pt_regs;
1462306a36Sopenharmony_ciextern unsigned long perf_instruction_pointer(struct pt_regs *regs);
1562306a36Sopenharmony_ciextern unsigned long perf_misc_flags(struct pt_regs *regs);
1662306a36Sopenharmony_ci#define perf_misc_flags(regs)	perf_misc_flags(regs)
1762306a36Sopenharmony_ci#define perf_arch_bpf_user_pt_regs(regs) &regs->user_regs
1862306a36Sopenharmony_ci#endif
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#define perf_arch_fetch_caller_regs(regs, __ip) { \
2162306a36Sopenharmony_ci	(regs)->pc = (__ip);    \
2262306a36Sopenharmony_ci	(regs)->regs[29] = (unsigned long) __builtin_frame_address(0); \
2362306a36Sopenharmony_ci	(regs)->sp = current_stack_pointer; \
2462306a36Sopenharmony_ci	(regs)->pstate = PSR_MODE_EL1h;	\
2562306a36Sopenharmony_ci}
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci#endif
28