| 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
| 2 | /* |
| 3 | * Runtime Verification. |
| 4 | * |
| 5 | * For futher information, see: kernel/trace/rv/rv.c. |
| 6 | */ |
| 7 | #ifndef _LINUX_RV_H |
| 8 | #define _LINUX_RV_H |
| 9 | |
| 10 | #define MAX_DA_NAME_LEN 24 |
| 11 | |
| 12 | #ifdef CONFIG_RV |
| 13 | /* |
| 14 | * Deterministic automaton per-object variables. |
| 15 | */ |
| 16 | struct da_monitor { |
| 17 | bool monitoring; |
| 18 | unsigned int curr_state; |
| 19 | }; |
| 20 | |
| 21 | /* |
| 22 | * Per-task RV monitors count. Nowadays fixed in RV_PER_TASK_MONITORS. |
| 23 | * If we find justification for more monitors, we can think about |
| 24 | * adding more or developing a dynamic method. So far, none of |
| 25 | * these are justified. |
| 26 | */ |
| 27 | #define RV_PER_TASK_MONITORS 1 |
| 28 | #define RV_PER_TASK_MONITOR_INIT (RV_PER_TASK_MONITORS) |
| 29 | |
| 30 | /* |
| 31 | * Futher monitor types are expected, so make this a union. |
| 32 | */ |
| 33 | union rv_task_monitor { |
| 34 | struct da_monitor da_mon; |
| 35 | }; |
| 36 | |
| 37 | #ifdef CONFIG_RV_REACTORS |
| 38 | struct rv_reactor { |
| 39 | const char *name; |
| 40 | const char *description; |
| 41 | void (*react)(char *msg); |
| 42 | }; |
| 43 | #endif |
| 44 | |
| 45 | struct rv_monitor { |
| 46 | const char *name; |
| 47 | const char *description; |
| 48 | bool enabled; |
| 49 | int (*enable)(void); |
| 50 | void (*disable)(void); |
| 51 | void (*reset)(void); |
| 52 | #ifdef CONFIG_RV_REACTORS |
| 53 | void (*react)(char *msg); |
| 54 | #endif |
| 55 | }; |
| 56 | |
| 57 | bool rv_monitoring_on(void); |
| 58 | int rv_unregister_monitor(struct rv_monitor *monitor); |
| 59 | int rv_register_monitor(struct rv_monitor *monitor); |
| 60 | int rv_get_task_monitor_slot(void); |
| 61 | void rv_put_task_monitor_slot(int slot); |
| 62 | |
| 63 | #ifdef CONFIG_RV_REACTORS |
| 64 | bool rv_reacting_on(void); |
| 65 | int rv_unregister_reactor(struct rv_reactor *reactor); |
| 66 | int rv_register_reactor(struct rv_reactor *reactor); |
| 67 | #endif /* CONFIG_RV_REACTORS */ |
| 68 | |
| 69 | #endif /* CONFIG_RV */ |
| 70 | #endif /* _LINUX_RV_H */ |