aboutsummaryrefslogtreecommitdiffstats
path: root/src/bts.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/bts.cpp')
-rw-r--r--src/bts.cpp26
1 files changed, 18 insertions, 8 deletions
diff --git a/src/bts.cpp b/src/bts.cpp
index 3ca3628e..9de6dc35 100644
--- a/src/bts.cpp
+++ b/src/bts.cpp
@@ -991,16 +991,26 @@ int gprs_rlcmac_pdch::rcv_block(uint8_t *data, uint8_t len, uint32_t fn, int8_t
return rc;
}
-struct gprs_rlcmac_tbf *gprs_rlcmac_pdch::ul_tbf_by_tfi(uint8_t tfi)
+gprs_rlcmac_tbf *gprs_rlcmac_pdch::tbf_from_list_by_tfi(struct llist_head *tbf_list, uint8_t tfi)
{
- if (tfi >= ARRAY_SIZE(ul_tbf))
- return NULL;
- return ul_tbf[tfi];
+ gprs_rlcmac_tbf *tbf;
+
+ llist_for_each_entry(tbf, tbf_list, list) {
+ if (tbf->tfi() != tfi)
+ continue;
+ if (!tbf->pdch[ts_no])
+ continue;
+ return tbf;
+ }
+ return NULL;
}
-struct gprs_rlcmac_tbf *gprs_rlcmac_pdch::dl_tbf_by_tfi(uint8_t tfi)
+gprs_rlcmac_tbf *gprs_rlcmac_pdch::ul_tbf_by_tfi(uint8_t tfi)
{
- if (tfi >= ARRAY_SIZE(dl_tbf))
- return NULL;
- return dl_tbf[tfi];
+ return tbf_from_list_by_tfi(&bts_data()->ul_tbfs, tfi);
+}
+
+gprs_rlcmac_tbf *gprs_rlcmac_pdch::dl_tbf_by_tfi(uint8_t tfi)
+{
+ return tbf_from_list_by_tfi(&bts_data()->dl_tbfs, tfi);
}