aboutsummaryrefslogtreecommitdiffstats
path: root/src/common/nm_bb_transc_fsm.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/nm_bb_transc_fsm.c')
-rw-r--r--src/common/nm_bb_transc_fsm.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/common/nm_bb_transc_fsm.c b/src/common/nm_bb_transc_fsm.c
index 1e92457a..6c07445a 100644
--- a/src/common/nm_bb_transc_fsm.c
+++ b/src/common/nm_bb_transc_fsm.c
@@ -34,6 +34,7 @@
#include <osmo-bts/bts.h>
#include <osmo-bts/rsl.h>
#include <osmo-bts/nm_bb_transc_fsm.h>
+#include <osmo-bts/nm_channel_fsm.h>
#include <osmo-bts/phy_link.h>
#define X(s) (1 << (s))
@@ -55,11 +56,16 @@ static void st_op_disabled_notinstalled_on_enter(struct osmo_fsm_inst *fi, uint3
static void st_op_disabled_notinstalled(struct osmo_fsm_inst *fi, uint32_t event, void *data)
{
struct gsm_bts_trx *trx = (struct gsm_bts_trx *)fi->priv;
+ int i;
switch (event) {
case NM_BBTRANSC_EV_SW_ACT:
oml_mo_tx_sw_act_rep(&trx->bb_transc.mo);
nm_bb_transc_fsm_state_chg(fi, NM_BBTRANSC_ST_OP_DISABLED_OFFLINE);
+ for (i = 0; i < TRX_NR_TS; i++) {
+ struct gsm_bts_trx_ts *ts = &trx->ts[i];
+ osmo_fsm_inst_dispatch(ts->nm_chan.fi, NM_CHAN_EV_BBTRANSC_INSTALLED, NULL);
+ }
return;
case NM_BBTRANSC_EV_RSL_UP:
return;
@@ -79,8 +85,17 @@ static void st_op_disabled_notinstalled(struct osmo_fsm_inst *fi, uint32_t event
static void st_op_disabled_offline_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state)
{
struct gsm_bts_trx *trx = (struct gsm_bts_trx *)fi->priv;
+ int i;
+
trx->bb_transc.opstart_success = false;
oml_mo_state_chg(&trx->bb_transc.mo, NM_OPSTATE_DISABLED, NM_AVSTATE_OFF_LINE);
+
+ if (prev_state == NM_BBTRANSC_ST_OP_ENABLED) {
+ for (i = 0; i < TRX_NR_TS; i++) {
+ struct gsm_bts_trx_ts *ts = &trx->ts[i];
+ osmo_fsm_inst_dispatch(ts->nm_chan.fi, NM_CHAN_EV_BBTRANSC_DISABLED, NULL);
+ }
+ }
}
static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, void *data)
@@ -137,7 +152,14 @@ static void st_op_disabled_offline(struct osmo_fsm_inst *fi, uint32_t event, voi
static void st_op_enabled_on_enter(struct osmo_fsm_inst *fi, uint32_t prev_state)
{
struct gsm_bts_trx *trx = (struct gsm_bts_trx *)fi->priv;
+ uint8_t tn;
+
oml_mo_state_chg(&trx->bb_transc.mo, NM_OPSTATE_ENABLED, NM_AVSTATE_OK);
+ /* Mark Dependency TS as Offline (ready to be Opstarted) */
+ for (tn = 0; tn < TRX_NR_TS; tn++) {
+ struct gsm_bts_trx_ts *ts = &trx->ts[tn];
+ osmo_fsm_inst_dispatch(ts->nm_chan.fi, NM_CHAN_EV_BBTRANSC_ENABLED, NULL);
+ }
}
static void st_op_enabled(struct osmo_fsm_inst *fi, uint32_t event, void *data)