aboutsummaryrefslogtreecommitdiffstats
path: root/src/common
diff options
context:
space:
mode:
authorVadim Yanitskiy <vyanitskiy@sysmocom.de>2021-10-22 00:19:04 +0300
committerfixeria <vyanitskiy@sysmocom.de>2021-10-25 14:51:21 +0000
commitc5f75f0bcf7060254362a015e2ba64efed306ffc (patch)
tree3bdebcfd37b47ebc461de11b01fab6efb179c4d3 /src/common
parent430954630becc415877b306a32e3622f654df78f (diff)
[overpower] rsl: store full content of RSL_IE_OSMO_TEMP_OVP_ACCH_CAP
The new fields in 'struct abis_rsl_osmo_temp_ovp_acch_cap' allow: * selectively enabling SACCH and/or FACCH, * setting the RxQual (BER) threshold. Both features are implemented in the follow-up commits. Change-Id: I370c8f95fb64eceb60a9dc2eae1412f8a0df0f4e Depends: Ia28293a12de0af71f55e701fb65c46e905dae217 Related: SYS#5319
Diffstat (limited to 'src/common')
-rw-r--r--src/common/rsl.c16
-rw-r--r--src/common/scheduler.c2
2 files changed, 11 insertions, 7 deletions
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;