summaryrefslogblamecommitdiffstats
path: root/cpukit/include/rtems/trace/rtems-trace-buffer-vars.h
blob: c6a13b9a2b4bb837ed5ac9aaf6f0ddd4d2a1126f (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

















                                                           


                    


























                                                                              





















                                                        






































































































                                                                              
/**
 * @file
 *
 * @ingroup Shell
 *
 * @brief Access to the RTEMS Trace Buffer Generator (TBG).
 */
/*
 *  Copyright (c) 2015 Chris Johns <chrisj@rtems.org>
 *
 *  The license and distribution terms for this file may be
 *  found in the file LICENSE in this distribution or at
 *  http://www.rtems.org/license/LICENSE.
 */

#if !defined (_RTEMS_TRACE_BUFFER_VARS_H_)
#define _RTEMS_TRACE_BUFFER_VARS_H_

#include <stdbool.h>
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

/**
 * These functions are provided as a separated interface to the Trace Buffer
 * Generatror (TBG) data are not really designed for any real-time performance
 * type interface.
 *
 * Separating the data from the codes stops the compiler incorrectly loop
 * optimising.
 */

typedef struct
{
  uint32_t          size;
  const char* const type;
} __rtld_trace_sig_arg;

  typedef struct {
    uint32_t                    argc;
    const __rtld_trace_sig_arg* args;
} __rtld_trace_sig;

typedef __rtld_trace_sig_arg rtems_trace_sig_arg;
typedef __rtld_trace_sig rtems_trace_sig;

/*
 * Trace linker data.
 */
extern uint32_t __rtld_trace_names_size;
extern const char *const __rtld_trace_names[];
extern uint32_t __rtld_trace_enables_size;
extern const uint32_t __rtld_trace_enables[];
extern uint32_t __rtld_trace_triggers_size;
extern const uint32_t __rtld_trace_triggers[];
extern const __rtld_trace_sig __rtld_trace_signatures[];

/*
 * Trace buffer generator data.
 */
extern const bool __rtld_tbg_present;
extern const uint32_t __rtld_tbg_mode;
extern const uint32_t __rtld_tbg_buffer_size;
extern uint32_t __rtld_tbg_buffer[];
extern volatile uint32_t __rtld_tbg_buffer_in;
extern volatile bool __rtld_tbg_finished;
extern volatile bool __rtld_tbg_triggered;

/**
 * Returns the number of trace functions.
 */
uint32_t  rtems_trace_names_size (void);

/**
 * Return the name given an index. No range checking.
 */
const char* rtems_trace_names (const uint32_t index);

/**
 * Returns the number of words in the enables array.
 */
uint32_t rtems_trace_enables_size (void);

/**
 * Return the enable 32bit bitmap indexed into the enables array. No range
 * checking.
 */
uint32_t rtems_trace_enables (const uint32_t index);

/**
 * Returns the number of words in the triggers array.
 */
uint32_t rtems_trace_triggers_size (void);

/**
 * Return the trigger 32bit bitmap indexed into the triggers array. No range
 * checking.
 */
uint32_t rtems_trace_triggers (const uint32_t index);

/**
 * Return the trace function signature.
 */
const rtems_trace_sig* rtems_trace_signatures (const uint32_t index);

/**
 * Return true is the enable bit is set for the trace function index.
 */
bool rtems_trace_enable_set(const uint32_t index);

/**
 * Return true is the trigger bit is set for the trace function index.
 */
bool rtems_trace_trigger_set(const uint32_t index);

/**
 * The application has been linked with Trace Buffering generated code.
 */
bool rtems_trace_buffering_present (void);

/**
 * Return the trace buffering mode flags.
 */
uint32_t rtems_trace_buffering_mode (void);

/**
 * Return the size of the trace buffering buffer in words.
 */
uint32_t rtems_trace_buffering_buffer_size (void);

/**
 * Return the base of the trace buffering buffer.
 */
uint32_t* rtems_trace_buffering_buffer (void);

/**
 * Return the buffer level. This is only stable if tracing has finished.
 */
uint32_t rtems_trace_buffering_buffer_in (void);

/**
 * The tracing has finished.
 */
bool rtems_trace_buffering_finished (void);

/**
 * Trace has been triggered and enable trace functions are being recorded.
 */
bool rtems_trace_buffering_triggered (void);

/**
 * Start tracing by clearing the triggered flag, setting to 0 and clearing the
 * finished flag.
 */
void rtems_trace_buffering_start (void);

/**
 * Stop tracing by setting the finished flag.
 */
void rtems_trace_buffering_stop (void);

/**
 * Resume tracing by setting the finished flag.
 */
void rtems_trace_buffering_resume (void);

#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif