From 2077193dc1874d298b20b55a5ad029aae25376c9 Mon Sep 17 00:00:00 2001 From: dufour Date: Tue, 22 Sep 2009 10:58:52 +0000 Subject: * ce/rx: - add trace for the CE in RX. git-svn-id: svn+ssh://pessac/svn/cesar/trunk@5656 017c9cb6-072f-447c-8318-d5b54f68fe89 --- cesar/ce/rx/Module | 3 +++ cesar/ce/rx/inc/rx.h | 7 ++++++ cesar/ce/rx/inc/trace.h | 61 +++++++++++++++++++++++++++++++++++++++++++++++ cesar/ce/rx/src/measure.c | 4 ++++ cesar/ce/rx/src/rx.c | 8 +++++++ cesar/ce/rx/src/trace.c | 40 +++++++++++++++++++++++++++++++ 6 files changed, 123 insertions(+) create mode 100644 cesar/ce/rx/inc/trace.h create mode 100644 cesar/ce/rx/src/trace.c (limited to 'cesar/ce') diff --git a/cesar/ce/rx/Module b/cesar/ce/rx/Module index 632ad7970e..02bfd0b486 100644 --- a/cesar/ce/rx/Module +++ b/cesar/ce/rx/Module @@ -1,2 +1,5 @@ # Channel Estimation (CE) in Receive (RX) mode. SOURCES := rx.c measure.c +ifeq ($(CONFIG_TRACE),y) +SOURCES += trace.c +endif diff --git a/cesar/ce/rx/inc/rx.h b/cesar/ce/rx/inc/rx.h index 38152c43f9..7bcbf061b4 100644 --- a/cesar/ce/rx/inc/rx.h +++ b/cesar/ce/rx/inc/rx.h @@ -31,6 +31,7 @@ #include "ce/rx/bitloading/inc/initial.h" #include "common/defs/priority.h" +#include "ce/rx/inc/trace.h" /** * Thread name of the CE in RX. @@ -113,6 +114,12 @@ struct ce_rx_t */ cyg_handle_t alarm_handler; #endif +#if CONFIG_TRACE + /** + * CE/RX trace buffer. + */ + trace_buffer_t trace; +#endif }; /** diff --git a/cesar/ce/rx/inc/trace.h b/cesar/ce/rx/inc/trace.h new file mode 100644 index 0000000000..88c7da05ce --- /dev/null +++ b/cesar/ce/rx/inc/trace.h @@ -0,0 +1,61 @@ +#ifndef ce_rx_inc_trace_h +#define ce_rx_inc_trace_h +/* Cesar project {{{ + * + * Copyright (C) 2009 Spidcom + * + * <<>> + * + * }}} */ +/** + * \file ce/rx/inc/trace.h + * \brief Trace event for the CE/RX. + * \ingroup ce_rx + */ + +#include "lib/trace.h" +#include "ce/rx/inc/rx.h" + +/** + * Shortcut for tracing inside CE RX. + */ +#define CE_RX_TRACE(id, args...) \ + TRACE_SHORT (CE_RX_TRACE_, &ce_rx->trace, id, ## args) + +#if CONFIG_TRACE + +enum +{ + CE_RX_TRACE_INIT, + CE_RX_TRACE_UNINIT, + CE_RX_TRACE_MEASURE_ADD_CHAN_DATA, + CE_RX_TRACE_CHAN_DATA_HANDLING, + CE_RX_TRACE_SAR_CB, +}; + +BEGIN_DECLS + +/** + * Initialise trace buffer. + * \param ctx ce_rx context. + */ +void +ce_rx_trace_init (ce_rx_t *ctx); + +/** + * Un-initialise trace buffer. + * \param ctx ce_rx context. + */ +void +ce_rx_trace_uninit (ce_rx_t *ctx); + +END_DECLS + +#else /* !CONFIG_TRACE */ + +# define ce_rx_trace_init(ctx) ((void) 0) +# define ce_rx_trace_uninit(ctx) ((void) 0) + +#endif /* !CONFIG_TRACE */ + +#endif /* ce_rx_inc_trace_h */ diff --git a/cesar/ce/rx/src/measure.c b/cesar/ce/rx/src/measure.c index 816e202835..033e060d40 100644 --- a/cesar/ce/rx/src/measure.c +++ b/cesar/ce/rx/src/measure.c @@ -42,6 +42,8 @@ ce_rx_measure_sar_cb (void *data, pbproc_rx_params_t *rx_params, /* Get the context of the CE RX. */ ce_rx_t *ce_rx = (ce_rx_t *) data; + CE_RX_TRACE (SAR_CB); + /* Get channel data if they are some. */ if (chan_data_count) { @@ -130,6 +132,8 @@ ce_rx_measure_add_chan_data (ce_rx_t *ce_rx, pbproc_rx_params_t *rx_params, dbg_assert (chan_data); dbg_assert (chan_data_count); + CE_RX_TRACE (MEASURE_ADD_CHAN_DATA, rx_params->tei); + /* Allocate a measure. */ ce_rx_measure_mbox_t *measure = slab_alloc (&ce_rx->measure_cache); /* Copy needed information. */ diff --git a/cesar/ce/rx/src/rx.c b/cesar/ce/rx/src/rx.c index 9d238a6870..07b01e7a5a 100644 --- a/cesar/ce/rx/src/rx.c +++ b/cesar/ce/rx/src/rx.c @@ -40,6 +40,8 @@ ce_rx_init (mac_store_t *mac_store, sar_t *sar, pbproc_t *pbproc, dbg_assert (mac_store); dbg_assert (mac_config); + ce_rx_trace_init (&ce_rx); + /* Store a pointer to the MAC store. */ ce_rx.mac_store = mac_store; @@ -82,6 +84,8 @@ ce_rx_init (mac_store_t *mac_store, sar_t *sar, pbproc_t *pbproc, &ce_rx.thread_handler, &ce_rx.thread); cyg_thread_resume (ce_rx.thread_handler); + TRACE_SHORT (CE_RX_TRACE_, &ce_rx.trace, INIT); + return &ce_rx; } @@ -153,6 +157,7 @@ ce_rx_process_work_quit (ce_rx_t *ce_rx) ce_rx_cp_uninit (ce_rx); /* Stop CE RX thread. */ ce_rx->stop_flag = true; + CE_RX_TRACE (INIT); } void @@ -165,6 +170,9 @@ ce_rx_process_work_measure (ce_rx_t *ce_rx) mbox_node_t *node = mbox_get (&ce_rx->measure_mbox); ce_rx_measure_mbox_t * measure = PARENT_OF (ce_rx_measure_mbox_t, mbox_node, node); + + CE_RX_TRACE (CHAN_DATA_HANDLING, measure->rx_params.tei); + /* Ensure STA is created. */ mac_store_sta_add (ce_rx->mac_store, measure->rx_params.tei); diff --git a/cesar/ce/rx/src/trace.c b/cesar/ce/rx/src/trace.c new file mode 100644 index 0000000000..0c9c8eebad --- /dev/null +++ b/cesar/ce/rx/src/trace.c @@ -0,0 +1,40 @@ +/* Cesar project {{{ + * + * Copyright (C) 2009 Spidcom + * + * <<>> + * + * }}} */ +/** + * \file ce/rx/src/trace.c + * \brief Trace event for the CE/RX. + * \ingroup ce_rx + */ +#include "common/std.h" +#include "ce/rx/inc/trace.h" + +void +ce_rx_trace_init (ce_rx_t *ctx) +{ + static trace_namespace_t namespace; + static const trace_event_id_t event_ids[] = + { + TRACE_EVENT (CE_RX_TRACE_INIT, "init"), + TRACE_EVENT (CE_RX_TRACE_UNINIT, "uninit"), + TRACE_EVENT (CE_RX_TRACE_MEASURE_ADD_CHAN_DATA, "new chandata " + "received from peer TEI %x"), + TRACE_EVENT (CE_RX_TRACE_CHAN_DATA_HANDLING, "handling chandata for " + "TEI %x"), + TRACE_EVENT (CE_RX_TRACE_SAR_CB, "Callback from SAR"), + }; + dbg_assert (ctx); + trace_namespace_init (&namespace, event_ids, COUNT (event_ids)); + trace_buffer_add (&ctx->trace, "ce_rx", 8, 4, true, &namespace); +} + +void +ce_rx_trace_uninit (ce_rx_t *ctx) +{ + dbg_assert (ctx); + trace_buffer_remove (&ctx->trace); +} -- cgit v1.2.3