<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/14222">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">trxcon/sched_mframe.c: do not hard-code lchan combinations<br><br>Having magic pre-calculated hex-masks gives one quite high chances<br>to shoot oneself in the foot, and decreases readability in general.<br><br>Let's do this pre-calculation during the compilation process, so<br>it's much easier to read, extend and spot potential bugs.<br><br>Change-Id: If945b3654e35c83fc0220fdd6d99c1c7a0503386<br>---<br>M src/host/trxcon/sched_mframe.c<br>1 file changed, 82 insertions(+), 19 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/22/14222/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/host/trxcon/sched_mframe.c b/src/host/trxcon/sched_mframe.c</span><br><span>index 0dcf3e7..d427993 100644</span><br><span>--- a/src/host/trxcon/sched_mframe.c</span><br><span>+++ b/src/host/trxcon/sched_mframe.c</span><br><span>@@ -1916,6 +1916,50 @@</span><br><span>         { TRXC_IDLE,    0,      TRXC_IDLE,      0 },</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Logical channel mask for a single channel */</span><br><span style="color: hsl(120, 100%, 40%);">+#define M64(x) \</span><br><span style="color: hsl(120, 100%, 40%);">+     ((uint64_t) 0x01 << x)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Logical channel mask for BCCH+CCCH */</span><br><span style="color: hsl(120, 100%, 40%);">+#define M64_BCCH_CCCH \</span><br><span style="color: hsl(120, 100%, 40%);">+     (uint64_t) 0x00 \</span><br><span style="color: hsl(120, 100%, 40%);">+             | M64(TRXC_FCCH) \</span><br><span style="color: hsl(120, 100%, 40%);">+            | M64(TRXC_SCH)  \</span><br><span style="color: hsl(120, 100%, 40%);">+            | M64(TRXC_BCCH) \</span><br><span style="color: hsl(120, 100%, 40%);">+            | M64(TRXC_RACH) \</span><br><span style="color: hsl(120, 100%, 40%);">+            | M64(TRXC_CCCH)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Logical channel mask for SDCCH4 (with SACCH, all sub-channels) */</span><br><span style="color: hsl(120, 100%, 40%);">+#define M64_SDCCH4 \</span><br><span style="color: hsl(120, 100%, 40%);">+        (uint64_t) 0x00 \</span><br><span style="color: hsl(120, 100%, 40%);">+             | M64(TRXC_SDCCH4_0) | M64(TRXC_SACCH4_0) \</span><br><span style="color: hsl(120, 100%, 40%);">+           | M64(TRXC_SDCCH4_1) | M64(TRXC_SACCH4_1) \</span><br><span style="color: hsl(120, 100%, 40%);">+           | M64(TRXC_SDCCH4_2) | M64(TRXC_SACCH4_2) \</span><br><span style="color: hsl(120, 100%, 40%);">+           | M64(TRXC_SDCCH4_3) | M64(TRXC_SACCH4_3)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Logical channel mask for SDCCH8 (with SACCH, all sub-channels) */</span><br><span style="color: hsl(120, 100%, 40%);">+#define M64_SDCCH8 \</span><br><span style="color: hsl(120, 100%, 40%);">+       (uint64_t) 0x00 \</span><br><span style="color: hsl(120, 100%, 40%);">+             | M64(TRXC_SDCCH8_0) | M64(TRXC_SACCH8_0) \</span><br><span style="color: hsl(120, 100%, 40%);">+           | M64(TRXC_SDCCH8_1) | M64(TRXC_SACCH8_1) \</span><br><span style="color: hsl(120, 100%, 40%);">+           | M64(TRXC_SDCCH8_2) | M64(TRXC_SACCH8_2) \</span><br><span style="color: hsl(120, 100%, 40%);">+           | M64(TRXC_SDCCH8_3) | M64(TRXC_SACCH8_3) \</span><br><span style="color: hsl(120, 100%, 40%);">+           | M64(TRXC_SDCCH8_4) | M64(TRXC_SACCH8_4) \</span><br><span style="color: hsl(120, 100%, 40%);">+           | M64(TRXC_SDCCH8_5) | M64(TRXC_SACCH8_5) \</span><br><span style="color: hsl(120, 100%, 40%);">+           | M64(TRXC_SDCCH8_6) | M64(TRXC_SACCH8_6) \</span><br><span style="color: hsl(120, 100%, 40%);">+           | M64(TRXC_SDCCH8_7) | M64(TRXC_SACCH8_7)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Logical channel mask for TCH/F (with SACCH) */</span><br><span style="color: hsl(120, 100%, 40%);">+#define M64_TCHF \</span><br><span style="color: hsl(120, 100%, 40%);">+    (uint64_t) 0x00 \</span><br><span style="color: hsl(120, 100%, 40%);">+             | M64(TRXC_TCHF) | M64(TRXC_SACCHTF)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* Logical channel mask for TCH/H (with SACCH, all sub-channels) */</span><br><span style="color: hsl(120, 100%, 40%);">+#define M64_TCHH \</span><br><span style="color: hsl(120, 100%, 40%);">+       (uint64_t) 0x00 \</span><br><span style="color: hsl(120, 100%, 40%);">+             | M64(TRXC_TCHH_0) | M64(TRXC_SACCHTH_0) \</span><br><span style="color: hsl(120, 100%, 40%);">+            | M64(TRXC_TCHH_1) | M64(TRXC_SACCHTH_1)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /**</span><br><span>  * A few notes about frame count:</span><br><span>  *</span><br><span>@@ -1928,97 +1972,116 @@</span><br><span> static const struct trx_multiframe layouts[] = {</span><br><span>  {</span><br><span>            GSM_PCHAN_NONE, "NONE",</span><br><span style="color: hsl(0, 100%, 40%);">-               0,      0xff,   (uint64_t) 0x00,</span><br><span style="color: hsl(120, 100%, 40%);">+              0,      0xff,</span><br><span style="color: hsl(120, 100%, 40%);">+         0x00,</span><br><span>                NULL</span><br><span>         },</span><br><span>   {</span><br><span>            GSM_PCHAN_CCCH, "BCCH+CCCH",</span><br><span style="color: hsl(0, 100%, 40%);">-          51,     0xff,   (uint64_t) 0x3e,</span><br><span style="color: hsl(120, 100%, 40%);">+              51,     0xff,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_BCCH_CCCH,</span><br><span>               frame_bcch</span><br><span>   },</span><br><span>   {</span><br><span>            GSM_PCHAN_CCCH_SDCCH4, "BCCH+CCCH+SDCCH/4+SACCH/4",</span><br><span style="color: hsl(0, 100%, 40%);">-           102,    0xff,   (uint64_t) 0xf001e3e,</span><br><span style="color: hsl(120, 100%, 40%);">+         102,    0xff,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_BCCH_CCCH | M64_SDCCH4,</span><br><span>          frame_bcch_sdcch4</span><br><span>    },</span><br><span>   {</span><br><span>            GSM_PCHAN_CCCH_SDCCH4_CBCH, "BCCH+CCCH+SDCCH/4+SACCH/4+CBCH",</span><br><span style="color: hsl(0, 100%, 40%);">-         102,    0xff,   (uint64_t) 0x400f001e3e,</span><br><span style="color: hsl(120, 100%, 40%);">+              102,    0xff,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_BCCH_CCCH | M64_SDCCH4 | M64(TRXC_SDCCH4_CBCH),</span><br><span>          frame_bcch_sdcch4_cbch</span><br><span>       },</span><br><span>   {</span><br><span>            GSM_PCHAN_SDCCH8_SACCH8C, "SDCCH/8+SACCH/8",</span><br><span style="color: hsl(0, 100%, 40%);">-          102,    0xff,   (uint64_t) 0xff01fe000,</span><br><span style="color: hsl(120, 100%, 40%);">+               102,    0xff,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_SDCCH8,</span><br><span>          frame_sdcch8</span><br><span>         },</span><br><span>   {</span><br><span>            GSM_PCHAN_SDCCH8_SACCH8C_CBCH, "SDCCH/8+SACCH/8+CBCH",</span><br><span style="color: hsl(0, 100%, 40%);">-                102,    0xff,   (uint64_t) 0x8ff01fe000,</span><br><span style="color: hsl(120, 100%, 40%);">+              102,    0xff,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_SDCCH8 | M64(TRXC_SDCCH8_CBCH),</span><br><span>          frame_sdcch8_cbch</span><br><span>    },</span><br><span>   {</span><br><span>            GSM_PCHAN_TCH_F, "TCH/F+SACCH",</span><br><span style="color: hsl(0, 100%, 40%);">-               104,    0x01,   (uint64_t) 0x200040,</span><br><span style="color: hsl(120, 100%, 40%);">+          104,    0x01,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_TCHF,</span><br><span>            frame_tchf_ts0</span><br><span>       },</span><br><span>   {</span><br><span>            GSM_PCHAN_TCH_F, "TCH/F+SACCH",</span><br><span style="color: hsl(0, 100%, 40%);">-               104,    0x02,   (uint64_t) 0x200040,</span><br><span style="color: hsl(120, 100%, 40%);">+          104,    0x02,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_TCHF,</span><br><span>            frame_tchf_ts1</span><br><span>       },</span><br><span>   {</span><br><span>            GSM_PCHAN_TCH_F, "TCH/F+SACCH",</span><br><span style="color: hsl(0, 100%, 40%);">-               104,    0x04,   (uint64_t) 0x200040,</span><br><span style="color: hsl(120, 100%, 40%);">+          104,    0x04,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_TCHF,</span><br><span>            frame_tchf_ts2</span><br><span>       },</span><br><span>   {</span><br><span>            GSM_PCHAN_TCH_F, "TCH/F+SACCH",</span><br><span style="color: hsl(0, 100%, 40%);">-               104,    0x08,   (uint64_t) 0x200040,</span><br><span style="color: hsl(120, 100%, 40%);">+          104,    0x08,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_TCHF,</span><br><span>            frame_tchf_ts3</span><br><span>       },</span><br><span>   {</span><br><span>            GSM_PCHAN_TCH_F, "TCH/F+SACCH",</span><br><span style="color: hsl(0, 100%, 40%);">-               104,    0x10,   (uint64_t) 0x200040,</span><br><span style="color: hsl(120, 100%, 40%);">+          104,    0x10,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_TCHF,</span><br><span>            frame_tchf_ts4</span><br><span>       },</span><br><span>   {</span><br><span>            GSM_PCHAN_TCH_F, "TCH/F+SACCH",</span><br><span style="color: hsl(0, 100%, 40%);">-               104,    0x20,   (uint64_t) 0x200040,</span><br><span style="color: hsl(120, 100%, 40%);">+          104,    0x20,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_TCHF,</span><br><span>            frame_tchf_ts5</span><br><span>       },</span><br><span>   {</span><br><span>            GSM_PCHAN_TCH_F, "TCH/F+SACCH",</span><br><span style="color: hsl(0, 100%, 40%);">-               104,    0x40,   (uint64_t) 0x200040,</span><br><span style="color: hsl(120, 100%, 40%);">+          104,    0x40,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_TCHF,</span><br><span>            frame_tchf_ts6</span><br><span>       },</span><br><span>   {</span><br><span>            GSM_PCHAN_TCH_F, "TCH/F+SACCH",</span><br><span style="color: hsl(0, 100%, 40%);">-               104,    0x80,   (uint64_t) 0x200040,</span><br><span style="color: hsl(120, 100%, 40%);">+          104,    0x80,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_TCHF,</span><br><span>            frame_tchf_ts7</span><br><span>       },</span><br><span>   {</span><br><span>            GSM_PCHAN_TCH_H, "TCH/H+SACCH",</span><br><span style="color: hsl(0, 100%, 40%);">-               104,    0x03,   (uint64_t) 0xc00180,</span><br><span style="color: hsl(120, 100%, 40%);">+          104,    0x03,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_TCHH,</span><br><span>            frame_tchh_ts01</span><br><span>      },</span><br><span>   {</span><br><span>            GSM_PCHAN_TCH_H, "TCH/H+SACCH",</span><br><span style="color: hsl(0, 100%, 40%);">-               104,    0x0c,   (uint64_t) 0xc00180,</span><br><span style="color: hsl(120, 100%, 40%);">+          104,    0x0c,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_TCHH,</span><br><span>            frame_tchh_ts23</span><br><span>      },</span><br><span>   {</span><br><span>            GSM_PCHAN_TCH_H, "TCH/H+SACCH",</span><br><span style="color: hsl(0, 100%, 40%);">-               104,    0x30,   (uint64_t) 0xc00180,</span><br><span style="color: hsl(120, 100%, 40%);">+          104,    0x30,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_TCHH,</span><br><span>            frame_tchh_ts45</span><br><span>      },</span><br><span>   {</span><br><span>            GSM_PCHAN_TCH_H, "TCH/H+SACCH",</span><br><span style="color: hsl(0, 100%, 40%);">-               104,    0xc0,   (uint64_t) 0xc00180,</span><br><span style="color: hsl(120, 100%, 40%);">+          104,    0xc0,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64_TCHH,</span><br><span>            frame_tchh_ts67</span><br><span>      },</span><br><span>   {</span><br><span>            GSM_PCHAN_PDCH, "PDCH",</span><br><span style="color: hsl(0, 100%, 40%);">-               104,    0xff,   (uint64_t) 0x3000000000,</span><br><span style="color: hsl(120, 100%, 40%);">+              104,    0xff,</span><br><span style="color: hsl(120, 100%, 40%);">+         M64(TRXC_PDTCH) | M64(TRXC_PTCCH),</span><br><span>           frame_pdch</span><br><span>   },</span><br><span> };</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/14222">change 14222</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/14222"/><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: If945b3654e35c83fc0220fdd6d99c1c7a0503386 </div>
<div style="display:none"> Gerrit-Change-Number: 14222 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>