162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef __PERF_COUNTS_H
362306a36Sopenharmony_ci#define __PERF_COUNTS_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <linux/types.h>
662306a36Sopenharmony_ci#include <internal/xyarray.h>
762306a36Sopenharmony_ci#include <perf/evsel.h>
862306a36Sopenharmony_ci#include <stdbool.h>
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cistruct evsel;
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistruct perf_counts {
1362306a36Sopenharmony_ci	s8			  scaled;
1462306a36Sopenharmony_ci	struct xyarray		  *values;
1562306a36Sopenharmony_ci	struct xyarray		  *loaded;
1662306a36Sopenharmony_ci};
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cistatic inline struct perf_counts_values*
2062306a36Sopenharmony_ciperf_counts(struct perf_counts *counts, int cpu_map_idx, int thread)
2162306a36Sopenharmony_ci{
2262306a36Sopenharmony_ci	return xyarray__entry(counts->values, cpu_map_idx, thread);
2362306a36Sopenharmony_ci}
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cistatic inline bool
2662306a36Sopenharmony_ciperf_counts__is_loaded(struct perf_counts *counts, int cpu_map_idx, int thread)
2762306a36Sopenharmony_ci{
2862306a36Sopenharmony_ci	return *((bool *) xyarray__entry(counts->loaded, cpu_map_idx, thread));
2962306a36Sopenharmony_ci}
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cistatic inline void
3262306a36Sopenharmony_ciperf_counts__set_loaded(struct perf_counts *counts, int cpu_map_idx, int thread, bool loaded)
3362306a36Sopenharmony_ci{
3462306a36Sopenharmony_ci	*((bool *) xyarray__entry(counts->loaded, cpu_map_idx, thread)) = loaded;
3562306a36Sopenharmony_ci}
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_cistruct perf_counts *perf_counts__new(int ncpus, int nthreads);
3862306a36Sopenharmony_civoid perf_counts__delete(struct perf_counts *counts);
3962306a36Sopenharmony_civoid perf_counts__reset(struct perf_counts *counts);
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_civoid evsel__reset_counts(struct evsel *evsel);
4262306a36Sopenharmony_ciint evsel__alloc_counts(struct evsel *evsel);
4362306a36Sopenharmony_civoid evsel__free_counts(struct evsel *evsel);
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci#endif /* __PERF_COUNTS_H */
46