aboutsummaryrefslogtreecommitdiffstats
path: root/src/tbf_dl.cpp
diff options
context:
space:
mode:
authorAravind Sirsikar <arvind.sirsikar@radisys.com>2016-09-15 17:51:16 +0530
committerAravind Sirsikar <arvind.sirsikar@radisys.com>2016-09-15 17:51:16 +0530
commit8e70bb5bb4751e3a7f33b95b2994bff410235844 (patch)
treecbe1fae5b15ea06365c63548f6157ca5fada1323 /src/tbf_dl.cpp
parent22a901905c9749b03fceccda4d550f3da799d524 (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
Diffstat (limited to 'src/tbf_dl.cpp')
-rw-r--r--src/tbf_dl.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/tbf_dl.cpp b/src/tbf_dl.cpp
index 489020b3..457f2c9b 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);
+}