18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef ARCH_PERF_REGS_H
38c2ecf20Sopenharmony_ci#define ARCH_PERF_REGS_H
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <stdlib.h>
68c2ecf20Sopenharmony_ci#include <linux/types.h>
78c2ecf20Sopenharmony_ci#include <asm/perf_regs.h>
88c2ecf20Sopenharmony_ci
98c2ecf20Sopenharmony_civoid perf_regs_load(u64 *regs);
108c2ecf20Sopenharmony_ci
118c2ecf20Sopenharmony_ci#define PERF_REGS_MASK	((1ULL << PERF_REG_ARM_MAX) - 1)
128c2ecf20Sopenharmony_ci#define PERF_REGS_MAX	PERF_REG_ARM_MAX
138c2ecf20Sopenharmony_ci#define PERF_SAMPLE_REGS_ABI	PERF_SAMPLE_REGS_ABI_32
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#define PERF_REG_IP	PERF_REG_ARM_PC
168c2ecf20Sopenharmony_ci#define PERF_REG_SP	PERF_REG_ARM_SP
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_cistatic inline const char *__perf_reg_name(int id)
198c2ecf20Sopenharmony_ci{
208c2ecf20Sopenharmony_ci	switch (id) {
218c2ecf20Sopenharmony_ci	case PERF_REG_ARM_R0:
228c2ecf20Sopenharmony_ci		return "r0";
238c2ecf20Sopenharmony_ci	case PERF_REG_ARM_R1:
248c2ecf20Sopenharmony_ci		return "r1";
258c2ecf20Sopenharmony_ci	case PERF_REG_ARM_R2:
268c2ecf20Sopenharmony_ci		return "r2";
278c2ecf20Sopenharmony_ci	case PERF_REG_ARM_R3:
288c2ecf20Sopenharmony_ci		return "r3";
298c2ecf20Sopenharmony_ci	case PERF_REG_ARM_R4:
308c2ecf20Sopenharmony_ci		return "r4";
318c2ecf20Sopenharmony_ci	case PERF_REG_ARM_R5:
328c2ecf20Sopenharmony_ci		return "r5";
338c2ecf20Sopenharmony_ci	case PERF_REG_ARM_R6:
348c2ecf20Sopenharmony_ci		return "r6";
358c2ecf20Sopenharmony_ci	case PERF_REG_ARM_R7:
368c2ecf20Sopenharmony_ci		return "r7";
378c2ecf20Sopenharmony_ci	case PERF_REG_ARM_R8:
388c2ecf20Sopenharmony_ci		return "r8";
398c2ecf20Sopenharmony_ci	case PERF_REG_ARM_R9:
408c2ecf20Sopenharmony_ci		return "r9";
418c2ecf20Sopenharmony_ci	case PERF_REG_ARM_R10:
428c2ecf20Sopenharmony_ci		return "r10";
438c2ecf20Sopenharmony_ci	case PERF_REG_ARM_FP:
448c2ecf20Sopenharmony_ci		return "fp";
458c2ecf20Sopenharmony_ci	case PERF_REG_ARM_IP:
468c2ecf20Sopenharmony_ci		return "ip";
478c2ecf20Sopenharmony_ci	case PERF_REG_ARM_SP:
488c2ecf20Sopenharmony_ci		return "sp";
498c2ecf20Sopenharmony_ci	case PERF_REG_ARM_LR:
508c2ecf20Sopenharmony_ci		return "lr";
518c2ecf20Sopenharmony_ci	case PERF_REG_ARM_PC:
528c2ecf20Sopenharmony_ci		return "pc";
538c2ecf20Sopenharmony_ci	default:
548c2ecf20Sopenharmony_ci		return NULL;
558c2ecf20Sopenharmony_ci	}
568c2ecf20Sopenharmony_ci
578c2ecf20Sopenharmony_ci	return NULL;
588c2ecf20Sopenharmony_ci}
598c2ecf20Sopenharmony_ci
608c2ecf20Sopenharmony_ci#endif /* ARCH_PERF_REGS_H */
61