fixeria has submitted this change. (
https://gerrit.osmocom.org/c/osmocom-bb/+/30318 )
Change subject: trxcon: trxcon_fsm: permit loop [P]DCH transitions
......................................................................
trxcon: trxcon_fsm: permit loop [P]DCH transitions
According to 3GPP TS 44.004, Figure 5.1, it's absolutely legal to
perform loop transitions in state 'DCH' (i.e. from 'DCH' to
'DCH').
This kind of transition is needed in the following cases:
* on reciept of RR FREQUENCY REDEFINITION,
* on reciept of RR ASSIGNMENT REQUEST,
* on reciept of RR HANDOVER REQUEST,
when going back from state 'DCH' to state 'BCH' is not required nor
actually desired. In context of the trxcon_fsm, this applies to
both TRXCON_ST_DEDICATED and TRXCON_ST_PACKET_DATA, as they both
represent what's defined as 'DCH' in the Figure 5.1.
Change-Id: I3b402ec84610a5df744d9b06e5f7dab7a9a3ddad
Related: OS#5599
---
M src/host/trxcon/src/trxcon_fsm.c
1 file changed, 15 insertions(+), 2 deletions(-)
Approvals:
Jenkins Builder: Verified
pespin: Looks good to me, but someone else must approve
osmith: Looks good to me, but someone else must approve
fixeria: Looks good to me, approved
diff --git a/src/host/trxcon/src/trxcon_fsm.c b/src/host/trxcon/src/trxcon_fsm.c
index 875a9f5..264ba20 100644
--- a/src/host/trxcon/src/trxcon_fsm.c
+++ b/src/host/trxcon/src/trxcon_fsm.c
@@ -336,6 +336,9 @@
trxcon->l1p.band_arfcn = req->h0.band_arfcn;
}
+ /* Remove all active timeslots */
+ l1sched_reset(trxcon->sched, false);
+
rc = l1sched_configure_ts(trxcon->sched, req->chan_nr & 0x07, config);
if (rc)
return;
@@ -410,6 +413,9 @@
case TRXCON_EV_TX_ACCESS_BURST_CNF:
l1ctl_tx_rach_conf(trxcon, (const struct trxcon_param_tx_access_burst_cnf *)data);
break;
+ case TRXCON_EV_DCH_EST_REQ:
+ handle_dch_est_req(fi, (const struct trxcon_param_dch_est_req *)data);
+ break;
case TRXCON_EV_DCH_REL_REQ:
l1sched_reset(trxcon->sched, false);
osmo_fsm_inst_state_chg(fi, TRXCON_ST_RESET, 0, 0);
@@ -530,6 +536,9 @@
LOGPFSML(fi, LOGL_NOTICE, "Rx PTCCH/D message\n");
break;
}
+ case TRXCON_EV_DCH_EST_REQ:
+ handle_dch_est_req(fi, (const struct trxcon_param_dch_est_req *)data);
+ break;
case TRXCON_EV_DCH_REL_REQ:
l1sched_reset(trxcon->sched, false);
osmo_fsm_inst_state_chg(fi, TRXCON_ST_RESET, 0, 0);
@@ -601,8 +610,10 @@
[TRXCON_ST_DEDICATED] = {
.name = "DEDICATED",
.out_state_mask = S(TRXCON_ST_RESET)
- | S(TRXCON_ST_FBSB_SEARCH),
+ | S(TRXCON_ST_FBSB_SEARCH)
+ | S(TRXCON_ST_DEDICATED),
.in_event_mask = S(TRXCON_EV_DCH_REL_REQ)
+ | S(TRXCON_EV_DCH_EST_REQ)
| S(TRXCON_EV_TX_ACCESS_BURST_REQ)
| S(TRXCON_EV_TX_ACCESS_BURST_CNF)
| S(TRXCON_EV_SET_TCH_MODE_REQ)
@@ -615,8 +626,10 @@
[TRXCON_ST_PACKET_DATA] = {
.name = "PACKET_DATA",
.out_state_mask = S(TRXCON_ST_RESET)
- | S(TRXCON_ST_FBSB_SEARCH),
+ | S(TRXCON_ST_FBSB_SEARCH)
+ | S(TRXCON_ST_PACKET_DATA),
.in_event_mask = S(TRXCON_EV_DCH_REL_REQ)
+ | S(TRXCON_EV_DCH_EST_REQ)
| S(TRXCON_EV_TX_ACCESS_BURST_REQ)
| S(TRXCON_EV_TX_ACCESS_BURST_CNF)
| S(TRXCON_EV_RX_DATA_IND),
--
To view, visit
https://gerrit.osmocom.org/c/osmocom-bb/+/30318
To unsubscribe, or for help writing mail filters, visit
https://gerrit.osmocom.org/settings
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Change-Id: I3b402ec84610a5df744d9b06e5f7dab7a9a3ddad
Gerrit-Change-Number: 30318
Gerrit-PatchSet: 6
Gerrit-Owner: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: fixeria <vyanitskiy(a)sysmocom.de>
Gerrit-Reviewer: laforge <laforge(a)osmocom.org>
Gerrit-Reviewer: msuraev <msuraev(a)sysmocom.de>
Gerrit-Reviewer: osmith <osmith(a)sysmocom.de>
Gerrit-Reviewer: pespin <pespin(a)sysmocom.de>
Gerrit-MessageType: merged