124bce201SDaniel Bristot de Oliveira // SPDX-License-Identifier: GPL-2.0
224bce201SDaniel Bristot de Oliveira #include <linux/ftrace.h>
324bce201SDaniel Bristot de Oliveira #include <linux/tracepoint.h>
424bce201SDaniel Bristot de Oliveira #include <linux/kernel.h>
524bce201SDaniel Bristot de Oliveira #include <linux/module.h>
624bce201SDaniel Bristot de Oliveira #include <linux/init.h>
724bce201SDaniel Bristot de Oliveira #include <linux/rv.h>
824bce201SDaniel Bristot de Oliveira #include <rv/instrumentation.h>
924bce201SDaniel Bristot de Oliveira #include <rv/da_monitor.h>
1024bce201SDaniel Bristot de Oliveira 
1124bce201SDaniel Bristot de Oliveira #define MODULE_NAME "MODEL_NAME"
1224bce201SDaniel Bristot de Oliveira 
1324bce201SDaniel Bristot de Oliveira /*
1424bce201SDaniel Bristot de Oliveira  * XXX: include required tracepoint headers, e.g.,
1524bce201SDaniel Bristot de Oliveira  * #include <trace/events/sched.h>
1624bce201SDaniel Bristot de Oliveira  */
1724bce201SDaniel Bristot de Oliveira #include <trace/events/rv.h>
1824bce201SDaniel Bristot de Oliveira 
1924bce201SDaniel Bristot de Oliveira /*
2024bce201SDaniel Bristot de Oliveira  * This is the self-generated part of the monitor. Generally, there is no need
2124bce201SDaniel Bristot de Oliveira  * to touch this section.
2224bce201SDaniel Bristot de Oliveira  */
2324bce201SDaniel Bristot de Oliveira #include "MODEL_NAME.h"
2424bce201SDaniel Bristot de Oliveira 
2524bce201SDaniel Bristot de Oliveira /*
2624bce201SDaniel Bristot de Oliveira  * Declare the deterministic automata monitor.
2724bce201SDaniel Bristot de Oliveira  *
2824bce201SDaniel Bristot de Oliveira  * The rv monitor reference is needed for the monitor declaration.
2924bce201SDaniel Bristot de Oliveira  */
304359a011SZeng Heng static struct rv_monitor rv_MODEL_NAME;
3124bce201SDaniel Bristot de Oliveira DECLARE_DA_MON_GLOBAL(MODEL_NAME, MIN_TYPE);
3224bce201SDaniel Bristot de Oliveira 
3324bce201SDaniel Bristot de Oliveira /*
3424bce201SDaniel Bristot de Oliveira  * This is the instrumentation part of the monitor.
3524bce201SDaniel Bristot de Oliveira  *
3624bce201SDaniel Bristot de Oliveira  * This is the section where manual work is required. Here the kernel events
3724bce201SDaniel Bristot de Oliveira  * are translated into model's event.
3824bce201SDaniel Bristot de Oliveira  *
3924bce201SDaniel Bristot de Oliveira  */
4024bce201SDaniel Bristot de Oliveira TRACEPOINT_HANDLERS_SKEL
enable_MODEL_NAME(void)4124bce201SDaniel Bristot de Oliveira static int enable_MODEL_NAME(void)
4224bce201SDaniel Bristot de Oliveira {
4324bce201SDaniel Bristot de Oliveira 	int retval;
4424bce201SDaniel Bristot de Oliveira 
4524bce201SDaniel Bristot de Oliveira 	retval = da_monitor_init_MODEL_NAME();
4624bce201SDaniel Bristot de Oliveira 	if (retval)
4724bce201SDaniel Bristot de Oliveira 		return retval;
4824bce201SDaniel Bristot de Oliveira 
4924bce201SDaniel Bristot de Oliveira TRACEPOINT_ATTACH
5024bce201SDaniel Bristot de Oliveira 
5124bce201SDaniel Bristot de Oliveira 	return 0;
5224bce201SDaniel Bristot de Oliveira }
5324bce201SDaniel Bristot de Oliveira 
disable_MODEL_NAME(void)5424bce201SDaniel Bristot de Oliveira static void disable_MODEL_NAME(void)
5524bce201SDaniel Bristot de Oliveira {
5624bce201SDaniel Bristot de Oliveira 	rv_MODEL_NAME.enabled = 0;
5724bce201SDaniel Bristot de Oliveira 
5824bce201SDaniel Bristot de Oliveira TRACEPOINT_DETACH
5924bce201SDaniel Bristot de Oliveira 
6024bce201SDaniel Bristot de Oliveira 	da_monitor_destroy_MODEL_NAME();
6124bce201SDaniel Bristot de Oliveira }
6224bce201SDaniel Bristot de Oliveira 
6324bce201SDaniel Bristot de Oliveira /*
6424bce201SDaniel Bristot de Oliveira  * This is the monitor register section.
6524bce201SDaniel Bristot de Oliveira  */
664359a011SZeng Heng static struct rv_monitor rv_MODEL_NAME = {
6724bce201SDaniel Bristot de Oliveira 	.name = "MODEL_NAME",
6824bce201SDaniel Bristot de Oliveira 	.description = "auto-generated MODEL_NAME",
6924bce201SDaniel Bristot de Oliveira 	.enable = enable_MODEL_NAME,
7024bce201SDaniel Bristot de Oliveira 	.disable = disable_MODEL_NAME,
7124bce201SDaniel Bristot de Oliveira 	.reset = da_monitor_reset_all_MODEL_NAME,
7224bce201SDaniel Bristot de Oliveira 	.enabled = 0,
7324bce201SDaniel Bristot de Oliveira };
7424bce201SDaniel Bristot de Oliveira 
register_MODEL_NAME(void)75*834168fbSXiu Jianfeng static int __init register_MODEL_NAME(void)
7624bce201SDaniel Bristot de Oliveira {
7724bce201SDaniel Bristot de Oliveira 	rv_register_monitor(&rv_MODEL_NAME);
7824bce201SDaniel Bristot de Oliveira 	return 0;
7924bce201SDaniel Bristot de Oliveira }
8024bce201SDaniel Bristot de Oliveira 
unregister_MODEL_NAME(void)81*834168fbSXiu Jianfeng static void __exit unregister_MODEL_NAME(void)
8224bce201SDaniel Bristot de Oliveira {
8324bce201SDaniel Bristot de Oliveira 	rv_unregister_monitor(&rv_MODEL_NAME);
8424bce201SDaniel Bristot de Oliveira }
8524bce201SDaniel Bristot de Oliveira 
8624bce201SDaniel Bristot de Oliveira module_init(register_MODEL_NAME);
8724bce201SDaniel Bristot de Oliveira module_exit(unregister_MODEL_NAME);
8824bce201SDaniel Bristot de Oliveira 
8924bce201SDaniel Bristot de Oliveira MODULE_LICENSE("GPL");
9024bce201SDaniel Bristot de Oliveira MODULE_AUTHOR("dot2k: auto-generated");
9124bce201SDaniel Bristot de Oliveira MODULE_DESCRIPTION("MODEL_NAME");
92