<p>Vadim Yanitskiy has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bts/+/14322">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">common/scheduler.c: refactor description of TRXC_* lchans<br><br>Let's avoid fancy alignment in the description of logical channels<br>for the benefits of having better readability, the ability to add<br>more comments and fields without making it look ugly.<br><br>Get rid of value-string array 'trx_chan_type_names', since each<br>logical channel has its name defined in 'trx_chan_desc'.<br><br>Get rid of field 'chan' of 'trx_lchan_desc' structure since it's<br>not used anywhere, and not actually needed because the position<br>of each lchan description is defined by its TRXC_* type.<br><br>Replace both 'pdch' and 'auto_active' fields with more generic<br>bitmask field called 'flags', and define the following flags:<br><br>  - TRX_CHAN_FLAG_AUTO_ACTIVE,<br>  - TRX_CHAN_FLAG_PDCH.<br><br>Use RSL channel mode #defines from libosmogsm instead of having<br>hard-coded numbers. This increases readability.<br><br>As a bonus, let's add a human readable description to each lchan<br>definition, so it can be printed in the VTY some day.<br><br>Change-Id: I9d5d49ec569f133d37b8164b22607d4700474315<br>Backported from: I2fc61e1cdca4690a34e2861b9ee3b7c64ea64843<br>             I7ab4958801b3422973b67ff0452b90afa8a3f501<br>---<br>M include/osmo-bts/scheduler.h<br>M include/osmo-bts/scheduler_backend.h<br>M src/common/scheduler.c<br>3 files changed, 466 insertions(+), 107 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-bts refs/changes/22/14322/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmo-bts/scheduler.h b/include/osmo-bts/scheduler.h</span><br><span>index 2906c6e..c862307 100644</span><br><span>--- a/include/osmo-bts/scheduler.h</span><br><span>+++ b/include/osmo-bts/scheduler.h</span><br><span>@@ -5,6 +5,15 @@</span><br><span> </span><br><span> #include <osmo-bts/gsm_data.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Whether a logical channel must be activated automatically */</span><br><span style="color: hsl(120, 100%, 40%);">+#define TRX_CHAN_FLAG_AUTO_ACTIVE    (1 << 0)</span><br><span style="color: hsl(120, 100%, 40%);">+/* Whether a logical channel belongs to PDCH (packet switched data) */</span><br><span style="color: hsl(120, 100%, 40%);">+#define TRX_CHAN_FLAG_PDCH              (1 << 1)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+/* FIXME: we should actually activate 'auto-active' channels */</span><br><span style="color: hsl(120, 100%, 40%);">+#define TRX_CHAN_IS_ACTIVE(state, chan) \</span><br><span style="color: hsl(120, 100%, 40%);">+  (trx_chan_desc[chan].flags & TRX_CHAN_FLAG_AUTO_ACTIVE || (state)->active)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* These types define the different channels on a multiframe.</span><br><span>  * Each channel has queues and can be activated individually.</span><br><span>  */</span><br><span>@@ -51,8 +60,6 @@</span><br><span>     _TRX_CHAN_MAX</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-extern const struct value_string trx_chan_type_names[];</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> #define GSM_BURST_LEN         148</span><br><span> #define GPRS_BURST_LEN           GSM_BURST_LEN</span><br><span> #define EGPRS_BURST_LEN                444</span><br><span>diff --git a/include/osmo-bts/scheduler_backend.h b/include/osmo-bts/scheduler_backend.h</span><br><span>index dbd9319..505f4d7 100644</span><br><span>--- a/include/osmo-bts/scheduler_backend.h</span><br><span>+++ b/include/osmo-bts/scheduler_backend.h</span><br><span>@@ -19,24 +19,22 @@</span><br><span>                             int8_t rssi, int16_t toa256);</span><br><span> </span><br><span> struct trx_chan_desc {</span><br><span style="color: hsl(0, 100%, 40%);">-       /*! \brief Is this on a PDCH (PS) ? */</span><br><span style="color: hsl(0, 100%, 40%);">-  int                     pdch;</span><br><span style="color: hsl(0, 100%, 40%);">-   /*! \brief TRX Channel Type */</span><br><span style="color: hsl(0, 100%, 40%);">-  enum trx_chan_type      chan;</span><br><span style="color: hsl(120, 100%, 40%);">+ /*! \brief Human-readable name */</span><br><span style="color: hsl(120, 100%, 40%);">+     const char              *name;</span><br><span style="color: hsl(120, 100%, 40%);">+        /*! \brief Human-readable description */</span><br><span style="color: hsl(120, 100%, 40%);">+      const char              *desc;</span><br><span>       /*! \brief Channel Number (like in RSL) */</span><br><span>   uint8_t                 chan_nr;</span><br><span>     /*! \brief Link ID (like in RSL) */</span><br><span>  uint8_t                 link_id;</span><br><span style="color: hsl(0, 100%, 40%);">-        /*! \brief Human-readable name */</span><br><span style="color: hsl(0, 100%, 40%);">-       const char              *name;</span><br><span>       /*! \brief function to call when we want to generate RTS.req to L2 */</span><br><span>        trx_sched_rts_func      *rts_fn;</span><br><span>     /*! \brief function to call when DATA.req received from L2 */</span><br><span>        trx_sched_dl_func       *dl_fn;</span><br><span>      /*! \brief function to call when burst received from PHY */</span><br><span>  trx_sched_ul_func       *ul_fn;</span><br><span style="color: hsl(0, 100%, 40%);">- /*! \brief is this channel automatically active at start? */</span><br><span style="color: hsl(0, 100%, 40%);">-    int                     auto_active;</span><br><span style="color: hsl(120, 100%, 40%);">+  /*! \brief channel flags, see TRX_CHAN_FLAG_* */</span><br><span style="color: hsl(120, 100%, 40%);">+      uint8_t                 flags;</span><br><span> };</span><br><span> extern const struct trx_chan_desc trx_chan_desc[_TRX_CHAN_MAX];</span><br><span> </span><br><span>diff --git a/src/common/scheduler.c b/src/common/scheduler.c</span><br><span>index f705ddf..6ad2e1f 100644</span><br><span>--- a/src/common/scheduler.c</span><br><span>+++ b/src/common/scheduler.c</span><br><span>@@ -29,6 +29,8 @@</span><br><span> #include <osmocom/core/msgb.h></span><br><span> #include <osmocom/core/talloc.h></span><br><span> #include <osmocom/core/bits.h></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/protocol/gsm_08_58.h></span><br><span> #include <osmocom/gsm/a5.h></span><br><span> </span><br><span> #include <osmo-bts/gsm_data.h></span><br><span>@@ -111,95 +113,448 @@</span><br><span>        0,0,1,0,1,1,0,1,0,1,0,0,0,1,0,1,0,1,1,1,0,1,1,0,0,0,0,1,1,0,1,1,</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*</span><br><span style="color: hsl(0, 100%, 40%);">- * subchannel description structure</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(120, 100%, 40%);">+/* Logical channel (TRXC_*) description */</span><br><span> const struct trx_chan_desc trx_chan_desc[_TRX_CHAN_MAX] = {</span><br><span style="color: hsl(0, 100%, 40%);">-  /*       is_pdch chan_type       chan_nr link_id         name            rts_fn          dl_fn           ul_fn   auto_active */</span><br><span style="color: hsl(0, 100%, 40%);">-      {   0,      TRXC_IDLE,      0,      LID_DEDIC,      "IDLE",               NULL,           tx_idle_fn,     NULL,           1 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_FCCH,      0,      LID_DEDIC,      "FCCH",               NULL,           tx_fcch_fn,     NULL,           1 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SCH,       0,      LID_DEDIC,      "SCH",                NULL,           tx_sch_fn,      NULL,           1 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_BCCH,      0x80,   LID_DEDIC,      "BCCH",               rts_data_fn,    tx_data_fn,     NULL,           1 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_RACH,      0x88,   LID_DEDIC,      "RACH",               NULL,           NULL,           rx_rach_fn,     1 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_CCCH,      0x90,   LID_DEDIC,      "CCCH",               rts_data_fn,    tx_data_fn,     NULL,           1 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_TCHF,      0x08,   LID_DEDIC,      "TCH/F",      rts_tchf_fn,    tx_tchf_fn,     rx_tchf_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_TCHH_0,    0x10,   LID_DEDIC,      "TCH/H(0)",   rts_tchh_fn,    tx_tchh_fn,     rx_tchh_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_TCHH_1,    0x18,   LID_DEDIC,      "TCH/H(1)",   rts_tchh_fn,    tx_tchh_fn,     rx_tchh_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SDCCH4_0,  0x20,   LID_DEDIC,      "SDCCH/4(0)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SDCCH4_1,  0x28,   LID_DEDIC,      "SDCCH/4(1)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SDCCH4_2,  0x30,   LID_DEDIC,      "SDCCH/4(2)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SDCCH4_3,  0x38,   LID_DEDIC,      "SDCCH/4(3)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SDCCH8_0,  0x40,   LID_DEDIC,      "SDCCH/8(0)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SDCCH8_1,  0x48,   LID_DEDIC,      "SDCCH/8(1)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SDCCH8_2,  0x50,   LID_DEDIC,      "SDCCH/8(2)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SDCCH8_3,  0x58,   LID_DEDIC,      "SDCCH/8(3)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SDCCH8_4,  0x60,   LID_DEDIC,      "SDCCH/8(4)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SDCCH8_5,  0x68,   LID_DEDIC,      "SDCCH/8(5)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SDCCH8_6,  0x70,   LID_DEDIC,      "SDCCH/8(6)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SDCCH8_7,  0x78,   LID_DEDIC,      "SDCCH/8(7)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCHTF,   0x08,   LID_SACCH,      "SACCH/TF",   rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCHTH_0, 0x10,   LID_SACCH,      "SACCH/TH(0)",        rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCHTH_1, 0x18,   LID_SACCH,      "SACCH/TH(1)",        rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCH4_0,  0x20,   LID_SACCH,      "SACCH/4(0)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCH4_1,  0x28,   LID_SACCH,      "SACCH/4(1)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCH4_2,  0x30,   LID_SACCH,      "SACCH/4(2)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCH4_3,  0x38,   LID_SACCH,      "SACCH/4(3)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCH8_0,  0x40,   LID_SACCH,      "SACCH/8(0)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCH8_1,  0x48,   LID_SACCH,      "SACCH/8(1)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCH8_2,  0x50,   LID_SACCH,      "SACCH/8(2)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCH8_3,  0x58,   LID_SACCH,      "SACCH/8(3)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCH8_4,  0x60,   LID_SACCH,      "SACCH/8(4)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCH8_5,  0x68,   LID_SACCH,      "SACCH/8(5)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCH8_6,  0x70,   LID_SACCH,      "SACCH/8(6)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_SACCH8_7,  0x78,   LID_SACCH,      "SACCH/8(7)", rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     1,      TRXC_PDTCH,     0xc0,   LID_DEDIC,      "PDTCH",      rts_data_fn,    tx_pdtch_fn,    rx_pdtch_fn,    0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     1,      TRXC_PTCCH,     0xc0,   LID_DEDIC,      "PTCCH",      rts_data_fn,    tx_data_fn,     rx_data_fn,     0 },</span><br><span style="color: hsl(0, 100%, 40%);">-      {     0,      TRXC_CBCH,      0xc8,   LID_DEDIC,      "CBCH",               rts_data_fn,    tx_data_fn,     NULL,           1 },</span><br><span style="color: hsl(0, 100%, 40%);">-};</span><br><span style="color: hsl(120, 100%, 40%);">+        [TRXC_IDLE] = {</span><br><span style="color: hsl(120, 100%, 40%);">+               .name = "IDLE",</span><br><span style="color: hsl(120, 100%, 40%);">+             .desc = "Idle channel",</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-const struct value_string trx_chan_type_names[] = {</span><br><span style="color: hsl(0, 100%, 40%);">-        OSMO_VALUE_STRING(TRXC_IDLE),</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_VALUE_STRING(TRXC_FCCH),</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_VALUE_STRING(TRXC_SCH),</span><br><span style="color: hsl(0, 100%, 40%);">-    OSMO_VALUE_STRING(TRXC_BCCH),</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_VALUE_STRING(TRXC_RACH),</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_VALUE_STRING(TRXC_CCCH),</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_VALUE_STRING(TRXC_TCHF),</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_VALUE_STRING(TRXC_TCHH_0),</span><br><span style="color: hsl(0, 100%, 40%);">- OSMO_VALUE_STRING(TRXC_TCHH_1),</span><br><span style="color: hsl(0, 100%, 40%);">- OSMO_VALUE_STRING(TRXC_SDCCH4_0),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SDCCH4_1),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SDCCH4_2),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SDCCH4_3),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SDCCH8_0),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SDCCH8_1),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SDCCH8_2),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SDCCH8_3),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SDCCH8_4),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SDCCH8_5),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SDCCH8_6),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SDCCH8_7),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SACCHTF),</span><br><span style="color: hsl(0, 100%, 40%);">-        OSMO_VALUE_STRING(TRXC_SACCHTH_0),</span><br><span style="color: hsl(0, 100%, 40%);">-      OSMO_VALUE_STRING(TRXC_SACCHTH_1),</span><br><span style="color: hsl(0, 100%, 40%);">-      OSMO_VALUE_STRING(TRXC_SACCH4_0),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SACCH4_1),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SACCH4_2),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SACCH4_3),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SACCH8_0),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SACCH8_1),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SACCH8_2),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SACCH8_3),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SACCH8_4),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SACCH8_5),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SACCH8_6),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_SACCH8_7),</span><br><span style="color: hsl(0, 100%, 40%);">-       OSMO_VALUE_STRING(TRXC_PDTCH),</span><br><span style="color: hsl(0, 100%, 40%);">-  OSMO_VALUE_STRING(TRXC_PTCCH),</span><br><span style="color: hsl(0, 100%, 40%);">-  OSMO_VALUE_STRING(TRXC_CBCH),</span><br><span style="color: hsl(0, 100%, 40%);">-   OSMO_VALUE_STRING(_TRX_CHAN_MAX),</span><br><span style="color: hsl(0, 100%, 40%);">-       { 0, NULL }</span><br><span style="color: hsl(120, 100%, 40%);">+           /* On C0, BTS needs to ensure discontinuous burst transmission.</span><br><span style="color: hsl(120, 100%, 40%);">+                * Therefore we need to send dummy bursts on IDLE slots. */</span><br><span style="color: hsl(120, 100%, 40%);">+           .flags = TRX_CHAN_FLAG_AUTO_ACTIVE,</span><br><span style="color: hsl(120, 100%, 40%);">+           .dl_fn = tx_idle_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_FCCH] = {</span><br><span style="color: hsl(120, 100%, 40%);">+               .name = "FCCH", /* 3GPP TS 05.02, section 3.3.2.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+                .desc = "Frequency correction channel",</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Tx only, frequency correction bursts */</span><br><span style="color: hsl(120, 100%, 40%);">+            .flags = TRX_CHAN_FLAG_AUTO_ACTIVE,</span><br><span style="color: hsl(120, 100%, 40%);">+           .dl_fn = tx_fcch_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SCH] = {</span><br><span style="color: hsl(120, 100%, 40%);">+                .name = "SCH", /* 3GPP TS 05.02, section 3.3.2.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+         .desc = "Synchronization channel",</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+                /* Tx only, synchronization bursts */</span><br><span style="color: hsl(120, 100%, 40%);">+         .flags = TRX_CHAN_FLAG_AUTO_ACTIVE,</span><br><span style="color: hsl(120, 100%, 40%);">+           .dl_fn = tx_sch_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+   },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_BCCH] = {</span><br><span style="color: hsl(120, 100%, 40%);">+               .name = "BCCH", /* 3GPP TS 05.02, section 3.3.2.3 */</span><br><span style="color: hsl(120, 100%, 40%);">+                .desc = "Broadcast control channel",</span><br><span style="color: hsl(120, 100%, 40%);">+                .chan_nr = RSL_CHAN_BCCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Tx only, xCCH convolutional coding (3GPP TS 05.03, section 4.4),</span><br><span style="color: hsl(120, 100%, 40%);">+            * regular interleaving (3GPP TS 05.02, clause 7, table 3):</span><br><span style="color: hsl(120, 100%, 40%);">+            * a L2 frame is interleaved over 4 consecutive bursts. */</span><br><span style="color: hsl(120, 100%, 40%);">+            .flags = TRX_CHAN_FLAG_AUTO_ACTIVE,</span><br><span style="color: hsl(120, 100%, 40%);">+           .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_RACH] = {</span><br><span style="color: hsl(120, 100%, 40%);">+               .name = "RACH", /* 3GPP TS 05.02, section 3.3.3.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+                .desc = "Random access channel",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_RACH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+           /* Rx only, RACH convolutional coding (3GPP TS 05.03, section 4.6). */</span><br><span style="color: hsl(120, 100%, 40%);">+                .flags = TRX_CHAN_FLAG_AUTO_ACTIVE,</span><br><span style="color: hsl(120, 100%, 40%);">+           .ul_fn = rx_rach_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_CCCH] = {</span><br><span style="color: hsl(120, 100%, 40%);">+               .name = "CCCH", /* 3GPP TS 05.02, section 3.3.3.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+                .desc = "Common control channel",</span><br><span style="color: hsl(120, 100%, 40%);">+           .chan_nr = RSL_CHAN_PCH_AGCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Tx only, xCCH convolutional coding (3GPP TS 05.03, section 4.4),</span><br><span style="color: hsl(120, 100%, 40%);">+            * regular interleaving (3GPP TS 05.02, clause 7, table 3):</span><br><span style="color: hsl(120, 100%, 40%);">+            * a L2 frame is interleaved over 4 consecutive bursts. */</span><br><span style="color: hsl(120, 100%, 40%);">+            .flags = TRX_CHAN_FLAG_AUTO_ACTIVE,</span><br><span style="color: hsl(120, 100%, 40%);">+           .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_TCHF] = {</span><br><span style="color: hsl(120, 100%, 40%);">+               .name = "TCH/F", /* 3GPP TS 05.02, section 3.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+           .desc = "Full Rate traffic channel",</span><br><span style="color: hsl(120, 100%, 40%);">+                .chan_nr = RSL_CHAN_Bm_ACCHs,</span><br><span style="color: hsl(120, 100%, 40%);">+         .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Rx and Tx, multiple convolutional coding types (3GPP TS 05.03,</span><br><span style="color: hsl(120, 100%, 40%);">+              * chapter 3), block diagonal interleaving (3GPP TS 05.02, clause 7):</span><br><span style="color: hsl(120, 100%, 40%);">+          *</span><br><span style="color: hsl(120, 100%, 40%);">+             *   - a traffic frame is interleaved over 8 consecutive bursts</span><br><span style="color: hsl(120, 100%, 40%);">+                *     using the even numbered bits of the first 4 bursts</span><br><span style="color: hsl(120, 100%, 40%);">+              *     and odd numbered bits of the last 4 bursts;</span><br><span style="color: hsl(120, 100%, 40%);">+             *   - a FACCH/F frame 'steals' (replaces) one traffic frame,</span><br><span style="color: hsl(120, 100%, 40%);">+          *     interleaving is done in the same way. */</span><br><span style="color: hsl(120, 100%, 40%);">+               .rts_fn = rts_tchf_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_tchf_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_tchf_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_TCHH_0] = {</span><br><span style="color: hsl(120, 100%, 40%);">+             .name = "TCH/H(0)", /* 3GPP TS 05.02, section 3.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+                .desc = "Half Rate traffic channel (sub-channel 0)",</span><br><span style="color: hsl(120, 100%, 40%);">+                .chan_nr = RSL_CHAN_Lm_ACCHs + (0 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+                .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Rx and Tx, multiple convolutional coding types (3GPP TS 05.03,</span><br><span style="color: hsl(120, 100%, 40%);">+              * chapter 3), block diagonal interleaving (3GPP TS 05.02, clause 7):</span><br><span style="color: hsl(120, 100%, 40%);">+          *</span><br><span style="color: hsl(120, 100%, 40%);">+             *   - a traffic frame is interleaved over 6 consecutive bursts</span><br><span style="color: hsl(120, 100%, 40%);">+                *     using the even numbered bits of the first 2 bursts,</span><br><span style="color: hsl(120, 100%, 40%);">+             *     all bits of the middle two 2 bursts,</span><br><span style="color: hsl(120, 100%, 40%);">+            *     and odd numbered bits of the last 2 bursts;</span><br><span style="color: hsl(120, 100%, 40%);">+             *   - a FACCH/H frame 'steals' (replaces) two traffic frames,</span><br><span style="color: hsl(120, 100%, 40%);">+                 *     interleaving is done over 4 consecutive bursts,</span><br><span style="color: hsl(120, 100%, 40%);">+                 *     the same as given for a TCH/FS. */</span><br><span style="color: hsl(120, 100%, 40%);">+             .rts_fn = rts_tchh_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_tchh_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_tchh_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_TCHH_1] = {</span><br><span style="color: hsl(120, 100%, 40%);">+             .name = "TCH/H(1)", /* 3GPP TS 05.02, section 3.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+                .desc = "Half Rate traffic channel (sub-channel 1)",</span><br><span style="color: hsl(120, 100%, 40%);">+                .chan_nr = RSL_CHAN_Lm_ACCHs + (1 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+                .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_TCHH_0, see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+             .rts_fn = rts_tchh_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_tchh_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_tchh_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH4_0] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SDCCH/4(0)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Stand-alone dedicated control channel (sub-channel 0)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_SDCCH4_ACCH + (0 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+                .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH4_1] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SDCCH/4(1)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Stand-alone dedicated control channel (sub-channel 1)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_SDCCH4_ACCH + (1 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+                .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH4_2] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SDCCH/4(2)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Stand-alone dedicated control channel (sub-channel 2)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_SDCCH4_ACCH + (2 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+                .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH4_3] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SDCCH/4(3)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Stand-alone dedicated control channel (sub-channel 3)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_SDCCH4_ACCH + (3 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+                .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH8_0] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SDCCH/8(0)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Stand-alone dedicated control channel (sub-channel 0)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_SDCCH8_ACCH + (0 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH4_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH8_1] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SDCCH/8(1)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Stand-alone dedicated control channel (sub-channel 1)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_SDCCH8_ACCH + (1 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH4_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH8_2] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SDCCH/8(2)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Stand-alone dedicated control channel (sub-channel 2)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_SDCCH8_ACCH + (2 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH4_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH8_3] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SDCCH/8(3)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Stand-alone dedicated control channel (sub-channel 3)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_SDCCH8_ACCH + (3 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH4_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH8_4] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SDCCH/8(4)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Stand-alone dedicated control channel (sub-channel 4)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_SDCCH8_ACCH + (4 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH4_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH8_5] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SDCCH/8(5)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Stand-alone dedicated control channel (sub-channel 5)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_SDCCH8_ACCH + (5 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH4_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH8_6] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SDCCH/8(6)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Stand-alone dedicated control channel (sub-channel 6)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_SDCCH8_ACCH + (6 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH4_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SDCCH8_7] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SDCCH/8(7)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Stand-alone dedicated control channel (sub-channel 7)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_SDCCH8_ACCH + (7 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_DEDIC,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH4_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCHTF] = {</span><br><span style="color: hsl(120, 100%, 40%);">+            .name = "SACCH/TF", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+            .desc = "Slow TCH/F associated control channel",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_Bm_ACCHs,</span><br><span style="color: hsl(120, 100%, 40%);">+         .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+                .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCHTH_0] = {</span><br><span style="color: hsl(120, 100%, 40%);">+          .name = "SACCH/TH(0)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+         .desc = "Slow TCH/H associated control channel (sub-channel 0)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_Bm_ACCHs + (0 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+                .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+                .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCHTH_1] = {</span><br><span style="color: hsl(120, 100%, 40%);">+          .name = "SACCH/TH(1)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+         .desc = "Slow TCH/H associated control channel (sub-channel 1)",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_Bm_ACCHs + (1 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+                .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+                .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCH4_0] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SACCH/4(0)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Slow SDCCH/4 associated control channel (sub-channel 0)",</span><br><span style="color: hsl(120, 100%, 40%);">+          .chan_nr = RSL_CHAN_SDCCH4_ACCH + (0 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH4_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCH4_1] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SACCH/4(1)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Slow SDCCH/4 associated control channel (sub-channel 1)",</span><br><span style="color: hsl(120, 100%, 40%);">+          .chan_nr = RSL_CHAN_SDCCH4_ACCH + (1 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH4_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCH4_2] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SACCH/4(2)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Slow SDCCH/4 associated control channel (sub-channel 2)",</span><br><span style="color: hsl(120, 100%, 40%);">+          .chan_nr = RSL_CHAN_SDCCH4_ACCH + (2 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH4_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCH4_3] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SACCH/4(3)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Slow SDCCH/4 associated control channel (sub-channel 3)",</span><br><span style="color: hsl(120, 100%, 40%);">+          .chan_nr = RSL_CHAN_SDCCH4_ACCH + (3 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH4_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCH8_0] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SACCH/8(0)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Slow SDCCH/8 associated control channel (sub-channel 0)",</span><br><span style="color: hsl(120, 100%, 40%);">+          .chan_nr = RSL_CHAN_SDCCH8_ACCH + (0 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH8_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCH8_1] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SACCH/8(1)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Slow SDCCH/8 associated control channel (sub-channel 1)",</span><br><span style="color: hsl(120, 100%, 40%);">+          .chan_nr = RSL_CHAN_SDCCH8_ACCH + (1 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH8_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCH8_2] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SACCH/8(2)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Slow SDCCH/8 associated control channel (sub-channel 2)",</span><br><span style="color: hsl(120, 100%, 40%);">+          .chan_nr = RSL_CHAN_SDCCH8_ACCH + (2 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH8_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCH8_3] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SACCH/8(3)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Slow SDCCH/8 associated control channel (sub-channel 3)",</span><br><span style="color: hsl(120, 100%, 40%);">+          .chan_nr = RSL_CHAN_SDCCH8_ACCH + (3 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH8_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCH8_4] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SACCH/8(4)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Slow SDCCH/8 associated control channel (sub-channel 4)",</span><br><span style="color: hsl(120, 100%, 40%);">+          .chan_nr = RSL_CHAN_SDCCH8_ACCH + (4 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH8_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCH8_5] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SACCH/8(5)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Slow SDCCH/8 associated control channel (sub-channel 5)",</span><br><span style="color: hsl(120, 100%, 40%);">+          .chan_nr = RSL_CHAN_SDCCH8_ACCH + (5 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH8_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCH8_6] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SACCH/8(6)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Slow SDCCH/8 associated control channel (sub-channel 6)",</span><br><span style="color: hsl(120, 100%, 40%);">+          .chan_nr = RSL_CHAN_SDCCH8_ACCH + (6 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH8_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_SACCH8_7] = {</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "SACCH/8(7)", /* 3GPP TS 05.02, section 3.3.4.1 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Slow SDCCH/8 associated control channel (sub-channel 7)",</span><br><span style="color: hsl(120, 100%, 40%);">+          .chan_nr = RSL_CHAN_SDCCH8_ACCH + (7 << 3),</span><br><span style="color: hsl(120, 100%, 40%);">+             .link_id = LID_SACCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+               /* Same as for TRXC_BCCH and TRXC_SDCCH8_* (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+              .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_PDTCH] = {</span><br><span style="color: hsl(120, 100%, 40%);">+              .name = "PDTCH", /* 3GPP TS 05.02, sections 3.2.4, 3.3.2.4 */</span><br><span style="color: hsl(120, 100%, 40%);">+               .desc = "Packet data traffic & control channel",</span><br><span style="color: hsl(120, 100%, 40%);">+                .chan_nr = RSL_CHAN_OSMO_PDCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Rx and Tx, multiple coding schemes: CS-2..4 and MCS-1..9 (3GPP TS</span><br><span style="color: hsl(120, 100%, 40%);">+           * 05.03, chapter 5), regular interleaving as specified for xCCH.</span><br><span style="color: hsl(120, 100%, 40%);">+              * NOTE: the burst buffer is three times bigger because the</span><br><span style="color: hsl(120, 100%, 40%);">+            * payload of EDGE bursts is three times longer. */</span><br><span style="color: hsl(120, 100%, 40%);">+           .flags = TRX_CHAN_FLAG_PDCH,</span><br><span style="color: hsl(120, 100%, 40%);">+          .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_pdtch_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+         .ul_fn = rx_pdtch_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+ },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_PTCCH] = {</span><br><span style="color: hsl(120, 100%, 40%);">+              .name = "PTCCH", /* 3GPP TS 05.02, section 3.3.4.2 */</span><br><span style="color: hsl(120, 100%, 40%);">+               .desc = "Packet Timing advance control channel",</span><br><span style="color: hsl(120, 100%, 40%);">+            .chan_nr = RSL_CHAN_OSMO_PDCH,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+              /* Same as for TRXC_BCCH (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+                .flags = TRX_CHAN_FLAG_PDCH,</span><br><span style="color: hsl(120, 100%, 40%);">+          .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+          .ul_fn = rx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span style="color: hsl(120, 100%, 40%);">+    [TRXC_CBCH] = {</span><br><span style="color: hsl(120, 100%, 40%);">+               /* TODO: distinguish CBCH on SDCCH/4 and SDCCH/8 */</span><br><span style="color: hsl(120, 100%, 40%);">+           .name = "CBCH", /* 3GPP TS 05.02, section 3.3.5 */</span><br><span style="color: hsl(120, 100%, 40%);">+          .desc = "Cell Broadcast channel",</span><br><span style="color: hsl(120, 100%, 40%);">+           .chan_nr = RSL_CHAN_OSMO_CBCH4,</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Tx only, same as for TRXC_BCCH (xCCH), see above. */</span><br><span style="color: hsl(120, 100%, 40%);">+               .flags = TRX_CHAN_FLAG_AUTO_ACTIVE,</span><br><span style="color: hsl(120, 100%, 40%);">+           .rts_fn = rts_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+                .dl_fn = tx_data_fn,</span><br><span style="color: hsl(120, 100%, 40%);">+  },</span><br><span> };</span><br><span> </span><br><span> /*</span><br><span>@@ -311,7 +666,7 @@</span><br><span>                          "type %s is already disabled. If this happens in "</span><br><span>                         "conjunction with PCU, increase 'rts-advance' by 5.\n",</span><br><span>                            prim_fn, get_lchan_by_chan_nr(l1t->trx, chan_nr)->name,</span><br><span style="color: hsl(0, 100%, 40%);">-                           get_value_string(trx_chan_type_names, chan));</span><br><span style="color: hsl(120, 100%, 40%);">+                         trx_chan_desc[chan].name);</span><br><span>                      /* unlink and free message */</span><br><span>                        llist_del(&msg->list);</span><br><span>                        msgb_free(msg);</span><br><span>@@ -608,10 +963,10 @@</span><br><span>      for (i = 0; i < _TRX_CHAN_MAX; i++) {</span><br><span>             struct l1sched_chan_state *chan_state;</span><br><span>               chan_state = &l1ts->chan_state[i];</span><br><span style="color: hsl(0, 100%, 40%);">-               /* skip if pchan type does not match pdch flag */</span><br><span style="color: hsl(0, 100%, 40%);">-               if ((trx_sched_multiframes[l1ts->mf_index].pchan</span><br><span style="color: hsl(0, 100%, 40%);">-                                                     == GSM_PCHAN_PDCH)</span><br><span style="color: hsl(0, 100%, 40%);">-                                              != trx_chan_desc[i].pdch)</span><br><span style="color: hsl(120, 100%, 40%);">+             /* Skip if pchan type does not match pdch flag.</span><br><span style="color: hsl(120, 100%, 40%);">+                * FIXME: Is it possible at all? Clarify if so. */</span><br><span style="color: hsl(120, 100%, 40%);">+            if ((trx_sched_multiframes[l1ts->mf_index].pchan == GSM_PCHAN_PDCH)</span><br><span style="color: hsl(120, 100%, 40%);">+                    && !(trx_chan_desc[i].flags & TRX_CHAN_FLAG_PDCH))</span><br><span>                   continue;</span><br><span>            if (trx_chan_desc[i].chan_nr == (chan_nr & 0xf8)</span><br><span>                  && trx_chan_desc[i].link_id == link_id) {</span><br><span>@@ -727,7 +1082,7 @@</span><br><span>    /* look for all matching chan_nr */</span><br><span>  for (i = 0; i < _TRX_CHAN_MAX; i++) {</span><br><span>             /* skip if pchan type */</span><br><span style="color: hsl(0, 100%, 40%);">-                if (trx_chan_desc[i].pdch)</span><br><span style="color: hsl(120, 100%, 40%);">+            if (trx_chan_desc[i].flags & TRX_CHAN_FLAG_PDCH)</span><br><span>                         continue;</span><br><span>            if (trx_chan_desc[i].chan_nr == (chan_nr & 0xf8)) {</span><br><span>                      chan_state = &l1ts->chan_state[i];</span><br><span>@@ -782,8 +1137,7 @@</span><br><span>             return 0;</span><br><span> </span><br><span>        /* check if channel is active */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (!trx_chan_desc[chan].auto_active</span><br><span style="color: hsl(0, 100%, 40%);">-     && !l1ts->chan_state[chan].active)</span><br><span style="color: hsl(120, 100%, 40%);">+        if (!TRX_CHAN_IS_ACTIVE(&l1ts->chan_state[chan], chan))</span><br><span>               return -EINVAL;</span><br><span> </span><br><span>  return func(l1t, tn, fn, frame->dl_chan);</span><br><span>@@ -816,7 +1170,7 @@</span><br><span>  l1cs = &l1ts->chan_state[chan];</span><br><span> </span><br><span>   /* check if channel is active */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (!trx_chan_desc[chan].auto_active && !l1cs->active) {</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!TRX_CHAN_IS_ACTIVE(l1cs, chan)) {</span><br><span>               if (nbits)</span><br><span>                   *nbits = GSM_BURST_LEN;</span><br><span>              goto no_data;</span><br><span>@@ -984,7 +1338,7 @@</span><br><span>         func = trx_chan_desc[chan].ul_fn;</span><br><span> </span><br><span>        /* check if channel is active */</span><br><span style="color: hsl(0, 100%, 40%);">-        if (!trx_chan_desc[chan].auto_active && !l1cs->active)</span><br><span style="color: hsl(120, 100%, 40%);">+     if (!TRX_CHAN_IS_ACTIVE(l1cs, chan))</span><br><span>                 return -EINVAL;</span><br><span> </span><br><span>  /* omit bursts which have no handler, like IDLE bursts */</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bts/+/14322">change 14322</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/c/osmo-bts/+/14322"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bts </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I9d5d49ec569f133d37b8164b22607d4700474315 </div>
<div style="display:none"> Gerrit-Change-Number: 14322 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Vadim Yanitskiy <axilirator@gmail.com> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>