162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0 262306a36Sopenharmony_ci#include <linux/ftrace.h> 362306a36Sopenharmony_ci#include <linux/tracepoint.h> 462306a36Sopenharmony_ci#include <linux/kernel.h> 562306a36Sopenharmony_ci#include <linux/module.h> 662306a36Sopenharmony_ci#include <linux/init.h> 762306a36Sopenharmony_ci#include <linux/rv.h> 862306a36Sopenharmony_ci#include <rv/instrumentation.h> 962306a36Sopenharmony_ci#include <rv/da_monitor.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#define MODULE_NAME "MODEL_NAME" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* 1462306a36Sopenharmony_ci * XXX: include required tracepoint headers, e.g., 1562306a36Sopenharmony_ci * #include <trace/events/sched.h> 1662306a36Sopenharmony_ci */ 1762306a36Sopenharmony_ci#include <trace/events/rv.h> 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci/* 2062306a36Sopenharmony_ci * This is the self-generated part of the monitor. Generally, there is no need 2162306a36Sopenharmony_ci * to touch this section. 2262306a36Sopenharmony_ci */ 2362306a36Sopenharmony_ci#include "MODEL_NAME.h" 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci/* 2662306a36Sopenharmony_ci * Declare the deterministic automata monitor. 2762306a36Sopenharmony_ci * 2862306a36Sopenharmony_ci * The rv monitor reference is needed for the monitor declaration. 2962306a36Sopenharmony_ci */ 3062306a36Sopenharmony_cistatic struct rv_monitor rv_MODEL_NAME; 3162306a36Sopenharmony_ciDECLARE_DA_MON_GLOBAL(MODEL_NAME, MIN_TYPE); 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci/* 3462306a36Sopenharmony_ci * This is the instrumentation part of the monitor. 3562306a36Sopenharmony_ci * 3662306a36Sopenharmony_ci * This is the section where manual work is required. Here the kernel events 3762306a36Sopenharmony_ci * are translated into model's event. 3862306a36Sopenharmony_ci * 3962306a36Sopenharmony_ci */ 4062306a36Sopenharmony_ciTRACEPOINT_HANDLERS_SKEL 4162306a36Sopenharmony_cistatic int enable_MODEL_NAME(void) 4262306a36Sopenharmony_ci{ 4362306a36Sopenharmony_ci int retval; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci retval = da_monitor_init_MODEL_NAME(); 4662306a36Sopenharmony_ci if (retval) 4762306a36Sopenharmony_ci return retval; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciTRACEPOINT_ATTACH 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci return 0; 5262306a36Sopenharmony_ci} 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_cistatic void disable_MODEL_NAME(void) 5562306a36Sopenharmony_ci{ 5662306a36Sopenharmony_ci rv_MODEL_NAME.enabled = 0; 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ciTRACEPOINT_DETACH 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_ci da_monitor_destroy_MODEL_NAME(); 6162306a36Sopenharmony_ci} 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci/* 6462306a36Sopenharmony_ci * This is the monitor register section. 6562306a36Sopenharmony_ci */ 6662306a36Sopenharmony_cistatic struct rv_monitor rv_MODEL_NAME = { 6762306a36Sopenharmony_ci .name = "MODEL_NAME", 6862306a36Sopenharmony_ci .description = "auto-generated MODEL_NAME", 6962306a36Sopenharmony_ci .enable = enable_MODEL_NAME, 7062306a36Sopenharmony_ci .disable = disable_MODEL_NAME, 7162306a36Sopenharmony_ci .reset = da_monitor_reset_all_MODEL_NAME, 7262306a36Sopenharmony_ci .enabled = 0, 7362306a36Sopenharmony_ci}; 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_cistatic int __init register_MODEL_NAME(void) 7662306a36Sopenharmony_ci{ 7762306a36Sopenharmony_ci rv_register_monitor(&rv_MODEL_NAME); 7862306a36Sopenharmony_ci return 0; 7962306a36Sopenharmony_ci} 8062306a36Sopenharmony_ci 8162306a36Sopenharmony_cistatic void __exit unregister_MODEL_NAME(void) 8262306a36Sopenharmony_ci{ 8362306a36Sopenharmony_ci rv_unregister_monitor(&rv_MODEL_NAME); 8462306a36Sopenharmony_ci} 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_cimodule_init(register_MODEL_NAME); 8762306a36Sopenharmony_cimodule_exit(unregister_MODEL_NAME); 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ciMODULE_LICENSE("GPL"); 9062306a36Sopenharmony_ciMODULE_AUTHOR("dot2k: auto-generated"); 9162306a36Sopenharmony_ciMODULE_DESCRIPTION("MODEL_NAME"); 92