aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSylvain Munaut <tnt@246tNt.com>2020-05-06 11:49:08 +0200
committerSylvain Munaut <tnt@246tNt.com>2020-05-08 14:50:26 +0200
commit586c0114b38e73ca5a862067f00410bb0e2a8cc8 (patch)
treec54d105e8b2f3012947ef7843735ae48f9cc0ed2
parent540e98f259b45fd55b119d56e2a9f5e912551833 (diff)
om2k: Dispatch TS_EV_OML_READY to TS FSM only when it's actually ready
Signed-off-by: Sylvain Munaut <tnt@246tNt.com> Change-Id: Ic2a84ea406e9a39332313d63b27d73f334d4e0a0
-rw-r--r--src/osmo-bsc/abis_om2000.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/osmo-bsc/abis_om2000.c b/src/osmo-bsc/abis_om2000.c
index b99fbc584..9ae5a2644 100644
--- a/src/osmo-bsc/abis_om2000.c
+++ b/src/osmo-bsc/abis_om2000.c
@@ -2019,7 +2019,7 @@ enum om2k_trx_state {
struct om2k_trx_fsm_priv {
struct gsm_bts_trx *trx;
- uint8_t next_ts_nr;
+ uint8_t cur_ts_nr;
};
static void om2k_trx_s_init(struct osmo_fsm_inst *fi, uint32_t event, void *data)
@@ -2063,8 +2063,8 @@ static void om2k_trx_s_wait_rx(struct osmo_fsm_inst *fi, uint32_t event, void *d
/* Initialize Timeslots after TX */
osmo_fsm_inst_state_chg(fi, OM2K_TRX_S_WAIT_TS,
TRX_FSM_TIMEOUT, 0);
- otfp->next_ts_nr = 0;
- ts = &otfp->trx->ts[otfp->next_ts_nr++];
+ otfp->cur_ts_nr = 0;
+ ts = &otfp->trx->ts[otfp->cur_ts_nr];
om2k_mo_fsm_start(fi, OM2K_TRX_EVT_TS_DONE, otfp->trx,
&ts->rbs2000.om2k_mo);
}
@@ -2074,9 +2074,14 @@ static void om2k_trx_s_wait_ts(struct osmo_fsm_inst *fi, uint32_t event, void *d
struct om2k_trx_fsm_priv *otfp = fi->priv;
struct gsm_bts_trx_ts *ts;
- if (otfp->next_ts_nr < 8) {
+ /* notify TS is ready */
+ ts = &otfp->trx->ts[otfp->cur_ts_nr];
+ osmo_fsm_inst_dispatch(ts->fi, TS_EV_OML_READY, NULL);
+
+ /* next ? */
+ if (++otfp->cur_ts_nr < 8) {
/* iterate to the next timeslot */
- ts = &otfp->trx->ts[otfp->next_ts_nr++];
+ ts = &otfp->trx->ts[otfp->cur_ts_nr];
om2k_mo_fsm_start(fi, OM2K_TRX_EVT_TS_DONE, otfp->trx,
&ts->rbs2000.om2k_mo);
} else {
@@ -2820,7 +2825,6 @@ void abis_om2k_trx_init(struct gsm_bts_trx *trx)
om2k_mo_init(&ts->rbs2000.om2k_mo, OM2K_MO_CLS_TS,
bts->nr, trx->nr, i);
OSMO_ASSERT(ts->fi);
- osmo_fsm_inst_dispatch(ts->fi, TS_EV_OML_READY, NULL);
}
}