<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/25989">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">l1sap: process_l1sap_meas_data() accepts pointer to lchan<br><br>In 2/3 cases when calling process_l1sap_meas_data() we already have<br>a pointer to the logical channel, so let's pass it as the first<br>argument instead of a pointer to the transceiver.  This way we<br>avoid calling get_active_lchan_by_chan_nr() two times.<br><br>In l1sap_ph_data_ind(), call process_l1sap_meas_data() below the<br>conditional branch handling PDCH, so it won't be called for<br>GSM_LCHAN_PDTCH anymore.  GPRS specific measurements are handled<br>by the PCU and not of interest for the BSC.<br><br>Change-Id: I9de67a0b2d2b18923f2c2003b400387a0f1af411<br>---<br>M src/common/l1sap.c<br>1 file changed, 21 insertions(+), 27 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/89/25989/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/common/l1sap.c b/src/common/l1sap.c</span><br><span>index d02676b..47ba663 100644</span><br><span>--- a/src/common/l1sap.c</span><br><span>+++ b/src/common/l1sap.c</span><br><span>@@ -694,16 +694,14 @@</span><br><span> }</span><br><span> </span><br><span> /* measurement information received from bts model */</span><br><span style="color: hsl(0, 100%, 40%);">-static void process_l1sap_meas_data(struct gsm_bts_trx *trx,</span><br><span style="color: hsl(120, 100%, 40%);">+static void process_l1sap_meas_data(struct gsm_lchan *lchan,</span><br><span>                              struct osmo_phsap_prim *l1sap,</span><br><span>                               enum osmo_ph_prim ind_type)</span><br><span> {</span><br><span>         struct bts_ul_meas ulm;</span><br><span style="color: hsl(0, 100%, 40%);">- struct gsm_lchan *lchan;</span><br><span>     struct info_meas_ind_param *info_meas_ind;</span><br><span>   struct ph_data_param *ph_data_ind;</span><br><span>   struct ph_tch_param *ph_tch_ind;</span><br><span style="color: hsl(0, 100%, 40%);">-        uint8_t chan_nr;</span><br><span>     uint32_t fn;</span><br><span>         const char *ind_name;</span><br><span> </span><br><span>@@ -711,7 +709,6 @@</span><br><span>      case PRIM_MPH_INFO:</span><br><span>          /* (legacy way, see also OS#2977) */</span><br><span>                 info_meas_ind = &l1sap->u.info.u.meas_ind;</span><br><span style="color: hsl(0, 100%, 40%);">-               chan_nr = info_meas_ind->chan_nr;</span><br><span>                 fn = info_meas_ind->fn;</span><br><span>           ind_name = "MPH INFO";</span><br><span>             ulm = (struct bts_ul_meas) {</span><br><span>@@ -726,7 +723,6 @@</span><br><span>           ph_tch_ind = &l1sap->u.tch;</span><br><span>           if (ph_tch_ind->rssi == 0)</span><br><span>                        return;</span><br><span style="color: hsl(0, 100%, 40%);">-         chan_nr = ph_tch_ind->chan_nr;</span><br><span>            fn = ph_tch_ind->fn;</span><br><span>              ind_name = "TCH";</span><br><span>          ulm = (struct bts_ul_meas) {</span><br><span>@@ -741,7 +737,6 @@</span><br><span>           ph_data_ind = &l1sap->u.data;</span><br><span>                 if (ph_data_ind->rssi == 0)</span><br><span>                       return;</span><br><span style="color: hsl(0, 100%, 40%);">-         chan_nr = ph_data_ind->chan_nr;</span><br><span>           fn = ph_data_ind->fn;</span><br><span>             ind_name = "DATA";</span><br><span>                 ulm = (struct bts_ul_meas) {</span><br><span>@@ -756,24 +751,11 @@</span><br><span>                 OSMO_ASSERT(false);</span><br><span>  }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   lchan = get_active_lchan_by_chan_nr(trx, chan_nr);</span><br><span style="color: hsl(0, 100%, 40%);">-      if (!lchan) {</span><br><span style="color: hsl(0, 100%, 40%);">-           LOGPFN(DL1P, LOGL_ERROR, fn,</span><br><span style="color: hsl(0, 100%, 40%);">-                   "No lchan for %s MEAS IND (chan_nr=%s)\n",</span><br><span style="color: hsl(0, 100%, 40%);">-                    ind_name, rsl_chan_nr_str(chan_nr));</span><br><span style="color: hsl(0, 100%, 40%);">-             return;</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>    DEBUGPFN(DL1P, fn,</span><br><span>            "%s %s meas ind, ta_offs_256bits=%d, ber10k=%d, inv_rssi=%u, C/I=%d cB\n",</span><br><span>                 gsm_lchan_name(lchan), ind_name, ulm.ta_offs_256bits,</span><br><span>                ulm.ber10k, ulm.inv_rssi, ulm.c_i);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* in the GPRS case we are not interested in measurement</span><br><span style="color: hsl(0, 100%, 40%);">-         * processing.  The PCU will take care of it */</span><br><span style="color: hsl(0, 100%, 40%);">- if (lchan->type == GSM_LCHAN_PDTCH)</span><br><span style="color: hsl(0, 100%, 40%);">-          return;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>      /* we assume that symbol period is 1 bit: */</span><br><span>         set_ms_to_data(lchan, ulm.ta_offs_256bits / 256, true);</span><br><span> </span><br><span>@@ -786,6 +768,8 @@</span><br><span> static int l1sap_mph_info_ind(struct gsm_bts_trx *trx,</span><br><span>   struct osmo_phsap_prim *l1sap, struct mph_info_param *info)</span><br><span> {</span><br><span style="color: hsl(120, 100%, 40%);">+     const struct info_meas_ind_param *meas_ind;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct gsm_lchan *lchan;</span><br><span>     int rc = 0;</span><br><span> </span><br><span>      switch (info->type) {</span><br><span>@@ -805,7 +789,17 @@</span><br><span>              if (bts_internal_flag_get(trx->bts, BTS_INTERNAL_FLAG_MEAS_PAYLOAD_COMB))</span><br><span>                         OSMO_ASSERT(false);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-         process_l1sap_meas_data(trx, l1sap, PRIM_MPH_INFO);</span><br><span style="color: hsl(120, 100%, 40%);">+           meas_ind = &l1sap->u.info.u.meas_ind;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                lchan = get_active_lchan_by_chan_nr(trx, meas_ind->chan_nr);</span><br><span style="color: hsl(120, 100%, 40%);">+               if (!lchan) {</span><br><span style="color: hsl(120, 100%, 40%);">+                 LOGPFN(DL1P, LOGL_ERROR, meas_ind->fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                            "No lchan for chan_nr=%s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                        rsl_chan_nr_str(meas_ind->chan_nr));</span><br><span style="color: hsl(120, 100%, 40%);">+                        return 0;</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%);">+           process_l1sap_meas_data(lchan, l1sap, PRIM_MPH_INFO);</span><br><span>                break;</span><br><span>       default:</span><br><span>             LOGP(DL1P, LOGL_NOTICE, "unknown MPH_INFO ind type %d\n",</span><br><span>@@ -1488,12 +1482,6 @@</span><br><span>         DEBUGPGT(DL1P, &g_time, "Rx PH-DATA.ind chan_nr=%s link_id=0x%02x len=%d\n",</span><br><span>            rsl_chan_nr_str(chan_nr), link_id, len);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* The ph_data_param contained in the l1sap primitive may contain</span><br><span style="color: hsl(0, 100%, 40%);">-        * measurement data. If this data is present, forward it for</span><br><span style="color: hsl(0, 100%, 40%);">-     * processing */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (bts_internal_flag_get(trx->bts, BTS_INTERNAL_FLAG_MEAS_PAYLOAD_COMB))</span><br><span style="color: hsl(0, 100%, 40%);">-            process_l1sap_meas_data(trx, l1sap, PRIM_PH_DATA);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span>   if (ts_is_pdch(&trx->ts[tn])) {</span><br><span>               lchan = get_lchan_by_chan_nr(trx, chan_nr);</span><br><span>          if (!lchan)</span><br><span>@@ -1535,6 +1523,12 @@</span><br><span>                 return 0;</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* The ph_data_param contained in the l1sap primitive may contain</span><br><span style="color: hsl(120, 100%, 40%);">+      * measurement data. If this data is present, forward it for</span><br><span style="color: hsl(120, 100%, 40%);">+   * processing */</span><br><span style="color: hsl(120, 100%, 40%);">+      if (bts_internal_flag_get(trx->bts, BTS_INTERNAL_FLAG_MEAS_PAYLOAD_COMB))</span><br><span style="color: hsl(120, 100%, 40%);">+          process_l1sap_meas_data(lchan, l1sap, PRIM_PH_DATA);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       if (L1SAP_IS_LINK_SACCH(link_id))</span><br><span>            repeated_ul_sacch_active_decision(lchan, data_ind->ber10k);</span><br><span> </span><br><span>@@ -1618,7 +1612,7 @@</span><br><span>    * measurement data. If this data is present, forward it for</span><br><span>          * processing */</span><br><span>     if (bts_internal_flag_get(trx->bts, BTS_INTERNAL_FLAG_MEAS_PAYLOAD_COMB))</span><br><span style="color: hsl(0, 100%, 40%);">-            process_l1sap_meas_data(trx, l1sap, PRIM_TCH);</span><br><span style="color: hsl(120, 100%, 40%);">+                process_l1sap_meas_data(lchan, l1sap, PRIM_TCH);</span><br><span> </span><br><span>         msgb_pull_to_l2(msg);</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/25989">change 25989</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/+/25989"/><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: I9de67a0b2d2b18923f2c2003b400387a0f1af411 </div>
<div style="display:none"> Gerrit-Change-Number: 25989 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>