summaryrefslogtreecommitdiff
path: root/cesar
diff options
context:
space:
mode:
authorlaranjeiro2009-04-23 15:37:10 +0000
committerlaranjeiro2009-04-23 15:37:10 +0000
commit0a9f0390ec29a151c9f39a14457d9da1caa689d0 (patch)
tree7e3b775adc00a7b2801cfe53e1dd3c897dd90929 /cesar
parent200d2fca3e2eca6cc42b9bdb175542071047a1a7 (diff)
cp/sta/core: Added traces.
git-svn-id: svn+ssh://pessac/svn/cesar/trunk@4511 017c9cb6-072f-447c-8318-d5b54f68fe89
Diffstat (limited to 'cesar')
-rw-r--r--cesar/cp/sta/core/Module5
-rw-r--r--cesar/cp/sta/core/inc/core.h7
-rw-r--r--cesar/cp/sta/core/inc/trace.h58
-rw-r--r--cesar/cp/sta/core/src/core.c75
-rw-r--r--cesar/cp/sta/core/src/trace.c44
5 files changed, 153 insertions, 36 deletions
diff --git a/cesar/cp/sta/core/Module b/cesar/cp/sta/core/Module
index 2230bcc543..e52ab633cd 100644
--- a/cesar/cp/sta/core/Module
+++ b/cesar/cp/sta/core/Module
@@ -1 +1,4 @@
-SOURCES:= core.c
+SOURCES:= core.c
+ifeq ($(CONFIG_TRACE),y)
+SOURCES += trace.c
+endif
diff --git a/cesar/cp/sta/core/inc/core.h b/cesar/cp/sta/core/inc/core.h
index e3d2d46baa..a8e89d3779 100644
--- a/cesar/cp/sta/core/inc/core.h
+++ b/cesar/cp/sta/core/inc/core.h
@@ -58,6 +58,13 @@
/** cp sta core context data. */
struct cp_sta_core_t
{
+#if CONFIG_TRACE
+ /**
+ * Trace context.
+ */
+ trace_buffer_t trace;
+#endif
+
/** eCos real-time clock handle needed
* to manage real-time clock timers/alarms. */
cyg_handle_t real_time_clock_handle;
diff --git a/cesar/cp/sta/core/inc/trace.h b/cesar/cp/sta/core/inc/trace.h
new file mode 100644
index 0000000000..a332f9d625
--- /dev/null
+++ b/cesar/cp/sta/core/inc/trace.h
@@ -0,0 +1,58 @@
+#ifndef cp_sta_core_inc_trace_h
+#define cp_sta_core_inc_trace_h
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/core/inc/trace.h
+ * \brief STA core traces.
+ * \ingroup cp_sta_core
+ */
+#include "lib/trace.h"
+#include "cp/cp.h"
+
+/** Shortcut for tracing inside the HLE. */
+#define CP_STA_CORE_TRACE(id, args...)\
+ TRACE_FAST_SHORT(CP_STA_CORE_TRACE_, &ctx->sta_core.trace, id, ## args)
+
+#if CONFIG_TRACE
+
+enum
+{
+ CP_STA_CORE_TRACE_BEACON,
+ CP_STA_CORE_TRACE_MME,
+ CP_STA_CORE_TRACE_FSM,
+ CP_STA_CORE_TRACE_GARBAGE,
+ CP_STA_CORE_TRACE_PROCESS,
+};
+
+BEGIN_DECLS
+
+/**
+ * Initialize the trace buffer
+ * \param ctx the context.
+ */
+void
+cp_sta_core_trace_init (cp_t *ctx);
+
+/**
+ * Uninit the trace buffer
+ * \param ctx the context
+ */
+void
+cp_sta_core_trace_uninit (cp_t *ctx);
+
+END_DECLS
+
+#else /* !CONFIG_TRACE */
+
+#define cp_sta_core_trace_init(ctx) ((void) 0)
+#define cp_sta_core_trace_uninit(ctx) ((void) 0)
+
+#endif /* !CONFIG_TRACE */
+
+#endif /* cp_sta_core_inc_trace_h */
diff --git a/cesar/cp/sta/core/src/core.c b/cesar/cp/sta/core/src/core.c
index 0ce21c5e30..70e87408ed 100644
--- a/cesar/cp/sta/core/src/core.c
+++ b/cesar/cp/sta/core/src/core.c
@@ -37,6 +37,7 @@
* API function to put a FSM event in the FSM event FIFO.
*/
#include "common/std.h"
+#include "mac/common/ntb.h"
#include "cp/types.h"
#include "cp/inc/context.h"
@@ -52,6 +53,7 @@
#include "cp/pwl/pwl.h"
#include "cp/sta/core/inc/core.h"
+#include "cp/sta/core/inc/trace.h"
/** array of cp sta core events/actions. */
static const cp_sta_core_event_action_t cp_sta_core_event_action[] =
@@ -93,9 +95,11 @@ cp_sta_core_init(cp_t *ctx)
// init the event flags
cyg_flag_init (&ctx->sta_core.wait_event_core_flag);
- res = cyg_clock_get_resolution (cyg_real_time_clock ());
- ctx->sta_core.tck_per_rtc = MAC_MS_TO_TCK (1000LL) * res.dividend / res.divisor /
- 1000000000LL;
+ res = cyg_clock_get_resolution (cyg_real_time_clock ());
+ ctx->sta_core.tck_per_rtc = MAC_MS_TO_TCK (1000LL) * res.dividend / res.divisor /
+ 1000000000LL;
+
+ cp_sta_core_trace_init (ctx);
#ifndef STA_CORE_UNIT_TEST
// create and launch the CP sta core thread
@@ -127,6 +131,7 @@ cp_sta_core_uninit(cp_t *cp_ctx)
{
dbg_assert(cp_ctx);
cp_sta_core_signal_terminate_thread_event(cp_ctx);
+ cp_sta_core_trace_uninit (cp_ctx);
}
/**
@@ -136,11 +141,13 @@ cp_sta_core_uninit(cp_t *cp_ctx)
*
*/
void
-cp_sta_core_signal_recv_beacon_event(cp_t *cp_ctx)
+cp_sta_core_signal_recv_beacon_event(cp_t *ctx)
{
- dbg_assert(cp_ctx);
- cyg_flag_setbits (&cp_ctx->sta_core.wait_event_core_flag,
+ dbg_assert(ctx);
+ cyg_flag_setbits (&ctx->sta_core.wait_event_core_flag,
CP_STA_CORE_EVENT_FLAG_RECV_BEACON);
+
+ CP_STA_CORE_TRACE (BEACON, mac_ntb());
}
/**
@@ -150,11 +157,13 @@ cp_sta_core_signal_recv_beacon_event(cp_t *cp_ctx)
*
*/
void
-cp_sta_core_signal_recv_mme_event(cp_t *cp_ctx)
+cp_sta_core_signal_recv_mme_event(cp_t *ctx)
{
- dbg_assert(cp_ctx);
- cyg_flag_setbits (&cp_ctx->sta_core.wait_event_core_flag,
+ dbg_assert(ctx);
+ cyg_flag_setbits (&ctx->sta_core.wait_event_core_flag,
CP_STA_CORE_EVENT_FLAG_RECV_MME);
+
+ CP_STA_CORE_TRACE (MME, mac_ntb());
}
/**
@@ -164,11 +173,13 @@ cp_sta_core_signal_recv_mme_event(cp_t *cp_ctx)
*
*/
void
-cp_sta_core_signal_fsm_event(cp_t *cp_ctx)
+cp_sta_core_signal_fsm_event(cp_t *ctx)
{
- dbg_assert(cp_ctx);
- cyg_flag_setbits (&cp_ctx->sta_core.wait_event_core_flag,
+ dbg_assert(ctx);
+ cyg_flag_setbits (&ctx->sta_core.wait_event_core_flag,
CP_STA_CORE_EVENT_FLAG_FSM);
+
+ CP_STA_CORE_TRACE (FSM, mac_ntb());
}
/**
@@ -178,11 +189,12 @@ cp_sta_core_signal_fsm_event(cp_t *cp_ctx)
*
*/
void
-cp_sta_core_signal_garbage_collector_event(cp_t *cp_ctx)
+cp_sta_core_signal_garbage_collector_event(cp_t *ctx)
{
- dbg_assert(cp_ctx);
- cyg_flag_setbits (&cp_ctx->sta_core.wait_event_core_flag,
+ dbg_assert(ctx);
+ cyg_flag_setbits (&ctx->sta_core.wait_event_core_flag,
CP_STA_CORE_EVENT_FLAG_GARBAGE);
+ CP_STA_CORE_TRACE (GARBAGE, mac_ntb());
}
/**
@@ -536,12 +548,12 @@ cp_sta_core_quit_wait_event_loop(cp_t *cp_ctx)
* acts as event priority order, we must be careful with that
*/
void
-cp_sta_core_wait_event_loop(cp_t *cp_ctx)
+cp_sta_core_wait_event_loop(cp_t *ctx)
{
cyg_flag_value_t flag_value, flag_mask;
uint i;
- dbg_assert(cp_ctx);
+ dbg_assert(ctx);
// create the flag mask
flag_mask = 0;
@@ -551,18 +563,18 @@ cp_sta_core_wait_event_loop(cp_t *cp_ctx)
}
// init the garbage collector periodic event timer
- cp_sta_core_gen_core_cyclic_event (cp_ctx,
- &cp_ctx->sta_core.garbage_collector_event,
+ cp_sta_core_gen_core_cyclic_event (ctx,
+ &ctx->sta_core.garbage_collector_event,
CP_STA_CORE_EVENT_FLAG_GARBAGE,
NULL,
CP_STA_CORE_GARBAGE_COLLECTOR_PERIOD_MS);
// wait-event loop
- cp_ctx->sta_core.terminate_flag = false;
- while (!cp_ctx->sta_core.terminate_flag)
+ ctx->sta_core.terminate_flag = false;
+ while (!ctx->sta_core.terminate_flag)
{
// wait for a cp sta core event
- flag_value = cyg_flag_wait (&cp_ctx->sta_core.wait_event_core_flag, flag_mask, CYG_FLAG_WAITMODE_OR | CYG_FLAG_WAITMODE_CLR );
+ flag_value = cyg_flag_wait (&ctx->sta_core.wait_event_core_flag, flag_mask, CYG_FLAG_WAITMODE_OR | CYG_FLAG_WAITMODE_CLR );
// process the event(s) in respect of event category priority order
// priority 0 = BEACON recv event (highest priority, NTB clock sync depends on this!)
// priority 1 = MME recv event
@@ -573,24 +585,17 @@ cp_sta_core_wait_event_loop(cp_t *cp_ctx)
{
if (flag_value & cp_sta_core_event_action[i].event_flag)
{
- // we find an event, so we clear it
- //cyg_flag_maskbits (&cp_ctx->sta_core.wait_event_core_flag, ~cp_sta_core_event_action[i].event_flag);
+ CP_STA_CORE_TRACE (PROCESS, mac_ntb());
flag_value &= ~cp_sta_core_event_action[i].event_flag;
- // and then we process it
- if ( cp_sta_core_event_action[i].func == NULL)
- {
- //dbg_assert (cp_sta_core_event_action[i].func);
- }
- else
- cp_sta_core_event_action[i].func (cp_ctx);
+ cp_sta_core_event_action[i].func (ctx);
break;
}
}
- cyg_flag_setbits(&cp_ctx->sta_core.wait_event_core_flag,flag_value);
+ cyg_flag_setbits(&ctx->sta_core.wait_event_core_flag,flag_value);
}
- cp_sta_core_stop_timed_or_cyclic_event(cp_ctx,
- &cp_ctx->sta_core.garbage_collector_event);
- cyg_flag_destroy(&cp_ctx->sta_core.wait_event_core_flag);
+ cp_sta_core_stop_timed_or_cyclic_event(ctx,
+ &ctx->sta_core.garbage_collector_event);
+ cyg_flag_destroy(&ctx->sta_core.wait_event_core_flag);
}
/**
diff --git a/cesar/cp/sta/core/src/trace.c b/cesar/cp/sta/core/src/trace.c
new file mode 100644
index 0000000000..e2d12fd34a
--- /dev/null
+++ b/cesar/cp/sta/core/src/trace.c
@@ -0,0 +1,44 @@
+/* Cesar project {{{
+ *
+ * Copyright (C) 2009 Spidcom
+ *
+ * <<<Licence>>>
+ *
+ * }}} */
+/**
+ * \file cp/sta/core/src/trace.c
+ * \brief STA core traces.
+ * \ingroup cp_sta_core
+ */
+#include "common/std.h"
+#include "cp/sta/core/inc/trace.h"
+#include "cp/inc/context.h"
+
+void
+cp_sta_core_trace_init (cp_t *ctx)
+{
+ dbg_assert (ctx);
+
+ static trace_namespace_t namespace;
+ static const trace_event_id_t event_ids[] =
+ {
+ TRACE_EVENT (CP_STA_CORE_TRACE_BEACON, "Beacon", TIMESTAMP),
+ TRACE_EVENT (CP_STA_CORE_TRACE_MME, "MME", TIMESTAMP),
+ TRACE_EVENT (CP_STA_CORE_TRACE_FSM, "FSM", TIMESTAMP),
+ TRACE_EVENT (CP_STA_CORE_TRACE_GARBAGE, "GARBAGE", TIMESTAMP),
+ TRACE_EVENT (CP_STA_CORE_TRACE_PROCESS, "Processing an event", TIMESTAMP),
+ };
+
+ trace_namespace_init (&namespace, event_ids, COUNT (event_ids));
+ trace_buffer_add (&ctx->sta_core.trace, "cp_sta_core", 8, 4, true, &namespace);
+
+}
+
+void
+cp_sta_core_trace_uninit (cp_t *ctx)
+{
+ dbg_assert (ctx);
+
+ trace_buffer_remove (&ctx->sta_core.trace);
+}
+