<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/10459">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">trxcon/scheduler: share FACCH/H TDMA frame mapping helpres<br><br>Change-Id: Iaf4cb33f1b79df23f8a90c8b14ebe0cd9907fbb9<br>---<br>M src/host/trxcon/sched_lchan_common.c<br>M src/host/trxcon/sched_prim.c<br>M src/host/trxcon/sched_trx.h<br>3 files changed, 87 insertions(+), 16 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/59/10459/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/host/trxcon/sched_lchan_common.c b/src/host/trxcon/sched_lchan_common.c</span><br><span>index 2767b90..4d45e66 100644</span><br><span>--- a/src/host/trxcon/sched_lchan_common.c</span><br><span>+++ b/src/host/trxcon/sched_lchan_common.c</span><br><span>@@ -168,3 +168,83 @@</span><br><span>               return 0;</span><br><span>    }</span><br><span> }</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%);">+ * May an Uplink FACCH/H transmission be initiated on</span><br><span style="color: hsl(120, 100%, 40%);">+ * a given frame number and a given channel type?</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * See GSM 05.02, clause 7, table 1</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * @param  chan channel type (TRXC_TCHH_0 or TRXC_TCHH_1)</span><br><span style="color: hsl(120, 100%, 40%);">+ * @param  fn   the current frame number</span><br><span style="color: hsl(120, 100%, 40%);">+ * @return      true (yes) or false (no)</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+bool sched_facch_h_ul_start(enum trx_lchan_type chan, uint32_t fn)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       uint32_t fn_mf;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Traffic multiframe period */</span><br><span style="color: hsl(120, 100%, 40%);">+       fn_mf = fn % 26;</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%);">+    * FACCH/H0 UL frame alignment</span><br><span style="color: hsl(120, 100%, 40%);">+         * B0(0,2,4,6,8,10)</span><br><span style="color: hsl(120, 100%, 40%);">+    * B1(8,10,13,15,17,19)</span><br><span style="color: hsl(120, 100%, 40%);">+        * B2(17,19,21,23,0,2)</span><br><span style="color: hsl(120, 100%, 40%);">+         */</span><br><span style="color: hsl(120, 100%, 40%);">+   if (chan == TRXC_TCHH_0)</span><br><span style="color: hsl(120, 100%, 40%);">+              if (fn_mf == 0 || fn_mf == 8 || fn_mf == 17)</span><br><span style="color: hsl(120, 100%, 40%);">+                  return true;</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%);">+    * FACCH/H1 UL frame alignment</span><br><span style="color: hsl(120, 100%, 40%);">+         * B0(1,3,5,7,9,11)</span><br><span style="color: hsl(120, 100%, 40%);">+    * B1(9,11,14,16,18,20)</span><br><span style="color: hsl(120, 100%, 40%);">+        * B2(18,20,22,24,1,3)</span><br><span style="color: hsl(120, 100%, 40%);">+         */</span><br><span style="color: hsl(120, 100%, 40%);">+   if (chan == TRXC_TCHH_1)</span><br><span style="color: hsl(120, 100%, 40%);">+              if (fn_mf == 1 || fn_mf == 9 || fn_mf == 18)</span><br><span style="color: hsl(120, 100%, 40%);">+                  return true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        return false;</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%);">+ * May a Downlink FACCH/H transmission be finished on</span><br><span style="color: hsl(120, 100%, 40%);">+ * a given frame number and a given channel type?</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * See GSM 05.02, clause 7, table 1</span><br><span style="color: hsl(120, 100%, 40%);">+ *</span><br><span style="color: hsl(120, 100%, 40%);">+ * @param  chan channel type (TRXC_TCHH_0 or TRXC_TCHH_1)</span><br><span style="color: hsl(120, 100%, 40%);">+ * @param  fn   the current frame number</span><br><span style="color: hsl(120, 100%, 40%);">+ * @return      true (yes) or false (no)</span><br><span style="color: hsl(120, 100%, 40%);">+ */</span><br><span style="color: hsl(120, 100%, 40%);">+bool sched_facch_h_dl_end(enum trx_lchan_type chan, uint32_t fn)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+       uint32_t fn_mf;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+     /* Traffic multiframe period */</span><br><span style="color: hsl(120, 100%, 40%);">+       fn_mf = fn % 26;</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%);">+    * FACCH/H0 DL frame alignment</span><br><span style="color: hsl(120, 100%, 40%);">+         * B0(4,6,8,10,13,15)</span><br><span style="color: hsl(120, 100%, 40%);">+  * B1(13,15,17,19,21,23)</span><br><span style="color: hsl(120, 100%, 40%);">+       * B2(21,23,0,2,4,6)</span><br><span style="color: hsl(120, 100%, 40%);">+   */</span><br><span style="color: hsl(120, 100%, 40%);">+   if (chan == TRXC_TCHH_0)</span><br><span style="color: hsl(120, 100%, 40%);">+              if (fn_mf == 15 || fn_mf == 23 || fn_mf == 6)</span><br><span style="color: hsl(120, 100%, 40%);">+                 return true;</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%);">+    * FACCH/H1 DL frame alignment</span><br><span style="color: hsl(120, 100%, 40%);">+         * B0(5,7,9,11,14,16)</span><br><span style="color: hsl(120, 100%, 40%);">+  * B1(14,16,18,20,22,24)</span><br><span style="color: hsl(120, 100%, 40%);">+       * B2(22,24,1,3,5,7)</span><br><span style="color: hsl(120, 100%, 40%);">+   */</span><br><span style="color: hsl(120, 100%, 40%);">+   if (chan == TRXC_TCHH_1)</span><br><span style="color: hsl(120, 100%, 40%);">+              if (fn_mf == 16 || fn_mf == 24 || fn_mf == 7)</span><br><span style="color: hsl(120, 100%, 40%);">+                 return true;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        return false;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span>diff --git a/src/host/trxcon/sched_prim.c b/src/host/trxcon/sched_prim.c</span><br><span>index e663bc3..723facb 100644</span><br><span>--- a/src/host/trxcon/sched_prim.c</span><br><span>+++ b/src/host/trxcon/sched_prim.c</span><br><span>@@ -248,23 +248,10 @@</span><br><span> {</span><br><span>   struct trx_ts_prim *facch;</span><br><span>   struct trx_ts_prim *tch;</span><br><span style="color: hsl(0, 100%, 40%);">-        bool facch_now = false;</span><br><span style="color: hsl(0, 100%, 40%);">- uint32_t fn_mf;</span><br><span style="color: hsl(120, 100%, 40%);">+       bool facch_now;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     /* Traffic multiframe period */</span><br><span style="color: hsl(0, 100%, 40%);">- fn_mf = fn % 26;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-        /* FACCH/H0 frame alignment */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (lchan_type == TRXC_TCHH_0)</span><br><span style="color: hsl(0, 100%, 40%);">-          if (fn_mf == 0 || fn_mf == 8 || fn_mf == 17)</span><br><span style="color: hsl(0, 100%, 40%);">-                    facch_now = true;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* FACCH/H1 frame alignment */</span><br><span style="color: hsl(0, 100%, 40%);">-  if (lchan_type == TRXC_TCHH_1)</span><br><span style="color: hsl(0, 100%, 40%);">-          if (fn_mf == 1 || fn_mf == 9 || fn_mf == 18)</span><br><span style="color: hsl(0, 100%, 40%);">-                    facch_now = true;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       /* If FACCH/H is not allowed for a given frame number */</span><br><span style="color: hsl(120, 100%, 40%);">+      /* May we initiate an UL FACCH/H frame transmission now? */</span><br><span style="color: hsl(120, 100%, 40%);">+   facch_now = sched_facch_h_ul_start(lchan_type, fn);</span><br><span>  if (!facch_now) /* Just dequeue a TCH/H prim */</span><br><span>              goto no_facch;</span><br><span> </span><br><span>diff --git a/src/host/trxcon/sched_trx.h b/src/host/trxcon/sched_trx.h</span><br><span>index 730923b..f8898cd 100644</span><br><span>--- a/src/host/trxcon/sched_trx.h</span><br><span>+++ b/src/host/trxcon/sched_trx.h</span><br><span>@@ -323,3 +323,7 @@</span><br><span>    int bit_error_count, bool dec_failed, bool traffic);</span><br><span> int sched_send_dt_conf(struct trx_instance *trx, struct trx_ts *ts,</span><br><span>  struct trx_lchan_state *lchan, uint32_t fn, bool traffic);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Interleaved FACCH/H block TDMA frame mapping */</span><br><span style="color: hsl(120, 100%, 40%);">+bool sched_facch_h_ul_start(enum trx_lchan_type chan, uint32_t fn);</span><br><span style="color: hsl(120, 100%, 40%);">+bool sched_facch_h_dl_end(enum trx_lchan_type chan, uint32_t fn);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10459">change 10459</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/10459"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmocom-bb </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Iaf4cb33f1b79df23f8a90c8b14ebe0cd9907fbb9 </div>
<div style="display:none"> Gerrit-Change-Number: 10459 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>