aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2021-01-14 17:23:56 +0100
committerVadim Yanitskiy <vyanitskiy@sysmocom.de>2021-01-14 17:37:16 +0100
commitf5c8034bb71220158ce4b37d1f7d81b2c15ff002 (patch)
tree674a5a09bc90f497b11c592c268811ec73f3f065
parent120910c882e6f3ccd3c21f7b5c41be8a734ed404 (diff)
power_control: fix: properly initialize per-lchan BS power
My assumption that lchan_reset() is called on CHANnel ACTIVation was wrong - it's actually called on CHANnel RELease. Therefore (re)setting per-lchan BS power value must be done in the other function that is responsible for channel activation. Change-Id: I056c448ce017458dc4a004374ddca86d44dc35b4 Related: SYS#4918
-rw-r--r--src/osmo-bsc/lchan_fsm.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c
index 5a42527d9..50540964b 100644
--- a/src/osmo-bsc/lchan_fsm.c
+++ b/src/osmo-bsc/lchan_fsm.c
@@ -379,9 +379,6 @@ void lchan_fsm_alloc(struct gsm_lchan *lchan)
*/
static void lchan_reset(struct gsm_lchan *lchan)
{
- const struct gsm_bts_trx *trx = lchan->ts->trx;
- const struct gsm_bts *bts = trx->bts;
-
LOG_LCHAN(lchan, LOGL_DEBUG, "Clearing lchan state\n");
if (lchan->conn)
@@ -411,12 +408,6 @@ static void lchan_reset(struct gsm_lchan *lchan)
.release.rr_cause = GSM48_RR_CAUSE_NORMAL,
};
-
- /* Default BS Power reduction value (in 2 dB steps) */
- if (bts->bs_power_ctrl.mode == GSM_PWR_CTRL_MODE_DYN_BTS)
- lchan->bs_power = bts->bs_power_ctrl.bs_power_max_db / 2;
- else
- lchan->bs_power = bts->bs_power_ctrl.bs_power_val_db / 2;
}
static void lchan_fsm_unused_onenter(struct osmo_fsm_inst *fi, uint32_t prev_state)
@@ -595,6 +586,12 @@ static void lchan_fsm_wait_ts_ready_onenter(struct osmo_fsm_inst *fi, uint32_t p
/* Upon last entering the UNUSED state, from lchan_reset():
* - bs_power is still zero, 0dB reduction, output power = Pn.
* - TA is still zero, to be determined by RACH. */
+
+ /* Default BS Power reduction value (in 2 dB steps) */
+ if (bts->bs_power_ctrl.mode == GSM_PWR_CTRL_MODE_DYN_BTS)
+ lchan->bs_power = bts->bs_power_ctrl.bs_power_max_db / 2;
+ else
+ lchan->bs_power = bts->bs_power_ctrl.bs_power_val_db / 2;
}
if (info->chan_mode == GSM48_CMODE_SPEECH_AMR) {