<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/11182">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;">trxcon/scheduler: add CCCH/SDCCH mframe layouts with 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 CBCH enabled multi-frame layouts,<br>and two separate logical channel types:<br><br>  - GSM_PCHAN_CCCH_SDCCH4_CBCH (lchan TRXC_SDCCH4_CBCH),<br>  - GSM_PCHAN_SDCCH8_SACCH8C_CBCH (lchan TRXC_SDCCH8_CBCH).<br><br>Both logical channels are separately identified using<br>the following Osmocom specific cbits:<br><br>  - TRXC_SDCCH4_CBCH - 0x18 (0b11000),<br>  - TRXC_SDCCH8_CBCH - 0x19 (0b11001).<br><br>The reason of this separation is that we somehow need to<br>distinguish between CBCH on C0/TS0, and CBCH on CX/TS0.<br><br>Unlike TRXC_SDCCH8_CBCH, TRXC_SDCCH4_CBCH is enabled<br>automatically (TRX_CH_FLAG_AUTO), so CBCH messages<br>can be decoded on C0 while being in idle mode.<br><br>Change-Id: Iad9905fc3a8a012ff1ada26ff95af384816f9873<br>---<br>M src/host/trxcon/sched_lchan_desc.c<br>M src/host/trxcon/sched_mframe.c<br>M src/host/trxcon/sched_trx.h<br>3 files changed, 238 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/host/trxcon/sched_lchan_desc.c b/src/host/trxcon/sched_lchan_desc.c</span><br><span>index 05443f6..8b2b5e1 100644</span><br><span>--- a/src/host/trxcon/sched_lchan_desc.c</span><br><span>+++ b/src/host/trxcon/sched_lchan_desc.c</span><br><span>@@ -300,4 +300,16 @@</span><br><span>               4 * GSM_BURST_PL_LEN,   TRX_CH_FLAG_PDCH,</span><br><span>            rx_data_fn,             tx_data_fn,</span><br><span>  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH4_CBCH] = {</span><br><span style="color: hsl(120, 100%, 40%);">+                TRXC_SDCCH4_CBCH,       "SDCCH/4(CBCH)",</span><br><span style="color: hsl(120, 100%, 40%);">+            0xc0,                   TRX_CH_LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+             4 * GSM_BURST_PL_LEN,   TRX_CH_FLAG_AUTO,</span><br><span style="color: hsl(120, 100%, 40%);">+             rx_data_fn,             NULL,</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH8_CBCH] = {</span><br><span style="color: hsl(120, 100%, 40%);">+                TRXC_SDCCH8_CBCH,       "SDCCH/8(CBCH)",</span><br><span style="color: hsl(120, 100%, 40%);">+            0xc8,                   TRX_CH_LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+             4 * GSM_BURST_PL_LEN,   0x00,</span><br><span style="color: hsl(120, 100%, 40%);">+         rx_data_fn,             NULL,</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span> };</span><br><span>diff --git a/src/host/trxcon/sched_mframe.c b/src/host/trxcon/sched_mframe.c</span><br><span>index 25e7c29..0dcf3e7 100644</span><br><span>--- a/src/host/trxcon/sched_mframe.c</span><br><span>+++ b/src/host/trxcon/sched_mframe.c</span><br><span>@@ -191,6 +191,113 @@</span><br><span>        { TRXC_IDLE,            0,      TRXC_SDCCH4_2,  3 },</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static const struct trx_frame frame_bcch_sdcch4_cbch[102] = {</span><br><span style="color: hsl(120, 100%, 40%);">+ /* dl_chan              dl_bid  ul_chan         ul_bid */</span><br><span style="color: hsl(120, 100%, 40%);">+     { TRXC_FCCH,            0,      TRXC_SDCCH4_3,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SCH,             0,      TRXC_SDCCH4_3,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_BCCH,            0,      TRXC_SDCCH4_3,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_BCCH,            1,      TRXC_SDCCH4_3,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_BCCH,            2,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_BCCH,            3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            0,      TRXC_IDLE,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            1,      TRXC_IDLE,      1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            2,      TRXC_IDLE,      2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            3,      TRXC_IDLE,      3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_FCCH,            0,      TRXC_SACCH4_3,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SCH,             0,      TRXC_SACCH4_3,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            0,      TRXC_SACCH4_3,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            1,      TRXC_SACCH4_3,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            2,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            1,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            2,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_FCCH,            0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SCH,             0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_0,        0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_0,        1,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_0,        2,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_0,        3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_1,        0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_1,        1,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_1,        2,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_1,        3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_FCCH,            0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SCH,             0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_CBCH,     0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_CBCH,     1,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_CBCH,     2,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_CBCH,     3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_3,        0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_3,        1,      TRXC_SDCCH4_0,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_3,        2,      TRXC_SDCCH4_0,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_3,        3,      TRXC_SDCCH4_0,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_FCCH,            0,      TRXC_SDCCH4_0,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SCH,             0,      TRXC_SDCCH4_1,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH4_0,        0,      TRXC_SDCCH4_1,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH4_0,        1,      TRXC_SDCCH4_1,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH4_0,        2,      TRXC_SDCCH4_1,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH4_0,        3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH4_1,        0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH4_1,        1,      TRXC_IDLE,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH4_1,        2,      TRXC_IDLE,      1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH4_1,        3,      TRXC_IDLE,      2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            0,      TRXC_IDLE,      3 },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        { TRXC_FCCH,            0,      TRXC_SDCCH4_3,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SCH,             0,      TRXC_SDCCH4_3,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_BCCH,            0,      TRXC_SDCCH4_3,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_BCCH,            1,      TRXC_SDCCH4_3,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_BCCH,            2,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_BCCH,            3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            0,      TRXC_SACCH4_0,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            1,      TRXC_SACCH4_0,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            2,      TRXC_SACCH4_0,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            3,      TRXC_SACCH4_0,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_FCCH,            0,      TRXC_SACCH4_1,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SCH,             0,      TRXC_SACCH4_1,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            0,      TRXC_SACCH4_1,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            1,      TRXC_SACCH4_1,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            2,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            1,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            2,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_CCCH,            3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_FCCH,            0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SCH,             0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_0,        0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_0,        1,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_0,        2,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_0,        3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_1,        0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_1,        1,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_1,        2,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_1,        3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_FCCH,            0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SCH,             0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_CBCH,     0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_CBCH,     1,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_CBCH,     2,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_CBCH,     3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_3,        0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_3,        1,      TRXC_SDCCH4_0,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_3,        2,      TRXC_SDCCH4_0,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH4_3,        3,      TRXC_SDCCH4_0,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_FCCH,            0,      TRXC_SDCCH4_0,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SCH,             0,      TRXC_SDCCH4_1,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            0,      TRXC_SDCCH4_1,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            1,      TRXC_SDCCH4_1,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            2,      TRXC_SDCCH4_1,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            3,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH4_3,        0,      TRXC_RACH,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH4_3,        1,      TRXC_SDCCH4_2,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH4_3,        2,      TRXC_SDCCH4_2,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH4_3,        3,      TRXC_SDCCH4_2,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            0,      TRXC_SDCCH4_2,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static const struct trx_frame frame_sdcch8[102] = {</span><br><span>    /* dl_chan              dl_bid  ul_chan         ul_bid */</span><br><span>    { TRXC_SDCCH8_0,        0,      TRXC_SACCH8_5,  0 },</span><br><span>@@ -298,6 +405,113 @@</span><br><span>         { TRXC_IDLE,            0,      TRXC_SACCH8_4,  3 },</span><br><span> };</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+static const struct trx_frame frame_sdcch8_cbch[102] = {</span><br><span style="color: hsl(120, 100%, 40%);">+      /* dl_chan              dl_bid  ul_chan         ul_bid */</span><br><span style="color: hsl(120, 100%, 40%);">+     { TRXC_SDCCH8_0,        0,      TRXC_SACCH8_5,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_0,        1,      TRXC_SACCH8_5,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_0,        2,      TRXC_SACCH8_5,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_0,        3,      TRXC_SACCH8_5,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_1,        0,      TRXC_SACCH8_6,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_1,        1,      TRXC_SACCH8_6,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_1,        2,      TRXC_SACCH8_6,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_1,        3,      TRXC_SACCH8_6,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_CBCH,     0,      TRXC_SACCH8_7,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_CBCH,     1,      TRXC_SACCH8_7,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_CBCH,     2,      TRXC_SACCH8_7,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_CBCH,     3,      TRXC_SACCH8_7,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_3,        0,      TRXC_IDLE,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_3,        1,      TRXC_IDLE,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_3,        2,      TRXC_IDLE,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_3,        3,      TRXC_SDCCH8_0,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_4,        0,      TRXC_SDCCH8_0,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_4,        1,      TRXC_SDCCH8_0,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_4,        2,      TRXC_SDCCH8_0,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_4,        3,      TRXC_SDCCH8_1,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_5,        0,      TRXC_SDCCH8_1,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_5,        1,      TRXC_SDCCH8_1,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_5,        2,      TRXC_SDCCH8_1,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_5,        3,      TRXC_IDLE,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_6,        0,      TRXC_IDLE,      1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_6,        1,      TRXC_IDLE,      2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_6,        2,      TRXC_IDLE,      3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_6,        3,      TRXC_SDCCH8_3,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_7,        0,      TRXC_SDCCH8_3,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_7,        1,      TRXC_SDCCH8_3,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_7,        2,      TRXC_SDCCH8_3,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_7,        3,      TRXC_SDCCH8_4,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_0,        0,      TRXC_SDCCH8_4,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_0,        1,      TRXC_SDCCH8_4,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_0,        2,      TRXC_SDCCH8_4,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_0,        3,      TRXC_SDCCH8_5,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_1,        0,      TRXC_SDCCH8_5,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_1,        1,      TRXC_SDCCH8_5,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_1,        2,      TRXC_SDCCH8_5,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_1,        3,      TRXC_SDCCH8_6,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            0,      TRXC_SDCCH8_6,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            1,      TRXC_SDCCH8_6,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            2,      TRXC_SDCCH8_6,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            3,      TRXC_SDCCH8_7,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_3,        0,      TRXC_SDCCH8_7,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_3,        1,      TRXC_SDCCH8_7,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_3,        2,      TRXC_SDCCH8_7,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_3,        3,      TRXC_SACCH8_0,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            0,      TRXC_SACCH8_0,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            0,      TRXC_SACCH8_0,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            0,      TRXC_SACCH8_0,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        { TRXC_SDCCH8_0,        0,      TRXC_SACCH8_1,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_0,        1,      TRXC_SACCH8_1,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_0,        2,      TRXC_SACCH8_1,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_0,        3,      TRXC_SACCH8_1,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_1,        0,      TRXC_IDLE,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_1,        1,      TRXC_IDLE,      1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_1,        2,      TRXC_IDLE,      2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_1,        3,      TRXC_IDLE,      3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_CBCH,     0,      TRXC_SACCH8_3,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_CBCH,     1,      TRXC_SACCH8_3,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_CBCH,     2,      TRXC_SACCH8_3,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_CBCH,     3,      TRXC_SACCH8_3,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_3,        0,      TRXC_IDLE,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_3,        1,      TRXC_IDLE,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_3,        2,      TRXC_IDLE,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_3,        3,      TRXC_SDCCH8_0,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_4,        0,      TRXC_SDCCH8_0,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_4,        1,      TRXC_SDCCH8_0,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_4,        2,      TRXC_SDCCH8_0,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_4,        3,      TRXC_SDCCH8_1,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_5,        0,      TRXC_SDCCH8_1,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_5,        1,      TRXC_SDCCH8_1,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_5,        2,      TRXC_SDCCH8_1,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_5,        3,      TRXC_IDLE,      0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_6,        0,      TRXC_IDLE,      1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_6,        1,      TRXC_IDLE,      2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_6,        2,      TRXC_IDLE,      3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_6,        3,      TRXC_SDCCH8_3,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_7,        0,      TRXC_SDCCH8_3,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_7,        1,      TRXC_SDCCH8_3,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_7,        2,      TRXC_SDCCH8_3,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SDCCH8_7,        3,      TRXC_SDCCH8_4,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_4,        0,      TRXC_SDCCH8_4,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_4,        1,      TRXC_SDCCH8_4,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_4,        2,      TRXC_SDCCH8_4,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_4,        3,      TRXC_SDCCH8_5,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_5,        0,      TRXC_SDCCH8_5,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_5,        1,      TRXC_SDCCH8_5,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_5,        2,      TRXC_SDCCH8_5,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_5,        3,      TRXC_SDCCH8_6,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_6,        0,      TRXC_SDCCH8_6,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_6,        1,      TRXC_SDCCH8_6,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_6,        2,      TRXC_SDCCH8_6,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_6,        3,      TRXC_SDCCH8_7,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_7,        0,      TRXC_SDCCH8_7,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_7,        1,      TRXC_SDCCH8_7,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_7,        2,      TRXC_SDCCH8_7,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_SACCH8_7,        3,      TRXC_SACCH8_4,  0 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            0,      TRXC_SACCH8_4,  1 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            0,      TRXC_SACCH8_4,  2 },</span><br><span style="color: hsl(120, 100%, 40%);">+  { TRXC_IDLE,            0,      TRXC_SACCH8_4,  3 },</span><br><span style="color: hsl(120, 100%, 40%);">+};</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> static const struct trx_frame frame_tchf_ts0[104] = {</span><br><span>  /* dl_chan      dl_bid  ul_chan         ul_bid */</span><br><span>    { TRXC_TCHF,    0,      TRXC_TCHF,      0 },</span><br><span>@@ -1728,11 +1942,21 @@</span><br><span>               frame_bcch_sdcch4</span><br><span>    },</span><br><span>   {</span><br><span style="color: hsl(120, 100%, 40%);">+             GSM_PCHAN_CCCH_SDCCH4_CBCH, "BCCH+CCCH+SDCCH/4+SACCH/4+CBCH",</span><br><span style="color: hsl(120, 100%, 40%);">+               102,    0xff,   (uint64_t) 0x400f001e3e,</span><br><span style="color: hsl(120, 100%, 40%);">+              frame_bcch_sdcch4_cbch</span><br><span style="color: hsl(120, 100%, 40%);">+        },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span>            GSM_PCHAN_SDCCH8_SACCH8C, "SDCCH/8+SACCH/8",</span><br><span>               102,    0xff,   (uint64_t) 0xff01fe000,</span><br><span>              frame_sdcch8</span><br><span>         },</span><br><span>   {</span><br><span style="color: hsl(120, 100%, 40%);">+             GSM_PCHAN_SDCCH8_SACCH8C_CBCH, "SDCCH/8+SACCH/8+CBCH",</span><br><span style="color: hsl(120, 100%, 40%);">+              102,    0xff,   (uint64_t) 0x8ff01fe000,</span><br><span style="color: hsl(120, 100%, 40%);">+              frame_sdcch8_cbch</span><br><span style="color: hsl(120, 100%, 40%);">+     },</span><br><span style="color: hsl(120, 100%, 40%);">+    {</span><br><span>            GSM_PCHAN_TCH_F, "TCH/F+SACCH",</span><br><span>            104,    0x01,   (uint64_t) 0x200040,</span><br><span>                 frame_tchf_ts0</span><br><span>diff --git a/src/host/trxcon/sched_trx.h b/src/host/trxcon/sched_trx.h</span><br><span>index 10ae256..1f0dbc2 100644</span><br><span>--- a/src/host/trxcon/sched_trx.h</span><br><span>+++ b/src/host/trxcon/sched_trx.h</span><br><span>@@ -83,6 +83,8 @@</span><br><span>  TRXC_SACCH8_7,</span><br><span>       TRXC_PDTCH,</span><br><span>  TRXC_PTCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+   TRXC_SDCCH4_CBCH,</span><br><span style="color: hsl(120, 100%, 40%);">+     TRXC_SDCCH8_CBCH,</span><br><span>    _TRX_CHAN_MAX</span><br><span> };</span><br><span> </span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/11182">change 11182</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/11182"/><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: Iad9905fc3a8a012ff1ada26ff95af384816f9873 </div>
<div style="display:none"> Gerrit-Change-Number: 11182 </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>