1 // SPDX-License-Identifier: GPL-2.0
2 #include <linux/ftrace.h>
3 #include <linux/tracepoint.h>
4 #include <linux/kernel.h>
5 #include <linux/module.h>
6 #include <linux/init.h>
7 #include <linux/rv.h>
8 #include <rv/instrumentation.h>
9 #include <rv/da_monitor.h>
10 
11 #define MODULE_NAME "%%MODEL_NAME%%"
12 
13 /*
14  * XXX: include required tracepoint headers, e.g.,
15  * #include <trace/events/sched.h>
16  */
17 #include <rv_trace.h>
18 
19 /*
20  * This is the self-generated part of the monitor. Generally, there is no need
21  * to touch this section.
22  */
23 #include "%%MODEL_NAME%%.h"
24 
25 /*
26  * Declare the deterministic automata monitor.
27  *
28  * The rv monitor reference is needed for the monitor declaration.
29  */
30 static struct rv_monitor rv_%%MODEL_NAME%%;
31 DECLARE_DA_MON_%%MONITOR_TYPE%%(%%MODEL_NAME%%, %%MIN_TYPE%%);
32 
33 /*
34  * This is the instrumentation part of the monitor.
35  *
36  * This is the section where manual work is required. Here the kernel events
37  * are translated into model's event.
38  *
39  */
40 %%TRACEPOINT_HANDLERS_SKEL%%
41 static int enable_%%MODEL_NAME%%(void)
42 {
43 	int retval;
44 
45 	retval = da_monitor_init_%%MODEL_NAME%%();
46 	if (retval)
47 		return retval;
48 
49 %%TRACEPOINT_ATTACH%%
50 
51 	return 0;
52 }
53 
54 static void disable_%%MODEL_NAME%%(void)
55 {
56 	rv_%%MODEL_NAME%%.enabled = 0;
57 
58 %%TRACEPOINT_DETACH%%
59 
60 	da_monitor_destroy_%%MODEL_NAME%%();
61 }
62 
63 /*
64  * This is the monitor register section.
65  */
66 static struct rv_monitor rv_%%MODEL_NAME%% = {
67 	.name = "%%MODEL_NAME%%",
68 	.description = "%%DESCRIPTION%%",
69 	.enable = enable_%%MODEL_NAME%%,
70 	.disable = disable_%%MODEL_NAME%%,
71 	.reset = da_monitor_reset_all_%%MODEL_NAME%%,
72 	.enabled = 0,
73 };
74 
75 static int __init register_%%MODEL_NAME%%(void)
76 {
77 	rv_register_monitor(&rv_%%MODEL_NAME%%);
78 	return 0;
79 }
80 
81 static void __exit unregister_%%MODEL_NAME%%(void)
82 {
83 	rv_unregister_monitor(&rv_%%MODEL_NAME%%);
84 }
85 
86 module_init(register_%%MODEL_NAME%%);
87 module_exit(unregister_%%MODEL_NAME%%);
88 
89 MODULE_LICENSE("GPL");
90 MODULE_AUTHOR("dot2k: auto-generated");
91 MODULE_DESCRIPTION("%%MODEL_NAME%%: %%DESCRIPTION%%");
92