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