162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci#ifndef _LINUX_KERNEL_FTRACE_INTERNAL_H
362306a36Sopenharmony_ci#define  _LINUX_KERNEL_FTRACE_INTERNAL_H
462306a36Sopenharmony_ci
562306a36Sopenharmony_ciint __register_ftrace_function(struct ftrace_ops *ops);
662306a36Sopenharmony_ciint __unregister_ftrace_function(struct ftrace_ops *ops);
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifdef CONFIG_FUNCTION_TRACER
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ciextern struct mutex ftrace_lock;
1162306a36Sopenharmony_ciextern struct ftrace_ops global_ops;
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#ifdef CONFIG_DYNAMIC_FTRACE
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ciint ftrace_startup(struct ftrace_ops *ops, int command);
1662306a36Sopenharmony_ciint ftrace_shutdown(struct ftrace_ops *ops, int command);
1762306a36Sopenharmony_ciint ftrace_ops_test(struct ftrace_ops *ops, unsigned long ip, void *regs);
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#else /* !CONFIG_DYNAMIC_FTRACE */
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ci/* Keep as macros so we do not need to define the commands */
2262306a36Sopenharmony_ci# define ftrace_startup(ops, command)					\
2362306a36Sopenharmony_ci	({								\
2462306a36Sopenharmony_ci		int ___ret = __register_ftrace_function(ops);		\
2562306a36Sopenharmony_ci		if (!___ret)						\
2662306a36Sopenharmony_ci			(ops)->flags |= FTRACE_OPS_FL_ENABLED;		\
2762306a36Sopenharmony_ci		___ret;							\
2862306a36Sopenharmony_ci	})
2962306a36Sopenharmony_ci# define ftrace_shutdown(ops, command)					\
3062306a36Sopenharmony_ci	({								\
3162306a36Sopenharmony_ci		int ___ret = __unregister_ftrace_function(ops);		\
3262306a36Sopenharmony_ci		if (!___ret)						\
3362306a36Sopenharmony_ci			(ops)->flags &= ~FTRACE_OPS_FL_ENABLED;		\
3462306a36Sopenharmony_ci		___ret;							\
3562306a36Sopenharmony_ci	})
3662306a36Sopenharmony_cistatic inline int
3762306a36Sopenharmony_ciftrace_ops_test(struct ftrace_ops *ops, unsigned long ip, void *regs)
3862306a36Sopenharmony_ci{
3962306a36Sopenharmony_ci	return 1;
4062306a36Sopenharmony_ci}
4162306a36Sopenharmony_ci#endif /* CONFIG_DYNAMIC_FTRACE */
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ci#ifdef CONFIG_FUNCTION_GRAPH_TRACER
4462306a36Sopenharmony_ciextern int ftrace_graph_active;
4562306a36Sopenharmony_civoid update_function_graph_func(void);
4662306a36Sopenharmony_ci#else /* !CONFIG_FUNCTION_GRAPH_TRACER */
4762306a36Sopenharmony_ci# define ftrace_graph_active 0
4862306a36Sopenharmony_cistatic inline void update_function_graph_func(void) { }
4962306a36Sopenharmony_ci#endif /* CONFIG_FUNCTION_GRAPH_TRACER */
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ci#else /* !CONFIG_FUNCTION_TRACER */
5262306a36Sopenharmony_ci#endif /* CONFIG_FUNCTION_TRACER */
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci#endif
55