<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/11181">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">firmware/layer1: add scheduler tasks for CBCH<br><br>According to GSM TS 05.02, section 3.3.5, Cell Broadcast Channel<br>(CBCH) is a downlink only channel, which is used to carry the<br>short message service cell broadcast (SMSCB). CBCH is optional,<br>and uses the same physical channel as SDCCH. More precisely,<br>CBCH replaces sub-slot number 2 of SDCCH channels when enabled.<br><br>This change introduces the following CBCH related tasks:<br><br>  - MF_TASK_SDCCH4_CBCH (CBCH on C0/TS0 SDCCH/4),<br>  - MF_TASK_SDCCH8_CBCH (CBCH on SDCCH/8),<br><br>which are identified using the following Osmocom specific cbits:<br><br>  - MF_TASK_SDCCH4_CBCH - 0x18 (0b11000),<br>  - MF_TASK_SDCCH8_CBCH - 0x19 (0b11001).<br><br>The only way to enable these tasks at the moment is to send<br>L1CTL_DM_EST_REQ message with required cbits and tn.<br><br>Change-Id: I1d7f02cba1cd8f6527360589d2d2747b6426f78b<br>---<br>M src/target/firmware/include/layer1/mframe_sched.h<br>M src/target/firmware/include/layer1/sync.h<br>M src/target/firmware/layer1/l23_api.c<br>M src/target/firmware/layer1/mframe_sched.c<br>4 files changed, 36 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/target/firmware/include/layer1/mframe_sched.h b/src/target/firmware/include/layer1/mframe_sched.h</span><br><span>index ecdb1ec..74e2d27 100644</span><br><span>--- a/src/target/firmware/include/layer1/mframe_sched.h</span><br><span>+++ b/src/target/firmware/include/layer1/mframe_sched.h</span><br><span>@@ -23,6 +23,9 @@</span><br><span>  MF_TASK_SDCCH8_6,</span><br><span>    MF_TASK_SDCCH8_7,</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ MF_TASK_SDCCH4_CBCH,</span><br><span style="color: hsl(120, 100%, 40%);">+  MF_TASK_SDCCH8_CBCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>       MF_TASK_TCH_F_EVEN,</span><br><span>  MF_TASK_TCH_F_ODD,</span><br><span>   MF_TASK_TCH_H_0,</span><br><span>diff --git a/src/target/firmware/include/layer1/sync.h b/src/target/firmware/include/layer1/sync.h</span><br><span>index dae85a1..3565ee2 100644</span><br><span>--- a/src/target/firmware/include/layer1/sync.h</span><br><span>+++ b/src/target/firmware/include/layer1/sync.h</span><br><span>@@ -119,7 +119,9 @@</span><br><span>              enum {</span><br><span>                       GSM_DCHAN_NONE = 0,</span><br><span>                  GSM_DCHAN_SDCCH_4,</span><br><span style="color: hsl(120, 100%, 40%);">+                    GSM_DCHAN_SDCCH_4_CBCH,</span><br><span>                      GSM_DCHAN_SDCCH_8,</span><br><span style="color: hsl(120, 100%, 40%);">+                    GSM_DCHAN_SDCCH_8_CBCH,</span><br><span>                      GSM_DCHAN_TCH_H,</span><br><span>                     GSM_DCHAN_TCH_F,</span><br><span>                     GSM_DCHAN_UNKNOWN,</span><br><span>diff --git a/src/target/firmware/layer1/l23_api.c b/src/target/firmware/layer1/l23_api.c</span><br><span>index e46ca09..404a2f9 100644</span><br><span>--- a/src/target/firmware/layer1/l23_api.c</span><br><span>+++ b/src/target/firmware/layer1/l23_api.c</span><br><span>@@ -97,6 +97,11 @@</span><br><span>                 lch_idx = cbits & 0x7;</span><br><span>           master_task = MF_TASK_SDCCH8_0 + lch_idx;</span><br><span>            multiframe = MF51;</span><br><span style="color: hsl(120, 100%, 40%);">+    } else if ((cbits & 0x1e) == 0x18) {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Osmocom specific extension for CBCH */</span><br><span style="color: hsl(120, 100%, 40%);">+             master_task = (cbits & 0x01) ? /* 0b1100T */</span><br><span style="color: hsl(120, 100%, 40%);">+                      MF_TASK_SDCCH4_CBCH : MF_TASK_SDCCH8_CBCH;</span><br><span style="color: hsl(120, 100%, 40%);">+            multiframe = MF51;</span><br><span> #if 0</span><br><span>  } else if (cbits == 0x10) {</span><br><span>          /* FIXME: when to do extended BCCH? */</span><br><span>@@ -136,7 +141,12 @@</span><br><span>                return GSM_DCHAN_SDCCH_4;</span><br><span>    } else if ((cbits & 0x18) == 0x08) {</span><br><span>             return GSM_DCHAN_SDCCH_8;</span><br><span style="color: hsl(120, 100%, 40%);">+     } else if ((cbits & 0x1e) == 0x18) {</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Osmocom-specific extension for CBCH */</span><br><span style="color: hsl(120, 100%, 40%);">+             return (cbits & 0x01) ? /* 0b1100T */</span><br><span style="color: hsl(120, 100%, 40%);">+                     GSM_DCHAN_SDCCH_8_CBCH : GSM_DCHAN_SDCCH_4_CBCH;</span><br><span>     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  return GSM_DCHAN_UNKNOWN;</span><br><span> }</span><br><span> </span><br><span>diff --git a/src/target/firmware/layer1/mframe_sched.c b/src/target/firmware/layer1/mframe_sched.c</span><br><span>index 01ae167..7fa38c1 100644</span><br><span>--- a/src/target/firmware/layer1/mframe_sched.c</span><br><span>+++ b/src/target/firmware/layer1/mframe_sched.c</span><br><span>@@ -198,6 +198,16 @@</span><br><span>   { .sched_set = NULL }</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* CBCH replaces sub-slot 2 of SDCCH, see GSM 05.02, section 6.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+static const struct mframe_sched_item mf_sdcch8_cbch[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+      { .sched_set = NB_QUAD_FH_DL, .modulo = 51, .frame_nr = 8 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { .sched_set = NULL }</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+static const struct mframe_sched_item mf_sdcch4_cbch[] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ { .sched_set = NB_QUAD_DL, .modulo = 51, .frame_nr = 32 },</span><br><span style="color: hsl(120, 100%, 40%);">+    { .sched_set = NULL }</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* Measurement for MF 51 C0 */</span><br><span> static const struct mframe_sched_item mf_neigh_pm51_c0t0[] = {</span><br><span>      { .sched_set = NEIGH_PM   , .modulo = 51, .frame_nr = 0 },</span><br><span>@@ -327,6 +337,9 @@</span><br><span>     [MF_TASK_SDCCH8_6] = mf_sdcch8_6,</span><br><span>    [MF_TASK_SDCCH8_7] = mf_sdcch8_7,</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ [MF_TASK_SDCCH4_CBCH] = mf_sdcch4_cbch,</span><br><span style="color: hsl(120, 100%, 40%);">+       [MF_TASK_SDCCH8_CBCH] = mf_sdcch8_cbch,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    [MF_TASK_TCH_F_EVEN] = mf_tch_f_even,</span><br><span>        [MF_TASK_TCH_F_ODD]  = mf_tch_f_odd,</span><br><span>         [MF_TASK_TCH_H_0]    = mf_tch_h_0,</span><br><span>@@ -401,6 +414,14 @@</span><br><span>            cbits = 0x02 + 1;</span><br><span>            break;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    /* Osmocom specific extensions */</span><br><span style="color: hsl(120, 100%, 40%);">+     case MF_TASK_SDCCH4_CBCH:</span><br><span style="color: hsl(120, 100%, 40%);">+             cbits = 0x18;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case MF_TASK_SDCCH8_CBCH:</span><br><span style="color: hsl(120, 100%, 40%);">+             cbits = 0x19;</span><br><span style="color: hsl(120, 100%, 40%);">+         break;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     case MF_TASK_UL_ALL_NB:</span><br><span>      default:</span><br><span>             printd("ERROR: cannot express mf_task=%d as "</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11181">change 11181</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/11181"/><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: merged </div>
<div style="display:none"> Gerrit-Change-Id: I1d7f02cba1cd8f6527360589d2d2747b6426f78b </div>
<div style="display:none"> Gerrit-Change-Number: 11181 </div>
<div style="display:none"> Gerrit-PatchSet: 4 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>
<div style="display:none"> Gerrit-Reviewer: Vadim Yanitskiy <axilirator@gmail.com> </div>