18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci#ifndef __PERF_COUNTS_H
38c2ecf20Sopenharmony_ci#define __PERF_COUNTS_H
48c2ecf20Sopenharmony_ci
58c2ecf20Sopenharmony_ci#include <linux/types.h>
68c2ecf20Sopenharmony_ci#include <internal/xyarray.h>
78c2ecf20Sopenharmony_ci#include <perf/evsel.h>
88c2ecf20Sopenharmony_ci#include <stdbool.h>
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_cistruct evsel;
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cistruct perf_counts {
138c2ecf20Sopenharmony_ci	s8			  scaled;
148c2ecf20Sopenharmony_ci	struct perf_counts_values aggr;
158c2ecf20Sopenharmony_ci	struct xyarray		  *values;
168c2ecf20Sopenharmony_ci	struct xyarray		  *loaded;
178c2ecf20Sopenharmony_ci};
188c2ecf20Sopenharmony_ci
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_cistatic inline struct perf_counts_values*
218c2ecf20Sopenharmony_ciperf_counts(struct perf_counts *counts, int cpu, int thread)
228c2ecf20Sopenharmony_ci{
238c2ecf20Sopenharmony_ci	return xyarray__entry(counts->values, cpu, thread);
248c2ecf20Sopenharmony_ci}
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_cistatic inline bool
278c2ecf20Sopenharmony_ciperf_counts__is_loaded(struct perf_counts *counts, int cpu, int thread)
288c2ecf20Sopenharmony_ci{
298c2ecf20Sopenharmony_ci	return *((bool *) xyarray__entry(counts->loaded, cpu, thread));
308c2ecf20Sopenharmony_ci}
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_cistatic inline void
338c2ecf20Sopenharmony_ciperf_counts__set_loaded(struct perf_counts *counts, int cpu, int thread, bool loaded)
348c2ecf20Sopenharmony_ci{
358c2ecf20Sopenharmony_ci	*((bool *) xyarray__entry(counts->loaded, cpu, thread)) = loaded;
368c2ecf20Sopenharmony_ci}
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_cistruct perf_counts *perf_counts__new(int ncpus, int nthreads);
398c2ecf20Sopenharmony_civoid perf_counts__delete(struct perf_counts *counts);
408c2ecf20Sopenharmony_civoid perf_counts__reset(struct perf_counts *counts);
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_civoid evsel__reset_counts(struct evsel *evsel);
438c2ecf20Sopenharmony_ciint evsel__alloc_counts(struct evsel *evsel, int ncpus, int nthreads);
448c2ecf20Sopenharmony_civoid evsel__free_counts(struct evsel *evsel);
458c2ecf20Sopenharmony_ci
468c2ecf20Sopenharmony_ci#endif /* __PERF_COUNTS_H */
47