summaryrefslogtreecommitdiff
path: root/mac/sar
diff options
context:
space:
mode:
Diffstat (limited to 'mac/sar')
-rw-r--r--mac/sar/inc/sar_context.h5
-rw-r--r--mac/sar/sar.h3
-rw-r--r--mac/sar/src/sar.c14
-rw-r--r--mac/sar/test/unit_test/ecos/Makefile2
-rw-r--r--mac/sar/test/unit_test/ecos/src/lib_sar_expiration.c13
5 files changed, 27 insertions, 10 deletions
diff --git a/mac/sar/inc/sar_context.h b/mac/sar/inc/sar_context.h
index 4a75e8ec48..551427db72 100644
--- a/mac/sar/inc/sar_context.h
+++ b/mac/sar/inc/sar_context.h
@@ -172,6 +172,11 @@ struct sar_t
/** message context */
void *ul_msg_ctx;
+ /** Thread context. */
+ u8 thread_stack [SAR_THREAD_STACK_SIZE];
+ cyg_handle_t thread_handle;
+ cyg_thread thread;
+
/** Tracing system */
#if CONFIG_TRACE
/** sar Trace */
diff --git a/mac/sar/sar.h b/mac/sar/sar.h
index fad7093f8a..f4666600c4 100644
--- a/mac/sar/sar.h
+++ b/mac/sar/sar.h
@@ -22,6 +22,9 @@
#include "mac/pbproc/pbproc.h"
#include "mac/sar/sar_mfs_expiration_cb.h"
+#define SAR_THREAD_PRIORITY 9
+#define SAR_THREAD_STACK_SIZE CYGNUM_HAL_STACK_SIZE_TYPICAL
+
/* forward declaration */
typedef struct sar_t sar_t;
diff --git a/mac/sar/src/sar.c b/mac/sar/src/sar.c
index 92d66f4a34..cfcecb2810 100644
--- a/mac/sar/src/sar.c
+++ b/mac/sar/src/sar.c
@@ -91,6 +91,16 @@ sar_t *sar_init (mac_store_t *mac_store, pbproc_t *pbproc, ca_t *ca)
SAR_TRACE (INIT, mac_ntb());
+ // Create the Thread for the SAR.
+ cyg_thread_create (SAR_THREAD_PRIORITY, &sar_process, (cyg_addrword_t) ctx,
+ "SAR", ctx->thread_stack, SAR_THREAD_STACK_SIZE,
+ &ctx->thread_handle, &ctx->thread);
+
+ /* Resume the thread only if the SAR is not in unit test. */
+#ifndef SAR_UNIT_TEST
+ cyg_thread_resume (ctx->thread_handle);
+#endif
+
return &sar_global;
}
@@ -254,6 +264,9 @@ void sar_init_expiration (sar_t *ctx, sar_mfs_expired_cb_t cb)
*/
void sar_uninit (sar_t *ctx)
{
+ cyg_thread_suspend (ctx->thread_handle);
+ cyg_thread_delete (ctx->thread_handle);
+
bridge_dma_uninit_list (&ctx->bridge_dma_jobs);
cyg_mbox_delete (ctx->mailbox_handle);
@@ -1252,6 +1265,7 @@ void rx_upper_layer_transmit_data (sar_t *sar_ctx, sar_reassembly_ctx_t *ctx)
else
{
job_tail->next = bridge_dma_get_head (&ctx->jobs_pending_list);
+ job_tail->job.next = &job_tail->next->job;
job_tail = job_tail->next;
}
job_tail->job.data_addr = address;
diff --git a/mac/sar/test/unit_test/ecos/Makefile b/mac/sar/test/unit_test/ecos/Makefile
index 649aa4b378..c6de8cafc3 100644
--- a/mac/sar/test/unit_test/ecos/Makefile
+++ b/mac/sar/test/unit_test/ecos/Makefile
@@ -2,6 +2,8 @@ BASE = ../../../../../
ECOS = y
+DEFS = -DSAR_UNIT_TEST=1
+
TARGET_PROGRAMS = reassembly_complete rea_cov_test \
reassembly_create_mfs lib_sar_mfs reassembly_measurement \
reassembly_mfs_update_expiration_date sar_call_back_ul \
diff --git a/mac/sar/test/unit_test/ecos/src/lib_sar_expiration.c b/mac/sar/test/unit_test/ecos/src/lib_sar_expiration.c
index d76937b894..7c060d1488 100644
--- a/mac/sar/test/unit_test/ecos/src/lib_sar_expiration.c
+++ b/mac/sar/test/unit_test/ecos/src/lib_sar_expiration.c
@@ -144,7 +144,7 @@ int main (void)
mfs->tx.head = (pb_t *) blk_alloc_desc ();
mfs->tx.head->next = NULL;
sar_expiration_mfs_remove (&sar->expiration, mfs);
- sar_expiration_mfs (&sar->expiration, 100);
+ sar_expiration_mfs (&sar->expiration, -1);
blk_release (mfs);
@@ -185,11 +185,11 @@ int main (void)
sar->expiration.mfs_expiration_cb = mfs_expired;
sar_mailbox_timeout (sar);
+ dbg_check (mac_store_sta_remove (mac_store, 1));
/* Test the expiration of an MPDU. */
this_test_mpdu_expired (sar);
- dbg_check (mac_store_sta_remove (mac_store, 1));
mac_store_uninit (mac_store);
blk_release (ca);
blk_release (sar);
@@ -586,16 +586,13 @@ void
this_test_mpdu_expired (sar_t *sar)
{
pb_t *pb;
- ca_t *ca;
uint phy;
mac_config_t mac_config;
- pbproc_rx_params_t rx_params;
sar_mpdu_t mpdu;
pb = (pb_t *) blk_alloc_desc ();
pb->next = NULL;
- ca = blk_alloc ();
phy = 28000000;
mac_ntb_init ((phy_t *) &phy, &mac_config);
@@ -603,8 +600,6 @@ this_test_mpdu_expired (sar_t *sar)
* modified. */
sar->pbproc_ctx = (pbproc_t *) sar;
- mpdu.rx_params = blk_alloc();
- *mpdu.rx_params = rx_params;
mpdu.chandata = NULL;
mpdu.nb_chandata = 0;
mpdu.mfs = NULL;
@@ -612,7 +607,7 @@ this_test_mpdu_expired (sar_t *sar)
mpdu.head = pb;
mpdu.tail = pb;
mpdu.number = 1;
- mpdu.expiration_ntb = 10;
+ mpdu.expiration_ntb = 0;
reassembly_run (sar, &mpdu);
@@ -638,8 +633,6 @@ this_test_mpdu_expired (sar_t *sar)
}
test_end;
- blk_release (ca);
- blk_release (mpdu.rx_params);
blk_release_desc ((blk_t *)mpdu.chandata);
}