aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacob Erlbeck <jerlbeck@sysmocom.de>2016-01-28 14:44:48 +0100
committerJacob Erlbeck <jerlbeck@sysmocom.de>2016-02-02 17:06:39 +0100
commitd5f5356fd3d45e89df0c028bfe09b13e641a8ee8 (patch)
tree46a593513a18a972347f189446000cf9bce4b5ba
parent1a880da4f9548145dfc8cbe54fd7f6c3eb9edc1b (diff)
WIP: Use current_pacch_slots (TODO)
Ticket: OW#???? Sponsored-by: On-Waves ehf
-rw-r--r--src/tbf.cpp28
1 files changed, 23 insertions, 5 deletions
diff --git a/src/tbf.cpp b/src/tbf.cpp
index eaadc15b..5058b254 100644
--- a/src/tbf.cpp
+++ b/src/tbf.cpp
@@ -378,6 +378,7 @@ int gprs_rlcmac_tbf::update()
return 0;
}
+/* TODO: Remove me */
int tbf_assign_control_ts(struct gprs_rlcmac_tbf *tbf)
{
if (tbf->control_ts == 0xff)
@@ -918,10 +919,11 @@ struct msgb *gprs_rlcmac_tbf::create_dl_ass(uint32_t fn, uint8_t ts)
if (direction == GPRS_RLCMAC_DL_TBF && !is_control_ts(ts)) {
LOGP(DRLCMAC, LOGL_NOTICE, "Cannot poll for downlink "
"assigment, because MS cannot reply. (TS=%d, "
- "first common TS=%d)\n", ts,
- first_common_ts);
+ "first control TS=%d)\n", ts,
+ first_control_ts());
poll_ass_dl = 0;
}
+
if (poll_ass_dl) {
if (poll_state == GPRS_RLCMAC_POLL_SCHED &&
ul_ass_state == GPRS_RLCMAC_UL_ASS_WAIT_ACK)
@@ -1229,11 +1231,12 @@ uint8_t gprs_rlcmac_tbf::ul_slots() const
size_t i;
if (direction == GPRS_RLCMAC_DL_TBF) {
+#if 0 /* This depends on the existence of an concurrent TBF */
if (control_ts < 8)
slots |= 1 << control_ts;
if (first_common_ts < 8)
slots |= 1 << first_common_ts;
-
+#endif
return slots;
}
@@ -1246,10 +1249,25 @@ uint8_t gprs_rlcmac_tbf::ul_slots() const
bool gprs_rlcmac_tbf::is_control_ts(uint8_t ts) const
{
- return ts == control_ts;
+ if (!ms())
+ return ts == control_ts;
+
+ return ms()->current_pacch_slots() & (1 << ts);
}
uint8_t gprs_rlcmac_tbf::first_control_ts() const
{
- return first_ts;
+ uint8_t bitnum;
+
+ if (!ms())
+ return first_ts;
+
+ bitnum = ffs(ms()->current_pacch_slots());
+
+ if (bitnum == 0) {
+ LOGP(DRLCMAC, LOGL_ERROR, "%s: No valid PACCH slot\n", name());
+ return first_ts;
+ }
+
+ return bitnum - 1;
}