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