diff options
-rw-r--r-- | include/osmo-bts/lchan.h | 4 | ||||
-rw-r--r-- | src/common/rsl.c | 16 | ||||
-rw-r--r-- | src/common/scheduler.c | 2 |
3 files changed, 13 insertions, 9 deletions
diff --git a/include/osmo-bts/lchan.h b/include/osmo-bts/lchan.h index 57999b1b..754dc7cb 100644 --- a/include/osmo-bts/lchan.h +++ b/include/osmo-bts/lchan.h @@ -293,8 +293,8 @@ struct gsm_lchan { struct gsm_power_ctrl_params ms_dpc_params; struct gsm_power_ctrl_params bs_dpc_params; - /* Temporary Overpower for SACCH/FACCH */ - uint8_t bs_acch_overpower_db; + /* Temporary ACCH overpower capabilities */ + struct abis_rsl_osmo_temp_ovp_acch_cap top_acch_cap; struct msgb *pending_rel_ind_msg; diff --git a/src/common/rsl.c b/src/common/rsl.c index c100687c..a952d253 100644 --- a/src/common/rsl.c +++ b/src/common/rsl.c @@ -1592,18 +1592,22 @@ static int parse_repeated_acch_capability(struct gsm_lchan *lchan, struct tlv_pa static int parse_temporary_overpower_acch_capability(struct gsm_lchan *lchan, const struct tlv_parsed *tp) { - struct abis_rsl_osmo_temp_ovp_acch_cap *top; + memset(&lchan->top_acch_cap, 0, sizeof(lchan->top_acch_cap)); - lchan->bs_acch_overpower_db = 0; - - if (!TLVP_PRES_LEN(tp, RSL_IE_OSMO_TEMP_OVP_ACCH_CAP, sizeof(*top))) + if (!TLVP_PRES_LEN(tp, RSL_IE_OSMO_TEMP_OVP_ACCH_CAP, sizeof(lchan->top_acch_cap))) return 0; if (!osmo_bts_has_feature(lchan->ts->trx->bts->features, BTS_FEAT_ACCH_TEMP_OVP)) return -RSL_ERR_OPT_IE_ERROR; - top = (struct abis_rsl_osmo_temp_ovp_acch_cap *)TLVP_VAL(tp, RSL_IE_OSMO_TEMP_OVP_ACCH_CAP); - lchan->bs_acch_overpower_db = top->overpower_db; + memcpy(&lchan->top_acch_cap, + TLVP_VAL(tp, RSL_IE_OSMO_TEMP_OVP_ACCH_CAP), + sizeof(lchan->top_acch_cap)); + + /* Simplify checking whether the overpower is enabled at all: allow + * testing just one parameter (overpower_db > 0) instead of all three. */ + if (!lchan->top_acch_cap.sacch_enable && !lchan->top_acch_cap.facch_enable) + lchan->top_acch_cap.overpower_db = 0; return 0; } diff --git a/src/common/scheduler.c b/src/common/scheduler.c index 2a729e47..463a5b86 100644 --- a/src/common/scheduler.c +++ b/src/common/scheduler.c @@ -1299,7 +1299,7 @@ static void trx_sched_apply_att(const struct gsm_lchan *lchan, struct trx_dl_burst_req *br) { const struct trx_chan_desc *desc = &trx_chan_desc[br->chan]; - const uint8_t overpower_db = lchan->bs_acch_overpower_db; + const uint8_t overpower_db = lchan->top_acch_cap.overpower_db; /* Current BS power reduction value in dB */ br->att = lchan->bs_power_ctrl.current; |