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