1 /*
2  * Copyright (c) 2020 Lexmark International, Inc.
3  * Copyright (c) 2022 Qualcomm Innovation Center, Inc.
4  *
5  * SPDX-License-Identifier: Apache-2.0
6  */
7 
8 #include <tracing_user.h>
9 #include <zephyr/kernel.h>
10 #include <zephyr/debug/cpu_load.h>
11 #include <zephyr/init.h>
12 
sys_trace_thread_create_user(struct k_thread * thread)13 void __weak sys_trace_thread_create_user(struct k_thread *thread) {}
sys_trace_thread_abort_user(struct k_thread * thread)14 void __weak sys_trace_thread_abort_user(struct k_thread *thread) {}
sys_trace_thread_suspend_user(struct k_thread * thread)15 void __weak sys_trace_thread_suspend_user(struct k_thread *thread) {}
sys_trace_thread_resume_user(struct k_thread * thread)16 void __weak sys_trace_thread_resume_user(struct k_thread *thread) {}
sys_trace_thread_name_set_user(struct k_thread * thread)17 void __weak sys_trace_thread_name_set_user(struct k_thread *thread) {}
sys_trace_thread_switched_in_user(void)18 void __weak sys_trace_thread_switched_in_user(void) {}
sys_trace_thread_switched_out_user(void)19 void __weak sys_trace_thread_switched_out_user(void) {}
sys_trace_thread_info_user(struct k_thread * thread)20 void __weak sys_trace_thread_info_user(struct k_thread *thread) {}
sys_trace_thread_sched_ready_user(struct k_thread * thread)21 void __weak sys_trace_thread_sched_ready_user(struct k_thread *thread) {}
sys_trace_thread_pend_user(struct k_thread * thread)22 void __weak sys_trace_thread_pend_user(struct k_thread *thread) {}
sys_trace_thread_priority_set_user(struct k_thread * thread,int prio)23 void __weak sys_trace_thread_priority_set_user(struct k_thread *thread, int prio) {}
sys_trace_isr_enter_user(void)24 void __weak sys_trace_isr_enter_user(void) {}
sys_trace_isr_exit_user(void)25 void __weak sys_trace_isr_exit_user(void) {}
sys_trace_idle_user(void)26 void __weak sys_trace_idle_user(void) {}
sys_trace_sys_init_enter_user(const struct init_entry * entry,int level)27 void __weak sys_trace_sys_init_enter_user(const struct init_entry *entry, int level) {}
sys_trace_sys_init_exit_user(const struct init_entry * entry,int level,int result)28 void __weak sys_trace_sys_init_exit_user(const struct init_entry *entry, int level, int result) {}
sys_trace_gpio_pin_interrupt_configure_enter_user(const struct device * port,gpio_pin_t pin,gpio_flags_t flags)29 void __weak sys_trace_gpio_pin_interrupt_configure_enter_user(const struct device *port,
30 							      gpio_pin_t pin, gpio_flags_t flags) {}
sys_trace_gpio_pin_interrupt_configure_exit_user(const struct device * port,gpio_pin_t pin,int ret)31 void __weak sys_trace_gpio_pin_interrupt_configure_exit_user(const struct device *port,
32 							     gpio_pin_t pin, int ret) {}
sys_trace_gpio_pin_configure_enter_user(const struct device * port,gpio_pin_t pin,gpio_flags_t flags)33 void __weak sys_trace_gpio_pin_configure_enter_user(const struct device *port, gpio_pin_t pin,
34 						    gpio_flags_t flags) {}
sys_trace_gpio_pin_configure_exit_user(const struct device * port,gpio_pin_t pin,int ret)35 void __weak sys_trace_gpio_pin_configure_exit_user(const struct device *port, gpio_pin_t pin,
36 						   int ret) {}
sys_trace_gpio_port_get_direction_enter_user(const struct device * port,gpio_port_pins_t map,gpio_port_pins_t inputs,gpio_port_pins_t outputs)37 void __weak sys_trace_gpio_port_get_direction_enter_user(const struct device *port,
38 							 gpio_port_pins_t map,
39 							 gpio_port_pins_t inputs,
40 							 gpio_port_pins_t outputs) {}
sys_trace_gpio_port_get_direction_exit_user(const struct device * port,int ret)41 void __weak sys_trace_gpio_port_get_direction_exit_user(const struct device *port, int ret) {}
sys_trace_gpio_pin_get_config_enter_user(const struct device * port,gpio_pin_t pin,int ret)42 void __weak sys_trace_gpio_pin_get_config_enter_user(const struct device *port, gpio_pin_t pin,
43 						     int ret) {}
sys_trace_gpio_pin_get_config_exit_user(const struct device * port,gpio_pin_t pin,int ret)44 void __weak sys_trace_gpio_pin_get_config_exit_user(const struct device *port, gpio_pin_t pin,
45 						    int ret) {}
sys_trace_gpio_port_get_raw_enter_user(const struct device * port,gpio_port_value_t * value)46 void __weak sys_trace_gpio_port_get_raw_enter_user(const struct device *port,
47 						   gpio_port_value_t *value) {}
sys_trace_gpio_port_get_raw_exit_user(const struct device * port,int ret)48 void __weak sys_trace_gpio_port_get_raw_exit_user(const struct device *port, int ret) {}
sys_trace_gpio_port_set_masked_raw_enter_user(const struct device * port,gpio_port_pins_t mask,gpio_port_value_t value)49 void __weak sys_trace_gpio_port_set_masked_raw_enter_user(const struct device *port,
50 							  gpio_port_pins_t mask,
51 							  gpio_port_value_t value) {}
sys_trace_gpio_port_set_masked_raw_exit_user(const struct device * port,int ret)52 void __weak sys_trace_gpio_port_set_masked_raw_exit_user(const struct device *port, int ret) {}
sys_trace_gpio_port_set_bits_raw_enter_user(const struct device * port,gpio_port_pins_t pins)53 void __weak sys_trace_gpio_port_set_bits_raw_enter_user(const struct device *port,
54 							gpio_port_pins_t pins) {}
sys_trace_gpio_port_set_bits_raw_exit_user(const struct device * port,int ret)55 void __weak sys_trace_gpio_port_set_bits_raw_exit_user(const struct device *port, int ret) {}
sys_trace_gpio_port_clear_bits_raw_enter_user(const struct device * port,gpio_port_pins_t pins)56 void __weak sys_trace_gpio_port_clear_bits_raw_enter_user(const struct device *port,
57 							  gpio_port_pins_t pins) {}
sys_trace_gpio_port_clear_bits_raw_exit_user(const struct device * port,int ret)58 void __weak sys_trace_gpio_port_clear_bits_raw_exit_user(const struct device *port, int ret) {}
sys_trace_gpio_port_toggle_bits_enter_user(const struct device * port,gpio_port_pins_t pins)59 void __weak sys_trace_gpio_port_toggle_bits_enter_user(const struct device *port,
60 						       gpio_port_pins_t pins) {}
sys_trace_gpio_port_toggle_bits_exit_user(const struct device * port,int ret)61 void __weak sys_trace_gpio_port_toggle_bits_exit_user(const struct device *port, int ret) {}
sys_trace_gpio_init_callback_enter_user(struct gpio_callback * callback,gpio_callback_handler_t handler,gpio_port_pins_t pin_mask)62 void __weak sys_trace_gpio_init_callback_enter_user(struct gpio_callback *callback,
63 						    gpio_callback_handler_t handler,
64 						    gpio_port_pins_t pin_mask) {}
sys_trace_gpio_init_callback_exit_user(struct gpio_callback * callback)65 void __weak sys_trace_gpio_init_callback_exit_user(struct gpio_callback *callback) {}
sys_trace_gpio_add_callback_enter_user(const struct device * port,struct gpio_callback * callback)66 void __weak sys_trace_gpio_add_callback_enter_user(const struct device *port,
67 						   struct gpio_callback *callback) {}
sys_trace_gpio_add_callback_exit_user(const struct device * port,int ret)68 void __weak sys_trace_gpio_add_callback_exit_user(const struct device *port, int ret) {}
sys_trace_gpio_remove_callback_enter_user(const struct device * port,struct gpio_callback * callback)69 void __weak sys_trace_gpio_remove_callback_enter_user(const struct device *port,
70 						      struct gpio_callback *callback) {}
sys_trace_gpio_remove_callback_exit_user(const struct device * port,int ret)71 void __weak sys_trace_gpio_remove_callback_exit_user(const struct device *port, int ret) {}
sys_trace_gpio_get_pending_int_enter_user(const struct device * dev)72 void __weak sys_trace_gpio_get_pending_int_enter_user(const struct device *dev) {}
sys_trace_gpio_get_pending_int_exit_user(const struct device * dev,int ret)73 void __weak sys_trace_gpio_get_pending_int_exit_user(const struct device *dev, int ret) {}
sys_trace_gpio_fire_callbacks_enter_user(sys_slist_t * list,const struct device * port,gpio_pin_t pins)74 void __weak sys_trace_gpio_fire_callbacks_enter_user(sys_slist_t *list, const struct device *port,
75 						     gpio_pin_t pins) {}
sys_trace_gpio_fire_callback_user(const struct device * port,struct gpio_callback * callback)76 void __weak sys_trace_gpio_fire_callback_user(const struct device *port,
77 					      struct gpio_callback *callback) {}
78 
sys_trace_thread_create(struct k_thread * thread)79 void sys_trace_thread_create(struct k_thread *thread)
80 {
81 	sys_trace_thread_create_user(thread);
82 }
83 
sys_trace_thread_abort(struct k_thread * thread)84 void sys_trace_thread_abort(struct k_thread *thread)
85 {
86 	sys_trace_thread_abort_user(thread);
87 }
88 
sys_trace_thread_suspend(struct k_thread * thread)89 void sys_trace_thread_suspend(struct k_thread *thread)
90 {
91 	sys_trace_thread_suspend_user(thread);
92 }
93 
sys_trace_thread_resume(struct k_thread * thread)94 void sys_trace_thread_resume(struct k_thread *thread)
95 {
96 	sys_trace_thread_resume_user(thread);
97 }
98 
sys_trace_thread_name_set(struct k_thread * thread)99 void sys_trace_thread_name_set(struct k_thread *thread)
100 {
101 	sys_trace_thread_name_set_user(thread);
102 }
103 
sys_trace_k_thread_switched_in(void)104 void sys_trace_k_thread_switched_in(void)
105 {
106 	sys_trace_thread_switched_in_user();
107 }
108 
sys_trace_k_thread_switched_out(void)109 void sys_trace_k_thread_switched_out(void)
110 {
111 	sys_trace_thread_switched_out_user();
112 }
113 
sys_trace_thread_info(struct k_thread * thread)114 void sys_trace_thread_info(struct k_thread *thread)
115 {
116 	sys_trace_thread_info_user(thread);
117 }
118 
sys_trace_thread_sched_priority_set(struct k_thread * thread,int prio)119 void sys_trace_thread_sched_priority_set(struct k_thread *thread, int prio)
120 {
121 	sys_trace_thread_priority_set_user(thread, prio);
122 }
123 
sys_trace_thread_sched_ready(struct k_thread * thread)124 void sys_trace_thread_sched_ready(struct k_thread *thread)
125 {
126 	sys_trace_thread_sched_ready_user(thread);
127 }
128 
sys_trace_thread_pend(struct k_thread * thread)129 void sys_trace_thread_pend(struct k_thread *thread)
130 {
131 	sys_trace_thread_pend_user(thread);
132 }
133 
sys_trace_isr_enter(void)134 void sys_trace_isr_enter(void)
135 {
136 	sys_trace_isr_enter_user();
137 }
138 
sys_trace_isr_exit(void)139 void sys_trace_isr_exit(void)
140 {
141 	sys_trace_isr_exit_user();
142 }
143 
sys_trace_idle(void)144 void sys_trace_idle(void)
145 {
146 	sys_trace_idle_user();
147 
148 	if (IS_ENABLED(CONFIG_CPU_LOAD)) {
149 		cpu_load_on_enter_idle();
150 	}
151 }
152 
sys_trace_idle_exit(void)153 void sys_trace_idle_exit(void)
154 {
155 	if (IS_ENABLED(CONFIG_CPU_LOAD)) {
156 		cpu_load_on_exit_idle();
157 	}
158 }
159 
sys_trace_sys_init_enter(const struct init_entry * entry,int level)160 void sys_trace_sys_init_enter(const struct init_entry *entry, int level)
161 {
162 	sys_trace_sys_init_enter_user(entry, level);
163 }
164 
sys_trace_sys_init_exit(const struct init_entry * entry,int level,int result)165 void sys_trace_sys_init_exit(const struct init_entry *entry, int level, int result)
166 {
167 	sys_trace_sys_init_exit_user(entry, level, result);
168 }
169 
sys_trace_gpio_pin_interrupt_configure_enter(const struct device * port,gpio_pin_t pin,gpio_flags_t flags)170 void sys_trace_gpio_pin_interrupt_configure_enter(const struct device *port, gpio_pin_t pin,
171 						  gpio_flags_t flags)
172 {
173 	sys_trace_gpio_pin_interrupt_configure_enter_user(port, pin, flags);
174 }
175 
sys_trace_gpio_pin_interrupt_configure_exit(const struct device * port,gpio_pin_t pin,int ret)176 void sys_trace_gpio_pin_interrupt_configure_exit(const struct device *port, gpio_pin_t pin,
177 						  int ret)
178 {
179 	sys_trace_gpio_pin_interrupt_configure_exit_user(port, pin, ret);
180 }
181 
sys_trace_gpio_pin_configure_enter(const struct device * port,gpio_pin_t pin,gpio_flags_t flags)182 void sys_trace_gpio_pin_configure_enter(const struct device *port, gpio_pin_t pin,
183 					gpio_flags_t flags)
184 {
185 	sys_trace_gpio_pin_configure_enter_user(port, pin, flags);
186 }
187 
sys_trace_gpio_pin_configure_exit(const struct device * port,gpio_pin_t pin,int ret)188 void sys_trace_gpio_pin_configure_exit(const struct device *port, gpio_pin_t pin, int ret)
189 {
190 	sys_trace_gpio_pin_configure_exit_user(port, pin, ret);
191 }
192 
sys_trace_gpio_port_get_direction_enter(const struct device * port,gpio_port_pins_t map,gpio_port_pins_t inputs,gpio_port_pins_t outputs)193 void sys_trace_gpio_port_get_direction_enter(const struct device *port, gpio_port_pins_t map,
194 					     gpio_port_pins_t inputs, gpio_port_pins_t outputs)
195 {
196 	sys_trace_gpio_port_get_direction_enter_user(port, map, inputs, outputs);
197 }
198 
sys_trace_gpio_port_get_direction_exit(const struct device * port,int ret)199 void sys_trace_gpio_port_get_direction_exit(const struct device *port, int ret)
200 {
201 	sys_trace_gpio_port_get_direction_exit_user(port, ret);
202 }
203 
sys_trace_gpio_pin_get_config_enter(const struct device * port,gpio_pin_t pin,int ret)204 void sys_trace_gpio_pin_get_config_enter(const struct device *port, gpio_pin_t pin, int ret)
205 {
206 	sys_trace_gpio_pin_get_config_enter_user(port, pin, ret);
207 }
208 
sys_trace_gpio_pin_get_config_exit(const struct device * port,gpio_pin_t pin,int ret)209 void sys_trace_gpio_pin_get_config_exit(const struct device *port, gpio_pin_t pin, int ret)
210 {
211 	sys_trace_gpio_pin_get_config_exit_user(port, pin, ret);
212 }
213 
sys_trace_gpio_port_get_raw_enter(const struct device * port,gpio_port_value_t * value)214 void sys_trace_gpio_port_get_raw_enter(const struct device *port, gpio_port_value_t *value)
215 {
216 	sys_trace_gpio_port_get_raw_enter_user(port, value);
217 }
218 
sys_trace_gpio_port_get_raw_exit(const struct device * port,int ret)219 void sys_trace_gpio_port_get_raw_exit(const struct device *port, int ret)
220 {
221 	sys_trace_gpio_port_get_raw_exit_user(port, ret);
222 }
223 
sys_trace_gpio_port_set_masked_raw_enter(const struct device * port,gpio_port_pins_t mask,gpio_port_value_t value)224 void sys_trace_gpio_port_set_masked_raw_enter(const struct device *port, gpio_port_pins_t mask,
225 					      gpio_port_value_t value)
226 {
227 	sys_trace_gpio_port_set_masked_raw_enter_user(port, mask, value);
228 }
229 
sys_trace_gpio_port_set_masked_raw_exit(const struct device * port,int ret)230 void sys_trace_gpio_port_set_masked_raw_exit(const struct device *port, int ret)
231 {
232 	sys_trace_gpio_port_set_masked_raw_exit_user(port, ret);
233 }
234 
sys_trace_gpio_port_set_bits_raw_enter(const struct device * port,gpio_port_pins_t pins)235 void sys_trace_gpio_port_set_bits_raw_enter(const struct device *port, gpio_port_pins_t pins)
236 {
237 	sys_trace_gpio_port_set_bits_raw_enter_user(port, pins);
238 }
239 
sys_trace_gpio_port_set_bits_raw_exit(const struct device * port,int ret)240 void sys_trace_gpio_port_set_bits_raw_exit(const struct device *port, int ret)
241 {
242 	sys_trace_gpio_port_set_bits_raw_exit_user(port, ret);
243 }
244 
sys_trace_gpio_port_clear_bits_raw_enter(const struct device * port,gpio_port_pins_t pins)245 void sys_trace_gpio_port_clear_bits_raw_enter(const struct device *port, gpio_port_pins_t pins)
246 {
247 	sys_trace_gpio_port_clear_bits_raw_enter_user(port, pins);
248 }
249 
sys_trace_gpio_port_clear_bits_raw_exit(const struct device * port,int ret)250 void sys_trace_gpio_port_clear_bits_raw_exit(const struct device *port, int ret)
251 {
252 	sys_trace_gpio_port_clear_bits_raw_exit_user(port, ret);
253 }
254 
sys_trace_gpio_port_toggle_bits_enter(const struct device * port,gpio_port_pins_t pins)255 void sys_trace_gpio_port_toggle_bits_enter(const struct device *port, gpio_port_pins_t pins)
256 {
257 	sys_trace_gpio_port_toggle_bits_enter_user(port, pins);
258 }
259 
sys_trace_gpio_port_toggle_bits_exit(const struct device * port,int ret)260 void sys_trace_gpio_port_toggle_bits_exit(const struct device *port, int ret)
261 {
262 	sys_trace_gpio_port_toggle_bits_exit_user(port, ret);
263 }
264 
sys_trace_gpio_init_callback_enter(struct gpio_callback * callback,gpio_callback_handler_t handler,gpio_port_pins_t pin_mask)265 void sys_trace_gpio_init_callback_enter(struct gpio_callback *callback,
266 					gpio_callback_handler_t handler, gpio_port_pins_t pin_mask)
267 {
268 	sys_trace_gpio_init_callback_enter_user(callback, handler, pin_mask);
269 }
270 
sys_trace_gpio_init_callback_exit(struct gpio_callback * callback)271 void sys_trace_gpio_init_callback_exit(struct gpio_callback *callback)
272 {
273 	sys_trace_gpio_init_callback_exit_user(callback);
274 }
275 
sys_trace_gpio_add_callback_enter(const struct device * port,struct gpio_callback * callback)276 void sys_trace_gpio_add_callback_enter(const struct device *port, struct gpio_callback *callback)
277 {
278 	sys_trace_gpio_add_callback_enter_user(port, callback);
279 }
280 
sys_trace_gpio_add_callback_exit(const struct device * port,int ret)281 void sys_trace_gpio_add_callback_exit(const struct device *port, int ret)
282 {
283 	sys_trace_gpio_add_callback_exit_user(port, ret);
284 }
285 
sys_trace_gpio_remove_callback_enter(const struct device * port,struct gpio_callback * callback)286 void sys_trace_gpio_remove_callback_enter(const struct device *port,
287 						struct gpio_callback *callback)
288 {
289 	sys_trace_gpio_remove_callback_enter_user(port, callback);
290 }
291 
sys_trace_gpio_remove_callback_exit(const struct device * port,int ret)292 void sys_trace_gpio_remove_callback_exit(const struct device *port, int ret)
293 {
294 	sys_trace_gpio_remove_callback_exit_user(port, ret);
295 }
296 
sys_trace_gpio_get_pending_int_enter(const struct device * dev)297 void sys_trace_gpio_get_pending_int_enter(const struct device *dev)
298 {
299 	sys_trace_gpio_get_pending_int_enter_user(dev);
300 }
301 
sys_trace_gpio_get_pending_int_exit(const struct device * dev,int ret)302 void sys_trace_gpio_get_pending_int_exit(const struct device *dev, int ret)
303 {
304 	sys_trace_gpio_get_pending_int_exit_user(dev, ret);
305 }
306 
sys_trace_gpio_fire_callbacks_enter(sys_slist_t * list,const struct device * port,gpio_pin_t pins)307 void sys_trace_gpio_fire_callbacks_enter(sys_slist_t *list, const struct device *port,
308 					 gpio_pin_t pins)
309 {
310 	sys_trace_gpio_fire_callbacks_enter_user(list, port, pins);
311 }
312 
sys_trace_gpio_fire_callback(const struct device * port,struct gpio_callback * callback)313 void sys_trace_gpio_fire_callback(const struct device *port, struct gpio_callback *callback)
314 {
315 	sys_trace_gpio_fire_callback_user(port, callback);
316 }
317