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