<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/24327">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: 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;">[VAMOS] osmo-bts-trx: rework handling of Training Sequence<br><br>The TSC (Training Sequence Code) value in 'struct gsm_bts_trx_ts'<br>is always initialized in oml_rx_set_chan_attr() during the OML<br>bootstrapping, so there is no need for gsm_ts_tsc() - remove it.<br><br>Store the initial TSC value in 'struct gsm_bts_trx_ts', so we can<br>apply a different TSC value during the RSL CHANnel ACTIVation.<br><br>Store the Training Sequence Code/Set in 'struct trx_dl_burst_req'.<br>These values are indicated to the transceiver (TRXDv2 PDUs, 'MTS'<br>field) and used by the new TRX_{GMSK,8PSK}_NB_TSC macros.<br><br>Change-Id: I3744bc308b99ef941e6e9d139444e414abebc14b<br>Related: SYS#4895, OS#4941<br>---<br>M include/osmo-bts/gsm_data.h<br>M include/osmo-bts/scheduler.h<br>M src/common/bts_trx.c<br>M src/common/gsm_data.c<br>M src/common/oml.c<br>M src/common/pcu_sock.c<br>M src/common/scheduler.c<br>M src/common/vty.c<br>M src/osmo-bts-trx/sched_lchan_pdtch.c<br>M src/osmo-bts-trx/sched_lchan_tchf.c<br>M src/osmo-bts-trx/sched_lchan_tchh.c<br>M src/osmo-bts-trx/sched_lchan_xcch.c<br>12 files changed, 23 insertions(+), 23 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/gsm_data.h b/include/osmo-bts/gsm_data.h</span><br><span>index 3dfd5b7..cd63f6f 100644</span><br><span>--- a/include/osmo-bts/gsm_data.h</span><br><span>+++ b/include/osmo-bts/gsm_data.h</span><br><span>@@ -441,7 +441,12 @@</span><br><span> </span><br><span>        unsigned int flags;</span><br><span>  struct gsm_abis_mo mo;</span><br><span style="color: hsl(0, 100%, 40%);">-  int tsc;                /* -1 == use BTS TSC */</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Training Sequence Code (range 0..7) */</span><br><span style="color: hsl(120, 100%, 40%);">+     uint8_t tsc_oml; /* configured via OML */</span><br><span style="color: hsl(120, 100%, 40%);">+     uint8_t tsc; /* currently in use */</span><br><span style="color: hsl(120, 100%, 40%);">+   /* Training Sequence Set (range 0..3) */</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t tsc_set;</span><br><span> </span><br><span>         /* Frequency hopping parameters (configured via OML) */</span><br><span>      struct {</span><br><span>@@ -522,8 +527,6 @@</span><br><span> #define BSIC2BCC(bsic) ((bsic) & 0x07)</span><br><span> #define BTS_TSC(bts) BSIC2BCC((bts)->bsic)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-uint8_t gsm_ts_tsc(const struct gsm_bts_trx_ts *ts);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,</span><br><span>                                   int *rc);</span><br><span> </span><br><span>diff --git a/include/osmo-bts/scheduler.h b/include/osmo-bts/scheduler.h</span><br><span>index beb2716..72858f5 100644</span><br><span>--- a/include/osmo-bts/scheduler.h</span><br><span>+++ b/include/osmo-bts/scheduler.h</span><br><span>@@ -12,6 +12,12 @@</span><br><span> #define TRX_CHAN_IS_ACTIVE(state, chan) \</span><br><span>      (trx_chan_desc[chan].flags & TRX_CHAN_FLAG_AUTO_ACTIVE || (state)->active)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define TRX_GMSK_NB_TSC(br) \</span><br><span style="color: hsl(120, 100%, 40%);">+  _sched_train_seq_gmsk_nb[(br)->tsc]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#define TRX_8PSK_NB_TSC(br) \</span><br><span style="color: hsl(120, 100%, 40%);">+       _sched_train_seq_8psk_nb[(br)->tsc]</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* These types define the different channels on a multiframe.</span><br><span>  * Each channel has queues and can be activated individually.</span><br><span>  */</span><br><span>diff --git a/src/common/bts_trx.c b/src/common/bts_trx.c</span><br><span>index 635c4d3..ee03b9a 100644</span><br><span>--- a/src/common/bts_trx.c</span><br><span>+++ b/src/common/bts_trx.c</span><br><span>@@ -86,7 +86,6 @@</span><br><span>           ts->pchan = GSM_PCHAN_NONE;</span><br><span>               ts->dyn.pchan_is = GSM_PCHAN_NONE;</span><br><span>                ts->dyn.pchan_want = GSM_PCHAN_NONE;</span><br><span style="color: hsl(0, 100%, 40%);">-         ts->tsc = -1;</span><br><span> </span><br><span>                 ts->mo.fi = osmo_fsm_inst_alloc(&nm_chan_fsm, trx, ts,</span><br><span>                                                     LOGL_INFO, NULL);</span><br><span>diff --git a/src/common/gsm_data.c b/src/common/gsm_data.c</span><br><span>index f014acf..d0fe479 100644</span><br><span>--- a/src/common/gsm_data.c</span><br><span>+++ b/src/common/gsm_data.c</span><br><span>@@ -272,14 +272,6 @@</span><br><span>       return gsm_pchan2chan_nr(as_pchan, lchan->ts->nr, lchan->nr);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-uint8_t gsm_ts_tsc(const struct gsm_bts_trx_ts *ts)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     if (ts->tsc != -1)</span><br><span style="color: hsl(0, 100%, 40%);">-           return ts->tsc;</span><br><span style="color: hsl(0, 100%, 40%);">-      else</span><br><span style="color: hsl(0, 100%, 40%);">-            return BTS_TSC(ts->trx->bts);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* determine logical channel based on TRX and channel number IE */</span><br><span> struct gsm_lchan *rsl_lchan_lookup(struct gsm_bts_trx *trx, uint8_t chan_nr,</span><br><span>                              int *rc)</span><br><span>diff --git a/src/common/oml.c b/src/common/oml.c</span><br><span>index 0bbe0a6..0a502c1 100644</span><br><span>--- a/src/common/oml.c</span><br><span>+++ b/src/common/oml.c</span><br><span>@@ -961,10 +961,10 @@</span><br><span> </span><br><span>         /* 9.4.60 TSC */</span><br><span>     if (TLVP_PRES_LEN(&tp, NM_ATT_TSC, 1)) {</span><br><span style="color: hsl(0, 100%, 40%);">-            ts->tsc = *TLVP_VAL(&tp, NM_ATT_TSC);</span><br><span style="color: hsl(120, 100%, 40%);">+          ts->tsc_oml = ts->tsc = *TLVP_VAL(&tp, NM_ATT_TSC);</span><br><span>        } else {</span><br><span>             /* If there is no TSC specified, use the BCC */</span><br><span style="color: hsl(0, 100%, 40%);">-         ts->tsc = BTS_TSC(bts);</span><br><span style="color: hsl(120, 100%, 40%);">+            ts->tsc_oml = ts->tsc = BTS_TSC(bts);</span><br><span>  }</span><br><span>    LOGPFOH(DOML, LOGL_INFO, foh, "SET CHAN ATTR (TSC=%u pchan=%s",</span><br><span>            ts->tsc, gsm_pchan_name(ts->pchan));</span><br><span>diff --git a/src/common/pcu_sock.c b/src/common/pcu_sock.c</span><br><span>index 91ad90f..83aa0a1 100644</span><br><span>--- a/src/common/pcu_sock.c</span><br><span>+++ b/src/common/pcu_sock.c</span><br><span>@@ -217,7 +217,7 @@</span><br><span>                    continue;</span><br><span> </span><br><span>                trx_info->pdch_mask |= (1 << tn);</span><br><span style="color: hsl(0, 100%, 40%);">-              trx_info->ts[tn].tsc = gsm_ts_tsc(ts);</span><br><span style="color: hsl(120, 100%, 40%);">+             trx_info->ts[tn].tsc = ts->tsc;</span><br><span> </span><br><span>            if (ts->hopping.enabled)</span><br><span>                  info_ind_fill_fhp(&trx_info->ts[tn], ts);</span><br><span>diff --git a/src/common/scheduler.c b/src/common/scheduler.c</span><br><span>index a3647a9..0b9c5d5 100644</span><br><span>--- a/src/common/scheduler.c</span><br><span>+++ b/src/common/scheduler.c</span><br><span>@@ -1218,8 +1218,8 @@</span><br><span>                return;</span><br><span> </span><br><span>  /* Training Sequence Code and Set */</span><br><span style="color: hsl(0, 100%, 40%);">-    br->tsc = gsm_ts_tsc(l1ts->ts);</span><br><span style="color: hsl(0, 100%, 40%);">-   br->tsc_set = 0;</span><br><span style="color: hsl(120, 100%, 40%);">+   br->tsc_set = l1ts->ts->tsc_set;</span><br><span style="color: hsl(120, 100%, 40%);">+     br->tsc = l1ts->ts->tsc;</span><br><span> </span><br><span>        /* get burst from function */</span><br><span>        if (func(l1ts, br) != 0)</span><br><span>diff --git a/src/common/vty.c b/src/common/vty.c</span><br><span>index d4e2902..ccc63e6 100644</span><br><span>--- a/src/common/vty.c</span><br><span>+++ b/src/common/vty.c</span><br><span>@@ -1409,7 +1409,7 @@</span><br><span> {</span><br><span>   vty_out(vty, "BTS %u, TRX %u, Timeslot %u, phys cfg %s, TSC %u",</span><br><span>           ts->trx->bts->nr, ts->trx->nr, ts->nr,</span><br><span style="color: hsl(0, 100%, 40%);">-                gsm_pchan_name(ts->pchan), gsm_ts_tsc(ts));</span><br><span style="color: hsl(120, 100%, 40%);">+                gsm_pchan_name(ts->pchan), ts->tsc);</span><br><span>   if (ts->pchan == GSM_PCHAN_TCH_F_PDCH)</span><br><span>            vty_out(vty, " (%s mode)",</span><br><span>                         ts->flags & TS_F_PDCH_ACTIVE ? "PDCH" : "TCH/F");</span><br><span>diff --git a/src/osmo-bts-trx/sched_lchan_pdtch.c b/src/osmo-bts-trx/sched_lchan_pdtch.c</span><br><span>index dede371..335ba6f 100644</span><br><span>--- a/src/osmo-bts-trx/sched_lchan_pdtch.c</span><br><span>+++ b/src/osmo-bts-trx/sched_lchan_pdtch.c</span><br><span>@@ -212,7 +212,7 @@</span><br><span>              burst = *bursts_p + br->bid * 348;</span><br><span>                memset(br->burst, 1, 9);</span><br><span>          memcpy(br->burst + 9, burst, 174);</span><br><span style="color: hsl(0, 100%, 40%);">-           memcpy(br->burst + 183, _sched_train_seq_8psk_nb[gsm_ts_tsc(l1ts->ts)], 78);</span><br><span style="color: hsl(120, 100%, 40%);">+            memcpy(br->burst + 183, TRX_8PSK_NB_TSC(br), 78);</span><br><span>                 memcpy(br->burst + 261, burst + 174, 174);</span><br><span>                memset(br->burst + 435, 1, 9);</span><br><span> </span><br><span>@@ -220,7 +220,7 @@</span><br><span>  } else {</span><br><span>             burst = *bursts_p + br->bid * 116;</span><br><span>                memcpy(br->burst + 3, burst, 58);</span><br><span style="color: hsl(0, 100%, 40%);">-            memcpy(br->burst + 61, _sched_train_seq_gmsk_nb[gsm_ts_tsc(l1ts->ts)], 26);</span><br><span style="color: hsl(120, 100%, 40%);">+             memcpy(br->burst + 61, TRX_GMSK_NB_TSC(br), 26);</span><br><span>          memcpy(br->burst + 87, burst + 58, 58);</span><br><span> </span><br><span>               br->burst_len = GSM_BURST_LEN;</span><br><span>diff --git a/src/osmo-bts-trx/sched_lchan_tchf.c b/src/osmo-bts-trx/sched_lchan_tchf.c</span><br><span>index 5605969..689925f 100644</span><br><span>--- a/src/osmo-bts-trx/sched_lchan_tchf.c</span><br><span>+++ b/src/osmo-bts-trx/sched_lchan_tchf.c</span><br><span>@@ -562,7 +562,7 @@</span><br><span>     /* compose burst */</span><br><span>  burst = *bursts_p + br->bid * 116;</span><br><span>        memcpy(br->burst + 3, burst, 58);</span><br><span style="color: hsl(0, 100%, 40%);">-    memcpy(br->burst + 61, _sched_train_seq_gmsk_nb[gsm_ts_tsc(l1ts->ts)], 26);</span><br><span style="color: hsl(120, 100%, 40%);">+     memcpy(br->burst + 61, TRX_GMSK_NB_TSC(br), 26);</span><br><span>  memcpy(br->burst + 87, burst + 58, 58);</span><br><span> </span><br><span>       br->burst_len = GSM_BURST_LEN;</span><br><span>diff --git a/src/osmo-bts-trx/sched_lchan_tchh.c b/src/osmo-bts-trx/sched_lchan_tchh.c</span><br><span>index 91ce02f..4f03bd1 100644</span><br><span>--- a/src/osmo-bts-trx/sched_lchan_tchh.c</span><br><span>+++ b/src/osmo-bts-trx/sched_lchan_tchh.c</span><br><span>@@ -451,7 +451,7 @@</span><br><span>     /* compose burst */</span><br><span>  burst = *bursts_p + br->bid * 116;</span><br><span>        memcpy(br->burst + 3, burst, 58);</span><br><span style="color: hsl(0, 100%, 40%);">-    memcpy(br->burst + 61, _sched_train_seq_gmsk_nb[gsm_ts_tsc(l1ts->ts)], 26);</span><br><span style="color: hsl(120, 100%, 40%);">+     memcpy(br->burst + 61, TRX_GMSK_NB_TSC(br), 26);</span><br><span>  memcpy(br->burst + 87, burst + 58, 58);</span><br><span> </span><br><span>       br->burst_len = GSM_BURST_LEN;</span><br><span>diff --git a/src/osmo-bts-trx/sched_lchan_xcch.c b/src/osmo-bts-trx/sched_lchan_xcch.c</span><br><span>index b31175e..4bfc101 100644</span><br><span>--- a/src/osmo-bts-trx/sched_lchan_xcch.c</span><br><span>+++ b/src/osmo-bts-trx/sched_lchan_xcch.c</span><br><span>@@ -239,7 +239,7 @@</span><br><span>     /* compose burst */</span><br><span>  burst = *bursts_p + br->bid * 116;</span><br><span>        memcpy(br->burst + 3, burst, 58);</span><br><span style="color: hsl(0, 100%, 40%);">-    memcpy(br->burst + 61, _sched_train_seq_gmsk_nb[gsm_ts_tsc(l1ts->ts)], 26);</span><br><span style="color: hsl(120, 100%, 40%);">+     memcpy(br->burst + 61, TRX_GMSK_NB_TSC(br), 26);</span><br><span>  memcpy(br->burst + 87, burst + 58, 58);</span><br><span> </span><br><span>       br->burst_len = GSM_BURST_LEN;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/24327">change 24327</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/+/24327"/><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: I3744bc308b99ef941e6e9d139444e414abebc14b </div>
<div style="display:none"> Gerrit-Change-Number: 24327 </div>
<div style="display:none"> Gerrit-PatchSet: 8 </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: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>