From 8e70bb5bb4751e3a7f33b95b2994bff410235844 Mon Sep 17 00:00:00 2001 From: Aravind Sirsikar Date: Thu, 15 Sep 2016 17:51:16 +0530 Subject: 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 --- src/tbf_dl.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/tbf_dl.cpp') 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); +} -- cgit v1.2.3