power_control: constrain BS power reduction on BCCH carrier

BS Power Control is not allowed on the BCCH/CCCH carrier, unless
the BTS is operating in the BCCH carrier power reduction mode.

Allow constrained BS power reduction (up to 6 dB) on active logical
channels iff BCCH carrier power reduction mode is enabled.

Change-Id: I3299b6cdd230d3767321c3d6c64d468b7f5e1d02
Related: SYS#4919, SYS#4918
This commit is contained in:
Vadim Yanitskiy 2021-07-01 02:00:14 +02:00
parent 0e8d68437a
commit 30aea88c2c
1 changed files with 16 additions and 2 deletions

View File

@ -1586,8 +1586,16 @@ static int rsl_rx_chan_activ(struct msgb *msg)
return rsl_tx_chan_act_nack(lchan, RSL_ERR_SERV_OPT_UNIMPL);
}
lchan->bs_power_ctrl.max = BS_POWER2DB(*TLVP_VAL(&tp, RSL_IE_BS_POWER));
lchan->bs_power_ctrl.current = lchan->bs_power_ctrl.max;
uint8_t red = BS_POWER2DB(*TLVP_VAL(&tp, RSL_IE_BS_POWER));
/* BS power reduction is generally not allowed on BCCH/CCCH carrier.
* However, we allow it in the BCCH carrier power reduction operation.
* Constrain BS power value by the maximum reduction for this timeslot. */
if (ts->trx->bts->c0 == ts->trx)
red = OSMO_MIN(red, ts->c0_power_red_db);
lchan->bs_power_ctrl.max = red;
lchan->bs_power_ctrl.current = red;
LOGPLCHAN(lchan, DRSL, LOGL_DEBUG, "BS Power attenuation %u dB\n",
lchan->bs_power_ctrl.current);
@ -2210,6 +2218,12 @@ static int rsl_rx_bs_pwr_ctrl(struct msgb *msg)
return 0;
}
/* BS power reduction is generally not allowed on BCCH/CCCH carrier.
* However, we allow it in the BCCH carrier power reduction operation.
* Constrain BS power value by the maximum reduction for this timeslot. */
if (trx->bts->c0 == trx)
new = OSMO_MIN(new, lchan->ts->c0_power_red_db);
/* 9.3.32 (TLV) BS Power Parameters IE (vendor specific) */
if ((ie = TLVP_GET(&tp, RSL_IE_BS_POWER_PARAM)) != NULL) {
struct gsm_power_ctrl_params *params = &lchan->bs_dpc_params;