Boot Linux faster!

Check our new training course

Boot Linux faster!

Check our new training course
and Creative Commons CC-BY-SA
lecture and lab materials

Bootlin logo

Elixir Cross Referencer

/*
 * Copyright (c) 2016 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * @file
 * @brief APIs used when examining the objects in a debug tracing list.
 */

#ifndef _OBJECT_TRACING_H_
#define _OBJECT_TRACING_H_

#ifdef CONFIG_OBJECT_TRACING

#include <kernel.h>
extern struct k_timer    *_trace_list_k_timer;
extern struct k_mem_slab *_trace_list_k_mem_slab;
extern struct k_mem_pool *_trace_list_k_mem_pool;
extern struct k_sem      *_trace_list_k_sem;
extern struct k_mutex    *_trace_list_k_mutex;
extern struct k_alert    *_trace_list_k_alert;
extern struct k_fifo     *_trace_list_k_fifo;
extern struct k_lifo     *_trace_list_k_lifo;
extern struct k_stack    *_trace_list_k_stack;
extern struct k_msgq     *_trace_list_k_msgq;
extern struct k_mbox     *_trace_list_k_mbox;
extern struct k_pipe     *_trace_list_k_pipe;

extern struct ring_buf   *_trace_list_sys_ring_buf;

/**
 * @def SYS_TRACING_HEAD
 *
 * @brief Head element of a trace list.
 *
 * @details Access the head element of a given trace list.
 *
 * @param type Data type of the trace list to get the head from.
 * @param name Name of the trace list to get the head from.
 */
#define SYS_TRACING_HEAD(type, name) ((type *) _CONCAT(_trace_list_, name))

/**
 * @def SYS_TRACING_NEXT
 *
 * @brief Gets a node's next element.
 *
 * @details Given a node in a trace list, gets the next element
 * in the list.
 *
 * @param type Data type of the trace list
 * @param name Name of the trace list to get the head from.
 * @param obj  Object to get next element from.
 */
#define SYS_TRACING_NEXT(type, name, obj) (((type *)obj)->__next)

#endif /*CONFIG_OBJECT_TRACING*/

#ifdef CONFIG_THREAD_MONITOR

#include <kernel_structs.h>

/**
 * @def SYS_THREAD_MONITOR_HEAD
 *
 * @brief Head element of the thread monitor list.
 *
 * @details Access the head element of the thread monitor list.
 *
 */
#define SYS_THREAD_MONITOR_HEAD ((struct k_thread *)(_kernel.threads))

/**
 * @def SYS_THREAD_MONITOR_NEXT
 *
 * @brief Gets a thread node's next element.
 *
 * @details Given a node in a thread monitor list, gets the next
 * element in the list.
 *
 * @param obj Object to get the next element from.
 */
#define SYS_THREAD_MONITOR_NEXT(obj) (((struct k_thread *)obj)->next_thread)

#endif /*CONFIG_THREAD_MONITOR*/

#endif /*_OBJECT_TRACING_H_*/