diff options
author | Aravind Sirsikar <arvind.sirsikar@radisys.com> | 2016-09-15 17:51:16 +0530 |
---|---|---|
committer | Aravind Sirsikar <arvind.sirsikar@radisys.com> | 2016-09-15 17:51:16 +0530 |
commit | 8e70bb5bb4751e3a7f33b95b2994bff410235844 (patch) | |
tree | cbe1fae5b15ea06365c63548f6157ca5fada1323 | |
parent | 22a901905c9749b03fceccda4d550f3da799d524 (diff) |
tbf_dl: factor out EGPRS DL window size calculation
A subsequent patch needs to call this from gprs_rlcmac_tbf::update(),
so to avoid code dup, put the calculation in a separate function.
Related: OS#1808
Change-Id: I7c7777d43f843bbd3421503fc2a8600f148ca035
-rw-r--r-- | src/tbf.cpp | 16 | ||||
-rw-r--r-- | src/tbf.h | 2 | ||||
-rw-r--r-- | src/tbf_dl.cpp | 20 |
3 files changed, 24 insertions, 14 deletions
diff --git a/src/tbf.cpp b/src/tbf.cpp index 7a15547..cbc0710 100644 --- a/src/tbf.cpp +++ b/src/tbf.cpp @@ -781,20 +781,8 @@ struct gprs_rlcmac_dl_tbf *tbf_alloc_dl_tbf(struct gprs_rlcmac_bts *bts, return NULL; } - if (tbf->is_egprs_enabled()) { - unsigned int num_pdch = pcu_bitcount(tbf->dl_slots()); - unsigned int ws = bts->ws_base + num_pdch * bts->ws_pdch; - ws = (ws / 32) * 32; - ws = OSMO_MAX(64, ws); - if (num_pdch == 1) - ws = OSMO_MIN(192, ws); - else - ws = OSMO_MIN(128 * num_pdch, ws); - - LOGP(DRLCMAC, LOGL_INFO, "%s: Setting EGPRS window size to %d\n", - tbf->name(), ws); - tbf->m_window.set_ws(ws); - } + if (tbf->is_egprs_enabled()) + tbf->egprs_calc_window_size(); llist_add(&tbf->list(), &bts->bts->dl_tbfs()); tbf->bts->tbf_dl_created(); @@ -372,6 +372,8 @@ struct gprs_rlcmac_dl_tbf : public gprs_rlcmac_tbf { int release(); int abort(); + void egprs_calc_window_size(); + /* TODO: add the gettimeofday as parameter */ struct msgb *llc_dequeue(bssgp_bvc_ctx *bctx); diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp index 489020b..457f2c9 100644 --- a/src/tbf_dl.cpp +++ b/src/tbf_dl.cpp @@ -1322,3 +1322,23 @@ enum egprs_rlcmac_dl_spb gprs_rlcmac_dl_tbf::get_egprs_dl_spb(const int bsn) /* Non SPB cases 0 is reurned */ return EGPRS_RLCMAC_DL_NO_RETX; } + +void gprs_rlcmac_dl_tbf::egprs_calc_window_size() +{ + struct gprs_rlcmac_bts *bts_data = bts->bts_data(); + unsigned int num_pdch = pcu_bitcount(dl_slots()); + unsigned int ws = bts_data->ws_base + num_pdch * bts_data->ws_pdch; + + ws = (ws / 32) * 32; + ws = OSMO_MAX(64, ws); + + if (num_pdch == 1) + ws = OSMO_MIN(192, ws); + else + ws = OSMO_MIN(128 * num_pdch, ws); + + LOGP(DRLCMAC, LOGL_INFO, "%s: Setting EGPRS window size to %d\n", + name(), ws); + + m_window.set_ws(ws); +} |