<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/16071">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  fixeria: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Introduce BTS feature BTS_FEAT_MS_PWR_CTRL_DSP<br><br>It indicates whether BTS model supports managing an MS Power Control<br>Loop over HW/DSP instead of using the software based osmocom algorithm<br>present in osmo-bts.<br>osmo-bts-trx own loop implementation is considered to be a "DSP/HW" one<br>since it acts on lower layers and interferes with osmocom algorithm<br>since it controls the same end variable "lchan->ms_power_ctrl.current",<br>this way we make sure both aren't enabled at the same time.<br>Old behavior in kept: if common upper-layer algo is not enabled<br>explicitly in VTY (ms-power-control osmo) and bts-trx specific lower<br>layer algo is neither enabled (osmotrx ms-power-loop <xyz>), then no<br>power control is done at all.<br><br>Related: OS#1851<br>Change-Id: I49706926b1e962b18791174627bc3cc0cd0cd9d5<br>---<br>M include/osmo-bts/gsm_data_shared.h<br>M src/common/bts.c<br>M src/common/gsm_data_shared.c<br>M src/common/vty.c<br>M src/osmo-bts-litecell15/main.c<br>M src/osmo-bts-oc2g/main.c<br>M src/osmo-bts-sysmo/main.c<br>M src/osmo-bts-trx/loops.c<br>M src/osmo-bts-trx/main.c<br>9 files changed, 23 insertions(+), 4 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/gsm_data_shared.h b/include/osmo-bts/gsm_data_shared.h</span><br><span>index bd10056..c19bb21 100644</span><br><span>--- a/include/osmo-bts/gsm_data_shared.h</span><br><span>+++ b/include/osmo-bts/gsm_data_shared.h</span><br><span>@@ -479,6 +479,7 @@</span><br><span>  BTS_FEAT_SPEECH_F_AMR,</span><br><span>       BTS_FEAT_SPEECH_H_AMR,</span><br><span>       BTS_FEAT_ETWS_PN,</span><br><span style="color: hsl(120, 100%, 40%);">+     BTS_FEAT_MS_PWR_CTRL_DSP,</span><br><span>    _NUM_BTS_FEAT</span><br><span> };</span><br><span> </span><br><span>diff --git a/src/common/bts.c b/src/common/bts.c</span><br><span>index 3809eb3..da41176 100644</span><br><span>--- a/src/common/bts.c</span><br><span>+++ b/src/common/bts.c</span><br><span>@@ -256,6 +256,10 @@</span><br><span>  tpp->ramp.step_size_mdB = to_mdB(2);</span><br><span>      tpp->ramp.step_interval_sec = 1;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+       /* IF BTS model doesn't DSP/HW support MS Power Control Loop, enable osmo algo by default: */</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!gsm_bts_has_feature(trx->bts, BTS_FEAT_MS_PWR_CTRL_DSP))</span><br><span style="color: hsl(120, 100%, 40%);">+              trx->ms_pwr_ctl_soft = true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    rc = bts_model_trx_init(trx);</span><br><span>        if (rc < 0) {</span><br><span>             llist_del(&trx->list);</span><br><span>diff --git a/src/common/gsm_data_shared.c b/src/common/gsm_data_shared.c</span><br><span>index 80acabc..b31d458 100644</span><br><span>--- a/src/common/gsm_data_shared.c</span><br><span>+++ b/src/common/gsm_data_shared.c</span><br><span>@@ -108,6 +108,7 @@</span><br><span>     { BTS_FEAT_SPEECH_F_AMR,        "Fullrate speech AMR" },</span><br><span>   { BTS_FEAT_SPEECH_H_AMR,        "Halfrate speech AMR" },</span><br><span>   { BTS_FEAT_ETWS_PN,             "ETWS Primary Notification on PCH" },</span><br><span style="color: hsl(120, 100%, 40%);">+       { BTS_FEAT_MS_PWR_CTRL_DSP,     "DSP/HW based MS Power Control Loop" },</span><br><span>    { 0, NULL }</span><br><span> };</span><br><span> </span><br><span>diff --git a/src/common/vty.c b/src/common/vty.c</span><br><span>index 514d120..2558ba8 100644</span><br><span>--- a/src/common/vty.c</span><br><span>+++ b/src/common/vty.c</span><br><span>@@ -789,8 +789,14 @@</span><br><span>    "Handled by DSP\n" "Handled by OsmoBTS\n")</span><br><span> {</span><br><span>  struct gsm_bts_trx *trx = vty->index;</span><br><span style="color: hsl(120, 100%, 40%);">+      bool soft = !strcmp(argv[0], "osmo");</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     trx->ms_pwr_ctl_soft = !strcmp(argv[0], "osmo");</span><br><span style="color: hsl(120, 100%, 40%);">+ if (!soft && !gsm_bts_has_feature(trx->bts, BTS_FEAT_MS_PWR_CTRL_DSP)) {</span><br><span style="color: hsl(120, 100%, 40%);">+           vty_out(vty, "This BTS model has no DSP/HW MS Power Control support%s", VTY_NEWLINE);</span><br><span style="color: hsl(120, 100%, 40%);">+               return CMD_WARNING;</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   trx->ms_pwr_ctl_soft = soft;</span><br><span>      return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span>diff --git a/src/osmo-bts-litecell15/main.c b/src/osmo-bts-litecell15/main.c</span><br><span>index b0d725b..6f3fc00 100644</span><br><span>--- a/src/osmo-bts-litecell15/main.c</span><br><span>+++ b/src/osmo-bts-litecell15/main.c</span><br><span>@@ -112,6 +112,7 @@</span><br><span>      gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_F_EFR);</span><br><span>     gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_F_AMR);</span><br><span>     gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_H_AMR);</span><br><span style="color: hsl(120, 100%, 40%);">+      gsm_bts_set_feature(bts, BTS_FEAT_MS_PWR_CTRL_DSP);</span><br><span> </span><br><span>      bts_model_vty_init(bts);</span><br><span> </span><br><span>diff --git a/src/osmo-bts-oc2g/main.c b/src/osmo-bts-oc2g/main.c</span><br><span>index cbf5c42..f9bb0cb 100644</span><br><span>--- a/src/osmo-bts-oc2g/main.c</span><br><span>+++ b/src/osmo-bts-oc2g/main.c</span><br><span>@@ -120,6 +120,7 @@</span><br><span>      gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_F_EFR);</span><br><span>     gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_F_AMR);</span><br><span>     gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_H_AMR);</span><br><span style="color: hsl(120, 100%, 40%);">+      gsm_bts_set_feature(bts, BTS_FEAT_MS_PWR_CTRL_DSP);</span><br><span> </span><br><span>      bts_model_vty_init(bts);</span><br><span> </span><br><span>diff --git a/src/osmo-bts-sysmo/main.c b/src/osmo-bts-sysmo/main.c</span><br><span>index ad7118a..bb2c436 100644</span><br><span>--- a/src/osmo-bts-sysmo/main.c</span><br><span>+++ b/src/osmo-bts-sysmo/main.c</span><br><span>@@ -86,6 +86,7 @@</span><br><span>    gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_F_EFR);</span><br><span>     gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_F_AMR);</span><br><span>     gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_H_AMR);</span><br><span style="color: hsl(120, 100%, 40%);">+      gsm_bts_set_feature(bts, BTS_FEAT_MS_PWR_CTRL_DSP);</span><br><span> </span><br><span>      bts_model_vty_init(bts);</span><br><span> </span><br><span>diff --git a/src/osmo-bts-trx/loops.c b/src/osmo-bts-trx/loops.c</span><br><span>index 1f54fee..e73d842 100644</span><br><span>--- a/src/osmo-bts-trx/loops.c</span><br><span>+++ b/src/osmo-bts-trx/loops.c</span><br><span>@@ -237,8 +237,9 @@</span><br><span>                                      .lchan[l1sap_chan2ss(chan_nr)];</span><br><span>      struct phy_instance *pinst = trx_phy_instance(l1t->trx);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- /* if MS power control loop is enabled, handle it */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (pinst->phy_link->u.osmotrx.trx_ms_power_loop)</span><br><span style="color: hsl(120, 100%, 40%);">+       /* if common upper layer MS power control loop is disabled</span><br><span style="color: hsl(120, 100%, 40%);">+       and lower layer MS power control loop is enabled, handle it */</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!l1t->trx->ms_pwr_ctl_soft && pinst->phy_link->u.osmotrx.trx_ms_power_loop)</span><br><span>          ms_power_val(lchan, chan_state, rssi);</span><br><span> </span><br><span>   /* if TA loop is enabled, handle it */</span><br><span>@@ -257,7 +258,9 @@</span><br><span>         if (lchan->ms_power_ctrl.fixed)</span><br><span>           return;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     if (pinst->phy_link->u.osmotrx.trx_ms_power_loop)</span><br><span style="color: hsl(120, 100%, 40%);">+       /* if common upper layer MS power control loop is disabled</span><br><span style="color: hsl(120, 100%, 40%);">+       and lower layer MS power control loop is enabled, handle it */</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!l1t->trx->ms_pwr_ctl_soft && pinst->phy_link->u.osmotrx.trx_ms_power_loop)</span><br><span>          ms_power_clock(lchan, chan_state);</span><br><span> </span><br><span>       /* count the number of SACCH clocks */</span><br><span>diff --git a/src/osmo-bts-trx/main.c b/src/osmo-bts-trx/main.c</span><br><span>index cf40ea3..9a29b3b 100644</span><br><span>--- a/src/osmo-bts-trx/main.c</span><br><span>+++ b/src/osmo-bts-trx/main.c</span><br><span>@@ -116,6 +116,7 @@</span><br><span>        gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_F_AMR);</span><br><span>     gsm_bts_set_feature(bts, BTS_FEAT_SPEECH_H_AMR);</span><br><span>     gsm_bts_set_feature(bts, BTS_FEAT_CBCH);</span><br><span style="color: hsl(120, 100%, 40%);">+      gsm_bts_set_feature(bts, BTS_FEAT_MS_PWR_CTRL_DSP);</span><br><span> </span><br><span>      bts_model_vty_init(bts);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/16071">change 16071</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bts/+/16071"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I49706926b1e962b18791174627bc3cc0cd0cd9d5 </div>
<div style="display:none"> Gerrit-Change-Number: 16071 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>