1 /*
2  * Copyright (c) 2020 Lexmark International, Inc.
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  */
6 
7 #include <tracing_user.h>
8 #include <zephyr/kernel.h>
9 #include <zephyr/device.h>
10 
11 static int nested_interrupts[CONFIG_MP_MAX_NUM_CPUS];
12 
sys_trace_thread_switched_in_user(void)13 void sys_trace_thread_switched_in_user(void)
14 {
15 	unsigned int key = irq_lock();
16 
17 	__ASSERT_NO_MSG(nested_interrupts[_current_cpu->id] == 0);
18 	/* Can't use k_current_get as thread base and z_tls_current might be incorrect */
19 	printk("%s: %p\n", __func__, k_sched_current_thread_query());
20 
21 	irq_unlock(key);
22 }
23 
sys_trace_thread_switched_out_user(void)24 void sys_trace_thread_switched_out_user(void)
25 {
26 	unsigned int key = irq_lock();
27 
28 	__ASSERT_NO_MSG(nested_interrupts[_current_cpu->id] == 0);
29 	/* Can't use k_current_get as thread base and z_tls_current might be incorrect */
30 	printk("%s: %p\n", __func__, k_sched_current_thread_query());
31 
32 	irq_unlock(key);
33 }
34 
sys_trace_isr_enter_user(void)35 void sys_trace_isr_enter_user(void)
36 {
37 	unsigned int key = irq_lock();
38 	_cpu_t *curr_cpu = _current_cpu;
39 
40 	printk("%s: %d\n", __func__, nested_interrupts[curr_cpu->id]);
41 	nested_interrupts[curr_cpu->id]++;
42 
43 	irq_unlock(key);
44 }
45 
sys_trace_isr_exit_user(void)46 void sys_trace_isr_exit_user(void)
47 {
48 	unsigned int key = irq_lock();
49 	_cpu_t *curr_cpu = _current_cpu;
50 
51 	nested_interrupts[curr_cpu->id]--;
52 	printk("%s: %d\n", __func__, nested_interrupts[curr_cpu->id]);
53 
54 	irq_unlock(key);
55 }
56 
sys_trace_idle_user(void)57 void sys_trace_idle_user(void)
58 {
59 	printk("%s\n", __func__);
60 }
61 
sys_trace_gpio_pin_configure_enter_user(const struct device * port,gpio_pin_t pin,gpio_flags_t flags)62 void sys_trace_gpio_pin_configure_enter_user(const struct device *port, gpio_pin_t pin,
63 					     gpio_flags_t flags)
64 {
65 	printk("port: %s, pin: %d flags: %d\n", port->name, pin, flags);
66 }
67 
sys_trace_gpio_pin_configure_exit_user(const struct device * port,gpio_pin_t pin,int ret)68 void sys_trace_gpio_pin_configure_exit_user(const struct device *port, gpio_pin_t pin, int ret)
69 {
70 	printk("port: %s, pin: %d ret: %d\n", port->name, pin, ret);
71 }
72 
sys_trace_gpio_port_set_bits_raw_enter_user(const struct device * port,gpio_port_pins_t pins)73 void sys_trace_gpio_port_set_bits_raw_enter_user(const struct device *port, gpio_port_pins_t pins)
74 {
75 	printk("port: %s, pins: %d\n", port->name, pins);
76 }
77 
sys_trace_gpio_port_set_bits_raw_exit_user(const struct device * port,int ret)78 void sys_trace_gpio_port_set_bits_raw_exit_user(const struct device *port, int ret)
79 {
80 	printk("port: %s, ret: %d\n", port->name, ret);
81 }
82 
sys_trace_gpio_port_clear_bits_raw_enter_user(const struct device * port,gpio_port_pins_t pins)83 void sys_trace_gpio_port_clear_bits_raw_enter_user(const struct device *port, gpio_port_pins_t pins)
84 {
85 	printk("port: %s, pins: %d\n", port->name, pins);
86 }
87 
sys_trace_gpio_port_clear_bits_raw_exit_user(const struct device * port,int ret)88 void sys_trace_gpio_port_clear_bits_raw_exit_user(const struct device *port, int ret)
89 {
90 	printk("port: %s, pins: %d\n", port->name, ret);
91 }
92 
sys_trace_gpio_pin_interrupt_configure_enter_user(const struct device * port,gpio_pin_t pin,gpio_flags_t flags)93 void sys_trace_gpio_pin_interrupt_configure_enter_user(const struct device *port, gpio_pin_t pin,
94 						       gpio_flags_t flags)
95 {
96 	printk("port: %s, pin: %d flags: %d\n", port->name, pin, flags);
97 }
98 
sys_trace_gpio_pin_interrupt_configure_exit_user(const struct device * port,gpio_pin_t pin,int ret)99 void sys_trace_gpio_pin_interrupt_configure_exit_user(const struct device *port, gpio_pin_t pin,
100 						      int ret)
101 {
102 	printk("port: %s, pin: %d ret: %d\n", port->name, pin, ret);
103 }
104