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_ARM64_MAX) - 1)
128c2ecf20Sopenharmony_ci#define PERF_REGS_MAX	PERF_REG_ARM64_MAX
138c2ecf20Sopenharmony_ci#define PERF_SAMPLE_REGS_ABI	PERF_SAMPLE_REGS_ABI_64
148c2ecf20Sopenharmony_ci
158c2ecf20Sopenharmony_ci#define PERF_REG_IP	PERF_REG_ARM64_PC
168c2ecf20Sopenharmony_ci#define PERF_REG_SP	PERF_REG_ARM64_SP
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_cistatic inline const char *__perf_reg_name(int id)
198c2ecf20Sopenharmony_ci{
208c2ecf20Sopenharmony_ci	switch (id) {
218c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X0:
228c2ecf20Sopenharmony_ci		return "x0";
238c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X1:
248c2ecf20Sopenharmony_ci		return "x1";
258c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X2:
268c2ecf20Sopenharmony_ci		return "x2";
278c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X3:
288c2ecf20Sopenharmony_ci		return "x3";
298c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X4:
308c2ecf20Sopenharmony_ci		return "x4";
318c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X5:
328c2ecf20Sopenharmony_ci		return "x5";
338c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X6:
348c2ecf20Sopenharmony_ci		return "x6";
358c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X7:
368c2ecf20Sopenharmony_ci		return "x7";
378c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X8:
388c2ecf20Sopenharmony_ci		return "x8";
398c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X9:
408c2ecf20Sopenharmony_ci		return "x9";
418c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X10:
428c2ecf20Sopenharmony_ci		return "x10";
438c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X11:
448c2ecf20Sopenharmony_ci		return "x11";
458c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X12:
468c2ecf20Sopenharmony_ci		return "x12";
478c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X13:
488c2ecf20Sopenharmony_ci		return "x13";
498c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X14:
508c2ecf20Sopenharmony_ci		return "x14";
518c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X15:
528c2ecf20Sopenharmony_ci		return "x15";
538c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X16:
548c2ecf20Sopenharmony_ci		return "x16";
558c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X17:
568c2ecf20Sopenharmony_ci		return "x17";
578c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X18:
588c2ecf20Sopenharmony_ci		return "x18";
598c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X19:
608c2ecf20Sopenharmony_ci		return "x19";
618c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X20:
628c2ecf20Sopenharmony_ci		return "x20";
638c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X21:
648c2ecf20Sopenharmony_ci		return "x21";
658c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X22:
668c2ecf20Sopenharmony_ci		return "x22";
678c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X23:
688c2ecf20Sopenharmony_ci		return "x23";
698c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X24:
708c2ecf20Sopenharmony_ci		return "x24";
718c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X25:
728c2ecf20Sopenharmony_ci		return "x25";
738c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X26:
748c2ecf20Sopenharmony_ci		return "x26";
758c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X27:
768c2ecf20Sopenharmony_ci		return "x27";
778c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X28:
788c2ecf20Sopenharmony_ci		return "x28";
798c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_X29:
808c2ecf20Sopenharmony_ci		return "x29";
818c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_SP:
828c2ecf20Sopenharmony_ci		return "sp";
838c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_LR:
848c2ecf20Sopenharmony_ci		return "lr";
858c2ecf20Sopenharmony_ci	case PERF_REG_ARM64_PC:
868c2ecf20Sopenharmony_ci		return "pc";
878c2ecf20Sopenharmony_ci	default:
888c2ecf20Sopenharmony_ci		return NULL;
898c2ecf20Sopenharmony_ci	}
908c2ecf20Sopenharmony_ci
918c2ecf20Sopenharmony_ci	return NULL;
928c2ecf20Sopenharmony_ci}
938c2ecf20Sopenharmony_ci
948c2ecf20Sopenharmony_ci#endif /* ARCH_PERF_REGS_H */
95