162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* For debugging general purposes */
362306a36Sopenharmony_ci#ifndef __PERF_DEBUG_H
462306a36Sopenharmony_ci#define __PERF_DEBUG_H
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#include <stdarg.h>
762306a36Sopenharmony_ci#include <stdbool.h>
862306a36Sopenharmony_ci#include <stdio.h>
962306a36Sopenharmony_ci#include <linux/compiler.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ciextern int verbose;
1262306a36Sopenharmony_ciextern int debug_peo_args;
1362306a36Sopenharmony_ciextern bool quiet, dump_trace;
1462306a36Sopenharmony_ciextern int debug_ordered_events;
1562306a36Sopenharmony_ciextern int debug_data_convert;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#ifndef pr_fmt
1862306a36Sopenharmony_ci#define pr_fmt(fmt) fmt
1962306a36Sopenharmony_ci#endif
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci#define pr_err(fmt, ...) \
2262306a36Sopenharmony_ci	eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__)
2362306a36Sopenharmony_ci#define pr_warning(fmt, ...) \
2462306a36Sopenharmony_ci	eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__)
2562306a36Sopenharmony_ci#define pr_warning_once(fmt, ...) ({		\
2662306a36Sopenharmony_ci	static int __warned;			\
2762306a36Sopenharmony_ci	if (unlikely(!__warned)) {		\
2862306a36Sopenharmony_ci		pr_warning(fmt, ##__VA_ARGS__); \
2962306a36Sopenharmony_ci		__warned = 1;			\
3062306a36Sopenharmony_ci	}					\
3162306a36Sopenharmony_ci})
3262306a36Sopenharmony_ci#define pr_info(fmt, ...) \
3362306a36Sopenharmony_ci	eprintf(0, verbose, pr_fmt(fmt), ##__VA_ARGS__)
3462306a36Sopenharmony_ci#define pr_debug(fmt, ...) \
3562306a36Sopenharmony_ci	eprintf(1, verbose, pr_fmt(fmt), ##__VA_ARGS__)
3662306a36Sopenharmony_ci#define pr_debugN(n, fmt, ...) \
3762306a36Sopenharmony_ci	eprintf(n, verbose, pr_fmt(fmt), ##__VA_ARGS__)
3862306a36Sopenharmony_ci#define pr_debug2(fmt, ...) pr_debugN(2, pr_fmt(fmt), ##__VA_ARGS__)
3962306a36Sopenharmony_ci#define pr_debug3(fmt, ...) pr_debugN(3, pr_fmt(fmt), ##__VA_ARGS__)
4062306a36Sopenharmony_ci#define pr_debug4(fmt, ...) pr_debugN(4, pr_fmt(fmt), ##__VA_ARGS__)
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci/* Special macro to print perf_event_open arguments/return value. */
4362306a36Sopenharmony_ci#define pr_debug2_peo(fmt, ...) {				\
4462306a36Sopenharmony_ci	if (debug_peo_args)						\
4562306a36Sopenharmony_ci		pr_debugN(0, pr_fmt(fmt), ##__VA_ARGS__);	\
4662306a36Sopenharmony_ci	else							\
4762306a36Sopenharmony_ci		pr_debugN(2, pr_fmt(fmt), ##__VA_ARGS__);	\
4862306a36Sopenharmony_ci}
4962306a36Sopenharmony_ci
5062306a36Sopenharmony_ci#define pr_time_N(n, var, t, fmt, ...) \
5162306a36Sopenharmony_ci	eprintf_time(n, var, t, fmt, ##__VA_ARGS__)
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci#define pr_oe_time(t, fmt, ...)  pr_time_N(1, debug_ordered_events, t, pr_fmt(fmt), ##__VA_ARGS__)
5462306a36Sopenharmony_ci#define pr_oe_time2(t, fmt, ...) pr_time_N(2, debug_ordered_events, t, pr_fmt(fmt), ##__VA_ARGS__)
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci#define STRERR_BUFSIZE	128	/* For the buffer size of str_error_r */
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ciunion perf_event;
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ciint dump_printf(const char *fmt, ...) __printf(1, 2);
6162306a36Sopenharmony_civoid trace_event(union perf_event *event);
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ciint ui__error(const char *format, ...) __printf(1, 2);
6462306a36Sopenharmony_ciint ui__warning(const char *format, ...) __printf(1, 2);
6562306a36Sopenharmony_ci#define ui__warning_once(format, ...) ({		\
6662306a36Sopenharmony_ci	static int __warned;				\
6762306a36Sopenharmony_ci	if (unlikely(!__warned)) {			\
6862306a36Sopenharmony_ci		ui__warning(format, ##__VA_ARGS__);	\
6962306a36Sopenharmony_ci		__warned = 1;				\
7062306a36Sopenharmony_ci	}						\
7162306a36Sopenharmony_ci})
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_civoid pr_stat(const char *fmt, ...);
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ciint eprintf(int level, int var, const char *fmt, ...) __printf(3, 4);
7662306a36Sopenharmony_ciint eprintf_time(int level, int var, u64 t, const char *fmt, ...) __printf(4, 5);
7762306a36Sopenharmony_ciint veprintf(int level, int var, const char *fmt, va_list args);
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ciint perf_debug_option(const char *str);
8062306a36Sopenharmony_civoid debug_set_file(FILE *file);
8162306a36Sopenharmony_civoid debug_set_display_time(bool set);
8262306a36Sopenharmony_civoid perf_debug_setup(void);
8362306a36Sopenharmony_ciint perf_quiet_option(void);
8462306a36Sopenharmony_ci
8562306a36Sopenharmony_civoid dump_stack(void);
8662306a36Sopenharmony_civoid sighandler_dump_stack(int sig);
8762306a36Sopenharmony_ci
8862306a36Sopenharmony_ci#endif	/* __PERF_DEBUG_H */
89