xref: /linux/kernel/trace/rv/monitors/stall/stall.h (revision fdbfee9fc56e13a1307868829d438ad66ab308a4)
1*13578a08SGabriele Monaco /* SPDX-License-Identifier: GPL-2.0 */
2*13578a08SGabriele Monaco /*
3*13578a08SGabriele Monaco  * Automatically generated C representation of stall automaton
4*13578a08SGabriele Monaco  * For further information about this format, see kernel documentation:
5*13578a08SGabriele Monaco  *   Documentation/trace/rv/deterministic_automata.rst
6*13578a08SGabriele Monaco  */
7*13578a08SGabriele Monaco 
8*13578a08SGabriele Monaco #define MONITOR_NAME stall
9*13578a08SGabriele Monaco 
10*13578a08SGabriele Monaco enum states_stall {
11*13578a08SGabriele Monaco 	dequeued_stall,
12*13578a08SGabriele Monaco 	enqueued_stall,
13*13578a08SGabriele Monaco 	running_stall,
14*13578a08SGabriele Monaco 	state_max_stall,
15*13578a08SGabriele Monaco };
16*13578a08SGabriele Monaco 
17*13578a08SGabriele Monaco #define INVALID_STATE state_max_stall
18*13578a08SGabriele Monaco 
19*13578a08SGabriele Monaco enum events_stall {
20*13578a08SGabriele Monaco 	sched_switch_in_stall,
21*13578a08SGabriele Monaco 	sched_switch_preempt_stall,
22*13578a08SGabriele Monaco 	sched_switch_wait_stall,
23*13578a08SGabriele Monaco 	sched_wakeup_stall,
24*13578a08SGabriele Monaco 	event_max_stall,
25*13578a08SGabriele Monaco };
26*13578a08SGabriele Monaco 
27*13578a08SGabriele Monaco enum envs_stall {
28*13578a08SGabriele Monaco 	clk_stall,
29*13578a08SGabriele Monaco 	env_max_stall,
30*13578a08SGabriele Monaco 	env_max_stored_stall = env_max_stall,
31*13578a08SGabriele Monaco };
32*13578a08SGabriele Monaco 
33*13578a08SGabriele Monaco _Static_assert(env_max_stored_stall <= MAX_HA_ENV_LEN, "Not enough slots");
34*13578a08SGabriele Monaco 
35*13578a08SGabriele Monaco struct automaton_stall {
36*13578a08SGabriele Monaco 	char *state_names[state_max_stall];
37*13578a08SGabriele Monaco 	char *event_names[event_max_stall];
38*13578a08SGabriele Monaco 	char *env_names[env_max_stall];
39*13578a08SGabriele Monaco 	unsigned char function[state_max_stall][event_max_stall];
40*13578a08SGabriele Monaco 	unsigned char initial_state;
41*13578a08SGabriele Monaco 	bool final_states[state_max_stall];
42*13578a08SGabriele Monaco };
43*13578a08SGabriele Monaco 
44*13578a08SGabriele Monaco static const struct automaton_stall automaton_stall = {
45*13578a08SGabriele Monaco 	.state_names = {
46*13578a08SGabriele Monaco 		"dequeued",
47*13578a08SGabriele Monaco 		"enqueued",
48*13578a08SGabriele Monaco 		"running",
49*13578a08SGabriele Monaco 	},
50*13578a08SGabriele Monaco 	.event_names = {
51*13578a08SGabriele Monaco 		"sched_switch_in",
52*13578a08SGabriele Monaco 		"sched_switch_preempt",
53*13578a08SGabriele Monaco 		"sched_switch_wait",
54*13578a08SGabriele Monaco 		"sched_wakeup",
55*13578a08SGabriele Monaco 	},
56*13578a08SGabriele Monaco 	.env_names = {
57*13578a08SGabriele Monaco 		"clk",
58*13578a08SGabriele Monaco 	},
59*13578a08SGabriele Monaco 	.function = {
60*13578a08SGabriele Monaco 		{
61*13578a08SGabriele Monaco 			INVALID_STATE,
62*13578a08SGabriele Monaco 			INVALID_STATE,
63*13578a08SGabriele Monaco 			INVALID_STATE,
64*13578a08SGabriele Monaco 			enqueued_stall,
65*13578a08SGabriele Monaco 		},
66*13578a08SGabriele Monaco 		{
67*13578a08SGabriele Monaco 			running_stall,
68*13578a08SGabriele Monaco 			INVALID_STATE,
69*13578a08SGabriele Monaco 			INVALID_STATE,
70*13578a08SGabriele Monaco 			enqueued_stall,
71*13578a08SGabriele Monaco 		},
72*13578a08SGabriele Monaco 		{
73*13578a08SGabriele Monaco 			running_stall,
74*13578a08SGabriele Monaco 			enqueued_stall,
75*13578a08SGabriele Monaco 			dequeued_stall,
76*13578a08SGabriele Monaco 			running_stall,
77*13578a08SGabriele Monaco 		},
78*13578a08SGabriele Monaco 	},
79*13578a08SGabriele Monaco 	.initial_state = dequeued_stall,
80*13578a08SGabriele Monaco 	.final_states = { 1, 0, 0 },
81*13578a08SGabriele Monaco };
82