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

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">power_control: constrain BS power reduction on BCCH carrier<br><br>BS Power Control is not allowed on the BCCH/CCCH carrier, unless<br>the BTS is operating in the BCCH carrier power reduction mode.<br><br>Allow constrained BS power reduction (up to 6 dB) on active logical<br>channels iff BCCH carrier power reduction mode is enabled.<br><br>Take into account that the maximum power difference between a timeslot<br>used for BCCH/CCCH and the timeslot preceding it shall not exceed 3 dB.<br><br>Change-Id: I2cc6a86731984f586ef35b43a8d3de631f7d8a2f<br>Related: SYS#4919, SYS#4918<br>---<br>M doc/manuals/chapters/power_control.adoc<br>M include/osmocom/bsc/gsm_data.h<br>M src/osmo-bsc/bts.c<br>M src/osmo-bsc/lchan_fsm.c<br>4 files changed, 65 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/doc/manuals/chapters/power_control.adoc b/doc/manuals/chapters/power_control.adoc</span><br><span>index bb87c85..d456484 100644</span><br><span>--- a/doc/manuals/chapters/power_control.adoc</span><br><span>+++ b/doc/manuals/chapters/power_control.adoc</span><br><span>@@ -357,6 +357,30 @@</span><br><span> power reduction mode" in the feature vector.  This can be checked by issuing</span><br><span> `show bts` command in OsmoBSC's VTY interface.</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+==== Interworking with static and dynamic power control</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+The key difference between BCCH carrier power reduction and the BS power control</span><br><span style="color: hsl(120, 100%, 40%);">+is that the former affects *inactive* timeslots (or sub-channels), so only dummy</span><br><span style="color: hsl(120, 100%, 40%);">+bursts are affected.  The later depends on the Downlink measurement reports sent</span><br><span style="color: hsl(120, 100%, 40%);">+by the MS, and thus applies to *active* channels only.  However, both features</span><br><span style="color: hsl(120, 100%, 40%);">+are interconnected: the maximum BCCH carrier power reduction value constrains</span><br><span style="color: hsl(120, 100%, 40%);">+the BS Power value that can be used for dynamic or static BS power control.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+BS power control on the BCCH carrier will not be enabled unless the BTS is in BCCH</span><br><span style="color: hsl(120, 100%, 40%);">+carrier power reduction mode of operation.  Once it is, the BS power reduction</span><br><span style="color: hsl(120, 100%, 40%);">+value in either of `dyn-bts` or `static` modes would be constrained by currently</span><br><span style="color: hsl(120, 100%, 40%);">+applied BCCH power reduction value, and thus would never exceed the maximum of 6 dB.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+For example, consider a BTS with BS power control configured to use _dynamic_ mode</span><br><span style="color: hsl(120, 100%, 40%);">+and the maximum power reduction of 16 dB.  Once this BTS is switched into the BCCH</span><br><span style="color: hsl(120, 100%, 40%);">+carrier power reduction mode with the maximum attenuation of 4 dB, the maximum</span><br><span style="color: hsl(120, 100%, 40%);">+power reduction value for the BS power loop on the C0 carrier would be 4 dB.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Moreover, according to 3GPP TS 45.008, between a timeslot used for BCCH/CCCH and</span><br><span style="color: hsl(120, 100%, 40%);">+the timeslot preceding it, the difference in output power actually transmitted by</span><br><span style="color: hsl(120, 100%, 40%);">+the BTS shall not exceed 3 dB.  This means that on some timeslots the power</span><br><span style="color: hsl(120, 100%, 40%);">+reduction value can be constrained even further.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> ==== Managing BCCH carrier power reduction</span><br><span> </span><br><span> The BCCH carrier power reduction can be controlled via the CTRL and VTY interfaces.</span><br><span>diff --git a/include/osmocom/bsc/gsm_data.h b/include/osmocom/bsc/gsm_data.h</span><br><span>index 569e288..31759cc 100644</span><br><span>--- a/include/osmocom/bsc/gsm_data.h</span><br><span>+++ b/include/osmocom/bsc/gsm_data.h</span><br><span>@@ -841,6 +841,9 @@</span><br><span>             } rbs2000;</span><br><span>   };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        /* Maximum BCCH carrier power reduction */</span><br><span style="color: hsl(120, 100%, 40%);">+    uint8_t c0_max_power_red_db;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       /* Maximum number of lchans that could become usable, for example by switching a dynamic timeslot's type or by</span><br><span>    * enabling VAMOS secondary lchans. This does include the maximum count of possible VAMOS secondary lchans. */</span><br><span>       uint8_t max_lchans_possible;</span><br><span>diff --git a/src/osmo-bsc/bts.c b/src/osmo-bsc/bts.c</span><br><span>index c1f09ff..8608767 100644</span><br><span>--- a/src/osmo-bsc/bts.c</span><br><span>+++ b/src/osmo-bsc/bts.c</span><br><span>@@ -749,6 +749,8 @@</span><br><span> </span><br><span> int gsm_bts_set_c0_power_red(struct gsm_bts *bts, const uint8_t red)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+      struct gsm_bts_trx *c0 = bts->c0;</span><br><span style="color: hsl(120, 100%, 40%);">+  unsigned int tn;</span><br><span>     int rc;</span><br><span> </span><br><span>  if (!osmo_bts_has_feature(&bts->features, BTS_FEAT_BCCH_POWER_RED))</span><br><span>@@ -760,6 +762,35 @@</span><br><span>    if (rc != 0)</span><br><span>                 return rc;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        /* Timeslot 0 is always transmitting BCCH/CCCH */</span><br><span style="color: hsl(120, 100%, 40%);">+     c0->ts[0].c0_max_power_red_db = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+       for (tn = 1; tn < ARRAY_SIZE(c0->ts); tn++) {</span><br><span style="color: hsl(120, 100%, 40%);">+           struct gsm_bts_trx_ts *ts = &c0->ts[tn];</span><br><span style="color: hsl(120, 100%, 40%);">+               struct gsm_bts_trx_ts *prev = ts - 1;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               switch (ts->pchan_is) {</span><br><span style="color: hsl(120, 100%, 40%);">+            /* Not allowed on CCCH/BCCH */</span><br><span style="color: hsl(120, 100%, 40%);">+                case GSM_PCHAN_CCCH:</span><br><span style="color: hsl(120, 100%, 40%);">+                  /* Preceeding timeslot shall not exceed 2 dB */</span><br><span style="color: hsl(120, 100%, 40%);">+                       if (prev->c0_max_power_red_db > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                              prev->c0_max_power_red_db = 2;</span><br><span style="color: hsl(120, 100%, 40%);">+                     /* fall-through */</span><br><span style="color: hsl(120, 100%, 40%);">+            /* Not recommended on SDCCH/8 */</span><br><span style="color: hsl(120, 100%, 40%);">+              case GSM_PCHAN_SDCCH8_SACCH8C:</span><br><span style="color: hsl(120, 100%, 40%);">+                case GSM_PCHAN_SDCCH8_SACCH8C_CBCH:</span><br><span style="color: hsl(120, 100%, 40%);">+                   ts->c0_max_power_red_db = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+                       break;</span><br><span style="color: hsl(120, 100%, 40%);">+                default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      ts->c0_max_power_red_db = red;</span><br><span style="color: hsl(120, 100%, 40%);">+                     break;</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%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Timeslot 7 is always preceding BCCH/CCCH */</span><br><span style="color: hsl(120, 100%, 40%);">+        if (c0->ts[7].c0_max_power_red_db > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+          c0->ts[7].c0_max_power_red_db = 2;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>      bts->c0_max_power_red_db = red;</span><br><span> </span><br><span>       return 0;</span><br><span>diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c</span><br><span>index 03ccec0..6350481 100644</span><br><span>--- a/src/osmo-bsc/lchan_fsm.c</span><br><span>+++ b/src/osmo-bsc/lchan_fsm.c</span><br><span>@@ -675,6 +675,13 @@</span><br><span>                        lchan->bs_power_db = bts->bs_power_ctrl.bs_power_val_db;</span><br><span>       }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* BS Power Control is generally not allowed on the BCCH/CCCH carrier.</span><br><span style="color: hsl(120, 100%, 40%);">+         * However, we allow it in the BCCH carrier power reduction mode of operation. */</span><br><span style="color: hsl(120, 100%, 40%);">+     if (lchan->ts->trx == bts->c0) {</span><br><span style="color: hsl(120, 100%, 40%);">+             lchan->bs_power_db = OSMO_MIN(lchan->ts->c0_max_power_red_db,</span><br><span style="color: hsl(120, 100%, 40%);">+                                              lchan->bs_power_db);</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  if (lchan_activate_set_ch_mode_rate_and_mr_config(lchan))</span><br><span>            return;</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24804">change 24804</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-bsc/+/24804"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I2cc6a86731984f586ef35b43a8d3de631f7d8a2f </div>
<div style="display:none"> Gerrit-Change-Number: 24804 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </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>