diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/bts.c | 5 | ||||
-rw-r--r-- | src/common/rsl.c | 10 | ||||
-rw-r--r-- | src/common/vty.c | 14 |
3 files changed, 28 insertions, 1 deletions
diff --git a/src/common/bts.c b/src/common/bts.c index c7d36df8..1853a6e3 100644 --- a/src/common/bts.c +++ b/src/common/bts.c @@ -604,3 +604,8 @@ int bts_supports_cipher(struct gsm_bts_role_bts *bts, int rsl_cipher) sup = (1 << (rsl_cipher - 2)) & bts->support.ciphers; return sup > 0; } + +int trx_ms_pwr_ctrl_is_osmo(struct gsm_bts_trx *trx) +{ + return trx->ms_power_control == 1; +} diff --git a/src/common/rsl.c b/src/common/rsl.c index 11c7c715..2d93d1bc 100644 --- a/src/common/rsl.c +++ b/src/common/rsl.c @@ -712,6 +712,11 @@ static int rsl_rx_chan_activ(struct msgb *msg) return rsl_tx_chan_act_nack(lchan, RSL_ERR_EQUIPMENT_FAIL); } + /* Initialize channel defaults */ + lchan->ms_power = ms_pwr_ctl_lvl(lchan->ts->trx->bts->band, 0); + lchan->ms_power_ctrl.current = lchan->ms_power; + lchan->ms_power_ctrl.fixed = 0; + rsl_tlv_parse(&tp, msgb_l3(msg), msgb_l3len(msg)); /* 9.3.3 Activation Type */ @@ -751,8 +756,11 @@ static int rsl_rx_chan_activ(struct msgb *msg) if (TLVP_PRESENT(&tp, RSL_IE_BS_POWER)) lchan->bs_power = *TLVP_VAL(&tp, RSL_IE_BS_POWER); /* 9.3.13 MS Power */ - if (TLVP_PRESENT(&tp, RSL_IE_MS_POWER)) + if (TLVP_PRESENT(&tp, RSL_IE_MS_POWER)) { lchan->ms_power = *TLVP_VAL(&tp, RSL_IE_MS_POWER); + lchan->ms_power_ctrl.current = lchan->ms_power; + lchan->ms_power_ctrl.fixed = 0; + } /* 9.3.24 Timing Advance */ if (TLVP_PRESENT(&tp, RSL_IE_TIMING_ADVANCE)) lchan->rqd_ta = *TLVP_VAL(&tp, RSL_IE_TIMING_ADVANCE); diff --git a/src/common/vty.c b/src/common/vty.c index 6b57b0b6..a7884853 100644 --- a/src/common/vty.c +++ b/src/common/vty.c @@ -198,6 +198,9 @@ static void config_write_bts_single(struct vty *vty, struct gsm_bts *bts) tpp->ramp.step_size_mdB, VTY_NEWLINE); vty_out(vty, " power-ramp step-interval %d%s", tpp->ramp.step_interval_sec, VTY_NEWLINE); + vty_out(vty, " ms-power-control %s%s", + trx->ms_power_control == 0 ? "dsp" : "osmo", + VTY_NEWLINE); bts_model_config_write_trx(vty, trx); } @@ -460,6 +463,16 @@ DEFUN(cfg_trx_pr_step_interval, cfg_trx_pr_step_interval_cmd, return CMD_SUCCESS; } +DEFUN(cfg_trx_ms_power_control, cfg_trx_ms_power_control_cmd, + "ms-power-control (dsp|osmo)", + "Mobile Station Power Level Control\n" + "Handled by DSP\n" "Handled by OsmoBTS\n") +{ + struct gsm_bts_trx *trx = vty->index; + + trx->ms_power_control = argv[0][0] == 'd' ? 0 : 1; + return CMD_SUCCESS; +} /* ====================================================================== @@ -644,6 +657,7 @@ int bts_vty_init(const struct log_info *cat) install_element(TRX_NODE, &cfg_trx_pr_max_initial_cmd); install_element(TRX_NODE, &cfg_trx_pr_step_size_cmd); install_element(TRX_NODE, &cfg_trx_pr_step_interval_cmd); + install_element(TRX_NODE, &cfg_trx_ms_power_control_cmd); install_element(ENABLE_NODE, &bts_t_t_l_jitter_buf_cmd); |