<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>