aboutsummaryrefslogtreecommitdiffstats
path: root/src/bts.cpp
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2015-06-30 14:10:13 +0200
committerJacob Erlbeck <jerlbeck@sysmocom.de>2015-07-07 10:35:28 +0200
commitcc9358f95aca618db451faf53971c45dfe0b505a (patch)
tree84b5d5e37292e609ddfb8c7a2336ba5cad42cb4c /src/bts.cpp
parent16c6ecc3657f62728845764731c189b3cb8daca2 (diff)
tbf: Keep a set of used TFI and USF per PDCH
Currently is is rather expensive to get TFI and USF usage per PDCH, because the TBFs need to be scanned to get that information. This commit adds corresponding bit sets which get updated by the attach_tbf/detach_tbf methods of the gprs_rlcmac_pdch class. Sponsored-by: On-Waves ehf
Diffstat (limited to 'src/bts.cpp')
-rw-r--r--src/bts.cpp28
1 files changed, 24 insertions, 4 deletions
diff --git a/src/bts.cpp b/src/bts.cpp
index 87a22def..b96971db 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -1137,18 +1137,38 @@ gprs_rlcmac_dl_tbf *gprs_rlcmac_pdch::dl_tbf_by_tfi(uint8_t tfi)
void gprs_rlcmac_pdch::attach_tbf(gprs_rlcmac_tbf *tbf)
{
+ gprs_rlcmac_ul_tbf *ul_tbf;
+
m_num_tbfs[tbf->direction] += 1;
- LOGP(DRLCMAC, LOGL_INFO, "PDCH(TS %d, TRX %d): Attaching %s, %d TBFs.\n",
- ts_no, trx_no(), tbf->name(), m_num_tbfs[tbf->direction]);
+ if (tbf->direction == GPRS_RLCMAC_UL_TBF) {
+ ul_tbf = static_cast<gprs_rlcmac_ul_tbf *>(tbf);
+ m_assigned_usf |= 1 << ul_tbf->m_usf[ts_no];
+ }
+ m_assigned_tfi |= 1UL << tbf->tfi();
+
+ LOGP(DRLCMAC, LOGL_INFO, "PDCH(TS %d, TRX %d): Attaching %s, %d TBFs, "
+ "USFs = %02x, TFIs = %08x.\n",
+ ts_no, trx_no(), tbf->name(), m_num_tbfs[tbf->direction],
+ m_assigned_usf, m_assigned_tfi);
}
void gprs_rlcmac_pdch::detach_tbf(gprs_rlcmac_tbf *tbf)
{
+ gprs_rlcmac_ul_tbf *ul_tbf;
+
OSMO_ASSERT(m_num_tbfs[tbf->direction] > 0);
m_num_tbfs[tbf->direction] -= 1;
- LOGP(DRLCMAC, LOGL_INFO, "PDCH(TS %d, TRX %d): Detaching %s, %d TBFs.\n",
- ts_no, trx_no(), tbf->name(), m_num_tbfs[tbf->direction]);
+ if (tbf->direction == GPRS_RLCMAC_UL_TBF) {
+ ul_tbf = static_cast<gprs_rlcmac_ul_tbf *>(tbf);
+ m_assigned_usf &= ~(1 << ul_tbf->m_usf[ts_no]);
+ }
+ m_assigned_tfi &= ~(1UL << tbf->tfi());
+
+ LOGP(DRLCMAC, LOGL_INFO, "PDCH(TS %d, TRX %d): Detaching %s, %d TBFs, "
+ "USFs = %02x, TFIs = %08x.\n",
+ ts_no, trx_no(), tbf->name(), m_num_tbfs[tbf->direction],
+ m_assigned_usf, m_assigned_tfi);
}
void gprs_rlcmac_pdch::reserve(enum gprs_rlcmac_tbf_direction dir)