xref: /OK3568_Linux_fs/kernel/tools/perf/util/perf_regs.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun #include <errno.h>
3*4882a593Smuzhiyun #include "perf_regs.h"
4*4882a593Smuzhiyun #include "event.h"
5*4882a593Smuzhiyun 
arch_sdt_arg_parse_op(char * old_op __maybe_unused,char ** new_op __maybe_unused)6*4882a593Smuzhiyun int __weak arch_sdt_arg_parse_op(char *old_op __maybe_unused,
7*4882a593Smuzhiyun 				 char **new_op __maybe_unused)
8*4882a593Smuzhiyun {
9*4882a593Smuzhiyun 	return SDT_ARG_SKIP;
10*4882a593Smuzhiyun }
11*4882a593Smuzhiyun 
arch__intr_reg_mask(void)12*4882a593Smuzhiyun uint64_t __weak arch__intr_reg_mask(void)
13*4882a593Smuzhiyun {
14*4882a593Smuzhiyun 	return PERF_REGS_MASK;
15*4882a593Smuzhiyun }
16*4882a593Smuzhiyun 
arch__user_reg_mask(void)17*4882a593Smuzhiyun uint64_t __weak arch__user_reg_mask(void)
18*4882a593Smuzhiyun {
19*4882a593Smuzhiyun 	return PERF_REGS_MASK;
20*4882a593Smuzhiyun }
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun #ifdef HAVE_PERF_REGS_SUPPORT
perf_reg_value(u64 * valp,struct regs_dump * regs,int id)23*4882a593Smuzhiyun int perf_reg_value(u64 *valp, struct regs_dump *regs, int id)
24*4882a593Smuzhiyun {
25*4882a593Smuzhiyun 	int i, idx = 0;
26*4882a593Smuzhiyun 	u64 mask = regs->mask;
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun 	if (regs->cache_mask & (1ULL << id))
29*4882a593Smuzhiyun 		goto out;
30*4882a593Smuzhiyun 
31*4882a593Smuzhiyun 	if (!(mask & (1ULL << id)))
32*4882a593Smuzhiyun 		return -EINVAL;
33*4882a593Smuzhiyun 
34*4882a593Smuzhiyun 	for (i = 0; i < id; i++) {
35*4882a593Smuzhiyun 		if (mask & (1ULL << i))
36*4882a593Smuzhiyun 			idx++;
37*4882a593Smuzhiyun 	}
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun 	regs->cache_mask |= (1ULL << id);
40*4882a593Smuzhiyun 	regs->cache_regs[id] = regs->regs[idx];
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun out:
43*4882a593Smuzhiyun 	*valp = regs->cache_regs[id];
44*4882a593Smuzhiyun 	return 0;
45*4882a593Smuzhiyun }
46*4882a593Smuzhiyun #endif
47