fixeria has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmocom-bb/+/34139 )
Change subject: trxcon: properly handle PDCH slotmask in UL/DL TBF CFG.Req ......................................................................
trxcon: properly handle PDCH slotmask in UL/DL TBF CFG.Req
Change-Id: I4c2ff25217fba0b6b4704f023071b86ed9afb55c Related: OS#5500 --- M src/host/trxcon/src/trxcon_fsm.c 1 file changed, 36 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/39/34139/1
diff --git a/src/host/trxcon/src/trxcon_fsm.c b/src/host/trxcon/src/trxcon_fsm.c index eabab3d..702d62c 100644 --- a/src/host/trxcon/src/trxcon_fsm.c +++ b/src/host/trxcon/src/trxcon_fsm.c @@ -536,6 +536,30 @@ trxcon->gprs = NULL; }
+static void handle_tbf_cfg_req(struct trxcon_inst *trxcon) +{ + const struct l1gprs_state *gprs = trxcon->gprs; + struct l1sched_state *sched = trxcon->sched; + + for (unsigned int tn = 0; tn < ARRAY_SIZE(gprs->pdch); tn++) { + const struct l1gprs_pdch *pdch = &gprs->pdch[tn]; + + if ((pdch->ul_tbf_count + pdch->dl_tbf_count) > 0) { + if (sched->ts[tn] != NULL) /* already enabled */ + continue; + if (l1sched_configure_ts(sched, tn, GSM_PCHAN_PDCH) != 0) + continue; + OSMO_ASSERT(sched->ts[tn] != NULL); + + l1sched_activate_lchan(sched->ts[tn], L1SCHED_PDTCH); + l1sched_activate_lchan(sched->ts[tn], L1SCHED_PTCCH); + /* FIXME: set TSC for both lchans */ + } else { + l1sched_del_ts(sched, tn); + } + } +} + static void trxcon_st_packet_data_action(struct osmo_fsm_inst *fi, uint32_t event, void *data) { @@ -550,9 +574,11 @@ break; case TRXCON_EV_GPRS_UL_TBF_CFG_REQ: l1gprs_handle_ul_tbf_cfg_req(trxcon->gprs, (struct msgb *)data); + handle_tbf_cfg_req(trxcon); break; case TRXCON_EV_GPRS_DL_TBF_CFG_REQ: l1gprs_handle_dl_tbf_cfg_req(trxcon->gprs, (struct msgb *)data); + handle_tbf_cfg_req(trxcon); break; case TRXCON_EV_GPRS_UL_BLOCK_REQ: {